matsim-vsp / parallel_qsim_rust

Parallel and distributed implementation of the Qsim in Rust
8 stars 0 forks source link

Implement offline DRT service #134

Open paulheinr opened 2 months ago

paulheinr commented 2 months ago

For now, we assume that there is a car for each agent and every car is driven by a personal driver. In this situation, we can already implement the agent features of DRT (taxi request, enter taxi, leave taxi).

Based on the MATSim events file, using DRT as leg mode should result in the following events.

  1. Passenger sends DRT request, taxi assigned and departs
<!-- t = 0 -->
<!-- passenger events -->
<event time="0.0" type="actend" person="passenger_0" actType="drt_A interaction" />
<event time="0.0" type="departure" person="passenger_0" legMode="drt_A" />
<event time="0.0" type="DrtRequest submitted" mode="drt_A" request="drt_A_0" person="passenger_0" />
<event time="0.0" type="passenger waiting" mode="drt_A" request="drt_A_0" person="passenger_0"  />

<!-- taxi driver events -->
<event time="0.0" type="actend" person="taxi_one_A" actType="BeforeVrpSchedule" />
<event time="0.0" type="dvrpTaskStarted" person="taxi_one_A" dvrpVehicle="taxi_one_A" taskType="STAY" taskIndex="0" />
<event time="0.0" type="actstart" person="taxi_one_A" actType="DrtStay" />

<!-- t = 1 -->
<!-- taxi driver events -->
<event time="1.0" type="PassengerRequest scheduled" mode="drt_A" request="drt_A_0" person="passenger_0" vehicle="taxi_one_A" />
<event time="1.0" type="actend" person="taxi_one_A" actType="DrtStay" />
<event time="1.0" type="dvrpTaskEnded" person="taxi_one_A" dvrpVehicle="taxi_one_A" taskType="STAY" taskIndex="0" dvrpMode="drt_A"  />
<event time="1.0" type="dvrpTaskStarted" person="taxi_one_A" dvrpVehicle="taxi_one_A" taskType="DRIVE" taskIndex="1" dvrpMode="drt_A"  />
<event time="1.0" type="departure" person="taxi_one_A" legMode="car"  />
<event time="1.0" type="PersonEntersVehicle" person="taxi_one_A" vehicle="taxi_one_A"  />

<!-- taxi drives to passenger ... -->

<!-- taxi driver events -->
  1. Taxi arrives pick up location and picks up passenger
<!-- t = 65 -->
<!-- taxi driver events -->
<event time="65.0" type="PersonLeavesVehicle" person="taxi_one_A" vehicle="taxi_one_A"  />
<event time="65.0" type="arrival" person="taxi_one_A" />
<event time="65.0" type="dvrpTaskEnded" person="taxi_one_A" dvrpVehicle="taxi_one_A" taskType="DRIVE" taskIndex="1" dvrpMode="drt_A"  />
<event time="65.0" type="dvrpTaskStarted" person="taxi_one_A" dvrpVehicle="taxi_one_A" taskType="STOP" taskIndex="2" dvrpMode="drt_A"  />
<event time="65.0" type="actstart" person="taxi_one_A" actType="DrtBusStop"  />

<!-- 60s to pick up passenger -->

<!-- t = 125 -->
<!-- passenger events -->
<event time="125.0" type="PersonEntersVehicle" person="passenger_0" vehicle="taxi_one_A"  />
<event time="125.0" type="passenger picked up" person="passenger_0" mode="drt_A" request="drt_A_0" vehicle="taxi_one_A"  />

<!-- taxi driver events -->
<event time="125.0" type="actend" person="taxi_one_A" actType="DrtBusStop"  />
<event time="125.0" type="dvrpTaskEnded" person="taxi_one_A" dvrpVehicle="taxi_one_A" taskType="STOP" taskIndex="2" dvrpMode="drt_A"  />
<event time="125.0" type="dvrpTaskStarted" person="taxi_one_A" dvrpVehicle="taxi_one_A" taskType="DRIVE" taskIndex="3" dvrpMode="drt_A"  />
<event time="125.0" type="departure" person="taxi_one_A"  />
<event time="125.0" type="PersonEntersVehicle" person="taxi_one_A" vehicle="taxi_one_A"  />
  1. Taxi arrives drop off location and drops passenger off
<!-- taxi driver events -->
<event time="313.0" type="PersonLeavesVehicle" person="taxi_one_A" vehicle="taxi_one_A"  />
<event time="313.0" type="arrival" person="taxi_one_A"  />
<event time="313.0" type="dvrpTaskEnded" person="taxi_one_A" dvrpVehicle="taxi_one_A" taskType="DRIVE" taskIndex="3" dvrpMode="drt_A"  />
<event time="313.0" type="dvrpTaskStarted" person="taxi_one_A" dvrpVehicle="taxi_one_A" taskType="STOP" taskIndex="4" dvrpMode="drt_A"  />
<event time="313.0" type="actstart" person="taxi_one_A" actType="DrtBusStop"  />

<!-- passenger events -->
<event time="313.0" type="passenger dropped off" person="passenger_0" mode="drt_A" request="drt_A_0" vehicle="taxi_one_A"  />
<event time="313.0" type="PersonLeavesVehicle" person="passenger_0" vehicle="taxi_one_A"  />