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