Skip to content

Commit

Permalink
combine eventHandler registration
Browse files Browse the repository at this point in the history
  • Loading branch information
kt86 committed Feb 7, 2025
1 parent 4811cec commit e18f641
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 114 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -106,26 +106,24 @@ protected void updateShipments() {
addShipmentLoadElement(lspShipment, tour);
addShipmentTransportElement(lspShipment, tour, serviceActivity);
addShipmentUnloadElement(lspShipment, serviceActivity);
addDistributionTourStartEventHandler(serviceActivity, lspShipment, resource, tour);
addDistributionServiceEventHandler(serviceActivity, lspShipment, resource);
addDistributionEventHandlers(serviceActivity, lspShipment, resource, tour);
}
}
}
}
case shipmentBased -> {
log.error("This is not implemented properly at the moment!");
//TODO needs to get fixed. KMT'Aug'24
for (TourElement element : tour.getTourElements()) {
if (element instanceof Tour.Delivery deliveryActivity) {
if (Objects.equals(lspShipment.getId().toString(), deliveryActivity.getShipment().getId().toString())) {
addShipmentLoadElement(lspShipment, tour);
addShipmentTransportElement(lspShipment, tour, deliveryActivity);
addShipmentUnloadElement(lspShipment, deliveryActivity);
addDistributionTourStartEventHandler(deliveryActivity, lspShipment, resource, tour);
addDistributionServiceEventHandler(deliveryActivity, lspShipment, resource);
}
}
}
// for (TourElement element : tour.getTourElements()) {
// if (element instanceof Tour.Delivery deliveryActivity) {
// if (Objects.equals(lspShipment.getId().toString(), deliveryActivity.getShipment().getId().toString())) {
// addShipmentLoadElement(lspShipment, tour);
// addShipmentTransportElement(lspShipment, tour, deliveryActivity);
// addShipmentUnloadElement(lspShipment, deliveryActivity);
// addDistributionEventHandlers(serviceActivity, lspShipment, resource, tour);
// }
// }
// }
}
default -> throw new IllegalStateException("Unexpected value: " + CarrierSchedulerUtils.getVrpLogic(carrier));
}
Expand Down Expand Up @@ -155,10 +153,8 @@ private void scheduleCarrierBasedOnServices(ArrayList<LspShipment> shipmentsToSc
VehicleType vehicleType = ResourceImplementationUtils.getVehicleTypeCollection(carrier).iterator().next();
if ((load + lspShipment.getSize()) > vehicleType.getCapacity().getOther().intValue()) {
load = 0;
Carrier auxiliaryCarrier =
CarrierSchedulerUtils.solveVrpWithJsprit(
createAuxiliaryCarrierServiceBased(shipmentsInCurrentTour, availabilityTimeOfLastShipment + cumulatedLoadingTime),
scenario);
Carrier auxiliaryCarrier = CarrierSchedulerUtils.solveVrpWithJsprit(
createAuxiliaryCarrierServiceBased(shipmentsInCurrentTour, availabilityTimeOfLastShipment + cumulatedLoadingTime), scenario);
scheduledPlans.add(auxiliaryCarrier.getSelectedPlan());
carrier.getServices().putAll(auxiliaryCarrier.getServices());
cumulatedLoadingTime = 0;
Expand All @@ -171,10 +167,8 @@ private void scheduleCarrierBasedOnServices(ArrayList<LspShipment> shipmentsToSc
}
//Restliche Sendungen in einem letzten Vrp planen
if (!shipmentsInCurrentTour.isEmpty()) {
Carrier auxiliaryCarrier =
CarrierSchedulerUtils.solveVrpWithJsprit(
createAuxiliaryCarrierServiceBased(shipmentsInCurrentTour, availabilityTimeOfLastShipment + cumulatedLoadingTime),
scenario);
Carrier auxiliaryCarrier = CarrierSchedulerUtils.solveVrpWithJsprit(
createAuxiliaryCarrierServiceBased(shipmentsInCurrentTour, availabilityTimeOfLastShipment + cumulatedLoadingTime), scenario);
scheduledPlans.add(auxiliaryCarrier.getSelectedPlan());
carrier.getServices().putAll(auxiliaryCarrier.getServices());
shipmentsInCurrentTour.clear();
Expand All @@ -194,14 +188,9 @@ private void scheduleCarrierBasedOnServices(ArrayList<LspShipment> shipmentsToSc
int tourIdIndex = 1;
for (CarrierPlan carrierPlan : scheduledPlans) {
for (ScheduledTour scheduledTour : carrierPlan.getScheduledTours()) {
Tour newTour =
scheduledTour
.getTour()
.duplicateWithNewId(Id.create("dist_" + tourIdIndex, Tour.class));
Tour newTour = scheduledTour.getTour().duplicateWithNewId(Id.create("dist_" + tourIdIndex, Tour.class));
tourIdIndex++;
ScheduledTour newScheduledTour =
ScheduledTour.newInstance(
newTour, scheduledTour.getVehicle(), scheduledTour.getDeparture());
ScheduledTour newScheduledTour = ScheduledTour.newInstance(newTour, scheduledTour.getVehicle(), scheduledTour.getDeparture());
scheduledToursUnified.add(newScheduledTour);
}
}
Expand Down Expand Up @@ -285,8 +274,7 @@ private CarrierShipment convertToCarrierShipment(LspShipment lspShipment) {


private void addShipmentLoadElement(LspShipment lspShipment, Tour tour) {
LspShipmentUtils.ScheduledShipmentLoadBuilder builder =
LspShipmentUtils.ScheduledShipmentLoadBuilder.newInstance();
LspShipmentUtils.ScheduledShipmentLoadBuilder builder = LspShipmentUtils.ScheduledShipmentLoadBuilder.newInstance();
builder.setResourceId(resource.getId());

for (LogisticChainElement element : resource.getClientElements()) {
Expand All @@ -308,18 +296,14 @@ private void addShipmentLoadElement(LspShipment lspShipment, Tour tour) {
builder.setEndTime(startTimeOfTransport);

LspShipmentPlanElement load = builder.build();
String idString =
load.getResourceId() + "" + load.getLogisticChainElement().getId() + load.getElementType();
String idString = load.getResourceId() + "" + load.getLogisticChainElement().getId() + load.getElementType();
Id<LspShipmentPlanElement> id = Id.create(idString, LspShipmentPlanElement.class);
LspShipmentUtils.getOrCreateShipmentPlan(super.lspPlan, lspShipment.getId())
.addPlanElement(id, load);
LspShipmentUtils.getOrCreateShipmentPlan(super.lspPlan, lspShipment.getId()).addPlanElement(id, load);
}

private void addShipmentTransportElement(
LspShipment lspShipment, Tour tour, Tour.TourActivity tourActivity) {
private void addShipmentTransportElement(LspShipment lspShipment, Tour tour, Tour.TourActivity tourActivity) {

LspShipmentUtils.ScheduledShipmentTransportBuilder builder =
LspShipmentUtils.ScheduledShipmentTransportBuilder.newInstance();
LspShipmentUtils.ScheduledShipmentTransportBuilder builder = LspShipmentUtils.ScheduledShipmentTransportBuilder.newInstance();
builder.setResourceId(resource.getId());

for (LogisticChainElement element : resource.getClientElements()) {
Expand All @@ -333,14 +317,9 @@ private void addShipmentTransportElement(
final int serviceIndex = tour.getTourElements().indexOf(tourActivity);
final Leg legBeforeService = (Leg) tour.getTourElements().get(serviceIndex - 1);
final double startTimeOfTransport = legAfterStart.getExpectedDepartureTime();
final double endTimeOfTransport =
legBeforeService.getExpectedTransportTime() + legBeforeService.getExpectedDepartureTime();
Assert.isTrue(
endTimeOfTransport >= startTimeOfTransport,
"latest End must be later than earliest start. start: "
+ startTimeOfTransport
+ " ; end: "
+ endTimeOfTransport);
final double endTimeOfTransport = legBeforeService.getExpectedTransportTime() + legBeforeService.getExpectedDepartureTime();
Assert.isTrue(endTimeOfTransport >= startTimeOfTransport,
"latest End must be later than earliest start. start: " + startTimeOfTransport + " ; end: " + endTimeOfTransport);

builder.setStartTime(startTimeOfTransport);
builder.setEndTime(endTimeOfTransport);
Expand All @@ -356,20 +335,13 @@ private void addShipmentTransportElement(
// services. See also MATSim issue #3510 kai/kai, oct'24
}
LspShipmentPlanElement transport = builder.build();
String idString =
transport.getResourceId()
+ ""
+ transport.getLogisticChainElement().getId()
+ transport.getElementType();
String idString = transport.getResourceId() + "" + transport.getLogisticChainElement().getId() + transport.getElementType();
Id<LspShipmentPlanElement> id = Id.create(idString, LspShipmentPlanElement.class);
LspShipmentUtils.getOrCreateShipmentPlan(super.lspPlan, lspShipment.getId())
.addPlanElement(id, transport);
LspShipmentUtils.getOrCreateShipmentPlan(super.lspPlan, lspShipment.getId()).addPlanElement(id, transport);
}

private void addShipmentUnloadElement(LspShipment tuple, Tour.TourActivity tourActivity) {

LspShipmentUtils.ScheduledShipmentUnloadBuilder builder =
LspShipmentUtils.ScheduledShipmentUnloadBuilder.newInstance();
LspShipmentUtils.ScheduledShipmentUnloadBuilder builder = LspShipmentUtils.ScheduledShipmentUnloadBuilder.newInstance();
builder.setResourceId(resource.getId());

for (LogisticChainElement element : resource.getClientElements()) {
Expand Down Expand Up @@ -399,30 +371,23 @@ private void addShipmentUnloadElement(LspShipment tuple, Tour.TourActivity tourA
// default -> {}
// }

Assert.isTrue(
endTime >= startTime,
"latest End must be later than earliest start. start: " + startTime + " ; end: " + endTime);
Assert.isTrue(endTime >= startTime, "latest End must be later than earliest start. start: " + startTime + " ; end: " + endTime);

builder.setStartTime(startTime);
builder.setEndTime(endTime);

LspShipmentPlanElement unload = builder.build();
String idString =
unload.getResourceId()
+ String.valueOf(unload.getLogisticChainElement().getId())
+ unload.getElementType();
String idString = unload.getResourceId() + String.valueOf(unload.getLogisticChainElement().getId()) + unload.getElementType();
Id<LspShipmentPlanElement> id = Id.create(idString, LspShipmentPlanElement.class);
LspShipmentUtils.getOrCreateShipmentPlan(super.lspPlan, tuple.getId())
.addPlanElement(id, unload);
LspShipmentUtils.getOrCreateShipmentPlan(super.lspPlan, tuple.getId()).addPlanElement(id, unload);
}

private Carrier createAuxiliaryCarrierServiceBased(ArrayList<LspShipment> shipmentsInCurrentTour, double startTime) {
final Id<Carrier> carrierId = Id.create(carrier.getId().toString() + carrierCnt, Carrier.class);
carrierCnt++;

CarrierVehicle carrierVehicle = carrier.getCarrierCapabilities().getCarrierVehicles().values().iterator().next();
CarrierVehicle cv = CarrierVehicle.Builder.newInstance(
carrierVehicle.getId(), carrierVehicle.getLinkId(), carrierVehicle.getType())
CarrierVehicle cv = CarrierVehicle.Builder.newInstance(carrierVehicle.getId(), carrierVehicle.getLinkId(), carrierVehicle.getType())
.setEarliestStart(startTime)
.setLatestEnd(24 * 60 * 60)
.build();
Expand All @@ -438,46 +403,27 @@ private Carrier createAuxiliaryCarrierServiceBased(ArrayList<LspShipment> shipme
return auxiliaryCarrier;
}

private void addDistributionServiceEventHandler(
Tour.TourActivity tourActivity,
LspShipment lspShipment,
LSPCarrierResource resource) {

for (LogisticChainElement element : this.resource.getClientElements()) {
if (element.getIncomingShipments().getLspShipmentsWTime().contains(lspShipment)) {
DistributionServiceStartEventHandler handler;
switch (tourActivity) {
case Tour.ServiceActivity serviceActivity-> handler = new DistributionServiceStartEventHandler(serviceActivity.getService(), lspShipment, element, resource, null);
case Tour.ShipmentBasedActivity shipmentBasedActivity-> handler = new DistributionServiceStartEventHandler(null, lspShipment, element, resource, shipmentBasedActivity.getShipment());
default -> throw new IllegalStateException("Unexpected value: " + tourActivity);
}

lspShipment.addSimulationTracker(handler);
break;
}
}
}

private void addDistributionTourStartEventHandler(
Tour.TourActivity tourActivity,
LspShipment lspShipment,
LSPCarrierResource resource,
Tour tour) {

for (LogisticChainElement element : this.resource.getClientElements()) {
if (element.getIncomingShipments().getLspShipmentsWTime().contains(lspShipment)) {
LSPTourStartEventHandler handler;
switch (tourActivity) {
case Tour.ServiceActivity serviceActivity-> handler = new LSPTourStartEventHandler(lspShipment, serviceActivity.getService(), element, resource, tour, null);
case Tour.ShipmentBasedActivity shipmentBasedActivity-> handler = new LSPTourStartEventHandler(lspShipment, null , element, resource, tour, shipmentBasedActivity.getShipment());
default -> throw new IllegalStateException("Unexpected value: " + tourActivity);
}

lspShipment.addSimulationTracker(handler);
break;
}
}
private void addDistributionEventHandlers(Tour.TourActivity tourActivity, LspShipment lspShipment, LSPCarrierResource resource, Tour tour) {
for (LogisticChainElement element : this.resource.getClientElements()) {
if (element.getIncomingShipments().getLspShipmentsWTime().contains(lspShipment)) {
DistributionServiceStartEventHandler serviceHandler;
LSPTourStartEventHandler tourHandler;
switch (tourActivity) {
case Tour.ServiceActivity serviceActivity -> {
serviceHandler = new DistributionServiceStartEventHandler(serviceActivity.getService(), lspShipment, element, resource, null);
tourHandler = new LSPTourStartEventHandler(lspShipment, serviceActivity.getService(), element, resource, tour, null);
}
case Tour.ShipmentBasedActivity shipmentBasedActivity -> {
serviceHandler = new DistributionServiceStartEventHandler(null, lspShipment, element, resource, shipmentBasedActivity.getShipment());
tourHandler = new LSPTourStartEventHandler(lspShipment, null, element, resource, tour, shipmentBasedActivity.getShipment());
}
default -> throw new IllegalStateException("Unexpected value: " + tourActivity);
}
lspShipment.addSimulationTracker(serviceHandler);
lspShipment.addSimulationTracker(tourHandler);
break;
}
}
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,8 @@
private final LSPCarrierResource resource;
private LspShipment lspShipment;

DistributionServiceStartEventHandler(
CarrierService carrierService,
LspShipment lspShipment,
LogisticChainElement element,
LSPCarrierResource resource,
CarrierShipment carrierShipment) {
DistributionServiceStartEventHandler(CarrierService carrierService, LspShipment lspShipment, LogisticChainElement element,
LSPCarrierResource resource, CarrierShipment carrierShipment) {
this.carrierShipment = carrierShipment;
this.carrierService = carrierService;
this.lspShipment = lspShipment;
Expand All @@ -68,7 +64,6 @@
@Override
public void reset(int iteration) {
// TODO Auto-generated method stub

}

@Override
Expand Down

0 comments on commit e18f641

Please sign in to comment.