Skip to content

Commit

Permalink
Merge branch 'master' into drtGroupBookings
Browse files Browse the repository at this point in the history
# Conflicts:
#	contribs/drt/src/main/java/org/matsim/contrib/drt/analysis/DrtAnalysisControlerListener.java
#	contribs/drt/src/main/java/org/matsim/contrib/drt/prebooking/PrebookingManager.java
#	contribs/drt/src/main/java/org/matsim/contrib/drt/prebooking/PrebookingStopActivity.java
#	contribs/drt/src/main/java/org/matsim/contrib/drt/prebooking/analysis/PrebookingAnalysisHandler.java
  • Loading branch information
nkuehnel committed Nov 21, 2023
2 parents 03bc26b + c6639f3 commit 3f7b8b8
Show file tree
Hide file tree
Showing 32 changed files with 2,151 additions and 93 deletions.
5 changes: 5 additions & 0 deletions contribs/drt-extensions/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,11 @@
<version>16.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
</dependency>

</dependencies>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,14 @@ public void addDropoffRequest(AcceptedDrtRequest request) {
public void addPickupRequest(AcceptedDrtRequest request) {
delegate.addPickupRequest(request);
}

@Override
public void removePickupRequest(Id<Request> requestId) {
delegate.removePickupRequest(requestId);
}

@Override
public void removeDropoffRequest(Id<Request> requestId) {
delegate.removeDropoffRequest(requestId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,14 @@ public void addDropoffRequest(AcceptedDrtRequest request) {
public void addPickupRequest(AcceptedDrtRequest request) {
delegate.addPickupRequest(request);
}

@Override
public void removePickupRequest(Id<Request> requestId) {
delegate.removePickupRequest(requestId);
}

@Override
public void removeDropoffRequest(Id<Request> requestId) {
delegate.removeDropoffRequest(requestId);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package org.matsim.contrib.drt.extension.operations.shifts.schedule;

import static org.matsim.contrib.drt.schedule.DrtTaskBaseType.STOP;

import java.util.Map;

import org.matsim.api.core.v01.Id;
import org.matsim.api.core.v01.network.Link;
import org.matsim.contrib.drt.extension.operations.operationFacilities.OperationFacility;
Expand All @@ -11,10 +15,6 @@
import org.matsim.contrib.dvrp.optimizer.Request;
import org.matsim.contrib.dvrp.schedule.DefaultStayTask;

import java.util.Map;

import static org.matsim.contrib.drt.schedule.DrtTaskBaseType.STOP;

/**
* A task representing stopping and waiting for a new shift.
* @author nkuehnel / MOIA
Expand Down Expand Up @@ -64,5 +64,15 @@ public void addDropoffRequest(AcceptedDrtRequest request) {
public void addPickupRequest(AcceptedDrtRequest request) {
delegate.addPickupRequest(request);
}

@Override
public void removePickupRequest(Id<Request> requestId) {
delegate.removePickupRequest(requestId);
}

@Override
public void removeDropoffRequest(Id<Request> requestId) {
delegate.removeDropoffRequest(requestId);
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,24 @@

package org.matsim.contrib.drt.extension.edrt.run;

import static org.junit.Assert.assertEquals;

import java.net.URL;

import org.junit.Test;
import org.matsim.contrib.drt.prebooking.PrebookingParams;
import org.matsim.contrib.drt.prebooking.logic.ProbabilityBasedPrebookingLogic;
import org.matsim.contrib.drt.run.DrtConfigGroup;
import org.matsim.contrib.drt.run.MultiModeDrtConfigGroup;
import org.matsim.contrib.dvrp.passenger.PassengerRequestRejectedEvent;
import org.matsim.contrib.dvrp.passenger.PassengerRequestRejectedEventHandler;
import org.matsim.contrib.dvrp.passenger.PassengerRequestScheduledEvent;
import org.matsim.contrib.dvrp.passenger.PassengerRequestScheduledEventHandler;
import org.matsim.contrib.dvrp.run.DvrpConfigGroup;
import org.matsim.contrib.ev.EvConfigGroup;
import org.matsim.core.config.Config;
import org.matsim.core.config.ConfigUtils;
import org.matsim.core.controler.AbstractModule;
import org.matsim.core.controler.Controler;
import org.matsim.core.utils.io.IOUtils;
import org.matsim.examples.ExamplesUtils;
Expand Down Expand Up @@ -57,6 +64,50 @@ public void testWithPrebooking() {
Controler controller = RunEDrtScenario.createControler(config, false);
ProbabilityBasedPrebookingLogic.install(controller, drtConfig, 0.5, 4.0 * 3600.0);

PrebookingTracker tracker = new PrebookingTracker();
tracker.install(controller);

controller.run();

assertEquals(74, tracker.immediateScheduled);
assertEquals(198, tracker.prebookedScheduled);
assertEquals(116, tracker.immediateRejected);
assertEquals(7, tracker.prebookedRejected);
}

static private class PrebookingTracker implements PassengerRequestRejectedEventHandler, PassengerRequestScheduledEventHandler {
int immediateScheduled = 0;
int prebookedScheduled = 0;
int immediateRejected = 0;
int prebookedRejected = 0;

@Override
public void handleEvent(PassengerRequestScheduledEvent event) {
if (event.getRequestId().toString().contains("prebooked")) {
prebookedScheduled++;
} else {
immediateScheduled++;
}
}

@Override
public void handleEvent(PassengerRequestRejectedEvent event) {
if (event.getRequestId().toString().contains("prebooked")) {
prebookedRejected++;
} else {
immediateRejected++;
}
}

void install(Controler controller) {
PrebookingTracker thisTracker = this;

controller.addOverridingModule(new AbstractModule() {
@Override
public void install() {
addEventHandlerBinding().toInstance(thisTracker);
}
});
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
import org.jfree.data.xy.XYSeries;
import org.matsim.api.core.v01.Coord;
import org.matsim.api.core.v01.Id;
import org.matsim.api.core.v01.events.PersonDepartureEvent;
import org.matsim.api.core.v01.events.PersonMoneyEvent;
import org.matsim.api.core.v01.network.Link;
import org.matsim.api.core.v01.network.Network;
Expand All @@ -51,7 +50,6 @@
import org.matsim.contrib.dvrp.fleet.DvrpVehicleSpecification;
import org.matsim.contrib.dvrp.fleet.FleetSpecification;
import org.matsim.contrib.dvrp.optimizer.Request;
import org.matsim.contrib.dvrp.passenger.PassengerDroppedOffEvent;
import org.matsim.contrib.dvrp.passenger.PassengerPickedUpEvent;
import org.matsim.contrib.dvrp.passenger.PassengerRequestRejectedEvent;
import org.matsim.core.config.Config;
Expand All @@ -78,7 +76,6 @@
import java.util.function.Function;
import java.util.stream.Collectors;

import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.toList;

/**
Expand All @@ -103,8 +100,8 @@ public class DrtAnalysisControlerListener implements IterationEndsListener, Shut
private final String delimiter;

DrtAnalysisControlerListener(Config config, DrtConfigGroup drtCfg, FleetSpecification fleet, DrtVehicleDistanceStats drtVehicleStats,
MatsimServices matsimServices, Network network, DrtEventSequenceCollector drtEventSequenceCollector,
VehicleOccupancyProfileCalculator vehicleOccupancyProfileCalculator) {
MatsimServices matsimServices, Network network, DrtEventSequenceCollector drtEventSequenceCollector,
VehicleOccupancyProfileCalculator vehicleOccupancyProfileCalculator) {
this.drtVehicleStats = drtVehicleStats;
this.matsimServices = matsimServices;
this.network = network;
Expand Down Expand Up @@ -185,10 +182,11 @@ public void notifyIterationEnds(IterationEndsEvent event) {
.collect(toList());

collection2Text(drtEventSequenceCollector.getRejectedRequestSequences().values(), filename(event, "drt_rejections", ".csv"),
String.join(delimiter, "time", "personIds", "requestId", "fromLinkId", "toLinkId", "fromX", "fromY", "toX", "toY"), seq -> {
String.join(delimiter, "time", "personIds", "requestId", "fromLinkId", "toLinkId", "fromX", "fromY", "toX", "toY", "cause"), seq -> {
DrtRequestSubmittedEvent submission = seq.getSubmitted();
Coord fromCoord = network.getLinks().get(submission.getFromLinkId()).getToNode().getCoord();
Coord toCoord = network.getLinks().get(submission.getToLinkId()).getToNode().getCoord();
PassengerRequestRejectedEvent rejection = seq.getRejected().get();
return String.join(delimiter, submission.getTime() + "",//
submission.getPersonIds().stream().map(Object::toString).collect(Collectors.joining("-")) + "",//
submission.getRequestId() + "",//
Expand All @@ -197,7 +195,8 @@ public void notifyIterationEnds(IterationEndsEvent event) {
fromCoord.getX() + "",//
fromCoord.getY() + "",//
toCoord.getX() + "",//
toCoord.getY() + "");
toCoord.getY() + "",//
rejection.getCause());
});

double rejectionRate = (double) drtEventSequenceCollector.getRejectedRequestSequences().size()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import static org.matsim.contrib.drt.schedule.DrtTaskBaseType.getBaseTypeOrElseThrow;

import org.matsim.contrib.drt.prebooking.abandon.AbandonVoter;
import org.matsim.contrib.drt.schedule.DrtStopTask;
import org.matsim.contrib.drt.schedule.DrtTaskBaseType;
import org.matsim.contrib.drt.stops.PassengerStopDurationProvider;
Expand All @@ -27,12 +28,17 @@ public class PrebookingActionCreator implements VrpAgentLogic.DynActionCreator {
private final VrpAgentLogic.DynActionCreator delegate;
private final PassengerHandler passengerHandler;
private final PassengerStopDurationProvider stopDurationProvider;
private final PrebookingManager prebookingManager;
private final AbandonVoter abandonVoter;

public PrebookingActionCreator(PassengerHandler passengerHandler, VrpAgentLogic.DynActionCreator delegate,
PassengerStopDurationProvider stopDurationProvider) {
PassengerStopDurationProvider stopDurationProvider, PrebookingManager prebookingManager,
AbandonVoter abandonVoter) {
this.delegate = delegate;
this.passengerHandler = passengerHandler;
this.stopDurationProvider = stopDurationProvider;
this.prebookingManager = prebookingManager;
this.abandonVoter = abandonVoter;
}

@Override
Expand All @@ -42,7 +48,8 @@ public DynAction createAction(DynAgent dynAgent, DvrpVehicle vehicle, double now
if (getBaseTypeOrElseThrow(task).equals(DrtTaskBaseType.STOP)) {
DrtStopTask stopTask = (DrtStopTask) task;
return new PrebookingStopActivity(passengerHandler, dynAgent, stopTask, stopTask.getDropoffRequests(),
stopTask.getPickupRequests(), DrtActionCreator.DRT_STOP_NAME, () -> stopTask.getEndTime(), stopDurationProvider, vehicle);
stopTask.getPickupRequests(), DrtActionCreator.DRT_STOP_NAME, () -> stopTask.getEndTime(),
stopDurationProvider, vehicle, prebookingManager, abandonVoter);
}

return delegate.createAction(dynAgent, vehicle, now);
Expand Down
Loading

0 comments on commit 3f7b8b8

Please sign in to comment.