Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve Joint Tour Participation Model #569

Open
i-am-sijia opened this issue Jun 1, 2022 · 1 comment
Open

Improve Joint Tour Participation Model #569

i-am-sijia opened this issue Jun 1, 2022 · 1 comment
Labels
Feature New feature or request

Comments

@i-am-sijia
Copy link
Contributor

Joint tour frequency model generates household joint tours. Then joint tour composition model determines if a joint tour is: 1 = Adult-only, 2 = Children-only, 3 = Mixed. Lastly, joint tour participation model is applied to household members independently to determine if each member is participating in joint tours or not. Number of participants of a joint tour is an outcome of the tour participation model.

There are availability rules in the participation model, for example, adults cannot participate in children-only tours, and children cannot participate in adult-only tours. Such availability rules are implemented in joint tour participation UEC.

Because the participation model is applied to each person independently, a tour satisfaction step is implemented after persons' choices being made to check:

  1. A joint tour always has at least 2 participants
  2. A mixed joint tour has at least one adult and one child

For joint tours that do not satisfy those two criteria, the participation model will generate new random numbers and re-simulate persons' choices, until all joint tours are satisfied, or until it reaches max number of simulation, whichever condition is met first. If there are still joint tours unsatisfied when max number of simulation is reached, then the model crashes with warning: joint_tour_participation.eval_mnl.participants_chooser max iterations exceeded (5000). The default max number of simulation for participation model is 5000 in the current Activitysim code, users can change it in yaml file.

Some shortcomings of the tour participation model:

  1. doing monte carlo simulations over and over again adds run time, esp. when the probability to be chosen is low
  2. the participation model is very fragile when calibration constants are added/changed

Ideas for improvements:

  1. Set the max simulation to a smaller number, discard the tours that are unsatisfied in the end, instead of crashing the model
  2. Add a tour occupancy model that pre-determines the number of participants of each joint tour, which will be run before the tour participation model. Then in the tour participation model, pick the eligible household members ranked by utilities from high to low, up to the number of tour participants.

@jfdman feel free to add.

@jfdman
Copy link

jfdman commented Jul 5, 2022

A third option would be to build a choice set from household members and make a choice instead of using the utility ranking procedure. This would provide a lot of flexibility in terms of specifying the utility function (with interaction terms), and also eliminate the need for a party type model. For a 5 person household there would be 26 alternatives, for a 6-person household 56 alternatives. Certainly doable.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Feature New feature or request
Projects
Status: Punt
Development

No branches or pull requests

3 participants