From c2377252ea35b67565a0a4b4dc33bdaf9069696e Mon Sep 17 00:00:00 2001 From: oblonski <4sschroeder@gmail.com> Date: Sat, 11 Jan 2014 16:53:40 +0100 Subject: [PATCH] adding multiple capacity obj to jobs and vehicleType --- .../java/jsprit/core/problem/Capacity.java | 71 +++++++++++++++++++ ...erShipmentLoadActivityLevelConstraint.java | 4 ++ .../java/jsprit/core/problem/job/Job.java | 4 ++ .../java/jsprit/core/problem/job/Service.java | 29 +++++++- .../jsprit/core/problem/job/Shipment.java | 55 ++++++++++---- .../problem/vehicle/PenaltyVehicleType.java | 6 ++ .../core/problem/vehicle/VehicleType.java | 3 + .../core/problem/vehicle/VehicleTypeImpl.java | 38 +++++++++- .../jsprit/core/problem/job/CapacityTest.java | 66 +++++++++++++++++ .../jsprit/core/problem/job/ServiceTest.java | 37 +++++++++- .../jsprit/core/problem/job/ShipmentTest.java | 34 +++++++++ .../core/problem/vehicle/VehicleImplTest.java | 7 ++ .../problem/vehicle/VehicleTypeImplTest.java | 53 ++++++++++++++ 13 files changed, 388 insertions(+), 19 deletions(-) create mode 100644 jsprit-core/src/main/java/jsprit/core/problem/Capacity.java create mode 100644 jsprit-core/src/test/java/jsprit/core/problem/job/CapacityTest.java create mode 100644 jsprit-core/src/test/java/jsprit/core/problem/vehicle/VehicleImplTest.java create mode 100644 jsprit-core/src/test/java/jsprit/core/problem/vehicle/VehicleTypeImplTest.java diff --git a/jsprit-core/src/main/java/jsprit/core/problem/Capacity.java b/jsprit-core/src/main/java/jsprit/core/problem/Capacity.java new file mode 100644 index 00000000..a0ec0d4e --- /dev/null +++ b/jsprit-core/src/main/java/jsprit/core/problem/Capacity.java @@ -0,0 +1,71 @@ +package jsprit.core.problem; + + +public class Capacity { + + public static class Builder { + + /** + * default is 1 dimension with size of zero + */ + private int[] dimensions = new int[1]; + + public static Builder newInstance(){ + return new Builder(); + } + + Builder(){} + + /** + * add capacity dimension + * + *

if automatically resizes dimensions according to index, i.e. if index=7 there are 8 dimensions. + * + * @throw IllegalStateException if dimValue < 0 + * @param index + * @param dimValue + * @return + */ + public Builder addDimension(int index, int dimValue){ + if(dimValue<0) throw new IllegalStateException("dimValue can never be negative"); + if(index < dimensions.length){ + dimensions[index] = dimValue; + } + else{ + int requiredSize = index + 1; + int[] newDimensions = new int[requiredSize]; + copy(dimensions,newDimensions); + newDimensions[index]=dimValue; + this.dimensions=newDimensions; + } + return this; + } + + private void copy(int[] from, int[] to) { + for(int i=0;i