From 08bb31c4f59c867038a0fa3b3247c854bbf28097 Mon Sep 17 00:00:00 2001 From: Stefan Schroeder <4sschroeder@gmail.com> Date: Wed, 2 Oct 2013 15:37:37 +0200 Subject: [PATCH] relax API --- ...a => ActivityInsertionCostCalculator.java} | 4 ++- .../java/algorithms/BestInsertionBuilder.java | 34 +++++++++++++++++++ .../CalculatesServiceInsertion.java | 6 ++-- .../java/algorithms/CalculatorBuilder.java | 2 +- .../algorithms/EuclideanServiceDistance.java | 2 +- .../java/algorithms/InsertionStrategy.java | 2 +- .../algorithms/InsertionStrategyBuilder.java | 7 ++++ .../src/main/java/algorithms/JobDistance.java | 4 +-- .../java/algorithms/JobDistanceAvgCosts.java | 4 +-- .../java/algorithms/JobDistanceBeeline.java | 2 +- .../MarginalsCalculusTriangleInequality.java | 2 +- .../algorithms/RadialRuinStrategyFactory.java | 22 ++++++++++++ .../algorithms/RandomRuinStrategyFactory.java | 19 +++++++++++ .../algorithms/RuinAndRecreateModule.java | 8 +++-- .../src/main/java/algorithms/RuinRadial.java | 2 +- .../main/java/algorithms/RuinStrategy.java | 2 +- .../java/algorithms/RuinStrategyFactory.java | 2 +- .../main/java/algorithms/StateManager.java | 2 +- .../BuildCVRPAlgoFromScratchTest.java | 2 +- .../BuildPDVRPAlgoFromScratchTest.java | 5 ++- .../algorithms/TestJobDistanceAvgCosts.java | 4 +-- 21 files changed, 112 insertions(+), 25 deletions(-) rename jsprit-core/src/main/java/algorithms/{MarginalsCalculus.java => ActivityInsertionCostCalculator.java} (97%) create mode 100644 jsprit-core/src/main/java/algorithms/BestInsertionBuilder.java create mode 100644 jsprit-core/src/main/java/algorithms/InsertionStrategyBuilder.java create mode 100644 jsprit-core/src/main/java/algorithms/RadialRuinStrategyFactory.java create mode 100644 jsprit-core/src/main/java/algorithms/RandomRuinStrategyFactory.java diff --git a/jsprit-core/src/main/java/algorithms/MarginalsCalculus.java b/jsprit-core/src/main/java/algorithms/ActivityInsertionCostCalculator.java similarity index 97% rename from jsprit-core/src/main/java/algorithms/MarginalsCalculus.java rename to jsprit-core/src/main/java/algorithms/ActivityInsertionCostCalculator.java index d17e9bfc..cfbb0f3f 100644 --- a/jsprit-core/src/main/java/algorithms/MarginalsCalculus.java +++ b/jsprit-core/src/main/java/algorithms/ActivityInsertionCostCalculator.java @@ -22,7 +22,7 @@ package algorithms; import basics.route.TourActivity; -interface MarginalsCalculus { +interface ActivityInsertionCostCalculator { class Marginals { @@ -51,5 +51,7 @@ interface MarginalsCalculus { } Marginals calculate(InsertionContext iContext, TourActivity prevAct, TourActivity nextAct, TourActivity newAct, double depTimeAtPrevAct); + + } diff --git a/jsprit-core/src/main/java/algorithms/BestInsertionBuilder.java b/jsprit-core/src/main/java/algorithms/BestInsertionBuilder.java new file mode 100644 index 00000000..9d415afa --- /dev/null +++ b/jsprit-core/src/main/java/algorithms/BestInsertionBuilder.java @@ -0,0 +1,34 @@ +package algorithms; + +import basics.VehicleRoutingProblem; +import algorithms.HardConstraints.HardActivityLevelConstraint; +import algorithms.HardConstraints.HardRouteLevelConstraint; + +public class BestInsertionBuilder implements InsertionStrategyBuilder{ + + private VehicleRoutingProblem vrp; + + private StateManager stateManager; + + public BestInsertionBuilder(VehicleRoutingProblem vrp, StateManager stateManager) { + super(); + this.vrp = vrp; + this.stateManager = stateManager; + } + + public void addConstraint(HardActivityLevelConstraint hardActvitiyLevelConstraint){}; + + public void addConstraint(HardRouteLevelConstraint hardRouteLevelConstraint){}; + + public void setRouteLevel(int forwardLooking, int memory){}; + + public void setLocalLevel(){}; + + public void setActivityInsertionCostCalculator(ActivityInsertionCostCalculator costCalc){}; + + @Override + public InsertionStrategy build() { + return null; + } + +} diff --git a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertion.java b/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertion.java index a792fb53..e14b2277 100644 --- a/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertion.java +++ b/jsprit-core/src/main/java/algorithms/CalculatesServiceInsertion.java @@ -16,7 +16,7 @@ import org.apache.log4j.Logger; import util.Neighborhood; import algorithms.HardConstraints.HardRouteLevelConstraint; -import algorithms.MarginalsCalculus.Marginals; +import algorithms.ActivityInsertionCostCalculator.Marginals; import basics.Job; import basics.Service; import basics.costs.VehicleRoutingTransportCosts; @@ -47,7 +47,7 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{ } }; - private MarginalsCalculus marginalCalculus; + private ActivityInsertionCostCalculator marginalCalculus; private VehicleRoutingTransportCosts transportCosts; @@ -58,7 +58,7 @@ final class CalculatesServiceInsertion implements JobInsertionCalculator{ logger.info("initialise neighborhood " + neighborhood); } - public CalculatesServiceInsertion(VehicleRoutingTransportCosts routingCosts, MarginalsCalculus marginalsCalculus, HardRouteLevelConstraint hardRouteLevelConstraint) { + public CalculatesServiceInsertion(VehicleRoutingTransportCosts routingCosts, ActivityInsertionCostCalculator marginalsCalculus, HardRouteLevelConstraint hardRouteLevelConstraint) { super(); this.marginalCalculus = marginalsCalculus; this.hardRouteLevelConstraint = hardRouteLevelConstraint; diff --git a/jsprit-core/src/main/java/algorithms/CalculatorBuilder.java b/jsprit-core/src/main/java/algorithms/CalculatorBuilder.java index 0a3898a2..95859ce8 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); + ActivityInsertionCostCalculator defaultCalc = new MarginalsCalculusTriangleInequality(vrp.getTransportCosts(), vrp.getActivityCosts(), constraintManager); JobInsertionCalculator standardServiceInsertion = new CalculatesServiceInsertion(vrp.getTransportCosts(), defaultCalc, constraintManager); ((CalculatesServiceInsertion) standardServiceInsertion).setNeighborhood(vrp.getNeighborhood()); diff --git a/jsprit-core/src/main/java/algorithms/EuclideanServiceDistance.java b/jsprit-core/src/main/java/algorithms/EuclideanServiceDistance.java index 84562fbc..923aad49 100644 --- a/jsprit-core/src/main/java/algorithms/EuclideanServiceDistance.java +++ b/jsprit-core/src/main/java/algorithms/EuclideanServiceDistance.java @@ -23,7 +23,7 @@ class EuclideanServiceDistance implements JobDistance { } @Override - public double calculateDistance(Job i, Job j) { + public double getDistance(Job i, Job j) { double avgCost = 0.0; if (i instanceof Service && j instanceof Service) { if (i.equals(j)) { diff --git a/jsprit-core/src/main/java/algorithms/InsertionStrategy.java b/jsprit-core/src/main/java/algorithms/InsertionStrategy.java index 4ebc9ffa..50b1e160 100644 --- a/jsprit-core/src/main/java/algorithms/InsertionStrategy.java +++ b/jsprit-core/src/main/java/algorithms/InsertionStrategy.java @@ -27,7 +27,7 @@ import basics.route.VehicleRoute; * */ -interface InsertionStrategy { +public interface InsertionStrategy { class Insertion { diff --git a/jsprit-core/src/main/java/algorithms/InsertionStrategyBuilder.java b/jsprit-core/src/main/java/algorithms/InsertionStrategyBuilder.java new file mode 100644 index 00000000..04e34208 --- /dev/null +++ b/jsprit-core/src/main/java/algorithms/InsertionStrategyBuilder.java @@ -0,0 +1,7 @@ +package algorithms; + +public interface InsertionStrategyBuilder { + + public InsertionStrategy build(); + +} diff --git a/jsprit-core/src/main/java/algorithms/JobDistance.java b/jsprit-core/src/main/java/algorithms/JobDistance.java index 82464989..9f384ee0 100644 --- a/jsprit-core/src/main/java/algorithms/JobDistance.java +++ b/jsprit-core/src/main/java/algorithms/JobDistance.java @@ -16,8 +16,8 @@ import basics.Job; -interface JobDistance { +public interface JobDistance { - public double calculateDistance(Job i, Job j); + public double getDistance(Job i, Job j); } diff --git a/jsprit-core/src/main/java/algorithms/JobDistanceAvgCosts.java b/jsprit-core/src/main/java/algorithms/JobDistanceAvgCosts.java index 176cb946..538a750d 100644 --- a/jsprit-core/src/main/java/algorithms/JobDistanceAvgCosts.java +++ b/jsprit-core/src/main/java/algorithms/JobDistanceAvgCosts.java @@ -45,7 +45,7 @@ class JobDistanceAvgCosts implements JobDistance { *
If the distance between two jobs cannot be calculated with input-transport costs, it tries the euclidean distance between these jobs.
*/
@Override
- public double calculateDistance(Job i, Job j) {
+ public double getDistance(Job i, Job j) {
double avgCost = 0.0;
if (i instanceof Service && j instanceof Service) {
if (i.equals(j)) {
@@ -72,7 +72,7 @@ class JobDistanceAvgCosts implements JobDistance {
// now try the euclidean distance between these two services
}
EuclideanServiceDistance euclidean = new EuclideanServiceDistance();
- distance = euclidean.calculateDistance(s_i, s_j);
+ distance = euclidean.getDistance(s_i, s_j);
return distance;
}
diff --git a/jsprit-core/src/main/java/algorithms/JobDistanceBeeline.java b/jsprit-core/src/main/java/algorithms/JobDistanceBeeline.java
index aef489fe..5db58cca 100644
--- a/jsprit-core/src/main/java/algorithms/JobDistanceBeeline.java
+++ b/jsprit-core/src/main/java/algorithms/JobDistanceBeeline.java
@@ -29,7 +29,7 @@ class JobDistanceBeeline implements JobDistance {
}
@Override
- public double calculateDistance(Job i, Job j) {
+ public double getDistance(Job i, Job j) {
double avgCost = 0.0;
if (i instanceof Service && j instanceof Service) {
if (i.equals(j)) {
diff --git a/jsprit-core/src/main/java/algorithms/MarginalsCalculusTriangleInequality.java b/jsprit-core/src/main/java/algorithms/MarginalsCalculusTriangleInequality.java
index f4ab4005..6eb0c245 100644
--- a/jsprit-core/src/main/java/algorithms/MarginalsCalculusTriangleInequality.java
+++ b/jsprit-core/src/main/java/algorithms/MarginalsCalculusTriangleInequality.java
@@ -25,7 +25,7 @@ import basics.costs.VehicleRoutingActivityCosts;
import basics.costs.VehicleRoutingTransportCosts;
import basics.route.TourActivity;
-class MarginalsCalculusTriangleInequality implements MarginalsCalculus{
+class MarginalsCalculusTriangleInequality implements ActivityInsertionCostCalculator{
private HardActivityLevelConstraint hardConstraint;
diff --git a/jsprit-core/src/main/java/algorithms/RadialRuinStrategyFactory.java b/jsprit-core/src/main/java/algorithms/RadialRuinStrategyFactory.java
new file mode 100644
index 00000000..c541c4c9
--- /dev/null
+++ b/jsprit-core/src/main/java/algorithms/RadialRuinStrategyFactory.java
@@ -0,0 +1,22 @@
+package algorithms;
+
+import basics.VehicleRoutingProblem;
+
+public class RadialRuinStrategyFactory implements RuinStrategyFactory{
+
+ private double fraction;
+
+ private JobDistance jobDistance;
+
+ public RadialRuinStrategyFactory(double fraction, JobDistance jobDistance) {
+ super();
+ this.fraction = fraction;
+ this.jobDistance = jobDistance;
+ }
+
+ @Override
+ public RuinStrategy createStrategy(VehicleRoutingProblem vrp) {
+ return new RuinRadial(vrp,fraction,jobDistance);
+ }
+
+}
diff --git a/jsprit-core/src/main/java/algorithms/RandomRuinStrategyFactory.java b/jsprit-core/src/main/java/algorithms/RandomRuinStrategyFactory.java
new file mode 100644
index 00000000..5a32c9f2
--- /dev/null
+++ b/jsprit-core/src/main/java/algorithms/RandomRuinStrategyFactory.java
@@ -0,0 +1,19 @@
+package algorithms;
+
+import basics.VehicleRoutingProblem;
+
+public class RandomRuinStrategyFactory implements RuinStrategyFactory{
+
+ private double fraction;
+
+ public RandomRuinStrategyFactory(double fraction) {
+ super();
+ this.fraction = fraction;
+ }
+
+ @Override
+ public RuinStrategy createStrategy(VehicleRoutingProblem vrp) {
+ return new RuinRandom(vrp, fraction);
+ }
+
+}
diff --git a/jsprit-core/src/main/java/algorithms/RuinAndRecreateModule.java b/jsprit-core/src/main/java/algorithms/RuinAndRecreateModule.java
index b296dd0f..2868d525 100644
--- a/jsprit-core/src/main/java/algorithms/RuinAndRecreateModule.java
+++ b/jsprit-core/src/main/java/algorithms/RuinAndRecreateModule.java
@@ -30,7 +30,7 @@ import basics.algo.InsertionListener;
import basics.algo.SearchStrategyModule;
import basics.algo.SearchStrategyModuleListener;
-class RuinAndRecreateModule implements SearchStrategyModule{
+public class RuinAndRecreateModule implements SearchStrategyModule{
private InsertionStrategy insertion;
@@ -49,9 +49,13 @@ class RuinAndRecreateModule implements SearchStrategyModule{
public VehicleRoutingProblemSolution runAndGetSolution(VehicleRoutingProblemSolution vrpSolution) {
Collection