diff --git a/.gitignore b/.gitignore index 82606be8..ad4df13a 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ # Eclipse .project -.classpath \ No newline at end of file +.classpath +/.settings/ diff --git a/.travis.yml b/.travis.yml index 40e6f9fc..26e49a8f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,23 +1,66 @@ language: java -jdk: - - openjdk7 - - oraclejdk7 - - oraclejdk8 +sudo: false +matrix: + fast_finish: true + include: + - jdk: openjdk7 + - jdk: oraclejdk8 + # Java 9 needs to be manually installed/upgraded + # see: https://github.com/travis-ci/travis-ci/issues/2968#issuecomment-149164058 + - jdk: oraclejdk9 + env: JVM=latest + sudo: required + dist: trusty + group: edge + allow_failures: + - jdk: oraclejdk9 -deploy: - provider: script - script: "cp .travis.settings.xml $HOME/.m2/settings.xml && mvn deploy" - skip_cleanup: true - on: - tags: true +env: + global: + - BASEURL=https://www-eu.apache.org/dist/maven/maven-3/VERSION/binaries/apache-maven-VERSION-bin.zip + - FILE=apache-maven-VERSION-bin.zip + - DIR=apache-maven-VERSION + - VERSION=3.3.9 +# - secure: "j6a61/qnfFcSjx5XxmxO2hqBOwtVx5HWrD1+4Atl7WG/pRKz9+jSga1Y7oDAFb2SIl8S65kDmPQB/vC8aHxUDj/Wizjxnxn1FhPqoe9yO6Ztft+984FKFyvj7s6tsBJKcehGec+chTOwZQpH4oI4rU6IlepDHnGLHiOd0Iviryg=" +# - secure: "GiFr+v2lTQk/sTQB7CYjju1/mupS8LSJupmizLqY454utiZkabDMBOZQnF9ukpy7WhveB9hKQyEKf9iP2w7HSYEjgvogT26vZ5f2MeLnR4SWvqEtf/WBvvh+W+k/rb2f6YgitkB4Jlxn2izemBEDuKplGJphzGW41lf8XZ2IxVI=" + +before_install: + # update maven + - if [ "$TRAVIS_OS_NAME" == "linux" ]; then + wget --no-check-certificate $(echo -n $BASEURL | sed -e 's#VERSION#'$VERSION'#g'); + unzip -qq $(echo -n $FILE | sed -e 's#VERSION#'$VERSION'#'); + export M2_HOME=$PWD/$(echo -n $DIR | sed -e 's#VERSION#'$VERSION'#'); + export PATH=$M2_HOME/bin:$PATH; + fi + # update java 9 + - if [ "$TRAVIS_OS_NAME" == "linux" ] && [ "$JVM" == "latest" ]; then + sudo apt-get update -qq; + sudo /bin/echo -e oracle-java9-installer shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections; + sudo apt-get -o Dpkg::Options::="--force-confnew" install -y oracle-java9-installer oracle-java9-set-default oracle-java9-unlimited-jce-policy; + sudo update-java-alternatives -s java-9-oracle; + fi +# - if [ "$TRAVIS_JDK_VERSION" == oraclejdk9 ]; then +# sudo rm /etc/mavenrc; +# fi -# do not install anything instead return true via unix command true install: true -script: mvn clean test + +script: + - mvn clean test verify -B + - mvn clean package + notifications: email: - github@graphhopper.com -# enable container-based stack -sudo: false +cache: + directories: + - $HOME/.m2 + +deploy: + provider: script + script: "mvn deploy --settings .travis.settings.xml -DskipTests=true -B -P selected-build" + skip_cleanup: true + on: + branch: master diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/Skills.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/Skills.java index 6a23c154..ddc7df8e 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/Skills.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/Skills.java @@ -109,7 +109,7 @@ public class Skills { * @return true if skill is included, false otherwise */ public boolean containsSkill(String skill) { - return skills.contains(skill.toLowerCase()); + return skills.contains(skill.trim().toLowerCase());// trim to be consistent with addSkill() } @Override diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/cost/AbstractForwardVehicleRoutingTransportCosts.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/cost/AbstractForwardVehicleRoutingTransportCosts.java index ac9f9379..c35cb119 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/cost/AbstractForwardVehicleRoutingTransportCosts.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/cost/AbstractForwardVehicleRoutingTransportCosts.java @@ -22,6 +22,9 @@ import com.graphhopper.jsprit.core.problem.driver.Driver; import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; public abstract class AbstractForwardVehicleRoutingTransportCosts implements VehicleRoutingTransportCosts { + + @Override + public abstract double getDistance(Location from, Location to, double departureTime, Vehicle vehicle); @Override public abstract double getTransportTime(Location from, Location to, double departureTime, Driver driver, Vehicle vehicle); diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/cost/VehicleRoutingTransportCosts.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/cost/VehicleRoutingTransportCosts.java index e449f5c1..4b5814c4 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/cost/VehicleRoutingTransportCosts.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/cost/VehicleRoutingTransportCosts.java @@ -27,6 +27,6 @@ package com.graphhopper.jsprit.core.problem.cost; * @author schroeder */ -public interface VehicleRoutingTransportCosts extends TransportTime, TransportCost { +public interface VehicleRoutingTransportCosts extends TransportTime, TransportCost, TransportDistance { } diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Service.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Service.java index ab54929e..af4e6b85 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Service.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Service.java @@ -17,8 +17,6 @@ */ package com.graphhopper.jsprit.core.problem.job; -import java.util.Collection; - import com.graphhopper.jsprit.core.problem.AbstractJob; import com.graphhopper.jsprit.core.problem.Capacity; import com.graphhopper.jsprit.core.problem.Location; @@ -28,6 +26,8 @@ import com.graphhopper.jsprit.core.problem.solution.route.activity.TimeWindows; import com.graphhopper.jsprit.core.problem.solution.route.activity.TimeWindowsImpl; import com.graphhopper.jsprit.core.util.Coordinate; +import java.util.Collection; + /** * Service implementation of a job. *

@@ -72,8 +72,6 @@ public class Service extends AbstractJob { protected double serviceTime; - protected TimeWindow timeWindow = TimeWindow.newInstance(0.0, Double.MAX_VALUE); - protected Capacity.Builder capacityBuilder = Capacity.Builder.newInstance(); protected Capacity capacity; @@ -93,10 +91,12 @@ public class Service extends AbstractJob { private int priority = 2; protected Object userData; - protected double maxTimeInVehicle = Double.MAX_VALUE;Builder(String id){ + protected double maxTimeInVehicle = Double.MAX_VALUE; + + Builder(String id){ this.id = id; timeWindows = new TimeWindowsImpl(); - timeWindows.add(timeWindow); + timeWindows.add(TimeWindow.newInstance(0.0, Double.MAX_VALUE)); } /** @@ -174,7 +174,6 @@ public class Service extends AbstractJob { public Builder setTimeWindow(TimeWindow tw){ if(tw == null) throw new IllegalArgumentException("time-window arg must not be null"); - this.timeWindow = tw; this.timeWindows = new TimeWindowsImpl(); timeWindows.add(tw); return this; @@ -194,6 +193,11 @@ public class Service extends AbstractJob { return addTimeWindow(TimeWindow.newInstance(earliest, latest)); } + public Builder addAllTimeWindows(Collection timeWindows) { + for (TimeWindow tw : timeWindows) addTimeWindow(tw); + return this; + } + /** * Builds the service. * @@ -227,7 +231,7 @@ public class Service extends AbstractJob { public Builder addAllSizeDimensions(Capacity size){ for(int i=0;i getTimeWindows(){ - return timeWindowManager.getTimeWindows(); + return timeWindows.getTimeWindows(); } @Override @@ -327,7 +329,7 @@ public class Service extends AbstractJob { * */ public TimeWindow getTimeWindow() { - return timeWindowManager.getTimeWindows().iterator().next(); + return timeWindows.getTimeWindows().iterator().next(); } /** @@ -344,10 +346,11 @@ public class Service extends AbstractJob { */ @Override public String toString() { - return "[id=" + id + "][name=" + name + "][type=" + type + "][location=" + location + "][capacity=" + size + "][serviceTime=" + serviceTime + "][timeWindow=" + timeWindow + "]"; + return "[id=" + id + "][name=" + name + "][type=" + type + "][location=" + location + + "][capacity=" + size + "][serviceTime=" + serviceTime + "][timeWindows=" + + timeWindows + "]"; } - @Override public int hashCode() { final int prime = 31; diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Shipment.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Shipment.java index 22c551cd..a3eeaaf6 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Shipment.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/job/Shipment.java @@ -17,8 +17,6 @@ */ package com.graphhopper.jsprit.core.problem.job; -import java.util.Collection; - import com.graphhopper.jsprit.core.problem.AbstractJob; import com.graphhopper.jsprit.core.problem.Capacity; import com.graphhopper.jsprit.core.problem.Location; @@ -26,6 +24,8 @@ import com.graphhopper.jsprit.core.problem.Skills; import com.graphhopper.jsprit.core.problem.solution.route.activity.TimeWindow; import com.graphhopper.jsprit.core.problem.solution.route.activity.TimeWindowsImpl; +import java.util.Collection; + /** * Shipment is an implementation of Job and consists of a pickup and a delivery of something. @@ -61,10 +61,6 @@ public class Shipment extends AbstractJob { private double deliveryServiceTime = 0.0; - private TimeWindow deliveryTimeWindow = TimeWindow.newInstance(0.0, Double.MAX_VALUE); - - private TimeWindow pickupTimeWindow = TimeWindow.newInstance(0.0, Double.MAX_VALUE); - private Capacity.Builder capacityBuilder = Capacity.Builder.newInstance(); private Capacity capacity; @@ -107,9 +103,9 @@ public class Shipment extends AbstractJob { if (id == null) throw new IllegalArgumentException("id must not be null"); this.id = id; pickupTimeWindows = new TimeWindowsImpl(); - pickupTimeWindows.add(pickupTimeWindow); + pickupTimeWindows.add(TimeWindow.newInstance(0.0, Double.MAX_VALUE)); deliveryTimeWindows = new TimeWindowsImpl(); - deliveryTimeWindows.add(deliveryTimeWindow); + deliveryTimeWindows.add(TimeWindow.newInstance(0.0, Double.MAX_VALUE)); } /** @@ -169,7 +165,6 @@ public class Shipment extends AbstractJob { */ public Builder setPickupTimeWindow(TimeWindow timeWindow) { if (timeWindow == null) throw new IllegalArgumentException("delivery time-window must not be null"); - this.pickupTimeWindow = timeWindow; this.pickupTimeWindows = new TimeWindowsImpl(); this.pickupTimeWindows.add(timeWindow); return this; @@ -215,7 +210,6 @@ public class Shipment extends AbstractJob { */ public Builder setDeliveryTimeWindow(TimeWindow timeWindow) { if (timeWindow == null) throw new IllegalArgumentException("delivery time-window must not be null"); - this.deliveryTimeWindow = timeWindow; this.deliveryTimeWindows = new TimeWindowsImpl(); this.deliveryTimeWindows.add(timeWindow); return this; @@ -235,6 +229,13 @@ public class Shipment extends AbstractJob { return this; } + public Builder addAllSizeDimensions(Capacity size) { + for (int i = 0; i < size.getNuOfDimensions(); i++) { + addSizeDimension(i, size.get(i)); + } + return this; + } + /** * Builds the shipment. @@ -257,6 +258,13 @@ public class Shipment extends AbstractJob { return this; } + public Builder addAllRequiredSkills(Skills skills) { + for (String s : skills.values()) { + addRequiredSkill(s); + } + return this; + } + public Builder setName(String name) { this.name = name; return this; @@ -277,6 +285,11 @@ public class Shipment extends AbstractJob { return this; } + public Builder addAllDeliveryTimeWindows(Collection timeWindow) { + for (TimeWindow tw : timeWindow) addDeliveryTimeWindow(tw); + return this; + } + public Builder addPickupTimeWindow(TimeWindow timeWindow) { if(timeWindow == null) throw new IllegalArgumentException("time-window arg must not be null"); if(!pickupTimeWindowAdded){ @@ -291,6 +304,11 @@ public class Shipment extends AbstractJob { return addPickupTimeWindow(TimeWindow.newInstance(earliest, latest)); } + public Builder addAllPickupTimeWindows(Collection timeWindow) { + for (TimeWindow tw : timeWindow) addPickupTimeWindow(tw); + return this; + } + /** * Set priority to shipment. Only 1 (high) to 10 (low) are allowed. *

@@ -325,10 +343,6 @@ public class Shipment extends AbstractJob { private final double deliveryServiceTime; - private final TimeWindow deliveryTimeWindow; - - private final TimeWindow pickupTimeWindow; - private final Capacity capacity; private final Skills skills; @@ -351,9 +365,7 @@ public class Shipment extends AbstractJob { setUserData(builder.userData); this.id = builder.id; this.pickupServiceTime = builder.pickupServiceTime; - this.pickupTimeWindow = builder.pickupTimeWindow; this.deliveryServiceTime = builder.deliveryServiceTime; - this.deliveryTimeWindow = builder.deliveryTimeWindow; this.capacity = builder.capacity; this.skills = builder.skills; this.name = builder.name; @@ -424,6 +436,21 @@ public class Shipment extends AbstractJob { return pickupTimeWindows.getTimeWindows(); } + + /** + * Returns a string with the shipment's attributes. + *

+ *

String is built as follows: [attr1=val1][attr2=val2]... + */ + @Override + public String toString() { + return "[id=" + id + "][name=" + name + "][pickupLocation=" + pickupLocation_ + + "][deliveryLocation=" + deliveryLocation_ + "][capacity=" + capacity + + "][pickupServiceTime=" + pickupServiceTime + "][deliveryServiceTime=" + + deliveryServiceTime + "][pickupTimeWindows=" + pickupTimeWindows + + "][deliveryTimeWindows=" + deliveryTimeWindows + "]"; + } + @Override public int hashCode() { diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/solution/route/activity/TimeWindowsImpl.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/solution/route/activity/TimeWindowsImpl.java index 25e5a578..84b8f37c 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/solution/route/activity/TimeWindowsImpl.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/solution/route/activity/TimeWindowsImpl.java @@ -48,4 +48,12 @@ public class TimeWindowsImpl implements TimeWindows { return Collections.unmodifiableCollection(timeWindows); } + @Override + public String toString() { + StringBuffer sb = new StringBuffer(timeWindows.size() * 60); + for (TimeWindow tw : timeWindows) { + sb.append("[timeWindow=").append(tw).append("]"); + } + return sb.toString(); + } } diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/Coordinate.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/Coordinate.java index 53c20147..6c1c26c8 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/Coordinate.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/Coordinate.java @@ -23,9 +23,9 @@ public class Coordinate { return new Coordinate(x, y); } - private double x; + private final double x; - private double y; + private final double y; public Coordinate(double x, double y) { super(); diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/CrowFlyCosts.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/CrowFlyCosts.java index 6d75ca7c..5ed4b217 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/CrowFlyCosts.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/CrowFlyCosts.java @@ -22,7 +22,6 @@ package com.graphhopper.jsprit.core.util; import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.cost.AbstractForwardVehicleRoutingTransportCosts; -import com.graphhopper.jsprit.core.problem.cost.TransportDistance; import com.graphhopper.jsprit.core.problem.driver.Driver; import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; @@ -30,7 +29,7 @@ import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; /** * @author stefan schroeder */ -public class CrowFlyCosts extends AbstractForwardVehicleRoutingTransportCosts implements TransportDistance { +public class CrowFlyCosts extends AbstractForwardVehicleRoutingTransportCosts { public int speed = 1; diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/EuclideanCosts.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/EuclideanCosts.java index d8f981e7..265ac70e 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/EuclideanCosts.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/EuclideanCosts.java @@ -22,7 +22,6 @@ package com.graphhopper.jsprit.core.util; import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.cost.AbstractForwardVehicleRoutingTransportCosts; -import com.graphhopper.jsprit.core.problem.cost.TransportDistance; import com.graphhopper.jsprit.core.problem.driver.Driver; import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; @@ -30,7 +29,7 @@ import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; /** * @author stefan schroeder */ -public class EuclideanCosts extends AbstractForwardVehicleRoutingTransportCosts implements TransportDistance { +public class EuclideanCosts extends AbstractForwardVehicleRoutingTransportCosts { public int speed = 1; @@ -59,14 +58,7 @@ public class EuclideanCosts extends AbstractForwardVehicleRoutingTransportCosts } private double calculateDistance(Location fromLocation, Location toLocation) { - Coordinate from = null; - Coordinate to = null; - if (fromLocation.getCoordinate() != null & toLocation.getCoordinate() != null) { - from = fromLocation.getCoordinate(); - to = toLocation.getCoordinate(); - } - if (from == null || to == null) throw new NullPointerException(); - return calculateDistance(from, to); + return calculateDistance(fromLocation.getCoordinate(), toLocation.getCoordinate()); } private double calculateDistance(Coordinate from, Coordinate to) { diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/FastVehicleRoutingTransportCostsMatrix.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/FastVehicleRoutingTransportCostsMatrix.java index 28a0422c..abbf27c6 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/FastVehicleRoutingTransportCostsMatrix.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/FastVehicleRoutingTransportCostsMatrix.java @@ -19,7 +19,6 @@ package com.graphhopper.jsprit.core.util; import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.cost.AbstractForwardVehicleRoutingTransportCosts; -import com.graphhopper.jsprit.core.problem.cost.TransportDistance; import com.graphhopper.jsprit.core.problem.driver.Driver; import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; import com.graphhopper.jsprit.core.problem.vehicle.VehicleTypeImpl; @@ -32,7 +31,7 @@ import com.graphhopper.jsprit.core.problem.vehicle.VehicleTypeImpl; * * @author schroeder */ -public class FastVehicleRoutingTransportCostsMatrix extends AbstractForwardVehicleRoutingTransportCosts implements TransportDistance { +public class FastVehicleRoutingTransportCostsMatrix extends AbstractForwardVehicleRoutingTransportCosts { /** * Builder that builds the matrix. diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/GreatCircleCosts.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/GreatCircleCosts.java index 7d26d18a..0ecbc62d 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/GreatCircleCosts.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/GreatCircleCosts.java @@ -20,7 +20,6 @@ package com.graphhopper.jsprit.core.util; import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.cost.AbstractForwardVehicleRoutingTransportCosts; -import com.graphhopper.jsprit.core.problem.cost.TransportDistance; import com.graphhopper.jsprit.core.problem.driver.Driver; import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; @@ -28,7 +27,7 @@ import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; * @author stefan schroeder */ -public class GreatCircleCosts extends AbstractForwardVehicleRoutingTransportCosts implements TransportDistance { +public class GreatCircleCosts extends AbstractForwardVehicleRoutingTransportCosts { private double speed = 1.; diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/ManhattanCosts.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/ManhattanCosts.java index bbb50b18..971821f8 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/ManhattanCosts.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/ManhattanCosts.java @@ -20,7 +20,6 @@ package com.graphhopper.jsprit.core.util; import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.cost.AbstractForwardVehicleRoutingTransportCosts; -import com.graphhopper.jsprit.core.problem.cost.TransportDistance; import com.graphhopper.jsprit.core.problem.driver.Driver; import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; @@ -28,7 +27,7 @@ import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; * @author stefan schroeder */ -public class ManhattanCosts extends AbstractForwardVehicleRoutingTransportCosts implements TransportDistance { +public class ManhattanCosts extends AbstractForwardVehicleRoutingTransportCosts { public double speed = 1; diff --git a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/VehicleRoutingTransportCostsMatrix.java b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/VehicleRoutingTransportCostsMatrix.java index e63188ae..5052b2be 100644 --- a/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/VehicleRoutingTransportCostsMatrix.java +++ b/jsprit-core/src/main/java/com/graphhopper/jsprit/core/util/VehicleRoutingTransportCostsMatrix.java @@ -40,6 +40,7 @@ import java.util.Map; * @author schroeder */ public class VehicleRoutingTransportCostsMatrix extends AbstractForwardVehicleRoutingTransportCosts { + static class RelationKey { static RelationKey newKey(String from, String to) { @@ -261,4 +262,9 @@ public class VehicleRoutingTransportCostsMatrix extends AbstractForwardVehicleRo return costParams.perDistanceUnit * getDistance(from.getId(), to.getId()) + costParams.perTransportTimeUnit * getTime(from.getId(), to.getId()); } + @Override + public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { + return getDistance(from.getId(), to.getId()); + } + } diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/CVRPwithMatrix_IT.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/CVRPwithMatrix_IT.java index 050fbf16..343cba62 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/CVRPwithMatrix_IT.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/CVRPwithMatrix_IT.java @@ -21,7 +21,6 @@ import com.graphhopper.jsprit.core.algorithm.box.Jsprit; import com.graphhopper.jsprit.core.analysis.SolutionAnalyser; import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.VehicleRoutingProblem; -import com.graphhopper.jsprit.core.problem.cost.TransportDistance; import com.graphhopper.jsprit.core.problem.job.Job; import com.graphhopper.jsprit.core.problem.job.Service; import com.graphhopper.jsprit.core.problem.solution.VehicleRoutingProblemSolution; @@ -78,12 +77,7 @@ public class CVRPwithMatrix_IT { final VehicleRoutingProblem vrp = createVrpWithLocationIndecesAndMatrix(vrp_, false); VehicleRoutingAlgorithm vra = Jsprit.Builder.newInstance(vrp).setProperty(Jsprit.Parameter.FAST_REGRET,"true").buildAlgorithm(); Collection solutions = vra.searchSolutions(); - SolutionAnalyser sa = new SolutionAnalyser(vrp, Solutions.bestOf(solutions), new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser sa = new SolutionAnalyser(vrp, Solutions.bestOf(solutions), vrp.getTransportCosts()); } diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/CapacityConstraint_IT.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/CapacityConstraint_IT.java index c80b8ea0..58c994bb 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/CapacityConstraint_IT.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/CapacityConstraint_IT.java @@ -22,11 +22,9 @@ import com.graphhopper.jsprit.core.analysis.SolutionAnalyser; import com.graphhopper.jsprit.core.problem.Capacity; import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.VehicleRoutingProblem; -import com.graphhopper.jsprit.core.problem.cost.TransportDistance; import com.graphhopper.jsprit.core.problem.job.Delivery; import com.graphhopper.jsprit.core.problem.solution.VehicleRoutingProblemSolution; import com.graphhopper.jsprit.core.problem.solution.route.VehicleRoute; -import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; import com.graphhopper.jsprit.core.problem.vehicle.VehicleImpl; import com.graphhopper.jsprit.core.problem.vehicle.VehicleTypeImpl; import com.graphhopper.jsprit.core.util.ManhattanCosts; @@ -91,12 +89,7 @@ public class CapacityConstraint_IT { vra.setMaxIterations(2000); VehicleRoutingProblemSolution solution = Solutions.bestOf(vra.searchSolutions()); - SolutionAnalyser sa = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return new ManhattanCosts().getDistance(from,to, 0d, null); - } - }); + SolutionAnalyser sa = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); for(VehicleRoute r : solution.getRoutes()){ Capacity loadAtBeginning = sa.getLoadAtBeginning(r); diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/VariableDepartureAndWaitingTime_IT.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/VariableDepartureAndWaitingTime_IT.java index aac174a7..3232ca4e 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/VariableDepartureAndWaitingTime_IT.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/VariableDepartureAndWaitingTime_IT.java @@ -25,7 +25,6 @@ import com.graphhopper.jsprit.core.analysis.SolutionAnalyser; import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.VehicleRoutingProblem; import com.graphhopper.jsprit.core.problem.constraint.ConstraintManager; -import com.graphhopper.jsprit.core.problem.cost.TransportDistance; import com.graphhopper.jsprit.core.problem.cost.VehicleRoutingActivityCosts; import com.graphhopper.jsprit.core.problem.driver.Driver; import com.graphhopper.jsprit.core.problem.job.Service; @@ -82,12 +81,7 @@ public class VariableDepartureAndWaitingTime_IT { .setObjectiveFunction(new SolutionCostCalculator() { @Override public double getCosts(VehicleRoutingProblemSolution solution) { - SolutionAnalyser sa = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser sa = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); return sa.getWaitingTime() + sa.getDistance(); } }) diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/TestCalculatesServiceInsertion.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/TestCalculatesServiceInsertion.java index e6a7815a..6345e700 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/TestCalculatesServiceInsertion.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/TestCalculatesServiceInsertion.java @@ -96,6 +96,11 @@ public class TestCalculatesServiceInsertion { }; costs = new AbstractForwardVehicleRoutingTransportCosts() { + @Override + public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { + return ManhattanDistanceCalculator.calculateDistance(locations.getCoord(from.getId()), locations.getCoord(to.getId())); + } + @Override public double getTransportTime(Location from, Location to, double departureTime, Driver driver, Vehicle vehicle) { return ManhattanDistanceCalculator.calculateDistance(locations.getCoord(from.getId()), locations.getCoord(to.getId())); @@ -231,6 +236,11 @@ public class TestCalculatesServiceInsertion { AbstractForwardVehicleRoutingTransportCosts routingCosts = new AbstractForwardVehicleRoutingTransportCosts() { + @Override + public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { + return EuclideanDistanceCalculator.calculateDistance(coords.get(from.getId()), coords.get(to.getId())); + } + @Override public double getTransportTime(Location from, Location to, double departureTime, Driver driver, Vehicle vehicle) { return getTransportCost(from, to, departureTime, driver, vehicle); diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/TestCalculatesServiceInsertionOnRouteLevel.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/TestCalculatesServiceInsertionOnRouteLevel.java index 23f41f20..44ff6f86 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/TestCalculatesServiceInsertionOnRouteLevel.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/recreate/TestCalculatesServiceInsertionOnRouteLevel.java @@ -83,6 +83,11 @@ public class TestCalculatesServiceInsertionOnRouteLevel { costs = new AbstractForwardVehicleRoutingTransportCosts() { + @Override + public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { + return 0; + } + VehicleRoutingTransportCosts routingCosts = CostFactory.createManhattanCosts(); @Override diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/ruin/distance/TestJobDistanceAvgCosts.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/ruin/distance/TestJobDistanceAvgCosts.java index 42f4e822..e83cc8bd 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/ruin/distance/TestJobDistanceAvgCosts.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/algorithm/ruin/distance/TestJobDistanceAvgCosts.java @@ -30,6 +30,11 @@ public class TestJobDistanceAvgCosts { public static void main(String[] args) { VehicleRoutingTransportCosts costs = new VehicleRoutingTransportCosts() { + @Override + public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { + return 0; + } + @Override public double getBackwardTransportTime(Location from, Location to, double arrivalTime, Driver driver, Vehicle vehicle) { @@ -65,6 +70,11 @@ public class TestJobDistanceAvgCosts { // (expected=NullPointerException.class) VehicleRoutingTransportCosts costs = new VehicleRoutingTransportCosts() { + @Override + public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { + return 0; + } + @Override public double getBackwardTransportTime(Location from, Location to, double arrivalTime, Driver driver, Vehicle vehicle) { diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/analysis/SolutionAnalyserTest.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/analysis/SolutionAnalyserTest.java index 95d3431a..3ce9bcfa 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/analysis/SolutionAnalyserTest.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/analysis/SolutionAnalyserTest.java @@ -22,7 +22,6 @@ package com.graphhopper.jsprit.core.analysis; import com.graphhopper.jsprit.core.problem.Capacity; import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.VehicleRoutingProblem; -import com.graphhopper.jsprit.core.problem.cost.TransportDistance; import com.graphhopper.jsprit.core.problem.job.Delivery; import com.graphhopper.jsprit.core.problem.job.Pickup; import com.graphhopper.jsprit.core.problem.job.Service; @@ -218,12 +217,7 @@ public class SolutionAnalyserTest { * @param type */ private void testTransportCosts(TransportCostsTestType type) { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location fromLocationId, Location toLocationId, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(fromLocationId, toLocationId, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); // this should be the path taken by route 1 including depots Coordinate[] route1Path = new Coordinate[]{ @@ -299,35 +293,20 @@ public class SolutionAnalyserTest { @Test public void constructionShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Assert.assertTrue(true); } @Test public void loadAtBeginningOfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0, analyser.getLoadAtBeginning(route).get(0)); } @Test public void loadAtBeginningOfRoute2ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Iterator iterator = solution.getRoutes().iterator(); iterator.next(); VehicleRoute route = iterator.next(); @@ -337,24 +316,14 @@ public class SolutionAnalyserTest { @Test public void loadAtEnd_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(5, analyser.getLoadAtEnd(route).get(0)); } @Test public void loadAtEnd_OfRoute2ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Iterator iterator = solution.getRoutes().iterator(); iterator.next(); VehicleRoute route = iterator.next(); @@ -364,180 +333,105 @@ public class SolutionAnalyserTest { @Test public void loadAfterActivity_ofStartActOfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0, analyser.getLoadRightAfterActivity(route.getStart(), route).get(0)); } @Test public void loadAfterActivity_ofAct1ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(2, analyser.getLoadRightAfterActivity(route.getActivities().get(0), route).get(0)); } @Test public void loadAfterActivity_ofAct2ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(12, analyser.getLoadRightAfterActivity(route.getActivities().get(1), route).get(0)); } @Test public void loadAfterActivity_ofAct3ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(2, analyser.getLoadRightAfterActivity(route.getActivities().get(2), route).get(0)); } @Test public void loadAfterActivity_ofAct4ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(5, analyser.getLoadRightAfterActivity(route.getActivities().get(3), route).get(0)); } @Test public void loadAfterActivity_ofEndActOfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(5, analyser.getLoadRightAfterActivity(route.getEnd(), route).get(0)); } @Test public void loadBeforeActivity_ofStartActOfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0, analyser.getLoadJustBeforeActivity(route.getStart(), route).get(0)); } @Test public void loadBeforeActivity_ofAct1ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0, analyser.getLoadJustBeforeActivity(route.getActivities().get(0), route).get(0)); } @Test public void loadBeforeActivity_ofAct2ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(2, analyser.getLoadJustBeforeActivity(route.getActivities().get(1), route).get(0)); } @Test public void loadBeforeActivity_ofAct3ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(12, analyser.getLoadJustBeforeActivity(route.getActivities().get(2), route).get(0)); } @Test public void loadBeforeActivity_ofAct4ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(2, analyser.getLoadJustBeforeActivity(route.getActivities().get(3), route).get(0)); } @Test public void loadBeforeActivity_ofEndActOfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(5, analyser.getLoadJustBeforeActivity(route.getEnd(), route).get(0)); } @Test public void maxLoad_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(12, analyser.getMaxLoad(route).get(0)); } @Test public void pickupCount_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(3, analyser.getNumberOfPickups(route), 0.01); } @Test public void pickupCountAtBeginning_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0, analyser.getNumberOfPickupsAtBeginning(route), 0.01); } @@ -545,12 +439,7 @@ public class SolutionAnalyserTest { @Test public void pickupCount_OfRoute1OfAnotherSolutionShouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(4, analyser.getNumberOfPickups(route), 0.01); } @@ -558,82 +447,47 @@ public class SolutionAnalyserTest { @Test public void pickupCountAtBeginning_OfRoute1OfAnotherSolutionShouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(2, analyser.getNumberOfPickupsAtBeginning(route), 0.01); } @Test public void pickupCount_onSolutionShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Assert.assertEquals(6, analyser.getNumberOfPickups(), 0.01); } @Test public void pickupCountAtBeginning_onSolutionShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Assert.assertEquals(0, analyser.getNumberOfPickupsAtBeginning(), 0.01); } @Test public void pickupCount_onAnotherSolutionShouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Assert.assertEquals(4, analyser.getNumberOfPickups(), 0.01); } @Test public void pickupCountAtBeginning_onAnotherSolutionShouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Assert.assertEquals(2, analyser.getNumberOfPickupsAtBeginning(), 0.01); } @Test public void pickupLoad_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(15, analyser.getLoadPickedUp(route).get(0), 0.01); } @Test public void pickupLoadAtBeginning_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0, analyser.getLoadAtBeginning(route).get(0), 0.01); } @@ -641,12 +495,7 @@ public class SolutionAnalyserTest { @Test public void pickupLoad_OfRoute1OfAnotherShouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(50, analyser.getLoadPickedUp(route).get(0), 0.01); } @@ -654,82 +503,47 @@ public class SolutionAnalyserTest { @Test public void pickupLoadAtBeginning_OfRoute1OfAnotherShouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(40, analyser.getLoadAtBeginning(route).get(0), 0.01); } @Test public void pickupLoad_onSolutionShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Assert.assertEquals(30, analyser.getLoadPickedUp().get(0), 0.01); } @Test public void pickupLoadAtBeginning_onSolutionShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Assert.assertEquals(0, analyser.getLoadAtBeginning().get(0), 0.01); } @Test public void pickupLoad_onAnotherSolutionShouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Assert.assertEquals(50, analyser.getLoadPickedUp().get(0), 0.01); } @Test public void pickupLoadAtBeginning_onAnotherSolutionShouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Assert.assertEquals(40, analyser.getLoadAtBeginning().get(0), 0.01); } @Test public void deliveryCount_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(1, analyser.getNumberOfDeliveries(route), 0.01); } @Test public void deliveryCountAtEnd_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(2, analyser.getNumberOfDeliveriesAtEnd(route), 0.01); } @@ -737,12 +551,7 @@ public class SolutionAnalyserTest { @Test public void deliveryCount_OfRoute1OfAnotherSolutionShouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(4, analyser.getNumberOfDeliveries(route), 0.01); } @@ -750,82 +559,47 @@ public class SolutionAnalyserTest { @Test public void deliveryCountAtEnd_OfRoute1OfAnotherSolutionShouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(2, analyser.getNumberOfDeliveriesAtEnd(route), 0.01); } @Test public void deliveryCount_onSolutionShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Assert.assertEquals(2, analyser.getNumberOfDeliveries(), 0.01); } @Test public void deliveryCountAtEnd_onSolutionShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Assert.assertEquals(4, analyser.getNumberOfDeliveriesAtEnd(), 0.01); } @Test public void deliveryCount_onAnotherSolutionShouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Assert.assertEquals(4, analyser.getNumberOfDeliveries(), 0.01); } @Test public void deliveryCountAtEnd_onAnotherSolutionShouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Assert.assertEquals(2, analyser.getNumberOfDeliveriesAtEnd(), 0.01); } @Test public void deliveryLoad_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(10, analyser.getLoadDelivered(route).get(0), 0.01); } @Test public void deliveryLoadAtEnd_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(5, analyser.getLoadAtEnd(route).get(0), 0.01); } @@ -833,12 +607,7 @@ public class SolutionAnalyserTest { @Test public void deliveryLoad_OfRoute1OfAnotherSolutionShouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(70, analyser.getLoadDelivered(route).get(0), 0.01); } @@ -846,47 +615,27 @@ public class SolutionAnalyserTest { @Test public void deliveryLoadAtEnd_OfRoute1OfAnotherSolutionShouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(20, analyser.getLoadAtEnd(route).get(0), 0.01); } @Test public void deliveryLoad_onSolutionShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Assert.assertEquals(20, analyser.getLoadDelivered().get(0), 0.01); } @Test public void deliveryLoadAtEnd_onSolutionShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Assert.assertEquals(10, analyser.getLoadAtEnd().get(0), 0.01); } @Test public void deliveryLoad_onAnotherSolutionShouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(70, analyser.getLoadDelivered().get(0), 0.01); } @@ -894,215 +643,125 @@ public class SolutionAnalyserTest { @Test public void deliveryLoadAtEnd_onAnotherSolutionShouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Assert.assertEquals(20, analyser.getLoadAtEnd().get(0), 0.01); } @Test public void operationTime_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(46. + 40., analyser.getOperationTime(route), 0.01); } @Test public void waitingTime_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(4., analyser.getWaitingTime(route), 0.01); } @Test public void transportTime_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(42., analyser.getTransportTime(route), 0.01); } @Test public void serviceTime_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(40., analyser.getServiceTime(route), 0.01); } @Test public void distance_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(42., analyser.getDistance(route), 0.01); } @Test public void waitingTime_atStartActOfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0, analyser.getWaitingTimeAtActivity(route.getStart(), route), 0.01); } @Test public void waitingTime_ofAct1ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(4., analyser.getWaitingTimeAtActivity(route.getActivities().get(0), route), 0.01); } @Test public void waitingTime_ofAct2ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0., analyser.getWaitingTimeAtActivity(route.getActivities().get(1), route), 0.01); } @Test public void waitingTime_ofAct3ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0., analyser.getWaitingTimeAtActivity(route.getActivities().get(2), route), 0.01); } @Test public void waitingTime_ofAct4ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0., analyser.getWaitingTimeAtActivity(route.getActivities().get(3), route), 0.01); } @Test public void waitingTime_ofEndActOfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0., analyser.getWaitingTimeAtActivity(route.getEnd(), route), 0.01); } @Test public void distance_atStartActOfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0, analyser.getDistanceAtActivity(route.getStart(), route), 0.01); } @Test public void distance_ofAct1ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(6., analyser.getDistanceAtActivity(route.getActivities().get(0), route), 0.01); } @Test public void distance_ofAct2ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(12., analyser.getDistanceAtActivity(route.getActivities().get(1), route), 0.01); } @Test public void distance_ofAct3ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(16., analyser.getDistanceAtActivity(route.getActivities().get(2), route), 0.01); } @Test public void distance_ofAct4ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(27., analyser.getDistanceAtActivity(route.getActivities().get(3), route), 0.01); } @Test public void distance_ofEndActOfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(42., analyser.getDistanceAtActivity(route.getEnd(), route), 0.01); } @@ -1110,192 +769,112 @@ public class SolutionAnalyserTest { @Test public void lateArrivalTimes_atStartActOfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0, analyser.getTimeWindowViolationAtActivity(route.getStart(), route), 0.01); } @Test public void lateArrivalTimes_ofAct1ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0., analyser.getTimeWindowViolationAtActivity(route.getActivities().get(0), route), 0.01); } @Test public void lateArrivalTimes_ofAct2ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0., analyser.getTimeWindowViolationAtActivity(route.getActivities().get(1), route), 0.01); } @Test public void lateArrivalTimes_ofAct3ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0., analyser.getTimeWindowViolationAtActivity(route.getActivities().get(2), route), 0.01); } @Test public void lateArrivalTimes_ofAct4ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0., analyser.getTimeWindowViolationAtActivity(route.getActivities().get(3), route), 0.01); } @Test public void lateArrivalTimes_ofEndActOfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0., analyser.getTimeWindowViolationAtActivity(route.getEnd(), route), 0.01); } @Test public void lateArrTimes_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0., analyser.getTimeWindowViolation(route), 0.01); } @Test public void variableTransportCosts_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(84., analyser.getVariableTransportCosts(route), 0.01); } @Test public void fixedCosts_OfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(100., analyser.getFixedCosts(route), 0.01); } @Test public void transportCosts_atStartActOfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(0, analyser.getVariableTransportCostsAtActivity(route.getStart(), route), 0.01); } @Test public void transportCosts_ofAct1ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(6. * 2., analyser.getVariableTransportCostsAtActivity(route.getActivities().get(0), route), 0.01); } @Test public void transportCosts_ofAct2ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(12. * 2., analyser.getVariableTransportCostsAtActivity(route.getActivities().get(1), route), 0.01); } @Test public void transportCosts_ofAct3ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(16. * 2., analyser.getVariableTransportCostsAtActivity(route.getActivities().get(2), route), 0.01); } @Test public void transportCosts_ofAct4ofRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(27. * 2., analyser.getVariableTransportCostsAtActivity(route.getActivities().get(3), route), 0.01); } @Test public void transportCosts_ofEndActOfRoute1ShouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Assert.assertEquals(42. * 2., analyser.getVariableTransportCostsAtActivity(route.getEnd(), route), 0.01); } @Test public void capacityViolationAtBeginning_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Capacity atBeginning = analyser.getCapacityViolationAtBeginning(route); for (int i = 0; i < atBeginning.getNuOfDimensions(); i++) { @@ -1305,12 +884,7 @@ public class SolutionAnalyserTest { @Test public void capacityViolationAtEnd_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Capacity atEnd = analyser.getCapacityViolationAtEnd(route); for (int i = 0; i < atEnd.getNuOfDimensions(); i++) { @@ -1322,12 +896,7 @@ public class SolutionAnalyserTest { public void capacityViolationOnRoute_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Capacity cap = analyser.getCapacityViolation(route); assertEquals(50, cap.get(0)); @@ -1337,12 +906,7 @@ public class SolutionAnalyserTest { public void capacityViolationAtEnd_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Capacity atEnd = analyser.getCapacityViolationAtEnd(route); assertEquals(5, atEnd.get(0)); @@ -1350,12 +914,7 @@ public class SolutionAnalyserTest { @Test public void capacityViolationAfterStart_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); TourActivity act = route.getStart(); Capacity cap = analyser.getCapacityViolationAfterActivity(act, route); @@ -1369,12 +928,7 @@ public class SolutionAnalyserTest { public void capacityViolationAtBeginning_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Capacity cap = analyser.getCapacityViolationAtBeginning(route); assertEquals(25, cap.get(0)); @@ -1385,12 +939,7 @@ public class SolutionAnalyserTest { public void capacityViolationAfterStart_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Capacity cap = analyser.getCapacityViolationAfterActivity(route.getStart(), route); assertEquals(25, cap.get(0)); @@ -1400,12 +949,7 @@ public class SolutionAnalyserTest { public void capacityViolationAfterAct1_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Capacity cap = analyser.getCapacityViolationAfterActivity(route.getActivities().get(0), route); assertEquals(35, cap.get(0)); @@ -1415,12 +959,7 @@ public class SolutionAnalyserTest { public void capacityViolationAfterAct2_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Capacity cap = analyser.getCapacityViolationAfterActivity(route.getActivities().get(1), route); assertEquals(50, cap.get(0)); @@ -1430,12 +969,7 @@ public class SolutionAnalyserTest { public void capacityViolationAfterAct3_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Capacity cap = analyser.getCapacityViolationAfterActivity(route.getActivities().get(2), route); assertEquals(35, cap.get(0)); @@ -1445,12 +979,7 @@ public class SolutionAnalyserTest { public void capacityViolationAfterAct4_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Capacity cap = analyser.getCapacityViolationAfterActivity(route.getActivities().get(3), route); assertEquals(15, cap.get(0)); @@ -1460,12 +989,7 @@ public class SolutionAnalyserTest { public void capacityViolationAfterAct5_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Capacity cap = analyser.getCapacityViolationAfterActivity(route.getActivities().get(4), route); assertEquals(0, cap.get(0)); @@ -1475,12 +999,7 @@ public class SolutionAnalyserTest { public void capacityViolationAfterAct6_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Capacity cap = analyser.getCapacityViolationAfterActivity(route.getActivities().get(5), route); assertEquals(10, cap.get(0)); @@ -1490,12 +1009,7 @@ public class SolutionAnalyserTest { public void capacityViolationAfterAct7_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Capacity cap = analyser.getCapacityViolationAfterActivity(route.getActivities().get(6), route); assertEquals(0, cap.get(0)); @@ -1505,12 +1019,7 @@ public class SolutionAnalyserTest { public void capacityViolationAfterAct8_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Capacity cap = analyser.getCapacityViolationAfterActivity(route.getActivities().get(7), route); assertEquals(5, cap.get(0)); @@ -1520,12 +1029,7 @@ public class SolutionAnalyserTest { public void capacityViolationAfterEnd_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Capacity cap = analyser.getCapacityViolationAfterActivity(route.getEnd(), route); assertEquals(5, cap.get(0)); @@ -1533,12 +1037,7 @@ public class SolutionAnalyserTest { @Test public void capacityViolationAfterAct1_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); TourActivity act = route.getActivities().get(0); Capacity cap = analyser.getCapacityViolationAfterActivity(act, route); @@ -1549,12 +1048,7 @@ public class SolutionAnalyserTest { @Test public void capacityViolationAfterAct2_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); TourActivity act = route.getActivities().get(1); Capacity cap = analyser.getCapacityViolationAfterActivity(act, route); @@ -1565,12 +1059,7 @@ public class SolutionAnalyserTest { @Test public void capacityViolationAfterAct3_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); TourActivity act = route.getActivities().get(2); Capacity cap = analyser.getCapacityViolationAfterActivity(act, route); @@ -1581,12 +1070,7 @@ public class SolutionAnalyserTest { @Test public void capacityViolationAfterAct4_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); TourActivity act = route.getActivities().get(3); Capacity cap = analyser.getCapacityViolationAfterActivity(act, route); @@ -1597,12 +1081,7 @@ public class SolutionAnalyserTest { @Test public void capacityViolationAfterEnd_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); TourActivity act = route.getEnd(); Capacity cap = analyser.getCapacityViolationAfterActivity(act, route); @@ -1613,12 +1092,7 @@ public class SolutionAnalyserTest { @Test public void timeWindowViolation_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Double violation = analyser.getTimeWindowViolation(route); assertEquals(0., violation, 0.01); @@ -1628,12 +1102,7 @@ public class SolutionAnalyserTest { public void timeWindowViolation_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Double violation = analyser.getTimeWindowViolation(route); assertEquals((2 + 26 + 57 + 77 + 90 + 114 + 144 + 20), violation, 0.01); @@ -1643,12 +1112,7 @@ public class SolutionAnalyserTest { public void timeWindowViolationAtStart_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Double violation = analyser.getTimeWindowViolationAtActivity(route.getStart(), route); assertEquals(0., violation, 0.01); @@ -1658,12 +1122,7 @@ public class SolutionAnalyserTest { public void timeWindowViolationAtAct1_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Double violation = analyser.getTimeWindowViolationAtActivity(route.getActivities().get(0), route); assertEquals(0., violation, 0.01); @@ -1673,12 +1132,7 @@ public class SolutionAnalyserTest { public void timeWindowViolationAtAct2_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Double violation = analyser.getTimeWindowViolationAtActivity(route.getActivities().get(1), route); assertEquals(2., violation, 0.01); @@ -1688,12 +1142,7 @@ public class SolutionAnalyserTest { public void timeWindowViolationAtAct3_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Double violation = analyser.getTimeWindowViolationAtActivity(route.getActivities().get(2), route); assertEquals(26., violation, 0.01); @@ -1703,12 +1152,7 @@ public class SolutionAnalyserTest { public void timeWindowViolationAtAct4_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Double violation = analyser.getTimeWindowViolationAtActivity(route.getActivities().get(3), route); assertEquals(57., violation, 0.01); @@ -1718,12 +1162,7 @@ public class SolutionAnalyserTest { public void timeWindowViolationAtAct5_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Double violation = analyser.getTimeWindowViolationAtActivity(route.getActivities().get(4), route); assertEquals(77., violation, 0.01); @@ -1733,12 +1172,7 @@ public class SolutionAnalyserTest { public void timeWindowViolationAtAct6_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Double violation = analyser.getTimeWindowViolationAtActivity(route.getActivities().get(5), route); assertEquals(90., violation, 0.01); @@ -1748,12 +1182,7 @@ public class SolutionAnalyserTest { public void timeWindowViolationAtAct7_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Double violation = analyser.getTimeWindowViolationAtActivity(route.getActivities().get(6), route); assertEquals(114., violation, 0.01); @@ -1763,12 +1192,7 @@ public class SolutionAnalyserTest { public void timeWindowViolationAtAct8_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Double violation = analyser.getTimeWindowViolationAtActivity(route.getActivities().get(7), route); assertEquals(144., violation, 0.01); @@ -1778,12 +1202,7 @@ public class SolutionAnalyserTest { public void timeWindowViolationAtEnd_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Double violation = analyser.getTimeWindowViolationAtActivity(route.getEnd(), route); assertEquals(20., violation, 0.01); @@ -1792,12 +1211,7 @@ public class SolutionAnalyserTest { @Test public void backhaulViolation_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolation(route); assertTrue(violation); @@ -1806,12 +1220,7 @@ public class SolutionAnalyserTest { @Test public void backhaulViolationAtStart_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getStart(), route); assertFalse(violation); @@ -1822,12 +1231,7 @@ public class SolutionAnalyserTest { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getActivities().get(0), route); assertFalse(violation); @@ -1837,12 +1241,7 @@ public class SolutionAnalyserTest { public void backhaulViolationAtAct2_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getActivities().get(1), route); assertFalse(violation); @@ -1852,12 +1251,7 @@ public class SolutionAnalyserTest { public void backhaulViolationAtAct3_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getActivities().get(2), route); assertFalse(violation); @@ -1867,12 +1261,7 @@ public class SolutionAnalyserTest { public void backhaulViolationAtAct4_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getActivities().get(3), route); assertTrue(violation); @@ -1882,12 +1271,7 @@ public class SolutionAnalyserTest { public void backhaulViolationAtAct5_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getActivities().get(4), route); assertTrue(violation); @@ -1897,12 +1281,7 @@ public class SolutionAnalyserTest { public void backhaulViolationAtAct6_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getActivities().get(5), route); assertFalse(violation); @@ -1912,12 +1291,7 @@ public class SolutionAnalyserTest { public void backhaulViolationAtAct7_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getActivities().get(6), route); assertFalse(violation); @@ -1927,12 +1301,7 @@ public class SolutionAnalyserTest { public void backhaulViolationAtAct8_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getActivities().get(7), route); assertFalse(violation); @@ -1942,12 +1311,7 @@ public class SolutionAnalyserTest { public void backhaulViolationAtEnd_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getEnd(), route); assertFalse(violation); @@ -1957,12 +1321,7 @@ public class SolutionAnalyserTest { public void shipmentViolationAtStart_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasShipmentConstraintViolationAtActivity(route.getStart(), route); assertFalse(violation); @@ -1972,12 +1331,7 @@ public class SolutionAnalyserTest { public void shipmentViolationAtAct1_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getActivities().get(0), route); assertFalse(violation); @@ -1987,12 +1341,7 @@ public class SolutionAnalyserTest { public void shipmentViolationAtAct2_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getActivities().get(1), route); assertFalse(violation); @@ -2002,12 +1351,7 @@ public class SolutionAnalyserTest { public void shipmentViolationAtAct3_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getActivities().get(2), route); assertFalse(violation); @@ -2017,12 +1361,7 @@ public class SolutionAnalyserTest { public void shipmentViolationAtAct4_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getActivities().get(3), route); assertTrue(violation); @@ -2032,12 +1371,7 @@ public class SolutionAnalyserTest { public void shipmentViolationAtAct5_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getActivities().get(4), route); assertTrue(violation); @@ -2047,12 +1381,7 @@ public class SolutionAnalyserTest { public void shipmentViolationAtAct6_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getActivities().get(5), route); assertFalse(violation); @@ -2062,12 +1391,7 @@ public class SolutionAnalyserTest { public void shipmentViolationAtAct7_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getActivities().get(6), route); assertFalse(violation); @@ -2077,12 +1401,7 @@ public class SolutionAnalyserTest { public void shipmentViolationAtAct8_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getActivities().get(7), route); assertFalse(violation); @@ -2092,12 +1411,7 @@ public class SolutionAnalyserTest { public void shipmentViolationAtEnd_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasBackhaulConstraintViolationAtActivity(route.getEnd(), route); assertFalse(violation); @@ -2107,12 +1421,7 @@ public class SolutionAnalyserTest { public void shipmentViolation_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violation = analyser.hasShipmentConstraintViolation(route); assertFalse(violation); @@ -2125,12 +1434,7 @@ public class SolutionAnalyserTest { TourActivity deliverShipment = route.getActivities().get(2); route.getTourActivities().removeActivity(deliverShipment); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Boolean violation = analyser.hasShipmentConstraintViolation(route); assertTrue(violation); @@ -2143,12 +1447,7 @@ public class SolutionAnalyserTest { TourActivity deliverShipment = route.getActivities().get(2); route.getTourActivities().removeActivity(deliverShipment); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Boolean violation = analyser.hasShipmentConstraintViolationAtActivity(route.getActivities().get(1), route); assertTrue(violation); @@ -2162,12 +1461,7 @@ public class SolutionAnalyserTest { route.getTourActivities().removeActivity(deliverShipment); assertFalse(route.getActivities().contains(deliverShipment)); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Boolean violation = analyser.hasShipmentConstraintViolation(route); assertTrue(violation); @@ -2181,12 +1475,7 @@ public class SolutionAnalyserTest { route.getTourActivities().removeActivity(pickupShipment); assertFalse(route.getActivities().contains(pickupShipment)); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Boolean violation = analyser.hasShipmentConstraintViolationAtActivity(route.getActivities().get(1), route); assertTrue(violation); @@ -2200,12 +1489,7 @@ public class SolutionAnalyserTest { route.getTourActivities().removeActivity(pickupShipment); assertFalse(route.getActivities().contains(pickupShipment)); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Boolean violation = analyser.hasShipmentConstraintViolation(route); assertTrue(violation); @@ -2219,12 +1503,7 @@ public class SolutionAnalyserTest { route.getTourActivities().removeActivity(pickupShipment); assertFalse(route.getActivities().contains(pickupShipment)); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Boolean violation = analyser.hasShipmentConstraintViolation(); assertTrue(violation); @@ -2232,12 +1511,7 @@ public class SolutionAnalyserTest { @Test public void skillViolationOnRoute_shouldWorkWhenViolated() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violated = analyser.hasSkillConstraintViolation(route); assertTrue(violated); @@ -2245,12 +1519,7 @@ public class SolutionAnalyserTest { @Test public void skillViolationAtStart_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violated = analyser.hasSkillConstraintViolationAtActivity(route.getStart(), route); assertFalse(violated); @@ -2258,12 +1527,7 @@ public class SolutionAnalyserTest { @Test public void skillViolationAtAct1_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violated = analyser.hasSkillConstraintViolationAtActivity(route.getActivities().get(0), route); assertFalse(violated); @@ -2271,12 +1535,7 @@ public class SolutionAnalyserTest { @Test public void skillViolationAtAct2_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violated = analyser.hasSkillConstraintViolationAtActivity(route.getActivities().get(1), route); assertTrue(violated); @@ -2284,12 +1543,7 @@ public class SolutionAnalyserTest { @Test public void skillViolationAtAct3_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violated = analyser.hasSkillConstraintViolationAtActivity(route.getActivities().get(2), route); assertTrue(violated); @@ -2297,12 +1551,7 @@ public class SolutionAnalyserTest { @Test public void skillViolationAtAct4_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violated = analyser.hasSkillConstraintViolationAtActivity(route.getActivities().get(3), route); assertFalse(violated); @@ -2310,12 +1559,7 @@ public class SolutionAnalyserTest { @Test public void skillViolationAtEnd_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); VehicleRoute route = solution.getRoutes().iterator().next(); Boolean violated = analyser.hasSkillConstraintViolationAtActivity(route.getEnd(), route); assertFalse(violated); @@ -2324,12 +1568,7 @@ public class SolutionAnalyserTest { @Test public void skillViolationOnRoute_shouldWorkWhenNotViolated() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Iterator iterator = solution.getRoutes().iterator(); iterator.next(); @@ -2340,24 +1579,14 @@ public class SolutionAnalyserTest { @Test public void skillViolationOnSolution_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Boolean violated = analyser.hasSkillConstraintViolation(); assertTrue(violated); } @Test public void backhaulViolationOnSolution_shouldWork() { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Boolean violated = analyser.hasBackhaulConstraintViolation(); assertFalse(violated); } @@ -2365,12 +1594,7 @@ public class SolutionAnalyserTest { @Test public void backhaulViolationOnSolution_shouldWorkWhenViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Boolean violated = analyser.hasBackhaulConstraintViolation(); assertTrue(violated); } @@ -2378,12 +1602,7 @@ public class SolutionAnalyserTest { @Test public void shipmentViolationOnSolution_shouldWork() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Boolean violated = analyser.hasShipmentConstraintViolation(); assertFalse(violated); } @@ -2391,15 +1610,9 @@ public class SolutionAnalyserTest { @Test public void skillViolationOnSolution_shouldWorkWhenNotViolated() { buildAnotherScenarioWithOnlyOneVehicleAndWithoutAnyConstraintsBefore(); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); Boolean violated = analyser.hasSkillConstraintViolation(); assertFalse(violated); } - } diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblemTest.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblemTest.java index 4ad1eec7..7e4dbec2 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblemTest.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/VehicleRoutingProblemTest.java @@ -280,6 +280,11 @@ public class VehicleRoutingProblemTest { builder.setRoutingCost(new AbstractForwardVehicleRoutingTransportCosts() { + @Override + public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { + return 0; + } + @Override public double getTransportTime(Location from, Location to, double departureTime, Driver driver, Vehicle vehicle) { diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/constraint/VehicleDependentTraveledDistanceTest.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/constraint/VehicleDependentTraveledDistanceTest.java index 5ca26155..3dbfc8d5 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/constraint/VehicleDependentTraveledDistanceTest.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/problem/constraint/VehicleDependentTraveledDistanceTest.java @@ -21,9 +21,9 @@ package com.graphhopper.jsprit.core.problem.constraint; import com.graphhopper.jsprit.core.algorithm.state.StateId; import com.graphhopper.jsprit.core.algorithm.state.StateManager; +import com.graphhopper.jsprit.core.algorithm.state.VehicleDependentTraveledDistance; import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.VehicleRoutingProblem; -import com.graphhopper.jsprit.core.problem.cost.TransportDistance; import com.graphhopper.jsprit.core.problem.job.Delivery; import com.graphhopper.jsprit.core.problem.job.Job; import com.graphhopper.jsprit.core.problem.job.Pickup; @@ -100,13 +100,8 @@ public class VehicleDependentTraveledDistanceTest { traveledDistanceId = stateManager.createStateId("traveledDistance"); - com.graphhopper.jsprit.core.algorithm.state.VehicleDependentTraveledDistance traveledDistance = - new com.graphhopper.jsprit.core.algorithm.state.VehicleDependentTraveledDistance(new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return new ManhattanCosts().getDistance(from, to, departureTime, vehicle); - } - }, stateManager, traveledDistanceId, Arrays.asList(vehicle, vehicle2)); + VehicleDependentTraveledDistance traveledDistance = + new VehicleDependentTraveledDistance(vrp.getTransportCosts(), stateManager, traveledDistanceId, Arrays.asList(vehicle, vehicle2)); stateManager.addStateUpdater(traveledDistance); stateManager.informInsertionStarts(Arrays.asList(route), Collections.emptyList()); @@ -123,12 +118,7 @@ public class VehicleDependentTraveledDistanceTest { maxDistanceMap.put(vehicle, 5d); MaxDistanceConstraint maxDistanceConstraint = - new MaxDistanceConstraint(new StateManager(vrp), traveledDistanceId, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportTime(from, to, departureTime, null, vehicle); - } - }, maxDistanceMap); + new MaxDistanceConstraint(new StateManager(vrp), traveledDistanceId, vrp.getTransportCosts(), maxDistanceMap); JobInsertionContext context = new JobInsertionContext(route, pickup, vehicle, null, 0); Assert.assertTrue(maxDistanceConstraint.fulfilled(context, new Start(vehicle.getStartLocation(), 0, Double.MAX_VALUE), vrp.getActivities(pickup).get(0), @@ -144,12 +134,7 @@ vehicle2 (max distance): 180.0 @Test public void insertNewInVehicleShouldFail() { MaxDistanceConstraint maxDistanceConstraint = - new MaxDistanceConstraint(stateManager, traveledDistanceId, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportTime(from, to, departureTime, null, vehicle); - } - }, maxDistanceMap); + new MaxDistanceConstraint(stateManager, traveledDistanceId, vrp.getTransportCosts(), maxDistanceMap); JobInsertionContext context = new JobInsertionContext(route, newDelivery, vehicle, null, 0); Assert.assertTrue(maxDistanceConstraint.fulfilled(context, route.getStart(), newAct(), act(0), 0).equals(HardActivityConstraint.ConstraintsStatus.NOT_FULFILLED)); Assert.assertTrue(maxDistanceConstraint.fulfilled(context, act(0), newAct(), act(1), 0).equals(HardActivityConstraint.ConstraintsStatus.NOT_FULFILLED)); @@ -164,12 +149,7 @@ vehicle2 (max distance): 180.0 public void insertNewInVehicle2ShouldBeCorrect() { //current distance vehicle2: 160 allowed: 200 MaxDistanceConstraint maxDistanceConstraint = - new MaxDistanceConstraint(stateManager, traveledDistanceId, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportTime(from, to, departureTime, null, vehicle); - } - }, maxDistanceMap); + new MaxDistanceConstraint(stateManager, traveledDistanceId, vrp.getTransportCosts(), maxDistanceMap); JobInsertionContext context = new JobInsertionContext(route, newDelivery, vehicle2, null, 0); Assert.assertTrue(maxDistanceConstraint.fulfilled(context, route.getStart(), newAct(), act(0), 0).equals(HardActivityConstraint.ConstraintsStatus.FULFILLED)); //additional distance: 20+35-15=40 @@ -284,12 +264,7 @@ vehicle2 (max distance): 180.0 StateManager stateManager = new StateManager(vrp); MaxDistanceConstraint maxDistanceConstraint = - new MaxDistanceConstraint(stateManager, traveledDistanceId, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportTime(from, to, departureTime, null, vehicle); - } - }, maxDistanceMap); + new MaxDistanceConstraint(stateManager, traveledDistanceId, vrp.getTransportCosts(), maxDistanceMap); Assert.assertTrue(maxDistanceConstraint.fulfilled(context, new Start(vehicle.getStartLocation(), 0, Double.MAX_VALUE), vrp.getActivities(shipment).get(0), @@ -331,12 +306,7 @@ vehicle2 (max distance): 180.0 StateManager stateManager = new StateManager(vrp); MaxDistanceConstraint maxDistanceConstraint = - new MaxDistanceConstraint(stateManager, traveledDistanceId, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportTime(from, to, departureTime, null, vehicle); - } - }, maxDistanceMap); + new MaxDistanceConstraint(stateManager, traveledDistanceId, vrp.getTransportCosts(), maxDistanceMap); Assert.assertTrue(maxDistanceConstraint.fulfilled(context, new Start(vehicle.getStartLocation(), 0, Double.MAX_VALUE), vrp.getActivities(shipment).get(0), diff --git a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/util/UnassignedJobReasonTrackerTest.java b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/util/UnassignedJobReasonTrackerTest.java index aee8a95d..7b975e9a 100644 --- a/jsprit-core/src/test/java/com/graphhopper/jsprit/core/util/UnassignedJobReasonTrackerTest.java +++ b/jsprit-core/src/test/java/com/graphhopper/jsprit/core/util/UnassignedJobReasonTrackerTest.java @@ -26,7 +26,6 @@ import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.VehicleRoutingProblem; import com.graphhopper.jsprit.core.problem.constraint.ConstraintManager; import com.graphhopper.jsprit.core.problem.constraint.MaxDistanceConstraint; -import com.graphhopper.jsprit.core.problem.cost.TransportDistance; import com.graphhopper.jsprit.core.problem.job.Service; import com.graphhopper.jsprit.core.problem.solution.VehicleRoutingProblemSolution; import com.graphhopper.jsprit.core.problem.solution.route.activity.TimeWindow; @@ -122,12 +121,7 @@ public class UnassignedJobReasonTrackerTest { StateId maxDistance = stateManager.createStateId("max-distance"); Map distMap = new HashMap<>(); distMap.put(vehicle, 100d); - MaxDistanceConstraint distanceConstraint = new MaxDistanceConstraint(stateManager, maxDistance, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, departureTime, null, vehicle); - } - }, distMap); + MaxDistanceConstraint distanceConstraint = new MaxDistanceConstraint(stateManager, maxDistance, vrp.getTransportCosts(), distMap); constraintManager.addConstraint(distanceConstraint, ConstraintManager.Priority.CRITICAL); VehicleRoutingAlgorithm vra = Jsprit.Builder.newInstance(vrp).setStateAndConstraintManager(stateManager, constraintManager) diff --git a/jsprit-examples/src/main/java/com/graphhopper/jsprit/examples/BuildAlgorithmFromScratch.java b/jsprit-examples/src/main/java/com/graphhopper/jsprit/examples/BuildAlgorithmFromScratch.java index 72cd3426..4660597a 100644 --- a/jsprit-examples/src/main/java/com/graphhopper/jsprit/examples/BuildAlgorithmFromScratch.java +++ b/jsprit-examples/src/main/java/com/graphhopper/jsprit/examples/BuildAlgorithmFromScratch.java @@ -34,16 +34,13 @@ import com.graphhopper.jsprit.core.algorithm.ruin.distance.AvgServiceAndShipment import com.graphhopper.jsprit.core.algorithm.selector.SelectBest; import com.graphhopper.jsprit.core.algorithm.state.StateManager; import com.graphhopper.jsprit.core.analysis.SolutionAnalyser; -import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.VehicleRoutingProblem; import com.graphhopper.jsprit.core.problem.constraint.ConstraintManager; -import com.graphhopper.jsprit.core.problem.cost.TransportDistance; import com.graphhopper.jsprit.core.problem.job.Job; import com.graphhopper.jsprit.core.problem.solution.SolutionCostCalculator; import com.graphhopper.jsprit.core.problem.solution.VehicleRoutingProblemSolution; import com.graphhopper.jsprit.core.problem.solution.route.VehicleRoute; import com.graphhopper.jsprit.core.problem.vehicle.FiniteFleetManagerFactory; -import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; import com.graphhopper.jsprit.core.problem.vehicle.VehicleFleetManager; import com.graphhopper.jsprit.core.reporting.SolutionPrinter; import com.graphhopper.jsprit.core.util.Solutions; @@ -207,12 +204,7 @@ public class BuildAlgorithmFromScratch { @Override public double getCosts(VehicleRoutingProblemSolution solution) { - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); return analyser.getVariableTransportCosts() + solution.getUnassignedJobs().size() * 500.; } diff --git a/jsprit-examples/src/main/java/com/graphhopper/jsprit/examples/MultipleTimeWindowExample2.java b/jsprit-examples/src/main/java/com/graphhopper/jsprit/examples/MultipleTimeWindowExample2.java index d29db613..7ea4d8d9 100644 --- a/jsprit-examples/src/main/java/com/graphhopper/jsprit/examples/MultipleTimeWindowExample2.java +++ b/jsprit-examples/src/main/java/com/graphhopper/jsprit/examples/MultipleTimeWindowExample2.java @@ -23,10 +23,8 @@ import com.graphhopper.jsprit.core.algorithm.box.Jsprit; import com.graphhopper.jsprit.core.analysis.SolutionAnalyser; import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.VehicleRoutingProblem; -import com.graphhopper.jsprit.core.problem.cost.TransportDistance; import com.graphhopper.jsprit.core.problem.job.Service; import com.graphhopper.jsprit.core.problem.solution.VehicleRoutingProblemSolution; -import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; import com.graphhopper.jsprit.core.problem.vehicle.VehicleImpl; import com.graphhopper.jsprit.core.problem.vehicle.VehicleImpl.Builder; import com.graphhopper.jsprit.core.problem.vehicle.VehicleType; @@ -136,12 +134,7 @@ public class MultipleTimeWindowExample2 { */ new Plotter(problem,bestSolution).setLabel(Plotter.Label.ID).plot("output/plot", "mtw"); - SolutionAnalyser a = new SolutionAnalyser(problem, bestSolution, new TransportDistance() { - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return problem.getTransportCosts().getTransportTime(from,to,0.,null,null); - } - }); + SolutionAnalyser a = new SolutionAnalyser(problem, bestSolution, problem.getTransportCosts()); System.out.println("distance: " + a.getDistance()); System.out.println("ttime: " + a.getTransportTime()); diff --git a/jsprit-examples/src/main/java/com/graphhopper/jsprit/examples/PickupAndDeliveryExample.java b/jsprit-examples/src/main/java/com/graphhopper/jsprit/examples/PickupAndDeliveryExample.java index 6484fdfe..9b4dfedb 100644 --- a/jsprit-examples/src/main/java/com/graphhopper/jsprit/examples/PickupAndDeliveryExample.java +++ b/jsprit-examples/src/main/java/com/graphhopper/jsprit/examples/PickupAndDeliveryExample.java @@ -24,11 +24,8 @@ import com.graphhopper.jsprit.core.algorithm.VehicleRoutingAlgorithm; import com.graphhopper.jsprit.core.algorithm.box.Jsprit; import com.graphhopper.jsprit.core.algorithm.selector.SelectBest; import com.graphhopper.jsprit.core.analysis.SolutionAnalyser; -import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.VehicleRoutingProblem; -import com.graphhopper.jsprit.core.problem.cost.TransportDistance; import com.graphhopper.jsprit.core.problem.solution.VehicleRoutingProblemSolution; -import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; import com.graphhopper.jsprit.core.reporting.SolutionPrinter; import com.graphhopper.jsprit.io.problem.VrpXMLReader; import com.graphhopper.jsprit.util.Examples; @@ -100,14 +97,7 @@ public class PickupAndDeliveryExample { plotter.plot("output/pd_solomon_r101_solution.png", "pd_r101"); //some stats - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); System.out.println("tp_distance: " + analyser.getDistance()); System.out.println("tp_time: " + analyser.getTransportTime()); diff --git a/jsprit-examples/src/main/java/com/graphhopper/jsprit/examples/VRPWithBackhaulsExample2.java b/jsprit-examples/src/main/java/com/graphhopper/jsprit/examples/VRPWithBackhaulsExample2.java index 130824e9..47494f1b 100644 --- a/jsprit-examples/src/main/java/com/graphhopper/jsprit/examples/VRPWithBackhaulsExample2.java +++ b/jsprit-examples/src/main/java/com/graphhopper/jsprit/examples/VRPWithBackhaulsExample2.java @@ -25,15 +25,12 @@ import com.graphhopper.jsprit.core.algorithm.selector.SelectBest; import com.graphhopper.jsprit.core.algorithm.state.StateManager; import com.graphhopper.jsprit.core.analysis.SolutionAnalyser; import com.graphhopper.jsprit.core.problem.Capacity; -import com.graphhopper.jsprit.core.problem.Location; import com.graphhopper.jsprit.core.problem.VehicleRoutingProblem; import com.graphhopper.jsprit.core.problem.constraint.ConstraintManager; import com.graphhopper.jsprit.core.problem.constraint.ServiceDeliveriesFirstConstraint; -import com.graphhopper.jsprit.core.problem.cost.TransportDistance; import com.graphhopper.jsprit.core.problem.solution.VehicleRoutingProblemSolution; import com.graphhopper.jsprit.core.problem.solution.route.VehicleRoute; import com.graphhopper.jsprit.core.problem.solution.route.activity.TourActivity; -import com.graphhopper.jsprit.core.problem.vehicle.Vehicle; import com.graphhopper.jsprit.core.reporting.SolutionPrinter; import com.graphhopper.jsprit.io.problem.VrpXMLReader; import com.graphhopper.jsprit.util.Examples; @@ -125,14 +122,7 @@ public class VRPWithBackhaulsExample2 { // plotter.setLabel(Plotter.Label.SIZE); plotter.plot("output/vrpwbh_christophides_vrpnc1_solution.png", "vrpwbh_vrpnc1"); - SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, new TransportDistance() { - - @Override - public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { - return vrp.getTransportCosts().getTransportCost(from, to, 0., null, null); - } - - }); + SolutionAnalyser analyser = new SolutionAnalyser(vrp, solution, vrp.getTransportCosts()); for (VehicleRoute route : solution.getRoutes()) { System.out.println("------"); diff --git a/jsprit-instances/src/main/java/com/graphhopper/jsprit/instance/reader/Figliozzi.java b/jsprit-instances/src/main/java/com/graphhopper/jsprit/instance/reader/Figliozzi.java index 12dcbc39..fec93f9c 100644 --- a/jsprit-instances/src/main/java/com/graphhopper/jsprit/instance/reader/Figliozzi.java +++ b/jsprit-instances/src/main/java/com/graphhopper/jsprit/instance/reader/Figliozzi.java @@ -217,6 +217,10 @@ public class Figliozzi { } + @Override + public double getDistance(Location from, Location to, double departureTime, Vehicle vehicle) { + return EuclideanDistanceCalculator.calculateDistance(locations.getCoord(from.getId()), locations.getCoord(to.getId())); + } } } diff --git a/pom.xml b/pom.xml index 85dd0e22..9c8200e8 100644 --- a/pom.xml +++ b/pom.xml @@ -202,6 +202,14 @@ + + selected-build + + jsprit-core + jsprit-io + jsprit-analysis + + release