Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
830f2d9
minor fixes for SimOR development
dhensle Jun 2, 2025
4c4f096
blacken
dhensle Jun 2, 2025
d113cf8
Using PNUM if available in JTFC
dhensle Jun 11, 2025
7238f16
initial batch of models with pre and post processing added
aletzdy Apr 15, 2025
388219e
nonmand sched and transit pass models
aletzdy Apr 15, 2025
7907069
first pass at preprocessing and annotate functionality in all models
dhensle Jun 17, 2025
52c93b3
fixing bugs in jtf and trip purpose
dhensle Jun 17, 2025
d709d36
adding persons back in to locals_d in jtc
dhensle Jun 17, 2025
353d89c
model name missing in tour scheduling
dhensle Jun 17, 2025
2b71451
missing expressions import in tour sched prob
dhensle Jun 17, 2025
8179e26
ci unit tests & fixing estimation test error
dhensle Jun 18, 2025
c8f1ea7
first pass at pnr lot choice
dhensle Jun 30, 2025
c88481e
addressing review comments
dhensle Jul 1, 2025
6dcf477
Merge branch 'preprocessing' into SimOR_pnr
dhensle Jul 4, 2025
f549db7
logsums running with pnr lot choice
dhensle Jul 4, 2025
0ab2f16
adding trace label to tvpb skim wrappers
dhensle Jul 4, 2025
c44e9ab
adding disagg setting for skim name for nearest zone skim
dhensle Jul 7, 2025
6cab144
Merge remote-tracking branch 'upstream/main' into TransLink_pnr
dhensle Aug 1, 2025
dce9600
initial progress on pnr capacity constraint
dhensle Aug 4, 2025
75dbbf7
pnr capacity constraint single processed
dhensle Aug 26, 2025
12d8d5d
pnr mp capacity
dhensle Aug 27, 2025
ee8794b
blacken
dhensle Aug 27, 2025
1e2eaeb
adding new write trip matrices options for pnr
dhensle Aug 29, 2025
19dbf8f
explicit pnr lot choice setting for atwork subtours
dhensle Aug 29, 2025
1989307
pnr iteration snapshot trace, landuse eligibility flag
dhensle Aug 30, 2025
3a45219
Merge branch 'ActivitySim:main' into pnr_capacity
dhensle Oct 8, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions activitysim/abm/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
non_mandatory_scheduling,
non_mandatory_tour_frequency,
parking_location_choice,
park_and_ride_lot_choice,
school_escorting,
stop_frequency,
summarize,
Expand Down
83 changes: 27 additions & 56 deletions activitysim/abm/models/atwork_subtour_mode_choice.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import pandas as pd

from activitysim.abm.models.util.mode import run_tour_mode_choice_simulate
from activitysim.abm.models.util.logsums import setup_skims
from activitysim.abm.models.park_and_ride_lot_choice import run_park_and_ride_lot_choice
from activitysim.core import config, estimation, expressions, los, tracing, workflow
from activitysim.core.configuration.logit import TourModeComponentSettings
from activitysim.core.util import assign_in_place
Expand Down Expand Up @@ -64,66 +66,35 @@ def atwork_subtour_mode_choice(
constants = {}
constants.update(model_settings.CONSTANTS)

skim_dict = network_los.get_default_skim_dict()
if "pnr_zone_id" in subtours_merged.columns:
if model_settings.run_atwork_pnr_lot_choice:
subtours_merged["pnr_zone_id"] = run_park_and_ride_lot_choice(
state,
choosers=subtours_merged.copy(),
land_use=state.get_dataframe("land_use"),
network_los=network_los,
model_settings=None,
choosers_dest_col_name="destination",
choosers_origin_col_name="workplace_zone_id",
estimator=None,
pnr_capacity_cls=None,
trace_label=tracing.extend_trace_label(trace_label, "pnr_lot_choice"),
)
else:
subtours_merged["pnr_zone_id"].fillna(-1, inplace=True)

# setup skim keys
orig_col_name = "workplace_zone_id"
dest_col_name = "destination"
out_time_col_name = "start"
in_time_col_name = "end"
odt_skim_stack_wrapper = skim_dict.wrap_3d(
orig_key=orig_col_name, dest_key=dest_col_name, dim3_key="out_period"
)
dot_skim_stack_wrapper = skim_dict.wrap_3d(
orig_key=dest_col_name, dest_key=orig_col_name, dim3_key="in_period"
)
odr_skim_stack_wrapper = skim_dict.wrap_3d(
orig_key=orig_col_name, dest_key=dest_col_name, dim3_key="in_period"
)
dor_skim_stack_wrapper = skim_dict.wrap_3d(
orig_key=dest_col_name, dest_key=orig_col_name, dim3_key="out_period"
skims = setup_skims(
network_los,
subtours_merged,
add_periods=False,
include_pnr_skims=model_settings.run_atwork_pnr_lot_choice,
orig_col_name="workplace_zone_id",
dest_col_name="destination",
trace_label=trace_label,
)
od_skim_stack_wrapper = skim_dict.wrap(orig_col_name, dest_col_name)

skims = {
"odt_skims": odt_skim_stack_wrapper,
"dot_skims": dot_skim_stack_wrapper,
"odr_skims": odr_skim_stack_wrapper,
"dor_skims": dor_skim_stack_wrapper,
"od_skims": od_skim_stack_wrapper,
"orig_col_name": orig_col_name,
"dest_col_name": dest_col_name,
"out_time_col_name": out_time_col_name,
"in_time_col_name": in_time_col_name,
}

if network_los.zone_system == los.THREE_ZONE:
# fixme - is this a lightweight object?
tvpb = network_los.tvpb

tvpb_logsum_odt = tvpb.wrap_logsum(
orig_key=orig_col_name,
dest_key=dest_col_name,
tod_key="out_period",
segment_key="demographic_segment",
cache_choices=True,
trace_label=trace_label,
tag="tvpb_logsum_odt",
)
tvpb_logsum_dot = tvpb.wrap_logsum(
orig_key=dest_col_name,
dest_key=orig_col_name,
tod_key="in_period",
segment_key="demographic_segment",
cache_choices=True,
trace_label=trace_label,
tag="tvpb_logsum_dot",
)

skims.update(
{"tvpb_logsum_odt": tvpb_logsum_odt, "tvpb_logsum_dot": tvpb_logsum_dot}
)

# TVPB constants can appear in expressions
constants.update(
network_los.setting("TVPB_SETTINGS.tour_mode_choice.CONSTANTS")
Expand Down Expand Up @@ -157,7 +128,7 @@ def atwork_subtour_mode_choice(
tvpb_mode_path_types = model_settings.tvpb_mode_path_types
for mode, path_types in tvpb_mode_path_types.items():
for direction, skim in zip(
["od", "do"], [tvpb_logsum_odt, tvpb_logsum_dot]
["od", "do"], [skims["tvpb_logsum_odt"], skims["tvpb_logsum_dot"]]
):
path_type = path_types[direction]
skim_cache = skim.cache[path_type]
Expand Down
2 changes: 2 additions & 0 deletions activitysim/abm/models/disaggregate_accessibility.py
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,8 @@ class DisaggregateAccessibilitySettings(PydanticReadable, extra="forbid"):
If less than 1, use this fraction of the total number of rows.
If not supplied or None, will default to the chunk size in the location choice model settings.
"""
NEAREST_ZONE_SKIM: str = "DIST"
"""The skim to use for finding the nearest zone when distributing logsums to un-sampled zones."""


def read_disaggregate_accessibility_yaml(
Expand Down
Loading
Loading