mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
add insertion index to JobInsertionContext
This commit is contained in:
parent
278f1149ab
commit
0e80c0ab50
3 changed files with 25 additions and 6 deletions
|
|
@ -23,6 +23,7 @@ import jsprit.core.problem.cost.VehicleRoutingTransportCosts;
|
||||||
import jsprit.core.problem.driver.Driver;
|
import jsprit.core.problem.driver.Driver;
|
||||||
import jsprit.core.problem.job.Job;
|
import jsprit.core.problem.job.Job;
|
||||||
import jsprit.core.problem.job.Service;
|
import jsprit.core.problem.job.Service;
|
||||||
|
import jsprit.core.problem.misc.ActivityContext;
|
||||||
import jsprit.core.problem.misc.JobInsertionContext;
|
import jsprit.core.problem.misc.JobInsertionContext;
|
||||||
import jsprit.core.problem.solution.route.VehicleRoute;
|
import jsprit.core.problem.solution.route.VehicleRoute;
|
||||||
import jsprit.core.problem.solution.route.activity.End;
|
import jsprit.core.problem.solution.route.activity.End;
|
||||||
|
|
@ -134,6 +135,9 @@ final class ServiceInsertionCalculator implements JobInsertionCostsCalculator {
|
||||||
for(TimeWindow timeWindow : service.getTimeWindows()) {
|
for(TimeWindow timeWindow : service.getTimeWindows()) {
|
||||||
deliveryAct2Insert.setTheoreticalEarliestOperationStartTime(timeWindow.getStart());
|
deliveryAct2Insert.setTheoreticalEarliestOperationStartTime(timeWindow.getStart());
|
||||||
deliveryAct2Insert.setTheoreticalLatestOperationStartTime(timeWindow.getEnd());
|
deliveryAct2Insert.setTheoreticalLatestOperationStartTime(timeWindow.getEnd());
|
||||||
|
ActivityContext activityContext = new ActivityContext();
|
||||||
|
activityContext.setInsertionIndex(actIndex);
|
||||||
|
insertionContext.setActivityContext(activityContext);
|
||||||
ConstraintsStatus status = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct, deliveryAct2Insert, nextAct, prevActStartTime);
|
ConstraintsStatus status = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct, deliveryAct2Insert, nextAct, prevActStartTime);
|
||||||
if (status.equals(ConstraintsStatus.FULFILLED)) {
|
if (status.equals(ConstraintsStatus.FULFILLED)) {
|
||||||
double additionalICostsAtActLevel = softActivityConstraint.getCosts(insertionContext, prevAct, deliveryAct2Insert, nextAct, prevActStartTime);
|
double additionalICostsAtActLevel = softActivityConstraint.getCosts(insertionContext, prevAct, deliveryAct2Insert, nextAct, prevActStartTime);
|
||||||
|
|
|
||||||
|
|
@ -141,6 +141,9 @@ final class ShipmentInsertionCalculator implements JobInsertionCostsCalculator {
|
||||||
for(TimeWindow pickupTimeWindow : shipment.getPickupTimeWindows()) {
|
for(TimeWindow pickupTimeWindow : shipment.getPickupTimeWindows()) {
|
||||||
pickupShipment.setTheoreticalEarliestOperationStartTime(pickupTimeWindow.getStart());
|
pickupShipment.setTheoreticalEarliestOperationStartTime(pickupTimeWindow.getStart());
|
||||||
pickupShipment.setTheoreticalLatestOperationStartTime(pickupTimeWindow.getEnd());
|
pickupShipment.setTheoreticalLatestOperationStartTime(pickupTimeWindow.getEnd());
|
||||||
|
ActivityContext activityContext = new ActivityContext();
|
||||||
|
activityContext.setInsertionIndex(i);
|
||||||
|
insertionContext.setActivityContext(activityContext);
|
||||||
ConstraintsStatus pickupShipmentConstraintStatus = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct, pickupShipment, nextAct, prevActEndTime);
|
ConstraintsStatus pickupShipmentConstraintStatus = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct, pickupShipment, nextAct, prevActEndTime);
|
||||||
if (pickupShipmentConstraintStatus.equals(ConstraintsStatus.NOT_FULFILLED)) {
|
if (pickupShipmentConstraintStatus.equals(ConstraintsStatus.NOT_FULFILLED)) {
|
||||||
pickupInsertionNotFulfilledBreak = false;
|
pickupInsertionNotFulfilledBreak = false;
|
||||||
|
|
@ -184,7 +187,9 @@ final class ShipmentInsertionCalculator implements JobInsertionCostsCalculator {
|
||||||
for (TimeWindow deliveryTimeWindow : shipment.getDeliveryTimeWindows()) {
|
for (TimeWindow deliveryTimeWindow : shipment.getDeliveryTimeWindows()) {
|
||||||
deliverShipment.setTheoreticalEarliestOperationStartTime(deliveryTimeWindow.getStart());
|
deliverShipment.setTheoreticalEarliestOperationStartTime(deliveryTimeWindow.getStart());
|
||||||
deliverShipment.setTheoreticalLatestOperationStartTime(deliveryTimeWindow.getEnd());
|
deliverShipment.setTheoreticalLatestOperationStartTime(deliveryTimeWindow.getEnd());
|
||||||
|
ActivityContext activityContext_ = new ActivityContext();
|
||||||
|
activityContext.setInsertionIndex(j);
|
||||||
|
insertionContext.setActivityContext(activityContext_);
|
||||||
ConstraintsStatus deliverShipmentConstraintStatus = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct_deliveryLoop, deliverShipment, nextAct_deliveryLoop, prevActEndTime_deliveryLoop);
|
ConstraintsStatus deliverShipmentConstraintStatus = hardActivityLevelConstraint.fulfilled(insertionContext, prevAct_deliveryLoop, deliverShipment, nextAct_deliveryLoop, prevActEndTime_deliveryLoop);
|
||||||
if (deliverShipmentConstraintStatus.equals(ConstraintsStatus.FULFILLED)) {
|
if (deliverShipmentConstraintStatus.equals(ConstraintsStatus.FULFILLED)) {
|
||||||
double additionalDeliveryICosts = softActivityConstraint.getCosts(insertionContext, prevAct_deliveryLoop, deliverShipment, nextAct_deliveryLoop, prevActEndTime_deliveryLoop);
|
double additionalDeliveryICosts = softActivityConstraint.getCosts(insertionContext, prevAct_deliveryLoop, deliverShipment, nextAct_deliveryLoop, prevActEndTime_deliveryLoop);
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,9 @@ public class JobInsertionContext {
|
||||||
|
|
||||||
private List<TourActivity> associatedActivities = new ArrayList<TourActivity>();
|
private List<TourActivity> associatedActivities = new ArrayList<TourActivity>();
|
||||||
|
|
||||||
private ActivityContext pickupContext;
|
private ActivityContext activityContext;
|
||||||
|
|
||||||
|
private ActivityContext relatedActivityContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the existing route where the .getJob() needs to be inserted in.
|
* Returns the existing route where the .getJob() needs to be inserted in.
|
||||||
|
|
@ -116,10 +118,10 @@ public class JobInsertionContext {
|
||||||
/**
|
/**
|
||||||
* Sets pickup context.
|
* Sets pickup context.
|
||||||
*
|
*
|
||||||
* @param pickupContext pickup context
|
* @param relatedActivityContext pickup context
|
||||||
*/
|
*/
|
||||||
public void setRelatedActivityContext(ActivityContext pickupContext) {
|
public void setRelatedActivityContext(ActivityContext relatedActivityContext) {
|
||||||
this.pickupContext = pickupContext;
|
this.relatedActivityContext = relatedActivityContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -128,6 +130,14 @@ public class JobInsertionContext {
|
||||||
* @return pickup context
|
* @return pickup context
|
||||||
*/
|
*/
|
||||||
public ActivityContext getRelatedActivityContext() {
|
public ActivityContext getRelatedActivityContext() {
|
||||||
return this.pickupContext;
|
return this.relatedActivityContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setActivityContext(ActivityContext activityContext){
|
||||||
|
this.activityContext = activityContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ActivityContext getActivityContext(){
|
||||||
|
return this.activityContext;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue