mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
fix bug: when having problems with finite vehicles, locking and
unlocking was not consistent. now it is
This commit is contained in:
parent
a48013bc0f
commit
daf258e586
6 changed files with 14 additions and 19 deletions
|
|
@ -51,10 +51,7 @@ final class BestInsertion extends AbstractInsertionStrategy{
|
||||||
|
|
||||||
private RouteAlgorithm routeAlgorithm;
|
private RouteAlgorithm routeAlgorithm;
|
||||||
|
|
||||||
private Map<String,VehicleRoute> experimentalPreferredRoute = new HashMap<String, VehicleRoute>();
|
|
||||||
|
|
||||||
public void setExperimentalPreferredRoute(Map<String, VehicleRoute> experimentalPreferredRoute) {
|
public void setExperimentalPreferredRoute(Map<String, VehicleRoute> experimentalPreferredRoute) {
|
||||||
this.experimentalPreferredRoute = experimentalPreferredRoute;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean allowUnassignedJobs = false;
|
private boolean allowUnassignedJobs = false;
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,7 @@ class InsertionFactory {
|
||||||
//
|
//
|
||||||
// }
|
// }
|
||||||
|
|
||||||
insertionStrategy.addListener(new RemoveEmptyVehicles());
|
insertionStrategy.addListener(new RemoveEmptyVehicles(vehicleFleetManager));
|
||||||
insertionStrategy.addListener(new ResetAndIniFleetManager(vehicleFleetManager));
|
insertionStrategy.addListener(new ResetAndIniFleetManager(vehicleFleetManager));
|
||||||
insertionStrategy.addAllListener(insertionListeners);
|
insertionStrategy.addAllListener(insertionListeners);
|
||||||
// insertionStrategy.addListener(new FindCheaperVehicle(
|
// insertionStrategy.addListener(new FindCheaperVehicle(
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,13 @@ class RemoveEmptyVehicles implements InsertionStartsListener, InsertionEndsListe
|
||||||
|
|
||||||
private static Logger log = Logger.getLogger(RemoveEmptyVehicles.class);
|
private static Logger log = Logger.getLogger(RemoveEmptyVehicles.class);
|
||||||
|
|
||||||
|
private VehicleFleetManager fleetManager;
|
||||||
|
|
||||||
|
RemoveEmptyVehicles(VehicleFleetManager fleetManager) {
|
||||||
|
super();
|
||||||
|
this.fleetManager = fleetManager;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void informInsertionStarts(Collection<VehicleRoute> vehicleRoutes, int nOfJobs2Recreate) {
|
public void informInsertionStarts(Collection<VehicleRoute> vehicleRoutes, int nOfJobs2Recreate) {
|
||||||
// List<VehicleRoute> routes = new ArrayList<VehicleRoute>(vehicleRoutes);
|
// List<VehicleRoute> routes = new ArrayList<VehicleRoute>(vehicleRoutes);
|
||||||
|
|
@ -51,7 +58,10 @@ class RemoveEmptyVehicles implements InsertionStartsListener, InsertionEndsListe
|
||||||
public void informInsertionEnds(Collection<VehicleRoute> vehicleRoutes) {
|
public void informInsertionEnds(Collection<VehicleRoute> vehicleRoutes) {
|
||||||
List<VehicleRoute> routes = new ArrayList<VehicleRoute>(vehicleRoutes);
|
List<VehicleRoute> routes = new ArrayList<VehicleRoute>(vehicleRoutes);
|
||||||
for(VehicleRoute route : routes){
|
for(VehicleRoute route : routes){
|
||||||
if(route.isEmpty()) { vehicleRoutes.remove(route); }
|
if(route.isEmpty()) {
|
||||||
|
fleetManager.unlock(route.getVehicle());
|
||||||
|
vehicleRoutes.remove(route);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -42,12 +42,11 @@ class ResetAndIniFleetManager implements InsertionStartsListener{
|
||||||
public void informInsertionStarts(Collection<VehicleRoute> vehicleRoutes, int nOfJobs2Recreate) {
|
public void informInsertionStarts(Collection<VehicleRoute> vehicleRoutes, int nOfJobs2Recreate) {
|
||||||
vehicleFleetManager.unlockAll();
|
vehicleFleetManager.unlockAll();
|
||||||
for(VehicleRoute route : vehicleRoutes){
|
for(VehicleRoute route : vehicleRoutes){
|
||||||
if(!route.isEmpty()){
|
// if(!route.isEmpty()){
|
||||||
vehicleFleetManager.lock(route.getVehicle());
|
vehicleFleetManager.lock(route.getVehicle());
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// log.info("#lockedVehicles=" + ((VehicleFleetManagerImpl)vehicleFleetManager).sizeOfLockedVehicles() + " #routes="+vehicleRoutes.size());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
|
|
||||||
|
|
@ -125,9 +125,6 @@ final class RouteAlgorithmImpl implements RouteAlgorithm {
|
||||||
}
|
}
|
||||||
if(job instanceof Service) {
|
if(job instanceof Service) {
|
||||||
vehicleRoute.getTourActivities().addActivity(insertionData.getDeliveryInsertionIndex(), ServiceActivity.newInstance((Service)job));
|
vehicleRoute.getTourActivities().addActivity(insertionData.getDeliveryInsertionIndex(), ServiceActivity.newInstance((Service)job));
|
||||||
// if(vehicleRoute.getStart().getEndTime() != insertionData.getVehicleDepartureTime()){
|
|
||||||
// logger.info("depTime switched from " + vehicleRoute.getStart().getEndTime() + " to " + insertionData.getVehicleDepartureTime());
|
|
||||||
// }
|
|
||||||
vehicleRoute.setDepartureTime(insertionData.getVehicleDepartureTime());
|
vehicleRoute.setDepartureTime(insertionData.getVehicleDepartureTime());
|
||||||
}
|
}
|
||||||
else throw new IllegalStateException("neither service nor shipment. this is not supported.");
|
else throw new IllegalStateException("neither service nor shipment. this is not supported.");
|
||||||
|
|
@ -163,13 +160,6 @@ final class RouteAlgorithmImpl implements RouteAlgorithm {
|
||||||
return algoDescription;
|
return algoDescription;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void insertJob(Service service, int serviceInsertionIndex, VehicleRoute vehicleRoute) {
|
|
||||||
// TourActivity del = actStates.getActivity(service,true);
|
|
||||||
vehicleRoute.getTourActivities().addActivity(serviceInsertionIndex, ServiceActivity.newInstance(service));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public Collection<RouteAlgorithmListener> getListeners() {
|
public Collection<RouteAlgorithmListener> getListeners() {
|
||||||
return listeners;
|
return listeners;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,6 @@ package algorithms;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
import basics.route.Vehicle;
|
import basics.route.Vehicle;
|
||||||
import basics.route.VehicleImpl;
|
|
||||||
import basics.route.VehicleImpl.VehicleType;
|
import basics.route.VehicleImpl.VehicleType;
|
||||||
|
|
||||||
interface VehicleFleetManager {
|
interface VehicleFleetManager {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue