mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
modeling pickups and deliveries
This commit is contained in:
parent
c55d67e3c2
commit
7d56aed4c5
11 changed files with 377 additions and 162 deletions
|
|
@ -0,0 +1,17 @@
|
||||||
|
package basics.route;
|
||||||
|
|
||||||
|
import basics.Shipment;
|
||||||
|
|
||||||
|
public class DefaultShipmentActivityFactory implements TourShipmentActivityFactory{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TourActivity createPickup(Shipment shipment) {
|
||||||
|
return new PickupShipment(shipment);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TourActivity createDelivery(Shipment shipment) {
|
||||||
|
return new DeliverShipment(shipment);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -26,13 +26,13 @@ public class DefaultTourActivityFactory implements TourActivityFactory{
|
||||||
public TourActivity createActivity(Service service) {
|
public TourActivity createActivity(Service service) {
|
||||||
TourActivity act;
|
TourActivity act;
|
||||||
if(service instanceof Pickup){
|
if(service instanceof Pickup){
|
||||||
act = new PickupActivity((Pickup) service);
|
act = new PickupService((Pickup) service);
|
||||||
}
|
}
|
||||||
else if(service instanceof Delivery){
|
else if(service instanceof Delivery){
|
||||||
act = new DeliveryActivity((Delivery) service);
|
act = new DeliverService((Delivery) service);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
act = ServiceActivity.newInstance(service);
|
act = new PickupService(service);
|
||||||
}
|
}
|
||||||
return act;
|
return act;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
84
jsprit-core/src/main/java/basics/route/DeliverService.java
Normal file
84
jsprit-core/src/main/java/basics/route/DeliverService.java
Normal file
|
|
@ -0,0 +1,84 @@
|
||||||
|
package basics.route;
|
||||||
|
|
||||||
|
import basics.Delivery;
|
||||||
|
|
||||||
|
public final class DeliverService implements DeliveryActivity{
|
||||||
|
|
||||||
|
private Delivery delivery;
|
||||||
|
|
||||||
|
private double arrTime;
|
||||||
|
|
||||||
|
private double endTime;
|
||||||
|
|
||||||
|
public DeliverService(Delivery delivery) {
|
||||||
|
super();
|
||||||
|
this.delivery = delivery;
|
||||||
|
}
|
||||||
|
|
||||||
|
private DeliverService(DeliverService deliveryActivity){
|
||||||
|
this.delivery=deliveryActivity.getJob();
|
||||||
|
this.arrTime=deliveryActivity.getArrTime();
|
||||||
|
this.endTime=deliveryActivity.getEndTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCapacityDemand() {
|
||||||
|
return delivery.getCapacityDemand()*-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return delivery.getType();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLocationId() {
|
||||||
|
return delivery.getLocationId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getTheoreticalEarliestOperationStartTime() {
|
||||||
|
return delivery.getTimeWindow().getStart();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getTheoreticalLatestOperationStartTime() {
|
||||||
|
return delivery.getTimeWindow().getEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getOperationTime() {
|
||||||
|
return delivery.getServiceDuration();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getArrTime() {
|
||||||
|
return arrTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getEndTime() {
|
||||||
|
return endTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setArrTime(double arrTime) {
|
||||||
|
this.arrTime=arrTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setEndTime(double endTime) {
|
||||||
|
this.endTime=endTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TourActivity duplicate() {
|
||||||
|
return new DeliverService(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Delivery getJob() {
|
||||||
|
return delivery;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
83
jsprit-core/src/main/java/basics/route/DeliverShipment.java
Normal file
83
jsprit-core/src/main/java/basics/route/DeliverShipment.java
Normal file
|
|
@ -0,0 +1,83 @@
|
||||||
|
package basics.route;
|
||||||
|
|
||||||
|
import basics.Job;
|
||||||
|
import basics.Shipment;
|
||||||
|
|
||||||
|
public final class DeliverShipment implements DeliveryActivity{
|
||||||
|
|
||||||
|
private Shipment shipment;
|
||||||
|
private double endTime;
|
||||||
|
private double arrTime;
|
||||||
|
|
||||||
|
public DeliverShipment(Shipment shipment) {
|
||||||
|
super();
|
||||||
|
this.shipment = shipment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DeliverShipment(DeliverShipment deliveryShipmentActivity) {
|
||||||
|
this.shipment = (Shipment) deliveryShipmentActivity.getJob();
|
||||||
|
this.arrTime = deliveryShipmentActivity.getArrTime();
|
||||||
|
this.endTime = deliveryShipmentActivity.getEndTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Job getJob() {
|
||||||
|
return shipment;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCapacityDemand() {
|
||||||
|
return shipment.getSize()*-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "DeliverShipment";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLocationId() {
|
||||||
|
return shipment.getDeliveryLocation();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getTheoreticalEarliestOperationStartTime() {
|
||||||
|
return shipment.getDeliveryTimeWindow().getStart();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getTheoreticalLatestOperationStartTime() {
|
||||||
|
return shipment.getDeliveryTimeWindow().getEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getOperationTime() {
|
||||||
|
return shipment.getDeliveryServiceTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getArrTime() {
|
||||||
|
return arrTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getEndTime() {
|
||||||
|
return endTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setArrTime(double arrTime) {
|
||||||
|
this.arrTime=arrTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setEndTime(double endTime) {
|
||||||
|
this.endTime=endTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TourActivity duplicate() {
|
||||||
|
return new DeliverShipment(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -19,83 +19,7 @@ package basics.route;
|
||||||
import basics.Delivery;
|
import basics.Delivery;
|
||||||
import basics.route.TourActivity.JobActivity;
|
import basics.route.TourActivity.JobActivity;
|
||||||
|
|
||||||
public class DeliveryActivity implements JobActivity<Delivery>{
|
public interface DeliveryActivity extends JobActivity{
|
||||||
|
|
||||||
private Delivery delivery;
|
|
||||||
|
|
||||||
private double arrTime;
|
|
||||||
|
|
||||||
private double endTime;
|
|
||||||
|
|
||||||
public DeliveryActivity(Delivery delivery) {
|
|
||||||
super();
|
|
||||||
this.delivery = delivery;
|
|
||||||
}
|
|
||||||
|
|
||||||
private DeliveryActivity(DeliveryActivity deliveryActivity){
|
|
||||||
this.delivery=deliveryActivity.getJob();
|
|
||||||
this.arrTime=deliveryActivity.getArrTime();
|
|
||||||
this.endTime=deliveryActivity.getEndTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getCapacityDemand() {
|
|
||||||
return delivery.getCapacityDemand()*-1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return delivery.getType();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getLocationId() {
|
|
||||||
return delivery.getLocationId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public double getTheoreticalEarliestOperationStartTime() {
|
|
||||||
return delivery.getTimeWindow().getStart();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public double getTheoreticalLatestOperationStartTime() {
|
|
||||||
return delivery.getTimeWindow().getEnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public double getOperationTime() {
|
|
||||||
return delivery.getServiceDuration();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public double getArrTime() {
|
|
||||||
return arrTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public double getEndTime() {
|
|
||||||
return endTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setArrTime(double arrTime) {
|
|
||||||
this.arrTime=arrTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setEndTime(double endTime) {
|
|
||||||
this.endTime=endTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TourActivity duplicate() {
|
|
||||||
return new DeliveryActivity(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Delivery getJob() {
|
|
||||||
return delivery;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,87 +16,9 @@
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package basics.route;
|
package basics.route;
|
||||||
|
|
||||||
import basics.Pickup;
|
|
||||||
import basics.route.TourActivity.JobActivity;
|
import basics.route.TourActivity.JobActivity;
|
||||||
|
|
||||||
public class PickupActivity implements JobActivity<Pickup>{
|
public interface PickupActivity extends JobActivity{
|
||||||
|
|
||||||
private Pickup pickup;
|
|
||||||
|
|
||||||
private double arrTime;
|
|
||||||
|
|
||||||
private double depTime;
|
|
||||||
|
|
||||||
public PickupActivity(Pickup pickup) {
|
|
||||||
super();
|
|
||||||
this.pickup = pickup;
|
|
||||||
}
|
|
||||||
|
|
||||||
private PickupActivity(PickupActivity pickupActivity){
|
|
||||||
this.pickup=pickupActivity.getJob();
|
|
||||||
this.arrTime=pickupActivity.getArrTime();
|
|
||||||
this.depTime=pickupActivity.getEndTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getName() {
|
|
||||||
return pickup.getType();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getLocationId() {
|
|
||||||
return pickup.getLocationId();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public double getTheoreticalEarliestOperationStartTime() {
|
|
||||||
return pickup.getTimeWindow().getStart();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public double getTheoreticalLatestOperationStartTime() {
|
|
||||||
return pickup.getTimeWindow().getEnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public double getOperationTime() {
|
|
||||||
return pickup.getServiceDuration();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public double getArrTime() {
|
|
||||||
return arrTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public double getEndTime() {
|
|
||||||
return depTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setArrTime(double arrTime) {
|
|
||||||
this.arrTime=arrTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setEndTime(double endTime) {
|
|
||||||
this.depTime=endTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TourActivity duplicate() {
|
|
||||||
return new PickupActivity(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Pickup getJob() {
|
|
||||||
return pickup;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getCapacityDemand() {
|
|
||||||
return pickup.getCapacityDemand();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
91
jsprit-core/src/main/java/basics/route/PickupService.java
Normal file
91
jsprit-core/src/main/java/basics/route/PickupService.java
Normal file
|
|
@ -0,0 +1,91 @@
|
||||||
|
package basics.route;
|
||||||
|
|
||||||
|
import basics.Pickup;
|
||||||
|
import basics.Service;
|
||||||
|
|
||||||
|
public final class PickupService implements PickupActivity{
|
||||||
|
|
||||||
|
private Service pickup;
|
||||||
|
|
||||||
|
private double arrTime;
|
||||||
|
|
||||||
|
private double depTime;
|
||||||
|
|
||||||
|
public PickupService(Pickup pickup) {
|
||||||
|
super();
|
||||||
|
this.pickup = pickup;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PickupService(Service service){
|
||||||
|
this.pickup = service;
|
||||||
|
}
|
||||||
|
|
||||||
|
private PickupService(PickupService pickupActivity){
|
||||||
|
this.pickup=pickupActivity.getJob();
|
||||||
|
this.arrTime=pickupActivity.getArrTime();
|
||||||
|
this.depTime=pickupActivity.getEndTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return pickup.getType();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLocationId() {
|
||||||
|
return pickup.getLocationId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getTheoreticalEarliestOperationStartTime() {
|
||||||
|
return pickup.getTimeWindow().getStart();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getTheoreticalLatestOperationStartTime() {
|
||||||
|
return pickup.getTimeWindow().getEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getOperationTime() {
|
||||||
|
return pickup.getServiceDuration();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getArrTime() {
|
||||||
|
return arrTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getEndTime() {
|
||||||
|
return depTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setArrTime(double arrTime) {
|
||||||
|
this.arrTime=arrTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setEndTime(double endTime) {
|
||||||
|
this.depTime=endTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TourActivity duplicate() {
|
||||||
|
return new PickupService(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Service getJob() {
|
||||||
|
return pickup;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCapacityDemand() {
|
||||||
|
return pickup.getCapacityDemand();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
83
jsprit-core/src/main/java/basics/route/PickupShipment.java
Normal file
83
jsprit-core/src/main/java/basics/route/PickupShipment.java
Normal file
|
|
@ -0,0 +1,83 @@
|
||||||
|
package basics.route;
|
||||||
|
|
||||||
|
import basics.Job;
|
||||||
|
import basics.Shipment;
|
||||||
|
|
||||||
|
public final class PickupShipment implements PickupActivity{
|
||||||
|
|
||||||
|
private Shipment shipment;
|
||||||
|
private double endTime;
|
||||||
|
private double arrTime;
|
||||||
|
|
||||||
|
public PickupShipment(Shipment shipment) {
|
||||||
|
super();
|
||||||
|
this.shipment = shipment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PickupShipment(PickupShipment pickupShipmentActivity) {
|
||||||
|
this.shipment = (Shipment) pickupShipmentActivity.getJob();
|
||||||
|
this.arrTime = pickupShipmentActivity.getArrTime();
|
||||||
|
this.endTime = pickupShipmentActivity.getEndTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Job getJob() {
|
||||||
|
return shipment;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCapacityDemand() {
|
||||||
|
return shipment.getSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "PickupShipment";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLocationId() {
|
||||||
|
return shipment.getPickupLocation();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getTheoreticalEarliestOperationStartTime() {
|
||||||
|
return shipment.getPickupTimeWindow().getStart();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getTheoreticalLatestOperationStartTime() {
|
||||||
|
return shipment.getPickupTimeWindow().getEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getOperationTime() {
|
||||||
|
return shipment.getPickupServiceTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getArrTime() {
|
||||||
|
return arrTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double getEndTime() {
|
||||||
|
return endTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setArrTime(double arrTime) {
|
||||||
|
this.arrTime=arrTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setEndTime(double endTime) {
|
||||||
|
this.endTime=endTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TourActivity duplicate() {
|
||||||
|
return new PickupShipment(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -19,7 +19,7 @@ package basics.route;
|
||||||
import basics.Service;
|
import basics.Service;
|
||||||
import basics.route.TourActivity.JobActivity;
|
import basics.route.TourActivity.JobActivity;
|
||||||
|
|
||||||
public class ServiceActivity implements JobActivity<Service>{
|
public class ServiceActivity implements JobActivity{
|
||||||
|
|
||||||
public static int counter = 0;
|
public static int counter = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,9 +21,9 @@ import basics.Job;
|
||||||
|
|
||||||
public interface TourActivity {
|
public interface TourActivity {
|
||||||
|
|
||||||
public interface JobActivity<T extends Job> extends TourActivity {
|
public interface JobActivity extends TourActivity {
|
||||||
|
|
||||||
public T getJob();
|
public Job getJob();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
package basics.route;
|
||||||
|
|
||||||
|
import basics.Shipment;
|
||||||
|
|
||||||
|
public interface TourShipmentActivityFactory {
|
||||||
|
|
||||||
|
public TourActivity createPickup(Shipment shipment);
|
||||||
|
|
||||||
|
public TourActivity createDelivery(Shipment shipment);
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue