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:
parent
358010de91
commit
2920640093
1 changed files with 16 additions and 16 deletions
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue