mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
issue #62
This commit is contained in:
parent
d00f159404
commit
aff324fb3f
4 changed files with 98 additions and 12 deletions
|
|
@ -16,6 +16,8 @@
|
|||
******************************************************************************/
|
||||
package jsprit.core.algorithm.recreate;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import jsprit.core.algorithm.recreate.InsertionData.NoInsertionFound;
|
||||
import jsprit.core.algorithm.recreate.listener.InsertionListeners;
|
||||
import jsprit.core.problem.job.Job;
|
||||
|
|
@ -93,7 +95,7 @@ class Inserter {
|
|||
TourActivity pickupShipment = this.activityFactory.createPickup((Shipment)job);
|
||||
TourActivity deliverShipment = this.activityFactory.createDelivery((Shipment)job);
|
||||
if(!iData.getSelectedVehicle().isReturnToDepot()){
|
||||
if(iData.getDeliveryInsertionIndex()>=route.getTourActivities().getActivities().size()){
|
||||
if(iData.getDeliveryInsertionIndex()>=route.getActivities().size()){
|
||||
setEndLocation(route,(Shipment)job);
|
||||
}
|
||||
}
|
||||
|
|
@ -118,6 +120,8 @@ class Inserter {
|
|||
|
||||
private JobInsertionHandler jobInsertionHandler;
|
||||
|
||||
private static Logger log = Logger.getLogger(Inserter.class);
|
||||
|
||||
public Inserter(InsertionListeners insertionListeners) {
|
||||
this.insertionListeners = insertionListeners;
|
||||
new DefaultTourActivityFactory();
|
||||
|
|
@ -132,6 +136,7 @@ class Inserter {
|
|||
if(job == null) throw new IllegalStateException("cannot insert null-job");
|
||||
if(!(vehicleRoute.getVehicle().getId().toString().equals(insertionData.getSelectedVehicle().getId().toString()))){
|
||||
insertionListeners.informVehicleSwitched(vehicleRoute, vehicleRoute.getVehicle(), insertionData.getSelectedVehicle());
|
||||
// log.debug("vehicle switched from " + vehicleRoute.getVehicle().getId() + " to " + insertionData.getSelectedVehicle().getId());
|
||||
vehicleRoute.setVehicle(insertionData.getSelectedVehicle(), insertionData.getVehicleDepartureTime());
|
||||
}
|
||||
jobInsertionHandler.handleJobInsertion(job, insertionData, vehicleRoute);
|
||||
|
|
|
|||
|
|
@ -22,6 +22,8 @@ import java.util.Collections;
|
|||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import jsprit.core.algorithm.listener.IterationStartsListener;
|
||||
import jsprit.core.algorithm.recreate.listener.InsertionEndsListener;
|
||||
import jsprit.core.algorithm.recreate.listener.InsertionListener;
|
||||
|
|
@ -50,6 +52,8 @@ import jsprit.core.problem.solution.route.state.StateFactory.States;
|
|||
|
||||
public class StateManager implements RouteAndActivityStateGetter, IterationStartsListener, RuinListener, InsertionStartsListener, JobInsertedListener, InsertionEndsListener {
|
||||
|
||||
private static Logger log = Logger.getLogger(StateManager.class);
|
||||
|
||||
private Map<VehicleRoute,States> vehicleRouteStates = new HashMap<VehicleRoute, States>();
|
||||
|
||||
private Map<TourActivity,States> activityStates = new HashMap<TourActivity, States>();
|
||||
|
|
@ -245,6 +249,7 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
|||
|
||||
@Override
|
||||
public void informJobInserted(Job job2insert, VehicleRoute inRoute, double additionalCosts, double additionalTime) {
|
||||
// log.debug("insert " + job2insert + " in " + inRoute);
|
||||
insertionListeners.informJobInserted(job2insert, inRoute, additionalCosts, additionalTime);
|
||||
for(RouteVisitor v : routeVisitors){ v.visit(inRoute); }
|
||||
routeActivityVisitor.visit(inRoute);
|
||||
|
|
@ -273,6 +278,7 @@ public class StateManager implements RouteAndActivityStateGetter, IterationStart
|
|||
|
||||
@Override
|
||||
public void ruinEnds(Collection<VehicleRoute> routes, Collection<Job> unassignedJobs) {
|
||||
// log.debug("ruin ends");
|
||||
ruinListeners.ruinEnds(routes, unassignedJobs);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -280,16 +280,6 @@ public class VehicleRoute {
|
|||
setStartAndEnd(vehicle, vehicleDepTime);
|
||||
}
|
||||
|
||||
public void setDepartureTime(double vehicleDepTime){
|
||||
if(start == null) throw new IllegalStateException("cannot set departureTime without having a vehicle on this route. use setVehicle(vehicle,departureTime) instead.");
|
||||
start.setEndTime(vehicleDepTime);
|
||||
}
|
||||
|
||||
public double getDepartureTime(){
|
||||
if(start == null) throw new IllegalStateException("cannot get departureTime without having a vehicle on this route. use setVehicle(vehicle,departureTime) instead.");
|
||||
return start.getEndTime();
|
||||
}
|
||||
|
||||
private void setStartAndEnd(Vehicle vehicle, double vehicleDepTime) {
|
||||
if(!(vehicle instanceof NoVehicle)){
|
||||
if(start == null && end == null){
|
||||
|
|
@ -307,7 +297,16 @@ public class VehicleRoute {
|
|||
|
||||
}
|
||||
|
||||
|
||||
public void setDepartureTime(double vehicleDepTime){
|
||||
if(start == null) throw new IllegalStateException("cannot set departureTime without having a vehicle on this route. use setVehicle(vehicle,departureTime) instead.");
|
||||
start.setEndTime(vehicleDepTime);
|
||||
}
|
||||
|
||||
public double getDepartureTime(){
|
||||
if(start == null) throw new IllegalStateException("cannot get departureTime without having a vehicle on this route. use setVehicle(vehicle,departureTime) instead.");
|
||||
return start.getEndTime();
|
||||
}
|
||||
|
||||
public boolean isEmpty() {
|
||||
return tourActivities.isEmpty();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue