1
0
Fork 0
mirror of https://github.com/graphhopper/jsprit.git synced 2020-01-24 07:45:05 +01:00

make solutions reproducible again (also for threading)

This commit is contained in:
oblonski 2016-04-02 21:33:29 +02:00
parent 358010de91
commit 2920640093

View file

@ -20,10 +20,7 @@ import com.graphhopper.jsprit.core.util.RandomNumberGeneration;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import java.util.ArrayList; import java.util.*;
import java.util.Collection;
import java.util.List;
import java.util.Random;
class VehicleFleetManagerImpl implements VehicleFleetManager { class VehicleFleetManagerImpl implements VehicleFleetManager {
@ -36,17 +33,11 @@ class VehicleFleetManagerImpl implements VehicleFleetManager {
private ArrayList<Vehicle> vehicleList; private ArrayList<Vehicle> vehicleList;
private Random random = RandomNumberGeneration.getRandom(); TypeContainer() {
public TypeContainer() {
super(); super();
vehicleList = new ArrayList<Vehicle>(); vehicleList = new ArrayList<Vehicle>();
} }
public void setRandom(Random random) {
this.random = random;
}
void add(Vehicle vehicle) { void add(Vehicle vehicle) {
if (vehicleList.contains(vehicle)) { if (vehicleList.contains(vehicle)) {
throw new IllegalStateException("cannot add vehicle twice " + vehicle.getId()); throw new IllegalStateException("cannot add vehicle twice " + vehicle.getId());
@ -58,15 +49,18 @@ class VehicleFleetManagerImpl implements VehicleFleetManager {
vehicleList.remove(vehicle); vehicleList.remove(vehicle);
} }
public Vehicle getVehicle() { Vehicle getVehicle() {
int randomIndex = random.nextInt(vehicleList.size()); return vehicleList.get(0);
return vehicleList.get(randomIndex);
} }
public boolean isEmpty() { boolean isEmpty() {
return vehicleList.isEmpty(); return vehicleList.isEmpty();
} }
void shuffle(Random random){
Collections.shuffle(vehicleList,random);
}
} }
private static Logger logger = LogManager.getLogger(VehicleFleetManagerImpl.class); private static Logger logger = LogManager.getLogger(VehicleFleetManagerImpl.class);
@ -113,7 +107,6 @@ class VehicleFleetManagerImpl implements VehicleFleetManager {
vehicleTypes = new TypeContainer[maxTypeIndex+1]; vehicleTypes = new TypeContainer[maxTypeIndex+1];
for(int i=0;i< vehicleTypes.length;i++){ for(int i=0;i< vehicleTypes.length;i++){
TypeContainer typeContainer = new TypeContainer(); TypeContainer typeContainer = new TypeContainer();
typeContainer.setRandom(random);
vehicleTypes[i] = typeContainer; vehicleTypes[i] = typeContainer;
} }
for (Vehicle v : vehicles) { for (Vehicle v : vehicles) {
@ -162,6 +155,12 @@ class VehicleFleetManagerImpl implements VehicleFleetManager {
return vehicles; return vehicles;
} }
void shuffle(){
for(int i=0;i< vehicleTypes.length;i++){
vehicleTypes[i].shuffle(random);
}
}
@Override @Override
public Vehicle getAvailableVehicle(VehicleTypeKey vehicleTypeIdentifier) { public Vehicle getAvailableVehicle(VehicleTypeKey vehicleTypeIdentifier) {
if(!vehicleTypes[vehicleTypeIdentifier.getIndex()].isEmpty()){ if(!vehicleTypes[vehicleTypeIdentifier.getIndex()].isEmpty()){
@ -184,6 +183,7 @@ class VehicleFleetManagerImpl implements VehicleFleetManager {
else{ else{
locked[vehicle.getIndex()] = true; locked[vehicle.getIndex()] = true;
removeVehicle(vehicle); removeVehicle(vehicle);
if(random.nextDouble() < 0.1) shuffle();
} }
} }