Joint Travel Design - ActivitySim/activitysim GitHub Wiki

In the current example model, joint travel for non-mandatory activities is modeled explicitly in the form of fully joint tours (where all members of the travel party travel together from the very beginning to the end and participate in the same activities along the way). This accounts for more than 50% of joint travel. Other types of joint travel like carpooling of workers and escorting children are not explicitly considered currently, though they are handled implicitly through shared ride alternatives in mode choice. Some later revisions to CT-RAMP in specific regions more completely model joint travel. For now, the example follows the MTC TM1 design.

The new sub-models, which are inserted after mandatory_tour_scheduling, are:

Joint tour frequency

  • For each household
  • MNL model with new expression file - joint_frequency.csv
  • Alternatives: 21 (No Tours, 1 Tour segmented by purpose, 2 tours segmented by purpose combination)
  • Notes:
    • Includes the presence and size of overlapping time-windows, which represent the availability of household members to travel together after mandatory tours have been generated and scheduled.
    • This model needs to create a joint tours table as well (or add to the existing tours table with a joint=T attribute)

Joint tour party composition

  • For each joint tour
  • MNL model with new expression file - joint_party_composition.csv
  • Alternatives: 3 (Adults-only, Children-only, Adults + Children)
  • Notes: Include the maximum time window overlaps across adults, children and adults or children after mandatory tours have been scheduled.

Joint tour person participation

  • For each joint tour and person in the household
  • MNL model with new expression file - joint_tour_person_participation.csv
  • Alternatives: 2 (Participate in joint tour or does not participate in joint tour)
  • Notes:
    • Persons with CDAP=Home are excluded
    • Requires the calculation of available person time windows
    • The existing Java code loops for each joint tour and household person until a valid tour party is formed. Within the valid tour party loop, each person in the household is evaluated to participate in the tour by a) checking if the person type is inconsistent with tour composition (adults only, children only, or mixed (adults and children)), b) solving the participation expressions for the person and tour composition, c) adding the person to the tour if they decide to participate (i.e. choose participate), and d) after processing all persons, checking for a valid party and if not, repeating the participation choices with new random numbers.
    • In vectorized form, this model is as follows:
      • Handle each tour composition separately
      • Create a joint_tours_persons_candidates table joining persons with joint_tours with one row for each person eligible for the tour (e.g. adult persons only for adult only tours)
      • Annotate with persons time_window_overlap with other eligible household members (i.e. with other children, adults, or everyone, depending on tour_composition)
      • Run simple simulation on entire tours _persons table and get a participation choice for each person
      • Determine which tours are satisfied. (list of satisfied_joint_tours ) and add all satisfied participants to a joint_tours_persons result table.
      • Remove all rows (both participating and not) for the satisfied tours from the joint_tours_persons_candidates.
      • Repeat process until joint_tours_persons_candidates table is empty. (All tours satisfied.) Note that there is no need to repeat the utility calculations, only the choice selection, though we need to customize simple_simulate to insert the logic into the appropriate point in the existing simple_simulate code. (e.g. return the utilities along with the choices and create a method to choose_by_utility)

Joint tour primary destination choice sample

  • For each joint tour
  • Select X alternatives using the same recipe as work/school location sampling
  • Alternatives: Zones
  • Notes: Use the Joint tour frequency model purpose to lookup the relevant destination choice model by purpose

Joint tour primary destination choice sample logsums

  • For each joint tour
  • Calculate X mode choice logsums using the same recipe as work/school logsums for the sample
  • Alternatives: Sample of alternative zones
  • Notes:
    • @odt_skims - home taz, alternative taz, time period = Midday (MD)
    • @dot_skims - alternative taz, home taz, time period = Midday (MD)
    • Use the Joint tour frequency model purpose to lookup the relevant destination choice model by purpose

Joint tour primary destination final choice

  • For each joint tour
  • Select a final destination zone using the same recipe as work/school logsums for the final choice
  • Alternatives: Sample of alternative zones
  • Notes: Use the Joint tour frequency model purpose to lookup the relevant destination choice model by purpose

Joint tour time-of-day choice

  • For each joint tour
  • MNL model with new expressions file - tour_departure_and_duration_joint.csv
  • Alternatives: tour_departure_and_duration_alternatives.csv (same as the other purposes)
  • Notes:
    • Tour departure and arrival period combinations are restricted to only those available for each participant on the tour, after scheduling mandatory activities
    • Once the tour departure/arrival time combination is chosen, it is applied to all participants on the tour.

Joint tour mode choice

  • For each joint tour
  • MNL model that uses the existing expressions file - tour_mode_choice.csv
  • Alternatives: Same as the other purposes
  • Notes:
    • Use the Joint tour frequency model purpose to lookup the relevant mode choice model by purpose
    • Makes use of some new expressions, such as is_joint and number_of_participants for example