mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
refine calcInsertion
This commit is contained in:
parent
170699d5c0
commit
ad24158651
2 changed files with 9 additions and 58 deletions
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue