mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
internal improvement of insertionCalc
This commit is contained in:
parent
59319ff355
commit
211d56d928
14 changed files with 120 additions and 70 deletions
|
|
@ -3,6 +3,8 @@ package algorithms;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import basics.route.End;
|
||||||
|
import basics.route.Start;
|
||||||
import basics.route.TourActivity;
|
import basics.route.TourActivity;
|
||||||
import basics.route.VehicleRoute;
|
import basics.route.VehicleRoute;
|
||||||
|
|
||||||
|
|
@ -10,11 +12,11 @@ class BackwardInTimeListeners {
|
||||||
|
|
||||||
interface BackwardInTimeListener{
|
interface BackwardInTimeListener{
|
||||||
|
|
||||||
public void start(VehicleRoute route);
|
public void start(VehicleRoute route, End end, double latestArrivalTime);
|
||||||
|
|
||||||
public void prevActivity(TourActivity act, double latestDepartureTime, double latestOperationStartTime);
|
public void prevActivity(TourActivity act, double latestDepartureTime, double latestOperationStartTime);
|
||||||
|
|
||||||
public void finnish();
|
public void end(Start start, double latestDepartureTime);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -24,8 +26,8 @@ class BackwardInTimeListeners {
|
||||||
listeners.add(l);
|
listeners.add(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start(VehicleRoute route){
|
public void start(VehicleRoute route, End end, double latestArrivalTime){
|
||||||
for(BackwardInTimeListener l : listeners){ l.start(route); }
|
for(BackwardInTimeListener l : listeners){ l.start(route, end, latestArrivalTime); }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -37,14 +39,14 @@ class BackwardInTimeListeners {
|
||||||
*
|
*
|
||||||
* @param act
|
* @param act
|
||||||
* @param latestDepartureTime
|
* @param latestDepartureTime
|
||||||
* @param latestOperationStartTime
|
* @param latestArrivalTime
|
||||||
*/
|
*/
|
||||||
public void prevActivity(TourActivity act, double latestDepartureTime, double latestOperationStartTime){
|
public void prevActivity(TourActivity act, double latestDepartureTime, double latestArrivalTime){
|
||||||
for(BackwardInTimeListener l : listeners){ l.prevActivity(act,latestDepartureTime,latestOperationStartTime); }
|
for(BackwardInTimeListener l : listeners){ l.prevActivity(act,latestDepartureTime,latestArrivalTime); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public void finnish(){
|
public void end(Start start, double latestDepartureTime){
|
||||||
for(BackwardInTimeListener l : listeners){ l.finnish(); }
|
for(BackwardInTimeListener l : listeners){ l.end(start, latestDepartureTime); }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -241,6 +241,14 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if(memorySize==0){
|
||||||
|
InsertionData insertion = bestInsertionsQueue.poll();
|
||||||
|
if(insertion != null){
|
||||||
|
best_insertion_index = insertion.getDeliveryInsertionIndex();
|
||||||
|
best_insertion_costs = insertion.getInsertionCost();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for(int i=0;i<memorySize;i++){
|
for(int i=0;i<memorySize;i++){
|
||||||
InsertionData data = bestInsertionsQueue.poll();
|
InsertionData data = bestInsertionsQueue.poll();
|
||||||
if(data == null){
|
if(data == null){
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@ package algorithms;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import basics.route.End;
|
||||||
|
import basics.route.Start;
|
||||||
import basics.route.TourActivity;
|
import basics.route.TourActivity;
|
||||||
import basics.route.VehicleRoute;
|
import basics.route.VehicleRoute;
|
||||||
|
|
||||||
|
|
@ -10,11 +12,11 @@ class ForwardInTimeListeners {
|
||||||
|
|
||||||
interface ForwardInTimeListener{
|
interface ForwardInTimeListener{
|
||||||
|
|
||||||
public void start(VehicleRoute route);
|
public void start(VehicleRoute route, Start start, double departureTime);
|
||||||
|
|
||||||
public void nextActivity(TourActivity act, double arrTime,double endTime);
|
public void nextActivity(TourActivity act, double arrTime,double endTime);
|
||||||
|
|
||||||
public void finnish();
|
public void end(End end, double arrivalTime);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -24,16 +26,16 @@ class ForwardInTimeListeners {
|
||||||
listeners.add(l);
|
listeners.add(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void start(VehicleRoute route){
|
public void start(VehicleRoute route, Start start, double departureTime){
|
||||||
for(ForwardInTimeListener l : listeners){ l.start(route); }
|
for(ForwardInTimeListener l : listeners){ l.start(route, start, departureTime); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public void nextActivity(TourActivity act, double arrTime, double endTime){
|
public void nextActivity(TourActivity act, double arrTime, double endTime){
|
||||||
for(ForwardInTimeListener l : listeners){ l.nextActivity(act,arrTime,endTime); }
|
for(ForwardInTimeListener l : listeners){ l.nextActivity(act,arrTime,endTime); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public void finnish(){
|
public void end(End end, double arrivalTime){
|
||||||
for(ForwardInTimeListener l : listeners){ l.finnish(); }
|
for(ForwardInTimeListener l : listeners){ l.end(end, arrivalTime); }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,22 +46,29 @@ class IterateRouteBackwardInTime implements VehicleRouteUpdater{
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public void iterate(VehicleRoute vehicleRoute) {
|
public void iterate(VehicleRoute vehicleRoute) {
|
||||||
listeners.start(vehicleRoute);
|
listeners.start(vehicleRoute, vehicleRoute.getEnd(), vehicleRoute.getEnd().getTheoreticalLatestOperationStartTime());
|
||||||
|
|
||||||
Iterator<TourActivity> reverseActIter = vehicleRoute.getTourActivities().reverseActivityIterator();
|
Iterator<TourActivity> reverseActIter = vehicleRoute.getTourActivities().reverseActivityIterator();
|
||||||
TourActivity prevAct;
|
TourActivity prevAct;
|
||||||
prevAct = vehicleRoute.getEnd();
|
prevAct = vehicleRoute.getEnd();
|
||||||
double startAtPrevAct = prevAct.getTheoreticalLatestOperationStartTime();
|
double latestArrivalTimeAtPrevAct = prevAct.getTheoreticalLatestOperationStartTime();
|
||||||
listeners.prevActivity(prevAct, startAtPrevAct, startAtPrevAct);
|
|
||||||
while(reverseActIter.hasNext()){
|
while(reverseActIter.hasNext()){
|
||||||
TourActivity currAct = reverseActIter.next();
|
TourActivity currAct = reverseActIter.next();
|
||||||
double latestDepTimeAtCurrAct = startAtPrevAct - transportTime.getBackwardTransportTime(currAct.getLocationId(), prevAct.getLocationId(), startAtPrevAct, vehicleRoute.getDriver(),vehicleRoute.getVehicle());
|
double latestDepTimeAtCurrAct = latestArrivalTimeAtPrevAct - transportTime.getBackwardTransportTime(currAct.getLocationId(), prevAct.getLocationId(), latestArrivalTimeAtPrevAct, vehicleRoute.getDriver(),vehicleRoute.getVehicle());
|
||||||
double potentialLatestOperationStartTimeAtCurrAct = latestDepTimeAtCurrAct - currAct.getOperationTime();
|
double potentialLatestArrivalTimeAtCurrAct = latestDepTimeAtCurrAct - currAct.getOperationTime();
|
||||||
double latestOperationStartTime = Math.min(currAct.getTheoreticalLatestOperationStartTime(), potentialLatestOperationStartTimeAtCurrAct);
|
double latestArrivalTime = Math.min(currAct.getTheoreticalLatestOperationStartTime(), potentialLatestArrivalTimeAtCurrAct);
|
||||||
listeners.prevActivity(currAct, latestDepTimeAtCurrAct, latestOperationStartTime);
|
|
||||||
|
listeners.prevActivity(currAct, latestDepTimeAtCurrAct, latestArrivalTime);
|
||||||
|
|
||||||
prevAct = currAct;
|
prevAct = currAct;
|
||||||
startAtPrevAct = latestOperationStartTime;
|
latestArrivalTimeAtPrevAct = latestArrivalTime;
|
||||||
}
|
}
|
||||||
listeners.finnish();
|
|
||||||
|
TourActivity currAct = vehicleRoute.getStart();
|
||||||
|
double latestDepTimeAtCurrAct = latestArrivalTimeAtPrevAct - transportTime.getBackwardTransportTime(currAct.getLocationId(), prevAct.getLocationId(), latestArrivalTimeAtPrevAct, vehicleRoute.getDriver(),vehicleRoute.getVehicle());
|
||||||
|
|
||||||
|
listeners.end(vehicleRoute.getStart(), latestDepTimeAtCurrAct);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addListener(BackwardInTimeListener l){ listeners.addListener(l); }
|
public void addListener(BackwardInTimeListener l){ listeners.addListener(l); }
|
||||||
|
|
|
||||||
|
|
@ -48,15 +48,13 @@ class IterateRouteForwardInTime implements VehicleRouteUpdater{
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public void iterate(VehicleRoute vehicleRoute) {
|
public void iterate(VehicleRoute vehicleRoute) {
|
||||||
listeners.start(vehicleRoute);
|
listeners.start(vehicleRoute, vehicleRoute.getStart(), vehicleRoute.getStart().getEndTime());
|
||||||
|
|
||||||
Vehicle vehicle = vehicleRoute.getVehicle();
|
Vehicle vehicle = vehicleRoute.getVehicle();
|
||||||
Driver driver = vehicleRoute.getDriver();
|
Driver driver = vehicleRoute.getDriver();
|
||||||
TourActivity prevAct = vehicleRoute.getStart();
|
TourActivity prevAct = vehicleRoute.getStart();
|
||||||
double startAtPrevAct = prevAct.getEndTime();
|
double startAtPrevAct = prevAct.getEndTime();
|
||||||
|
|
||||||
listeners.nextActivity(prevAct,startAtPrevAct,startAtPrevAct);
|
|
||||||
|
|
||||||
for(TourActivity currentAct : vehicleRoute.getTourActivities().getActivities()){
|
for(TourActivity currentAct : vehicleRoute.getTourActivities().getActivities()){
|
||||||
double transportTime = this.transportTime.getTransportTime(prevAct.getLocationId(), currentAct.getLocationId(), startAtPrevAct, driver, vehicle);
|
double transportTime = this.transportTime.getTransportTime(prevAct.getLocationId(), currentAct.getLocationId(), startAtPrevAct, driver, vehicle);
|
||||||
double arrivalTimeAtCurrAct = startAtPrevAct + transportTime;
|
double arrivalTimeAtCurrAct = startAtPrevAct + transportTime;
|
||||||
|
|
@ -73,9 +71,7 @@ class IterateRouteForwardInTime implements VehicleRouteUpdater{
|
||||||
double transportTime = this.transportTime.getTransportTime(prevAct.getLocationId(), currentAct.getLocationId(), startAtPrevAct, driver, vehicle);
|
double transportTime = this.transportTime.getTransportTime(prevAct.getLocationId(), currentAct.getLocationId(), startAtPrevAct, driver, vehicle);
|
||||||
double arrivalTimeAtCurrAct = startAtPrevAct + transportTime;
|
double arrivalTimeAtCurrAct = startAtPrevAct + transportTime;
|
||||||
|
|
||||||
listeners.nextActivity(currentAct,arrivalTimeAtCurrAct,arrivalTimeAtCurrAct);
|
listeners.end(vehicleRoute.getEnd(), arrivalTimeAtCurrAct);
|
||||||
listeners.finnish();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addListener(ForwardInTimeListener l){
|
public void addListener(ForwardInTimeListener l){
|
||||||
|
|
|
||||||
|
|
@ -2,25 +2,30 @@ package algorithms;
|
||||||
|
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
|
import algorithms.ForwardInTimeListeners.ForwardInTimeListener;
|
||||||
|
import basics.route.End;
|
||||||
|
import basics.route.Start;
|
||||||
import basics.route.TourActivity;
|
import basics.route.TourActivity;
|
||||||
import basics.route.VehicleRoute;
|
import basics.route.VehicleRoute;
|
||||||
import algorithms.ForwardInTimeListeners.ForwardInTimeListener;
|
|
||||||
|
|
||||||
class UpdateActivityTimes implements ForwardInTimeListener{
|
class UpdateActivityTimes implements ForwardInTimeListener{
|
||||||
|
|
||||||
private Logger log = Logger.getLogger(UpdateActivityTimes.class);
|
private Logger log = Logger.getLogger(UpdateActivityTimes.class);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(VehicleRoute route) {}
|
public void start(VehicleRoute route, Start start, double departureTime) {
|
||||||
|
start.setEndTime(departureTime);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void nextActivity(TourActivity act, double arrTime, double endTime) {
|
public void nextActivity(TourActivity act, double arrTime, double endTime) {
|
||||||
// log.debug(act.toString() + " arrTime="+ arrTime + " endTime=" + endTime);
|
|
||||||
act.setArrTime(arrTime);
|
act.setArrTime(arrTime);
|
||||||
act.setEndTime(endTime);
|
act.setEndTime(endTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finnish() {}
|
public void end(End end, double arrivalTime) {
|
||||||
|
end.setArrTime(arrivalTime);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,38 +33,41 @@ class UpdateCostsAtAllLevels implements ForwardInTimeListener{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(VehicleRoute route) {
|
public void start(VehicleRoute route, Start start, double departureTime) {
|
||||||
vehicleRoute = route;
|
vehicleRoute = route;
|
||||||
vehicleRoute.getVehicleRouteCostCalculator().reset();
|
vehicleRoute.getVehicleRouteCostCalculator().reset();
|
||||||
|
prevAct = start;
|
||||||
|
startTimeAtPrevAct = departureTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void nextActivity(TourActivity act, double arrTime, double endTime) {
|
public void nextActivity(TourActivity act, double arrTime, double endTime) {
|
||||||
if(prevAct == null){
|
double transportCost = this.transportCost.getTransportCost(prevAct.getLocationId(), act.getLocationId(), startTimeAtPrevAct, vehicleRoute.getDriver(), vehicleRoute.getVehicle());
|
||||||
prevAct = act;
|
double actCost = activityCost.getActivityCost(act, arrTime, vehicleRoute.getDriver(), vehicleRoute.getVehicle());
|
||||||
startTimeAtPrevAct = endTime;
|
|
||||||
}
|
vehicleRoute.getVehicleRouteCostCalculator().addTransportCost(transportCost);
|
||||||
else{
|
vehicleRoute.getVehicleRouteCostCalculator().addActivityCost(actCost);
|
||||||
double transportCost = this.transportCost.getTransportCost(prevAct.getLocationId(), act.getLocationId(), startTimeAtPrevAct, vehicleRoute.getDriver(), vehicleRoute.getVehicle());
|
|
||||||
double actCost = activityCost.getActivityCost(act, arrTime, vehicleRoute.getDriver(), vehicleRoute.getVehicle());
|
totalOperationCost += transportCost;
|
||||||
|
totalOperationCost += actCost;
|
||||||
vehicleRoute.getVehicleRouteCostCalculator().addTransportCost(transportCost);
|
|
||||||
vehicleRoute.getVehicleRouteCostCalculator().addActivityCost(actCost);
|
states.putActivityState(act, StateTypes.COSTS, new StateImpl(totalOperationCost));
|
||||||
|
|
||||||
totalOperationCost += transportCost;
|
prevAct = act;
|
||||||
totalOperationCost += actCost;
|
startTimeAtPrevAct = endTime;
|
||||||
|
|
||||||
if(!(act instanceof End)){
|
|
||||||
states.putActivityState(act, StateTypes.COSTS, new StateImpl(totalOperationCost));
|
|
||||||
}
|
|
||||||
|
|
||||||
prevAct = act;
|
|
||||||
startTimeAtPrevAct = endTime;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finnish() {
|
public void end(End end, double arrivalTime) {
|
||||||
|
double transportCost = this.transportCost.getTransportCost(prevAct.getLocationId(), end.getLocationId(), startTimeAtPrevAct, vehicleRoute.getDriver(), vehicleRoute.getVehicle());
|
||||||
|
double actCost = activityCost.getActivityCost(end, arrivalTime, vehicleRoute.getDriver(), vehicleRoute.getVehicle());
|
||||||
|
|
||||||
|
vehicleRoute.getVehicleRouteCostCalculator().addTransportCost(transportCost);
|
||||||
|
vehicleRoute.getVehicleRouteCostCalculator().addActivityCost(actCost);
|
||||||
|
|
||||||
|
totalOperationCost += transportCost;
|
||||||
|
totalOperationCost += actCost;
|
||||||
|
|
||||||
states.putRouteState(vehicleRoute, StateTypes.COSTS, new StateImpl(totalOperationCost));
|
states.putRouteState(vehicleRoute, StateTypes.COSTS, new StateImpl(totalOperationCost));
|
||||||
|
|
||||||
//this is rather strange and likely to change
|
//this is rather strange and likely to change
|
||||||
|
|
|
||||||
|
|
@ -17,15 +17,14 @@ class UpdateEarliestStartTimeWindowAtActLocations implements ForwardInTimeListen
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(VehicleRoute route) {}
|
public void start(VehicleRoute route, Start start, double departureTime) {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void nextActivity(TourActivity act, double arrTime, double endTime) {
|
public void nextActivity(TourActivity act, double arrTime, double endTime) {
|
||||||
if(act instanceof Start || act instanceof End) return;
|
|
||||||
states.putActivityState(act, StateTypes.EARLIEST_OPERATION_START_TIME, new StateImpl(Math.max(arrTime, act.getTheoreticalEarliestOperationStartTime())));
|
states.putActivityState(act, StateTypes.EARLIEST_OPERATION_START_TIME, new StateImpl(Math.max(arrTime, act.getTheoreticalEarliestOperationStartTime())));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finnish() {}
|
public void end(End end, double arrivalTime) {}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,16 +17,16 @@ class UpdateLatestOperationStartTimeAtActLocations implements BackwardInTimeList
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(VehicleRoute route) {}
|
public void start(VehicleRoute route, End end, double latestArrivalTime) {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void prevActivity(TourActivity act,double latestDepartureTime, double latestOperationStartTime) {
|
public void prevActivity(TourActivity act,double latestDepartureTime, double latestOperationStartTime) {
|
||||||
// if(latestOperationStartTime < act.getArrTime()) throw new IllegalStateException(act.toString() + "; latestStart="+latestOperationStartTime+";actArrTime="+act.getArrTime());
|
|
||||||
if(act instanceof Start || act instanceof End) return;
|
|
||||||
states.putActivityState(act, StateTypes.LATEST_OPERATION_START_TIME, new StateImpl(latestOperationStartTime));
|
states.putActivityState(act, StateTypes.LATEST_OPERATION_START_TIME, new StateImpl(latestOperationStartTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finnish() {}
|
public void end(Start start, double latestDepartureTime) {}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,17 +27,16 @@ class UpdateLoadAtAllLevels implements ForwardInTimeListener{
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(VehicleRoute route) { vehicleRoute = route; }
|
public void start(VehicleRoute route, Start start, double departureTime) { vehicleRoute = route; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void nextActivity(TourActivity act, double arrTime, double endTime) {
|
public void nextActivity(TourActivity act, double arrTime, double endTime) {
|
||||||
if(act instanceof Start || act instanceof End){ return; }
|
|
||||||
load += (double)act.getCapacityDemand();
|
load += (double)act.getCapacityDemand();
|
||||||
states.putActivityState(act, StateTypes.LOAD, new StateImpl(load));
|
states.putActivityState(act, StateTypes.LOAD, new StateImpl(load));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void finnish() {
|
public void end(End end, double arrivalTime) {
|
||||||
states.putRouteState(vehicleRoute, StateTypes.LOAD, new StateImpl(load));
|
states.putRouteState(vehicleRoute, StateTypes.LOAD, new StateImpl(load));
|
||||||
load=0;
|
load=0;
|
||||||
vehicleRoute = null;
|
vehicleRoute = null;
|
||||||
|
|
|
||||||
27
jsprit-core/src/test/java/algorithms/BuildFastCVRPTest.java
Normal file
27
jsprit-core/src/test/java/algorithms/BuildFastCVRPTest.java
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
package algorithms;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import basics.VehicleRoutingAlgorithm;
|
||||||
|
import basics.VehicleRoutingProblem;
|
||||||
|
|
||||||
|
public class BuildFastCVRPTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void buildFastCVRPAlgoTest(){
|
||||||
|
|
||||||
|
VehicleRoutingProblem vrp = null;
|
||||||
|
|
||||||
|
VehicleRoutingAlgorithm vra = createVRA(vrp);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public VehicleRoutingAlgorithm createVRA(VehicleRoutingProblem vrp){
|
||||||
|
VehicleFleetManager fleetManager = new InfiniteVehicles(vrp.getVehicles());
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -189,7 +189,7 @@ public class TestIterateRouteForwardInTime {
|
||||||
forwardInTime.iterate(vehicleRoute);
|
forwardInTime.iterate(vehicleRoute);
|
||||||
|
|
||||||
assertEquals(40.0, states.getRouteStates(vehicleRoute).getState(StateTypes.COSTS).toDouble(), 0.05);
|
assertEquals(40.0, states.getRouteStates(vehicleRoute).getState(StateTypes.COSTS).toDouble(), 0.05);
|
||||||
assertEquals(40.0, vehicleRoute.getEnd().getEndTime(),0.05);
|
assertEquals(40.0, vehicleRoute.getEnd().getArrTime(),0.05);
|
||||||
assertEquals(50.0, vehicleRoute.getEnd().getTheoreticalLatestOperationStartTime(),0.05);
|
assertEquals(50.0, vehicleRoute.getEnd().getTheoreticalLatestOperationStartTime(),0.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -158,7 +158,7 @@ public class TestTourStateUpdaterWithService {
|
||||||
updateStates.update(vehicleRoute);
|
updateStates.update(vehicleRoute);
|
||||||
|
|
||||||
assertEquals(40.0, states.getRouteState(vehicleRoute, StateTypes.COSTS).toDouble(), 0.05);
|
assertEquals(40.0, states.getRouteState(vehicleRoute, StateTypes.COSTS).toDouble(), 0.05);
|
||||||
assertEquals(40.0, vehicleRoute.getEnd().getEndTime(),0.05);
|
assertEquals(40.0, vehicleRoute.getEnd().getArrTime(),0.05);
|
||||||
assertEquals(50.0, vehicleRoute.getEnd().getTheoreticalLatestOperationStartTime(),0.05);
|
assertEquals(50.0, vehicleRoute.getEnd().getTheoreticalLatestOperationStartTime(),0.05);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ import java.util.Collection;
|
||||||
import readers.SolomonReader;
|
import readers.SolomonReader;
|
||||||
import algorithms.GreedySchrimpfFactory;
|
import algorithms.GreedySchrimpfFactory;
|
||||||
import algorithms.SchrimpfFactory;
|
import algorithms.SchrimpfFactory;
|
||||||
|
import algorithms.VehicleRoutingAlgorithms;
|
||||||
import algorithms.selectors.SelectBest;
|
import algorithms.selectors.SelectBest;
|
||||||
import analysis.AlgorithmSearchProgressChartListener;
|
import analysis.AlgorithmSearchProgressChartListener;
|
||||||
import analysis.SolutionPlotter;
|
import analysis.SolutionPlotter;
|
||||||
|
|
@ -75,7 +76,8 @@ public class SolomonExample {
|
||||||
*
|
*
|
||||||
* The algorithm can be defined and configured in an xml-file.
|
* The algorithm can be defined and configured in an xml-file.
|
||||||
*/
|
*/
|
||||||
VehicleRoutingAlgorithm vra = new SchrimpfFactory().createAlgorithm(vrp);
|
// VehicleRoutingAlgorithm vra = new SchrimpfFactory().createAlgorithm(vrp);
|
||||||
|
VehicleRoutingAlgorithm vra = VehicleRoutingAlgorithms.readAndCreateAlgorithm(vrp, "input/algorithmConfig_solomon.xml");
|
||||||
vra.getAlgorithmListeners().addListener(new AlgorithmSearchProgressChartListener("output/sol_progress.png"));
|
vra.getAlgorithmListeners().addListener(new AlgorithmSearchProgressChartListener("output/sol_progress.png"));
|
||||||
/*
|
/*
|
||||||
* Solve the problem.
|
* Solve the problem.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue