diff --git a/jsprit-core/src/main/java/jsprit/core/algorithm/box/Jsprit.java b/jsprit-core/src/main/java/jsprit/core/algorithm/box/Jsprit.java index 0a00b406..c410e43b 100644 --- a/jsprit-core/src/main/java/jsprit/core/algorithm/box/Jsprit.java +++ b/jsprit-core/src/main/java/jsprit/core/algorithm/box/Jsprit.java @@ -313,7 +313,11 @@ public class Jsprit { VehicleFleetManager fm; if (vrp.getFleetSize().equals(VehicleRoutingProblem.FleetSize.INFINITE)) { fm = new InfiniteFleetManagerFactory(vrp.getVehicles()).createFleetManager(); - } else fm = new FiniteFleetManagerFactory(vrp.getVehicles()).createFleetManager(); + } else { + FiniteFleetManagerFactory finiteFleetManagerFactory = new FiniteFleetManagerFactory(vrp.getVehicles()); + finiteFleetManagerFactory.setRandom(random); + fm = finiteFleetManagerFactory.createFleetManager(); + } if (stateManager == null) { stateManager = new StateManager(vrp); diff --git a/jsprit-core/src/main/java/jsprit/core/problem/vehicle/FiniteFleetManagerFactory.java b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/FiniteFleetManagerFactory.java index 2b86e422..5127ffbe 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/vehicle/FiniteFleetManagerFactory.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/FiniteFleetManagerFactory.java @@ -16,7 +16,10 @@ ******************************************************************************/ package jsprit.core.problem.vehicle; +import jsprit.core.util.RandomNumberGeneration; + import java.util.Collection; +import java.util.Random; /** * Factory that creates a finite fleetmanager. @@ -27,6 +30,8 @@ public class FiniteFleetManagerFactory implements VehicleFleetManagerFactory { private Collection vehicles; + private Random random = RandomNumberGeneration.getRandom(); + /** * Constucts the factory. * @@ -37,6 +42,10 @@ public class FiniteFleetManagerFactory implements VehicleFleetManagerFactory { this.vehicles = vehicles; } + public void setRandom(Random random) { + this.random = random; + } + /** * Creates the finite fleetmanager. * @@ -47,7 +56,9 @@ public class FiniteFleetManagerFactory implements VehicleFleetManagerFactory { public VehicleFleetManager createFleetManager() { if (vehicles == null) throw new IllegalStateException("vehicles is null. this must not be."); if (vehicles.isEmpty()) throw new IllegalStateException("vehicle-collection is empty. this must not be"); - return new VehicleFleetManagerImpl(vehicles); + VehicleFleetManagerImpl vehicleFleetManager = new VehicleFleetManagerImpl(vehicles); + vehicleFleetManager.setRandom(random); + return vehicleFleetManager; } } diff --git a/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleFleetManagerImpl.java b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleFleetManagerImpl.java index 4a5cd54e..209f2d0f 100644 --- a/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleFleetManagerImpl.java +++ b/jsprit-core/src/main/java/jsprit/core/problem/vehicle/VehicleFleetManagerImpl.java @@ -17,12 +17,14 @@ package jsprit.core.problem.vehicle; import jsprit.core.problem.vehicle.VehicleImpl.NoVehicle; +import jsprit.core.util.RandomNumberGeneration; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Random; class VehicleFleetManagerImpl implements VehicleFleetManager { @@ -35,11 +37,17 @@ class VehicleFleetManagerImpl implements VehicleFleetManager { private ArrayList vehicleList; + private Random random = RandomNumberGeneration.getRandom(); + public TypeContainer() { super(); vehicleList = new ArrayList(); } + public void setRandom(Random random) { + this.random = random; + } + void add(Vehicle vehicle) { if (vehicleList.contains(vehicle)) { throw new IllegalStateException("cannot add vehicle twice " + vehicle.getId()); @@ -52,7 +60,8 @@ class VehicleFleetManagerImpl implements VehicleFleetManager { } public Vehicle getVehicle() { - return vehicleList.get(vehicleList.size()-1); + int randomIndex = random.nextInt(vehicleList.size()); + return vehicleList.get(randomIndex); } public boolean isEmpty() { @@ -71,6 +80,8 @@ class VehicleFleetManagerImpl implements VehicleFleetManager { private Vehicle[] vehicleArr; + private Random random = RandomNumberGeneration.getRandom(); + public VehicleFleetManagerImpl(Collection vehicles) { super(); this.vehicles = vehicles; @@ -81,6 +92,10 @@ class VehicleFleetManagerImpl implements VehicleFleetManager { logger.debug("initialise {}",this); } + public void setRandom(Random random) { + this.random = random; + } + @Override public String toString() { return "[name=finiteVehicles]"; @@ -95,7 +110,9 @@ class VehicleFleetManagerImpl implements VehicleFleetManager { } vehicleTypes = new TypeContainer[maxTypeIndex+1]; for(int i=0;i< vehicleTypes.length;i++){ - vehicleTypes[i] = new TypeContainer(); + TypeContainer typeContainer = new TypeContainer(); + typeContainer.setRandom(random); + vehicleTypes[i] = typeContainer; } for (Vehicle v : vehicles) { vehicleArr[v.getIndex()]=v;