1
0
Fork 0
mirror of https://github.com/graphhopper/jsprit.git synced 2020-01-24 07:45:05 +01:00

refine calcInsertion

This commit is contained in:
Stefan Schroeder 2013-08-23 14:27:23 +02:00
parent 170699d5c0
commit ad24158651
2 changed files with 9 additions and 58 deletions

View file

@ -22,7 +22,6 @@ import basics.route.Driver;
import basics.route.End; import basics.route.End;
import basics.route.ServiceActivity; import basics.route.ServiceActivity;
import basics.route.Start; import basics.route.Start;
import basics.route.TourActivities;
import basics.route.TourActivity; import basics.route.TourActivity;
import basics.route.Vehicle; import basics.route.Vehicle;
import basics.route.VehicleImpl.NoVehicle; import basics.route.VehicleImpl.NoVehicle;
@ -31,36 +30,9 @@ import basics.route.VehicleRoute;
final class CalculatesServiceInsertion implements JobInsertionCalculator{ final class CalculatesServiceInsertion implements JobInsertionCalculator{
static class Break {
private Marginals marginals;
private boolean breakLoop;
public Break(Marginals marginals, boolean breakLoop) {
super();
this.marginals = marginals;
this.breakLoop = breakLoop;
}
/**
* @return the marginals
*/
public Marginals getMarginals() {
return marginals;
}
/**
* @return the breakLoop
*/
public boolean isBreakLoop() {
return breakLoop;
}
}
private static final Logger logger = Logger.getLogger(CalculatesServiceInsertion.class); private static final Logger logger = Logger.getLogger(CalculatesServiceInsertion.class);
private Start start;
private End end;
private HardRouteLevelConstraint hardRouteLevelConstraint; private HardRouteLevelConstraint hardRouteLevelConstraint;
private Neighborhood neighborhood = new Neighborhood() { private Neighborhood neighborhood = new Neighborhood() {
@ -105,19 +77,21 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{
return InsertionData.noInsertionFound(); return InsertionData.noInsertionFound();
} }
TourActivities tour = currentRoute.getTourActivities();
double bestCost = bestKnownCosts; double bestCost = bestKnownCosts;
Marginals bestMarginals = null; Marginals bestMarginals = null;
Service service = (Service)jobToInsert; Service service = (Service)jobToInsert;
int insertionIndex = InsertionData.NO_INDEX; int insertionIndex = InsertionData.NO_INDEX;
TourActivity deliveryAct2Insert = ServiceActivity.newInstance(service); TourActivity deliveryAct2Insert = ServiceActivity.newInstance(service);
initialiseStartAndEnd(newVehicle, newVehicleDepartureTime); Start start = Start.newInstance(newVehicle.getLocationId(), newVehicle.getEarliestDeparture(), newVehicle.getLatestArrival());
start.setEndTime(newVehicleDepartureTime);
End end = End.newInstance(newVehicle.getLocationId(), 0.0, newVehicle.getLatestArrival());
TourActivity prevAct = start; TourActivity prevAct = start;
int actIndex = 0; int actIndex = 0;
for(TourActivity nextAct : tour.getActivities()){ for(TourActivity nextAct : currentRoute.getTourActivities().getActivities()){
if(deliveryAct2Insert.getTheoreticalLatestOperationStartTime() < prevAct.getTheoreticalEarliestOperationStartTime()){ if(deliveryAct2Insert.getTheoreticalLatestOperationStartTime() < prevAct.getTheoreticalEarliestOperationStartTime()){
break; break;
} }
@ -155,29 +129,6 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{
return insertionData; return insertionData;
} }
private void initialiseStartAndEnd(final Vehicle newVehicle, double newVehicleDepartureTime) {
if(start == null){
start = Start.newInstance(newVehicle.getLocationId(), newVehicle.getEarliestDeparture(), newVehicle.getLatestArrival());
start.setEndTime(newVehicleDepartureTime);
}
else{
start.setLocationId(newVehicle.getLocationId());
start.setTheoreticalEarliestOperationStartTime(newVehicle.getEarliestDeparture());
start.setTheoreticalLatestOperationStartTime(newVehicle.getLatestArrival());
start.setEndTime(newVehicleDepartureTime);
}
if(end == null){
end = End.newInstance(newVehicle.getLocationId(), 0.0, newVehicle.getLatestArrival());
}
else{
end.setLocationId(newVehicle.getLocationId());
end.setTheoreticalEarliestOperationStartTime(newVehicleDepartureTime);
end.setTheoreticalLatestOperationStartTime(newVehicle.getLatestArrival());
end.setEndTime(newVehicle.getLatestArrival());
}
}
public Marginals calculate(InsertionFacts iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct) { public Marginals calculate(InsertionFacts iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct) {
return marginalCalculus.calculate(iFacts, prevAct, nextAct, newAct); return marginalCalculus.calculate(iFacts, prevAct, nextAct, newAct);

View file

@ -83,8 +83,8 @@ public class BuildCVRPAlgoFromScratchTest {
// System.out.println("ini: costs="+iniSolution.getCost()+";#routes="+iniSolution.getRoutes().size()); // System.out.println("ini: costs="+iniSolution.getCost()+";#routes="+iniSolution.getRoutes().size());
vra.addInitialSolution(iniSolution); vra.addInitialSolution(iniSolution);
vra.setNuOfIterations(1000); vra.setNuOfIterations(10000);
vra.setPrematureBreak(200); // vra.setPrematureBreak(200);
} }