1
0
Fork 0
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:
Balázs Vissy 2017-07-26 22:34:55 +02:00
parent e845687bea
commit c99b76e866
44 changed files with 913 additions and 1508 deletions

View file

@ -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());

View file

@ -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());

View file

@ -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);

View file

@ -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&lt;T extends MyJob, B extends BuilderBase&lt;T, B>>
* extends JobBuilder&lt;T, B> {
* extends AbstractJob.JobBuilder&lt;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();

View file

@ -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);
}

View file

@ -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);
}
}

View file

@ -52,6 +52,9 @@ public interface Job extends HasId, HasIndex {
@Deprecated
public SizeDimension getSize();
/**
* @return Returns the required skill set.
*/
public Skills getRequiredSkills();
/**

View file

@ -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);
}
}

View file

@ -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();
}
}

View file

@ -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

View file

@ -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);
}
}

View file

@ -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);
}

View file

@ -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

View file

@ -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)

View file

@ -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)

View file

@ -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();

View file

@ -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();

View file

@ -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();

View file

@ -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
*/
*/
}

View file

@ -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)

View file

@ -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")

View file

@ -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);
}

View file

@ -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);

View file

@ -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();

View file

@ -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))

View file

@ -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);

View file

@ -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.);

View file

@ -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);

View file

@ -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));
}
}

View file

@ -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());
}
}

View file

@ -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();

View file

@ -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)

View file

@ -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();

View file

@ -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)

View file

@ -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()

View file

@ -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();

View file

@ -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)

View file

@ -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();

View file

@ -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();

View file

@ -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();
//
/*

View file

@ -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();

View file

@ -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)

View file

@ -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]");

View file

@ -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();