mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
avoid returning always the same vehicle by randomizing type container
This commit is contained in:
parent
6e6218812e
commit
b86bdc5c8a
3 changed files with 36 additions and 4 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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<Vehicle> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Vehicle> vehicleList;
|
||||
|
||||
private Random random = RandomNumberGeneration.getRandom();
|
||||
|
||||
public TypeContainer() {
|
||||
super();
|
||||
vehicleList = new ArrayList<Vehicle>();
|
||||
}
|
||||
|
||||
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<Vehicle> 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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue