mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
Cleanup and comment base Job classes
This commit is contained in:
parent
e845687bea
commit
c99b76e866
44 changed files with 913 additions and 1508 deletions
|
|
@ -94,7 +94,7 @@ public class GraphStreamViewerTest {
|
|||
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").addCapacityDimension(0, 3).build();
|
||||
Vehicle vehicle = VehicleImpl.Builder.newInstance("vehicle").setStartLocation(Location.newInstance(0, 0))
|
||||
.setType(type).build();
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("shipment").setPickupLocation(Location.newInstance(-5, 4))
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("shipment").setPickupLocation(Location.newInstance(-5, 4))
|
||||
.addSizeDimension(0, 2).setDeliveryLocation(Location.newInstance(20, 10)).build();
|
||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(shipment).addVehicle(vehicle).build();
|
||||
VehicleRoutingProblemSolution solution = Solutions.bestOf(Jsprit.createAlgorithm(vrp).searchSolutions());
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ public class PlotterTest {
|
|||
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").addCapacityDimension(0, 3).build();
|
||||
Vehicle vehicle = VehicleImpl.Builder.newInstance("vehicle").setStartLocation(Location.newInstance(0, 0))
|
||||
.setType(type).build();
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("shipment").setPickupLocation(Location.newInstance(-5, 4))
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("shipment").setPickupLocation(Location.newInstance(-5, 4))
|
||||
.addSizeDimension(0, 2).setDeliveryLocation(Location.newInstance(20, 10)).build();
|
||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(shipment).addVehicle(vehicle).build();
|
||||
VehicleRoutingProblemSolution solution = Solutions.bestOf(Jsprit.createAlgorithm(vrp).searchSolutions());
|
||||
|
|
|
|||
|
|
@ -225,7 +225,7 @@ public class VehicleRoutingProblem {
|
|||
if (tentativeJobs.containsKey(job.getId())) {
|
||||
throw new IllegalArgumentException("vehicle routing problem already contains a service or shipment with id " + job.getId() + ". make sure you use unique ids for all services and shipments");
|
||||
}
|
||||
job.setIndex(jobIndexCounter);
|
||||
job.impl_setIndex(jobIndexCounter);
|
||||
incJobIndexCounter();
|
||||
tentativeJobs.put(job.getId(), job);
|
||||
addLocationToTentativeLocations(job);
|
||||
|
|
|
|||
|
|
@ -36,12 +36,10 @@ import com.graphhopper.jsprit.core.problem.solution.route.activity.TimeWindow;
|
|||
* See {@linkplain JobBuilder} for detailed instruction how to implement your
|
||||
* Job.
|
||||
* </p>
|
||||
* <p>
|
||||
* Created by schroeder on 14.07.14.
|
||||
* </p>
|
||||
*
|
||||
* @author schroeder
|
||||
* @author balage
|
||||
*
|
||||
* @see JobBuilder
|
||||
*/
|
||||
public abstract class AbstractJob implements Job {
|
||||
|
|
@ -49,16 +47,16 @@ public abstract class AbstractJob implements Job {
|
|||
/**
|
||||
* Base builder for all direct descendants.
|
||||
* <p>
|
||||
* The is an abstract implementation of the builder pattern providing the
|
||||
* base functionality for inheritence. When you create a new AbstractJob
|
||||
* This is an abstract implementation of the builder pattern providing the
|
||||
* base functionality for inheritance. When you create a new AbstractJob
|
||||
* implementation and would like to provide builder for it follow the
|
||||
* guidlines below:
|
||||
* guidelines below:
|
||||
* </p>
|
||||
* <p>
|
||||
* First of all, you have to decide whether you would like to create a final
|
||||
* class (no further inheritence from it) or not. If you decide to make your
|
||||
* class (no further inheritance from it) or not. If you decide to make your
|
||||
* implementation <code>final</code> you can make your concrete builder in
|
||||
* one step, but make the Job class final to emphasize this fact.
|
||||
* one step, but make the class final to emphasize this fact.
|
||||
* </p>
|
||||
* <p>
|
||||
* If you wish to allow your Job implementation to be extended, first create
|
||||
|
|
@ -68,11 +66,11 @@ public abstract class AbstractJob implements Job {
|
|||
*
|
||||
* <pre>
|
||||
* public static abstract class BuilderBase<T extends MyJob, B extends BuilderBase<T, B>>
|
||||
* extends JobBuilder<T, B> {
|
||||
* extends AbstractJob.JobBuilder<T, B> {
|
||||
* }
|
||||
* </pre>
|
||||
* <p>
|
||||
* This implenetation should contain all new fields, the new setters
|
||||
* This implementation should contain all new fields, the new setters
|
||||
* following the pattern:
|
||||
* <p>
|
||||
*
|
||||
|
|
@ -90,8 +88,8 @@ public abstract class AbstractJob implements Job {
|
|||
* getters are provided for the fields as well.
|
||||
* </p>
|
||||
* <p>
|
||||
* This BuilderBase class is for the new descendents to base their Builder
|
||||
* on. If you don't need to refere to this class outside the descedents,
|
||||
* This BuilderBase class is for the new descendants to base their Builder
|
||||
* on. If you don't need to refer to this class outside the descendants,
|
||||
* make it protected.
|
||||
* </p>
|
||||
* <p>
|
||||
|
|
@ -99,7 +97,7 @@ public abstract class AbstractJob implements Job {
|
|||
* complex generic pattern and makes it safe (see <a href=
|
||||
* "http://stackoverflow.com/questions/7354740/is-there-a-way-to-refer-to-the-current-type-with-a-type-variable">
|
||||
* the answer of this topic</a> for more information about the pitfalls of
|
||||
* the self-refering generics pattern):
|
||||
* the self-referring generic pattern):
|
||||
* <p>
|
||||
*
|
||||
* <pre>
|
||||
|
|
@ -160,24 +158,63 @@ public abstract class AbstractJob implements Job {
|
|||
return (B) this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Clones a size dimension structures by adding all dimensions to the
|
||||
* job.
|
||||
*
|
||||
* @param size
|
||||
* The size dimensions to clone.
|
||||
* @return the builder
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B addAllSizeDimensions(SizeDimension size) {
|
||||
for (int i = 0; i < size.getNuOfDimensions(); i++) {
|
||||
capacityBuilder.addDimension(i, size.get(i));
|
||||
}
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a user data object to the job.
|
||||
*
|
||||
* <p>
|
||||
* This object can be any valid Java object and is a black box for the
|
||||
* API. With the user object, the job van be decorated and associated
|
||||
* with any custom information. This information is available anywhere
|
||||
* the job is available (most probably in constraints).
|
||||
* </p>
|
||||
*
|
||||
* @param userData
|
||||
* The data to associate.
|
||||
* @return the builder
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
protected B addUserData(Object userData) {
|
||||
this.userData = userData;
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a required skill to the job.
|
||||
*
|
||||
* @param skill
|
||||
* The skill to add.
|
||||
* @return the builder
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B addRequiredSkill(String skill) {
|
||||
skillBuilder.addSkill(skill);
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public B setName(String name) {
|
||||
this.name = name;
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clones all skills and adds them to the job.
|
||||
*
|
||||
* @param skills
|
||||
* The skill set to clone.
|
||||
* @return the builder
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B addAllRequiredSkills(Skills skills) {
|
||||
for (String s : skills.values()) {
|
||||
|
|
@ -186,11 +223,16 @@ public abstract class AbstractJob implements Job {
|
|||
return (B) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the name of the job.
|
||||
*
|
||||
* @param name
|
||||
* The name of the job.
|
||||
* @return the builder
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B addAllSizeDimensions(SizeDimension size) {
|
||||
for (int i = 0; i < size.getNuOfDimensions(); i++) {
|
||||
capacityBuilder.addDimension(i, size.get(i));
|
||||
}
|
||||
public B setName(String name) {
|
||||
this.name = name;
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
|
|
@ -215,15 +257,13 @@ public abstract class AbstractJob implements Job {
|
|||
/**
|
||||
* Builds the job.
|
||||
* <p>
|
||||
* <p>
|
||||
* You never has to override this method. Override the
|
||||
* <b> You never has to override this method. Override the
|
||||
* {@linkplain #validate()} and {@linkplain #createInstance()} methods
|
||||
* instead. (See for detailed implementation guidlines at
|
||||
* {@linkplain JobBuilder}!)
|
||||
* instead. (See for detailed implementation guidelines at
|
||||
* {@linkplain JobBuilder}!) </b>
|
||||
* </p>
|
||||
*
|
||||
* @return {@link T} The new implementation of the corresponding Job.
|
||||
* @author balage
|
||||
* @see JobBuilder
|
||||
*/
|
||||
public final T build() {
|
||||
|
|
@ -233,30 +273,62 @@ public abstract class AbstractJob implements Job {
|
|||
return job;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the settings. The implementation should throw exception
|
||||
* when the values are inconsistent.
|
||||
*/
|
||||
protected abstract void validate();
|
||||
|
||||
/**
|
||||
* Creates a new job instance.
|
||||
* <p>
|
||||
* This method is rarely overridden in the abstract base
|
||||
* implementations, but in the concrete Builder classes. (See for
|
||||
* detailed implementation guidelines at {@linkplain JobBuilder}!)
|
||||
* </p>
|
||||
*
|
||||
* @return The new job instance.
|
||||
*/
|
||||
protected abstract T createInstance();
|
||||
|
||||
/**
|
||||
* @return The constructed size dimension object.
|
||||
*/
|
||||
public SizeDimension getCapacity() {
|
||||
return capacityBuilder.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The required skill set.
|
||||
*/
|
||||
public Skills getSkills() {
|
||||
return skillBuilder.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The unique id of the job.
|
||||
*/
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The (optional) name of the task.
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The priority value of the task.
|
||||
*/
|
||||
public int getPriority() {
|
||||
return priority;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The asssociated user data object.
|
||||
*/
|
||||
public Object getUserData() {
|
||||
return userData;
|
||||
}
|
||||
|
|
@ -273,11 +345,11 @@ public abstract class AbstractJob implements Job {
|
|||
|
||||
private int priority;
|
||||
|
||||
protected List<Location> allLocations;
|
||||
private List<Location> allLocations;
|
||||
|
||||
private JobActivityList activityList;
|
||||
|
||||
protected Set<TimeWindow> allTimeWindows;
|
||||
private Set<TimeWindow> allTimeWindows;
|
||||
|
||||
private SizeDimension sizeAtStart;
|
||||
|
||||
|
|
@ -301,6 +373,10 @@ public abstract class AbstractJob implements Job {
|
|||
userData = builder.getUserData();
|
||||
}
|
||||
|
||||
/**
|
||||
* This package local constructor is for legacy job implementations.
|
||||
*/
|
||||
@Deprecated
|
||||
AbstractJob() {
|
||||
}
|
||||
|
||||
|
|
@ -309,12 +385,21 @@ public abstract class AbstractJob implements Job {
|
|||
return index;
|
||||
}
|
||||
|
||||
public void setIndex(int index) {
|
||||
/**
|
||||
* Sets the index of the job within the problem.
|
||||
* <p>
|
||||
* <b>This method isn't part of the public API and should not be called!</b>
|
||||
* </p>
|
||||
*
|
||||
* @param index
|
||||
* The index.
|
||||
*/
|
||||
public void impl_setIndex(int index) {
|
||||
this.index = index;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return User-specific domain data associated by the job
|
||||
* @return User-specific domain data associated with the job
|
||||
*/
|
||||
public Object getUserData() {
|
||||
return userData;
|
||||
|
|
@ -331,6 +416,17 @@ public abstract class AbstractJob implements Job {
|
|||
return allLocations;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method prepares the caches, such as collected location and time
|
||||
* window collections, and calculates the size at start and at the end.
|
||||
*
|
||||
* <p>
|
||||
* Most of the time, you won't need to call this function directly, because
|
||||
* it is called when the activities are created. However, you may override
|
||||
* this method if you have your own caches to initialize in your Job
|
||||
* implementation, but don't forget to call the super method.
|
||||
* </p>
|
||||
*/
|
||||
protected void prepareCaches() {
|
||||
allLocations = new ArrayList<>();
|
||||
allTimeWindows = new LinkedHashSet<>();
|
||||
|
|
@ -359,10 +455,16 @@ public abstract class AbstractJob implements Job {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The size dimension at the start.
|
||||
*/
|
||||
public SizeDimension getSizeAtStart() {
|
||||
return sizeAtStart;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The size dimension at the end.
|
||||
*/
|
||||
public SizeDimension getSizeAtEnd() {
|
||||
return sizeAtEnd;
|
||||
}
|
||||
|
|
@ -373,10 +475,10 @@ public abstract class AbstractJob implements Job {
|
|||
* <p>
|
||||
* This functions contract specifies that the implementation has to call
|
||||
* {@linkplain #prepareCaches()} function at the end, after all activities
|
||||
* are added.
|
||||
* are added or call the {@linkplain #setActivities(JobActivityList)} method
|
||||
* which calls the above method implicitlely.
|
||||
* </p>
|
||||
*/
|
||||
// protected abstract void createActivities();
|
||||
protected abstract void createActivities(JobBuilder<? extends AbstractJob, ?> jobBuilder);
|
||||
|
||||
@Override
|
||||
|
|
@ -388,9 +490,9 @@ public abstract class AbstractJob implements Job {
|
|||
}
|
||||
|
||||
/**
|
||||
* Two shipments are equal if they have the same id.
|
||||
* Two jobs are equal if they have the same id.
|
||||
*
|
||||
* @return true if shipments are equal (have the same id)
|
||||
* @return true if the jobs are equal (have the same id)
|
||||
*/
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
|
@ -409,6 +511,16 @@ public abstract class AbstractJob implements Job {
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the activity list.
|
||||
*
|
||||
* <p>
|
||||
* This method calls the {@linkplain #prepareCaches()} function.
|
||||
* </p>
|
||||
*
|
||||
* @param list
|
||||
* The activity list
|
||||
*/
|
||||
protected void setActivities(JobActivityList list) {
|
||||
activityList = list;
|
||||
prepareCaches();
|
||||
|
|
|
|||
|
|
@ -29,21 +29,38 @@ import com.graphhopper.jsprit.core.problem.solution.route.activity.TimeWindowsIm
|
|||
/**
|
||||
* Service implementation of a job.
|
||||
* <p>
|
||||
* Note that two services are equal if they have the same id.
|
||||
* </p>
|
||||
* <h3>Warning!</h3>
|
||||
* <p>
|
||||
* <p>Note that two services are equal if they have the same id.
|
||||
* This class and all its subclasses ({@linkplain ServiceJob},
|
||||
* {@linkplain PickupJob}, {@linkplain DeliveryJob} and
|
||||
* {@linkplain ShipmentJob}) are here for convenience. Most of the time using
|
||||
* them is unnecessary and using the {@linkplain CustomJob} is a better choice.
|
||||
* </p>
|
||||
* <p>
|
||||
* For most of the use cases, the {@linkplain CustomJob} offers sufficient
|
||||
* functionality, so before you decide to implement your own Job implementation
|
||||
* think over if you really need one. If after the above considerations, you
|
||||
* still choose to make your own implementation, it is strongly recommended to
|
||||
* base your implementation on {@linkplain AbstractJob} instead of this class.
|
||||
* It offers little and this class and all its subclasses may most likely be
|
||||
* deprecated and be removed in the future.
|
||||
* </p>
|
||||
*
|
||||
* @author schroeder
|
||||
* @author Balage
|
||||
*/
|
||||
public abstract class AbstractSingleActivityJob<A extends JobActivity> extends AbstractJob {
|
||||
|
||||
/**
|
||||
* Builder that builds a service.
|
||||
* Builder base that builds a job with a single activity.
|
||||
*
|
||||
* @author schroeder
|
||||
* @author Balage
|
||||
*/
|
||||
public static abstract class BuilderBase<T extends AbstractSingleActivityJob<?>, B extends BuilderBase<T, B>>
|
||||
extends JobBuilder<T, B> {
|
||||
|
||||
protected String type = "service";
|
||||
|
||||
protected double serviceTime;
|
||||
|
|
@ -52,6 +69,12 @@ public abstract class AbstractSingleActivityJob<A extends JobActivity> extends A
|
|||
|
||||
protected TimeWindowsImpl timeWindows;
|
||||
|
||||
/**
|
||||
* The constructor of the builder.
|
||||
*
|
||||
* @param id
|
||||
* The unique id of the job.
|
||||
*/
|
||||
public BuilderBase(String id) {
|
||||
super(id);
|
||||
this.id = id;
|
||||
|
|
@ -61,9 +84,12 @@ public abstract class AbstractSingleActivityJob<A extends JobActivity> extends A
|
|||
/**
|
||||
* Protected method to set the type-name of the service.
|
||||
* <p>
|
||||
* <p>Currently there are {@link AbstractSingleActivityJob}, {@link PickupJob} and {@link DeliveryJob}.
|
||||
* <p>
|
||||
* Currently there are {@link ServiceJob}, {@link PickupJob} and
|
||||
* {@link DeliveryJob}.
|
||||
*
|
||||
* @param name the name of service
|
||||
* @param name
|
||||
* the name of service
|
||||
* @return the builder
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
|
|
@ -96,9 +122,8 @@ public abstract class AbstractSingleActivityJob<A extends JobActivity> extends A
|
|||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B setServiceTime(double serviceTime) {
|
||||
if (serviceTime < 0) {
|
||||
if (serviceTime < 0)
|
||||
throw new IllegalArgumentException("serviceTime must be greater than or equal to zero");
|
||||
}
|
||||
this.serviceTime = serviceTime;
|
||||
return (B) this;
|
||||
}
|
||||
|
|
@ -114,42 +139,88 @@ public abstract class AbstractSingleActivityJob<A extends JobActivity> extends A
|
|||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public B addSizeDimension(int dimensionIndex, int dimensionValue) {
|
||||
if (dimensionValue < 0) {
|
||||
if (dimensionValue < 0)
|
||||
throw new IllegalArgumentException("capacity value cannot be negative");
|
||||
}
|
||||
capacityBuilder.addDimension(dimensionIndex, dimensionValue);
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a single time window.
|
||||
* <p>
|
||||
* This method clears any previously set time windows. Use
|
||||
* {@linkplain #addTimeWindow(TimeWindow)} to add an additional one,
|
||||
* instead of replacing the already set ones.
|
||||
* </p>
|
||||
*
|
||||
* @param tw
|
||||
* The time window to set.
|
||||
* @return the builder
|
||||
* @throws IllegalArgumentException
|
||||
* If the time window is null.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B setTimeWindow(TimeWindow tw) {
|
||||
if (tw == null) {
|
||||
if (tw == null)
|
||||
throw new IllegalArgumentException("time-window arg must not be null");
|
||||
}
|
||||
timeWindows = new TimeWindowsImpl();
|
||||
timeWindows.add(tw);
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* adds a single time window
|
||||
* <p>
|
||||
* This method adds the time window to the previously set time windows.
|
||||
* </p>
|
||||
*
|
||||
* @param timeWindow
|
||||
* The time window to set.
|
||||
* @return the builder
|
||||
* @throws IllegalArgumentException
|
||||
* If the time window is null.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B addTimeWindow(TimeWindow timeWindow) {
|
||||
if (timeWindow == null) {
|
||||
if (timeWindow == null)
|
||||
throw new IllegalArgumentException("time-window arg must not be null");
|
||||
}
|
||||
timeWindows.add(timeWindow);
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clones the time windows from an existing time window set.
|
||||
*
|
||||
* @param timeWindows
|
||||
* The time window set.
|
||||
* @return the build
|
||||
*/
|
||||
public B addTimeWindows(TimeWindows timeWindows) {
|
||||
return addTimeWindows(timeWindows.getTimeWindows());
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a collection of time windows.
|
||||
*
|
||||
* @param timeWindows
|
||||
* The time windows to add.
|
||||
* @return the build
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B addTimeWindows(Collection<TimeWindow> timeWindows) {
|
||||
timeWindows.forEach(t -> addTimeWindow(t));
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs and adds a time window.
|
||||
*
|
||||
* @param earliest
|
||||
* The earliest start.
|
||||
* @param latest
|
||||
* The latest start.
|
||||
* @return the builder
|
||||
*/
|
||||
public B addTimeWindow(double earliest, double latest) {
|
||||
return addTimeWindow(TimeWindow.newInstance(earliest, latest));
|
||||
}
|
||||
|
|
@ -179,26 +250,37 @@ public abstract class AbstractSingleActivityJob<A extends JobActivity> extends A
|
|||
|
||||
@Override
|
||||
protected void validate() {
|
||||
if (location == null) {
|
||||
if (location == null)
|
||||
throw new IllegalArgumentException("location is missing");
|
||||
}
|
||||
if (timeWindows.isEmpty()) {
|
||||
timeWindows.add(TimeWindow.ETERNITY);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The type code.
|
||||
*/
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The operation time.
|
||||
*/
|
||||
public double getServiceTime() {
|
||||
return serviceTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The location of the job.
|
||||
*/
|
||||
public Location getLocation() {
|
||||
return location;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The time window set.
|
||||
*/
|
||||
public TimeWindowsImpl getTimeWindows() {
|
||||
return timeWindows;
|
||||
}
|
||||
|
|
@ -211,10 +293,27 @@ public abstract class AbstractSingleActivityJob<A extends JobActivity> extends A
|
|||
type = builder.type;
|
||||
}
|
||||
|
||||
protected abstract A createActivity(
|
||||
BuilderBase<? extends AbstractSingleActivityJob<?>, ?> builder);
|
||||
/**
|
||||
* Creates the single activity.
|
||||
*
|
||||
* @param builder
|
||||
* the builder object
|
||||
* @return The created activity.
|
||||
*/
|
||||
protected abstract A createActivity(BuilderBase<? extends AbstractSingleActivityJob<?>, ?> builder);
|
||||
|
||||
|
||||
/**
|
||||
* Creates the activity.
|
||||
* <p>
|
||||
* It creates an activity list, adds the single activity produces by
|
||||
* {@linkplain #createActivity(BuilderBase)} and sets the activity list on
|
||||
* the job.
|
||||
* </p>
|
||||
*
|
||||
* @param builder
|
||||
* the builder object.
|
||||
*/
|
||||
@Override
|
||||
protected final void createActivities(JobBuilder<?, ?> builder) {
|
||||
@SuppressWarnings("unchecked")
|
||||
|
|
@ -224,49 +323,14 @@ public abstract class AbstractSingleActivityJob<A extends JobActivity> extends A
|
|||
setActivities(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The single activity assigned to the job.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public A getActivity() {
|
||||
return (A) getActivityList().getAll().get(0);
|
||||
}
|
||||
|
||||
// /**
|
||||
// * Returns location.
|
||||
// *
|
||||
// * @return location
|
||||
// */
|
||||
// @Deprecated
|
||||
// public Location getLocation() {
|
||||
// return getActivity().getLocation();
|
||||
// }
|
||||
//
|
||||
//
|
||||
// /**
|
||||
// * Returns the service-time/duration a service takes at service-location.
|
||||
// *
|
||||
// * @return service duration
|
||||
// */
|
||||
// @Deprecated
|
||||
// public double getServiceDuration() {
|
||||
// return getActivity().getOperationTime();
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Returns the time-window a service(-operation) is allowed to start.
|
||||
// * It is recommended to use getTimeWindows() instead. If you still use
|
||||
// this, it returns the first time window of getTimeWindows() collection.
|
||||
// *
|
||||
// * @return time window
|
||||
// */
|
||||
// @Deprecated
|
||||
// public TimeWindow getTimeWindow() {
|
||||
// return getTimeWindows().iterator().next();
|
||||
// }
|
||||
//
|
||||
// @Deprecated
|
||||
// public Collection<TimeWindow> getServiceTimeWindows() {
|
||||
// return getActivity().getTimeWindows();
|
||||
// }
|
||||
|
||||
/**
|
||||
* @return the name
|
||||
*/
|
||||
|
|
@ -282,7 +346,7 @@ public abstract class AbstractSingleActivityJob<A extends JobActivity> extends A
|
|||
@Override
|
||||
public String toString() {
|
||||
return "[id=" + getId() + "][name=" + getName() + "][type=" + type + "][activity="
|
||||
+ getActivity() + "]";
|
||||
+ getActivity() + "]";
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -293,6 +357,6 @@ public abstract class AbstractSingleActivityJob<A extends JobActivity> extends A
|
|||
}
|
||||
|
||||
public abstract <X extends BuilderBase<AbstractSingleActivityJob<? extends A>, ? extends BuilderBase<AbstractSingleActivityJob<? extends A>, ?>>> X getBuilder(
|
||||
String id);
|
||||
String id);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,43 +19,68 @@ package com.graphhopper.jsprit.core.problem.job;
|
|||
|
||||
import com.graphhopper.jsprit.core.problem.SizeDimension;
|
||||
import com.graphhopper.jsprit.core.problem.solution.route.activity.DeliveryActivity;
|
||||
import com.graphhopper.jsprit.core.problem.solution.route.activity.TimeWindow;
|
||||
|
||||
|
||||
/**
|
||||
* Delivery extends Service and is intended to model a Service where smth is UNLOADED (i.e. delivered) from a transport unit.
|
||||
* Delivery job implementation.
|
||||
* <p>
|
||||
* Delivery is intend to represent a kind of job where something is unloaded.
|
||||
* </p>
|
||||
*
|
||||
* <h3>Warning!</h3>
|
||||
* <p>
|
||||
* This class and are here for convenience. Most of the time using the
|
||||
* {@linkplain CustomJob} is a better choice. Note that this class may most
|
||||
* likely be deprecated and be removed in the future.
|
||||
* </p>
|
||||
*
|
||||
* @author schroeder
|
||||
* @author Balage
|
||||
*
|
||||
* @see {@linkplain CustomJob.BuilderBase#addDelivery(Location)}
|
||||
* @see {@linkplain CustomJob.BuilderBase#addDelivery(Location, SizeDimension)}
|
||||
* @see {@linkplain CustomJob.BuilderBase#addDelivery(Location, SizeDimension, double)}
|
||||
* @see {@linkplain CustomJob.BuilderBase#addDelivery(Location, SizeDimension, double, TimeWindow)}
|
||||
*/
|
||||
public class DeliveryJob extends AbstractSingleActivityJob<DeliveryActivity> {
|
||||
|
||||
/**
|
||||
* Builder for {@linkplain PickupJob}.
|
||||
*
|
||||
* @author Balage
|
||||
*/
|
||||
public static final class Builder
|
||||
extends AbstractSingleActivityJob.BuilderBase<DeliveryJob, Builder> {
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param id
|
||||
* The unique id.
|
||||
*/
|
||||
public Builder(String id) {
|
||||
super(id);
|
||||
setType("delivery");
|
||||
}
|
||||
|
||||
public static Builder newInstance(String id) {
|
||||
return new Builder(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected DeliveryJob createInstance() {
|
||||
return new DeliveryJob(this);
|
||||
}
|
||||
}
|
||||
|
||||
DeliveryJob(BuilderBase<? extends DeliveryJob, ?> builder) {
|
||||
private DeliveryJob(BuilderBase<? extends DeliveryJob, ?> builder) {
|
||||
super(builder);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected DeliveryActivity createActivity(
|
||||
BuilderBase<? extends AbstractSingleActivityJob<?>, ?> builder) {
|
||||
return new DeliveryActivity(this, builder.type, builder.location,
|
||||
builder.serviceTime,
|
||||
builder.getCapacity().invert(), builder.timeWindows.getTimeWindows());
|
||||
BuilderBase<? extends AbstractSingleActivityJob<?>, ?> builder) {
|
||||
return new DeliveryActivity(this, builder.type, builder.location,
|
||||
builder.serviceTime,
|
||||
builder.getCapacity().invert(), builder.timeWindows.getTimeWindows());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -67,7 +92,7 @@ public class DeliveryJob extends AbstractSingleActivityJob<DeliveryActivity> {
|
|||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public Builder getBuilder(String id) {
|
||||
return Builder.newInstance(id);
|
||||
return new Builder(id);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,6 +52,9 @@ public interface Job extends HasId, HasIndex {
|
|||
@Deprecated
|
||||
public SizeDimension getSize();
|
||||
|
||||
/**
|
||||
* @return Returns the required skill set.
|
||||
*/
|
||||
public Skills getRequiredSkills();
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -17,48 +17,73 @@
|
|||
*/
|
||||
package com.graphhopper.jsprit.core.problem.job;
|
||||
|
||||
import com.graphhopper.jsprit.core.problem.SizeDimension;
|
||||
import com.graphhopper.jsprit.core.problem.solution.route.activity.PickupActivity;
|
||||
import com.graphhopper.jsprit.core.problem.solution.route.activity.TimeWindow;
|
||||
|
||||
/**
|
||||
* Pickup extends Service and is intended to model a Service where smth is LOADED (i.e. picked up) to a transport unit.
|
||||
* Pickup job implementation.
|
||||
* <p>
|
||||
* Pickup is intend to represent a kind of job where something is loaded.
|
||||
* </p>
|
||||
*
|
||||
* <h3>Warning!</h3>
|
||||
* <p>
|
||||
* This class and are here for convenience. Most of the time using the
|
||||
* {@linkplain CustomJob} is a better choice. Note that this class may most
|
||||
* likely be deprecated and be removed in the future.
|
||||
* </p>
|
||||
*
|
||||
* @author schroeder
|
||||
* @author Balage
|
||||
*
|
||||
* @see {@linkplain CustomJob.BuilderBase#addPickup(Location)}
|
||||
* @see {@linkplain CustomJob.BuilderBase#addPickup(Location, SizeDimension)}
|
||||
* @see {@linkplain CustomJob.BuilderBase#addPickup(Location, SizeDimension, double)}
|
||||
* @see {@linkplain CustomJob.BuilderBase#addPickup(Location, SizeDimension, double, TimeWindow)}
|
||||
*/
|
||||
public class PickupJob extends AbstractSingleActivityJob<PickupActivity> {
|
||||
|
||||
/**
|
||||
* Builder for {@linkplain PickupJob}.
|
||||
*
|
||||
* @author Balage
|
||||
*/
|
||||
public static final class Builder
|
||||
extends AbstractSingleActivityJob.BuilderBase<PickupJob, Builder> {
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param id
|
||||
* The unique id.
|
||||
*/
|
||||
public Builder(String id) {
|
||||
super(id);
|
||||
setType("pickup");
|
||||
}
|
||||
|
||||
public static Builder newInstance(String id) {
|
||||
return new Builder(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PickupJob createInstance() {
|
||||
return new PickupJob(this);
|
||||
}
|
||||
}
|
||||
|
||||
PickupJob(Builder builder) {
|
||||
private PickupJob(Builder builder) {
|
||||
super(builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PickupActivity createActivity(
|
||||
AbstractSingleActivityJob.BuilderBase<? extends AbstractSingleActivityJob<?>, ?> builder) {
|
||||
return new PickupActivity(this, builder.type, builder.location, builder.serviceTime,
|
||||
builder.getCapacity(), builder.timeWindows.getTimeWindows());
|
||||
AbstractSingleActivityJob.BuilderBase<? extends AbstractSingleActivityJob<?>, ?> builder) {
|
||||
return new PickupActivity(this, builder.type, builder.location, builder.serviceTime,
|
||||
builder.getCapacity(), builder.timeWindows.getTimeWindows());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public Builder getBuilder(String id) {
|
||||
return Builder.newInstance(id);
|
||||
return new Builder(id);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,243 +0,0 @@
|
|||
/*
|
||||
* Licensed to GraphHopper GmbH under one or more contributor
|
||||
* license agreements. See the NOTICE file distributed with this work for
|
||||
* additional information regarding copyright ownership.
|
||||
*
|
||||
* GraphHopper GmbH licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.graphhopper.jsprit.core.problem.job;
|
||||
|
||||
import com.graphhopper.jsprit.core.problem.Location;
|
||||
import com.graphhopper.jsprit.core.problem.SizeDimension;
|
||||
import com.graphhopper.jsprit.core.problem.solution.route.activity.DeliveryActivity;
|
||||
import com.graphhopper.jsprit.core.problem.solution.route.activity.ExchangeActivity;
|
||||
import com.graphhopper.jsprit.core.problem.solution.route.activity.PickupActivity;
|
||||
import com.graphhopper.jsprit.core.problem.solution.route.activity.TimeWindow;
|
||||
import com.graphhopper.jsprit.core.problem.solution.route.activity.TimeWindowsImpl;
|
||||
|
||||
|
||||
/**
|
||||
* Shipment is an implementation of Job and consists of a backhaul and exchange
|
||||
* and an delivery
|
||||
*
|
||||
* @author balage
|
||||
*/
|
||||
public final class ReturnedShipment extends ShipmentJob {
|
||||
|
||||
public static final String BACKHAUL_ACTIVITY_NAME = "backhaul";
|
||||
|
||||
/**
|
||||
* Builder that builds the shipment.
|
||||
*
|
||||
* @author schroeder
|
||||
*/
|
||||
|
||||
public static final class Builder extends ShipmentJob.BuilderBase<ReturnedShipment, Builder> {
|
||||
|
||||
private double backhaulServiceTime = 0.0;
|
||||
|
||||
private Location backhaulLocation;
|
||||
|
||||
protected TimeWindowsImpl backhaulTimeWindows = new TimeWindowsImpl();
|
||||
|
||||
protected SizeDimension.Builder backhaulCapacityBuilder = SizeDimension.Builder.newInstance();
|
||||
|
||||
/**
|
||||
* Returns new instance of this builder.
|
||||
*
|
||||
* @param id the id of the shipment which must be a unique identifier
|
||||
* among all jobs
|
||||
* @return the builder
|
||||
*/
|
||||
|
||||
public Builder(String id) {
|
||||
super(id);
|
||||
backhaulTimeWindows = new TimeWindowsImpl();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets backhaul location.
|
||||
*
|
||||
* @param backhaulLocation backhaul location
|
||||
* @return builder
|
||||
*/
|
||||
|
||||
public Builder setBackhaulLocation(Location backhaulLocation) {
|
||||
this.backhaulLocation = backhaulLocation;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets backhaulServiceTime.
|
||||
* <p>
|
||||
* <p>
|
||||
* ServiceTime is intended to be the time the implied activity takes at
|
||||
* the backhaul-location.
|
||||
*
|
||||
* @param serviceTime the service time / duration the backhaul of the associated
|
||||
* shipment takes
|
||||
* @return builder
|
||||
* @throws IllegalArgumentException if servicTime < 0.0
|
||||
*/
|
||||
|
||||
public Builder setBackhaulServiceTime(double serviceTime) {
|
||||
if (serviceTime < 0.0) {
|
||||
throw new IllegalArgumentException("serviceTime must not be < 0.0");
|
||||
}
|
||||
backhaulServiceTime = serviceTime;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the timeWindow for the backhaul, i.e. the time-period in which a
|
||||
* backhaul operation is allowed to START.
|
||||
* <p>
|
||||
* <p>
|
||||
* By default timeWindow is [0.0, Double.MAX_VALUE}
|
||||
*
|
||||
* @param timeWindow the time window within the backhaul operation/activity can
|
||||
* START
|
||||
* @return builder
|
||||
* @throws IllegalArgumentException if timeWindow is null
|
||||
*/
|
||||
|
||||
public Builder setBackhaulTimeWindow(TimeWindow timeWindow) {
|
||||
if (timeWindow == null) {
|
||||
throw new IllegalArgumentException("backhaul time-window must not be null");
|
||||
}
|
||||
backhaulTimeWindows.clear();
|
||||
backhaulTimeWindows.add(timeWindow);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public Builder addBackhaulTimeWindow(TimeWindow timeWindow) {
|
||||
if (timeWindow == null) {
|
||||
throw new IllegalArgumentException("time-window arg must not be null");
|
||||
}
|
||||
backhaulTimeWindows.add(timeWindow);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public Builder addBackhaulTimeWindow(double earliest, double latest) {
|
||||
addBackhaulTimeWindow(TimeWindow.newInstance(earliest, latest));
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder addBackhaulSizeDimension(int dimensionIndex, int dimensionValue) {
|
||||
if (dimensionValue < 0) {
|
||||
throw new IllegalArgumentException("capacity value cannot be negative");
|
||||
}
|
||||
backhaulCapacityBuilder.addDimension(dimensionIndex, dimensionValue);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder addAllBackhaulSizeDimensions(SizeDimension size) {
|
||||
for (int i = 0; i < size.getNuOfDimensions(); i++) {
|
||||
backhaulCapacityBuilder.addDimension(i, size.get(i));
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void validate() {
|
||||
super.validate();
|
||||
if (backhaulLocation == null) {
|
||||
backhaulLocation = getPickupLocation();
|
||||
}
|
||||
if (backhaulTimeWindows.isEmpty()) {
|
||||
backhaulTimeWindows.add(TimeWindow.ETERNITY);
|
||||
}
|
||||
}
|
||||
|
||||
private double getBackhaulServiceTime() {
|
||||
return backhaulServiceTime;
|
||||
}
|
||||
|
||||
private Location getBackhaulLocation() {
|
||||
return backhaulLocation;
|
||||
}
|
||||
|
||||
private TimeWindowsImpl getBackhaulTimeWindows() {
|
||||
return backhaulTimeWindows;
|
||||
}
|
||||
|
||||
private SizeDimension getBackhaulCapacity() {
|
||||
SizeDimension backhaulCapacity = backhaulCapacityBuilder.build();
|
||||
// If no capacity is specified, the backhaul capacity will be the
|
||||
// same as the picking one.
|
||||
if (backhaulCapacity.getNuOfDimensions() == 0) {
|
||||
backhaulCapacity = getCapacity();
|
||||
}
|
||||
return backhaulCapacity;
|
||||
}
|
||||
|
||||
public static Builder newInstance(String id) {
|
||||
return new Builder(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ReturnedShipment createInstance() {
|
||||
return new ReturnedShipment(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ReturnedShipment(BuilderBase<? extends ReturnedShipment, ?> builder) {
|
||||
super(builder);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void createActivities(JobBuilder<?, ?> builder) {
|
||||
Builder shipmentBuilder = (Builder) builder;
|
||||
JobActivityList list = new SequentialJobActivityList(this);
|
||||
list.addActivity(new PickupActivity(this, PICKUP_ACTIVITY_NAME,
|
||||
shipmentBuilder.getPickupLocation(),
|
||||
shipmentBuilder.getPickupServiceTime(), shipmentBuilder.getCapacity(),
|
||||
shipmentBuilder.getPickupTimeWindows().getTimeWindows()));
|
||||
list.addActivity(new ExchangeActivity(this, DELIVERY_ACTIVITY_NAME,
|
||||
shipmentBuilder.getDeliveryLocation(),
|
||||
shipmentBuilder.getDeliveryServiceTime(),
|
||||
shipmentBuilder.getBackhaulCapacity()
|
||||
.subtract(shipmentBuilder.getCapacity()),
|
||||
shipmentBuilder.getDeliveryTimeWindows().getTimeWindows()));
|
||||
list.addActivity(new DeliveryActivity(this, BACKHAUL_ACTIVITY_NAME,
|
||||
shipmentBuilder.getBackhaulLocation(),
|
||||
shipmentBuilder.getBackhaulServiceTime(),
|
||||
shipmentBuilder.getBackhaulCapacity(),
|
||||
shipmentBuilder.getBackhaulTimeWindows().getTimeWindows()));
|
||||
setActivities(list);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PickupActivity getPickupActivity() {
|
||||
return (PickupActivity) getActivityList()
|
||||
.findByType(PICKUP_ACTIVITY_NAME)
|
||||
.get();
|
||||
}
|
||||
|
||||
public ExchangeActivity getExchangeActivity() {
|
||||
return (ExchangeActivity) getActivityList()
|
||||
.findByType(DELIVERY_ACTIVITY_NAME)
|
||||
.get();
|
||||
}
|
||||
|
||||
public DeliveryActivity getBackhaulActivity() {
|
||||
return (DeliveryActivity) getActivityList()
|
||||
.findByType(BACKHAUL_ACTIVITY_NAME)
|
||||
.get();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -462,8 +462,8 @@ public class Service extends AbstractJob {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setIndex(int index) {
|
||||
theRealJob.setIndex(index);
|
||||
public void impl_setIndex(int index) {
|
||||
theRealJob.impl_setIndex(index);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -17,56 +17,71 @@
|
|||
*/
|
||||
package com.graphhopper.jsprit.core.problem.job;
|
||||
|
||||
import com.graphhopper.jsprit.core.problem.SizeDimension;
|
||||
import com.graphhopper.jsprit.core.problem.solution.route.activity.ServiceActivity;
|
||||
import com.graphhopper.jsprit.core.problem.solution.route.activity.TimeWindow;
|
||||
|
||||
/**
|
||||
* Service implementation of a job.
|
||||
*
|
||||
* <h3>Warning!</h3>
|
||||
* <p>
|
||||
* <p>
|
||||
* <p>Note that two services are equal if they have the same id.
|
||||
* This class and are here for convenience. Most of the time using the
|
||||
* {@linkplain CustomJob} is a better choice. Note that this class may most
|
||||
* likely be deprecated and be removed in the future.
|
||||
* </p>
|
||||
*
|
||||
* @author schroeder
|
||||
* @author Balage
|
||||
*
|
||||
* @see {@linkplain CustomJob.BuilderBase#addService(Location)}
|
||||
* @see {@linkplain CustomJob.BuilderBase#addService(Location, SizeDimension)}
|
||||
* @see {@linkplain CustomJob.BuilderBase#addService(Location, SizeDimension, double)}
|
||||
* @see {@linkplain CustomJob.BuilderBase#addService(Location, SizeDimension, double, TimeWindow)}
|
||||
*/
|
||||
public class ServiceJob extends AbstractSingleActivityJob<ServiceActivity> {
|
||||
|
||||
|
||||
/**
|
||||
* Builder for {@linkplain ServiceJob}.
|
||||
*
|
||||
* @author Balage
|
||||
*/
|
||||
public static final class Builder
|
||||
extends AbstractSingleActivityJob.BuilderBase<ServiceJob, Builder> {
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param id
|
||||
* The unique id.
|
||||
*/
|
||||
public Builder(String id) {
|
||||
super(id);
|
||||
setType("pickup");
|
||||
}
|
||||
|
||||
public static Builder newInstance(String id) {
|
||||
return new Builder(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ServiceJob createInstance() {
|
||||
return new ServiceJob(this);
|
||||
}
|
||||
}
|
||||
|
||||
ServiceJob(Builder builder) {
|
||||
private ServiceJob(Builder builder) {
|
||||
super(builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ServiceActivity createActivity(
|
||||
AbstractSingleActivityJob.BuilderBase<? extends AbstractSingleActivityJob<?>, ?> builder) {
|
||||
AbstractSingleActivityJob.BuilderBase<? extends AbstractSingleActivityJob<?>, ?> builder) {
|
||||
return new ServiceActivity(this, builder.type,
|
||||
builder.location, builder.serviceTime, builder.getCapacity(),
|
||||
builder.timeWindows.getTimeWindows());
|
||||
// return new PickupActivityNEW(this, builder.type, builder.location,
|
||||
// builder.serviceTime,
|
||||
// builder.getCapacity(), builder.timeWindows.getTimeWindows());
|
||||
builder.location, builder.serviceTime, builder.getCapacity(),
|
||||
builder.timeWindows.getTimeWindows());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public Builder getBuilder(String id) {
|
||||
return Builder.newInstance(id);
|
||||
return new Builder(id);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -563,8 +563,8 @@ public class Shipment extends AbstractJob {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setIndex(int index) {
|
||||
theRealJob.setIndex(index);
|
||||
public void impl_setIndex(int index) {
|
||||
theRealJob.impl_setIndex(index);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -29,38 +29,36 @@ import com.graphhopper.jsprit.core.problem.solution.route.activity.TimeWindowsIm
|
|||
* Shipment is an implementation of Job and consists of a pickup and a delivery
|
||||
* of something.
|
||||
* <p>
|
||||
* <h3>Warning!</h3>
|
||||
* <p>
|
||||
* It distinguishes itself from {@link ServiceJob} as two locations are involved a
|
||||
* pickup where usually something is loaded to the transport unit and a delivery
|
||||
* where something is unloaded.
|
||||
* <p>
|
||||
* <p>
|
||||
* By default serviceTimes of both pickup and delivery is 0.0 and timeWindows of
|
||||
* both is [0.0, Double.MAX_VALUE],
|
||||
* <p>
|
||||
* <p>
|
||||
* A shipment can be built with a builder. You can get an instance of the
|
||||
* builder by coding <code>Shipment.Builder.newInstance(...)</code>. This way
|
||||
* you can specify the shipment. Once you build the shipment, it is immutable,
|
||||
* i.e. fields/attributes cannot be changed anymore and you can only 'get' the
|
||||
* specified values.
|
||||
* <p>
|
||||
* <p>
|
||||
* Note that two shipments are equal if they have the same id.
|
||||
* This class and are here for convenience. Most of the time using the
|
||||
* {@linkplain CustomJob} is a better choice. Note that this class may most
|
||||
* likely be deprecated and be removed in the future.
|
||||
* </p>
|
||||
*
|
||||
* @author schroeder
|
||||
* @author Balage
|
||||
*
|
||||
* @see {@linkplain CustomJob.BuilderBase}
|
||||
*/
|
||||
public class ShipmentJob extends AbstractJob {
|
||||
|
||||
/**
|
||||
* Name of the pickup activity in the shipment.
|
||||
*/
|
||||
public static final String DELIVERY_ACTIVITY_NAME = "deliverShipment";
|
||||
/**
|
||||
* Name of the delivery activity in the shipment.
|
||||
*/
|
||||
public static final String PICKUP_ACTIVITY_NAME = "pickupShipment";
|
||||
|
||||
/**
|
||||
* Builder that builds the shipment.
|
||||
*
|
||||
* @author schroeder
|
||||
* @author Balage
|
||||
*/
|
||||
public static abstract class BuilderBase<T extends ShipmentJob, B extends BuilderBase<T, B>>
|
||||
protected static abstract class BuilderBase<T extends ShipmentJob, B extends BuilderBase<T, B>>
|
||||
extends JobBuilder<T, B> {
|
||||
|
||||
private double pickupServiceTime = 0.0;
|
||||
|
|
@ -71,15 +69,16 @@ public class ShipmentJob extends AbstractJob {
|
|||
|
||||
private Location deliveryLocation;
|
||||
|
||||
protected TimeWindowsImpl deliveryTimeWindows = new TimeWindowsImpl();
|
||||
private TimeWindowsImpl deliveryTimeWindows = new TimeWindowsImpl();
|
||||
|
||||
private TimeWindowsImpl pickupTimeWindows = new TimeWindowsImpl();
|
||||
|
||||
/**
|
||||
* Returns new instance of this builder.
|
||||
* Constructor.
|
||||
*
|
||||
* @param id the id of the shipment which must be a unique identifier
|
||||
* among all jobs
|
||||
* @param id
|
||||
* the id of the shipment which must be a unique identifier
|
||||
* among all jobs
|
||||
* @return the builder
|
||||
*/
|
||||
|
||||
|
|
@ -115,34 +114,12 @@ public class ShipmentJob extends AbstractJob {
|
|||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B setPickupServiceTime(double serviceTime) {
|
||||
if (serviceTime < 0.0) {
|
||||
if (serviceTime < 0.0)
|
||||
throw new IllegalArgumentException("serviceTime must not be < 0.0");
|
||||
}
|
||||
pickupServiceTime = serviceTime;
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the timeWindow for the pickup, i.e. the time-period in which a
|
||||
* pickup operation is allowed to START.
|
||||
* <p>
|
||||
* <p>
|
||||
* By default timeWindow is [0.0, Double.MAX_VALUE}
|
||||
*
|
||||
* @param timeWindow the time window within the pickup operation/activity can
|
||||
* START
|
||||
* @return builder
|
||||
* @throws IllegalArgumentException if timeWindow is null
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B setPickupTimeWindow(TimeWindow timeWindow) {
|
||||
if (timeWindow == null) {
|
||||
throw new IllegalArgumentException("pickup time-window must not be null");
|
||||
}
|
||||
pickupTimeWindows.clear();
|
||||
pickupTimeWindows.add(timeWindow);
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -170,59 +147,117 @@ public class ShipmentJob extends AbstractJob {
|
|||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B setDeliveryServiceTime(double deliveryServiceTime) {
|
||||
if (deliveryServiceTime < 0.0) {
|
||||
if (deliveryServiceTime < 0.0)
|
||||
throw new IllegalArgumentException("deliveryServiceTime must not be < 0.0");
|
||||
}
|
||||
this.deliveryServiceTime = deliveryServiceTime;
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the timeWindow for the delivery, i.e. the time-period in which a
|
||||
* delivery operation is allowed to start.
|
||||
* Sets a single time window.
|
||||
* <p>
|
||||
* <p>
|
||||
* By default timeWindow is [0.0, Double.MAX_VALUE}
|
||||
* This method clears any previously set time windows. Use
|
||||
* {@linkplain #addTimeWindow(TimeWindow)} to add an additional one,
|
||||
* instead of replacing the already set ones.
|
||||
* </p>
|
||||
*
|
||||
* @param timeWindow the time window within the associated delivery is allowed
|
||||
* to START
|
||||
* @param timeWindow
|
||||
* the time window within the associated delivery is allowed
|
||||
* to start
|
||||
* @return builder
|
||||
* @throws IllegalArgumentException if timeWindow is null
|
||||
* @throws IllegalArgumentException
|
||||
* if timeWindow is null
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B setDeliveryTimeWindow(TimeWindow timeWindow) {
|
||||
if (timeWindow == null) {
|
||||
if (timeWindow == null)
|
||||
throw new IllegalArgumentException("delivery time-window must not be null");
|
||||
}
|
||||
deliveryTimeWindows.clear();
|
||||
deliveryTimeWindows.add(timeWindow);
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a single time window to the delivery activity.
|
||||
*
|
||||
* @param timeWindow
|
||||
* The time window to set.
|
||||
* @return the builder
|
||||
* @throws IllegalArgumentException
|
||||
* If the time window is null.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B addDeliveryTimeWindow(TimeWindow timeWindow) {
|
||||
if (timeWindow == null) {
|
||||
if (timeWindow == null)
|
||||
throw new IllegalArgumentException("time-window arg must not be null");
|
||||
}
|
||||
deliveryTimeWindows.add(timeWindow);
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs and adds a time window to the delivery activity.
|
||||
*
|
||||
* @param earliest
|
||||
* The earliest start.
|
||||
* @param latest
|
||||
* The latest start.
|
||||
* @return the builder
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B addDeliveryTimeWindow(double earliest, double latest) {
|
||||
addDeliveryTimeWindow(TimeWindow.newInstance(earliest, latest));
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the timeWindow for the pickup, i.e. the time-period in which a
|
||||
* pickup operation is allowed to START.
|
||||
* <p>
|
||||
* <p>
|
||||
* By default timeWindow is [0.0, Double.MAX_VALUE}
|
||||
*
|
||||
* @param timeWindow
|
||||
* the time window within the pickup operation/activity can
|
||||
* START
|
||||
* @return builder
|
||||
* @throws IllegalArgumentException
|
||||
* if timeWindow is null
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B addPickupTimeWindow(TimeWindow timeWindow) {
|
||||
if (timeWindow == null) {
|
||||
throw new IllegalArgumentException("time-window arg must not be null");
|
||||
}
|
||||
public B setPickupTimeWindow(TimeWindow timeWindow) {
|
||||
if (timeWindow == null)
|
||||
throw new IllegalArgumentException("pickup time-window must not be null");
|
||||
pickupTimeWindows.clear();
|
||||
pickupTimeWindows.add(timeWindow);
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a single time window to the pickup activity.
|
||||
*
|
||||
* @param timeWindow
|
||||
* The time window to set.
|
||||
* @return the builder
|
||||
* @throws IllegalArgumentException
|
||||
* If the time window is null.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B addPickupTimeWindow(TimeWindow timeWindow) {
|
||||
if (timeWindow == null)
|
||||
throw new IllegalArgumentException("time-window arg must not be null");
|
||||
pickupTimeWindows.add(timeWindow);
|
||||
return (B) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs and adds a time window to the pickup activity.
|
||||
*
|
||||
* @param earliest
|
||||
* The earliest start.
|
||||
* @param latest
|
||||
* The latest start.
|
||||
* @return the builder
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public B addPickupTimeWindow(double earliest, double latest) {
|
||||
addPickupTimeWindow(TimeWindow.newInstance(earliest, latest));
|
||||
|
|
@ -231,12 +266,10 @@ public class ShipmentJob extends AbstractJob {
|
|||
|
||||
@Override
|
||||
protected void validate() {
|
||||
if (pickupLocation == null) {
|
||||
if (pickupLocation == null)
|
||||
throw new IllegalArgumentException("pickup location is missing");
|
||||
}
|
||||
if (deliveryLocation == null) {
|
||||
if (deliveryLocation == null)
|
||||
throw new IllegalArgumentException("delivery location is missing");
|
||||
}
|
||||
if (pickupTimeWindows.isEmpty()) {
|
||||
pickupTimeWindows.add(TimeWindow.ETERNITY);
|
||||
}
|
||||
|
|
@ -273,12 +306,26 @@ public class ShipmentJob extends AbstractJob {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* The builder for {@linkplain ShipmentJob}.
|
||||
*
|
||||
* <h3>Warning!</h3>
|
||||
* <p>
|
||||
* This class and are here for convenience. Most of the time using the
|
||||
* {@linkplain CustomJob} is a better choice. Note that this class may most
|
||||
* likely be deprecated and be removed in the future.
|
||||
* </p>
|
||||
*
|
||||
* @author Balage
|
||||
*/
|
||||
public static final class Builder extends BuilderBase<ShipmentJob, Builder> {
|
||||
|
||||
public static Builder newInstance(String id) {
|
||||
return new Builder(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param id
|
||||
* The unique id.
|
||||
*/
|
||||
public Builder(String id) {
|
||||
super(id);
|
||||
}
|
||||
|
|
@ -291,7 +338,7 @@ public class ShipmentJob extends AbstractJob {
|
|||
}
|
||||
|
||||
|
||||
ShipmentJob(BuilderBase<? extends ShipmentJob, ?> builder) {
|
||||
private ShipmentJob(BuilderBase<? extends ShipmentJob, ?> builder) {
|
||||
super(builder);
|
||||
}
|
||||
|
||||
|
|
@ -301,90 +348,32 @@ public class ShipmentJob extends AbstractJob {
|
|||
Builder shipmentBuilder = (Builder) builder;
|
||||
JobActivityList list = new SequentialJobActivityList(this);
|
||||
list.addActivity(new PickupActivity(this, PICKUP_ACTIVITY_NAME,
|
||||
shipmentBuilder.getPickupLocation(),
|
||||
shipmentBuilder.getPickupServiceTime(), shipmentBuilder.getCapacity(),
|
||||
shipmentBuilder.getPickupTimeWindows().getTimeWindows()));
|
||||
shipmentBuilder.getPickupLocation(),
|
||||
shipmentBuilder.getPickupServiceTime(), shipmentBuilder.getCapacity(),
|
||||
shipmentBuilder.getPickupTimeWindows().getTimeWindows()));
|
||||
list.addActivity(new DeliveryActivity(this, DELIVERY_ACTIVITY_NAME,
|
||||
shipmentBuilder.getDeliveryLocation(),
|
||||
shipmentBuilder.getDeliveryServiceTime(),
|
||||
shipmentBuilder.getCapacity().invert(),
|
||||
shipmentBuilder.getDeliveryTimeWindows().getTimeWindows()));
|
||||
shipmentBuilder.getDeliveryLocation(),
|
||||
shipmentBuilder.getDeliveryServiceTime(),
|
||||
shipmentBuilder.getCapacity().invert(),
|
||||
shipmentBuilder.getDeliveryTimeWindows().getTimeWindows()));
|
||||
|
||||
setActivities(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The pickup activity.
|
||||
*/
|
||||
public PickupActivity getPickupActivity() {
|
||||
return (PickupActivity) getActivityList().findByType(PICKUP_ACTIVITY_NAME).get();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The delivery activity.
|
||||
*/
|
||||
public DeliveryActivity getDeliveryActivity() {
|
||||
return (DeliveryActivity) getActivityList().findByType(DELIVERY_ACTIVITY_NAME).get();
|
||||
}
|
||||
|
||||
// =================== DEPRECATED GETTERS
|
||||
|
||||
// @Deprecated
|
||||
// public Location getPickupLocation() {
|
||||
// return getPickupActivity().getLocation();
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Returns the pickup service-time.
|
||||
// * <p>
|
||||
// * <p>
|
||||
// * By default service-time is 0.0.
|
||||
// *
|
||||
// * @return service-time
|
||||
// */
|
||||
// @Deprecated
|
||||
// public double getPickupServiceTime() {
|
||||
// return getPickupActivity().getOperationTime();
|
||||
// }
|
||||
//
|
||||
// @Deprecated
|
||||
// public Location getDeliveryLocation() {
|
||||
// return getDeliveryActivity().getLocation();
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Returns service-time of delivery.
|
||||
// *
|
||||
// * @return service-time of delivery
|
||||
// */
|
||||
// @Deprecated
|
||||
// public double getDeliveryServiceTime() {
|
||||
// return getDeliveryActivity().getOperationTime();
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Returns the time-window of delivery.
|
||||
// *
|
||||
// * @return time-window of delivery
|
||||
// */
|
||||
// @Deprecated
|
||||
// public TimeWindow getDeliveryTimeWindow() {
|
||||
// return getDeliveryTimeWindows().iterator().next();
|
||||
// }
|
||||
//
|
||||
// @Deprecated
|
||||
// public Collection<TimeWindow> getDeliveryTimeWindows() {
|
||||
// return getDeliveryActivity().getTimeWindows();
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * Returns the time-window of pickup.
|
||||
// *
|
||||
// * @return time-window of pickup
|
||||
// */
|
||||
// @Deprecated
|
||||
// public TimeWindow getPickupTimeWindow() {
|
||||
// return getPickupTimeWindows().iterator().next();
|
||||
// }
|
||||
//
|
||||
// @Deprecated
|
||||
// public Collection<TimeWindow> getPickupTimeWindows() {
|
||||
// return getPickupActivity().getTimeWindows();
|
||||
// }
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
|
|
|
|||
|
|
@ -165,13 +165,13 @@ public class InitialRoutesTest {
|
|||
.setType(type)
|
||||
.build();
|
||||
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("s")
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("s")
|
||||
.setPickupLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(10, 0)).setId("pick").build())
|
||||
.setDeliveryLocation(Location.Builder.newInstance().setId("del").setCoordinate(Coordinate.newInstance(0, 10)).build())
|
||||
.addSizeDimension(0, 100)
|
||||
.build();
|
||||
|
||||
ShipmentJob another_shipment = ShipmentJob.Builder.newInstance("another_s")
|
||||
ShipmentJob another_shipment = new ShipmentJob.Builder("another_s")
|
||||
.setPickupLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(10, 0)).setId("pick").build())
|
||||
.setDeliveryLocation(Location.Builder.newInstance().setId("del").setCoordinate(Coordinate.newInstance(0, 10)).build())
|
||||
.addSizeDimension(0, 50)
|
||||
|
|
|
|||
|
|
@ -336,13 +336,13 @@ public class MeetTimeWindowConstraint_IT {
|
|||
ServiceJob s7 = new ServiceJob.Builder("7").setLocation(Location.Builder.newInstance().setIndex(7).setId("jsp3").build())
|
||||
.setServiceTime(5594).build();
|
||||
|
||||
ShipmentJob shipment1 = ShipmentJob.Builder.newInstance("shipment1")
|
||||
ShipmentJob shipment1 = new ShipmentJob.Builder("shipment1")
|
||||
.setPickupServiceTime(900)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("jsp1").setIndex(1).build())
|
||||
.setDeliveryLocation(Location.Builder.newInstance().setId("jsd1").setIndex(8).build())
|
||||
.setDeliveryServiceTime(900).build();
|
||||
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("shipment2")
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("shipment2")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("jsp4").setIndex(9).build())
|
||||
.setPickupServiceTime(1200)
|
||||
.addPickupTimeWindow(21600, 23400)
|
||||
|
|
@ -351,7 +351,7 @@ public class MeetTimeWindowConstraint_IT {
|
|||
.addDeliveryTimeWindow(25200, 27000)
|
||||
.build();
|
||||
|
||||
ShipmentJob shipment3 = ShipmentJob.Builder.newInstance("shipment3")
|
||||
ShipmentJob shipment3 = new ShipmentJob.Builder("shipment3")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("jsp7").setIndex(9).build())
|
||||
.setPickupServiceTime(1200)
|
||||
.addPickupTimeWindow(37800, 41400)
|
||||
|
|
@ -360,7 +360,7 @@ public class MeetTimeWindowConstraint_IT {
|
|||
.addDeliveryTimeWindow(43200, 45900)
|
||||
.build();
|
||||
|
||||
ShipmentJob shipment4 = ShipmentJob.Builder.newInstance("shipment4")
|
||||
ShipmentJob shipment4 = new ShipmentJob.Builder("shipment4")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("jsp9").setIndex(10).build())
|
||||
.setPickupServiceTime(300)
|
||||
.addPickupTimeWindow(45000, 48600)
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ public class OpenRoutesTest {
|
|||
VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setLatestArrival(11.)
|
||||
.setType(type).setReturnToDepot(false).setStartLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(0, 0)).build()).build();
|
||||
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("s").setPickupLocation(TestUtils.loc(Coordinate.newInstance(5, 0)))
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("s").setPickupLocation(TestUtils.loc(Coordinate.newInstance(5, 0)))
|
||||
.setDeliveryLocation(TestUtils.loc(Coordinate.newInstance(10, 0))).build();
|
||||
|
||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(shipment).addVehicle(vehicle).build();
|
||||
|
|
@ -104,7 +104,7 @@ public class OpenRoutesTest {
|
|||
.setType(type).setReturnToDepot(false).setStartLocation(Location.Builder.newInstance()
|
||||
.setCoordinate(Coordinate.newInstance(0, 0)).build()).build();
|
||||
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("s")
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("s")
|
||||
.setPickupLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(5, 0)).build())
|
||||
.setDeliveryLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(10, 0)).build())
|
||||
.build();
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ public class GeneralJobInsertionWithShipmentsTest {
|
|||
|
||||
@Test
|
||||
public void whenCalculatingInsertionCostsOfShipment_itShouldReturnCorrectCostValue() {
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,10").build()).setDeliveryLocation(Location.newInstance("10,0")).build();
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("s").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,10").build()).setDeliveryLocation(Location.newInstance("10,0")).build();
|
||||
VehicleRoutingProblem.Builder.newInstance().addJob(shipment).build();
|
||||
VehicleRoute route = VehicleRoute.emptyRoute();
|
||||
InsertionData iData = insertionCalculator.getInsertionData(route, shipment, vehicle, 0.0, null, Double.MAX_VALUE);
|
||||
|
|
@ -114,8 +114,8 @@ public class GeneralJobInsertionWithShipmentsTest {
|
|||
|
||||
@Test
|
||||
public void whenCalculatingInsertionIntoExistingRoute_itShouldReturnCorrectCosts() {
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,10").build()).setDeliveryLocation(Location.newInstance("10,0")).build();
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("s2").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("10,10").build()).setDeliveryLocation(Location.newInstance("0,0")).build();
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("s").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,10").build()).setDeliveryLocation(Location.newInstance("10,0")).build();
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("s2").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("10,10").build()).setDeliveryLocation(Location.newInstance("0,0")).build();
|
||||
|
||||
VehicleRoutingProblem.Builder.newInstance().addJob(shipment).addJob(shipment2).build();
|
||||
|
||||
|
|
@ -133,8 +133,8 @@ public class GeneralJobInsertionWithShipmentsTest {
|
|||
|
||||
@Test
|
||||
public void whenInsertingShipmentInRouteWithNotEnoughCapacity_itShouldReturnNoInsertion() {
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,10").build()).setDeliveryLocation(Location.newInstance("10,0")).build();
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("s2").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("10,10").build()).setDeliveryLocation(Location.newInstance("0,0")).build();
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("s").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,10").build()).setDeliveryLocation(Location.newInstance("10,0")).build();
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("s2").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("10,10").build()).setDeliveryLocation(Location.newInstance("0,0")).build();
|
||||
|
||||
VehicleRoutingProblem.Builder.newInstance().addJob(shipment).addJob(shipment2).build();
|
||||
|
||||
|
|
@ -153,9 +153,9 @@ public class GeneralJobInsertionWithShipmentsTest {
|
|||
|
||||
@Test
|
||||
public void whenInsertingThirdShipment_itShouldCalcCorrectVal() {
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,10").build()).setDeliveryLocation(Location.newInstance("10,0")).build();
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("s2").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("10,10").build()).setDeliveryLocation(Location.newInstance("0,0")).build();
|
||||
ShipmentJob shipment3 = ShipmentJob.Builder.newInstance("s3").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,0").build()).setDeliveryLocation(Location.newInstance("9,10")).build();
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("s").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,10").build()).setDeliveryLocation(Location.newInstance("10,0")).build();
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("s2").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("10,10").build()).setDeliveryLocation(Location.newInstance("0,0")).build();
|
||||
ShipmentJob shipment3 = new ShipmentJob.Builder("s3").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,0").build()).setDeliveryLocation(Location.newInstance("9,10")).build();
|
||||
|
||||
VehicleRoutingProblem.Builder.newInstance().addJob(shipment).addJob(shipment2).addJob(shipment3).build();
|
||||
|
||||
|
|
@ -176,9 +176,9 @@ public class GeneralJobInsertionWithShipmentsTest {
|
|||
|
||||
@Test
|
||||
public void whenInsertingThirdShipment_itShouldCalcCorrectVal2() {
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,10").build()).setDeliveryLocation(Location.newInstance("10,0")).build();
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("s2").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("10,10").build()).setDeliveryLocation(Location.newInstance("0,0")).build();
|
||||
ShipmentJob shipment3 = ShipmentJob.Builder.newInstance("s3").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,0").build()).setDeliveryLocation(Location.newInstance("9,9")).build();
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("s").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,10").build()).setDeliveryLocation(Location.newInstance("10,0")).build();
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("s2").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("10,10").build()).setDeliveryLocation(Location.newInstance("0,0")).build();
|
||||
ShipmentJob shipment3 = new ShipmentJob.Builder("s3").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,0").build()).setDeliveryLocation(Location.newInstance("9,9")).build();
|
||||
|
||||
VehicleRoutingProblem.Builder.newInstance().addJob(shipment).addJob(shipment2).addJob(shipment3).build();
|
||||
|
||||
|
|
@ -198,9 +198,9 @@ public class GeneralJobInsertionWithShipmentsTest {
|
|||
|
||||
@Test
|
||||
public void whenInstertingShipmentWithLoadConstraintWhereCapIsNotSufficient_capConstraintsAreFulfilled() {
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,10").build()).setDeliveryLocation(Location.newInstance("10,0")).build();
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("s2").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("10,10").build()).setDeliveryLocation(Location.newInstance("0,0")).build();
|
||||
ShipmentJob shipment3 = ShipmentJob.Builder.newInstance("s3").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,0").build()).setDeliveryLocation(Location.newInstance("9,9")).build();
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("s").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,10").build()).setDeliveryLocation(Location.newInstance("10,0")).build();
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("s2").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("10,10").build()).setDeliveryLocation(Location.newInstance("0,0")).build();
|
||||
ShipmentJob shipment3 = new ShipmentJob.Builder("s3").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,0").build()).setDeliveryLocation(Location.newInstance("9,9")).build();
|
||||
|
||||
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
|
||||
VehicleRoutingProblem vrp = vrpBuilder.addJob(shipment).addJob(shipment2).addJob(shipment3).build();
|
||||
|
|
@ -228,8 +228,8 @@ public class GeneralJobInsertionWithShipmentsTest {
|
|||
|
||||
@Test
|
||||
public void whenInsertingServiceWhileNoCapIsAvailable_itMustReturnNoInsertionData() {
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,10").build()).setDeliveryLocation(Location.newInstance("0,0")).build();
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("s2").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("10,10").build()).setDeliveryLocation(Location.newInstance("0,0")).build();
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("s").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,10").build()).setDeliveryLocation(Location.newInstance("0,0")).build();
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("s2").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("10,10").build()).setDeliveryLocation(Location.newInstance("0,0")).build();
|
||||
|
||||
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
|
||||
VehicleRoutingProblem vrp = vrpBuilder.addJob(shipment).addJob(shipment2).build();
|
||||
|
|
|
|||
|
|
@ -304,12 +304,12 @@ public class RegretInsertionTest {
|
|||
|
||||
@Test
|
||||
public void shipment1ShouldBeAddedFirst() {
|
||||
ShipmentJob s1 = ShipmentJob.Builder.newInstance("s1")
|
||||
ShipmentJob s1 = new ShipmentJob.Builder("s1")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pick1").setCoordinate(Coordinate.newInstance(-1, 10)).build())
|
||||
.setDeliveryLocation(Location.Builder.newInstance().setId("del1").setCoordinate(Coordinate.newInstance(1, 10)).build())
|
||||
.build();
|
||||
|
||||
ShipmentJob s2 = ShipmentJob.Builder.newInstance("s2")
|
||||
ShipmentJob s2 = new ShipmentJob.Builder("s2")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pick2").setCoordinate(Coordinate.newInstance(-1, 20)).build())
|
||||
.setDeliveryLocation(Location.Builder.newInstance().setId("del2").setCoordinate(Coordinate.newInstance(1, 20)).build())
|
||||
.build();
|
||||
|
|
|
|||
|
|
@ -96,68 +96,68 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
@Test
|
||||
public void whenAddingServiceBetweenDiffStartAndEnd_costMustBeCorrect() {
|
||||
VehicleImpl v = VehicleImpl.Builder.newInstance("v")
|
||||
.setStartLocation(Location.newInstance(0, 0))
|
||||
.setEndLocation(Location.newInstance(20, 0))
|
||||
.build();
|
||||
ServiceJob s = ServiceJob.Builder.newInstance("s")
|
||||
.setLocation(Location.newInstance(10, 0))
|
||||
.build();
|
||||
.setStartLocation(Location.newInstance(0, 0))
|
||||
.setEndLocation(Location.newInstance(20, 0))
|
||||
.build();
|
||||
ServiceJob s = new ServiceJob.Builder("s")
|
||||
.setLocation(Location.newInstance(10, 0))
|
||||
.build();
|
||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance()
|
||||
.addVehicle(v)
|
||||
.addJob(s)
|
||||
.build();
|
||||
.addVehicle(v)
|
||||
.addJob(s)
|
||||
.build();
|
||||
VehicleRoute route = VehicleRoute.emptyRoute();
|
||||
JobInsertionContext jobInsertionContext =
|
||||
new JobInsertionContext(route, s, v, null, 0);
|
||||
new JobInsertionContext(route, s, v, null, 0);
|
||||
LocalActivityInsertionCostsCalculator localActivityInsertionCostsCalculator =
|
||||
new LocalActivityInsertionCostsCalculator(
|
||||
vrp.getTransportCosts(),
|
||||
vrp.getActivityCosts(),
|
||||
new StateManager(vrp));
|
||||
new LocalActivityInsertionCostsCalculator(
|
||||
vrp.getTransportCosts(),
|
||||
vrp.getActivityCosts(),
|
||||
new StateManager(vrp));
|
||||
double cost = localActivityInsertionCostsCalculator.getCosts(
|
||||
jobInsertionContext,
|
||||
new Start(v.getStartLocation(),0,Double.MAX_VALUE),
|
||||
new End(v.getEndLocation(),0,Double.MAX_VALUE),
|
||||
vrp.getActivities(s).get(0),
|
||||
0);
|
||||
jobInsertionContext,
|
||||
new Start(v.getStartLocation(),0,Double.MAX_VALUE),
|
||||
new End(v.getEndLocation(),0,Double.MAX_VALUE),
|
||||
vrp.getActivities(s).get(0),
|
||||
0);
|
||||
assertEquals(20., cost, Math.ulp(20.));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenAddingShipmentBetweenDiffStartAndEnd_costMustBeCorrect() {
|
||||
VehicleImpl v = VehicleImpl.Builder.newInstance("v")
|
||||
.setStartLocation(Location.newInstance(0, 0))
|
||||
.setEndLocation(Location.newInstance(20, 0))
|
||||
.build();
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("p")
|
||||
.setPickupLocation(Location.newInstance(10, 0))
|
||||
.setDeliveryLocation(Location.newInstance(10, 7.5))
|
||||
.build();
|
||||
.setStartLocation(Location.newInstance(0, 0))
|
||||
.setEndLocation(Location.newInstance(20, 0))
|
||||
.build();
|
||||
ShipmentJob s = new ShipmentJob.Builder("p")
|
||||
.setPickupLocation(Location.newInstance(10, 0))
|
||||
.setDeliveryLocation(Location.newInstance(10, 7.5))
|
||||
.build();
|
||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance()
|
||||
.addVehicle(v)
|
||||
.addJob(s)
|
||||
.build();
|
||||
.addVehicle(v)
|
||||
.addJob(s)
|
||||
.build();
|
||||
VehicleRoute route = VehicleRoute.emptyRoute();
|
||||
JobInsertionContext jobInsertionContext =
|
||||
new JobInsertionContext(route, s, v, null, 0);
|
||||
new JobInsertionContext(route, s, v, null, 0);
|
||||
LocalActivityInsertionCostsCalculator localActivityInsertionCostsCalculator =
|
||||
new LocalActivityInsertionCostsCalculator(
|
||||
vrp.getTransportCosts(),
|
||||
vrp.getActivityCosts(),
|
||||
new StateManager(vrp));
|
||||
new LocalActivityInsertionCostsCalculator(
|
||||
vrp.getTransportCosts(),
|
||||
vrp.getActivityCosts(),
|
||||
new StateManager(vrp));
|
||||
double cost = localActivityInsertionCostsCalculator.getCosts(
|
||||
jobInsertionContext,
|
||||
new Start(v.getStartLocation(),0,Double.MAX_VALUE),
|
||||
new End(v.getEndLocation(),0,Double.MAX_VALUE),
|
||||
vrp.getActivities(s).get(0),
|
||||
0);
|
||||
jobInsertionContext,
|
||||
new Start(v.getStartLocation(),0,Double.MAX_VALUE),
|
||||
new End(v.getEndLocation(),0,Double.MAX_VALUE),
|
||||
vrp.getActivities(s).get(0),
|
||||
0);
|
||||
assertEquals(20., cost, Math.ulp(20.));
|
||||
cost = localActivityInsertionCostsCalculator.getCosts(
|
||||
jobInsertionContext,
|
||||
vrp.getActivities(s).get(0),
|
||||
new End(v.getEndLocation(),0,Double.MAX_VALUE),
|
||||
vrp.getActivities(s).get(1),
|
||||
0);
|
||||
jobInsertionContext,
|
||||
vrp.getActivities(s).get(0),
|
||||
new End(v.getEndLocation(),0,Double.MAX_VALUE),
|
||||
vrp.getActivities(s).get(1),
|
||||
0);
|
||||
assertEquals(10, cost, Math.ulp(10.));
|
||||
}
|
||||
|
||||
|
|
@ -255,11 +255,11 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
double c = calc.getCosts(context, prevAct, nextAct, newAct, 10);
|
||||
assertEquals(50., c, 0.01);
|
||||
|
||||
/*
|
||||
/*
|
||||
new: dist = 90 & wait = 0
|
||||
old: dist = 30 & wait = 10
|
||||
c = new - old = 90 - 40 = 50
|
||||
*/
|
||||
*/
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -270,7 +270,7 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
|
||||
ServiceJob newS = new ServiceJob.Builder("new").setServiceTime(10).setLocation(Location.newInstance(10, 0)).build();
|
||||
ServiceJob nextS = new ServiceJob.Builder("next").setLocation(Location.newInstance(30, 0))
|
||||
.setTimeWindow(TimeWindow.newInstance(40, 50)).build();
|
||||
.setTimeWindow(TimeWindow.newInstance(40, 50)).build();
|
||||
|
||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(newS).addJob(nextS).addVehicle(v).build();
|
||||
|
||||
|
|
@ -297,7 +297,7 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
|
||||
ServiceJob newS = new ServiceJob.Builder("new").setServiceTime(10).setLocation(Location.newInstance(10, 0)).build();
|
||||
ServiceJob nextS = new ServiceJob.Builder("next").setLocation(Location.newInstance(30, 0))
|
||||
.setTimeWindow(TimeWindow.newInstance(140, 150)).build();
|
||||
.setTimeWindow(TimeWindow.newInstance(140, 150)).build();
|
||||
|
||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addJob(newS).addJob(nextS).addVehicle(v2).build();
|
||||
|
||||
|
|
@ -402,7 +402,7 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("t").setCostPerWaitingTime(1.).build();
|
||||
|
||||
VehicleImpl v = VehicleImpl.Builder.newInstance("v").setType(type).setStartLocation(Location.newInstance(0, 0)).build();
|
||||
// VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setHasVariableDepartureTime(true).setType(type).setStartLocation(Location.newInstance(0,0)).build();
|
||||
// VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setHasVariableDepartureTime(true).setType(type).setStartLocation(Location.newInstance(0,0)).build();
|
||||
|
||||
ServiceJob prevS = new ServiceJob.Builder("prev").setLocation(Location.newInstance(10, 0)).build();
|
||||
ServiceJob newS = new ServiceJob.Builder("new").setServiceTime(10).setTimeWindow(TimeWindow.newInstance(100, 120)).setLocation(Location.newInstance(20, 0)).build();
|
||||
|
|
@ -441,7 +441,7 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("t").setCostPerWaitingTime(1.).build();
|
||||
|
||||
VehicleImpl v = VehicleImpl.Builder.newInstance("v").setType(type).setStartLocation(Location.newInstance(0, 0)).build();
|
||||
// VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setHasVariableDepartureTime(true).setType(type).setStartLocation(Location.newInstance(0,0)).build();
|
||||
// VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setHasVariableDepartureTime(true).setType(type).setStartLocation(Location.newInstance(0,0)).build();
|
||||
|
||||
ServiceJob prevS = new ServiceJob.Builder("prev").setLocation(Location.newInstance(10, 0)).build();
|
||||
ServiceJob newS = new ServiceJob.Builder("new").setServiceTime(10).setTimeWindow(TimeWindow.newInstance(100, 120)).setLocation(Location.newInstance(20, 0)).build();
|
||||
|
|
@ -451,7 +451,7 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
ServiceJob afterAfterNextS = new ServiceJob.Builder("afterAfterNext").setLocation(Location.newInstance(40, 0)).setTimeWindow(TimeWindow.newInstance(100, 500)).build();
|
||||
|
||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addVehicle(v).addJob(prevS).addJob(newS).addJob(nextS)
|
||||
.addJob(afterNextS).addJob(afterAfterNextS).build();
|
||||
.addJob(afterNextS).addJob(afterAfterNextS).build();
|
||||
|
||||
TourActivity prevAct = vrp.getActivities(prevS).get(0);
|
||||
TourActivity newAct = vrp.getActivities(newS).get(0);
|
||||
|
|
@ -485,7 +485,7 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
//new: 80 - 10 - 30 - 20 = 20
|
||||
/*
|
||||
w(new) + w(next) - w_old(next) - min{start_delay(next),future_waiting}
|
||||
*/
|
||||
*/
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -493,7 +493,7 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("t").setCostPerWaitingTime(1.).build();
|
||||
|
||||
VehicleImpl v = VehicleImpl.Builder.newInstance("v").setType(type).setStartLocation(Location.newInstance(0, 0)).build();
|
||||
// VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setHasVariableDepartureTime(true).setType(type).setStartLocation(Location.newInstance(0,0)).build();
|
||||
// VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setHasVariableDepartureTime(true).setType(type).setStartLocation(Location.newInstance(0,0)).build();
|
||||
|
||||
ServiceJob prevS = new ServiceJob.Builder("prev").setLocation(Location.newInstance(10, 0)).build();
|
||||
ServiceJob newS = new ServiceJob.Builder("new").setServiceTime(10).setTimeWindow(TimeWindow.newInstance(100, 120)).setLocation(Location.newInstance(20, 0)).build();
|
||||
|
|
@ -503,7 +503,7 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
ServiceJob afterAfterNextS = new ServiceJob.Builder("afterAfterNext").setLocation(Location.newInstance(50, 0)).setTimeWindow(TimeWindow.newInstance(100, 500)).build();
|
||||
|
||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addVehicle(v).addJob(prevS).addJob(newS).addJob(nextS)
|
||||
.addJob(afterNextS).addJob(afterAfterNextS).build();
|
||||
.addJob(afterNextS).addJob(afterAfterNextS).build();
|
||||
|
||||
TourActivity prevAct = vrp.getActivities(prevS).get(0);
|
||||
TourActivity newAct = vrp.getActivities(newS).get(0);
|
||||
|
|
@ -534,13 +534,13 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
//ref: 10 + 30 + 10 = 50
|
||||
//new: 50 - 50 = 0
|
||||
|
||||
/*
|
||||
/*
|
||||
activity start time delay at next act = start-time-old - start-time-new is always bigger than subsequent waiting time savings
|
||||
*/
|
||||
*/
|
||||
/*
|
||||
old = 10 + 30 + 10 = 50
|
||||
new = 80 + 0 - 10 - min{80,40} = 30
|
||||
*/
|
||||
*/
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -548,7 +548,7 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("t").setCostPerWaitingTime(1.).build();
|
||||
|
||||
VehicleImpl v = VehicleImpl.Builder.newInstance("v").setType(type).setStartLocation(Location.newInstance(0, 0)).build();
|
||||
// VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setHasVariableDepartureTime(true).setType(type).setStartLocation(Location.newInstance(0,0)).build();
|
||||
// VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setHasVariableDepartureTime(true).setType(type).setStartLocation(Location.newInstance(0,0)).build();
|
||||
|
||||
ServiceJob prevS = new ServiceJob.Builder("prev").setLocation(Location.newInstance(10, 0)).build();
|
||||
ServiceJob newS = new ServiceJob.Builder("new").setServiceTime(10).setTimeWindow(TimeWindow.newInstance(100, 120)).setLocation(Location.newInstance(20, 0)).build();
|
||||
|
|
@ -558,7 +558,7 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
ServiceJob afterAfterNextS = new ServiceJob.Builder("afterAfterNext").setLocation(Location.newInstance(50, 0)).setTimeWindow(TimeWindow.newInstance(100, 500)).build();
|
||||
|
||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addVehicle(v).addJob(prevS).addJob(newS).addJob(nextS)
|
||||
.addJob(afterNextS).addJob(afterAfterNextS).build();
|
||||
.addJob(afterNextS).addJob(afterAfterNextS).build();
|
||||
|
||||
TourActivity prevAct = vrp.getActivities(prevS).get(0);
|
||||
TourActivity newAct = vrp.getActivities(newS).get(0);
|
||||
|
|
@ -587,15 +587,15 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
calc.setSolutionCompletenessRatio(1.);
|
||||
double c = calc.getCosts(context, prevAct, nextAct, newAct, 10);
|
||||
assertEquals(30., c, 0.01);
|
||||
/*
|
||||
/*
|
||||
activity start time delay at next act = start-time-old - start-time-new is always bigger than subsequent waiting time savings
|
||||
*/
|
||||
/*
|
||||
*/
|
||||
/*
|
||||
old = 10 + 30 + 10 = 50
|
||||
new = 80
|
||||
new - old = 80 - 40 = 40
|
||||
|
||||
*/
|
||||
*/
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -603,7 +603,7 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
VehicleTypeImpl type = VehicleTypeImpl.Builder.newInstance("t").setCostPerWaitingTime(1.).build();
|
||||
|
||||
VehicleImpl v = VehicleImpl.Builder.newInstance("v").setType(type).setStartLocation(Location.newInstance(0, 0)).build();
|
||||
// VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setHasVariableDepartureTime(true).setType(type).setStartLocation(Location.newInstance(0,0)).build();
|
||||
// VehicleImpl v2 = VehicleImpl.Builder.newInstance("v2").setHasVariableDepartureTime(true).setType(type).setStartLocation(Location.newInstance(0,0)).build();
|
||||
|
||||
ServiceJob prevS = new ServiceJob.Builder("prev").setLocation(Location.newInstance(10, 0)).build();
|
||||
ServiceJob newS = new ServiceJob.Builder("new").setServiceTime(10).setTimeWindow(TimeWindow.newInstance(50, 70)).setLocation(Location.newInstance(20, 0)).build();
|
||||
|
|
@ -613,7 +613,7 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
ServiceJob afterAfterNextS = new ServiceJob.Builder("afterAfterNext").setLocation(Location.newInstance(50, 0)).setTimeWindow(TimeWindow.newInstance(100, 500)).build();
|
||||
|
||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().addVehicle(v).addJob(prevS).addJob(newS).addJob(nextS)
|
||||
.addJob(afterNextS).addJob(afterAfterNextS).build();
|
||||
.addJob(afterNextS).addJob(afterAfterNextS).build();
|
||||
|
||||
TourActivity prevAct = vrp.getActivities(prevS).get(0);
|
||||
|
||||
|
|
@ -644,13 +644,13 @@ public class TestLocalActivityInsertionCostsCalculator {
|
|||
calc.setSolutionCompletenessRatio(1.);
|
||||
double c = calc.getCosts(context, prevAct, nextAct, newAct, 10);
|
||||
assertEquals(-10., c, 0.01);
|
||||
/*
|
||||
/*
|
||||
activity start time delay at next act = start-time-old - start-time-new is always bigger than subsequent waiting time savings
|
||||
*/
|
||||
/*
|
||||
*/
|
||||
/*
|
||||
old = 10 + 40 = 50
|
||||
new = 30 + 10 = 40
|
||||
*/
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -63,11 +63,11 @@ public class TestMixedServiceAndShipmentsProblemOnRouteLevel {
|
|||
* 4: (15,13)->(14,11)
|
||||
*/
|
||||
|
||||
ShipmentJob shipment1 = ShipmentJob.Builder.newInstance("1").addSizeDimension(0, 1).setPickupLocation(TestUtils.loc(Coordinate.newInstance(5, 7))).setDeliveryLocation(TestUtils.loc(Coordinate.newInstance(6, 9))).build();
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("2").addSizeDimension(0, 1).setPickupLocation(TestUtils.loc(Coordinate.newInstance(5, 13))).setDeliveryLocation(TestUtils.loc(Coordinate.newInstance(6, 11))).build();
|
||||
ShipmentJob shipment1 = new ShipmentJob.Builder("1").addSizeDimension(0, 1).setPickupLocation(TestUtils.loc(Coordinate.newInstance(5, 7))).setDeliveryLocation(TestUtils.loc(Coordinate.newInstance(6, 9))).build();
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("2").addSizeDimension(0, 1).setPickupLocation(TestUtils.loc(Coordinate.newInstance(5, 13))).setDeliveryLocation(TestUtils.loc(Coordinate.newInstance(6, 11))).build();
|
||||
|
||||
ShipmentJob shipment3 = ShipmentJob.Builder.newInstance("3").addSizeDimension(0, 1).setPickupLocation(TestUtils.loc(Coordinate.newInstance(15, 7))).setDeliveryLocation(TestUtils.loc(Coordinate.newInstance(14, 9))).build();
|
||||
ShipmentJob shipment4 = ShipmentJob.Builder.newInstance("4").addSizeDimension(0, 1).setPickupLocation(TestUtils.loc(Coordinate.newInstance(15, 13))).setDeliveryLocation(TestUtils.loc(Coordinate.newInstance(14, 11))).build();
|
||||
ShipmentJob shipment3 = new ShipmentJob.Builder("3").addSizeDimension(0, 1).setPickupLocation(TestUtils.loc(Coordinate.newInstance(15, 7))).setDeliveryLocation(TestUtils.loc(Coordinate.newInstance(14, 9))).build();
|
||||
ShipmentJob shipment4 = new ShipmentJob.Builder("4").addSizeDimension(0, 1).setPickupLocation(TestUtils.loc(Coordinate.newInstance(15, 13))).setDeliveryLocation(TestUtils.loc(Coordinate.newInstance(14, 11))).build();
|
||||
|
||||
/*
|
||||
* build deliveries, (implicitly picked up in the depot)
|
||||
|
|
|
|||
|
|
@ -114,7 +114,7 @@ public class RuinWorstTest {
|
|||
.setLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(3, 1)).build()).build();
|
||||
ServiceJob s3 = new ServiceJob.Builder("s3")
|
||||
.setLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(10, 10)).build()).build();
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("ship1")
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("ship1")
|
||||
.setPickupLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(2, 2)).build())
|
||||
.setDeliveryLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(9, 9)).build()).build();
|
||||
VehicleImpl v = VehicleImpl.Builder.newInstance("v")
|
||||
|
|
@ -147,7 +147,7 @@ public class RuinWorstTest {
|
|||
.setLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(3, 1)).build()).build();
|
||||
ServiceJob s3 = new ServiceJob.Builder("s3")
|
||||
.setLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(10, 10)).build()).build();
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("ship1")
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("ship1")
|
||||
.setPickupLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(3, 1)).build())
|
||||
.setDeliveryLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(10, 10.1)).build()).build();
|
||||
VehicleImpl v = VehicleImpl.Builder.newInstance("v")
|
||||
|
|
@ -184,7 +184,7 @@ public class RuinWorstTest {
|
|||
.setLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(3, 1)).build()).build();
|
||||
ServiceJob s3 = new ServiceJob.Builder("s3")
|
||||
.setLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(10, 10)).build()).build();
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("ship1")
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("ship1")
|
||||
.setPickupLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(3, 1)).build())
|
||||
.setDeliveryLocation(Location.Builder.newInstance().setCoordinate(Coordinate.newInstance(10, 10.1)).build()).build();
|
||||
VehicleImpl v = VehicleImpl.Builder.newInstance("v")
|
||||
|
|
|
|||
|
|
@ -57,15 +57,15 @@ public class AverageJobDistanceTest {
|
|||
|
||||
@Test
|
||||
public void distanceOfTwoEqualShipmentsShouldBeSmallerThanAnyOtherDistance() {
|
||||
ShipmentJob s1 = ShipmentJob.Builder.newInstance("s1").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,0").build()).setDeliveryLocation(Location.newInstance("10,10")).build();
|
||||
ShipmentJob s2 = ShipmentJob.Builder.newInstance("s2").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,0").build()).setDeliveryLocation(Location.newInstance("10,10")).build();
|
||||
ShipmentJob s1 = new ShipmentJob.Builder("s1").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,0").build()).setDeliveryLocation(Location.newInstance("10,10")).build();
|
||||
ShipmentJob s2 = new ShipmentJob.Builder("s2").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,0").build()).setDeliveryLocation(Location.newInstance("10,10")).build();
|
||||
|
||||
double dist = new DefaultJobDistance(routingCosts).getDistance(s1, s2);
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
for (int j = 0; j < 10; j++) {
|
||||
ShipmentJob other1 = ShipmentJob.Builder.newInstance("s1").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,0").build()).setDeliveryLocation(Location.newInstance(i + "," + j)).build();
|
||||
ShipmentJob other2 = ShipmentJob.Builder.newInstance("s2").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,0").build()).setDeliveryLocation(Location.newInstance("10,10")).build();
|
||||
ShipmentJob other1 = new ShipmentJob.Builder("s1").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,0").build()).setDeliveryLocation(Location.newInstance(i + "," + j)).build();
|
||||
ShipmentJob other2 = new ShipmentJob.Builder("s2").addSizeDimension(0, 1).setPickupLocation(Location.Builder.newInstance().setId("0,0").build()).setDeliveryLocation(Location.newInstance("10,10")).build();
|
||||
double dist2 = new DefaultJobDistance(routingCosts).getDistance(other1, other2);
|
||||
assertTrue(dist <= dist2 + dist2 * 0.001);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ public class HardPickupAndDeliveryShipmentActivityConstraintTest {
|
|||
public void doBefore() {
|
||||
s1 = new ServiceJob.Builder("s1").setLocation(Location.newInstance("loc")).build();
|
||||
s2 = new ServiceJob.Builder("s2").setLocation(Location.newInstance("loc")).build();
|
||||
shipment = ShipmentJob.Builder.newInstance("shipment").setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).setDeliveryLocation(Location.newInstance("delLoc")).addSizeDimension(0, 1).build();
|
||||
shipment = new ShipmentJob.Builder("shipment").setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).setDeliveryLocation(Location.newInstance("delLoc")).addSizeDimension(0, 1).build();
|
||||
|
||||
|
||||
// when(vehicle.getCapacity()).thenReturn(2);
|
||||
|
|
|
|||
|
|
@ -74,8 +74,8 @@ public class LoadStateTest {
|
|||
final VehicleRoutingProblem pdProblem = pdProblemBuilder.build();
|
||||
|
||||
final VehicleRoutingProblem.Builder shipmentProblemBuilder = VehicleRoutingProblem.Builder.newInstance();
|
||||
ShipmentJob shipment1 = ShipmentJob.Builder.newInstance("s1").addSizeDimension(0, 10).setPickupLocation(Location.Builder.newInstance().setId("pick").build()).setDeliveryLocation(Location.newInstance("del")).build();
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("s2").addSizeDimension(0, 5).setPickupLocation(Location.Builder.newInstance().setId("pick").build()).setDeliveryLocation(Location.newInstance("del")).build();
|
||||
ShipmentJob shipment1 = new ShipmentJob.Builder("s1").addSizeDimension(0, 10).setPickupLocation(Location.Builder.newInstance().setId("pick").build()).setDeliveryLocation(Location.newInstance("del")).build();
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("s2").addSizeDimension(0, 5).setPickupLocation(Location.Builder.newInstance().setId("pick").build()).setDeliveryLocation(Location.newInstance("del")).build();
|
||||
shipmentProblemBuilder.addJob(shipment1).addJob(shipment2).build();
|
||||
final VehicleRoutingProblem shipmentProblem = shipmentProblemBuilder.build();
|
||||
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ public class SolutionAnalyserTest {
|
|||
.addSizeDimension(0, 3)
|
||||
.addRequiredSkill("skill2").addRequiredSkill("skill1")
|
||||
.build();
|
||||
ShipmentJob shipment1 = ShipmentJob.Builder.newInstance("ship1")
|
||||
ShipmentJob shipment1 = new ShipmentJob.Builder("ship1")
|
||||
.setPickupLocation(TestUtils.loc(Coordinate.newInstance(-15, 2)))
|
||||
.setDeliveryLocation(TestUtils.loc(Coordinate.newInstance(-16, 5)))
|
||||
.addSizeDimension(0, 10)
|
||||
|
|
@ -96,7 +96,7 @@ public class SolutionAnalyserTest {
|
|||
|
||||
ServiceJob s4 = new ServiceJob.Builder("s4").setLocation(TestUtils.loc(Coordinate.newInstance(10, 10))).addSizeDimension(0, 3).build();
|
||||
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("ship2").setPickupLocation(TestUtils.loc(Coordinate.newInstance(15, 2)))
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("ship2").setPickupLocation(TestUtils.loc(Coordinate.newInstance(15, 2)))
|
||||
.setPickupServiceTime(20.).setDeliveryServiceTime(20.)
|
||||
.setDeliveryLocation(TestUtils.loc(Coordinate.newInstance(16, 5))).addSizeDimension(0, 10).build();
|
||||
|
||||
|
|
@ -136,7 +136,7 @@ public class SolutionAnalyserTest {
|
|||
.setTimeWindow(TimeWindow.newInstance(10, 20))
|
||||
.addSizeDimension(0, 20)
|
||||
.build();
|
||||
ShipmentJob shipment1 = ShipmentJob.Builder.newInstance("ship1").setPickupLocation(TestUtils.loc(Coordinate.newInstance(-15, 2)))
|
||||
ShipmentJob shipment1 = new ShipmentJob.Builder("ship1").setPickupLocation(TestUtils.loc(Coordinate.newInstance(-15, 2)))
|
||||
.setDeliveryLocation(TestUtils.loc(Coordinate.newInstance(-16, 5)))
|
||||
.addSizeDimension(0, 15)
|
||||
.setPickupServiceTime(20.).setDeliveryServiceTime(20.)
|
||||
|
|
@ -152,7 +152,7 @@ public class SolutionAnalyserTest {
|
|||
.addSizeDimension(0, 20)
|
||||
.setTimeWindow(TimeWindow.newInstance(10, 20))
|
||||
.build();
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("ship2").setPickupLocation(TestUtils.loc(Coordinate.newInstance(15, 2)))
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("ship2").setPickupLocation(TestUtils.loc(Coordinate.newInstance(15, 2)))
|
||||
.setPickupServiceTime(20.).setDeliveryServiceTime(20.)
|
||||
.setDeliveryLocation(TestUtils.loc(Coordinate.newInstance(16, 5)))
|
||||
.setPickupTimeWindow(TimeWindow.newInstance(10, 20)).setDeliveryTimeWindow(TimeWindow.newInstance(10, 20))
|
||||
|
|
|
|||
|
|
@ -123,8 +123,8 @@ public class VehicleRoutingProblemTest {
|
|||
|
||||
@Test
|
||||
public void whenShipmentsAreAdded_vrpShouldContainThem() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 10).setPickupLocation(Location.Builder.newInstance().setId("foofoo").build()).setDeliveryLocation(Location.newInstance("foo")).build();
|
||||
ShipmentJob s2 = ShipmentJob.Builder.newInstance("s2").addSizeDimension(0, 100).setPickupLocation(Location.Builder.newInstance().setId("foofoo").build()).setDeliveryLocation(Location.newInstance("foo")).build();
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").addSizeDimension(0, 10).setPickupLocation(Location.Builder.newInstance().setId("foofoo").build()).setDeliveryLocation(Location.newInstance("foo")).build();
|
||||
ShipmentJob s2 = new ShipmentJob.Builder("s2").addSizeDimension(0, 100).setPickupLocation(Location.Builder.newInstance().setId("foofoo").build()).setDeliveryLocation(Location.newInstance("foo")).build();
|
||||
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
|
||||
vrpBuilder.addJob(s);
|
||||
vrpBuilder.addJob(s2);
|
||||
|
|
@ -441,7 +441,7 @@ public class VehicleRoutingProblemTest {
|
|||
@Test
|
||||
public void whenAddingTwoJobs_theyShouldHaveProperIndeces() {
|
||||
ServiceJob service = new ServiceJob.Builder("myService").setLocation(Location.newInstance("loc")).build();
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("shipment").setPickupLocation(Location.Builder.newInstance().setId("pick").build())
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("shipment").setPickupLocation(Location.Builder.newInstance().setId("pick").build())
|
||||
.setDeliveryLocation(Location.newInstance("del")).build();
|
||||
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
|
||||
vrpBuilder.addJob(service);
|
||||
|
|
@ -466,9 +466,9 @@ public class VehicleRoutingProblemTest {
|
|||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenAddingTwoShipmentsWithTheSameId_itShouldThrowException() {
|
||||
ShipmentJob shipment1 = ShipmentJob.Builder.newInstance("shipment").setPickupLocation(Location.Builder.newInstance().setId("pick").build())
|
||||
ShipmentJob shipment1 = new ShipmentJob.Builder("shipment").setPickupLocation(Location.Builder.newInstance().setId("pick").build())
|
||||
.setDeliveryLocation(Location.newInstance("del")).build();
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("shipment").setPickupLocation(Location.Builder.newInstance().setId("pick").build())
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("shipment").setPickupLocation(Location.Builder.newInstance().setId("pick").build())
|
||||
.setDeliveryLocation(Location.newInstance("del")).build();
|
||||
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
|
||||
vrpBuilder.addJob(shipment1);
|
||||
|
|
|
|||
|
|
@ -36,8 +36,8 @@ import com.graphhopper.jsprit.core.problem.CopyJobActivityFactory;
|
|||
import com.graphhopper.jsprit.core.problem.Location;
|
||||
import com.graphhopper.jsprit.core.problem.SizeDimension;
|
||||
import com.graphhopper.jsprit.core.problem.VehicleRoutingProblem;
|
||||
import com.graphhopper.jsprit.core.problem.job.DeliveryJob;
|
||||
import com.graphhopper.jsprit.core.problem.job.CustomJob;
|
||||
import com.graphhopper.jsprit.core.problem.job.DeliveryJob;
|
||||
import com.graphhopper.jsprit.core.problem.job.Job;
|
||||
import com.graphhopper.jsprit.core.problem.job.PickupJob;
|
||||
import com.graphhopper.jsprit.core.problem.job.ServiceJob;
|
||||
|
|
@ -86,8 +86,8 @@ public class LoadConstraintTest {
|
|||
final VehicleRoutingProblem pdProblem = pdProblemBuilder.build();
|
||||
|
||||
final VehicleRoutingProblem.Builder shipmentProblemBuilder = VehicleRoutingProblem.Builder.newInstance();
|
||||
ShipmentJob shipment1 = ShipmentJob.Builder.newInstance("s1").addSizeDimension(0, 10).setPickupLocation(Location.Builder.newInstance().setId("pick").build()).setDeliveryLocation(Location.newInstance("del")).build();
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("s2").addSizeDimension(0, 5).setPickupLocation(Location.Builder.newInstance().setId("pick").build()).setDeliveryLocation(Location.newInstance("del")).build();
|
||||
ShipmentJob shipment1 = new ShipmentJob.Builder("s1").addSizeDimension(0, 10).setPickupLocation(Location.Builder.newInstance().setId("pick").build()).setDeliveryLocation(Location.newInstance("del")).build();
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("s2").addSizeDimension(0, 5).setPickupLocation(Location.Builder.newInstance().setId("pick").build()).setDeliveryLocation(Location.newInstance("del")).build();
|
||||
shipmentProblemBuilder.addJob(shipment1).addJob(shipment2).build();
|
||||
final VehicleRoutingProblem shipmentProblem = shipmentProblemBuilder.build();
|
||||
|
||||
|
|
@ -112,10 +112,10 @@ public class LoadConstraintTest {
|
|||
@Test
|
||||
public void whenCustomJob_itShouldNotIgnoreCapacity() {
|
||||
CustomJob cj = CustomJob.Builder.newInstance("job")
|
||||
.addPickup(Location.newInstance(10, 0), SizeDimension.Builder.newInstance().addDimension(0, 1).build())
|
||||
.addPickup(Location.newInstance(5, 0), SizeDimension.Builder.newInstance().addDimension(0, 2).build())
|
||||
.addPickup(Location.newInstance(20, 0), SizeDimension.Builder.newInstance().addDimension(0, 1).build())
|
||||
.build();
|
||||
.addPickup(Location.newInstance(10, 0), SizeDimension.Builder.newInstance().addDimension(0, 1).build())
|
||||
.addPickup(Location.newInstance(5, 0), SizeDimension.Builder.newInstance().addDimension(0, 2).build())
|
||||
.addPickup(Location.newInstance(20, 0), SizeDimension.Builder.newInstance().addDimension(0, 1).build())
|
||||
.build();
|
||||
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").addCapacityDimension(0, 2).build();
|
||||
Vehicle v = VehicleImpl.Builder.newInstance("v").setType(type).setStartLocation(Location.newInstance(0, 0)).build();
|
||||
VehicleRoutingProblem.Builder.newInstance().addJob(cj).addVehicle(v).build();
|
||||
|
|
@ -133,8 +133,8 @@ public class LoadConstraintTest {
|
|||
@Test
|
||||
public void whenServiceRouteAndNewServiceFitsIn_itShouldReturnFulfilled() {
|
||||
stateManager.informInsertionStarts(Arrays.asList(serviceRoute), Collections.emptyList());
|
||||
ServiceJob s = ServiceJob.Builder.newInstance("service").setLocation(Location.newInstance(0))
|
||||
.addSizeDimension(0, 5).build();
|
||||
ServiceJob s = new ServiceJob.Builder("service").setLocation(Location.newInstance(0))
|
||||
.addSizeDimension(0, 5).build();
|
||||
ServiceLoadRouteLevelConstraint loadConstraint = new ServiceLoadRouteLevelConstraint(stateManager);
|
||||
|
||||
JobInsertionContext context = new JobInsertionContext(serviceRoute, s, serviceRoute.getVehicle(), null, 0.);
|
||||
|
|
@ -250,7 +250,8 @@ public class LoadConstraintTest {
|
|||
@Test
|
||||
public void whenServiceRouteAndNewServiceDoesNotFitIn_itShouldReturnFulfilled() {
|
||||
stateManager.informInsertionStarts(Arrays.asList(serviceRoute), Collections.emptyList());
|
||||
ServiceJob s = ServiceJob.Builder.newInstance("service").setLocation(Location.newInstance(0)).addSizeDimension(0, 6).build();
|
||||
ServiceJob s = new ServiceJob.Builder("service").setLocation(Location.newInstance(0)).addSizeDimension(0, 6)
|
||||
.build();
|
||||
ServiceLoadRouteLevelConstraint loadConstraint = new ServiceLoadRouteLevelConstraint(stateManager);
|
||||
JobInsertionContext context = new JobInsertionContext(serviceRoute, s, serviceRoute.getVehicle(), null, 0.);
|
||||
assertFalse(loadConstraint.fulfilled(context));
|
||||
|
|
@ -264,7 +265,8 @@ public class LoadConstraintTest {
|
|||
@Test
|
||||
public void whenPDRouteRouteAndNewPickupFitsIn_itShouldReturnFulfilled() {
|
||||
stateManager.informInsertionStarts(Arrays.asList(pickupDeliveryRoute), Collections.<Job>emptyList());
|
||||
PickupJob s = PickupJob.Builder.newInstance("pick").addSizeDimension(0, 10).setLocation(Location.newInstance(0)).build();
|
||||
PickupJob s = new PickupJob.Builder("pick").addSizeDimension(0, 10).setLocation(Location.newInstance(0))
|
||||
.build();
|
||||
ServiceLoadRouteLevelConstraint loadConstraint = new ServiceLoadRouteLevelConstraint(stateManager);
|
||||
JobInsertionContext context = new JobInsertionContext(pickupDeliveryRoute, s, serviceRoute.getVehicle(), null, 0.);
|
||||
assertTrue(loadConstraint.fulfilled(context));
|
||||
|
|
@ -273,7 +275,8 @@ public class LoadConstraintTest {
|
|||
@Test
|
||||
public void whenPDRouteRouteAndNewDeliveryFitsIn_itShouldReturnFulfilled() {
|
||||
stateManager.informInsertionStarts(Arrays.asList(pickupDeliveryRoute), Collections.emptyList());
|
||||
DeliveryJob s = DeliveryJob.Builder.newInstance("del").addSizeDimension(0, 15).setLocation(Location.newInstance(0)).build();
|
||||
DeliveryJob s = new DeliveryJob.Builder("del").addSizeDimension(0, 15).setLocation(Location.newInstance(0))
|
||||
.build();
|
||||
ServiceLoadRouteLevelConstraint loadConstraint = new ServiceLoadRouteLevelConstraint(stateManager);
|
||||
JobInsertionContext context = new JobInsertionContext(pickupDeliveryRoute, s, serviceRoute.getVehicle(), null, 0.);
|
||||
assertTrue(loadConstraint.fulfilled(context));
|
||||
|
|
@ -282,9 +285,9 @@ public class LoadConstraintTest {
|
|||
@Test
|
||||
public void whenPDRouteRouteAndNewPickupDoesNotFitIn_itShouldReturnNotFulfilled() {
|
||||
stateManager.informInsertionStarts(Arrays.asList(pickupDeliveryRoute), Collections.<Job>emptyList());
|
||||
PickupJob s = PickupJob.Builder.newInstance("pickup")
|
||||
.setLocation(Location.newInstance(0))
|
||||
.addSizeDimension(0, 11).build();
|
||||
PickupJob s = new PickupJob.Builder("pickup")
|
||||
.setLocation(Location.newInstance(0))
|
||||
.addSizeDimension(0, 11).build();
|
||||
ServiceLoadRouteLevelConstraint loadConstraint = new ServiceLoadRouteLevelConstraint(stateManager);
|
||||
JobInsertionContext context = new JobInsertionContext(pickupDeliveryRoute, s, serviceRoute.getVehicle(), null, 0.);
|
||||
assertFalse(loadConstraint.fulfilled(context));
|
||||
|
|
@ -293,8 +296,8 @@ public class LoadConstraintTest {
|
|||
@Test
|
||||
public void whenPDRouteRouteAndNewDeliveryDoesNotFitIn_itShouldReturnNotFulfilled() {
|
||||
stateManager.informInsertionStarts(Arrays.asList(pickupDeliveryRoute), Collections.<Job>emptyList());
|
||||
DeliveryJob s = DeliveryJob.Builder.newInstance("del").setLocation(Location.newInstance(0))
|
||||
.addSizeDimension(0, 16).build();
|
||||
DeliveryJob s = new DeliveryJob.Builder("del").setLocation(Location.newInstance(0))
|
||||
.addSizeDimension(0, 16).build();
|
||||
ServiceLoadRouteLevelConstraint loadConstraint = new ServiceLoadRouteLevelConstraint(stateManager);
|
||||
|
||||
JobInsertionContext context = new JobInsertionContext(pickupDeliveryRoute, s, serviceRoute.getVehicle(), null, 0.);
|
||||
|
|
@ -314,7 +317,7 @@ public class LoadConstraintTest {
|
|||
|
||||
JobInsertionContext context = new JobInsertionContext(pickupDeliveryRoute, s, pickupDeliveryRoute.getVehicle(), null, 0.);
|
||||
PickupActivity newAct = new PickupActivity(s, "pick", null, 0, newSize,
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, pickupDeliveryRoute.getStart(), newAct, pickupDeliveryRoute.getActivities().get(0), 0.);
|
||||
|
||||
|
|
@ -331,7 +334,7 @@ public class LoadConstraintTest {
|
|||
|
||||
JobInsertionContext context = new JobInsertionContext(pickupDeliveryRoute, s, pickupDeliveryRoute.getVehicle(), null, 0.);
|
||||
PickupActivity newAct = new PickupActivity(s, "pick", null, 0, newSize,
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, pickupDeliveryRoute.getActivities().get(0), newAct, pickupDeliveryRoute.getActivities().get(1), 0.);
|
||||
|
||||
|
|
@ -348,7 +351,7 @@ public class LoadConstraintTest {
|
|||
|
||||
JobInsertionContext context = new JobInsertionContext(pickupDeliveryRoute, s, pickupDeliveryRoute.getVehicle(), null, 0.);
|
||||
PickupActivity newAct = new PickupActivity(s, "pick", null, 0, newSize,
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, pickupDeliveryRoute.getActivities().get(1), newAct, pickupDeliveryRoute.getEnd(), 0.);
|
||||
|
||||
|
|
@ -368,7 +371,7 @@ public class LoadConstraintTest {
|
|||
|
||||
JobInsertionContext context = new JobInsertionContext(pickupDeliveryRoute, s, pickupDeliveryRoute.getVehicle(), null, 0.);
|
||||
PickupActivity newAct = new PickupActivity(s, "pick", null, 0, newSize,
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, pickupDeliveryRoute.getStart(), newAct, pickupDeliveryRoute.getActivities().get(0), 0.);
|
||||
|
||||
|
|
@ -385,7 +388,7 @@ public class LoadConstraintTest {
|
|||
|
||||
JobInsertionContext context = new JobInsertionContext(pickupDeliveryRoute, s, pickupDeliveryRoute.getVehicle(), null, 0.);
|
||||
PickupActivity newAct = new PickupActivity(s, "pick", null, 0, newSize,
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, pickupDeliveryRoute.getActivities().get(0), newAct, pickupDeliveryRoute.getActivities().get(1), 0.);
|
||||
|
||||
|
|
@ -402,7 +405,7 @@ public class LoadConstraintTest {
|
|||
|
||||
JobInsertionContext context = new JobInsertionContext(pickupDeliveryRoute, s, pickupDeliveryRoute.getVehicle(), null, 0.);
|
||||
PickupActivity newAct = new PickupActivity(s, "pick", null, 0, newSize,
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, pickupDeliveryRoute.getActivities().get(1), newAct, pickupDeliveryRoute.getEnd(), 0.);
|
||||
|
||||
|
|
@ -423,8 +426,8 @@ public class LoadConstraintTest {
|
|||
|
||||
JobInsertionContext context = new JobInsertionContext(pickupDeliveryRoute, s, pickupDeliveryRoute.getVehicle(), null, 0.);
|
||||
DeliveryActivity newAct = new DeliveryActivity(s, "del", null, 0,
|
||||
newSize.invert(),
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
newSize.invert(),
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, pickupDeliveryRoute.getStart(), newAct, pickupDeliveryRoute.getActivities().get(0), 0.);
|
||||
|
||||
|
|
@ -441,8 +444,8 @@ public class LoadConstraintTest {
|
|||
|
||||
JobInsertionContext context = new JobInsertionContext(pickupDeliveryRoute, s, pickupDeliveryRoute.getVehicle(), null, 0.);
|
||||
DeliveryActivity newAct = new DeliveryActivity(s, "del", null, 0,
|
||||
newSize.invert(),
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
newSize.invert(),
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, pickupDeliveryRoute.getStart(), newAct, pickupDeliveryRoute.getActivities().get(0), 0.);
|
||||
|
||||
|
|
@ -459,8 +462,8 @@ public class LoadConstraintTest {
|
|||
|
||||
JobInsertionContext context = new JobInsertionContext(pickupDeliveryRoute, s, pickupDeliveryRoute.getVehicle(), null, 0.);
|
||||
DeliveryActivity newAct = new DeliveryActivity(s, "del", null, 0,
|
||||
newSize.invert(),
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
newSize.invert(),
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, pickupDeliveryRoute.getActivities().get(0), newAct, pickupDeliveryRoute.getActivities().get(1), 0.);
|
||||
|
||||
|
|
@ -477,8 +480,8 @@ public class LoadConstraintTest {
|
|||
|
||||
JobInsertionContext context = new JobInsertionContext(pickupDeliveryRoute, s, pickupDeliveryRoute.getVehicle(), null, 0.);
|
||||
DeliveryActivity newAct = new DeliveryActivity(s, "del", null, 0,
|
||||
newSize.invert(),
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
newSize.invert(),
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, pickupDeliveryRoute.getActivities().get(0), newAct, pickupDeliveryRoute.getActivities().get(1), 0.);
|
||||
|
||||
|
|
@ -495,8 +498,8 @@ public class LoadConstraintTest {
|
|||
|
||||
JobInsertionContext context = new JobInsertionContext(pickupDeliveryRoute, s, pickupDeliveryRoute.getVehicle(), null, 0.);
|
||||
DeliveryActivity newAct = new DeliveryActivity(s, "del", null, 0,
|
||||
newSize.invert(),
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
newSize.invert(),
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, pickupDeliveryRoute.getActivities().get(1), newAct, pickupDeliveryRoute.getEnd(), 0.);
|
||||
|
||||
|
|
@ -513,8 +516,8 @@ public class LoadConstraintTest {
|
|||
|
||||
JobInsertionContext context = new JobInsertionContext(pickupDeliveryRoute, s, pickupDeliveryRoute.getVehicle(), null, 0.);
|
||||
DeliveryActivity newAct = new DeliveryActivity(s, "del", null, 0,
|
||||
newSize.invert(),
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
newSize.invert(),
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, pickupDeliveryRoute.getActivities().get(1), newAct, pickupDeliveryRoute.getEnd(), 0.);
|
||||
|
||||
|
|
@ -613,7 +616,8 @@ public class LoadConstraintTest {
|
|||
@Test
|
||||
public void whenPDRouteAndNewServiceDoesNotFitIn_itShouldReturnFulfilled() {
|
||||
stateManager.informInsertionStarts(Arrays.asList(serviceRoute), Collections.<Job>emptyList());
|
||||
ServiceJob s = ServiceJob.Builder.newInstance("service").addSizeDimension(0, 6).setLocation(Location.newInstance(0)).build();
|
||||
ServiceJob s = new ServiceJob.Builder("service").addSizeDimension(0, 6).setLocation(Location.newInstance(0))
|
||||
.build();
|
||||
ServiceLoadRouteLevelConstraint loadConstraint = new ServiceLoadRouteLevelConstraint(stateManager);
|
||||
JobInsertionContext context = new JobInsertionContext(serviceRoute, s, serviceRoute.getVehicle(), null, 0.);
|
||||
assertFalse(loadConstraint.fulfilled(context));
|
||||
|
|
@ -637,7 +641,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
PickupActivity newAct = new PickupActivity(s, "pick", null, 0, newSize,
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getStart(), newAct, shipmentRoute.getActivities().get(0), 0.);
|
||||
|
||||
|
|
@ -655,7 +659,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
PickupActivity newAct = new PickupActivity(s, "pick", null, 0, newSize,
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getStart(), newAct, shipmentRoute.getActivities().get(0), 0.);
|
||||
|
||||
|
|
@ -673,7 +677,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
PickupActivity newAct = new PickupActivity(s, "pick", null, 0, newSize,
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getActivities().get(0), newAct, shipmentRoute.getActivities().get(1), 0.);
|
||||
|
||||
|
|
@ -691,7 +695,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
PickupActivity newAct = new PickupActivity(s, "pick", null, 0, newSize,
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getActivities().get(0), newAct, shipmentRoute.getActivities().get(1), 0.);
|
||||
|
||||
|
|
@ -709,7 +713,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
PickupActivity newAct = new PickupActivity(s, "pick", null, 0, newSize,
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getActivities().get(1), newAct, shipmentRoute.getActivities().get(2), 0.);
|
||||
|
||||
|
|
@ -727,7 +731,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
PickupActivity newAct = new PickupActivity(s, "pick", null, 0, newSize,
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getActivities().get(1), newAct, shipmentRoute.getActivities().get(2), 0.);
|
||||
|
||||
|
|
@ -745,7 +749,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
PickupActivity newAct = new PickupActivity(s, "pick", null, 0, newSize,
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getActivities().get(2), newAct, shipmentRoute.getActivities().get(3), 0.);
|
||||
|
||||
|
|
@ -763,7 +767,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
PickupActivity newAct = new PickupActivity(s, "pick", null, 0, newSize,
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getActivities().get(2), newAct, shipmentRoute.getActivities().get(3), 0.);
|
||||
|
||||
|
|
@ -781,7 +785,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
PickupActivity newAct = new PickupActivity(s, "pick", null, 0, newSize,
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getActivities().get(3), newAct, shipmentRoute.getEnd(), 0.);
|
||||
|
||||
|
|
@ -799,7 +803,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
PickupActivity newAct = new PickupActivity(s, "pick", null, 0, newSize,
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getActivities().get(3), newAct, shipmentRoute.getEnd(), 0.);
|
||||
|
||||
|
|
@ -821,7 +825,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
DeliveryActivity newAct = new DeliveryActivity(s, "pick", null, 0,
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getStart(), newAct, shipmentRoute.getActivities().get(0), 0.);
|
||||
|
||||
|
|
@ -839,7 +843,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
DeliveryActivity newAct = new DeliveryActivity(s, "pick", null, 0,
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getStart(), newAct, shipmentRoute.getActivities().get(0), 0.);
|
||||
|
||||
|
|
@ -857,7 +861,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
DeliveryActivity newAct = new DeliveryActivity(s, "pick", null, 0,
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getActivities().get(0), newAct, shipmentRoute.getActivities().get(1), 0.);
|
||||
|
||||
|
|
@ -875,7 +879,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
DeliveryActivity newAct = new DeliveryActivity(s, "pick", null, 0,
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getActivities().get(0), newAct, shipmentRoute.getActivities().get(1), 0.);
|
||||
|
||||
|
|
@ -893,7 +897,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
DeliveryActivity newAct = new DeliveryActivity(s, "pick", null, 0,
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getActivities().get(1), newAct, shipmentRoute.getActivities().get(2), 0.);
|
||||
|
||||
|
|
@ -911,7 +915,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
DeliveryActivity newAct = new DeliveryActivity(s, "pick", null, 0,
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getActivities().get(1), newAct, shipmentRoute.getActivities().get(2), 0.);
|
||||
|
||||
|
|
@ -929,7 +933,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
DeliveryActivity newAct = new DeliveryActivity(s, "pick", null, 0,
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getActivities().get(2), newAct, shipmentRoute.getActivities().get(3), 0.);
|
||||
|
||||
|
|
@ -947,7 +951,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
DeliveryActivity newAct = new DeliveryActivity(s, "pick", null, 0,
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getActivities().get(2), newAct, shipmentRoute.getActivities().get(3), 0.);
|
||||
|
||||
|
|
@ -965,7 +969,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
DeliveryActivity newAct = new DeliveryActivity(s, "pick", null, 0,
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getActivities().get(3), newAct, shipmentRoute.getEnd(), 0.);
|
||||
|
||||
|
|
@ -982,7 +986,7 @@ pickup(s1) pickup(s2) delivery(s2) deliver(s1)
|
|||
JobInsertionContext context = new JobInsertionContext(shipmentRoute, s, shipmentRoute.getVehicle(), null, 0.);
|
||||
|
||||
DeliveryActivity newAct = new DeliveryActivity(s, "pick", null, 0,
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
newSize.invert(), TimeWindows.ANY_TIME.getTimeWindows());
|
||||
PickupAndDeliverShipmentLoadActivityLevelConstraint loadConstraint = new PickupAndDeliverShipmentLoadActivityLevelConstraint(stateManager);
|
||||
HardActivityConstraint.ConstraintsStatus status = loadConstraint.fulfilled(context, shipmentRoute.getActivities().get(3), newAct, shipmentRoute.getEnd(), 0.);
|
||||
|
||||
|
|
|
|||
|
|
@ -80,8 +80,8 @@ public class ServiceLoadRouteLevelConstraintTest {
|
|||
|
||||
@Test
|
||||
public void whenLoadPlusDeliverySizeDoesNotExceedsVehicleCapacity_itShouldReturnTrue() {
|
||||
DeliveryJob service = DeliveryJob.Builder.newInstance("del").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 1).addDimension(1, 1).addDimension(2, 1).build()).build();
|
||||
DeliveryJob service = new DeliveryJob.Builder("del").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 1).addDimension(1, 1).addDimension(2, 1).build()).build();
|
||||
JobInsertionContext iContext = mock(JobInsertionContext.class);
|
||||
when(iContext.getJob()).thenReturn(service);
|
||||
when(iContext.getRoute()).thenReturn(route);
|
||||
|
|
@ -92,8 +92,8 @@ public class ServiceLoadRouteLevelConstraintTest {
|
|||
|
||||
@Test
|
||||
public void whenLoadPlusDeliverySizeExceedsVehicleCapacityInAllDimension_itShouldReturnFalse() {
|
||||
DeliveryJob service = DeliveryJob.Builder.newInstance("d").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 3).addDimension(1, 3).addDimension(2, 3).build()).build();
|
||||
DeliveryJob service = new DeliveryJob.Builder("d").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 3).addDimension(1, 3).addDimension(2, 3).build()).build();
|
||||
JobInsertionContext iContext = mock(JobInsertionContext.class);
|
||||
when(iContext.getJob()).thenReturn(service);
|
||||
when(iContext.getRoute()).thenReturn(route);
|
||||
|
|
@ -104,8 +104,8 @@ public class ServiceLoadRouteLevelConstraintTest {
|
|||
|
||||
@Test
|
||||
public void whenLoadPlusDeliverySizeExceedsVehicleCapacityInOneDimension_itShouldReturnFalse() {
|
||||
DeliveryJob service = DeliveryJob.Builder.newInstance("d").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 1).addDimension(1, 1).addDimension(2, 3).build()).build();
|
||||
DeliveryJob service = new DeliveryJob.Builder("d").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 1).addDimension(1, 1).addDimension(2, 3).build()).build();
|
||||
|
||||
JobInsertionContext iContext = mock(JobInsertionContext.class);
|
||||
when(iContext.getJob()).thenReturn(service);
|
||||
|
|
@ -117,8 +117,8 @@ public class ServiceLoadRouteLevelConstraintTest {
|
|||
|
||||
@Test
|
||||
public void whenLoadPlusDeliverySizeJustFitIntoVehicle_itShouldReturnTrue() {
|
||||
DeliveryJob service = DeliveryJob.Builder.newInstance("d").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 2).addDimension(1, 2).addDimension(2, 2).build()).build();
|
||||
DeliveryJob service = new DeliveryJob.Builder("d").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 2).addDimension(1, 2).addDimension(2, 2).build()).build();
|
||||
JobInsertionContext iContext = mock(JobInsertionContext.class);
|
||||
when(iContext.getJob()).thenReturn(service);
|
||||
when(iContext.getRoute()).thenReturn(route);
|
||||
|
|
@ -129,8 +129,8 @@ public class ServiceLoadRouteLevelConstraintTest {
|
|||
|
||||
@Test
|
||||
public void whenLoadPlusPickupSizeDoesNotExceedsVehicleCapacity_itShouldReturnTrue() {
|
||||
PickupJob service = PickupJob.Builder.newInstance("p").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 1).addDimension(1, 1).addDimension(2, 1).build()).build();
|
||||
PickupJob service = new PickupJob.Builder("p").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 1).addDimension(1, 1).addDimension(2, 1).build()).build();
|
||||
|
||||
JobInsertionContext iContext = mock(JobInsertionContext.class);
|
||||
when(iContext.getJob()).thenReturn(service);
|
||||
|
|
@ -142,8 +142,8 @@ public class ServiceLoadRouteLevelConstraintTest {
|
|||
|
||||
@Test
|
||||
public void whenLoadPlusPickupSizeExceedsVehicleCapacityInAllDimension_itShouldReturnFalse() {
|
||||
PickupJob service = PickupJob.Builder.newInstance("p").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 3).addDimension(1, 3).addDimension(2, 3).build()).build();
|
||||
PickupJob service = new PickupJob.Builder("p").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 3).addDimension(1, 3).addDimension(2, 3).build()).build();
|
||||
JobInsertionContext iContext = mock(JobInsertionContext.class);
|
||||
when(iContext.getJob()).thenReturn(service);
|
||||
when(iContext.getRoute()).thenReturn(route);
|
||||
|
|
@ -154,8 +154,8 @@ public class ServiceLoadRouteLevelConstraintTest {
|
|||
|
||||
@Test
|
||||
public void whenLoadPlusPickupSizeExceedsVehicleCapacityInOneDimension_itShouldReturnFalse() {
|
||||
PickupJob service = PickupJob.Builder.newInstance("p").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 1).addDimension(1, 1).addDimension(2, 3).build()).build();
|
||||
PickupJob service = new PickupJob.Builder("p").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 1).addDimension(1, 1).addDimension(2, 3).build()).build();
|
||||
|
||||
JobInsertionContext iContext = mock(JobInsertionContext.class);
|
||||
when(iContext.getJob()).thenReturn(service);
|
||||
|
|
@ -167,8 +167,8 @@ public class ServiceLoadRouteLevelConstraintTest {
|
|||
|
||||
@Test
|
||||
public void whenLoadPlusPickupSizeJustFitIntoVehicle_itShouldReturnTrue() {
|
||||
PickupJob service = PickupJob.Builder.newInstance("p").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 2).addDimension(1, 2).addDimension(2, 2).build()).build();
|
||||
PickupJob service = new PickupJob.Builder("p").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 2).addDimension(1, 2).addDimension(2, 2).build()).build();
|
||||
|
||||
JobInsertionContext iContext = mock(JobInsertionContext.class);
|
||||
when(iContext.getJob()).thenReturn(service);
|
||||
|
|
@ -180,8 +180,8 @@ public class ServiceLoadRouteLevelConstraintTest {
|
|||
|
||||
@Test
|
||||
public void whenLoadPlusServiceSizeDoesNotExceedsVehicleCapacity_itShouldReturnTrue() {
|
||||
ServiceJob service = ServiceJob.Builder.newInstance("s").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 1).addDimension(1, 1).addDimension(2, 1).build()).build();
|
||||
ServiceJob service = new ServiceJob.Builder("s").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 1).addDimension(1, 1).addDimension(2, 1).build()).build();
|
||||
JobInsertionContext iContext = mock(JobInsertionContext.class);
|
||||
when(iContext.getJob()).thenReturn(service);
|
||||
when(iContext.getRoute()).thenReturn(route);
|
||||
|
|
@ -196,8 +196,8 @@ public class ServiceLoadRouteLevelConstraintTest {
|
|||
|
||||
@Test
|
||||
public void whenLoadPlusServiceSizeExceedsVehicleCapacityInAllDimension_itShouldReturnFalse() {
|
||||
ServiceJob service = ServiceJob.Builder.newInstance("s").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 3).addDimension(1, 3).addDimension(2, 3).build()).build();
|
||||
ServiceJob service = new ServiceJob.Builder("s").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 3).addDimension(1, 3).addDimension(2, 3).build()).build();
|
||||
|
||||
JobInsertionContext iContext = mock(JobInsertionContext.class);
|
||||
when(iContext.getJob()).thenReturn(service);
|
||||
|
|
@ -209,8 +209,8 @@ public class ServiceLoadRouteLevelConstraintTest {
|
|||
|
||||
@Test
|
||||
public void whenLoadPlusServiceSizeExceedsVehicleCapacityInOneDimension_itShouldReturnFalse() {
|
||||
ServiceJob service = ServiceJob.Builder.newInstance("s").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 1).addDimension(1, 1).addDimension(2, 3).build()).build();
|
||||
ServiceJob service = new ServiceJob.Builder("s").setLocation(l())
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 1).addDimension(1, 1).addDimension(2, 3).build()).build();
|
||||
JobInsertionContext iContext = mock(JobInsertionContext.class);
|
||||
when(iContext.getJob()).thenReturn(service);
|
||||
when(iContext.getRoute()).thenReturn(route);
|
||||
|
|
@ -221,8 +221,8 @@ public class ServiceLoadRouteLevelConstraintTest {
|
|||
|
||||
@Test
|
||||
public void whenLoadPlusServiceSizeJustFitIntoVehicle_itShouldReturnTrue() {
|
||||
ServiceJob service = ServiceJob.Builder.newInstance("s").setLocation(Location.newInstance(0))
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 2).addDimension(1, 2).addDimension(2, 2).build()).build();
|
||||
ServiceJob service = new ServiceJob.Builder("s").setLocation(Location.newInstance(0))
|
||||
.addAllSizeDimensions(SizeDimension.Builder.newInstance().addDimension(0, 2).addDimension(1, 2).addDimension(2, 2).build()).build();
|
||||
|
||||
JobInsertionContext iContext = mock(JobInsertionContext.class);
|
||||
when(iContext.getJob()).thenReturn(service);
|
||||
|
|
|
|||
|
|
@ -19,11 +19,19 @@
|
|||
package com.graphhopper.jsprit.core.problem.constraint;
|
||||
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.graphhopper.jsprit.core.algorithm.state.StateId;
|
||||
import com.graphhopper.jsprit.core.algorithm.state.StateManager;
|
||||
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.DeliveryJob;
|
||||
import com.graphhopper.jsprit.core.problem.job.Job;
|
||||
import com.graphhopper.jsprit.core.problem.job.PickupJob;
|
||||
|
|
@ -38,14 +46,6 @@ import com.graphhopper.jsprit.core.problem.vehicle.Vehicle;
|
|||
import com.graphhopper.jsprit.core.problem.vehicle.VehicleImpl;
|
||||
import com.graphhopper.jsprit.core.util.ManhattanCosts;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
/**
|
||||
* Created by schroeder on 18/05/16.
|
||||
*/
|
||||
|
|
@ -81,32 +81,27 @@ public class VehicleDependentTraveledDistanceTest {
|
|||
maxDistanceMap.put(vehicle,200d);
|
||||
maxDistanceMap.put(vehicle2,200d);
|
||||
|
||||
d1 = DeliveryJob.Builder.newInstance("d1").setLocation(Location.newInstance(10,10)).build();
|
||||
d2 = DeliveryJob.Builder.newInstance("d2").setLocation(Location.newInstance(20,15)).build();
|
||||
pickup = PickupJob.Builder.newInstance("pickup").setLocation(Location.newInstance(50,50)).build();
|
||||
s1 = ShipmentJob.Builder.newInstance("s1").setPickupLocation(Location.newInstance(35,30))
|
||||
.setDeliveryLocation(Location.newInstance(20,25)).build();
|
||||
d1 = new DeliveryJob.Builder("d1").setLocation(Location.newInstance(10, 10)).build();
|
||||
d2 = new DeliveryJob.Builder("d2").setLocation(Location.newInstance(20, 15)).build();
|
||||
pickup = new PickupJob.Builder("pickup").setLocation(Location.newInstance(50, 50)).build();
|
||||
s1 = new ShipmentJob.Builder("s1").setPickupLocation(Location.newInstance(35,30))
|
||||
.setDeliveryLocation(Location.newInstance(20,25)).build();
|
||||
|
||||
newDelivery = DeliveryJob.Builder.newInstance("new").setLocation(Location.newInstance(-10,10)).build();
|
||||
newDelivery = new DeliveryJob.Builder("new").setLocation(Location.newInstance(-10, 10)).build();
|
||||
|
||||
vrp = VehicleRoutingProblem.Builder.newInstance()
|
||||
.setRoutingCost(new ManhattanCosts()).addVehicle(vehicle).addVehicle(vehicle2)
|
||||
.addJob(d1).addJob(d2).addJob(s1).addJob(pickup).addJob(newDelivery).build();
|
||||
.setRoutingCost(new ManhattanCosts()).addVehicle(vehicle).addVehicle(vehicle2)
|
||||
.addJob(d1).addJob(d2).addJob(s1).addJob(pickup).addJob(newDelivery).build();
|
||||
|
||||
route = VehicleRoute.Builder.newInstance(vehicle).setJobActivityFactory(vrp.getJobActivityFactory())
|
||||
.addDelivery(d1).addDelivery(d2).addPickup(s1).addPickup(pickup).addDelivery(s1).build();
|
||||
.addDelivery(d1).addDelivery(d2).addPickup(s1).addPickup(pickup).addDelivery(s1).build();
|
||||
|
||||
stateManager = new StateManager(vrp);
|
||||
|
||||
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));
|
||||
new com.graphhopper.jsprit.core.algorithm.state.VehicleDependentTraveledDistance((from, to, departureTime, vehicle) -> new ManhattanCosts().getDistance(from,to,departureTime,vehicle),stateManager,traveledDistanceId,Arrays.asList(vehicle,vehicle2));
|
||||
|
||||
stateManager.addStateUpdater(traveledDistance);
|
||||
stateManager.informInsertionStarts(Arrays.asList(route), Collections.<Job>emptyList());
|
||||
|
|
@ -115,24 +110,19 @@ public class VehicleDependentTraveledDistanceTest {
|
|||
@Test
|
||||
public void whenEndLocationIsSet_constraintShouldWork(){
|
||||
VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v").setStartLocation(Location.newInstance(0,0))
|
||||
.setEndLocation(Location.newInstance(10,0)).build();
|
||||
PickupJob pickup = PickupJob.Builder.newInstance("pickup").setLocation(Location.newInstance(10,0)).build();
|
||||
.setEndLocation(Location.newInstance(10,0)).build();
|
||||
PickupJob pickup = new PickupJob.Builder("pickup").setLocation(Location.newInstance(10, 0)).build();
|
||||
vrp = VehicleRoutingProblem.Builder.newInstance().addVehicle(vehicle).addJob(pickup).build();
|
||||
route = VehicleRoute.emptyRoute();
|
||||
maxDistanceMap = new HashMap<>();
|
||||
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, (from, to, departureTime, vehicle1) -> vrp.getTransportCosts().getTransportTime(from,to,departureTime, null, vehicle1),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),
|
||||
new End(vehicle.getEndLocation(),0,Double.MAX_VALUE),0).equals(HardActivityConstraint.ConstraintsStatus.NOT_FULFILLED));
|
||||
new Start(vehicle.getStartLocation(),0,Double.MAX_VALUE),vrp.getActivities(pickup).get(0),
|
||||
new End(vehicle.getEndLocation(),0,Double.MAX_VALUE),0).equals(HardActivityConstraint.ConstraintsStatus.NOT_FULFILLED));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -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, (from, to, departureTime, vehicle) -> vrp.getTransportCosts().getTransportTime(from,to,departureTime, null, vehicle),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, (from, to, departureTime, vehicle) -> vrp.getTransportCosts().getTransportTime(from,to,departureTime, null, vehicle),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
|
||||
|
|
@ -264,17 +244,17 @@ vehicle2 (max distance): 180.0
|
|||
|
||||
@Test
|
||||
public void whenAddingDeliverShipment_constraintShouldWork() {
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("s")
|
||||
.setPickupLocation(Location.newInstance(0, 3))
|
||||
.setDeliveryLocation(Location.newInstance(4, 0))
|
||||
.build();
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("s")
|
||||
.setPickupLocation(Location.newInstance(0, 3))
|
||||
.setDeliveryLocation(Location.newInstance(4, 0))
|
||||
.build();
|
||||
VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v")
|
||||
.setStartLocation(Location.newInstance(0, 0))
|
||||
.build();
|
||||
.setStartLocation(Location.newInstance(0, 0))
|
||||
.build();
|
||||
final VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance()
|
||||
.addJob(shipment)
|
||||
.addVehicle(vehicle)
|
||||
.build();
|
||||
.addJob(shipment)
|
||||
.addVehicle(vehicle)
|
||||
.build();
|
||||
VehicleRoute route = VehicleRoute.emptyRoute();
|
||||
JobInsertionContext context = new JobInsertionContext(route, shipment, vehicle, null, 0);
|
||||
context.getAssociatedActivities().add(vrp.getActivities(shipment).get(0));
|
||||
|
|
@ -284,17 +264,12 @@ 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, (from, to, departureTime, vehicle1) -> vrp.getTransportCosts().getTransportTime(from,to,departureTime, null, vehicle1),maxDistanceMap);
|
||||
Assert.assertTrue(maxDistanceConstraint.fulfilled(context,
|
||||
new Start(vehicle.getStartLocation(), 0, Double.MAX_VALUE),
|
||||
vrp.getActivities(shipment).get(0),
|
||||
new End(vehicle.getEndLocation(), 0, Double.MAX_VALUE),
|
||||
0).equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
|
||||
new Start(vehicle.getStartLocation(), 0, Double.MAX_VALUE),
|
||||
vrp.getActivities(shipment).get(0),
|
||||
new End(vehicle.getEndLocation(), 0, Double.MAX_VALUE),
|
||||
0).equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
|
||||
|
||||
ActivityContext pickupContext = new ActivityContext();
|
||||
pickupContext.setArrivalTime(3);
|
||||
|
|
@ -302,26 +277,26 @@ vehicle2 (max distance): 180.0
|
|||
pickupContext.setInsertionIndex(0);
|
||||
context.setRelatedActivityContext(pickupContext);
|
||||
Assert.assertTrue(maxDistanceConstraint.fulfilled(context,
|
||||
vrp.getActivities(shipment).get(0),
|
||||
vrp.getActivities(shipment).get(1),
|
||||
new End(vehicle.getEndLocation(), 0, Double.MAX_VALUE),
|
||||
3).equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
|
||||
vrp.getActivities(shipment).get(0),
|
||||
vrp.getActivities(shipment).get(1),
|
||||
new End(vehicle.getEndLocation(), 0, Double.MAX_VALUE),
|
||||
3).equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenAddingDeliverShipmentWithVehDiffStartEndLocs_constraintShouldWork() {
|
||||
ShipmentJob shipment = ShipmentJob.Builder.newInstance("s")
|
||||
.setPickupLocation(Location.newInstance(0, 1))
|
||||
.setDeliveryLocation(Location.newInstance(4, 1))
|
||||
.build();
|
||||
ShipmentJob shipment = new ShipmentJob.Builder("s")
|
||||
.setPickupLocation(Location.newInstance(0, 1))
|
||||
.setDeliveryLocation(Location.newInstance(4, 1))
|
||||
.build();
|
||||
VehicleImpl vehicle = VehicleImpl.Builder.newInstance("v")
|
||||
.setStartLocation(Location.newInstance(0, 0))
|
||||
.setEndLocation(Location.newInstance(0, 4))
|
||||
.build();
|
||||
.setStartLocation(Location.newInstance(0, 0))
|
||||
.setEndLocation(Location.newInstance(0, 4))
|
||||
.build();
|
||||
final VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance()
|
||||
.addJob(shipment)
|
||||
.addVehicle(vehicle)
|
||||
.build();
|
||||
.addJob(shipment)
|
||||
.addVehicle(vehicle)
|
||||
.build();
|
||||
VehicleRoute route = VehicleRoute.emptyRoute();
|
||||
JobInsertionContext context = new JobInsertionContext(route, shipment, vehicle, null, 0);
|
||||
context.getAssociatedActivities().add(vrp.getActivities(shipment).get(0));
|
||||
|
|
@ -331,17 +306,12 @@ 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, (from, to, departureTime, vehicle1) -> vrp.getTransportCosts().getTransportTime(from,to,departureTime, null, vehicle1),maxDistanceMap);
|
||||
Assert.assertTrue(maxDistanceConstraint.fulfilled(context,
|
||||
new Start(vehicle.getStartLocation(), 0, Double.MAX_VALUE),
|
||||
vrp.getActivities(shipment).get(0),
|
||||
new End(vehicle.getEndLocation(), 0, Double.MAX_VALUE),
|
||||
0).equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
|
||||
new Start(vehicle.getStartLocation(), 0, Double.MAX_VALUE),
|
||||
vrp.getActivities(shipment).get(0),
|
||||
new End(vehicle.getEndLocation(), 0, Double.MAX_VALUE),
|
||||
0).equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
|
||||
|
||||
ActivityContext pickupContext = new ActivityContext();
|
||||
pickupContext.setArrivalTime(1);
|
||||
|
|
@ -349,9 +319,9 @@ vehicle2 (max distance): 180.0
|
|||
pickupContext.setInsertionIndex(0);
|
||||
context.setRelatedActivityContext(pickupContext);
|
||||
Assert.assertTrue(maxDistanceConstraint.fulfilled(context,
|
||||
vrp.getActivities(shipment).get(0),
|
||||
vrp.getActivities(shipment).get(1),
|
||||
new End(vehicle.getEndLocation(), 0, Double.MAX_VALUE),
|
||||
1).equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
|
||||
vrp.getActivities(shipment).get(0),
|
||||
vrp.getActivities(shipment).get(1),
|
||||
new End(vehicle.getEndLocation(), 0, Double.MAX_VALUE),
|
||||
1).equals(HardActivityConstraint.ConstraintsStatus.FULFILLED));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,559 +0,0 @@
|
|||
/*
|
||||
* Licensed to GraphHopper GmbH under one or more contributor
|
||||
* license agreements. See the NOTICE file distributed with this work for
|
||||
* additional information regarding copyright ownership.
|
||||
*
|
||||
* GraphHopper GmbH licenses this file to you under the Apache License,
|
||||
* Version 2.0 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.graphhopper.jsprit.core.problem.job;
|
||||
|
||||
import static org.hamcrest.core.Is.is;
|
||||
import static org.hamcrest.core.IsCollectionContaining.hasItem;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.graphhopper.jsprit.core.algorithm.VehicleRoutingAlgorithm;
|
||||
import com.graphhopper.jsprit.core.algorithm.box.Jsprit;
|
||||
import com.graphhopper.jsprit.core.problem.Location;
|
||||
import com.graphhopper.jsprit.core.problem.SizeDimension;
|
||||
import com.graphhopper.jsprit.core.problem.VehicleRoutingProblem;
|
||||
import com.graphhopper.jsprit.core.problem.VehicleRoutingProblem.FleetSize;
|
||||
import com.graphhopper.jsprit.core.problem.solution.VehicleRoutingProblemSolution;
|
||||
import com.graphhopper.jsprit.core.problem.solution.route.activity.TimeWindow;
|
||||
import com.graphhopper.jsprit.core.problem.vehicle.Vehicle;
|
||||
import com.graphhopper.jsprit.core.problem.vehicle.VehicleImpl;
|
||||
import com.graphhopper.jsprit.core.problem.vehicle.VehicleType;
|
||||
import com.graphhopper.jsprit.core.problem.vehicle.VehicleTypeImpl;
|
||||
import com.graphhopper.jsprit.core.reporting.SolutionPrinter;
|
||||
import com.graphhopper.jsprit.core.util.Coordinate;
|
||||
import com.graphhopper.jsprit.core.util.Solutions;
|
||||
import com.graphhopper.jsprit.core.util.TestUtils;
|
||||
|
||||
public class ReturnedShipmentTest {
|
||||
|
||||
@Test
|
||||
public void whenTwoReturnedShipmentsHaveTheSameId_theyReferencesShouldBeUnEqual() {
|
||||
ReturnedShipment one = ReturnedShipment.Builder.newInstance("s").addSizeDimension(0, 10)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
setDeliveryLocation(TestUtils.loc("foofoo")).setPickupServiceTime(10).setDeliveryServiceTime(20).build();
|
||||
ReturnedShipment two = ReturnedShipment.Builder.newInstance("s").addSizeDimension(0, 10)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
setDeliveryLocation(TestUtils.loc("foofoo")).setPickupServiceTime(10).setDeliveryServiceTime(20).build();
|
||||
|
||||
assertTrue(one != two);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void sizeAtStartAndEndShouldBeCorrect() {
|
||||
ReturnedShipment one = ReturnedShipment.Builder.newInstance("s").addSizeDimension(0, 10)
|
||||
.addSizeDimension(1, 5)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
setDeliveryLocation(TestUtils.loc("foofoo")).setPickupServiceTime(10).setDeliveryServiceTime(20).build();
|
||||
SizeDimension cap = SizeDimension.Builder.newInstance().addDimension(0, 0).addDimension(1, 0).build();
|
||||
assertTrue(one.getSizeAtStart().equals(cap));
|
||||
assertTrue(one.getSizeAtEnd().equals(cap));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenTwoReturnedShipmentsHaveTheSameId_theyShouldBeEqual() {
|
||||
ReturnedShipment one = ReturnedShipment.Builder.newInstance("s").addSizeDimension(0, 10)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
setDeliveryLocation(TestUtils.loc("foofoo")).setPickupServiceTime(10).setDeliveryServiceTime(20).build();
|
||||
ReturnedShipment two = ReturnedShipment.Builder.newInstance("s").addSizeDimension(0, 10)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
setDeliveryLocation(TestUtils.loc("foofoo")).setPickupServiceTime(10).setDeliveryServiceTime(20).build();
|
||||
|
||||
assertTrue(one.equals(two));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenReturnedShipmentIsInstantiatedWithASizeOf10_theSizeShouldBe10() {
|
||||
ReturnedShipment one = ReturnedShipment.Builder.newInstance("s").addSizeDimension(0, 10)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
setDeliveryLocation(TestUtils.loc("foofoo")).setPickupServiceTime(10).setDeliveryServiceTime(20).build();
|
||||
assertEquals(10, one.getSize().get(0));
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenReturnedShipmentIsBuiltWithNegativeDemand_itShouldThrowException() {
|
||||
@SuppressWarnings("unused")
|
||||
ReturnedShipment one = ReturnedShipment.Builder.newInstance("s").addSizeDimension(0, -10)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").build())
|
||||
.setDeliveryLocation(TestUtils.loc("foofoo")).build();
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenReturnedShipmentIsBuiltWithNegativeDemand_itShouldThrowException_v2() {
|
||||
@SuppressWarnings("unused")
|
||||
ReturnedShipment one = ReturnedShipment.Builder.newInstance("s").addSizeDimension(0, -10)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").build())
|
||||
.setDeliveryLocation(TestUtils.loc("foofoo")).build();
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenIdIsNull_itShouldThrowException() {
|
||||
@SuppressWarnings("unused")
|
||||
ReturnedShipment one = ReturnedShipment.Builder.newInstance(null).addSizeDimension(0, 10)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").build())
|
||||
.setDeliveryLocation(TestUtils.loc("foofoo")).build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenCallingForANewBuilderInstance_itShouldReturnBuilderCorrectly() {
|
||||
ReturnedShipment.Builder builder = ReturnedShipment.Builder.newInstance("s");
|
||||
assertNotNull(builder);
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenNeitherPickupLocationIdNorPickupCoord_itThrowsException() {
|
||||
@SuppressWarnings("unused")
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).build();
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenNeitherDeliveryLocationIdNorDeliveryCoord_itThrowsException() {
|
||||
@SuppressWarnings("unused")
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenPickupLocationIdIsSet_itShouldBeDoneCorrectly() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc"))
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build())
|
||||
.build();
|
||||
assertEquals("pickLoc", s.getPickupActivity().getLocation().getId());
|
||||
assertEquals("pickLoc", s.getPickupActivity().getLocation().getId());
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenPickupLocationIsNull_itThrowsException() {
|
||||
@SuppressWarnings("unused")
|
||||
ReturnedShipment.Builder builder = ReturnedShipment.Builder.newInstance("s")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId(null).build());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenPickupCoordIsSet_itShouldBeDoneCorrectly() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").setCoordinate(Coordinate.newInstance(1, 2)).build()).build();
|
||||
assertEquals(1.0, s.getPickupActivity().getLocation().getCoordinate().getX(), 0.01);
|
||||
assertEquals(2.0, s.getPickupActivity().getLocation().getCoordinate().getY(), 0.01);
|
||||
assertEquals(1.0, s.getPickupActivity().getLocation().getCoordinate().getX(), 0.01);
|
||||
assertEquals(2.0, s.getPickupActivity().getLocation().getCoordinate().getY(), 0.01);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void whenDeliveryLocationIdIsSet_itShouldBeDoneCorrectly() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals("delLoc", s.getExchangeActivity().getLocation().getId());
|
||||
assertEquals("delLoc", s.getExchangeActivity().getLocation().getId());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void whenDeliveryCoordIsSet_itShouldBeDoneCorrectly() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc", Coordinate.newInstance(1, 2)))
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build())
|
||||
.build();
|
||||
assertEquals(1.0, s.getExchangeActivity().getLocation().getCoordinate().getX(), 0.01);
|
||||
assertEquals(2.0, s.getExchangeActivity().getLocation().getCoordinate().getY(), 0.01);
|
||||
assertEquals(1.0, s.getExchangeActivity().getLocation().getCoordinate().getX(), 0.01);
|
||||
assertEquals(2.0, s.getExchangeActivity().getLocation().getCoordinate().getY(), 0.01);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenPickupServiceTimeIsNotSet_itShouldBeZero() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(0.0, s.getPickupActivity().getOperationTime(), 0.01);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenDeliveryServiceTimeIsNotSet_itShouldBeZero() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(0.0, s.getExchangeActivity().getOperationTime(), 0.01);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenPickupServiceTimeIsSet_itShouldBeDoneCorrectly() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setPickupServiceTime(2.0)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(2.0, s.getPickupActivity().getOperationTime(), 0.01);
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenPickupServiceIsSmallerThanZero_itShouldThrowException() {
|
||||
@SuppressWarnings("unused")
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s").setPickupServiceTime(-2.0)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenDeliveryServiceTimeIsSet_itShouldBeDoneCorrectly() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s").setDeliveryServiceTime(2.0)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(2.0, s.getExchangeActivity().getOperationTime(), 0.01);
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenDeliveryServiceIsSmallerThanZero_itShouldThrowException() {
|
||||
@SuppressWarnings("unused")
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s").setDeliveryServiceTime(-2.0)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc"))
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenPickupTimeWindowIsNotSet_itShouldBeTheDefaultOne() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc"))
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build())
|
||||
.build();
|
||||
assertEquals(0.0, s.getPickupActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
assertEquals(Double.MAX_VALUE,
|
||||
s.getPickupActivity().getSingleTimeWindow().getEnd(), 0.01);
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenPickupTimeWindowIsNull_itShouldThrowException() {
|
||||
@SuppressWarnings("unused")
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s").setPickupTimeWindow(null)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc"))
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenPickupTimeWindowIsSet_itShouldBeDoneCorrectly() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setPickupTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(1.0, s.getPickupActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
assertEquals(2.0, s.getPickupActivity().getSingleTimeWindow().getEnd(), 0.01);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenDeliveryTimeWindowIsNotSet_itShouldBeTheDefaultOne() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc"))
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build())
|
||||
.build();
|
||||
assertEquals(0.0, s.getExchangeActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
assertEquals(Double.MAX_VALUE,
|
||||
s.getExchangeActivity().getSingleTimeWindow().getEnd(), 0.01);
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenDeliveryTimeWindowIsNull_itShouldThrowException() {
|
||||
@SuppressWarnings("unused")
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s").setDeliveryTimeWindow(null)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc"))
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenDeliveryTimeWindowIsSet_itShouldBeDoneCorrectly() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setDeliveryTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(1.0, s.getExchangeActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
assertEquals(2.0, s.getExchangeActivity().getSingleTimeWindow().getEnd(),
|
||||
0.01);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenUsingAddDeliveryTimeWindow_itShouldBeDoneCorrectly() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.addDeliveryTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(1.0, s.getExchangeActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
assertEquals(2.0, s.getExchangeActivity().getSingleTimeWindow().getEnd(),
|
||||
0.01);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenUsingAddDeliveryTimeWindow2_itShouldBeDoneCorrectly() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s").addDeliveryTimeWindow(1, 2)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(1.0, s.getExchangeActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
assertEquals(2.0, s.getExchangeActivity().getSingleTimeWindow().getEnd(),
|
||||
0.01);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenAddingMultipleDeliveryTimeWindows_itShouldBeDoneCorrectly() {
|
||||
TimeWindow tw1 = TimeWindow.newInstance(1, 2);
|
||||
TimeWindow tw2 = TimeWindow.newInstance(4, 5);
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s").addDeliveryTimeWindow(tw1)
|
||||
.addDeliveryTimeWindow(tw2)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(s.getExchangeActivity().getTimeWindows().size(), 2);
|
||||
assertThat(s.getExchangeActivity().getTimeWindows(), hasItem(is(tw1)));
|
||||
assertThat(s.getExchangeActivity().getTimeWindows(), hasItem(is(tw2)));
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenAddingMultipleOverlappingDeliveryTimeWindows_itShouldThrowException() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s").addDeliveryTimeWindow(1, 3)
|
||||
.addDeliveryTimeWindow(2, 5)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(1.0, s.getExchangeActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
assertEquals(2.0, s.getExchangeActivity().getSingleTimeWindow().getEnd(),
|
||||
0.01);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void whenUsingAddPickupTimeWindow_itShouldBeDoneCorrectly() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.addPickupTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(1.0, s.getPickupActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
assertEquals(2.0, s.getPickupActivity().getSingleTimeWindow().getEnd(), 0.01);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenUsingAddPickupTimeWindow2_itShouldBeDoneCorrectly() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s").addPickupTimeWindow(1, 2)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(1.0, s.getPickupActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
assertEquals(2.0, s.getPickupActivity().getSingleTimeWindow().getEnd(), 0.01);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenAddingMultiplePickupTimeWindows_itShouldBeDoneCorrectly() {
|
||||
TimeWindow tw1 = TimeWindow.newInstance(1, 2);
|
||||
TimeWindow tw2 = TimeWindow.newInstance(4, 5);
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s").addPickupTimeWindow(tw1)
|
||||
.addPickupTimeWindow(tw2)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(s.getPickupActivity().getTimeWindows().size(), 2);
|
||||
assertThat(s.getPickupActivity().getTimeWindows(), hasItem(is(tw1)));
|
||||
assertThat(s.getPickupActivity().getTimeWindows(), hasItem(is(tw2)));
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenAddingMultipleOverlappingPickupTimeWindows_itShouldThrowException() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s").addPickupTimeWindow(1, 3)
|
||||
.addPickupTimeWindow(2, 5)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(1.0, s.getPickupActivity().getSingleTimeWindow().getStart(), 0.01);
|
||||
assertEquals(2.0, s.getPickupActivity().getSingleTimeWindow().getEnd(), 0.01);
|
||||
}
|
||||
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenReturnedShipmentHasNegativeCapacityVal_throwIllegalStateExpception() {
|
||||
@SuppressWarnings("unused")
|
||||
ReturnedShipment one = ReturnedShipment.Builder.newInstance("s")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").build())
|
||||
.setDeliveryLocation(TestUtils.loc("foofoo"))
|
||||
.addSizeDimension(0, -2)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenAddingTwoCapDimension_nuOfDimsShouldBeTwo() {
|
||||
ReturnedShipment one = ReturnedShipment.Builder.newInstance("s")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").build())
|
||||
.setDeliveryLocation(TestUtils.loc("foofoo"))
|
||||
.addSizeDimension(0, 2)
|
||||
.addSizeDimension(1, 4)
|
||||
.addBackhaulSizeDimension(0, 3)
|
||||
.addBackhaulSizeDimension(1, 5)
|
||||
.build();
|
||||
assertEquals(2, one.getSize().getNuOfDimensions());
|
||||
assertEquals(2, one.getBackhaulActivity().getLoadChange().getNuOfDimensions());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenReturnedShipmentIsBuiltWithoutSpecifyingCapacity_itShouldHvCapWithOneDimAndDimValOfZero() {
|
||||
ReturnedShipment one = ReturnedShipment.Builder.newInstance("s")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").setCoordinate(Coordinate.newInstance(0, 0)).build())
|
||||
.setDeliveryLocation(TestUtils.loc("foofoo")).build();
|
||||
assertEquals(1, one.getSize().getNuOfDimensions());
|
||||
assertEquals(0, one.getSize().get(0));
|
||||
assertEquals(1, one.getBackhaulActivity().getLoadChange().getNuOfDimensions());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenReturnedShipmentIsBuiltWithConstructorWhereSizeIsSpecified_capacityShouldBeSetCorrectly() {
|
||||
ReturnedShipment one = ReturnedShipment.Builder.newInstance("s").addSizeDimension(0, 1)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").setCoordinate(Coordinate.newInstance(0, 0)).build())
|
||||
.setDeliveryLocation(TestUtils.loc("foofoo")).build();
|
||||
assertEquals(1, one.getSize().getNuOfDimensions());
|
||||
assertEquals(1, one.getSize().get(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenAddingSkills_theyShouldBeAddedCorrectly() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("loc").build())
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc"))
|
||||
.addRequiredSkill("drill").addRequiredSkill("screwdriver").build();
|
||||
assertTrue(s.getRequiredSkills().containsSkill("drill"));
|
||||
assertTrue(s.getRequiredSkills().containsSkill("drill"));
|
||||
assertTrue(s.getRequiredSkills().containsSkill("ScrewDriver"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pick").build())
|
||||
.setDeliveryLocation(TestUtils.loc("del"))
|
||||
.addRequiredSkill("DriLl").addRequiredSkill("screwDriver").build();
|
||||
assertTrue(s.getRequiredSkills().containsSkill("drill"));
|
||||
assertTrue(s.getRequiredSkills().containsSkill("drilL"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("loc").build())
|
||||
.setDeliveryLocation(TestUtils.loc("del"))
|
||||
.addRequiredSkill("screwDriver").build();
|
||||
assertFalse(s.getRequiredSkills().containsSkill("drill"));
|
||||
assertFalse(s.getRequiredSkills().containsSkill("drilL"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void nameShouldBeAssigned() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("loc").build())
|
||||
.setDeliveryLocation(TestUtils.loc("del"))
|
||||
.setName("name").build();
|
||||
assertEquals("name", s.getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenSettingLocation_itShouldWork() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("loc").build())
|
||||
.setDeliveryLocation(Location.Builder.newInstance().setId("del").build())
|
||||
.setBackhaulLocation(Location.Builder.newInstance().setId("back").build())
|
||||
.build();
|
||||
assertEquals("loc", s.getPickupActivity().getLocation().getId());
|
||||
assertEquals("del", s.getExchangeActivity().getLocation().getId());
|
||||
assertEquals("back", s.getBackhaulActivity().getLocation().getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenSettingPriorities_itShouldBeSetCorrectly() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setPickupLocation(Location.newInstance("loc"))
|
||||
.setDeliveryLocation(Location.newInstance("loc"))
|
||||
.setPriority(1).build();
|
||||
assertEquals(1, s.getPriority());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenSettingPriorities_itShouldBeSetCorrectly2() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setPickupLocation(Location.newInstance("loc"))
|
||||
.setDeliveryLocation(Location.newInstance("loc"))
|
||||
.setPriority(3).build();
|
||||
assertEquals(3, s.getPriority());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenNotSettingPriorities_defaultShouldBe2() {
|
||||
ReturnedShipment s = ReturnedShipment.Builder.newInstance("s")
|
||||
.setPickupLocation(Location.newInstance("loc"))
|
||||
.setDeliveryLocation(Location.newInstance("loc"))
|
||||
.build();
|
||||
assertEquals(2, s.getPriority());
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenSettingIncorrectPriorities_itShouldThrowException() {
|
||||
ReturnedShipment.Builder.newInstance("s").setPickupLocation(Location.newInstance("loc"))
|
||||
.setDeliveryLocation(Location.newInstance("loc"))
|
||||
.setPriority(30).build();
|
||||
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenSettingIncorrectPriorities_itShouldThrowException2() {
|
||||
ReturnedShipment.Builder.newInstance("s").setPickupLocation(Location.newInstance("loc"))
|
||||
.setDeliveryLocation(Location.newInstance("loc"))
|
||||
.setPriority(0).build();
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void firstTest() {
|
||||
Set<Job> jobs = new HashSet<>();
|
||||
jobs.add(CustomJob.Builder.newInstance("job")
|
||||
.addPickup(Location.newInstance(10, 0), SizeDimension.of(1), 0d, TimeWindow.newInstance(0, 30))
|
||||
.addExchange(Location.newInstance(5, 30)).addDelivery(Location.newInstance(10, 0), SizeDimension.of(1))
|
||||
.build());
|
||||
jobs.add(CustomJob.Builder.newInstance("job2")
|
||||
.addPickup(Location.newInstance(20, 0), SizeDimension.of(1), 0d, TimeWindow.newInstance(0, 30))
|
||||
.addExchange(Location.newInstance(20, 30), SizeDimension.EMPTY)
|
||||
.addDelivery(Location.newInstance(20, 0), SizeDimension.of(1))
|
||||
.build());
|
||||
jobs.add(CustomJob.Builder.newInstance("job3")
|
||||
.addPickup(Location.newInstance(20, 30), SizeDimension.of(1))
|
||||
.addExchange(Location.newInstance(40, 30), SizeDimension.EMPTY)
|
||||
.addDelivery(Location.newInstance(20, 30), SizeDimension.of(1))
|
||||
.build());
|
||||
jobs.add(CustomJob.Builder.newInstance("job4")
|
||||
.addPickup(Location.newInstance(20, 30), SizeDimension.of(1))
|
||||
.addExchange(Location.newInstance(40, 30), SizeDimension.EMPTY)
|
||||
.addDelivery(Location.newInstance(20, 30), SizeDimension.of(1))
|
||||
.build());
|
||||
VehicleType type = VehicleTypeImpl.Builder.newInstance("type").addCapacityDimension(0, 2)
|
||||
.build();
|
||||
Vehicle v = VehicleImpl.Builder.newInstance("v").setType(type)
|
||||
.setStartLocation(Location.newInstance(0, 0)).build();
|
||||
Vehicle v2 = VehicleImpl.Builder.newInstance("v2").setType(type)
|
||||
.setStartLocation(Location.newInstance(0, 0)).build();
|
||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance()
|
||||
.setFleetSize(FleetSize.FINITE)
|
||||
.addAllJobs(jobs).addVehicle(v).addVehicle(v2).build();
|
||||
VehicleRoutingAlgorithm vra = Jsprit.createAlgorithm(vrp);
|
||||
vra.setMaxIterations(10);
|
||||
VehicleRoutingProblemSolution solution = Solutions.bestOf(vra.searchSolutions());
|
||||
SolutionPrinter.print(vrp, solution, SolutionPrinter.Print.VERBOSE);
|
||||
Assert.assertTrue(solution.getUnassignedJobs().isEmpty());
|
||||
}
|
||||
}
|
||||
|
|
@ -37,9 +37,9 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenTwoShipmentsHaveTheSameId_theyReferencesShouldBeUnEqual() {
|
||||
ShipmentJob one = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 10).setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
ShipmentJob one = new ShipmentJob.Builder("s").addSizeDimension(0, 10).setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
setDeliveryLocation(TestUtils.loc("foofoo")).setPickupServiceTime(10).setDeliveryServiceTime(20).build();
|
||||
ShipmentJob two = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 10).setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
ShipmentJob two = new ShipmentJob.Builder("s").addSizeDimension(0, 10).setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
setDeliveryLocation(TestUtils.loc("foofoo")).setPickupServiceTime(10).setDeliveryServiceTime(20).build();
|
||||
|
||||
assertTrue(one != two);
|
||||
|
|
@ -47,7 +47,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void sizeAtStartAndEndShouldBeCorrect() {
|
||||
ShipmentJob one = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 10).addSizeDimension(1, 5).setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
ShipmentJob one = new ShipmentJob.Builder("s").addSizeDimension(0, 10).addSizeDimension(1, 5).setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
setDeliveryLocation(TestUtils.loc("foofoo")).setPickupServiceTime(10).setDeliveryServiceTime(20).build();
|
||||
SizeDimension cap = SizeDimension.Builder.newInstance().addDimension(0, 0).addDimension(1, 0).build();
|
||||
assertTrue(one.getSizeAtStart().equals(cap));
|
||||
|
|
@ -56,9 +56,9 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenTwoShipmentsHaveTheSameId_theyShouldBeEqual() {
|
||||
ShipmentJob one = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 10).setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
ShipmentJob one = new ShipmentJob.Builder("s").addSizeDimension(0, 10).setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
setDeliveryLocation(TestUtils.loc("foofoo")).setPickupServiceTime(10).setDeliveryServiceTime(20).build();
|
||||
ShipmentJob two = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 10).setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
ShipmentJob two = new ShipmentJob.Builder("s").addSizeDimension(0, 10).setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
setDeliveryLocation(TestUtils.loc("foofoo")).setPickupServiceTime(10).setDeliveryServiceTime(20).build();
|
||||
|
||||
assertTrue(one.equals(two));
|
||||
|
|
@ -66,7 +66,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenShipmentIsInstantiatedWithASizeOf10_theSizeShouldBe10() {
|
||||
ShipmentJob one = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 10).setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
ShipmentJob one = new ShipmentJob.Builder("s").addSizeDimension(0, 10).setPickupLocation(Location.Builder.newInstance().setId("foo").build()).
|
||||
setDeliveryLocation(TestUtils.loc("foofoo")).setPickupServiceTime(10).setDeliveryServiceTime(20).build();
|
||||
assertEquals(10, one.getSize().get(0));
|
||||
}
|
||||
|
|
@ -74,7 +74,7 @@ public class ShipmentJobTest {
|
|||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenShipmentIsBuiltWithNegativeDemand_itShouldThrowException() {
|
||||
@SuppressWarnings("unused")
|
||||
ShipmentJob one = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, -10)
|
||||
ShipmentJob one = new ShipmentJob.Builder("s").addSizeDimension(0, -10)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").build())
|
||||
.setDeliveryLocation(TestUtils.loc("foofoo")).build();
|
||||
}
|
||||
|
|
@ -82,7 +82,7 @@ public class ShipmentJobTest {
|
|||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenShipmentIsBuiltWithNegativeDemand_itShouldThrowException_v2() {
|
||||
@SuppressWarnings("unused")
|
||||
ShipmentJob one = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, -10)
|
||||
ShipmentJob one = new ShipmentJob.Builder("s").addSizeDimension(0, -10)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").build())
|
||||
.setDeliveryLocation(TestUtils.loc("foofoo")).build();
|
||||
}
|
||||
|
|
@ -90,32 +90,32 @@ public class ShipmentJobTest {
|
|||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenIdIsNull_itShouldThrowException() {
|
||||
@SuppressWarnings("unused")
|
||||
ShipmentJob one = ShipmentJob.Builder.newInstance(null).addSizeDimension(0, 10)
|
||||
ShipmentJob one = new ShipmentJob.Builder(null).addSizeDimension(0, 10)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").build())
|
||||
.setDeliveryLocation(TestUtils.loc("foofoo")).build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenCallingForANewBuilderInstance_itShouldReturnBuilderCorrectly() {
|
||||
ShipmentJob.Builder builder = ShipmentJob.Builder.newInstance("s");
|
||||
ShipmentJob.Builder builder = new ShipmentJob.Builder("s");
|
||||
assertNotNull(builder);
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenNeitherPickupLocationIdNorPickupCoord_itThrowsException() {
|
||||
@SuppressWarnings("unused")
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setDeliveryLocation(TestUtils.loc("delLoc")).build();
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setDeliveryLocation(TestUtils.loc("delLoc")).build();
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenNeitherDeliveryLocationIdNorDeliveryCoord_itThrowsException() {
|
||||
@SuppressWarnings("unused")
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenPickupLocationIdIsSet_itShouldBeDoneCorrectly() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals("pickLoc", s.getPickupActivity().getLocation().getId());
|
||||
assertEquals("pickLoc", s.getPickupActivity().getLocation().getId());
|
||||
}
|
||||
|
|
@ -123,12 +123,12 @@ public class ShipmentJobTest {
|
|||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenPickupLocationIsNull_itThrowsException() {
|
||||
@SuppressWarnings("unused")
|
||||
ShipmentJob.Builder builder = ShipmentJob.Builder.newInstance("s").setPickupLocation(Location.Builder.newInstance().setId(null).build());
|
||||
ShipmentJob.Builder builder = new ShipmentJob.Builder("s").setPickupLocation(Location.Builder.newInstance().setId(null).build());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenPickupCoordIsSet_itShouldBeDoneCorrectly() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s")
|
||||
ShipmentJob s = new ShipmentJob.Builder("s")
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").setCoordinate(Coordinate.newInstance(1, 2)).build()).build();
|
||||
assertEquals(1.0, s.getPickupActivity().getLocation().getCoordinate().getX(), 0.01);
|
||||
assertEquals(2.0, s.getPickupActivity().getLocation().getCoordinate().getY(), 0.01);
|
||||
|
|
@ -139,7 +139,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenDeliveryLocationIdIsSet_itShouldBeDoneCorrectly() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s")
|
||||
ShipmentJob s = new ShipmentJob.Builder("s")
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals("delLoc", s.getDeliveryActivity().getLocation().getId());
|
||||
assertEquals("delLoc", s.getDeliveryActivity().getLocation().getId());
|
||||
|
|
@ -148,7 +148,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenDeliveryCoordIsSet_itShouldBeDoneCorrectly() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setDeliveryLocation(TestUtils.loc("delLoc", Coordinate.newInstance(1, 2)))
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setDeliveryLocation(TestUtils.loc("delLoc", Coordinate.newInstance(1, 2)))
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build())
|
||||
.build();
|
||||
assertEquals(1.0, s.getDeliveryActivity().getLocation().getCoordinate().getX(), 0.01);
|
||||
|
|
@ -159,21 +159,21 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenPickupServiceTimeIsNotSet_itShouldBeZero() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s")
|
||||
ShipmentJob s = new ShipmentJob.Builder("s")
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(0.0, s.getPickupActivity().getOperationTime(), 0.01);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenDeliveryServiceTimeIsNotSet_itShouldBeZero() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s")
|
||||
ShipmentJob s = new ShipmentJob.Builder("s")
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(0.0, s.getDeliveryActivity().getOperationTime(), 0.01);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenPickupServiceTimeIsSet_itShouldBeDoneCorrectly() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s")
|
||||
ShipmentJob s = new ShipmentJob.Builder("s")
|
||||
.setPickupServiceTime(2.0)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(2.0, s.getPickupActivity().getOperationTime(), 0.01);
|
||||
|
|
@ -182,13 +182,13 @@ public class ShipmentJobTest {
|
|||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenPickupServiceIsSmallerThanZero_itShouldThrowException() {
|
||||
@SuppressWarnings("unused")
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setPickupServiceTime(-2.0)
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setPickupServiceTime(-2.0)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenDeliveryServiceTimeIsSet_itShouldBeDoneCorrectly() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setDeliveryServiceTime(2.0)
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setDeliveryServiceTime(2.0)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(2.0, s.getDeliveryActivity().getOperationTime(), 0.01);
|
||||
}
|
||||
|
|
@ -196,12 +196,12 @@ public class ShipmentJobTest {
|
|||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenDeliveryServiceIsSmallerThanZero_itShouldThrowException() {
|
||||
@SuppressWarnings("unused")
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setDeliveryServiceTime(-2.0).setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setDeliveryServiceTime(-2.0).setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenPickupTimeWindowIsNotSet_itShouldBeTheDefaultOne() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(0.0, s.getPickupActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
assertEquals(Double.MAX_VALUE,
|
||||
|
|
@ -211,12 +211,12 @@ public class ShipmentJobTest {
|
|||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenPickupTimeWindowIsNull_itShouldThrowException() {
|
||||
@SuppressWarnings("unused")
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setPickupTimeWindow(null).setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setPickupTimeWindow(null).setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenPickupTimeWindowIsSet_itShouldBeDoneCorrectly() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setPickupTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setPickupTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(1.0, s.getPickupActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
|
|
@ -225,7 +225,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenDeliveryTimeWindowIsNotSet_itShouldBeTheDefaultOne() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(0.0, s.getDeliveryActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
assertEquals(Double.MAX_VALUE,
|
||||
|
|
@ -235,12 +235,12 @@ public class ShipmentJobTest {
|
|||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenDeliveryTimeWindowIsNull_itShouldThrowException() {
|
||||
@SuppressWarnings("unused")
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setDeliveryTimeWindow(null).setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setDeliveryTimeWindow(null).setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenDeliveryTimeWindowIsSet_itShouldBeDoneCorrectly() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setDeliveryTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setDeliveryTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(1.0, s.getDeliveryActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
|
|
@ -250,7 +250,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenUsingAddDeliveryTimeWindow_itShouldBeDoneCorrectly() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").addDeliveryTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").addDeliveryTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(1.0, s.getDeliveryActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
|
|
@ -260,7 +260,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenUsingAddDeliveryTimeWindow2_itShouldBeDoneCorrectly() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").addDeliveryTimeWindow(1, 2)
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").addDeliveryTimeWindow(1, 2)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(1.0, s.getDeliveryActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
|
|
@ -272,7 +272,7 @@ public class ShipmentJobTest {
|
|||
public void whenAddingMultipleDeliveryTimeWindows_itShouldBeDoneCorrectly() {
|
||||
TimeWindow tw1 = TimeWindow.newInstance(1, 2);
|
||||
TimeWindow tw2 = TimeWindow.newInstance(4, 5);
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").addDeliveryTimeWindow(tw1).addDeliveryTimeWindow(tw2)
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").addDeliveryTimeWindow(tw1).addDeliveryTimeWindow(tw2)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(s.getDeliveryActivity().getTimeWindows().size(), 2);
|
||||
assertThat(s.getDeliveryActivity().getTimeWindows(), hasItem(is(tw1)));
|
||||
|
|
@ -281,7 +281,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenAddingMultipleOverlappingDeliveryTimeWindows_itShouldThrowException() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").addDeliveryTimeWindow(1, 3).addDeliveryTimeWindow(2, 5)
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").addDeliveryTimeWindow(1, 3).addDeliveryTimeWindow(2, 5)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(1.0, s.getDeliveryActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
|
|
@ -292,7 +292,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenUsingAddPickupTimeWindow_itShouldBeDoneCorrectly() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").addPickupTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").addPickupTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(1.0, s.getPickupActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
|
|
@ -301,7 +301,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenUsingAddPickupTimeWindow2_itShouldBeDoneCorrectly() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").addPickupTimeWindow(1, 2)
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").addPickupTimeWindow(1, 2)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(1.0, s.getPickupActivity().getSingleTimeWindow().getStart(),
|
||||
0.01);
|
||||
|
|
@ -312,7 +312,7 @@ public class ShipmentJobTest {
|
|||
public void whenAddingMultiplePickupTimeWindows_itShouldBeDoneCorrectly() {
|
||||
TimeWindow tw1 = TimeWindow.newInstance(1, 2);
|
||||
TimeWindow tw2 = TimeWindow.newInstance(4, 5);
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").addPickupTimeWindow(tw1).addPickupTimeWindow(tw2)
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").addPickupTimeWindow(tw1).addPickupTimeWindow(tw2)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(s.getPickupActivity().getTimeWindows().size(), 2);
|
||||
assertThat(s.getPickupActivity().getTimeWindows(), hasItem(is(tw1)));
|
||||
|
|
@ -321,7 +321,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenAddingMultipleOverlappingPickupTimeWindows_itShouldThrowException() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").addPickupTimeWindow(1, 3).addPickupTimeWindow(2, 5)
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").addPickupTimeWindow(1, 3).addPickupTimeWindow(2, 5)
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
assertEquals(1.0, s.getPickupActivity().getSingleTimeWindow().getStart(), 0.01);
|
||||
assertEquals(2.0, s.getPickupActivity().getSingleTimeWindow().getEnd(), 0.01);
|
||||
|
|
@ -331,7 +331,7 @@ public class ShipmentJobTest {
|
|||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenShipmentHasNegativeCapacityVal_throwIllegalStateExpception() {
|
||||
@SuppressWarnings("unused")
|
||||
ShipmentJob one = ShipmentJob.Builder.newInstance("s").setPickupLocation(Location.Builder.newInstance().setId("foo").build())
|
||||
ShipmentJob one = new ShipmentJob.Builder("s").setPickupLocation(Location.Builder.newInstance().setId("foo").build())
|
||||
.setDeliveryLocation(TestUtils.loc("foofoo"))
|
||||
.addSizeDimension(0, -2)
|
||||
.build();
|
||||
|
|
@ -339,7 +339,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenAddingTwoCapDimension_nuOfDimsShouldBeTwo() {
|
||||
ShipmentJob one = ShipmentJob.Builder.newInstance("s").setPickupLocation(Location.Builder.newInstance().setId("foo").build())
|
||||
ShipmentJob one = new ShipmentJob.Builder("s").setPickupLocation(Location.Builder.newInstance().setId("foo").build())
|
||||
.setDeliveryLocation(TestUtils.loc("foofoo"))
|
||||
.addSizeDimension(0, 2)
|
||||
.addSizeDimension(1, 4)
|
||||
|
|
@ -349,7 +349,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenShipmentIsBuiltWithoutSpecifyingCapacity_itShouldHvCapWithOneDimAndDimValOfZero() {
|
||||
ShipmentJob one = ShipmentJob.Builder.newInstance("s")
|
||||
ShipmentJob one = new ShipmentJob.Builder("s")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").setCoordinate(Coordinate.newInstance(0, 0)).build())
|
||||
.setDeliveryLocation(TestUtils.loc("foofoo")).build();
|
||||
assertEquals(1, one.getSize().getNuOfDimensions());
|
||||
|
|
@ -358,7 +358,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenShipmentIsBuiltWithConstructorWhereSizeIsSpecified_capacityShouldBeSetCorrectly() {
|
||||
ShipmentJob one = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 1)
|
||||
ShipmentJob one = new ShipmentJob.Builder("s").addSizeDimension(0, 1)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("foo").setCoordinate(Coordinate.newInstance(0, 0)).build())
|
||||
.setDeliveryLocation(TestUtils.loc("foofoo")).build();
|
||||
assertEquals(1, one.getSize().getNuOfDimensions());
|
||||
|
|
@ -367,7 +367,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenAddingSkills_theyShouldBeAddedCorrectly() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setPickupLocation(Location.Builder.newInstance().setId("loc").build())
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setPickupLocation(Location.Builder.newInstance().setId("loc").build())
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc"))
|
||||
.addRequiredSkill("drill").addRequiredSkill("screwdriver").build();
|
||||
assertTrue(s.getRequiredSkills().containsSkill("drill"));
|
||||
|
|
@ -377,7 +377,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenAddingSkillsCaseSens_theyShouldBeAddedCorrectly() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s")
|
||||
ShipmentJob s = new ShipmentJob.Builder("s")
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pick").build())
|
||||
.setDeliveryLocation(TestUtils.loc("del"))
|
||||
.addRequiredSkill("DriLl").addRequiredSkill("screwDriver").build();
|
||||
|
|
@ -387,7 +387,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenAddingSkillsCaseSensV2_theyShouldBeAddedCorrectly() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setPickupLocation(Location.Builder.newInstance().setId("loc").build())
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setPickupLocation(Location.Builder.newInstance().setId("loc").build())
|
||||
.setDeliveryLocation(TestUtils.loc("del"))
|
||||
.addRequiredSkill("screwDriver").build();
|
||||
assertFalse(s.getRequiredSkills().containsSkill("drill"));
|
||||
|
|
@ -396,7 +396,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void nameShouldBeAssigned() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setPickupLocation(Location.Builder.newInstance().setId("loc").build())
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setPickupLocation(Location.Builder.newInstance().setId("loc").build())
|
||||
.setDeliveryLocation(TestUtils.loc("del"))
|
||||
.setName("name").build();
|
||||
assertEquals("name", s.getName());
|
||||
|
|
@ -404,7 +404,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenSettingLocation_itShouldWork() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setPickupLocation(Location.Builder.newInstance().setId("loc").build())
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setPickupLocation(Location.Builder.newInstance().setId("loc").build())
|
||||
.setDeliveryLocation(Location.Builder.newInstance().setId("del").build()).build();
|
||||
assertEquals("loc", s.getPickupActivity().getLocation().getId());
|
||||
assertEquals("loc", s.getPickupActivity().getLocation().getId());
|
||||
|
|
@ -414,7 +414,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenSettingPriorities_itShouldBeSetCorrectly() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setPickupLocation(Location.newInstance("loc"))
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setPickupLocation(Location.newInstance("loc"))
|
||||
.setDeliveryLocation(Location.newInstance("loc"))
|
||||
.setPriority(1).build();
|
||||
assertEquals(1, s.getPriority());
|
||||
|
|
@ -422,7 +422,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenSettingPriorities_itShouldBeSetCorrectly2() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setPickupLocation(Location.newInstance("loc"))
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setPickupLocation(Location.newInstance("loc"))
|
||||
.setDeliveryLocation(Location.newInstance("loc"))
|
||||
.setPriority(3).build();
|
||||
assertEquals(3, s.getPriority());
|
||||
|
|
@ -430,7 +430,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test
|
||||
public void whenNotSettingPriorities_defaultShouldBe2() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").setPickupLocation(Location.newInstance("loc"))
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").setPickupLocation(Location.newInstance("loc"))
|
||||
.setDeliveryLocation(Location.newInstance("loc"))
|
||||
.build();
|
||||
assertEquals(2, s.getPriority());
|
||||
|
|
@ -438,7 +438,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenSettingIncorrectPriorities_itShouldThrowException() {
|
||||
ShipmentJob.Builder.newInstance("s").setPickupLocation(Location.newInstance("loc"))
|
||||
new ShipmentJob.Builder("s").setPickupLocation(Location.newInstance("loc"))
|
||||
.setDeliveryLocation(Location.newInstance("loc"))
|
||||
.setPriority(30).build();
|
||||
|
||||
|
|
@ -446,7 +446,7 @@ public class ShipmentJobTest {
|
|||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenSettingIncorrectPriorities_itShouldThrowException2() {
|
||||
ShipmentJob.Builder.newInstance("s").setPickupLocation(Location.newInstance("loc"))
|
||||
new ShipmentJob.Builder("s").setPickupLocation(Location.newInstance("loc"))
|
||||
.setDeliveryLocation(Location.newInstance("loc"))
|
||||
.setPriority(0).build();
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ public class VehicleRouteBuilderTest {
|
|||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void whenDeliveryIsAddedBeforePickup_throwsException() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s")
|
||||
ShipmentJob s = new ShipmentJob.Builder("s")
|
||||
.setDeliveryLocation(Location.newInstance("loc1")).build();
|
||||
VehicleRoute.Builder builder = VehicleRoute.Builder.newInstance(mock(Vehicle.class), mock(Driver.class));
|
||||
builder.addDelivery(s);
|
||||
|
|
@ -147,7 +147,7 @@ public class VehicleRouteBuilderTest {
|
|||
protected Builder createStandardShipment(String name) {
|
||||
Location loc = Location.Builder.newInstance().setId("delLoc").build();
|
||||
TimeWindow tw = TimeWindow.newInstance(0, 10);
|
||||
return ShipmentJob.Builder.newInstance(name)
|
||||
return new ShipmentJob.Builder(name)
|
||||
.addSizeDimension(0, 10)
|
||||
.setPickupTimeWindow(tw)
|
||||
.setDeliveryTimeWindow(tw)
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ public class TestTourActivities {
|
|||
|
||||
@Test
|
||||
public void whenAddingAShipmentActivity_tourShouldServeShipment() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 1).setDeliveryLocation(Location.newInstance("delLoc"))
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").addSizeDimension(0, 1).setDeliveryLocation(Location.newInstance("delLoc"))
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
TourActivity pickupShipment = s.getPickupActivity();
|
||||
TourActivity deliverShipment = s.getDeliveryActivity();
|
||||
|
|
@ -96,7 +96,7 @@ public class TestTourActivities {
|
|||
|
||||
@Test
|
||||
public void whenRemovingShipment_tourShouldNotServiceItAnymore() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 1)
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").addSizeDimension(0, 1)
|
||||
.setDeliveryLocation(Location.newInstance("delLoc"))
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build())
|
||||
.build();
|
||||
|
|
@ -112,7 +112,7 @@ public class TestTourActivities {
|
|||
|
||||
@Test
|
||||
public void whenRemovingShipment_theirCorrespondingActivitiesShouldBeRemoved() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 1)
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").addSizeDimension(0, 1)
|
||||
.setDeliveryLocation(Location.newInstance("delLoc"))
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
TourActivity pickupShipment = s.getPickupActivity();
|
||||
|
|
@ -153,7 +153,7 @@ public class TestTourActivities {
|
|||
|
||||
@Test
|
||||
public void removingShipmentActivityShouldWork() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 1)
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").addSizeDimension(0, 1)
|
||||
.setDeliveryLocation(Location.newInstance("delLoc"))
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
TourActivity pickupShipment = s.getPickupActivity();
|
||||
|
|
@ -179,7 +179,7 @@ public class TestTourActivities {
|
|||
|
||||
@Test
|
||||
public void whenCopyingShipmentActivitySeq_jobSizeShouldBeCorrect() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 1)
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").addSizeDimension(0, 1)
|
||||
.setDeliveryLocation(Location.newInstance("delLoc"))
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
TourActivity pickupShipment = s.getPickupActivity();
|
||||
|
|
@ -200,7 +200,7 @@ public class TestTourActivities {
|
|||
|
||||
@Test
|
||||
public void whenCopyingShipmentActivitySeq_noActivitiesShouldBeCorrect() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 1)
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").addSizeDimension(0, 1)
|
||||
.setDeliveryLocation(Location.newInstance("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
TourActivity pickupShipment = s.getPickupActivity();
|
||||
TourActivity deliverShipment = s.getDeliveryActivity();
|
||||
|
|
@ -220,7 +220,7 @@ public class TestTourActivities {
|
|||
|
||||
@Test
|
||||
public void whenCopyingShipmentActivitySeq_itShouldContaintPickupAct() {
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("s").addSizeDimension(0, 1)
|
||||
ShipmentJob s = new ShipmentJob.Builder("s").addSizeDimension(0, 1)
|
||||
.setDeliveryLocation(Location.newInstance("delLoc")).setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build()).build();
|
||||
TourActivity pickupShipment = s.getPickupActivity();
|
||||
TourActivity deliverShipment = s.getDeliveryActivity();
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ public class LiLimReader {
|
|||
String from = rel.from;
|
||||
String to = rel.to;
|
||||
int demand = rel.demand;
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance(counter.toString()).addSizeDimension(0, demand)
|
||||
ShipmentJob s = new ShipmentJob.Builder(counter.toString()).addSizeDimension(0, demand)
|
||||
.setPickupLocation(Location.Builder.newInstance().setCoordinate(customers.get(from).coord).build()).setPickupServiceTime(customers.get(from).serviceTime)
|
||||
.setPickupTimeWindow(TimeWindow.newInstance(customers.get(from).start, customers.get(from).end))
|
||||
.setDeliveryLocation(Location.Builder.newInstance().setCoordinate(customers.get(to).coord).build()).setDeliveryServiceTime(customers.get(to).serviceTime)
|
||||
|
|
|
|||
|
|
@ -390,7 +390,7 @@ public class BicycleMessenger {
|
|||
}
|
||||
String[] tokens = line.split("\\s+");
|
||||
//define your envelope which is basically a shipment from A to B
|
||||
ShipmentJob envelope = ShipmentJob.Builder.newInstance(tokens[1]).addSizeDimension(0, 1)
|
||||
ShipmentJob envelope = new ShipmentJob.Builder(tokens[1]).addSizeDimension(0, 1)
|
||||
.setPickupLocation(Location.Builder.newInstance()
|
||||
.setCoordinate(Coordinate.newInstance(Double.parseDouble(tokens[2]), Double.parseDouble(tokens[3]))).build())
|
||||
.setDeliveryLocation(Location.Builder.newInstance()
|
||||
|
|
|
|||
|
|
@ -86,29 +86,29 @@ public class EnRoutePickupAndDeliveryWithMultipleDepotsAndOpenRoutesExample {
|
|||
|
||||
*/
|
||||
|
||||
ShipmentJob shipment1 = ShipmentJob.Builder.newInstance("1").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 7))).setDeliveryLocation(loc(Coordinate.newInstance(6, 9))).build();
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("2").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 13))).setDeliveryLocation(loc(Coordinate.newInstance(6, 11))).build();
|
||||
ShipmentJob shipment1 = new ShipmentJob.Builder("1").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 7))).setDeliveryLocation(loc(Coordinate.newInstance(6, 9))).build();
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("2").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 13))).setDeliveryLocation(loc(Coordinate.newInstance(6, 11))).build();
|
||||
|
||||
ShipmentJob shipment3 = ShipmentJob.Builder.newInstance("3").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 7))).setDeliveryLocation(loc(Coordinate.newInstance(14, 9))).build();
|
||||
ShipmentJob shipment4 = ShipmentJob.Builder.newInstance("4").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 13))).setDeliveryLocation(loc(Coordinate.newInstance(14, 11))).build();
|
||||
ShipmentJob shipment3 = new ShipmentJob.Builder("3").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 7))).setDeliveryLocation(loc(Coordinate.newInstance(14, 9))).build();
|
||||
ShipmentJob shipment4 = new ShipmentJob.Builder("4").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 13))).setDeliveryLocation(loc(Coordinate.newInstance(14, 11))).build();
|
||||
|
||||
ShipmentJob shipment5 = ShipmentJob.Builder.newInstance("5").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(25, 27))).setDeliveryLocation(loc(Coordinate.newInstance(26, 29))).build();
|
||||
ShipmentJob shipment6 = ShipmentJob.Builder.newInstance("6").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(25, 33))).setDeliveryLocation(loc(Coordinate.newInstance(26, 31))).build();
|
||||
ShipmentJob shipment5 = new ShipmentJob.Builder("5").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(25, 27))).setDeliveryLocation(loc(Coordinate.newInstance(26, 29))).build();
|
||||
ShipmentJob shipment6 = new ShipmentJob.Builder("6").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(25, 33))).setDeliveryLocation(loc(Coordinate.newInstance(26, 31))).build();
|
||||
|
||||
ShipmentJob shipment7 = ShipmentJob.Builder.newInstance("7").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(35, 27))).setDeliveryLocation(loc(Coordinate.newInstance(34, 29))).build();
|
||||
ShipmentJob shipment8 = ShipmentJob.Builder.newInstance("8").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(35, 33))).setDeliveryLocation(loc(Coordinate.newInstance(34, 31))).build();
|
||||
ShipmentJob shipment7 = new ShipmentJob.Builder("7").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(35, 27))).setDeliveryLocation(loc(Coordinate.newInstance(34, 29))).build();
|
||||
ShipmentJob shipment8 = new ShipmentJob.Builder("8").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(35, 33))).setDeliveryLocation(loc(Coordinate.newInstance(34, 31))).build();
|
||||
|
||||
ShipmentJob shipment9 = ShipmentJob.Builder.newInstance("9").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 27))).setDeliveryLocation(loc(Coordinate.newInstance(6, 29))).build();
|
||||
ShipmentJob shipment10 = ShipmentJob.Builder.newInstance("10").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 33))).setDeliveryLocation(loc(Coordinate.newInstance(6, 31))).build();
|
||||
ShipmentJob shipment9 = new ShipmentJob.Builder("9").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 27))).setDeliveryLocation(loc(Coordinate.newInstance(6, 29))).build();
|
||||
ShipmentJob shipment10 = new ShipmentJob.Builder("10").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 33))).setDeliveryLocation(loc(Coordinate.newInstance(6, 31))).build();
|
||||
|
||||
ShipmentJob shipment11 = ShipmentJob.Builder.newInstance("11").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 27))).setDeliveryLocation(loc(Coordinate.newInstance(14, 29))).build();
|
||||
ShipmentJob shipment12 = ShipmentJob.Builder.newInstance("12").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 33))).setDeliveryLocation(loc(Coordinate.newInstance(14, 31))).build();
|
||||
ShipmentJob shipment11 = new ShipmentJob.Builder("11").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 27))).setDeliveryLocation(loc(Coordinate.newInstance(14, 29))).build();
|
||||
ShipmentJob shipment12 = new ShipmentJob.Builder("12").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 33))).setDeliveryLocation(loc(Coordinate.newInstance(14, 31))).build();
|
||||
|
||||
ShipmentJob shipment13 = ShipmentJob.Builder.newInstance("13").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(25, 7))).setDeliveryLocation(loc(Coordinate.newInstance(26, 9))).build();
|
||||
ShipmentJob shipment14 = ShipmentJob.Builder.newInstance("14").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(25, 13))).setDeliveryLocation(loc(Coordinate.newInstance(26, 11))).build();
|
||||
ShipmentJob shipment13 = new ShipmentJob.Builder("13").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(25, 7))).setDeliveryLocation(loc(Coordinate.newInstance(26, 9))).build();
|
||||
ShipmentJob shipment14 = new ShipmentJob.Builder("14").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(25, 13))).setDeliveryLocation(loc(Coordinate.newInstance(26, 11))).build();
|
||||
|
||||
ShipmentJob shipment15 = ShipmentJob.Builder.newInstance("15").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(35, 7))).setDeliveryLocation(loc(Coordinate.newInstance(34, 9))).build();
|
||||
ShipmentJob shipment16 = ShipmentJob.Builder.newInstance("16").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(35, 13))).setDeliveryLocation(loc(Coordinate.newInstance(34, 11))).build();
|
||||
ShipmentJob shipment15 = new ShipmentJob.Builder("15").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(35, 7))).setDeliveryLocation(loc(Coordinate.newInstance(34, 9))).build();
|
||||
ShipmentJob shipment16 = new ShipmentJob.Builder("16").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(35, 13))).setDeliveryLocation(loc(Coordinate.newInstance(34, 11))).build();
|
||||
|
||||
|
||||
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
|
||||
|
|
|
|||
|
|
@ -166,19 +166,19 @@ public class MultipleProductsWithLoadConstraintExample {
|
|||
VehicleImpl vehicle = VehicleImpl.Builder.newInstance("vehicle").setStartLocation(loc(Coordinate.newInstance(0, 0)))
|
||||
.setType(type).build();
|
||||
|
||||
ShipmentJob bananas = ShipmentJob.Builder.newInstance("bananas_1").addSizeDimension(BANANAS_DIMENSION_INDEX, 1)
|
||||
ShipmentJob bananas = new ShipmentJob.Builder("bananas_1").addSizeDimension(BANANAS_DIMENSION_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(1, 8))).setDeliveryLocation(loc(Coordinate.newInstance(10, 8))).build();
|
||||
|
||||
ShipmentJob bananas_2 = ShipmentJob.Builder.newInstance("bananas_2").addSizeDimension(BANANAS_DIMENSION_INDEX, 1)
|
||||
ShipmentJob bananas_2 = new ShipmentJob.Builder("bananas_2").addSizeDimension(BANANAS_DIMENSION_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(2, 8))).setDeliveryLocation(loc(Coordinate.newInstance(11, 8))).build();
|
||||
|
||||
ShipmentJob bananas_3 = ShipmentJob.Builder.newInstance("bananas_3").addSizeDimension(BANANAS_DIMENSION_INDEX, 1)
|
||||
ShipmentJob bananas_3 = new ShipmentJob.Builder("bananas_3").addSizeDimension(BANANAS_DIMENSION_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(3, 8))).setDeliveryLocation(loc(Coordinate.newInstance(12, 8))).build();
|
||||
|
||||
ShipmentJob apples = ShipmentJob.Builder.newInstance("apples_1").addSizeDimension(APPLES_DIMENSION_INDEX, 1)
|
||||
ShipmentJob apples = new ShipmentJob.Builder("apples_1").addSizeDimension(APPLES_DIMENSION_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(1, 6))).setDeliveryLocation(loc(Coordinate.newInstance(10, 12))).build();
|
||||
|
||||
ShipmentJob apples_2 = ShipmentJob.Builder.newInstance("apples_2").addSizeDimension(APPLES_DIMENSION_INDEX, 1)
|
||||
ShipmentJob apples_2 = new ShipmentJob.Builder("apples_2").addSizeDimension(APPLES_DIMENSION_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(1, 5))).setDeliveryLocation(loc(Coordinate.newInstance(10, 11))).build();
|
||||
|
||||
VehicleRoutingProblem vrp = VehicleRoutingProblem.Builder.newInstance().setFleetSize(VehicleRoutingProblem.FleetSize.INFINITE)
|
||||
|
|
|
|||
|
|
@ -67,14 +67,14 @@ public class SimpleEnRoutePickupAndDeliveryExample {
|
|||
* (5,13)->(6,11) 3: (15,7)->(14,9) 4: (15,13)->(14,11)
|
||||
*/
|
||||
|
||||
ShipmentJob shipment1 = ShipmentJob.Builder.newInstance("1").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 7)))
|
||||
ShipmentJob shipment1 = new ShipmentJob.Builder("1").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 7)))
|
||||
.setDeliveryLocation(loc(Coordinate.newInstance(6, 9))).build();
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("2").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 13)))
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("2").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 13)))
|
||||
.setDeliveryLocation(loc(Coordinate.newInstance(6, 11))).build();
|
||||
|
||||
ShipmentJob shipment3 = ShipmentJob.Builder.newInstance("3").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 7)))
|
||||
ShipmentJob shipment3 = new ShipmentJob.Builder("3").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 7)))
|
||||
.setDeliveryLocation(loc(Coordinate.newInstance(14, 9))).build();
|
||||
ShipmentJob shipment4 = ShipmentJob.Builder.newInstance("4").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 13)))
|
||||
ShipmentJob shipment4 = new ShipmentJob.Builder("4").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 13)))
|
||||
.setDeliveryLocation(loc(Coordinate.newInstance(14, 11))).build();
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -70,11 +70,11 @@ public class SimpleEnRoutePickupAndDeliveryOpenRoutesExample {
|
|||
* 4: (15,13)->(14,11)
|
||||
*/
|
||||
|
||||
ShipmentJob shipment1 = ShipmentJob.Builder.newInstance("1").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 7))).setDeliveryLocation(loc(Coordinate.newInstance(6, 9))).build();
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("2").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 13))).setDeliveryLocation(loc(Coordinate.newInstance(6, 11))).build();
|
||||
ShipmentJob shipment1 = new ShipmentJob.Builder("1").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 7))).setDeliveryLocation(loc(Coordinate.newInstance(6, 9))).build();
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("2").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 13))).setDeliveryLocation(loc(Coordinate.newInstance(6, 11))).build();
|
||||
|
||||
ShipmentJob shipment3 = ShipmentJob.Builder.newInstance("3").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 7))).setDeliveryLocation(loc(Coordinate.newInstance(14, 9))).build();
|
||||
ShipmentJob shipment4 = ShipmentJob.Builder.newInstance("4").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 13))).setDeliveryLocation(loc(Coordinate.newInstance(14, 11))).build();
|
||||
ShipmentJob shipment3 = new ShipmentJob.Builder("3").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 7))).setDeliveryLocation(loc(Coordinate.newInstance(14, 9))).build();
|
||||
ShipmentJob shipment4 = new ShipmentJob.Builder("4").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 13))).setDeliveryLocation(loc(Coordinate.newInstance(14, 11))).build();
|
||||
|
||||
|
||||
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
|
||||
|
|
|
|||
|
|
@ -69,14 +69,14 @@ public class SimpleEnRoutePickupAndDeliveryWithDepotBoundedDeliveriesExample {
|
|||
* (5,13)->(6,11) 3: (15,7)->(14,9) 4: (15,13)->(14,11)
|
||||
*/
|
||||
|
||||
ShipmentJob shipment1 = ShipmentJob.Builder.newInstance("1").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 7)))
|
||||
ShipmentJob shipment1 = new ShipmentJob.Builder("1").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 7)))
|
||||
.setDeliveryLocation(loc(Coordinate.newInstance(6, 9))).build();
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("2").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 13)))
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("2").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(5, 13)))
|
||||
.setDeliveryLocation(loc(Coordinate.newInstance(6, 11))).build();
|
||||
|
||||
ShipmentJob shipment3 = ShipmentJob.Builder.newInstance("3").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 7)))
|
||||
ShipmentJob shipment3 = new ShipmentJob.Builder("3").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 7)))
|
||||
.setDeliveryLocation(loc(Coordinate.newInstance(14, 9))).build();
|
||||
ShipmentJob shipment4 = ShipmentJob.Builder.newInstance("4").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 13)))
|
||||
ShipmentJob shipment4 = new ShipmentJob.Builder("4").addSizeDimension(0, 1).setPickupLocation(loc(Coordinate.newInstance(15, 13)))
|
||||
.setDeliveryLocation(loc(Coordinate.newInstance(14, 11))).build();
|
||||
//
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -99,54 +99,54 @@ public class TransportOfDisabledPeople {
|
|||
* build shipments at the required locations, each with a capacity-demand of 1.
|
||||
*
|
||||
*/
|
||||
ShipmentJob shipment1 = ShipmentJob.Builder.newInstance("wheelchair_1").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
ShipmentJob shipment1 = new ShipmentJob.Builder("wheelchair_1").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(5, 7))).setDeliveryLocation(loc(Coordinate.newInstance(6, 9))).build();
|
||||
ShipmentJob shipment2 = ShipmentJob.Builder.newInstance("2").addSizeDimension(PASSENGERSEATS_INDEX, 1).setPickupLocation(loc(Coordinate.newInstance(5, 13)))
|
||||
ShipmentJob shipment2 = new ShipmentJob.Builder("2").addSizeDimension(PASSENGERSEATS_INDEX, 1).setPickupLocation(loc(Coordinate.newInstance(5, 13)))
|
||||
.setDeliveryLocation(loc(Coordinate.newInstance(6, 11))).build();
|
||||
|
||||
ShipmentJob shipment3 = ShipmentJob.Builder.newInstance("wheelchair_2").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
ShipmentJob shipment3 = new ShipmentJob.Builder("wheelchair_2").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(15, 7))).setDeliveryLocation(loc(Coordinate.newInstance(14, 9))).build();
|
||||
ShipmentJob shipment4 = ShipmentJob.Builder.newInstance("4").addSizeDimension(PASSENGERSEATS_INDEX, 1).setPickupLocation(loc(Coordinate.newInstance(15, 13)))
|
||||
ShipmentJob shipment4 = new ShipmentJob.Builder("4").addSizeDimension(PASSENGERSEATS_INDEX, 1).setPickupLocation(loc(Coordinate.newInstance(15, 13)))
|
||||
.setDeliveryLocation(loc(Coordinate.newInstance(14, 11))).build();
|
||||
|
||||
ShipmentJob shipment5 = ShipmentJob.Builder.newInstance("wheelchair_3").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
ShipmentJob shipment5 = new ShipmentJob.Builder("wheelchair_3").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(25, 27))).setDeliveryLocation(loc(Coordinate.newInstance(26, 29))).build();
|
||||
ShipmentJob shipment6 = ShipmentJob.Builder.newInstance("6").addSizeDimension(PASSENGERSEATS_INDEX, 1).setPickupLocation(loc(Coordinate.newInstance(25, 33)))
|
||||
ShipmentJob shipment6 = new ShipmentJob.Builder("6").addSizeDimension(PASSENGERSEATS_INDEX, 1).setPickupLocation(loc(Coordinate.newInstance(25, 33)))
|
||||
.setDeliveryLocation(loc(Coordinate.newInstance(26, 31))).build();
|
||||
|
||||
ShipmentJob shipment7 = ShipmentJob.Builder.newInstance("7").addSizeDimension(PASSENGERSEATS_INDEX, 1).setPickupLocation(loc(Coordinate.newInstance(35, 27)))
|
||||
ShipmentJob shipment7 = new ShipmentJob.Builder("7").addSizeDimension(PASSENGERSEATS_INDEX, 1).setPickupLocation(loc(Coordinate.newInstance(35, 27)))
|
||||
.setDeliveryLocation(loc(Coordinate.newInstance(34, 29))).build();
|
||||
ShipmentJob shipment8 = ShipmentJob.Builder.newInstance("wheelchair_4").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
ShipmentJob shipment8 = new ShipmentJob.Builder("wheelchair_4").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(35, 33))).setDeliveryLocation(loc(Coordinate.newInstance(34, 31))).build();
|
||||
|
||||
ShipmentJob shipment9 = ShipmentJob.Builder.newInstance("9").addSizeDimension(PASSENGERSEATS_INDEX, 1).setPickupLocation(loc(Coordinate.newInstance(5, 27)))
|
||||
ShipmentJob shipment9 = new ShipmentJob.Builder("9").addSizeDimension(PASSENGERSEATS_INDEX, 1).setPickupLocation(loc(Coordinate.newInstance(5, 27)))
|
||||
.setDeliveryLocation(loc(Coordinate.newInstance(6, 29))).build();
|
||||
ShipmentJob shipment10 = ShipmentJob.Builder.newInstance("wheelchair_5").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
ShipmentJob shipment10 = new ShipmentJob.Builder("wheelchair_5").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(5, 33))).setDeliveryLocation(loc(Coordinate.newInstance(6, 31))).build();
|
||||
|
||||
ShipmentJob shipment11 = ShipmentJob.Builder.newInstance("11").addSizeDimension(PASSENGERSEATS_INDEX, 1)
|
||||
ShipmentJob shipment11 = new ShipmentJob.Builder("11").addSizeDimension(PASSENGERSEATS_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(15, 27))).setDeliveryLocation(loc(Coordinate.newInstance(14, 29))).build();
|
||||
ShipmentJob shipment12 = ShipmentJob.Builder.newInstance("wheelchair_6").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
ShipmentJob shipment12 = new ShipmentJob.Builder("wheelchair_6").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(15, 33))).setDeliveryLocation(loc(Coordinate.newInstance(14, 31))).build();
|
||||
|
||||
ShipmentJob shipment13 = ShipmentJob.Builder.newInstance("13").addSizeDimension(PASSENGERSEATS_INDEX, 1).setPickupLocation(loc(Coordinate.newInstance(25, 7)))
|
||||
ShipmentJob shipment13 = new ShipmentJob.Builder("13").addSizeDimension(PASSENGERSEATS_INDEX, 1).setPickupLocation(loc(Coordinate.newInstance(25, 7)))
|
||||
.setDeliveryLocation(loc(Coordinate.newInstance(26, 9))).build();
|
||||
ShipmentJob shipment14 = ShipmentJob.Builder.newInstance("wheelchair_7").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
ShipmentJob shipment14 = new ShipmentJob.Builder("wheelchair_7").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(25, 13))).setDeliveryLocation(loc(Coordinate.newInstance(26, 11))).build();
|
||||
|
||||
ShipmentJob shipment15 = ShipmentJob.Builder.newInstance("15").addSizeDimension(PASSENGERSEATS_INDEX, 1).setPickupLocation(loc(Coordinate.newInstance(35, 7)))
|
||||
ShipmentJob shipment15 = new ShipmentJob.Builder("15").addSizeDimension(PASSENGERSEATS_INDEX, 1).setPickupLocation(loc(Coordinate.newInstance(35, 7)))
|
||||
.setDeliveryLocation(loc(Coordinate.newInstance(34, 9))).build();
|
||||
ShipmentJob shipment16 = ShipmentJob.Builder.newInstance("wheelchair_8").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
ShipmentJob shipment16 = new ShipmentJob.Builder("wheelchair_8").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(35, 13))).setDeliveryLocation(loc(Coordinate.newInstance(34, 11))).build();
|
||||
|
||||
ShipmentJob shipment17 = ShipmentJob.Builder.newInstance("17").addSizeDimension(PASSENGERSEATS_INDEX, 1).setPickupLocation(loc(Coordinate.newInstance(5, 14)))
|
||||
ShipmentJob shipment17 = new ShipmentJob.Builder("17").addSizeDimension(PASSENGERSEATS_INDEX, 1).setPickupLocation(loc(Coordinate.newInstance(5, 14)))
|
||||
.setDeliveryLocation(loc(Coordinate.newInstance(6, 16))).build();
|
||||
ShipmentJob shipment18 = ShipmentJob.Builder.newInstance("wheelchair_9").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
ShipmentJob shipment18 = new ShipmentJob.Builder("wheelchair_9").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(5, 20))).setDeliveryLocation(loc(Coordinate.newInstance(6, 18))).build();
|
||||
|
||||
ShipmentJob shipment19 = ShipmentJob.Builder.newInstance("19").addSizeDimension(PASSENGERSEATS_INDEX, 1)
|
||||
ShipmentJob shipment19 = new ShipmentJob.Builder("19").addSizeDimension(PASSENGERSEATS_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(15, 14))).setDeliveryLocation(loc(Coordinate.newInstance(14, 16))).build();
|
||||
ShipmentJob shipment20 = ShipmentJob.Builder.newInstance("wheelchair_10").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
ShipmentJob shipment20 = new ShipmentJob.Builder("wheelchair_10").addSizeDimension(WHEELCHAIRSPACE_INDEX, 1)
|
||||
.setPickupLocation(loc(Coordinate.newInstance(15, 20))).setDeliveryLocation(loc(Coordinate.newInstance(14, 18))).build();
|
||||
|
||||
VehicleRoutingProblem.Builder vrpBuilder = VehicleRoutingProblem.Builder.newInstance();
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ public class LiLimReader {
|
|||
String from = rel.from;
|
||||
String to = rel.to;
|
||||
int demand = rel.demand;
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance(counter.toString()).addSizeDimension(0, demand)
|
||||
ShipmentJob s = new ShipmentJob.Builder(counter.toString()).addSizeDimension(0, demand)
|
||||
.setPickupLocation(Location.Builder.newInstance().setCoordinate(customers.get(from).coord).build()).setPickupServiceTime(customers.get(from).serviceTime)
|
||||
.setPickupTimeWindow(TimeWindow.newInstance(customers.get(from).start, customers.get(from).end))
|
||||
.setDeliveryLocation(Location.Builder.newInstance().setCoordinate(customers.get(to).coord).build()).setDeliveryServiceTime(customers.get(to).serviceTime)
|
||||
|
|
|
|||
|
|
@ -404,9 +404,9 @@ public class VrpXMLReader {
|
|||
|
||||
ShipmentJob.Builder builder;
|
||||
if (capacityString != null) {
|
||||
builder = ShipmentJob.Builder.newInstance(id).addSizeDimension(0, Integer.parseInt(capacityString));
|
||||
builder = new ShipmentJob.Builder(id).addSizeDimension(0, Integer.parseInt(capacityString));
|
||||
} else {
|
||||
builder = ShipmentJob.Builder.newInstance(id);
|
||||
builder = new ShipmentJob.Builder(id);
|
||||
List<HierarchicalConfiguration> dimensionConfigs = shipmentConfig.configurationsAt("capacity-dimensions.dimension");
|
||||
for (HierarchicalConfiguration dimension : dimensionConfigs) {
|
||||
Integer index = dimension.getInt("[@index]");
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ public class VrpXMLWriterTest {
|
|||
public void shouldWriteNameOfShipment() {
|
||||
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
|
||||
Location pickLocation = Location.Builder.newInstance().setId("pick").setIndex(1).build();
|
||||
ShipmentJob s1 = ShipmentJob.Builder.newInstance("1").setName("cleaning")
|
||||
ShipmentJob s1 = new ShipmentJob.Builder("1").setName("cleaning")
|
||||
.setPickupLocation(pickLocation)
|
||||
.setDeliveryLocation(TestUtils.loc("del")).build();
|
||||
|
||||
|
|
@ -199,11 +199,11 @@ public class VrpXMLWriterTest {
|
|||
builder.addVehicle(v1);
|
||||
builder.addVehicle(v2);
|
||||
|
||||
ShipmentJob s1 = ShipmentJob.Builder.newInstance("1").addSizeDimension(0, 10)
|
||||
ShipmentJob s1 = new ShipmentJob.Builder("1").addSizeDimension(0, 10)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build())
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
.setDeliveryTimeWindow(TimeWindow.newInstance(3, 4)).build();
|
||||
ShipmentJob s2 = ShipmentJob.Builder.newInstance("2").addSizeDimension(0, 20)
|
||||
ShipmentJob s2 = new ShipmentJob.Builder("2").addSizeDimension(0, 20)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLocation").build())
|
||||
.setDeliveryLocation(TestUtils.loc("delLocation")).setPickupTimeWindow(TimeWindow.newInstance(5, 6))
|
||||
.setDeliveryTimeWindow(TimeWindow.newInstance(7, 8)).build();
|
||||
|
|
@ -233,11 +233,11 @@ public class VrpXMLWriterTest {
|
|||
builder.addVehicle(v1);
|
||||
builder.addVehicle(v2);
|
||||
|
||||
ShipmentJob s1 = ShipmentJob.Builder.newInstance("1").addSizeDimension(0, 10)
|
||||
ShipmentJob s1 = new ShipmentJob.Builder("1").addSizeDimension(0, 10)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build())
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
.setDeliveryTimeWindow(TimeWindow.newInstance(3, 4)).build();
|
||||
ShipmentJob s2 = ShipmentJob.Builder.newInstance("2").addSizeDimension(0, 20)
|
||||
ShipmentJob s2 = new ShipmentJob.Builder("2").addSizeDimension(0, 20)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLocation").build())
|
||||
.setDeliveryLocation(TestUtils.loc("delLocation")).setPickupTimeWindow(TimeWindow.newInstance(5, 6))
|
||||
.setDeliveryTimeWindow(TimeWindow.newInstance(7, 8)).build();
|
||||
|
|
@ -268,11 +268,11 @@ public class VrpXMLWriterTest {
|
|||
builder.addVehicle(v1);
|
||||
builder.addVehicle(v2);
|
||||
|
||||
ShipmentJob s1 = ShipmentJob.Builder.newInstance("1").addSizeDimension(0, 10)
|
||||
ShipmentJob s1 = new ShipmentJob.Builder("1").addSizeDimension(0, 10)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build())
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
.setDeliveryTimeWindow(TimeWindow.newInstance(3, 4)).build();
|
||||
ShipmentJob s2 = ShipmentJob.Builder.newInstance("2").addSizeDimension(0, 20)
|
||||
ShipmentJob s2 = new ShipmentJob.Builder("2").addSizeDimension(0, 20)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLocation").build())
|
||||
.setDeliveryLocation(TestUtils.loc("delLocation")).setPickupTimeWindow(TimeWindow.newInstance(5, 6))
|
||||
.setDeliveryTimeWindow(TimeWindow.newInstance(7, 8)).build();
|
||||
|
|
@ -303,11 +303,11 @@ public class VrpXMLWriterTest {
|
|||
builder.addVehicle(v1);
|
||||
builder.addVehicle(v2);
|
||||
|
||||
ShipmentJob s1 = ShipmentJob.Builder.newInstance("1").addSizeDimension(0, 10)
|
||||
ShipmentJob s1 = new ShipmentJob.Builder("1").addSizeDimension(0, 10)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLoc").build())
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc")).setPickupTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
.setDeliveryTimeWindow(TimeWindow.newInstance(3, 4)).setPickupServiceTime(100).setDeliveryServiceTime(50).build();
|
||||
ShipmentJob s2 = ShipmentJob.Builder.newInstance("2").addSizeDimension(0, 20)
|
||||
ShipmentJob s2 = new ShipmentJob.Builder("2").addSizeDimension(0, 20)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLocation").build())
|
||||
.setDeliveryLocation(TestUtils.loc("delLocation")).setPickupTimeWindow(TimeWindow.newInstance(5, 6))
|
||||
.setDeliveryTimeWindow(TimeWindow.newInstance(7, 8)).build();
|
||||
|
|
@ -338,11 +338,11 @@ public class VrpXMLWriterTest {
|
|||
builder.addVehicle(v1);
|
||||
builder.addVehicle(v2);
|
||||
|
||||
ShipmentJob s1 = ShipmentJob.Builder.newInstance("1").addSizeDimension(0, 10)
|
||||
ShipmentJob s1 = new ShipmentJob.Builder("1").addSizeDimension(0, 10)
|
||||
.setPickupLocation(TestUtils.loc(Coordinate.newInstance(1, 2))).setDeliveryLocation(TestUtils.loc("delLoc"))
|
||||
.setPickupTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
.setDeliveryTimeWindow(TimeWindow.newInstance(3, 4)).setPickupServiceTime(100).setDeliveryServiceTime(50).build();
|
||||
ShipmentJob s2 = ShipmentJob.Builder.newInstance("2").addSizeDimension(0, 20)
|
||||
ShipmentJob s2 = new ShipmentJob.Builder("2").addSizeDimension(0, 20)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLocation").build())
|
||||
.setDeliveryLocation(TestUtils.loc("delLocation")).setPickupTimeWindow(TimeWindow.newInstance(5, 6))
|
||||
.setDeliveryTimeWindow(TimeWindow.newInstance(7, 8)).build();
|
||||
|
|
@ -466,7 +466,7 @@ public class VrpXMLWriterTest {
|
|||
public void whenWritingShipments_shipmentShouldHaveCorrectNuSkills() {
|
||||
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
|
||||
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("1").addRequiredSkill("skill1").addRequiredSkill("skill2").addRequiredSkill("skill3")
|
||||
ShipmentJob s = new ShipmentJob.Builder("1").addRequiredSkill("skill1").addRequiredSkill("skill2").addRequiredSkill("skill3")
|
||||
.addSizeDimension(0, 10)
|
||||
.setPickupLocation(TestUtils.loc(Coordinate.newInstance(1, 2)))
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc", Coordinate.newInstance(5, 6)))
|
||||
|
|
@ -487,7 +487,7 @@ public class VrpXMLWriterTest {
|
|||
public void whenWritingShipments_shipmentShouldContain_skill1() {
|
||||
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
|
||||
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("1").addRequiredSkill("skill1").addRequiredSkill("skill2").addRequiredSkill("skill3")
|
||||
ShipmentJob s = new ShipmentJob.Builder("1").addRequiredSkill("skill1").addRequiredSkill("skill2").addRequiredSkill("skill3")
|
||||
.addSizeDimension(0, 10)
|
||||
.setPickupLocation(TestUtils.loc(Coordinate.newInstance(1, 2)))
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc", Coordinate.newInstance(5, 6)))
|
||||
|
|
@ -508,7 +508,7 @@ public class VrpXMLWriterTest {
|
|||
public void whenWritingShipments_shipmentShouldContain_skill2() {
|
||||
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
|
||||
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("1").addRequiredSkill("skill1").addRequiredSkill("Skill2").addRequiredSkill("skill3")
|
||||
ShipmentJob s = new ShipmentJob.Builder("1").addRequiredSkill("skill1").addRequiredSkill("Skill2").addRequiredSkill("skill3")
|
||||
.addSizeDimension(0, 10)
|
||||
.setPickupLocation(TestUtils.loc(Coordinate.newInstance(1, 2)))
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc", Coordinate.newInstance(5, 6)))
|
||||
|
|
@ -529,7 +529,7 @@ public class VrpXMLWriterTest {
|
|||
public void whenWritingShipments_shipmentShouldContain_skill3() {
|
||||
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
|
||||
|
||||
ShipmentJob s = ShipmentJob.Builder.newInstance("1").addRequiredSkill("skill1").addRequiredSkill("Skill2").addRequiredSkill("skill3")
|
||||
ShipmentJob s = new ShipmentJob.Builder("1").addRequiredSkill("skill1").addRequiredSkill("Skill2").addRequiredSkill("skill3")
|
||||
.addSizeDimension(0, 10)
|
||||
.setPickupLocation(TestUtils.loc(Coordinate.newInstance(1, 2)))
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc", Coordinate.newInstance(5, 6)))
|
||||
|
|
@ -558,11 +558,11 @@ public class VrpXMLWriterTest {
|
|||
builder.addVehicle(v1);
|
||||
builder.addVehicle(v2);
|
||||
|
||||
ShipmentJob s1 = ShipmentJob.Builder.newInstance("1").addSizeDimension(0, 10).setPickupLocation(TestUtils.loc(Coordinate.newInstance(1, 2)))
|
||||
ShipmentJob s1 = new ShipmentJob.Builder("1").addSizeDimension(0, 10).setPickupLocation(TestUtils.loc(Coordinate.newInstance(1, 2)))
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc", Coordinate.newInstance(5, 6)))
|
||||
.setPickupTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
.setDeliveryTimeWindow(TimeWindow.newInstance(3, 4)).setPickupServiceTime(100).setDeliveryServiceTime(50).build();
|
||||
ShipmentJob s2 = ShipmentJob.Builder.newInstance("2").addSizeDimension(0, 20)
|
||||
ShipmentJob s2 = new ShipmentJob.Builder("2").addSizeDimension(0, 20)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLocation").build())
|
||||
.setDeliveryLocation(TestUtils.loc("delLocation"))
|
||||
.setPickupTimeWindow(TimeWindow.newInstance(5, 6))
|
||||
|
|
@ -588,7 +588,7 @@ public class VrpXMLWriterTest {
|
|||
public void whenWritingShipmentWithSeveralCapacityDimension_itShouldWriteAndReadItCorrectly() {
|
||||
VehicleRoutingProblem.Builder builder = VehicleRoutingProblem.Builder.newInstance();
|
||||
|
||||
ShipmentJob s1 = ShipmentJob.Builder.newInstance("1")
|
||||
ShipmentJob s1 = new ShipmentJob.Builder("1")
|
||||
.setPickupLocation(TestUtils.loc(Coordinate.newInstance(1, 2)))
|
||||
.setDeliveryLocation(TestUtils.loc("delLoc", Coordinate.newInstance(5, 6)))
|
||||
.setPickupTimeWindow(TimeWindow.newInstance(1, 2))
|
||||
|
|
@ -597,7 +597,7 @@ public class VrpXMLWriterTest {
|
|||
.addSizeDimension(2, 100)
|
||||
.build();
|
||||
|
||||
ShipmentJob s2 = ShipmentJob.Builder.newInstance("2").addSizeDimension(0, 20)
|
||||
ShipmentJob s2 = new ShipmentJob.Builder("2").addSizeDimension(0, 20)
|
||||
.setPickupLocation(Location.Builder.newInstance().setId("pickLocation").build())
|
||||
.setDeliveryLocation(TestUtils.loc("delLocation")).setPickupTimeWindow(TimeWindow.newInstance(5, 6))
|
||||
.setDeliveryTimeWindow(TimeWindow.newInstance(7, 8)).build();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue