From 4e99daeebf7058df7f9df166377dcc7bebca3505 Mon Sep 17 00:00:00 2001 From: oblonski <4sschroeder@gmail.com> Date: Mon, 14 Oct 2013 08:30:21 +0200 Subject: [PATCH 1/3] improve route-level search --- ... => ActivityInsertionCostsCalculator.java} | 8 +- .../CalculatesServiceInsertion.java | 26 ++-- ...alculatesServiceInsertionOnRouteLevel.java | 44 +++--- .../java/algorithms/CalculatorBuilder.java | 4 +- ...ocalActivityInsertionCostsCalculator.java} | 8 +- ...eLevelActivityInsertionCostsEstimator.java | 142 ++++++++++++++++++ .../BuildCVRPAlgoFromScratchTest.java | 2 +- .../BuildPDVRPAlgoFromScratchTest.java | 2 +- .../java/algorithms/GendreauPostOptTest.java | 2 +- .../TestCalculatesServiceInsertion.java | 2 +- ...alculatesServiceInsertionOnRouteLevel.java | 2 +- 11 files changed, 195 insertions(+), 47 deletions(-) rename jsprit-core/src/main/java/algorithms/{MarginalsCalculus.java => ActivityInsertionCostsCalculator.java} (82%) rename jsprit-core/src/main/java/algorithms/{MarginalsCalculusTriangleInequality.java => LocalActivityInsertionCostsCalculator.java} (88%) create mode 100644 jsprit-core/src/main/java/algorithms/RouteLevelActivityInsertionCostsEstimator.java diff --git a/jsprit-core/src/main/java/algorithms/MarginalsCalculus.java b/jsprit-core/src/main/java/algorithms/ActivityInsertionCostsCalculator.java similarity index 82% rename from jsprit-core/src/main/java/algorithms/MarginalsCalculus.java rename to jsprit-core/src/main/java/algorithms/ActivityInsertionCostsCalculator.java index d17e9bfc..4a72322b 100644 --- a/jsprit-core/src/main/java/algorithms/MarginalsCalculus.java +++ b/jsprit-core/src/main/java/algorithms/ActivityInsertionCostsCalculator.java @@ -22,13 +22,13 @@ package algorithms; import basics.route.TourActivity; -interface MarginalsCalculus { +interface ActivityInsertionCostsCalculator { - class Marginals { + class ActivityInsertionCosts { private double additionalCosts; private double additionalTime; - public Marginals(double additionalCosts, double additionalTime) { + public ActivityInsertionCosts(double additionalCosts, double additionalTime) { super(); this.additionalCosts = additionalCosts; this.additionalTime = additionalTime; @@ -50,6 +50,6 @@ interface MarginalsCalculus { } - Marginals calculate(InsertionContext iContext, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct); + ActivityInsertionCosts calculate(InsertionContext iContext, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct); } diff --git a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertion.java b/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertion.java index a792fb53..bbbfbdba 100644 --- a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertion.java +++ b/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertion.java @@ -15,18 +15,17 @@ package algorithms; import org.apache.log4j.Logger; import util.Neighborhood; +import algorithms.ActivityInsertionCostsCalculator.ActivityInsertionCosts; import algorithms.HardConstraints.HardRouteLevelConstraint; -import algorithms.MarginalsCalculus.Marginals; import basics.Job; import basics.Service; import basics.costs.VehicleRoutingTransportCosts; +import basics.route.DefaultTourActivityFactory; import basics.route.Driver; import basics.route.End; -import basics.route.ServiceActivity; import basics.route.Start; import basics.route.TourActivity; import basics.route.TourActivityFactory; -import basics.route.DefaultTourActivityFactory; import basics.route.Vehicle; import basics.route.VehicleImpl.NoVehicle; import basics.route.VehicleRoute; @@ -47,7 +46,7 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{ } }; - private MarginalsCalculus marginalCalculus; + private ActivityInsertionCostsCalculator activityInsertionCostsCalculator; private VehicleRoutingTransportCosts transportCosts; @@ -58,9 +57,9 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{ logger.info("initialise neighborhood " + neighborhood); } - public CalculatesServiceInsertion(VehicleRoutingTransportCosts routingCosts, MarginalsCalculus marginalsCalculus, HardRouteLevelConstraint hardRouteLevelConstraint) { + public CalculatesServiceInsertion(VehicleRoutingTransportCosts routingCosts, ActivityInsertionCostsCalculator activityInsertionCostsCalculator, HardRouteLevelConstraint hardRouteLevelConstraint) { super(); - this.marginalCalculus = marginalsCalculus; + this.activityInsertionCostsCalculator = activityInsertionCostsCalculator; this.hardRouteLevelConstraint = hardRouteLevelConstraint; this.transportCosts = routingCosts; activityFactory = new DefaultTourActivityFactory(); @@ -88,7 +87,7 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{ } double bestCost = bestKnownCosts; - Marginals bestMarginals = null; + ActivityInsertionCosts bestMarginals = null; Service service = (Service)jobToInsert; int insertionIndex = InsertionData.NO_INDEX; @@ -102,11 +101,10 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{ TourActivity prevAct = start; double prevActStartTime = newVehicleDepartureTime; int actIndex = 0; -// logger.info("start"); + for(TourActivity nextAct : currentRoute.getTourActivities().getActivities()){ -// logger.info("prevActStartTime="+prevActStartTime); if(neighborhood.areNeighbors(deliveryAct2Insert.getLocationId(), prevAct.getLocationId()) && neighborhood.areNeighbors(deliveryAct2Insert.getLocationId(), nextAct.getLocationId())){ - Marginals mc = calculate(insertionContext, prevAct, nextAct, deliveryAct2Insert, prevActStartTime); + ActivityInsertionCosts mc = calculate(insertionContext, prevAct, nextAct, deliveryAct2Insert, prevActStartTime); if(mc != null){ if(mc.getAdditionalCosts() < bestCost){ bestCost = mc.getAdditionalCosts(); @@ -115,7 +113,6 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{ } } } - double nextActArrTime = prevActStartTime + transportCosts.getTransportTime(prevAct.getLocationId(), nextAct.getLocationId(), prevActStartTime, newDriver, newVehicle); double nextActEndTime = CalcUtils.getActivityEndTime(nextActArrTime, nextAct); @@ -124,10 +121,9 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{ prevAct = nextAct; actIndex++; } -// logger.info("prevActStartTime="+prevActStartTime); End nextAct = end; if(neighborhood.areNeighbors(deliveryAct2Insert.getLocationId(), prevAct.getLocationId()) && neighborhood.areNeighbors(deliveryAct2Insert.getLocationId(), nextAct.getLocationId())){ - Marginals mc = calculate(insertionContext, prevAct, nextAct, deliveryAct2Insert, prevActStartTime); + ActivityInsertionCosts mc = calculate(insertionContext, prevAct, nextAct, deliveryAct2Insert, prevActStartTime); if(mc != null) { if(mc.getAdditionalCosts() < bestCost){ bestCost = mc.getAdditionalCosts(); @@ -146,8 +142,8 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{ return insertionData; } - public Marginals calculate(InsertionContext iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double departureTimeAtPrevAct) { - return marginalCalculus.calculate(iFacts, prevAct, nextAct, newAct, departureTimeAtPrevAct); + public ActivityInsertionCosts calculate(InsertionContext iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double departureTimeAtPrevAct) { + return activityInsertionCostsCalculator.calculate(iFacts, prevAct, nextAct, newAct, departureTimeAtPrevAct); } } diff --git a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionOnRouteLevel.java b/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionOnRouteLevel.java index fc255536..8b1a1c73 100644 --- a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionOnRouteLevel.java +++ b/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionOnRouteLevel.java @@ -23,6 +23,7 @@ import java.util.PriorityQueue; import org.apache.log4j.Logger; import util.Neighborhood; +import algorithms.HardConstraints.HardRouteLevelConstraint; import basics.Job; import basics.Service; import basics.costs.VehicleRoutingActivityCosts; @@ -30,7 +31,6 @@ import basics.costs.VehicleRoutingTransportCosts; import basics.route.DefaultTourActivityFactory; import basics.route.Driver; import basics.route.End; -import basics.route.ServiceActivity; import basics.route.Start; import basics.route.TourActivities; import basics.route.TourActivity; @@ -53,7 +53,11 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul private TourActivityFactory tourActivityFactory = new DefaultTourActivityFactory(); - private StateManager states; + private StateManager stateManager; + + private HardRouteLevelConstraint hardRouteLevelConstraint; + + private ActivityInsertionCostsCalculator activityInsertionCostsCalculator; private int nuOfActsForwardLooking = 0; @@ -86,17 +90,18 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul logger.info("set [solutionMemory="+memorySize+"]"); } - public CalculatesServiceInsertionOnRouteLevel(VehicleRoutingTransportCosts vehicleRoutingCosts, VehicleRoutingActivityCosts costFunc) { + public CalculatesServiceInsertionOnRouteLevel(VehicleRoutingTransportCosts vehicleRoutingCosts, VehicleRoutingActivityCosts costFunc, HardRouteLevelConstraint hardRouteLevelConstraint) { super(); this.transportCosts = vehicleRoutingCosts; this.activityCosts = costFunc; + this.hardRouteLevelConstraint = hardRouteLevelConstraint; auxilliaryPathCostCalculator = new AuxilliaryCostCalculator(transportCosts, activityCosts); logger.info("initialise " + this); } - public void setStates(StateManager activityStates2){ - this.states = activityStates2; + public void setStates(StateManager stateManager){ + this.stateManager = stateManager; } void setNuOfActsForwardLooking(int nOfActsForwardLooking) { @@ -122,6 +127,11 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul if(jobToInsert == null) throw new IllegalStateException("job is null. cannot calculate the insertion of a null-job."); if(newVehicle == null || newVehicle instanceof NoVehicle) throw new IllegalStateException("no vehicle given. set para vehicle!"); + InsertionContext insertionContext = new InsertionContext(currentRoute, jobToInsert, newVehicle, newDriver, newVehicleDepartureTime); + if(!hardRouteLevelConstraint.fulfilled(insertionContext)){ + return InsertionData.noInsertionFound(); + } + /** * map that memorizes the costs with newVehicle, which is a cost-snapshot at tour-activities. */ @@ -136,13 +146,6 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul double best_insertion_costs = best_known_insertion_costs; Service service = (Service)jobToInsert; - /** - * pre-check whether vehicle-capacity of new vehicle is sufficient to load service. - */ - if(states.getRouteState(currentRoute, StateTypes.LOAD).toDouble() + service.getCapacityDemand() > newVehicle.getCapacity()){ - return InsertionData.noInsertionFound(); - } - /** * some inis */ @@ -167,6 +170,9 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul /** * builds a path on this route forwardPath={i,k,j,j+1,j+2,...,j+nuOfActsForwardLooking} */ + + //--------------------------- + //ActivityInsertionCostsEstimator List path = new ArrayList(); path.add(prevAct); path.add(serviceAct2Insert); path.add(nextAct); if(nuOfActsForwardLooking > 0){ path.addAll(getForwardLookingPath(currentRoute,actIndex)); } @@ -175,7 +181,8 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul * calculates the path costs with new vehicle, c(forwardPath,newVehicle). */ double forwardPathCost_newVehicle = auxilliaryPathCostCalculator.costOfPath(path, prevActDepTime_newVehicle, newDriver, newVehicle); - + //--------------------------- + /** * insertion_cost_approximation = c({0,1,...,i},newVehicle) + c({i,k,j,j+1,j+2,...,j+nuOfActsForwardLooking},newVehicle) - c({0,1,...,i,j,j+1,...,j+nuOfActsForwardLooking},oldVehicle) */ @@ -220,12 +227,15 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul End nextAct = end; if(neighborhood.areNeighbors(serviceAct2Insert.getLocationId(), prevAct.getLocationId()) && neighborhood.areNeighbors(serviceAct2Insert.getLocationId(), nextAct.getLocationId())){ + //---------------------------- + //ActivityInsertionCostsEstimator /** * calculates the path costs with new vehicle, c(forwardPath,newVehicle). */ List path = Arrays.asList(prevAct,serviceAct2Insert,end); double forwardPathCost_newVehicle = auxilliaryPathCostCalculator.costOfPath(path, prevActDepTime_newVehicle, newDriver, newVehicle); - + //---------------------------- + /** * insertion_cost_approximation = c({0,1,...,i},newVehicle) + c({i,k,j,j+1,j+2,...,j+nuOfActsForwardLooking},newVehicle) - c({0,1,...,i,j,j+1,...,j+nuOfActsForwardLooking},oldVehicle) */ @@ -271,7 +281,7 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul /** * compute cost-diff of tour with and without new activity --> insertion_costs */ - double insertion_costs = auxilliaryPathCostCalculator.costOfPath(wholeTour, start.getEndTime(), newDriver, newVehicle) - states.getRouteState(currentRoute,StateTypes.COSTS).toDouble(); + double insertion_costs = auxilliaryPathCostCalculator.costOfPath(wholeTour, start.getEndTime(), newDriver, newVehicle) - stateManager.getRouteState(currentRoute,StateTypes.COSTS).toDouble(); /** * if better than best known, make it the best known @@ -316,9 +326,9 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul private double pathCost_oldVehicle(VehicleRoute vehicleRoute, List path) { TourActivity act = path.get(path.size()-1); if(act instanceof End){ - return states.getRouteState(vehicleRoute,StateTypes.COSTS).toDouble(); + return stateManager.getRouteState(vehicleRoute,StateTypes.COSTS).toDouble(); } - return states.getActivityState(act,StateTypes.COSTS).toDouble(); + return stateManager.getActivityState(act,StateTypes.COSTS).toDouble(); } /** diff --git a/jsprit-core/src/main/java/algorithms/CalculatorBuilder.java b/jsprit-core/src/main/java/algorithms/CalculatorBuilder.java index 0a3898a2..621a8f27 100644 --- a/jsprit-core/src/main/java/algorithms/CalculatorBuilder.java +++ b/jsprit-core/src/main/java/algorithms/CalculatorBuilder.java @@ -219,7 +219,7 @@ class CalculatorBuilder { private CalculatorPlusListeners createStandardLocal(VehicleRoutingProblem vrp, StateManager statesManager){ if(constraintManager == null) throw new IllegalStateException("constraint-manager is null"); - MarginalsCalculus defaultCalc = new MarginalsCalculusTriangleInequality(vrp.getTransportCosts(), vrp.getActivityCosts(), constraintManager); + ActivityInsertionCostsCalculator defaultCalc = new LocalActivityInsertionCostsCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), constraintManager); JobInsertionCalculator standardServiceInsertion = new CalculatesServiceInsertion(vrp.getTransportCosts(), defaultCalc, constraintManager); ((CalculatesServiceInsertion) standardServiceInsertion).setNeighborhood(vrp.getNeighborhood()); @@ -238,7 +238,7 @@ class CalculatorBuilder { private CalculatorPlusListeners createStandardRoute(VehicleRoutingProblem vrp, StateManager activityStates2, int forwardLooking, int solutionMemory){ int after = forwardLooking; - JobInsertionCalculator jobInsertionCalculator = new CalculatesServiceInsertionOnRouteLevel(vrp.getTransportCosts(), vrp.getActivityCosts()); + JobInsertionCalculator jobInsertionCalculator = new CalculatesServiceInsertionOnRouteLevel(vrp.getTransportCosts(), vrp.getActivityCosts(), hardRouteLevelConstraint); ((CalculatesServiceInsertionOnRouteLevel)jobInsertionCalculator).setNuOfActsForwardLooking(after); ((CalculatesServiceInsertionOnRouteLevel)jobInsertionCalculator).setMemorySize(solutionMemory); ((CalculatesServiceInsertionOnRouteLevel)jobInsertionCalculator).setNeighborhood(vrp.getNeighborhood()); diff --git a/jsprit-core/src/main/java/algorithms/MarginalsCalculusTriangleInequality.java b/jsprit-core/src/main/java/algorithms/LocalActivityInsertionCostsCalculator.java similarity index 88% rename from jsprit-core/src/main/java/algorithms/MarginalsCalculusTriangleInequality.java rename to jsprit-core/src/main/java/algorithms/LocalActivityInsertionCostsCalculator.java index f4ab4005..f845fd33 100644 --- a/jsprit-core/src/main/java/algorithms/MarginalsCalculusTriangleInequality.java +++ b/jsprit-core/src/main/java/algorithms/LocalActivityInsertionCostsCalculator.java @@ -25,14 +25,14 @@ import basics.costs.VehicleRoutingActivityCosts; import basics.costs.VehicleRoutingTransportCosts; import basics.route.TourActivity; -class MarginalsCalculusTriangleInequality implements MarginalsCalculus{ +class LocalActivityInsertionCostsCalculator implements ActivityInsertionCostsCalculator{ private HardActivityLevelConstraint hardConstraint; private VehicleRoutingTransportCosts routingCosts; private VehicleRoutingActivityCosts activityCosts; - public MarginalsCalculusTriangleInequality(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts actCosts, HardActivityLevelConstraint hardActivityLevelConstraint) { + public LocalActivityInsertionCostsCalculator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts actCosts, HardActivityLevelConstraint hardActivityLevelConstraint) { super(); this.routingCosts = routingCosts; this.activityCosts = actCosts; @@ -40,7 +40,7 @@ class MarginalsCalculusTriangleInequality implements MarginalsCalculus{ } @Override - public Marginals calculate(InsertionContext iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct) { + public ActivityInsertionCosts calculate(InsertionContext iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct) { if(!hardConstraint.fulfilled(iFacts, prevAct, newAct, nextAct, depTimeAtPrevAct)){ return null; } @@ -81,7 +81,7 @@ class MarginalsCalculusTriangleInequality implements MarginalsCalculus{ double additionalCosts = totalCosts - oldCosts; double additionalTime = (nextAct_arrTime - iFacts.getNewDepTime()) - oldTime; - return new Marginals(additionalCosts,additionalTime); + return new ActivityInsertionCosts(additionalCosts,additionalTime); } } diff --git a/jsprit-core/src/main/java/algorithms/RouteLevelActivityInsertionCostsEstimator.java b/jsprit-core/src/main/java/algorithms/RouteLevelActivityInsertionCostsEstimator.java new file mode 100644 index 00000000..53d265fe --- /dev/null +++ b/jsprit-core/src/main/java/algorithms/RouteLevelActivityInsertionCostsEstimator.java @@ -0,0 +1,142 @@ +/******************************************************************************* + * Copyright (C) 2013 Stefan Schroeder + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributors: + * Stefan Schroeder - initial API and implementation + ******************************************************************************/ +package algorithms; + +import java.util.ArrayList; +import java.util.List; + +import algorithms.HardConstraints.HardActivityLevelConstraint; +import basics.costs.VehicleRoutingActivityCosts; +import basics.costs.VehicleRoutingTransportCosts; +import basics.route.End; +import basics.route.Start; +import basics.route.TourActivity; +import basics.route.VehicleRoute; + +class RouteLevelActivityInsertionCostsEstimator implements ActivityInsertionCostsCalculator{ + + private HardActivityLevelConstraint hardConstraint; + + private VehicleRoutingTransportCosts routingCosts; + + private VehicleRoutingActivityCosts activityCosts; + + private AuxilliaryCostCalculator auxilliaryPathCostCalculator; + + private StateManager stateManager; + + private int nuOfActivities2LookForward = 0; + + public RouteLevelActivityInsertionCostsEstimator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts actCosts, HardActivityLevelConstraint hardActivityLevelConstraint, StateManager stateManager) { + super(); + this.routingCosts = routingCosts; + this.activityCosts = actCosts; + this.hardConstraint = hardActivityLevelConstraint; + auxilliaryPathCostCalculator = new AuxilliaryCostCalculator(routingCosts, activityCosts); + } + + @Override + public ActivityInsertionCosts calculate(InsertionContext iFacts, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct) { + if(!hardConstraint.fulfilled(iFacts, prevAct, newAct, nextAct, depTimeAtPrevAct)){ + return null; + } + + List path = new ArrayList(); + path.add(prevAct); path.add(newAct); path.add(nextAct); + int actIndex; + if(prevAct instanceof Start) actIndex = 0; + else actIndex = iFacts.getRoute().getTourActivities().getActivities().indexOf(prevAct); + if(nuOfActivities2LookForward > 0){ path.addAll(getForwardLookingPath(iFacts.getRoute(),actIndex)); } + + /** + * calculates the path costs with new vehicle, c(forwardPath,newVehicle). + */ + double forwardPathCost_newVehicle = auxilliaryPathCostCalculator.costOfPath(path, depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); + + double additionalCosts = forwardPathCost_newVehicle - (actCostsOld(iFacts.getRoute(), path.get(path.size()-1)) - actCostsOld(iFacts.getRoute(), prevAct)); + + return new ActivityInsertionCosts(additionalCosts, 0.0); + + +// +// +// double tp_costs_prevAct_newAct = routingCosts.getTransportCost(prevAct.getLocationId(), newAct.getLocationId(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); +// double tp_time_prevAct_newAct = routingCosts.getTransportTime(prevAct.getLocationId(), newAct.getLocationId(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); +// +// double newAct_arrTime = depTimeAtPrevAct + tp_time_prevAct_newAct; +// +// double newAct_endTime = CalcUtils.getActivityEndTime(newAct_arrTime, newAct); +// +// double act_costs_newAct = activityCosts.getActivityCost(newAct, newAct_arrTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); +// +// double tp_costs_newAct_nextAct = routingCosts.getTransportCost(newAct.getLocationId(), nextAct.getLocationId(), newAct_endTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); +// double tp_time_newAct_nextAct = routingCosts.getTransportTime(newAct.getLocationId(), nextAct.getLocationId(), newAct_endTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); +// +// double nextAct_arrTime = newAct_endTime + tp_time_newAct_nextAct; +// +// double act_costs_nextAct = activityCosts.getActivityCost(nextAct, nextAct_arrTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); +// +// double totalCosts = tp_costs_prevAct_newAct + tp_costs_newAct_nextAct + act_costs_newAct + act_costs_nextAct; +// +// double oldCosts; +// double oldTime; +// if(iFacts.getRoute().isEmpty()){ +// oldCosts = 0.0; +// oldTime = 0.0; +// } +// else{ +// double tp_costs_prevAct_nextAct = routingCosts.getTransportCost(prevAct.getLocationId(), nextAct.getLocationId(), prevAct.getEndTime(), iFacts.getRoute().getDriver(), iFacts.getRoute().getVehicle()); +// double arrTime_nextAct = routingCosts.getTransportTime(prevAct.getLocationId(), nextAct.getLocationId(), prevAct.getEndTime(), iFacts.getNewDriver(), iFacts.getNewVehicle()); +// +// double actCost_nextAct = activityCosts.getActivityCost(nextAct, arrTime_nextAct, iFacts.getRoute().getDriver(), iFacts.getRoute().getVehicle()); +// oldCosts = tp_costs_prevAct_nextAct + actCost_nextAct; +// oldTime = (nextAct.getArrTime() - iFacts.getRoute().getDepartureTime()); +// } +// +// double additionalCosts = totalCosts - oldCosts; +// double additionalTime = (nextAct_arrTime - iFacts.getNewDepTime()) - oldTime; +// +// return new ActivityInsertionCosts(additionalCosts,additionalTime); + } + + private double actCostsOld(VehicleRoute vehicleRoute, TourActivity act) { + if(act instanceof End){ + return stateManager.getRouteState(vehicleRoute,StateTypes.COSTS).toDouble(); + } + return stateManager.getActivityState(act,StateTypes.COSTS).toDouble(); + } + + private List getForwardLookingPath(VehicleRoute route, int actIndex) { + List forwardLookingPath = new ArrayList(); + int nuOfActsInPath = 0; + int index = actIndex + 1; + while(index < route.getTourActivities().getActivities().size() && nuOfActsInPath < nuOfActivities2LookForward){ + forwardLookingPath.add(route.getTourActivities().getActivities().get(index)); + index++; + nuOfActsInPath++; + } + if(nuOfActsInPath < nuOfActivities2LookForward){ + forwardLookingPath.add(route.getEnd()); + } + return forwardLookingPath; + } + +} diff --git a/jsprit-core/src/test/java/algorithms/BuildCVRPAlgoFromScratchTest.java b/jsprit-core/src/test/java/algorithms/BuildCVRPAlgoFromScratchTest.java index 63df0617..f3efa59c 100644 --- a/jsprit-core/src/test/java/algorithms/BuildCVRPAlgoFromScratchTest.java +++ b/jsprit-core/src/test/java/algorithms/BuildCVRPAlgoFromScratchTest.java @@ -64,7 +64,7 @@ public class BuildCVRPAlgoFromScratchTest { return true; } }; - MarginalsCalculus marginalCalculus = new MarginalsCalculusTriangleInequality(vrp.getTransportCosts(), vrp.getActivityCosts(), hardActLevelConstraint); + ActivityInsertionCostsCalculator marginalCalculus = new LocalActivityInsertionCostsCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), hardActLevelConstraint); CalculatesServiceInsertion serviceInsertion = new CalculatesServiceInsertion(vrp.getTransportCosts(), marginalCalculus, new HardConstraints.HardLoadConstraint(stateManager)); VehicleFleetManager fleetManager = new InfiniteVehicles(vrp.getVehicles()); diff --git a/jsprit-core/src/test/java/algorithms/BuildPDVRPAlgoFromScratchTest.java b/jsprit-core/src/test/java/algorithms/BuildPDVRPAlgoFromScratchTest.java index b96ce7ec..1bed85a2 100644 --- a/jsprit-core/src/test/java/algorithms/BuildPDVRPAlgoFromScratchTest.java +++ b/jsprit-core/src/test/java/algorithms/BuildPDVRPAlgoFromScratchTest.java @@ -79,7 +79,7 @@ public class BuildPDVRPAlgoFromScratchTest { actLevelConstraintAccumulator.addConstraint(new HardConstraints.HardPickupAndDeliveryActivityLevelConstraint(stateManager)); actLevelConstraintAccumulator.addConstraint(new HardConstraints.HardTimeWindowActivityLevelConstraint(stateManager, vrp.getTransportCosts())); - MarginalsCalculus marginalCalculus = new MarginalsCalculusTriangleInequality(vrp.getTransportCosts(), vrp.getActivityCosts(), actLevelConstraintAccumulator); + ActivityInsertionCostsCalculator marginalCalculus = new LocalActivityInsertionCostsCalculator(vrp.getTransportCosts(), vrp.getActivityCosts(), actLevelConstraintAccumulator); CalculatesServiceInsertion serviceInsertion = new CalculatesServiceInsertion(vrp.getTransportCosts(), marginalCalculus, new HardConstraints.HardPickupAndDeliveryLoadConstraint(stateManager)); // CalculatesServiceInsertion serviceInsertion = new CalculatesServiceInsertion(vrp.getTransportCosts(), marginalCalculus, new HardConstraints.HardLoadConstraint(stateManager)); diff --git a/jsprit-core/src/test/java/algorithms/GendreauPostOptTest.java b/jsprit-core/src/test/java/algorithms/GendreauPostOptTest.java index c130af57..661918a4 100644 --- a/jsprit-core/src/test/java/algorithms/GendreauPostOptTest.java +++ b/jsprit-core/src/test/java/algorithms/GendreauPostOptTest.java @@ -152,7 +152,7 @@ public class GendreauPostOptTest { activityCosts = new ExampleActivityCostFunction(); - CalculatesServiceInsertion standardServiceInsertion = new CalculatesServiceInsertion(cost, new MarginalsCalculusTriangleInequality(cost, activityCosts, new HardConstraints.HardTimeWindowActivityLevelConstraint(states, cost)), new HardConstraints.HardLoadConstraint(states)); + CalculatesServiceInsertion standardServiceInsertion = new CalculatesServiceInsertion(cost, new LocalActivityInsertionCostsCalculator(cost, activityCosts, new HardConstraints.HardTimeWindowActivityLevelConstraint(states, cost)), new HardConstraints.HardLoadConstraint(states)); CalculatesServiceInsertionConsideringFixCost withFixCost = new CalculatesServiceInsertionConsideringFixCost(standardServiceInsertion, states); withFixCost.setWeightOfFixCost(1.2); diff --git a/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertion.java b/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertion.java index 8ab72ed7..8b67dd73 100644 --- a/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertion.java +++ b/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertion.java @@ -157,7 +157,7 @@ public class TestCalculatesServiceInsertion { ExampleActivityCostFunction activityCosts = new ExampleActivityCostFunction(); - serviceInsertion = new CalculatesServiceInsertion(costs, new MarginalsCalculusTriangleInequality(costs, activityCosts, new HardConstraints.HardTimeWindowActivityLevelConstraint(states, costs)), new HardConstraints.HardLoadConstraint(states)); + serviceInsertion = new CalculatesServiceInsertion(costs, new LocalActivityInsertionCostsCalculator(costs, activityCosts, new HardConstraints.HardTimeWindowActivityLevelConstraint(states, costs)), new HardConstraints.HardLoadConstraint(states)); stateUpdater = new UpdateStates(states, costs, activityCosts); diff --git a/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertionOnRouteLevel.java b/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertionOnRouteLevel.java index 7798a263..ae1ef0c9 100644 --- a/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertionOnRouteLevel.java +++ b/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertionOnRouteLevel.java @@ -147,7 +147,7 @@ public class TestCalculatesServiceInsertionOnRouteLevel { states = new StateManagerImpl(); ExampleActivityCostFunction activityCosts = new ExampleActivityCostFunction(); - serviceInsertion = new CalculatesServiceInsertionOnRouteLevel(costs,activityCosts); + serviceInsertion = new CalculatesServiceInsertionOnRouteLevel(costs,activityCosts, hardRouteLevelConstraint); serviceInsertion.setNuOfActsForwardLooking(4); serviceInsertion.setStates(states); From d2b896c10499fe05a19f2d8406be33d6ebbac525 Mon Sep 17 00:00:00 2001 From: oblonski <4sschroeder@gmail.com> Date: Tue, 15 Oct 2013 06:58:15 +0200 Subject: [PATCH 2/3] improve route level insertion --- ...alculatesServiceInsertionOnRouteLevel.java | 154 +++++++----------- .../java/algorithms/CalculatorBuilder.java | 3 +- ...eLevelActivityInsertionCostsEstimator.java | 44 +---- ...alculatesServiceInsertionOnRouteLevel.java | 5 +- 4 files changed, 64 insertions(+), 142 deletions(-) diff --git a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionOnRouteLevel.java b/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionOnRouteLevel.java index 8b1a1c73..1f89669e 100644 --- a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionOnRouteLevel.java +++ b/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionOnRouteLevel.java @@ -13,7 +13,6 @@ package algorithms; import java.util.ArrayList; -import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.List; @@ -23,6 +22,7 @@ import java.util.PriorityQueue; import org.apache.log4j.Logger; import util.Neighborhood; +import algorithms.ActivityInsertionCostsCalculator.ActivityInsertionCosts; import algorithms.HardConstraints.HardRouteLevelConstraint; import basics.Job; import basics.Service; @@ -90,11 +90,12 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul logger.info("set [solutionMemory="+memorySize+"]"); } - public CalculatesServiceInsertionOnRouteLevel(VehicleRoutingTransportCosts vehicleRoutingCosts, VehicleRoutingActivityCosts costFunc, HardRouteLevelConstraint hardRouteLevelConstraint) { + public CalculatesServiceInsertionOnRouteLevel(VehicleRoutingTransportCosts vehicleRoutingCosts, VehicleRoutingActivityCosts costFunc, HardRouteLevelConstraint hardRouteLevelConstraint, ActivityInsertionCostsCalculator activityInsertionCostsCalculator) { super(); this.transportCosts = vehicleRoutingCosts; this.activityCosts = costFunc; this.hardRouteLevelConstraint = hardRouteLevelConstraint; + this.activityInsertionCostsCalculator = activityInsertionCostsCalculator; auxilliaryPathCostCalculator = new AuxilliaryCostCalculator(transportCosts, activityCosts); logger.info("initialise " + this); } @@ -169,32 +170,22 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul if(neighborhood.areNeighbors(serviceAct2Insert.getLocationId(), prevAct.getLocationId()) && neighborhood.areNeighbors(serviceAct2Insert.getLocationId(), nextAct.getLocationId())){ /** * builds a path on this route forwardPath={i,k,j,j+1,j+2,...,j+nuOfActsForwardLooking} - */ - - //--------------------------- - //ActivityInsertionCostsEstimator - List path = new ArrayList(); - path.add(prevAct); path.add(serviceAct2Insert); path.add(nextAct); - if(nuOfActsForwardLooking > 0){ path.addAll(getForwardLookingPath(currentRoute,actIndex)); } + */ + InsertionContext iContext = new InsertionContext(currentRoute, jobToInsert, newVehicle, newDriver, prevActDepTime_newVehicle); + ActivityInsertionCosts actInsertionCosts = activityInsertionCostsCalculator.calculate(iContext, prevAct, nextAct, serviceAct2Insert, prevActDepTime_newVehicle); + if(actInsertionCosts != null){ + /** + * insertion_cost_approximation = c({0,1,...,i},newVehicle) + c({i,k,j,j+1,j+2,...,j+nuOfActsForwardLooking},newVehicle) - c({0,1,...,i,j,j+1,...,j+nuOfActsForwardLooking},oldVehicle) + */ + double insertion_cost_approximation = sumOf_prevCosts_newVehicle - sumOf_prevCosts_oldVehicle(currentRoute,prevAct) + actInsertionCosts.getAdditionalCosts(); - /** - * calculates the path costs with new vehicle, c(forwardPath,newVehicle). - */ - double forwardPathCost_newVehicle = auxilliaryPathCostCalculator.costOfPath(path, prevActDepTime_newVehicle, newDriver, newVehicle); - //--------------------------- - - /** - * insertion_cost_approximation = c({0,1,...,i},newVehicle) + c({i,k,j,j+1,j+2,...,j+nuOfActsForwardLooking},newVehicle) - c({0,1,...,i,j,j+1,...,j+nuOfActsForwardLooking},oldVehicle) - */ - double insertion_cost_approximation = sumOf_prevCosts_newVehicle + forwardPathCost_newVehicle - pathCost_oldVehicle(currentRoute,path); - - /** - * memorize it in insertion-queue - */ - if(insertion_cost_approximation < best_known_insertion_costs){ - bestInsertionsQueue.add(new InsertionData(insertion_cost_approximation, InsertionData.NO_INDEX, actIndex, newVehicle, newDriver)); + /** + * memorize it in insertion-queue + */ + if(insertion_cost_approximation < best_known_insertion_costs){ + bestInsertionsQueue.add(new InsertionData(insertion_cost_approximation, InsertionData.NO_INDEX, actIndex, newVehicle, newDriver)); + } } - } /** @@ -227,25 +218,20 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul End nextAct = end; if(neighborhood.areNeighbors(serviceAct2Insert.getLocationId(), prevAct.getLocationId()) && neighborhood.areNeighbors(serviceAct2Insert.getLocationId(), nextAct.getLocationId())){ - //---------------------------- - //ActivityInsertionCostsEstimator - /** - * calculates the path costs with new vehicle, c(forwardPath,newVehicle). - */ - List path = Arrays.asList(prevAct,serviceAct2Insert,end); - double forwardPathCost_newVehicle = auxilliaryPathCostCalculator.costOfPath(path, prevActDepTime_newVehicle, newDriver, newVehicle); - //---------------------------- - - /** - * insertion_cost_approximation = c({0,1,...,i},newVehicle) + c({i,k,j,j+1,j+2,...,j+nuOfActsForwardLooking},newVehicle) - c({0,1,...,i,j,j+1,...,j+nuOfActsForwardLooking},oldVehicle) - */ - double insertion_cost_approximation = sumOf_prevCosts_newVehicle + forwardPathCost_newVehicle - pathCost_oldVehicle(currentRoute,path); + InsertionContext iContext = new InsertionContext(currentRoute, jobToInsert, newVehicle, newDriver, prevActDepTime_newVehicle); + ActivityInsertionCosts actInsertionCosts = activityInsertionCostsCalculator.calculate(iContext, prevAct, nextAct, serviceAct2Insert, prevActDepTime_newVehicle); + if(actInsertionCosts != null){ + /** + * insertion_cost_approximation = c({0,1,...,i},newVehicle) + c({i,k,j,j+1,j+2,...,j+nuOfActsForwardLooking},newVehicle) - c({0,1,...,i,j,j+1,...,j+nuOfActsForwardLooking},oldVehicle) + */ + double insertion_cost_approximation = sumOf_prevCosts_newVehicle - sumOf_prevCosts_oldVehicle(currentRoute,prevAct) + actInsertionCosts.getAdditionalCosts(); - /** - * memorize it in insertion-queue - */ - if(insertion_cost_approximation < best_known_insertion_costs){ - bestInsertionsQueue.add(new InsertionData(insertion_cost_approximation,InsertionData.NO_INDEX, actIndex, newVehicle, newDriver)); + /** + * memorize it in insertion-queue + */ + if(insertion_cost_approximation < best_known_insertion_costs){ + bestInsertionsQueue.add(new InsertionData(insertion_cost_approximation, InsertionData.NO_INDEX, actIndex, newVehicle, newDriver)); + } } } @@ -256,39 +242,40 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul * */ - if(memorySize==0){ + if(memorySize==0){ // return bestInsertion InsertionData insertion = bestInsertionsQueue.poll(); if(insertion != null){ best_insertion_index = insertion.getDeliveryInsertionIndex(); best_insertion_costs = insertion.getInsertionCost(); } } - - for(int i=0;i wholeTour = new ArrayList(); - wholeTour.add(start); - wholeTour.addAll(currentRoute.getTourActivities().getActivities()); - wholeTour.add(end); - wholeTour.add(data.getDeliveryInsertionIndex()+1, serviceAct2Insert); - - /** - * compute cost-diff of tour with and without new activity --> insertion_costs - */ - double insertion_costs = auxilliaryPathCostCalculator.costOfPath(wholeTour, start.getEndTime(), newDriver, newVehicle) - stateManager.getRouteState(currentRoute,StateTypes.COSTS).toDouble(); - - /** - * if better than best known, make it the best known - */ - if(insertion_costs < best_insertion_costs){ - best_insertion_index = data.getDeliveryInsertionIndex(); - best_insertion_costs = insertion_costs; + else{ + for(int i=0;i wholeTour = new ArrayList(); + wholeTour.add(start); + wholeTour.addAll(currentRoute.getTourActivities().getActivities()); + wholeTour.add(end); + wholeTour.add(data.getDeliveryInsertionIndex()+1, serviceAct2Insert); + + /** + * compute cost-diff of tour with and without new activity --> insertion_costs + */ + double insertion_costs = auxilliaryPathCostCalculator.costOfPath(wholeTour, start.getEndTime(), newDriver, newVehicle) - stateManager.getRouteState(currentRoute,StateTypes.COSTS).toDouble(); + + /** + * if better than best known, make it the best known + */ + if(insertion_costs < best_insertion_costs){ + best_insertion_index = data.getDeliveryInsertionIndex(); + best_insertion_costs = insertion_costs; + } } } if(best_insertion_index == InsertionData.NO_INDEX) return InsertionData.noInsertionFound(); @@ -323,36 +310,13 @@ final class CalculatesServiceInsertionOnRouteLevel implements JobInsertionCalcul } } - private double pathCost_oldVehicle(VehicleRoute vehicleRoute, List path) { - TourActivity act = path.get(path.size()-1); + private double sumOf_prevCosts_oldVehicle(VehicleRoute vehicleRoute, TourActivity act) { if(act instanceof End){ return stateManager.getRouteState(vehicleRoute,StateTypes.COSTS).toDouble(); } return stateManager.getActivityState(act,StateTypes.COSTS).toDouble(); } - /** - * returns the path or the partial route r_partial = {j+1,j+2,...,j+nuOfActsForwardLooking} - * - * @param route - * @param actIndex - * @return - */ - private List getForwardLookingPath(VehicleRoute route, int actIndex) { - List forwardLookingPath = new ArrayList(); - int nuOfActsInPath = 0; - int index = actIndex + 1; - while(index < route.getTourActivities().getActivities().size() && nuOfActsInPath < nuOfActsForwardLooking){ - forwardLookingPath.add(route.getTourActivities().getActivities().get(index)); - index++; - nuOfActsInPath++; - } - if(nuOfActsInPath < nuOfActsForwardLooking){ - forwardLookingPath.add(route.getEnd()); - } - return forwardLookingPath; - } - /** * creates a comparator to sort insertion-data in insertionQueue in ascending order according insertion costs. * @return diff --git a/jsprit-core/src/main/java/algorithms/CalculatorBuilder.java b/jsprit-core/src/main/java/algorithms/CalculatorBuilder.java index 621a8f27..4465baf0 100644 --- a/jsprit-core/src/main/java/algorithms/CalculatorBuilder.java +++ b/jsprit-core/src/main/java/algorithms/CalculatorBuilder.java @@ -238,7 +238,8 @@ class CalculatorBuilder { private CalculatorPlusListeners createStandardRoute(VehicleRoutingProblem vrp, StateManager activityStates2, int forwardLooking, int solutionMemory){ int after = forwardLooking; - JobInsertionCalculator jobInsertionCalculator = new CalculatesServiceInsertionOnRouteLevel(vrp.getTransportCosts(), vrp.getActivityCosts(), hardRouteLevelConstraint); + ActivityInsertionCostsCalculator routeLevelCostEstimator = new RouteLevelActivityInsertionCostsEstimator(vrp.getTransportCosts(), vrp.getActivityCosts(), constraintManager, activityStates2); + JobInsertionCalculator jobInsertionCalculator = new CalculatesServiceInsertionOnRouteLevel(vrp.getTransportCosts(), vrp.getActivityCosts(), constraintManager, routeLevelCostEstimator); ((CalculatesServiceInsertionOnRouteLevel)jobInsertionCalculator).setNuOfActsForwardLooking(after); ((CalculatesServiceInsertionOnRouteLevel)jobInsertionCalculator).setMemorySize(solutionMemory); ((CalculatesServiceInsertionOnRouteLevel)jobInsertionCalculator).setNeighborhood(vrp.getNeighborhood()); diff --git a/jsprit-core/src/main/java/algorithms/RouteLevelActivityInsertionCostsEstimator.java b/jsprit-core/src/main/java/algorithms/RouteLevelActivityInsertionCostsEstimator.java index 53d265fe..2daa5e63 100644 --- a/jsprit-core/src/main/java/algorithms/RouteLevelActivityInsertionCostsEstimator.java +++ b/jsprit-core/src/main/java/algorithms/RouteLevelActivityInsertionCostsEstimator.java @@ -35,8 +35,6 @@ class RouteLevelActivityInsertionCostsEstimator implements ActivityInsertionCost private HardActivityLevelConstraint hardConstraint; - private VehicleRoutingTransportCosts routingCosts; - private VehicleRoutingActivityCosts activityCosts; private AuxilliaryCostCalculator auxilliaryPathCostCalculator; @@ -47,9 +45,9 @@ class RouteLevelActivityInsertionCostsEstimator implements ActivityInsertionCost public RouteLevelActivityInsertionCostsEstimator(VehicleRoutingTransportCosts routingCosts, VehicleRoutingActivityCosts actCosts, HardActivityLevelConstraint hardActivityLevelConstraint, StateManager stateManager) { super(); - this.routingCosts = routingCosts; this.activityCosts = actCosts; this.hardConstraint = hardActivityLevelConstraint; + this.stateManager = stateManager; auxilliaryPathCostCalculator = new AuxilliaryCostCalculator(routingCosts, activityCosts); } @@ -75,46 +73,6 @@ class RouteLevelActivityInsertionCostsEstimator implements ActivityInsertionCost return new ActivityInsertionCosts(additionalCosts, 0.0); - -// -// -// double tp_costs_prevAct_newAct = routingCosts.getTransportCost(prevAct.getLocationId(), newAct.getLocationId(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); -// double tp_time_prevAct_newAct = routingCosts.getTransportTime(prevAct.getLocationId(), newAct.getLocationId(), depTimeAtPrevAct, iFacts.getNewDriver(), iFacts.getNewVehicle()); -// -// double newAct_arrTime = depTimeAtPrevAct + tp_time_prevAct_newAct; -// -// double newAct_endTime = CalcUtils.getActivityEndTime(newAct_arrTime, newAct); -// -// double act_costs_newAct = activityCosts.getActivityCost(newAct, newAct_arrTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); -// -// double tp_costs_newAct_nextAct = routingCosts.getTransportCost(newAct.getLocationId(), nextAct.getLocationId(), newAct_endTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); -// double tp_time_newAct_nextAct = routingCosts.getTransportTime(newAct.getLocationId(), nextAct.getLocationId(), newAct_endTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); -// -// double nextAct_arrTime = newAct_endTime + tp_time_newAct_nextAct; -// -// double act_costs_nextAct = activityCosts.getActivityCost(nextAct, nextAct_arrTime, iFacts.getNewDriver(), iFacts.getNewVehicle()); -// -// double totalCosts = tp_costs_prevAct_newAct + tp_costs_newAct_nextAct + act_costs_newAct + act_costs_nextAct; -// -// double oldCosts; -// double oldTime; -// if(iFacts.getRoute().isEmpty()){ -// oldCosts = 0.0; -// oldTime = 0.0; -// } -// else{ -// double tp_costs_prevAct_nextAct = routingCosts.getTransportCost(prevAct.getLocationId(), nextAct.getLocationId(), prevAct.getEndTime(), iFacts.getRoute().getDriver(), iFacts.getRoute().getVehicle()); -// double arrTime_nextAct = routingCosts.getTransportTime(prevAct.getLocationId(), nextAct.getLocationId(), prevAct.getEndTime(), iFacts.getNewDriver(), iFacts.getNewVehicle()); -// -// double actCost_nextAct = activityCosts.getActivityCost(nextAct, arrTime_nextAct, iFacts.getRoute().getDriver(), iFacts.getRoute().getVehicle()); -// oldCosts = tp_costs_prevAct_nextAct + actCost_nextAct; -// oldTime = (nextAct.getArrTime() - iFacts.getRoute().getDepartureTime()); -// } -// -// double additionalCosts = totalCosts - oldCosts; -// double additionalTime = (nextAct_arrTime - iFacts.getNewDepTime()) - oldTime; -// -// return new ActivityInsertionCosts(additionalCosts,additionalTime); } private double actCostsOld(VehicleRoute vehicleRoute, TourActivity act) { diff --git a/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertionOnRouteLevel.java b/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertionOnRouteLevel.java index ae1ef0c9..3af69cb6 100644 --- a/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertionOnRouteLevel.java +++ b/jsprit-core/src/test/java/algorithms/TestCalculatesServiceInsertionOnRouteLevel.java @@ -147,14 +147,13 @@ public class TestCalculatesServiceInsertionOnRouteLevel { states = new StateManagerImpl(); ExampleActivityCostFunction activityCosts = new ExampleActivityCostFunction(); - serviceInsertion = new CalculatesServiceInsertionOnRouteLevel(costs,activityCosts, hardRouteLevelConstraint); + ActivityInsertionCostsCalculator actInsertionCostCalculator = new RouteLevelActivityInsertionCostsEstimator(costs, activityCosts, new HardConstraints.HardTimeWindowActivityLevelConstraint(states, costs), states); + serviceInsertion = new CalculatesServiceInsertionOnRouteLevel(costs,activityCosts, new HardConstraints.HardLoadConstraint(states), actInsertionCostCalculator); serviceInsertion.setNuOfActsForwardLooking(4); serviceInsertion.setStates(states); updateStates = new UpdateStates(states, costs, activityCosts); - - } public TourActivity getActivityMock(String id, double earliestOperationStart, double currCost){ From b290521e77b20c210655c85be07c2e05fd25108e Mon Sep 17 00:00:00 2001 From: oblonski <4sschroeder@gmail.com> Date: Tue, 15 Oct 2013 07:04:00 +0200 Subject: [PATCH 3/3] merge master --- .../java/algorithms/ActivityTimeTracker.java | 2 -- .../algorithms/BestInsertionConcurrent.java | 20 ------------------- ...tesServiceInsertionConsideringFixCost.java | 2 -- .../CalculatesVehTypeDepServiceInsertion.java | 1 - .../algorithms/GreedySchrimpfFactory.java | 5 ----- .../src/main/java/algorithms/Inserter.java | 3 +-- .../java/algorithms/InsertionFactory.java | 1 - .../NeighborhoodThresholdInitialiser.java | 1 - .../java/algorithms/RemoveEmptyVehicles.java | 4 +--- .../algorithms/RuinAndRecreateModule.java | 1 - .../main/java/algorithms/SchrimpfFactory.java | 5 ----- .../main/java/algorithms/StateUpdates.java | 9 --------- .../algorithms/selectors/SelectRandomly.java | 3 +-- jsprit-core/src/main/java/basics/Service.java | 2 +- .../java/basics/VehicleRoutingProblem.java | 1 - .../main/java/basics/algo/TimeBreaker.java | 3 --- .../algo/VariationCoefficientBreaker.java | 2 -- .../VehicleRoutingAlgorithmListeners.java | 1 - .../src/main/java/basics/io/VrpXMLReader.java | 3 --- .../src/main/java/basics/io/VrpXMLWriter.java | 1 - .../VehicleRoutingTransportCostsMatrix.java | 1 + .../src/main/java/util/VrpVerifier.java | 2 -- .../BuildPDVRPAlgoFromScratchTest.java | 10 ---------- .../ExampleActivityCostFunction.java | 3 +-- .../java/algorithms/RefuseCollectionTest.java | 2 +- .../java/algorithms/TestAlgorithmReader.java | 2 -- .../src/test/java/algorithms/TestRefs.java | 2 +- .../selectors/SelectRandomlyTest.java | 2 -- .../algo/SearchStrategyManagerTest.java | 3 --- .../java/basics/algo/SearchStrategyTest.java | 3 --- .../test/java/basics/io/VrpReaderV2Test.java | 2 -- .../test/java/basics/io/VrpWriterV2Test.java | 5 +---- .../java/basics/route/ServiceActTest.java | 5 ++--- .../src/test/java/basics/route/TestTour.java | 7 +++---- 34 files changed, 14 insertions(+), 105 deletions(-) diff --git a/jsprit-core/src/main/java/algorithms/ActivityTimeTracker.java b/jsprit-core/src/main/java/algorithms/ActivityTimeTracker.java index 1cb0e5b6..88232330 100644 --- a/jsprit-core/src/main/java/algorithms/ActivityTimeTracker.java +++ b/jsprit-core/src/main/java/algorithms/ActivityTimeTracker.java @@ -1,9 +1,7 @@ package algorithms; import basics.costs.ForwardTransportTime; -import basics.route.Driver; import basics.route.TourActivity; -import basics.route.Vehicle; import basics.route.VehicleRoute; class ActivityTimeTracker implements ActivityVisitor{ diff --git a/jsprit-core/src/main/java/algorithms/BestInsertionConcurrent.java b/jsprit-core/src/main/java/algorithms/BestInsertionConcurrent.java index 4f41d2e0..d27f5dc1 100644 --- a/jsprit-core/src/main/java/algorithms/BestInsertionConcurrent.java +++ b/jsprit-core/src/main/java/algorithms/BestInsertionConcurrent.java @@ -12,26 +12,6 @@ ******************************************************************************/ package algorithms; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Random; -import java.util.concurrent.Callable; -import java.util.concurrent.CompletionService; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorCompletionService; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Future; - -import org.apache.log4j.Logger; - -import util.RandomNumberGeneration; -import algorithms.InsertionData.NoInsertionFound; -import basics.Job; -import basics.algo.InsertionListener; -import basics.route.VehicleRoute; // // diff --git a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionConsideringFixCost.java b/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionConsideringFixCost.java index 1961ec84..7a03913e 100644 --- a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionConsideringFixCost.java +++ b/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertionConsideringFixCost.java @@ -23,8 +23,6 @@ package algorithms; import org.apache.log4j.Logger; import algorithms.InsertionData.NoInsertionFound; -import algorithms.StateManager.State; -import algorithms.StateManager.States; import basics.Job; import basics.route.Driver; import basics.route.Vehicle; diff --git a/jsprit-core/src/main/java/algorithms/CalculatesVehTypeDepServiceInsertion.java b/jsprit-core/src/main/java/algorithms/CalculatesVehTypeDepServiceInsertion.java index 264ee753..1977fa02 100644 --- a/jsprit-core/src/main/java/algorithms/CalculatesVehTypeDepServiceInsertion.java +++ b/jsprit-core/src/main/java/algorithms/CalculatesVehTypeDepServiceInsertion.java @@ -26,7 +26,6 @@ import java.util.Collection; import org.apache.log4j.Logger; import algorithms.InsertionData.NoInsertionFound; -import algorithms.VehicleFleetManager.TypeKey; import basics.Job; import basics.route.Driver; import basics.route.Vehicle; diff --git a/jsprit-core/src/main/java/algorithms/GreedySchrimpfFactory.java b/jsprit-core/src/main/java/algorithms/GreedySchrimpfFactory.java index 90650985..59fe46a6 100644 --- a/jsprit-core/src/main/java/algorithms/GreedySchrimpfFactory.java +++ b/jsprit-core/src/main/java/algorithms/GreedySchrimpfFactory.java @@ -20,14 +20,9 @@ ******************************************************************************/ package algorithms; -import java.io.File; -import java.net.MalformedURLException; import java.net.URL; import util.Resource; - - - import basics.VehicleRoutingAlgorithm; import basics.VehicleRoutingProblem; import basics.io.AlgorithmConfig; diff --git a/jsprit-core/src/main/java/algorithms/Inserter.java b/jsprit-core/src/main/java/algorithms/Inserter.java index 09b7d116..6acf18a9 100644 --- a/jsprit-core/src/main/java/algorithms/Inserter.java +++ b/jsprit-core/src/main/java/algorithms/Inserter.java @@ -23,9 +23,8 @@ package algorithms; import algorithms.InsertionData.NoInsertionFound; import basics.Job; import basics.Service; -import basics.route.ServiceActivity; -import basics.route.TourActivityFactory; import basics.route.DefaultTourActivityFactory; +import basics.route.TourActivityFactory; import basics.route.VehicleRoute; class Inserter { diff --git a/jsprit-core/src/main/java/algorithms/InsertionFactory.java b/jsprit-core/src/main/java/algorithms/InsertionFactory.java index 182efa0f..20b66ae3 100644 --- a/jsprit-core/src/main/java/algorithms/InsertionFactory.java +++ b/jsprit-core/src/main/java/algorithms/InsertionFactory.java @@ -28,7 +28,6 @@ import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.log4j.Logger; import algorithms.HardConstraints.ConstraintManager; -import algorithms.StateUpdates.UpdateStates; import basics.VehicleRoutingProblem; import basics.algo.InsertionListener; import basics.algo.VehicleRoutingAlgorithmListeners.PrioritizedVRAListener; diff --git a/jsprit-core/src/main/java/algorithms/NeighborhoodThresholdInitialiser.java b/jsprit-core/src/main/java/algorithms/NeighborhoodThresholdInitialiser.java index 84010d03..7cf777e6 100644 --- a/jsprit-core/src/main/java/algorithms/NeighborhoodThresholdInitialiser.java +++ b/jsprit-core/src/main/java/algorithms/NeighborhoodThresholdInitialiser.java @@ -31,7 +31,6 @@ import util.EuclideanDistanceCalculator; import util.Locations; import util.NeighborhoodImpl; import util.Solutions; -import algorithms.selectors.SelectBest; import basics.VehicleRoutingAlgorithm; import basics.VehicleRoutingProblem; import basics.VehicleRoutingProblemSolution; diff --git a/jsprit-core/src/main/java/algorithms/RemoveEmptyVehicles.java b/jsprit-core/src/main/java/algorithms/RemoveEmptyVehicles.java index 3a1e7f0b..40d8ffe2 100644 --- a/jsprit-core/src/main/java/algorithms/RemoveEmptyVehicles.java +++ b/jsprit-core/src/main/java/algorithms/RemoveEmptyVehicles.java @@ -23,12 +23,10 @@ package algorithms; import java.util.ArrayList; import java.util.Collection; import java.util.List; + import org.apache.log4j.Logger; - -import basics.Job; import basics.algo.InsertionEndsListener; -import basics.algo.InsertionStartsListener; import basics.route.VehicleRoute; class RemoveEmptyVehicles implements InsertionEndsListener{ diff --git a/jsprit-core/src/main/java/algorithms/RuinAndRecreateModule.java b/jsprit-core/src/main/java/algorithms/RuinAndRecreateModule.java index 65e44c76..7106c640 100644 --- a/jsprit-core/src/main/java/algorithms/RuinAndRecreateModule.java +++ b/jsprit-core/src/main/java/algorithms/RuinAndRecreateModule.java @@ -22,7 +22,6 @@ package algorithms; import java.util.Collection; -import util.RouteUtils; import algorithms.RuinStrategy.RuinListener; import basics.Job; import basics.VehicleRoutingProblemSolution; diff --git a/jsprit-core/src/main/java/algorithms/SchrimpfFactory.java b/jsprit-core/src/main/java/algorithms/SchrimpfFactory.java index 661d76e0..81ae4be8 100644 --- a/jsprit-core/src/main/java/algorithms/SchrimpfFactory.java +++ b/jsprit-core/src/main/java/algorithms/SchrimpfFactory.java @@ -20,14 +20,9 @@ ******************************************************************************/ package algorithms; -import java.io.File; -import java.net.MalformedURLException; import java.net.URL; import util.Resource; - - - import basics.VehicleRoutingAlgorithm; import basics.VehicleRoutingProblem; import basics.io.AlgorithmConfig; diff --git a/jsprit-core/src/main/java/algorithms/StateUpdates.java b/jsprit-core/src/main/java/algorithms/StateUpdates.java index 7bd07b42..cd368ec2 100644 --- a/jsprit-core/src/main/java/algorithms/StateUpdates.java +++ b/jsprit-core/src/main/java/algorithms/StateUpdates.java @@ -22,13 +22,9 @@ package algorithms; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; -import java.util.Map; import org.apache.log4j.Logger; -import algorithms.BackwardInTimeListeners.BackwardInTimeListener; -import algorithms.ForwardInTimeListeners.ForwardInTimeListener; import algorithms.RuinStrategy.RuinListener; import algorithms.StateManager.StateImpl; import basics.Delivery; @@ -39,20 +35,15 @@ import basics.VehicleRoutingProblem; import basics.VehicleRoutingProblemSolution; import basics.algo.InsertionEndsListener; import basics.algo.InsertionStartsListener; -import basics.algo.IterationEndsListener; import basics.algo.IterationStartsListener; import basics.algo.JobInsertedListener; -import basics.algo.VehicleRoutingAlgorithmListener; import basics.costs.ForwardTransportCost; import basics.costs.ForwardTransportTime; import basics.costs.VehicleRoutingActivityCosts; import basics.costs.VehicleRoutingTransportCosts; import basics.route.DeliveryActivity; -import basics.route.Driver; -import basics.route.End; import basics.route.PickupActivity; import basics.route.ServiceActivity; -import basics.route.Start; import basics.route.TourActivity; import basics.route.Vehicle; import basics.route.VehicleRoute; diff --git a/jsprit-core/src/main/java/algorithms/selectors/SelectRandomly.java b/jsprit-core/src/main/java/algorithms/selectors/SelectRandomly.java index 31c3b31a..bc642381 100644 --- a/jsprit-core/src/main/java/algorithms/selectors/SelectRandomly.java +++ b/jsprit-core/src/main/java/algorithms/selectors/SelectRandomly.java @@ -25,9 +25,8 @@ import java.util.Collection; import java.util.List; import java.util.Random; -import basics.VehicleRoutingProblemSolution; - import util.RandomNumberGeneration; +import basics.VehicleRoutingProblemSolution; diff --git a/jsprit-core/src/main/java/basics/Service.java b/jsprit-core/src/main/java/basics/Service.java index 17c52371..f1d4e366 100644 --- a/jsprit-core/src/main/java/basics/Service.java +++ b/jsprit-core/src/main/java/basics/Service.java @@ -20,8 +20,8 @@ ******************************************************************************/ package basics; -import basics.route.TimeWindow; import util.Coordinate; +import basics.route.TimeWindow; public class Service implements Job { diff --git a/jsprit-core/src/main/java/basics/VehicleRoutingProblem.java b/jsprit-core/src/main/java/basics/VehicleRoutingProblem.java index aec7fbde..eca1ed94 100644 --- a/jsprit-core/src/main/java/basics/VehicleRoutingProblem.java +++ b/jsprit-core/src/main/java/basics/VehicleRoutingProblem.java @@ -28,7 +28,6 @@ import basics.costs.DefaultVehicleRoutingActivityCosts; import basics.costs.VehicleRoutingActivityCosts; import basics.costs.VehicleRoutingTransportCosts; import basics.route.Vehicle; -import basics.route.VehicleImpl; import basics.route.VehicleType; import basics.route.VehicleTypeImpl; diff --git a/jsprit-core/src/main/java/basics/algo/TimeBreaker.java b/jsprit-core/src/main/java/basics/algo/TimeBreaker.java index 806758ac..6d89297d 100644 --- a/jsprit-core/src/main/java/basics/algo/TimeBreaker.java +++ b/jsprit-core/src/main/java/basics/algo/TimeBreaker.java @@ -23,9 +23,6 @@ package basics.algo; import java.util.Collection; -import org.apache.commons.math.stat.StatUtils; -import org.apache.commons.math.stat.descriptive.moment.Mean; -import org.apache.commons.math.stat.descriptive.moment.StandardDeviation; import org.apache.log4j.Logger; import basics.VehicleRoutingAlgorithm; diff --git a/jsprit-core/src/main/java/basics/algo/VariationCoefficientBreaker.java b/jsprit-core/src/main/java/basics/algo/VariationCoefficientBreaker.java index 743eabc3..c1d2aeb9 100644 --- a/jsprit-core/src/main/java/basics/algo/VariationCoefficientBreaker.java +++ b/jsprit-core/src/main/java/basics/algo/VariationCoefficientBreaker.java @@ -24,12 +24,10 @@ package basics.algo; import java.util.Collection; import org.apache.commons.math.stat.StatUtils; -import org.apache.commons.math.stat.descriptive.moment.Mean; import org.apache.commons.math.stat.descriptive.moment.StandardDeviation; import org.apache.log4j.Logger; import util.Solutions; - import basics.VehicleRoutingAlgorithm; import basics.VehicleRoutingProblem; import basics.VehicleRoutingProblemSolution; diff --git a/jsprit-core/src/main/java/basics/algo/VehicleRoutingAlgorithmListeners.java b/jsprit-core/src/main/java/basics/algo/VehicleRoutingAlgorithmListeners.java index 506a52fe..b341c653 100644 --- a/jsprit-core/src/main/java/basics/algo/VehicleRoutingAlgorithmListeners.java +++ b/jsprit-core/src/main/java/basics/algo/VehicleRoutingAlgorithmListeners.java @@ -25,7 +25,6 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.List; -import java.util.PriorityQueue; import java.util.TreeSet; import basics.VehicleRoutingAlgorithm; diff --git a/jsprit-core/src/main/java/basics/io/VrpXMLReader.java b/jsprit-core/src/main/java/basics/io/VrpXMLReader.java index 2ede157b..61bd6734 100644 --- a/jsprit-core/src/main/java/basics/io/VrpXMLReader.java +++ b/jsprit-core/src/main/java/basics/io/VrpXMLReader.java @@ -46,12 +46,9 @@ import basics.VehicleRoutingProblem.FleetComposition; import basics.VehicleRoutingProblem.FleetSize; import basics.VehicleRoutingProblemSolution; import basics.route.DefaultTourActivityFactory; -import basics.route.DeliveryActivity; import basics.route.Driver; import basics.route.DriverImpl; import basics.route.End; -import basics.route.PickupActivity; -import basics.route.ServiceActivity; import basics.route.Start; import basics.route.TimeWindow; import basics.route.TourActivity; diff --git a/jsprit-core/src/main/java/basics/io/VrpXMLWriter.java b/jsprit-core/src/main/java/basics/io/VrpXMLWriter.java index f38d874a..0817ecb8 100644 --- a/jsprit-core/src/main/java/basics/io/VrpXMLWriter.java +++ b/jsprit-core/src/main/java/basics/io/VrpXMLWriter.java @@ -37,7 +37,6 @@ import basics.Job; import basics.Service; import basics.VehicleRoutingProblem; import basics.VehicleRoutingProblemSolution; -import basics.route.ServiceActivity; import basics.route.TourActivity; import basics.route.TourActivity.JobActivity; import basics.route.Vehicle; diff --git a/jsprit-core/src/main/java/util/VehicleRoutingTransportCostsMatrix.java b/jsprit-core/src/main/java/util/VehicleRoutingTransportCostsMatrix.java index 8caf2fc5..637d2f70 100644 --- a/jsprit-core/src/main/java/util/VehicleRoutingTransportCostsMatrix.java +++ b/jsprit-core/src/main/java/util/VehicleRoutingTransportCostsMatrix.java @@ -25,6 +25,7 @@ import java.util.Map; import org.apache.log4j.Logger; +import basics.VehicleRoutingProblem; import basics.costs.VehicleRoutingTransportCosts; import basics.route.Driver; import basics.route.Vehicle; diff --git a/jsprit-core/src/main/java/util/VrpVerifier.java b/jsprit-core/src/main/java/util/VrpVerifier.java index 96025820..ba5c554b 100644 --- a/jsprit-core/src/main/java/util/VrpVerifier.java +++ b/jsprit-core/src/main/java/util/VrpVerifier.java @@ -21,8 +21,6 @@ package util; import java.util.Collection; -import java.util.HashSet; -import java.util.Set; import org.apache.log4j.Logger; diff --git a/jsprit-core/src/test/java/algorithms/BuildPDVRPAlgoFromScratchTest.java b/jsprit-core/src/test/java/algorithms/BuildPDVRPAlgoFromScratchTest.java index 1bed85a2..e2b1a33f 100644 --- a/jsprit-core/src/test/java/algorithms/BuildPDVRPAlgoFromScratchTest.java +++ b/jsprit-core/src/test/java/algorithms/BuildPDVRPAlgoFromScratchTest.java @@ -26,9 +26,6 @@ import org.apache.log4j.Logger; import org.junit.Before; import org.junit.Test; -import util.Solutions; -import algorithms.BackwardInTimeListeners.BackwardInTimeListener; -import algorithms.ForwardInTimeListeners.ForwardInTimeListener; import algorithms.HardConstraints.HardActivityLevelConstraintManager; import algorithms.StateManager.StateImpl; import algorithms.StateUpdates.UpdateActivityTimes; @@ -44,18 +41,11 @@ import basics.VehicleRoutingAlgorithm; import basics.VehicleRoutingProblem; import basics.VehicleRoutingProblemSolution; import basics.algo.InsertionStartsListener; -import basics.algo.IterationStartsListener; import basics.algo.JobInsertedListener; import basics.algo.SearchStrategy; import basics.algo.SearchStrategyManager; import basics.algo.SolutionCostCalculator; import basics.io.VrpXMLReader; -import basics.io.VrpXMLWriter; -import basics.route.DeliveryActivity; -import basics.route.End; -import basics.route.PickupActivity; -import basics.route.Start; -import basics.route.TourActivity; import basics.route.VehicleRoute; public class BuildPDVRPAlgoFromScratchTest { diff --git a/jsprit-core/src/test/java/algorithms/ExampleActivityCostFunction.java b/jsprit-core/src/test/java/algorithms/ExampleActivityCostFunction.java index 2cd3b699..88e6997c 100644 --- a/jsprit-core/src/test/java/algorithms/ExampleActivityCostFunction.java +++ b/jsprit-core/src/test/java/algorithms/ExampleActivityCostFunction.java @@ -21,11 +21,10 @@ package algorithms; import basics.costs.VehicleRoutingActivityCosts; -import basics.costs.VehicleRoutingActivityCosts.Time; import basics.route.Driver; import basics.route.TourActivity; -import basics.route.Vehicle; import basics.route.TourActivity.JobActivity; +import basics.route.Vehicle; public class ExampleActivityCostFunction implements VehicleRoutingActivityCosts{ diff --git a/jsprit-core/src/test/java/algorithms/RefuseCollectionTest.java b/jsprit-core/src/test/java/algorithms/RefuseCollectionTest.java index 277b8e08..e6f269a0 100644 --- a/jsprit-core/src/test/java/algorithms/RefuseCollectionTest.java +++ b/jsprit-core/src/test/java/algorithms/RefuseCollectionTest.java @@ -20,7 +20,7 @@ ******************************************************************************/ package algorithms; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; import java.io.BufferedReader; import java.io.File; diff --git a/jsprit-core/src/test/java/algorithms/TestAlgorithmReader.java b/jsprit-core/src/test/java/algorithms/TestAlgorithmReader.java index 949cdfa3..a448f592 100644 --- a/jsprit-core/src/test/java/algorithms/TestAlgorithmReader.java +++ b/jsprit-core/src/test/java/algorithms/TestAlgorithmReader.java @@ -25,8 +25,6 @@ import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Collection; -import java.util.HashSet; -import java.util.Set; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.XMLConfiguration; diff --git a/jsprit-core/src/test/java/algorithms/TestRefs.java b/jsprit-core/src/test/java/algorithms/TestRefs.java index 471775b7..381d726d 100644 --- a/jsprit-core/src/test/java/algorithms/TestRefs.java +++ b/jsprit-core/src/test/java/algorithms/TestRefs.java @@ -20,7 +20,7 @@ ******************************************************************************/ package algorithms; -import static org.junit.Assert.*; +import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; diff --git a/jsprit-core/src/test/java/algorithms/selectors/SelectRandomlyTest.java b/jsprit-core/src/test/java/algorithms/selectors/SelectRandomlyTest.java index c8989a4d..345559ed 100644 --- a/jsprit-core/src/test/java/algorithms/selectors/SelectRandomlyTest.java +++ b/jsprit-core/src/test/java/algorithms/selectors/SelectRandomlyTest.java @@ -32,8 +32,6 @@ import java.util.Random; import org.junit.Test; -import algorithms.selectors.SelectRandomly; -import basics.VehicleRoutingProblem; import basics.VehicleRoutingProblemSolution; diff --git a/jsprit-core/src/test/java/basics/algo/SearchStrategyManagerTest.java b/jsprit-core/src/test/java/basics/algo/SearchStrategyManagerTest.java index 067494a9..84c851b1 100644 --- a/jsprit-core/src/test/java/basics/algo/SearchStrategyManagerTest.java +++ b/jsprit-core/src/test/java/basics/algo/SearchStrategyManagerTest.java @@ -31,9 +31,6 @@ import java.util.Random; import org.junit.Test; -import basics.algo.SearchStrategy; -import basics.algo.SearchStrategyManager; - public class SearchStrategyManagerTest { diff --git a/jsprit-core/src/test/java/basics/algo/SearchStrategyTest.java b/jsprit-core/src/test/java/basics/algo/SearchStrategyTest.java index abc56317..45c34ae9 100644 --- a/jsprit-core/src/test/java/basics/algo/SearchStrategyTest.java +++ b/jsprit-core/src/test/java/basics/algo/SearchStrategyTest.java @@ -34,9 +34,6 @@ import algorithms.acceptors.SolutionAcceptor; import algorithms.selectors.SolutionSelector; import basics.VehicleRoutingProblem; import basics.VehicleRoutingProblemSolution; -import basics.algo.SearchStrategy; -import basics.algo.SearchStrategyModule; -import basics.algo.SearchStrategyModuleListener; diff --git a/jsprit-core/src/test/java/basics/io/VrpReaderV2Test.java b/jsprit-core/src/test/java/basics/io/VrpReaderV2Test.java index d7c12a01..339ca999 100644 --- a/jsprit-core/src/test/java/basics/io/VrpReaderV2Test.java +++ b/jsprit-core/src/test/java/basics/io/VrpReaderV2Test.java @@ -34,10 +34,8 @@ import org.junit.Test; import basics.Service; import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblem.Builder; import basics.VehicleRoutingProblem.FleetComposition; import basics.VehicleRoutingProblem.FleetSize; -import basics.io.VrpXMLReader; import basics.route.Vehicle; public class VrpReaderV2Test { diff --git a/jsprit-core/src/test/java/basics/io/VrpWriterV2Test.java b/jsprit-core/src/test/java/basics/io/VrpWriterV2Test.java index 65bc136a..e4c2f2d7 100644 --- a/jsprit-core/src/test/java/basics/io/VrpWriterV2Test.java +++ b/jsprit-core/src/test/java/basics/io/VrpWriterV2Test.java @@ -31,19 +31,16 @@ import org.junit.Test; import basics.Service; import basics.VehicleRoutingProblem; -import basics.VehicleRoutingProblemSolution; import basics.VehicleRoutingProblem.Builder; import basics.VehicleRoutingProblem.FleetComposition; import basics.VehicleRoutingProblem.FleetSize; -import basics.io.VrpXMLReader; -import basics.io.VrpXMLWriter; +import basics.VehicleRoutingProblemSolution; import basics.route.End; import basics.route.ServiceActivity; import basics.route.Start; import basics.route.Vehicle; import basics.route.VehicleImpl; import basics.route.VehicleRoute; -import basics.route.VehicleType; import basics.route.VehicleTypeImpl; public class VrpWriterV2Test { diff --git a/jsprit-core/src/test/java/basics/route/ServiceActTest.java b/jsprit-core/src/test/java/basics/route/ServiceActTest.java index 37050843..c4c202e2 100644 --- a/jsprit-core/src/test/java/basics/route/ServiceActTest.java +++ b/jsprit-core/src/test/java/basics/route/ServiceActTest.java @@ -20,13 +20,12 @@ ******************************************************************************/ package basics.route; -import static org.junit.Assert.*; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import org.junit.Test; import basics.Service; -import basics.Service.Builder; -import basics.route.ServiceActivity; public class ServiceActTest { diff --git a/jsprit-core/src/test/java/basics/route/TestTour.java b/jsprit-core/src/test/java/basics/route/TestTour.java index 8b5d6263..bcc80935 100644 --- a/jsprit-core/src/test/java/basics/route/TestTour.java +++ b/jsprit-core/src/test/java/basics/route/TestTour.java @@ -20,15 +20,14 @@ ******************************************************************************/ package basics.route; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; import basics.Service; -import basics.Service.Builder; -import basics.route.ServiceActivity; -import basics.route.TourActivities; public class TestTour {