From 6a57e12e9678f7b6efbaebca695f8e5238c05d34 Mon Sep 17 00:00:00 2001 From: Jeffrey Newman Date: Mon, 17 Apr 2023 13:16:04 -0500 Subject: [PATCH] maintenance release (#666) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * keep black 2022 style for now * typo in link * note about pre-package installer in quick start * add model_settings to estimator.write_coefficients * BayDAG Contributions (#657) * code changes to add joint tour utilities in cdap * add joint tour frequency composition component * post process jtfc result to tours * update joint tour participation * update #inmtf to tm2 specs * allow alternative id > 127 * set up testing infrastructure * cdap test script * cdap configs * set up testing infrastructure * joint tour test script * joint tour configs * set up testing infrastructure * nm tour frequency test script * nm tour frequency configs * add jtfc alt table dictionary to yaml * update jtfc yaml * jtfc move coef values to coef.csv * jtfc update preprocessor * add jtfc alt table dictionary to yaml * nmtf consolidate all -999 to one coef * code changes to fix bug in parking location choice model * Revert "code changes to fix bug in parking location choice model" This reverts commit 5a38ebb902df50ea612cef946783b33ace90c75e. * parking location choice bug fix * move coefficients to csv file * restore the original mandatory channels * restore the original mandatory channels * RSG Phase 7 Development (#49) * school escorting initial commit * bundles created * added pure escort tours after non_mand_sched * created escorting tours & trips * integrated escort tours and trips * Differentiate examples between quality and validity of example models (#571) * change examples that are no longer tied to an agency to fictional place names * change name of full example also * add back missing output dir * restore test output dir also * more empty dirs that got lost * clean up docs * example_mtc -> prototype_mtc * Prototype MTC extended * add all the ignored files * add test output dirs * remove superfluous example_test * prototype_sf * prototype_arc * prototype_marin * move dirs * psrc * semcog * sandag_xborder * placeholder_sandag * placeholder_multiple_zone * no more coveralls * repair docs * clean up example names * black and isort (#578) * black and isort * stop emitting output dir it fails later tests * trace files in nested directories because windows * swap files for xborder model * repair ARC MP * downstream model integration * print checksum even when not used * add hashes for sandag_xborder_full * fix dtype in university hack * fix persons to match tours * repair ARC * initial commit of flexible tour/trip ids * pycodestyle * black formatting * Bump version: 1.0.4 → 1.1.0 * adding frequency alternatives configs required for test system * added additional unit tests * added setup function for test configs dir * formatting * handling missing alts files in examples * error catching around extension probs * passing tests * still passing tests around missing config files * accounting for missing mtf spec in marin example * nm tour scheduling passing * updating stop freq in tours table * added check for mand tour overlap with pe tours * num chauffeurs and escortees * fixed defaults not getting used if file missing * merging canonical ids from flexible id work * setting escorting tour and trip ids * remove unneeded nmtf settings file * black formatting * excluding escort trips from trip scheduling * fixing bug where mand tours not getting assigned correct id * adding school_escorting to mp model list * Added mwcog small area * missed one edit * adding school escort tour flavors as own category * reformatting * updating timetable windows with pure escort tours * additional logging * Update README.MD * call as module * github actions tests * adding non-mand destination changes * pre commit hooks * pyproject toml * limit numpy * docs for mamba instead of conda * ignore generated files * add nbmake to test env * fix dupe line * fixing bad tdd merge * repair test multiple zones for github actions * publish develop docs * fix docbuild env * merging tdd alts to all tours * adding ride share threshold to unvailability for pure escort time overlap * cleanup * Update .travis.yml * fixed testing files * fixed testing files (again) * fixed test script again * mins per time bin * black formatting * black formatting * fixing reindex import bug * fixing missed import * replacing trips test table * inserting default setting if no models in config for tests * publish docs to branch name * adding setup function to tests to set configs_dir injectable * documentation * updated testing scripts (note shorter travis script for now) * fixed slash (windows vs. linux testing issue) * added output folders * updated travis script to run all tests, should pass * docs cleaning * docs re-style * rebuild * dynamic versioning docs * version switcher * blacken * fix switcher url * fix conf * switcher update * master to main * deployment actions * actions * build wheel * fix for testpypi * blacken * manual switcher * branch docs service [makedocs] * syntax [makedocs] * travis depends * checkout v3, fix versioning in docs * only build develop docs once * failsafe version * documentation repairs * python-simplified-semver * front cards * end testing w travis * add mwcog test to gh-actions * add mwcog to docs * fixed origin bug and missing outbound trip to work * point to data not copy it * sort dependencies * req sh 2.2.4 * account for variance across platforms in trip dest est * copy bike skims for sandag test * proper cleanup when trips that get removed if schedule failed * changed failed trip scheduling option for example * updating regress table * blacken * extending nmtf and stop frequency to demonstrate flexible ids * param on rtol * fix sandag_2 test files * fix test file names * allowing multiple escort tours in the same period * sandag 3-zone example fix * fixing expression for missing escort participants sandag 3_zone * cleanup * blacken * Update trip_destination.py applying valid primary origin default value * Update trip_destination.py blacken * fixing bug for inbound destination for second escortee * blacken * Disaggregate Accessibilities (#5) * initial commit with basic working proto pop gen * fixed bad dependency range * fixed vary_on method to vary all with mapped fields after * added check if already dataframe * added dataframe check if the table passed is already a dataframe * working proto pop gen. still debugging mandatory work/school model * check all table is df * workplace runs, next testing school * began setting up to get all logsums, not just chosen ones * restructured to run as either one-off or model step * revert to last merge. Removed dataframe check in iterate, no longer needed to modify this file * extracted logsums, need to inject into pipeline or save output? * working standalone or step model * extractable accessibilities for fixed and nonmandatory * extractable accessibilities for fixed and nonmandatory * cleanup and add documentation * resolved duplicates of old 'example' folders * model uses write_tables functionality * disaggregate accessibility runs as model step or standalone. Runs as subprocess * working model test. table initialization not yet working * added logsum short circuit to get logsums and avoid drawing unneccesary samples * working model plus major cleanup * working model plus major cleanup * override sample size * fixed trace output files * skip_choice default to False * fixed empty logsums bug * cleanup redundent parameters * fixed list index instead of set * coordinated model run files * added default skip to false * added multiprocessing line * began setup for multiprocessing * fixed sampling problem. Pipeline for multi processing, NOT WORKING YET * deleted run file, not needed anymore * update release instructions * auto-build docs on release * remind to update switcher * need checkout * added helper functions for handling suffix args * to enable multiprocessing, overhauled pipeline method to include proto_ tables rather than overwriting main tables * working multiprocess, but requires debugging. fails on other models * working multiprocess, but requires debugging. fails on other models * cleanup of mp table registering * fixed tracing and slicing issue * removed old 'run' model * setup example 2 zones * minimum working 2 zone * multizone basic working * fixed buggy settings * multiprocessing working, but empty final tables * fixed blank output bug and cleaned up settings to use verbose table names (not just 'disaggregate_accessibility') * cleanup run scripts a bit * fixed missing base path for full run * fixed missing path * fixed typo * fixed 1 per taz sampling * fixing person merge bug and filtering workers * fixed duplicate tours! * updated settings for initialize disagg * removed obsolete file * cleaned up file and moved initialize to tables/... * added find nearest node function * added initialize disaggregate_accessibility to initialize_households * moved initialize steps to 'tables/disaggregate_accessibility' * updated settings to include initialize disaggregate accessibilities as part of initialize_households * moved initialize disagg accessibilities to tables. Created working merge step using naive bayes and 'hard' join * add mp back in * PEP formatting revisions * fixed logsums merge on households instead of persons * fixed _accessibility suffix * fixed conflict with persons_merged * updated yaml to use simpler join method * PEP formatting fixes * refreshed example folder from develop * added missing line at end of file * black fixes * black fixes to disaggregate accessibility changes * fixed missing column pipeline error * merged disagg accessibilities into mtc_extended and added doc section * ran black on disaggregate_accessibility.py * updated dependencies * removing sklearn imports * blacken * add if none catch * fixed None suffix default * moved order of get_table(persons_merged) to avoid pulling prematurely in xborder * tested and cleaned up rng channels * setup injectable suffixes to allow add_size_table as model step not just function * removed accessibility output from test * re blacken py scripts * fixed tracing typo * added variable index name suffix to pass optionally * pipeline housekeeping to cleanup any tables, traceables, or channels that were touched during disagg * added multiprocess testing * blacken updates * updated test scripts to include MP, problem with vehicle model in mp (even without disagg acc?) * added improved origin sampling, resolved issue with merging with sample <100%. Need to address random seed for origins * added sci-kit learn to test depends * fixed person merging error causing pytest fail, uses inject method to ensure consistency * cleanup comments * fixed pytest to include accessibility table in regress * setup for mp test, but needs debugging * 'blacken' * 'blacken' * cleanup example folder * fixed pipeline NoneType bug for disagg accessibility table * fixed pytest fail on mp, due to exept:True on mp_simulate * 'blacken' * added weighted k-means method * created run script for multiple sampling scenarios * blacken changes * blacken * fixed copy script * blacken sampling script * fixed n_zone when integer * fixed typo * update sampling script * 'blacken' * fixed replacement sample bug * updated documentation * more flexible scenario testing * blacken Co-authored-by: Nick Fournier Co-authored-by: Jeffrey Newman Co-authored-by: Nick Fournier <99497883+nick-fournier-rsg@users.noreply.github.com> * Shadow Pricing Enhancements (#7) * updated scripts to include simulation-based shadow pricing * blacken * Updated shadow_pricing.yaml for mtc example * code cleanup * more cleanup * documentation and passing tests * passing tests * passing tests * updated doc on shadow pricing * 2nd Update model doc on shadow pricing * more doc update on shadow pricing * fixing pandas future warning * blacken * bug in trying to access shadow price settings when not running shadow pricing * limiting pandas version * always updating choices * testing removal of lognormal for hh vot * putting hh vot back in * updating to match sharrow test versions * raw person table for buffer instead of injectable * adding segmentation, output by iteration, and external worker removal * formatting & documentation Co-authored-by: aletzdy <58451076+aletzdy@users.noreply.github.com> * updating mtc_extended test files * no sp for non-work or school, better logging, weighting options * sample TAZ only if available MAZ when shadow pricing * adding missed weight column option * cleaning up comments Co-authored-by: Jeffrey Newman Co-authored-by: Andrew Rohne Co-authored-by: Nick Fournier Co-authored-by: Nick Fournier <99497883+nick-fournier-rsg@users.noreply.github.com> Co-authored-by: aletzdy <58451076+aletzdy@users.noreply.github.com> * set up testing infrastructure (#40) Co-authored-by: Lisa Zorn * BayDAG auto ownership configs and test (#41) * set up testing infrastructure * auto ownership test script * auto ownership configs * ao move coef values to coef.csv Co-authored-by: Lisa Zorn * blacken * more formatting * blacken * blacken * blacken * BayDAG parking location choice configs and test (#45) * code changes to fix bug in parking location choice model * parking location choice configs * Revert "code changes to fix bug in parking location choice model" This reverts commit 5a38ebb902df50ea612cef946783b33ace90c75e. * parking location choice bug fix * parking location choice config updates move coefficients to csv file and activitysim variable naming consistency * parking location choice summary Co-authored-by: Lisa Zorn * blacken * cdap bug fixes * adding sklearn to dependencies * Update activitysim-dev.yml fixing bad reference to scikit-learn * Update activitysim-test.yml fixing bad reference to scikit-learn * Update setup.cfg fixing bad reference to scikit-learn * Memory Bug Fix * working with 2k no sp * optimize nearest zone determination * Changed data type of participant_id in candidates in joint_tour_participation_candidates() to unsigned 64-bit integer to prevent overflow * better comments * fix overflow in jtp participant id * blacken * forcing participation * Trip Scheduling (#51) * Differentiate examples between quality and validity of example models (#571) * change examples that are no longer tied to an agency to fictional place names * change name of full example also * add back missing output dir * restore test output dir also * more empty dirs that got lost * clean up docs * example_mtc -> prototype_mtc * Prototype MTC extended * add all the ignored files * add test output dirs * remove superfluous example_test * prototype_sf * prototype_arc * prototype_marin * move dirs * psrc * semcog * sandag_xborder * placeholder_sandag * placeholder_multiple_zone * no more coveralls * repair docs * clean up example names * black and isort (#578) * black and isort * stop emitting output dir it fails later tests * trace files in nested directories because windows * swap files for xborder model * repair ARC MP * print checksum even when not used * add hashes for sandag_xborder_full * fix dtype in university hack * fix persons to match tours * repair ARC * Bump version: 1.0.4 → 1.1.0 * Added mwcog small area * missed one edit * reformatting * Update README.MD * call as module * github actions tests * pre commit hooks * pyproject toml * limit numpy * docs for mamba instead of conda * ignore generated files * add nbmake to test env * fix dupe line * repair test multiple zones for github actions * publish develop docs * fix docbuild env * Update .travis.yml * fixed testing files * fixed testing files (again) * fixed test script again * publish docs to branch name * updated testing scripts (note shorter travis script for now) * fixed slash (windows vs. linux testing issue) * added output folders * updated travis script to run all tests, should pass * docs cleaning * docs re-style * rebuild * dynamic versioning docs * version switcher * blacken * fix switcher url * fix conf * switcher update * master to main * deployment actions * actions * build wheel * fix for testpypi * blacken * manual switcher * branch docs service [makedocs] * syntax [makedocs] * travis depends * checkout v3, fix versioning in docs * only build develop docs once * failsafe version * documentation repairs * python-simplified-semver * front cards * end testing w travis * add mwcog test to gh-actions * add mwcog to docs * point to data not copy it * sort dependencies * req sh 2.2.4 * account for variance across platforms in trip dest est * copy bike skims for sandag test * param on rtol * fix sandag_2 test files * fix test file names * added pre-processor option to trip scheduling * trip scheduling relative mode initial commit * moved everything to mwcog example * adding output analysis notebook * adding additional segmentation * testing and documentation * blacken * not assuming scheduling mode is set * fixing merge trip scheduling * still fixing merge * reverting regression trips * fixing bad merge and updating test Co-authored-by: Jeffrey Newman Co-authored-by: Andrew Rohne * Trip Scheduling Bug & Trip Mode Choice Annotate (#55) * other sp methods price updates * Trip Scheduling into Resident Debug (#54) * Differentiate examples between quality and validity of example models (#571) * change examples that are no longer tied to an agency to fictional place names * change name of full example also * add back missing output dir * restore test output dir also * more empty dirs that got lost * clean up docs * example_mtc -> prototype_mtc * Prototype MTC extended * add all the ignored files * add test output dirs * remove superfluous example_test * prototype_sf * prototype_arc * prototype_marin * move dirs * psrc * semcog * sandag_xborder * placeholder_sandag * placeholder_multiple_zone * no more coveralls * repair docs * clean up example names * black and isort (#578) * black and isort * stop emitting output dir it fails later tests * trace files in nested directories because windows * swap files for xborder model * repair ARC MP * print checksum even when not used * add hashes for sandag_xborder_full * fix dtype in university hack * fix persons to match tours * repair ARC * Bump version: 1.0.4 → 1.1.0 * Added mwcog small area * missed one edit * reformatting * Update README.MD * call as module * github actions tests * pre commit hooks * pyproject toml * limit numpy * docs for mamba instead of conda * ignore generated files * add nbmake to test env * fix dupe line * repair test multiple zones for github actions * publish develop docs * fix docbuild env * Update .travis.yml * fixed testing files * fixed testing files (again) * fixed test script again * publish docs to branch name * updated testing scripts (note shorter travis script for now) * fixed slash (windows vs. linux testing issue) * added output folders * updated travis script to run all tests, should pass * docs cleaning * docs re-style * rebuild * dynamic versioning docs * version switcher * blacken * fix switcher url * fix conf * switcher update * master to main * deployment actions * actions * build wheel * fix for testpypi * blacken * manual switcher * branch docs service [makedocs] * syntax [makedocs] * travis depends * checkout v3, fix versioning in docs * only build develop docs once * failsafe version * documentation repairs * python-simplified-semver * front cards * end testing w travis * add mwcog test to gh-actions * add mwcog to docs * point to data not copy it * sort dependencies * req sh 2.2.4 * account for variance across platforms in trip dest est * copy bike skims for sandag test * param on rtol * fix sandag_2 test files * fix test file names * added pre-processor option to trip scheduling * trip scheduling relative mode initial commit * moved everything to mwcog example * adding output analysis notebook * adding additional segmentation * testing and documentation * blacken * not assuming scheduling mode is set * fixing merge trip scheduling * still fixing merge * reverting regression trips * fixing bad merge and updating test Co-authored-by: Jeffrey Newman Co-authored-by: Andrew Rohne * adding annotate to trip mode choice * no earliest change if previous trip fail Co-authored-by: David Hensle Co-authored-by: Jeffrey Newman Co-authored-by: Andrew Rohne * adding locals_dict to annotate * chooser cols in final trips table * BayDAG merge with ActivitySim v1.2 (#56) * fixed logsums merge on households instead of persons * code cleanup * more cleanup * documentation and passing tests * passing tests * fixed _accessibility suffix * fixed conflict with persons_merged * updated yaml to use simpler join method * PEP formatting fixes * refreshed example folder from develop * added missing line at end of file * black fixes * black fixes to disaggregate accessibility changes * passing tests * ext cli arg * memory sidecar * restart if resume_after checkpoint is missing * no pandas 1.5 yet * stop the sidecar * updated doc on shadow pricing * 2nd Update model doc on shadow pricing * more doc update on shadow pricing * minor repairs * skip when household_income is None * fixed missing column pipeline error * fixing pandas future warning * blacken * merged disagg accessibilities into mtc_extended and added doc section * ran black on disaggregate_accessibility.py * bug in trying to access shadow price settings when not running shadow pricing * limiting pandas version * updated dependencies * always updating choices * removing sklearn imports * blacken * add if none catch * fixed None suffix default * moved order of get_table(persons_merged) to avoid pulling prematurely in xborder * testing removal of lognormal for hh vot * putting hh vot back in * tested and cleaned up rng channels * setup injectable suffixes to allow add_size_table as model step not just function * removed accessibility output from test * re blacken py scripts * updating to match sharrow test versions * fixed tracing typo * added variable index name suffix to pass optionally * pipeline housekeeping to cleanup any tables, traceables, or channels that were touched during disagg * added multiprocess testing * blacken updates * updated test scripts to include MP, problem with vehicle model in mp (even without disagg acc?) * added improved origin sampling, resolved issue with merging with sample <100%. Need to address random seed for origins * added sci-kit learn to test depends * fixed person merging error causing pytest fail, uses inject method to ensure consistency * cleanup comments * fixed pytest to include accessibility table in regress * setup for mp test, but needs debugging * 'blacken' * 'blacken' * cleanup example folder * fixed pipeline NoneType bug for disagg accessibility table * raw person table for buffer instead of injectable * add mp test for prototype_mtc_extended * fixed pytest fail on mp, due to exept:True on mp_simulate * 'blacken' * added weighted k-means method * created run script for multiple sampling scenarios * blacken changes * blacken * fixed copy script * blacken sampling script * fixed n_zone when integer * fixed typo * Update random.py * Updated test environment to reflect changes in pandas * Removed random random seed generation from placeholder_sandage 1-zone test configuration to get example to pass automated test * update sampling script * 'blacken' * fixed replacement sample bug * adding segmentation, output by iteration, and external worker removal * updated documentation * more flexible scenario testing * blacken * Added test_random_seed.py * blacken test_random_seed.py * Moved random seed generation testing out of prototype_mtc folder and edited core_tests.yaml to call it * Corrected name of check_outputs() * Added print statements to debug script * Blacken test_random_seed.py * keep alternative attributes in parking location * move coeff values to coeff csv * Added pipe character to call that tests the random generator * Added explicit call for pytest to run test_random_seed.py * Added print statement at start of script for debugging * Replaced single quotes with double quotes in print statement * reformat with Black * Moved random seed test into activitysim folder * Edited core_tests.yml to reflect change in location of random seed test * Renamed tests folder to test to reflect call in core-tests.yml * formatting & documentation * Added test_random_seed function for PyTest to read * Fixed defition of seeds list and removed print statements * updating github test env * responding to review comments * Added line to create output folder as that's not being committed * create_rng_configs() now copies entire example configs directory instead of just settings.yaml * Added try except statement when creating the output directory in case it already exists * additional logging, random seed option, landuse sample weight column * ensuring TAZ is not selected if no available MAZ * adding logic to skip external location choice models * Applied suggested changes * Removed activitysim\test\random_seed\configs directory to reduce confusion * Moved random seed test directory to folder that had already existed * temporarily constrain pandas #608 * work around psutil runtimeerror * temp constrain pandas * add mwcog full example * review responses * revisions per Sijia's comments, except for the proto-table-template implementation, still working. * added template pop option * blacken * set back to create_tables to pass test against old tables * updated proto-pop test data * resolved bad test data issue * warn don't fail on duplicate skims * include sharrow in mwcog example * cleanup * zarr digital encoding for mwcog * include reference in psrc mini * fow window ids to int64 because windows * handle expected warnings * unpin dependencies * columns cannot be a set * unpin pandas * columns cannot be a set * numeric_only args in groupby.sum * docs: correct the unit of `chunk_size`. * change 'arry' to more readable 'sizearray' * repair tests * catch FileNotFound * add check that land use is zero-based when using sharrow * better docs on skims in shared memory * better docstrings for skimdataset * remove old code * remove junk * add logging for recoding * optimize nearest zone determination * consistent multiprocessing results * blacken * updating regression trips * adding sandag 2-zone test * blacken * fix merge error * allow pandas 1.5 again * sharrow compatibility with #606 * remove outdated code in comments * note on tracing limitation * allow repeating key cols * fix decoding in MP output * escortee modes match chauf modes * updating regression tests * fixing bad var name in inbound expressions * add note about `condense_parameters` * change default condense_parameters to False * Update .gitignore Co-authored-by: Sijia Wang * ignore caches * remove special install instructions * remove sharrow_skip's * Revert "remove sharrow_skip's" This reverts commit 6b52af2d837d66d3154d8949b2ab5e1d92245e97. * add note about why sharrow_skip is activated * Update school_escorting.yaml * Update config.py * arc trip destination spec skim correction * update regression trips * require sharrow 2.5 * fix mtc_ext for sharrow * fix test consistent with escort mode alignments * allow sharrow skipping * remove stray indent * delete expression values after sharrow testing to make debugging easier * require sharrow 2.5.2 * recode only once * testing repairs * note about why sharrow_skip * fork mtc_extended testing on shadow pricing and sharrow * note on sharrow_skip * size term scaling only for full run * reordering * multiprocessing hangs! * never scale size terms for disagg * tally pending persons * tests cleanup * fix error with orca * let pipeline tables be dropped * check on available MAZs, comment cleanup * work zone to -1 if wfh, removed unneeded extensions * fix tests for sandag 2zone * ignore deprecation warning in tests not clear why this started being a problem suddenly in only the xborder-MP model * add scikit-learn to formal dependencies * docs update for installer * fixing black to 22.12.0 * missed merge conflicts * fixing merge issues in prototype_semcog * fixing prototype_arc merge * fixing placeholder_sandag merge issues * blacken * fixing mwcog merge issues * skims not found during estimation test --------- Co-authored-by: Nick Fournier Co-authored-by: Jeff Newman Co-authored-by: aletzdy <58451076+aletzdy@users.noreply.github.com> Co-authored-by: Jeffrey Newman Co-authored-by: Nick Fournier <99497883+nick-fournier-rsg@users.noreply.github.com> Co-authored-by: Joe Flood Co-authored-by: Sijia Wang Co-authored-by: amarin <17020181+asiripanich@users.noreply.github.com> * do not require all alts in data file * int8 to int16 lost in v1.2 merge --------- Co-authored-by: Lisa Zorn Co-authored-by: Sijia Wang Co-authored-by: Ashish Kulshrestha Co-authored-by: Jeffrey Newman Co-authored-by: Andrew Rohne Co-authored-by: Nick Fournier Co-authored-by: Nick Fournier <99497883+nick-fournier-rsg@users.noreply.github.com> Co-authored-by: aletzdy <58451076+aletzdy@users.noreply.github.com> Co-authored-by: David Hensle Co-authored-by: JoeJimFlood Co-authored-by: Jeffrey Newman Co-authored-by: amarin <17020181+asiripanich@users.noreply.github.com> * docs: apply a minor correction to user guides (#659) * Trip scheduling logic (#660) * trip scheduling logic_version * in testing ignore the warning we just added * cannot use logic_version 1 with relative scheduling * Pin Dependencies (#665) * pinderella * pandas in setup.cfg deps --------- Co-authored-by: Bo Wen Co-authored-by: David Hensle <51132108+dhensle@users.noreply.github.com> Co-authored-by: Lisa Zorn Co-authored-by: Sijia Wang Co-authored-by: Ashish Kulshrestha Co-authored-by: Andrew Rohne Co-authored-by: Nick Fournier Co-authored-by: Nick Fournier <99497883+nick-fournier-rsg@users.noreply.github.com> Co-authored-by: aletzdy <58451076+aletzdy@users.noreply.github.com> Co-authored-by: David Hensle Co-authored-by: JoeJimFlood Co-authored-by: amarin <17020181+asiripanich@users.noreply.github.com> --- HOW_TO_RELEASE.md | 13 +- activitysim/abm/models/__init__.py | 1 + activitysim/abm/models/cdap.py | 71 ++- .../joint_tour_frequency_composition.py | 204 ++++++++ .../abm/models/joint_tour_participation.py | 25 +- activitysim/abm/models/location_choice.py | 2 + .../models/non_mandatory_tour_frequency.py | 2 +- .../abm/models/parking_location_choice.py | 1 - .../abm/models/telecommute_frequency.py | 2 +- .../abm/models/transit_pass_ownership.py | 2 +- .../abm/models/transit_pass_subsidy.py | 2 +- activitysim/abm/models/trip_mode_choice.py | 18 +- activitysim/abm/models/trip_scheduling.py | 107 +++- activitysim/abm/models/util/annotate.py | 6 +- activitysim/abm/models/util/cdap.py | 337 ++++++++++++- .../models/util/probabilistic_scheduling.py | 26 +- activitysim/abm/models/util/tour_frequency.py | 281 +++++++++++ activitysim/abm/models/vehicle_type_choice.py | 13 +- activitysim/abm/models/work_from_home.py | 2 +- activitysim/abm/tables/shadow_pricing.py | 6 + activitysim/cli/create.py | 6 +- activitysim/core/config.py | 8 + activitysim/core/configuration.py | 291 +++++++++++ activitysim/core/los.py | 1 + activitysim/core/pathbuilder_cache.py | 1 + .../test/output/cache/.gitignore | 3 +- ...estination_annotate_trips_preprocessor.csv | 0 .../configs/trip_scheduling_preprocessor.csv | 8 + .../trip_scheduling_probs_purpose_stops.csv | 245 ++++++++++ .../configs/joint_tour_scheduling.yaml | 0 .../prototype_semcog/configs/logging.yaml | 0 .../configs/tour_scheduling_joint.csv | 0 conda-environments/activitysim-dev-base.yml | 49 +- conda-environments/activitysim-dev.yml | 49 +- conda-environments/docbuild.yml | 2 +- conda-environments/github-actions-tests.yml | 35 +- docs/examples.rst | 3 +- docs/gettingstarted.rst | 12 +- docs/models.rst | 39 +- setup.cfg | 2 +- test/auto_ownership/.gitkeep | 0 .../configs/annotate_households.csv | 19 + .../configs/annotate_landuse.csv | 6 + .../configs/annotate_persons.csv | 40 ++ .../configs/annotate_persons_after_hh.csv | 5 + .../auto_ownership/configs/auto_ownership.csv | 61 +++ .../configs/auto_ownership.yaml | 53 ++ .../configs/auto_ownership_coefficients.csv | 393 +++++++++++++++ test/auto_ownership/configs/constants.yaml | 68 +++ .../configs/initialize_households.yaml | 37 ++ .../configs/initialize_landuse.yaml | 54 +++ test/auto_ownership/configs/network_los.yaml | 14 + test/auto_ownership/configs/settings.yaml | 65 +++ ...ur_departure_and_duration_alternatives.csv | 191 ++++++++ test/auto_ownership/data/.gitkeep | 0 test/auto_ownership/test_auto_ownership.py | 434 +++++++++++++++++ test/cdap/.gitkeep | 0 test/cdap/configs/annotate_households.csv | 18 + .../cdap/configs/annotate_households_cdap.csv | 11 + test/cdap/configs/annotate_landuse.csv | 6 + test/cdap/configs/annotate_persons.csv | 54 +++ .../configs/annotate_persons_after_hh.csv | 5 + test/cdap/configs/annotate_persons_cdap.csv | 6 + test/cdap/configs/cdap.yaml | 49 ++ test/cdap/configs/cdap_coefficients.csv | 235 +++++++++ .../cdap_fixed_relative_proportions.csv | 9 + test/cdap/configs/cdap_indiv_and_hhsize1.csv | 81 ++++ .../configs/cdap_interaction_coefficients.csv | 177 +++++++ .../configs/cdap_joint_tour_coefficients.csv | 22 + test/cdap/configs/constants.yaml | 68 +++ test/cdap/configs/initialize_households.yaml | 37 ++ test/cdap/configs/initialize_landuse.yaml | 54 +++ test/cdap/configs/network_los.yaml | 14 + test/cdap/configs/settings.yaml | 60 +++ ...ur_departure_and_duration_alternatives.csv | 191 ++++++++ test/cdap/data/.gitkeep | 0 test/cdap/test_cdap.py | 413 ++++++++++++++++ test/conftest.py | 105 ++++ test/joint_tour_frequency/.gitkeep | 0 test/joint_tours/.gitkeep | 0 .../configs/JointTourFrequency.xls | Bin 0 -> 95232 bytes .../configs/annotate_households.csv | 19 + test/joint_tours/configs/annotate_landuse.csv | 6 + test/joint_tours/configs/annotate_persons.csv | 16 + .../configs/annotate_persons_jtp.csv | 3 + test/joint_tours/configs/annotate_tours.csv | 6 + test/joint_tours/configs/constants.yaml | 68 +++ .../configs/initialize_households.yaml | 38 ++ .../configs/initialize_landuse.yaml | 54 +++ .../joint_tours/configs/initialize_tours.yaml | 6 + .../joint_tour_frequency_composition.csv | 99 ++++ .../joint_tour_frequency_composition.yaml | 35 ++ ...our_frequency_composition_alternatives.csv | 151 ++++++ ..._composition_annotate_alt_preprocessor.csv | 7 + ...ition_annotate_households_preprocessor.csv | 8 + ...oint_tour_frequency_composition_coeffs.csv | 97 ++++ .../configs/joint_tour_participation.csv | 67 +++ .../configs/joint_tour_participation.yaml | 21 + ...ion_annotate_participants_preprocessor.csv | 13 + .../joint_tour_participation_coefficients.csv | 59 +++ test/joint_tours/configs/network_los.yaml | 14 + test/joint_tours/configs/settings.yaml | 79 +++ ...ur_departure_and_duration_alternatives.csv | 191 ++++++++ test/joint_tours/test_joint_tours.py | 265 ++++++++++ test/non_mandatory_tour_frequency/.gitkeep | 0 .../NonMandatoryIndividualTourFrequency.xls | Bin 0 -> 192512 bytes .../configs/annotate_households.csv | 13 + .../configs/annotate_landuse.csv | 6 + .../configs/annotate_persons.csv | 17 + .../configs/annotate_persons_after_hh.csv | 5 + .../configs/annotate_persons_nmtf.csv | 10 + .../configs/constants.yaml | 68 +++ .../configs/initialize_households.yaml | 48 ++ .../configs/initialize_landuse.yaml | 54 +++ .../configs/network_los.yaml | 14 + .../configs/non_mandatory_tour_frequency.csv | 187 +++++++ .../configs/non_mandatory_tour_frequency.yaml | 52 ++ ..._mandatory_tour_frequency_alternatives.csv | 198 ++++++++ ...requency_annotate_persons_preprocessor.csv | 36 ++ ...r_frequency_coefficients_PTYPE_DRIVING.csv | 60 +++ ...tour_frequency_coefficients_PTYPE_FULL.csv | 103 ++++ ...r_frequency_coefficients_PTYPE_NONWORK.csv | 90 ++++ ...tour_frequency_coefficients_PTYPE_PART.csv | 103 ++++ ...frequency_coefficients_PTYPE_PRESCHOOL.csv | 47 ++ ...r_frequency_coefficients_PTYPE_RETIRED.csv | 84 ++++ ...ur_frequency_coefficients_PTYPE_SCHOOL.csv | 72 +++ ...requency_coefficients_PTYPE_UNIVERSITY.csv | 81 ++++ ...ndatory_tour_frequency_extension_probs.csv | 193 ++++++++ .../configs/settings.yaml | 60 +++ ...ur_departure_and_duration_alternatives.csv | 191 ++++++++ .../data/.gitkeep | 0 .../test_non_mandatory_tour_frequency.py | 336 +++++++++++++ test/parking_location/.gitkeep | 0 .../compare-parking-location-results.R | 62 +++ .../configs/ParkLocationChoice.xls | Bin 0 -> 117248 bytes .../configs/annotate_households.csv | 13 + .../configs/annotate_landuse.csv | 7 + .../configs/annotate_persons.csv | 16 + .../configs/annotate_persons_after_hh.csv | 5 + .../configs/initialize_households.yaml | 37 ++ .../configs/initialize_landuse.yaml | 52 ++ .../parking_location/configs/network_los.yaml | 24 + .../configs/parking_location_choice.csv | 34 ++ .../configs/parking_location_choice.yaml | 22 + ...ion_choice_annotate_trips_preprocessor.csv | 6 + .../parking_location_choice_coeffs.csv | 5 + test/parking_location/configs/settings.yaml | 62 +++ ...ur_departure_and_duration_alternatives.csv | 191 ++++++++ .../parking-location-results-summary.twbx | Bin 0 -> 717798 bytes .../parking_location/test_parking_location.py | 458 ++++++++++++++++++ 150 files changed, 9230 insertions(+), 144 deletions(-) create mode 100644 activitysim/abm/models/joint_tour_frequency_composition.py create mode 100644 activitysim/core/configuration.py mode change 100644 => 100755 activitysim/examples/prototype_mwcog/configs/trip_destination_annotate_trips_preprocessor.csv create mode 100644 activitysim/examples/prototype_mwcog/configs/trip_scheduling_preprocessor.csv create mode 100644 activitysim/examples/prototype_mwcog/configs/trip_scheduling_probs_purpose_stops.csv mode change 100755 => 100644 activitysim/examples/prototype_semcog/configs/joint_tour_scheduling.yaml mode change 100755 => 100644 activitysim/examples/prototype_semcog/configs/logging.yaml mode change 100755 => 100644 activitysim/examples/prototype_semcog/configs/tour_scheduling_joint.csv create mode 100644 test/auto_ownership/.gitkeep create mode 100644 test/auto_ownership/configs/annotate_households.csv create mode 100644 test/auto_ownership/configs/annotate_landuse.csv create mode 100644 test/auto_ownership/configs/annotate_persons.csv create mode 100644 test/auto_ownership/configs/annotate_persons_after_hh.csv create mode 100644 test/auto_ownership/configs/auto_ownership.csv create mode 100644 test/auto_ownership/configs/auto_ownership.yaml create mode 100644 test/auto_ownership/configs/auto_ownership_coefficients.csv create mode 100644 test/auto_ownership/configs/constants.yaml create mode 100644 test/auto_ownership/configs/initialize_households.yaml create mode 100644 test/auto_ownership/configs/initialize_landuse.yaml create mode 100644 test/auto_ownership/configs/network_los.yaml create mode 100644 test/auto_ownership/configs/settings.yaml create mode 100644 test/auto_ownership/configs/tour_departure_and_duration_alternatives.csv create mode 100644 test/auto_ownership/data/.gitkeep create mode 100644 test/auto_ownership/test_auto_ownership.py create mode 100644 test/cdap/.gitkeep create mode 100644 test/cdap/configs/annotate_households.csv create mode 100644 test/cdap/configs/annotate_households_cdap.csv create mode 100644 test/cdap/configs/annotate_landuse.csv create mode 100644 test/cdap/configs/annotate_persons.csv create mode 100644 test/cdap/configs/annotate_persons_after_hh.csv create mode 100644 test/cdap/configs/annotate_persons_cdap.csv create mode 100644 test/cdap/configs/cdap.yaml create mode 100644 test/cdap/configs/cdap_coefficients.csv create mode 100644 test/cdap/configs/cdap_fixed_relative_proportions.csv create mode 100644 test/cdap/configs/cdap_indiv_and_hhsize1.csv create mode 100644 test/cdap/configs/cdap_interaction_coefficients.csv create mode 100644 test/cdap/configs/cdap_joint_tour_coefficients.csv create mode 100644 test/cdap/configs/constants.yaml create mode 100644 test/cdap/configs/initialize_households.yaml create mode 100644 test/cdap/configs/initialize_landuse.yaml create mode 100644 test/cdap/configs/network_los.yaml create mode 100644 test/cdap/configs/settings.yaml create mode 100644 test/cdap/configs/tour_departure_and_duration_alternatives.csv create mode 100644 test/cdap/data/.gitkeep create mode 100644 test/cdap/test_cdap.py create mode 100644 test/conftest.py create mode 100644 test/joint_tour_frequency/.gitkeep create mode 100644 test/joint_tours/.gitkeep create mode 100644 test/joint_tours/configs/JointTourFrequency.xls create mode 100644 test/joint_tours/configs/annotate_households.csv create mode 100644 test/joint_tours/configs/annotate_landuse.csv create mode 100644 test/joint_tours/configs/annotate_persons.csv create mode 100644 test/joint_tours/configs/annotate_persons_jtp.csv create mode 100644 test/joint_tours/configs/annotate_tours.csv create mode 100644 test/joint_tours/configs/constants.yaml create mode 100644 test/joint_tours/configs/initialize_households.yaml create mode 100644 test/joint_tours/configs/initialize_landuse.yaml create mode 100644 test/joint_tours/configs/initialize_tours.yaml create mode 100644 test/joint_tours/configs/joint_tour_frequency_composition.csv create mode 100644 test/joint_tours/configs/joint_tour_frequency_composition.yaml create mode 100644 test/joint_tours/configs/joint_tour_frequency_composition_alternatives.csv create mode 100644 test/joint_tours/configs/joint_tour_frequency_composition_annotate_alt_preprocessor.csv create mode 100644 test/joint_tours/configs/joint_tour_frequency_composition_annotate_households_preprocessor.csv create mode 100644 test/joint_tours/configs/joint_tour_frequency_composition_coeffs.csv create mode 100644 test/joint_tours/configs/joint_tour_participation.csv create mode 100644 test/joint_tours/configs/joint_tour_participation.yaml create mode 100644 test/joint_tours/configs/joint_tour_participation_annotate_participants_preprocessor.csv create mode 100644 test/joint_tours/configs/joint_tour_participation_coefficients.csv create mode 100644 test/joint_tours/configs/network_los.yaml create mode 100644 test/joint_tours/configs/settings.yaml create mode 100644 test/joint_tours/configs/tour_departure_and_duration_alternatives.csv create mode 100644 test/joint_tours/test_joint_tours.py create mode 100644 test/non_mandatory_tour_frequency/.gitkeep create mode 100644 test/non_mandatory_tour_frequency/configs/NonMandatoryIndividualTourFrequency.xls create mode 100644 test/non_mandatory_tour_frequency/configs/annotate_households.csv create mode 100644 test/non_mandatory_tour_frequency/configs/annotate_landuse.csv create mode 100644 test/non_mandatory_tour_frequency/configs/annotate_persons.csv create mode 100644 test/non_mandatory_tour_frequency/configs/annotate_persons_after_hh.csv create mode 100644 test/non_mandatory_tour_frequency/configs/annotate_persons_nmtf.csv create mode 100644 test/non_mandatory_tour_frequency/configs/constants.yaml create mode 100644 test/non_mandatory_tour_frequency/configs/initialize_households.yaml create mode 100644 test/non_mandatory_tour_frequency/configs/initialize_landuse.yaml create mode 100644 test/non_mandatory_tour_frequency/configs/network_los.yaml create mode 100644 test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency.csv create mode 100644 test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency.yaml create mode 100644 test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_alternatives.csv create mode 100644 test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_annotate_persons_preprocessor.csv create mode 100644 test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_DRIVING.csv create mode 100644 test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_FULL.csv create mode 100644 test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_NONWORK.csv create mode 100644 test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_PART.csv create mode 100644 test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_PRESCHOOL.csv create mode 100644 test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_RETIRED.csv create mode 100644 test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_SCHOOL.csv create mode 100644 test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_UNIVERSITY.csv create mode 100644 test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_extension_probs.csv create mode 100644 test/non_mandatory_tour_frequency/configs/settings.yaml create mode 100644 test/non_mandatory_tour_frequency/configs/tour_departure_and_duration_alternatives.csv create mode 100644 test/non_mandatory_tour_frequency/data/.gitkeep create mode 100644 test/non_mandatory_tour_frequency/test_non_mandatory_tour_frequency.py create mode 100644 test/parking_location/.gitkeep create mode 100644 test/parking_location/compare-parking-location-results.R create mode 100644 test/parking_location/configs/ParkLocationChoice.xls create mode 100644 test/parking_location/configs/annotate_households.csv create mode 100644 test/parking_location/configs/annotate_landuse.csv create mode 100644 test/parking_location/configs/annotate_persons.csv create mode 100644 test/parking_location/configs/annotate_persons_after_hh.csv create mode 100644 test/parking_location/configs/initialize_households.yaml create mode 100644 test/parking_location/configs/initialize_landuse.yaml create mode 100644 test/parking_location/configs/network_los.yaml create mode 100644 test/parking_location/configs/parking_location_choice.csv create mode 100644 test/parking_location/configs/parking_location_choice.yaml create mode 100644 test/parking_location/configs/parking_location_choice_annotate_trips_preprocessor.csv create mode 100644 test/parking_location/configs/parking_location_choice_coeffs.csv create mode 100644 test/parking_location/configs/settings.yaml create mode 100644 test/parking_location/configs/tour_departure_and_duration_alternatives.csv create mode 100644 test/parking_location/notebook/parking-location-results-summary.twbx create mode 100644 test/parking_location/test_parking_location.py diff --git a/HOW_TO_RELEASE.md b/HOW_TO_RELEASE.md index fdfc60719..237d7e414 100644 --- a/HOW_TO_RELEASE.md +++ b/HOW_TO_RELEASE.md @@ -42,15 +42,16 @@ 00. Run black to ensure that the codebase passes all style checks. This check should only take a few seconds. These checks are also done on - Travis and are platform independent, so they should not be necessary to + GitHub Actions and are platform independent, so they should not be necessary to replicate locally, but are listed here for completeness. ```sh black --check --diff . ``` -00. Run the regular test suite on Windows. Travis tests are done on Linux, - but most users are on Windows, and the test suite should also be run - on Windows to ensure that it works on that platform as well. If you +00. Run the regular test suite on Windows. Most GitHub Actions tests are done on Linux, + Linux (it's faster to start up and run a new clean VM for testing) but most + users are on Windows, and the test suite should also be run on Windows to + ensure that it works on that platform as well. If you are not preparing this release on Windows, you should be sure to run at least through this step on a Windows machine before finalizing a release. @@ -135,6 +136,10 @@ ```sh gh release create v1.2.3 ``` + The process of creating and tagging a release will automatically + trigger various GitHub Actions scripts to build, test, and publish the + new release to PyPI and conda forge, assuming there are no errors. + For a development pre-release, include the `--prerelease` argument. As the project's policy is that only formally released code is merged to the main branch, any pre-release should also be built against a diff --git a/activitysim/abm/models/__init__.py b/activitysim/abm/models/__init__.py index 91b802d76..1c288f8c4 100644 --- a/activitysim/abm/models/__init__.py +++ b/activitysim/abm/models/__init__.py @@ -20,6 +20,7 @@ joint_tour_frequency, joint_tour_participation, joint_tour_scheduling, + joint_tour_frequency_composition, location_choice, mandatory_scheduling, mandatory_tour_frequency, diff --git a/activitysim/abm/models/cdap.py b/activitysim/abm/models/cdap.py index b37cf8a9a..f7da93687 100644 --- a/activitysim/abm/models/cdap.py +++ b/activitysim/abm/models/cdap.py @@ -78,6 +78,17 @@ def cdap_simulate(persons_merged, persons, households, chunk_size, trace_hh_id): file_name=model_settings["FIXED_RELATIVE_PROPORTIONS_SPEC"] ) + add_joint_tour_utility = model_settings.get("ADD_JOINT_TOUR_UTILITY", False) + + if add_joint_tour_utility: + # Rules and coefficients for generating cdap joint tour specs for different household sizes + joint_tour_coefficients_file_name = model_settings.get( + "JOINT_TOUR_COEFFICIENTS", "cdap_joint_tour_coefficients.csv" + ) + cdap_joint_tour_coefficients = pd.read_csv( + config.config_file_path(joint_tour_coefficients_file_name), comment="#" + ) + persons_merged = persons_merged.to_frame() # add tour-based chunk_id so we can chunk all trips in tour together @@ -101,11 +112,27 @@ def cdap_simulate(persons_merged, persons, households, chunk_size, trace_hh_id): # (also when multiprocessing locutor might not see all household sizes) logger.info("Pre-building cdap specs") for hhsize in range(2, cdap.MAX_HHSIZE + 1): - spec = cdap.build_cdap_spec(cdap_interaction_coefficients, hhsize, cache=True) + spec = cdap.build_cdap_spec( + cdap_interaction_coefficients, + hhsize, + cache=True, + joint_tour_alt=add_joint_tour_utility, + ) if inject.get_injectable("locutor", False): spec.to_csv( config.output_file_path("cdap_spec_%s.csv" % hhsize), index=True ) + if add_joint_tour_utility: + # build cdap joint tour spec + # joint_spec_dependency = spec.loc[[c for c in spec.index if c.startswith(('M_p', 'N_p', 'H_p'))]] + joint_spec = cdap.build_cdap_joint_spec( + cdap_joint_tour_coefficients, hhsize, cache=True + ) + if inject.get_injectable("locutor", False): + joint_spec.to_csv( + config.output_file_path("cdap_joint_spec_%s.csv" % hhsize), + index=True, + ) if estimator: estimator.write_model_settings(model_settings, "cdap.yaml") @@ -127,17 +154,32 @@ def cdap_simulate(persons_merged, persons, households, chunk_size, trace_hh_id): logger.info("Running cdap_simulate with %d persons", len(persons_merged.index)) - choices = cdap.run_cdap( - persons=persons_merged, - person_type_map=person_type_map, - cdap_indiv_spec=cdap_indiv_spec, - cdap_interaction_coefficients=cdap_interaction_coefficients, - cdap_fixed_relative_proportions=cdap_fixed_relative_proportions, - locals_d=constants, - chunk_size=chunk_size, - trace_hh_id=trace_hh_id, - trace_label=trace_label, - ) + if add_joint_tour_utility: + choices, hh_joint = cdap.run_cdap( + persons=persons_merged, + person_type_map=person_type_map, + cdap_indiv_spec=cdap_indiv_spec, + cdap_interaction_coefficients=cdap_interaction_coefficients, + cdap_fixed_relative_proportions=cdap_fixed_relative_proportions, + locals_d=constants, + chunk_size=chunk_size, + trace_hh_id=trace_hh_id, + trace_label=trace_label, + add_joint_tour_utility=add_joint_tour_utility, + ) + else: + choices = cdap.run_cdap( + persons=persons_merged, + person_type_map=person_type_map, + cdap_indiv_spec=cdap_indiv_spec, + cdap_interaction_coefficients=cdap_interaction_coefficients, + cdap_fixed_relative_proportions=cdap_fixed_relative_proportions, + locals_d=constants, + chunk_size=chunk_size, + trace_hh_id=trace_hh_id, + trace_label=trace_label, + add_joint_tour_utility=add_joint_tour_utility, + ) if estimator: estimator.write_choices(choices) @@ -161,6 +203,11 @@ def cdap_simulate(persons_merged, persons, households, chunk_size, trace_hh_id): # - annotate households table households = households.to_frame() + + if add_joint_tour_utility: + hh_joint = hh_joint.reindex(households.index) + households["has_joint_tour"] = hh_joint + expressions.assign_columns( df=households, model_settings=model_settings.get("annotate_households"), diff --git a/activitysim/abm/models/joint_tour_frequency_composition.py b/activitysim/abm/models/joint_tour_frequency_composition.py new file mode 100644 index 000000000..3e52d27fa --- /dev/null +++ b/activitysim/abm/models/joint_tour_frequency_composition.py @@ -0,0 +1,204 @@ +# ActivitySim +# See full license in LICENSE.txt. +import logging + +import numpy as np +import pandas as pd +import os +from activitysim.core.interaction_simulate import interaction_simulate + +from activitysim.core import simulate +from activitysim.core import tracing +from activitysim.core import pipeline +from activitysim.core import config +from activitysim.core import inject +from activitysim.core import expressions + +from .util import estimation + +from .util.overlap import hh_time_window_overlap +from .util.tour_frequency import process_joint_tours_frequency_composition + +logger = logging.getLogger(__name__) + + +@inject.step() +def joint_tour_frequency_composition( + households_merged, persons, chunk_size, trace_hh_id +): + """ + This model predicts the frequency and composition of fully joint tours. + """ + + trace_label = "joint_tour_frequency_composition" + model_settings_file_name = "joint_tour_frequency_composition.yaml" + + model_settings = config.read_model_settings(model_settings_file_name) + + alt_tdd = simulate.read_model_alts( + "joint_tour_frequency_composition_alternatives.csv", set_index="alt" + ) + + # - only interested in households with more than one cdap travel_active person and + # - at least one non-preschooler + households_merged = households_merged.to_frame() + choosers = households_merged[households_merged.participates_in_jtf_model].copy() + + # - only interested in persons in choosers households + persons = persons.to_frame() + persons = persons[persons.household_id.isin(choosers.index)] + + logger.info("Running %s with %d households", trace_label, len(choosers)) + + # alt preprocessor + alt_preprocessor_settings = model_settings.get("ALTS_PREPROCESSOR", None) + if alt_preprocessor_settings: + + locals_dict = {} + + alt_tdd = alt_tdd.copy() + + expressions.assign_columns( + df=alt_tdd, + model_settings=alt_preprocessor_settings, + locals_dict=locals_dict, + trace_label=trace_label, + ) + + # - preprocessor + preprocessor_settings = model_settings.get("preprocessor", None) + if preprocessor_settings: + + locals_dict = { + "persons": persons, + "hh_time_window_overlap": hh_time_window_overlap, + } + + expressions.assign_columns( + df=choosers, + model_settings=preprocessor_settings, + locals_dict=locals_dict, + trace_label=trace_label, + ) + + estimator = estimation.manager.begin_estimation("joint_tour_frequency_composition") + + model_spec = simulate.read_model_spec(file_name=model_settings["SPEC"]) + coefficients_df = simulate.read_model_coefficients(model_settings) + model_spec = simulate.eval_coefficients(model_spec, coefficients_df, estimator) + + constants = config.get_model_constants(model_settings) + + if estimator: + estimator.write_spec(model_settings) + estimator.write_model_settings(model_settings, model_settings_file_name) + estimator.write_coefficients(coefficients_df, model_settings) + estimator.write_choosers(choosers) + estimator.write_alternatives(alts) + + assert choosers.index.name == "household_id" + assert "household_id" not in choosers.columns + choosers["household_id"] = choosers.index + + estimator.set_chooser_id(choosers.index.name) + + # The choice value 'joint_tour_frequency_composition' assigned by interaction_simulate + # is the index value of the chosen alternative in the alternatives table. + choices = interaction_simulate( + choosers=choosers, + alternatives=alt_tdd, + spec=model_spec, + locals_d=constants, + chunk_size=chunk_size, + trace_label=trace_label, + trace_choice_name=trace_label, + estimator=estimator, + ) + + if estimator: + estimator.write_choices(choices) + choices = estimator.get_survey_values( + choices, "households", "joint_tour_frequency_composition" + ) + estimator.write_override_choices(choices) + estimator.end_estimation() + + # add joint tour frequency composition column to household table + households_merged["joint_tour_frequency_composition"] = choices.reindex( + households_merged.index + ).fillna(0) + + # - create joint_tours based on choices + + # - we need a person_id in order to generate the tour index (and for register_traceable_table) + # - but we don't know the tour participants yet + # - so we arbitrarily choose the first person in the household + # - to be point person for the purpose of generating an index and setting origin + temp_point_persons = persons.loc[persons.PNUM == 1] + temp_point_persons["person_id"] = temp_point_persons.index + temp_point_persons = temp_point_persons.set_index("household_id") + temp_point_persons = temp_point_persons[["person_id", "home_zone_id"]] + + # create a tours table of tour_category "joint" and different tour_types (e.g. shopping, eat) + # and add the composition column (adults or children or mixed) to the tour + + # Choices + # hhid choice + # 11111 1 + # 22222 2 + # 33333 3 + + # Alts + # alt purpose1 purpose2 party1 party2 eat shop + # 1 5 0 3 0 1 0 + # 2 5 6 1 3 1 1 + # 3 6 0 1 0 0 1 + + # Joint Tours + # hhid type category composition + # 11111 eat joint mixed + # 22222 eat joint adults + # 22222 shop joint mixed + # 33333 shop joint adults + + joint_tours = process_joint_tours_frequency_composition( + choices, alt_tdd, temp_point_persons + ) + + tours = pipeline.extend_table("tours", joint_tours) + + tracing.register_traceable_table("tours", joint_tours) + pipeline.get_rn_generator().add_channel("tours", joint_tours) + + # we expect there to be an alt with no tours - which we can use to backfill non-travelers + no_tours_alt = 0 + households_merged["joint_tour_frequency_composition"] = ( + choices.reindex(households_merged.index).fillna(no_tours_alt).astype(str) + ) + + households_merged["num_hh_joint_tours"] = ( + joint_tours.groupby("household_id") + .size() + .reindex(households_merged.index) + .fillna(0) + .astype(np.int8) + ) + + pipeline.replace_table("households", households_merged) + + tracing.print_summary( + "joint_tour_frequency_composition", + households_merged.joint_tour_frequency_composition, + value_counts=True, + ) + + if trace_hh_id: + tracing.trace_df( + households_merged, label="joint_tour_frequency_composition.households" + ) + + tracing.trace_df( + joint_tours, + label="joint_tour_frequency_composition.joint_tours", + slicer="household_id", + ) diff --git a/activitysim/abm/models/joint_tour_participation.py b/activitysim/abm/models/joint_tour_participation.py index 939d9fedd..ee8658ae5 100644 --- a/activitysim/abm/models/joint_tour_participation.py +++ b/activitysim/abm/models/joint_tour_participation.py @@ -3,6 +3,7 @@ import logging import pandas as pd +import numpy as np from activitysim.abm.models.util.canonical_ids import MAX_PARTICIPANT_PNUM from activitysim.core import ( @@ -57,7 +58,7 @@ def joint_tour_participation_candidates(joint_tours, persons_merged): # - stable (predictable) index # if this happens, participant_id may not be unique - # channel random seeds will overlap at MAX_PARTICIPANT_PNUM (not probably a big deal) + # channel random seeds will overlap at MAX_PARTICIPANT_PNUM (probably not a big deal) # and estimation infer will fail assert ( candidates.PNUM.max() < MAX_PARTICIPANT_PNUM @@ -65,6 +66,7 @@ def joint_tour_participation_candidates(joint_tours, persons_merged): candidates["participant_id"] = ( candidates[joint_tours.index.name] * MAX_PARTICIPANT_PNUM ) + candidates.PNUM + candidates["participant_id"] = candidates["participant_id"].astype(np.uint64) candidates.set_index( "participant_id", drop=True, inplace=True, verify_integrity=True ) @@ -198,7 +200,19 @@ def participants_chooser(probs, choosers, spec, trace_label): transpose=False, ) print(unsatisfied_candidates.head(20)) - assert False + + if model_settings.get("FORCE_PARTICIPATION", False): + logger.warning( + f"Forcing joint tour participation for {num_tours_remaining} tours." + ) + # anybody with probability > 0 is forced to join the joint tour + probs[choice_col] = np.where(probs[choice_col] > 0, 1, 0) + non_choice_col = [col for col in probs.columns if col != choice_col][0] + probs[non_choice_col] = 1 - probs[choice_col] + else: + raise RuntimeError( + f"{num_tours_remaining} tours could not be satisfied after {iter} iterations" + ) choices, rands = logit.make_choices( probs, trace_label=trace_label, trace_choosers=choosers @@ -209,6 +223,13 @@ def participants_chooser(probs, choosers, spec, trace_label): tour_satisfaction = get_tour_satisfaction(candidates, participate) num_tours_satisfied_this_iter = tour_satisfaction.sum() + if (iter > MAX_ITERATIONS) & ( + num_tours_remaining != num_tours_satisfied_this_iter + ): + logger.error( + f"Still do not satisfy participation for {num_tours_remaining - num_tours_satisfied_this_iter} tours." + ) + if num_tours_satisfied_this_iter > 0: num_tours_remaining -= num_tours_satisfied_this_iter diff --git a/activitysim/abm/models/location_choice.py b/activitysim/abm/models/location_choice.py index 1a7564942..dd5e279b3 100644 --- a/activitysim/abm/models/location_choice.py +++ b/activitysim/abm/models/location_choice.py @@ -426,6 +426,8 @@ def run_location_sample( ) dest_size_terms = dest_size_terms[dest_size_terms.size_term > 0] + assert len(dest_size_terms) > 0, "No destination with available size terms" + # by default, enable presampling for multizone systems, unless they disable it in settings file pre_sample_taz = not (network_los.zone_system == los.ONE_ZONE) if pre_sample_taz and not config.setting("want_dest_choice_presampling", True): diff --git a/activitysim/abm/models/non_mandatory_tour_frequency.py b/activitysim/abm/models/non_mandatory_tour_frequency.py index 93b36b2f4..521f49c47 100644 --- a/activitysim/abm/models/non_mandatory_tour_frequency.py +++ b/activitysim/abm/models/non_mandatory_tour_frequency.py @@ -271,7 +271,7 @@ def non_mandatory_tour_frequency(persons, persons_merged, chunk_size, trace_hh_i no_tours_alt = (alternatives.sum(axis=1) == 0).index[0] # need to reindex as we only handled persons with cdap_activity in ['M', 'N'] persons["non_mandatory_tour_frequency"] = ( - choices.reindex(persons.index).fillna(no_tours_alt).astype(np.int8) + choices.reindex(persons.index).fillna(no_tours_alt).astype(np.int16) ) """ diff --git a/activitysim/abm/models/parking_location_choice.py b/activitysim/abm/models/parking_location_choice.py index 3b10f32b4..a87703b8b 100644 --- a/activitysim/abm/models/parking_location_choice.py +++ b/activitysim/abm/models/parking_location_choice.py @@ -232,7 +232,6 @@ def run_parking_destination( alt_column_filter_name = model_settings.get("ALTERNATIVE_FILTER_COLUMN_NAME") alternatives = land_use[land_use[alt_column_filter_name]] - alternatives.index.name = parking_location_column_name choices_list = [] diff --git a/activitysim/abm/models/telecommute_frequency.py b/activitysim/abm/models/telecommute_frequency.py index cc1eec489..4596a8911 100755 --- a/activitysim/abm/models/telecommute_frequency.py +++ b/activitysim/abm/models/telecommute_frequency.py @@ -57,7 +57,7 @@ def telecommute_frequency(persons_merged, persons, chunk_size, trace_hh_id): if estimator: estimator.write_model_settings(model_settings, model_settings_file_name) estimator.write_spec(model_settings) - estimator.write_coefficients(coefficients_df) + estimator.write_coefficients(coefficients_df, model_settings) estimator.write_choosers(choosers) choices = simulate.simple_simulate( diff --git a/activitysim/abm/models/transit_pass_ownership.py b/activitysim/abm/models/transit_pass_ownership.py index 6507ab825..92d97080f 100644 --- a/activitysim/abm/models/transit_pass_ownership.py +++ b/activitysim/abm/models/transit_pass_ownership.py @@ -51,7 +51,7 @@ def transit_pass_ownership(persons_merged, persons, chunk_size, trace_hh_id): if estimator: estimator.write_model_settings(model_settings, model_settings_file_name) estimator.write_spec(model_settings) - estimator.write_coefficients(coefficients_df) + estimator.write_coefficients(coefficients_df, model_settings) estimator.write_choosers(choosers) choices = simulate.simple_simulate( diff --git a/activitysim/abm/models/transit_pass_subsidy.py b/activitysim/abm/models/transit_pass_subsidy.py index 4e513a661..45a118fda 100644 --- a/activitysim/abm/models/transit_pass_subsidy.py +++ b/activitysim/abm/models/transit_pass_subsidy.py @@ -51,7 +51,7 @@ def transit_pass_subsidy(persons_merged, persons, chunk_size, trace_hh_id): if estimator: estimator.write_model_settings(model_settings, model_settings_file_name) estimator.write_spec(model_settings) - estimator.write_coefficients(coefficients_df) + estimator.write_coefficients(coefficients_df, model_settings) estimator.write_choosers(choosers) choices = simulate.simple_simulate( diff --git a/activitysim/abm/models/trip_mode_choice.py b/activitysim/abm/models/trip_mode_choice.py index 54586a448..e7bb200e4 100644 --- a/activitysim/abm/models/trip_mode_choice.py +++ b/activitysim/abm/models/trip_mode_choice.py @@ -164,8 +164,10 @@ def trip_mode_choice(trips, network_los, chunk_size, trace_hh_id): model_spec = simulate.read_model_spec(file_name=model_settings["SPEC"]) nest_spec = config.get_logit_model_settings(model_settings) + cols_to_keep = model_settings.get("CHOOSER_COLS_TO_KEEP", None) choices_list = [] + cols_to_keep_list = [] for primary_purpose, trips_segment in trips_merged.groupby("primary_purpose"): segment_trace_label = tracing.extend_trace_label(trace_label, primary_purpose) @@ -250,6 +252,14 @@ def trip_mode_choice(trips, network_los, chunk_size, trace_hh_id): ) choices_list.append(choices) + if cols_to_keep: + cols_not_in_choosers = [ + col for col in cols_to_keep if col not in trips_segment.columns + ] + assert ( + len(cols_not_in_choosers) == 0 + ), "{cols_not_in_choosers} from CHOOSER_COLS_TO_KEEP is not in the choosers dataframe" + cols_to_keep_list.append(trips_segment[cols_to_keep]) choices_df = pd.concat(choices_list) @@ -279,6 +289,12 @@ def trip_mode_choice(trips, network_los, chunk_size, trace_hh_id): estimator.write_override_choices(choices_df.trip_mode) estimator.end_estimation() trips_df = trips.to_frame() + + # adding columns from the chooser table to include in final output + if len(cols_to_keep_list) > 0: + cols_to_keep_df = pd.concat(cols_to_keep_list) + choices_df = pd.concat([choices_df, cols_to_keep_df], axis=1) + assign_in_place(trips_df, choices_df) if pipeline.is_table("school_escort_tours") & model_settings.get( @@ -301,7 +317,7 @@ def trip_mode_choice(trips, network_los, chunk_size, trace_hh_id): pipeline.replace_table("trips", trips_df) if model_settings.get("annotate_trips"): - annotate.annotate_trips(model_settings, trace_label) + annotate.annotate_trips(model_settings, trace_label, locals_dict) if trace_hh_id: tracing.trace_df( diff --git a/activitysim/abm/models/trip_scheduling.py b/activitysim/abm/models/trip_scheduling.py index f8345650d..54c3eb201 100644 --- a/activitysim/abm/models/trip_scheduling.py +++ b/activitysim/abm/models/trip_scheduling.py @@ -1,6 +1,7 @@ # ActivitySim # See full license in LICENSE.txt. import logging +import warnings from builtins import range import numpy as np @@ -8,11 +9,11 @@ from activitysim.abm.models.util import estimation from activitysim.abm.models.util.trip import cleanup_failed_trips, failed_trip_cohorts -from activitysim.core import chunk, config, inject, logit, pipeline, tracing +from activitysim.core import chunk, config, expressions, inject, pipeline, tracing from activitysim.core.util import reindex -from .util.school_escort_tours_trips import split_out_school_escorting_trips from .util import probabilistic_scheduling as ps +from .util.school_escort_tours_trips import split_out_school_escorting_trips logger = logging.getLogger(__name__) @@ -36,6 +37,7 @@ DEPARTURE_MODE = "departure" DURATION_MODE = "stop_duration" +RELATIVE_MODE = "relative" PROBS_JOIN_COLUMNS_DEPARTURE_BASED = [ "primary_purpose", "outbound", @@ -43,6 +45,23 @@ "trip_num", ] PROBS_JOIN_COLUMNS_DURATION_BASED = ["outbound", "stop_num"] +PROBS_JOIN_COLUMNS_RELATIVE_BASED = ["outbound", "periods_left"] + + +def _logic_version(model_settings): + logic_version = model_settings.get("logic_version", None) + if logic_version is None: + warnings.warn( + "The trip_scheduling component now has a logic_version setting " + "to control how the scheduling rules are applied. The default " + "logic_version is currently set at `1` but may be moved up in " + "the future. Explicitly set `logic_version` to 2 in the model " + "settings to upgrade your model logic now, or set it to 1 to " + "suppress this message.", + FutureWarning, + ) + logic_version = 1 + return logic_version def set_tour_hour(trips, tours): @@ -106,7 +125,7 @@ def set_stop_num(trips): trips["stop_num"] = trips.stop_num.where(trips["outbound"], trips["trip_num"]) -def update_tour_earliest(trips, outbound_choices): +def update_tour_earliest(trips, outbound_choices, logic_version: int): """ Updates "earliest" column for inbound trips based on the maximum outbound trip departure time of the tour. @@ -119,6 +138,14 @@ def update_tour_earliest(trips, outbound_choices): outbound_choices: pd.Series time periods depart choices, one per trip (except for trips with zero probs) + logic_version : int + Logic version 1 is the original ActivitySim implementation, which + sets the "earliest" value to the max outbound departure for all + inbound trips, regardless of what that max outbound departure value + is (even if it is NA). Logic version 2 introduces a change whereby + that assignment is only made if the max outbound departure value is + not NA. + Returns ------- modifies trips in place @@ -142,9 +169,19 @@ def update_tour_earliest(trips, outbound_choices): # set the trips "earliest" column equal to the max outbound departure # time for all inbound trips. preserve values that were used for outbound trips - tmp_trips["earliest"] = tmp_trips["earliest"].where( - tmp_trips["outbound"], tmp_trips["max_outbound_departure"] - ) + # FIXME - extra logic added because max_outbound_departure can be NA if previous failed trip was removed + if logic_version == 1: + tmp_trips["earliest"] = tmp_trips["earliest"].where( + tmp_trips["outbound"], tmp_trips["max_outbound_departure"] + ) + elif logic_version > 1: + tmp_trips["earliest"] = np.where( + ~tmp_trips["outbound"] & ~tmp_trips["max_outbound_departure"].isna(), + tmp_trips["max_outbound_departure"], + tmp_trips["earliest"], + ) + else: + raise ValueError(f"bad logic_version: {logic_version}") trips["earliest"] = tmp_trips["earliest"].reindex(trips.index) @@ -181,6 +218,7 @@ def schedule_trips_in_leg( failfix = model_settings.get(FAILFIX, FAILFIX_DEFAULT) depart_alt_base = model_settings.get("DEPART_ALT_BASE", 0) scheduling_mode = model_settings.get("scheduling_mode", "departure") + preprocessor_settings = model_settings.get("preprocessor", None) if scheduling_mode == "departure": probs_join_cols = model_settings.get( @@ -190,10 +228,14 @@ def schedule_trips_in_leg( probs_join_cols = model_settings.get( "probs_join_cols", PROBS_JOIN_COLUMNS_DURATION_BASED ) + elif scheduling_mode == "relative": + probs_join_cols = model_settings.get( + "probs_join_cols", PROBS_JOIN_COLUMNS_RELATIVE_BASED + ) else: logger.error( "Invalid scheduling mode specified: {0}.".format(scheduling_mode), - "Please select one of ['departure', 'stop_duration'] and try again.", + "Please select one of ['departure', 'stop_duration', 'relative'] and try again.", ) # logger.debug("%s scheduling %s trips" % (trace_label, trips.shape[0])) @@ -232,18 +274,34 @@ def schedule_trips_in_leg( ADJUST_NEXT_DEPART_COL = "latest" trips.next_trip_id = trips.next_trip_id.where(~is_final, NO_TRIP_ID) + network_los = inject.get_injectable("network_los") + locals_dict = {"network_los": network_los} + locals_dict.update(config.get_model_constants(model_settings)) + first_trip_in_leg = True for i in range(trips.trip_num.min(), trips.trip_num.max() + 1): + nth_trace_label = tracing.extend_trace_label(trace_label, "num_%s" % i) - if outbound or scheduling_mode == DURATION_MODE: + # - annotate trips + if preprocessor_settings: + expressions.assign_columns( + df=trips, + model_settings=preprocessor_settings, + locals_dict=locals_dict, + trace_label=nth_trace_label, + ) + + if ( + outbound + or (scheduling_mode == DURATION_MODE) + or (scheduling_mode == RELATIVE_MODE) + ): # iterate in ascending trip_num order nth_trips = trips[trips.trip_num == i] else: # iterate over inbound trips in descending trip_num order, skipping the final trip nth_trips = trips[trips.trip_num == trips.trip_count - i] - nth_trace_label = tracing.extend_trace_label(trace_label, "num_%s" % i) - choices = ps.make_scheduling_choices( nth_trips, scheduling_mode, @@ -265,6 +323,17 @@ def schedule_trips_in_leg( ) choices = choices.fillna(trips[ADJUST_NEXT_DEPART_COL]) + if scheduling_mode == RELATIVE_MODE: + # choices are relative to the previous departure time + choices = nth_trips.earliest + choices + # need to update the departure time based on the choice + logic_version = _logic_version(model_settings) + if logic_version == 1: + raise ValueError( + "cannot use logic version 1 with 'relative' scheduling mode" + ) + update_tour_earliest(trips, choices, logic_version) + # adjust allowed depart range of next trip has_next_trip = nth_trips.next_trip_id != NO_TRIP_ID if has_next_trip.any(): @@ -299,7 +368,6 @@ def run_trip_scheduling( trace_hh_id, trace_label, ): - set_tour_hour(trips_chunk, tours) set_stop_num(trips_chunk) @@ -328,7 +396,7 @@ def run_trip_scheduling( # departure time of last outbound trips must constrain # departure times for initial inbound trips - update_tour_earliest(trips_chunk, choices) + update_tour_earliest(trips_chunk, choices, _logic_version(model_settings)) if (~trips_chunk.outbound).any(): leg_chunk = trips_chunk[~trips_chunk.outbound] @@ -353,7 +421,6 @@ def run_trip_scheduling( @inject.step() def trip_scheduling(trips, tours, chunk_size, trace_hh_id): - """ Trip scheduling assigns depart times for trips within the start, end limits of the tour. @@ -437,9 +504,9 @@ def trip_scheduling(trips, tours, chunk_size, trace_hh_id): ] estimator.write_choosers(trips_df[chooser_cols_for_estimation]) - probs_spec = pd.read_csv( - config.config_file_path("trip_scheduling_probs.csv"), comment="#" - ) + probs_spec_file = model_settings.get("PROBS_SPEC", "trip_scheduling_probs.csv") + logger.debug(f"probs_spec_file: {config.config_file_path(probs_spec_file)}") + probs_spec = pd.read_csv(config.config_file_path(probs_spec_file), comment="#") # FIXME for now, not really doing estimation for probabilistic model - just overwriting choices # besides, it isn't clear that named coefficients would be helpful if we had some form of estimation # coefficients_df = simulate.read_model_coefficients(model_settings) @@ -465,13 +532,10 @@ def trip_scheduling(trips, tours, chunk_size, trace_hh_id): ) in chunk.adaptive_chunked_choosers_by_chunk_id( trips_df, chunk_size, trace_label, trace_label ): - i = 0 while (i < max_iterations) and not trips_chunk.empty: - # only chunk log first iteration since memory use declines with each iteration with chunk.chunk_log(trace_label) if i == 0 else chunk.chunk_log_skip(): - i += 1 is_last_iteration = i == max_iterations @@ -499,6 +563,11 @@ def trip_scheduling(trips, tours, chunk_size, trace_hh_id): failed = choices.reindex(trips_chunk.index).isnull() logger.info("%s %s failed", trace_label_i, failed.sum()) + if (failed.sum() > 0) & ( + model_settings.get("scheduling_mode") == "relative" + ): + raise RuntimeError("failed trips with relative scheduling mode") + if not is_last_iteration: # boolean series of trips whose leg scheduling failed failed_cohorts = failed_trip_cohorts(trips_chunk, failed) diff --git a/activitysim/abm/models/util/annotate.py b/activitysim/abm/models/util/annotate.py index a7ef4f54c..e50519b38 100644 --- a/activitysim/abm/models/util/annotate.py +++ b/activitysim/abm/models/util/annotate.py @@ -15,7 +15,7 @@ logger = logging.getLogger(__name__) -def annotate_tours(model_settings, trace_label): +def annotate_tours(model_settings, trace_label, locals_dict={}): """ Add columns to the tours table in the pipeline according to spec. @@ -28,12 +28,13 @@ def annotate_tours(model_settings, trace_label): expressions.assign_columns( df=tours, model_settings=model_settings.get("annotate_tours"), + locals_dict=locals_dict, trace_label=tracing.extend_trace_label(trace_label, "annotate_tours"), ) pipeline.replace_table("tours", tours) -def annotate_trips(model_settings, trace_label): +def annotate_trips(model_settings, trace_label, locals_dict={}): """ Add columns to the trips table in the pipeline according to spec. @@ -46,6 +47,7 @@ def annotate_trips(model_settings, trace_label): expressions.assign_columns( df=trips, model_settings=model_settings.get("annotate_trips"), + locals_dict=locals_dict, trace_label=tracing.extend_trace_label(trace_label, "annotate_trips"), ) pipeline.replace_table("trips", trips) diff --git a/activitysim/abm/models/util/cdap.py b/activitysim/abm/models/util/cdap.py index 7e0f55186..b71d5128a 100644 --- a/activitysim/abm/models/util/cdap.py +++ b/activitysim/abm/models/util/cdap.py @@ -195,6 +195,12 @@ def individual_utilities( useful_columns = [_hh_id_, _ptype_, "cdap_rank", _hh_size_] indiv_utils[useful_columns] = persons[useful_columns] + # add attributes for joint tour utility + model_settings = config.read_model_settings("cdap.yaml") + additional_useful_columns = model_settings.get("JOINT_TOUR_USEFUL_COLUMNS", None) + if additional_useful_columns is not None: + indiv_utils[additional_useful_columns] = persons[additional_useful_columns] + if trace_hh_id: tracing.trace_df( indiv_utils, @@ -259,6 +265,10 @@ def cached_spec_name(hhsize): return "cdap_spec_%s" % hhsize +def cached_joint_spec_name(hhsize): + return "cdap_joint_spec_%s" % hhsize + + def get_cached_spec(hhsize): spec_name = cached_spec_name(hhsize) @@ -281,14 +291,39 @@ def get_cached_spec(hhsize): return None +def get_cached_joint_spec(hhsize): + + spec_name = cached_joint_spec_name(hhsize) + + spec = inject.get_injectable(spec_name, None) + if spec is not None: + logger.debug( + "build_cdap_joint_spec returning cached injectable spec %s", spec_name + ) + return spec + + return None + + def cache_spec(hhsize, spec): spec_name = cached_spec_name(hhsize) # cache as injectable inject.add_injectable(spec_name, spec) +def cache_joint_spec(hhsize, spec): + spec_name = cached_joint_spec_name(hhsize) + # cache as injectable + inject.add_injectable(spec_name, spec) + + def build_cdap_spec( - interaction_coefficients, hhsize, trace_spec=False, trace_label=None, cache=True + interaction_coefficients, + hhsize, + trace_spec=False, + trace_label=None, + cache=True, + joint_tour_alt=False, ): """ Build a spec file for computing utilities of alternative household member interaction patterns @@ -355,6 +390,14 @@ def build_cdap_spec( # e.g. ['HH', 'HM', 'HN', 'MH', 'MM', 'MN', 'NH', 'NM', 'NN'] for hhsize=2 alternatives = ["".join(tup) for tup in itertools.product("HMN", repeat=hhsize)] + if joint_tour_alt: + joint_alternatives = [ + "".join(tup) + "J" + for tup in itertools.product("HMN", repeat=hhsize) + if tup.count("M") + tup.count("N") >= 2 + ] + alternatives = alternatives + joint_alternatives + # spec df has expression column plus a column for each alternative spec = pd.DataFrame(columns=[expression_name] + alternatives) @@ -482,6 +525,207 @@ def build_cdap_spec( return spec +def build_cdap_joint_spec( + joint_tour_coefficients, hhsize, trace_spec=False, trace_label=None, cache=True +): + """ + Build a spec file for computing joint tour utilities of alternative household member for households of specified size. + We generate this spec automatically from a table of rules and coefficients because the + interaction rules are fairly simple and can be expressed compactly whereas + there is a lot of redundancy between the spec files for different household sizes, as well as + in the vectorized expression of the interaction alternatives within the spec file itself + joint_tour_coefficients has five columns: + label + label of the expression + description + description of the expression + dependency + if the expression is dependent on alternative, and which alternative is it dependent on + (e.g. M_px, N_px, H_px) + expression + expression of the utility term + coefficient + The coefficient to apply for the alternative + The generated spec will have the eval expression in the index, and a utility column for each + alternative (e.g. ['HH', 'HM', 'HN', 'MH', 'MM', 'MN', 'NH', 'NM', 'NN', 'MMJ', 'MNJ', 'NMJ', 'NNJ'] for hhsize 2 with joint alts) + Parameters + ---------- + joint_tour_coefficients : pandas.DataFrame + Rules and coefficients for generating joint tour specs for different household sizes + hhsize : int + household size for which the spec should be built. + Returns + ------- + spec: pandas.DataFrame + """ + + t0 = tracing.print_elapsed_time() + + # cdap joint spec is same for all households of MAX_HHSIZE and greater + hhsize = min(hhsize, MAX_HHSIZE) + + if cache: + spec = get_cached_joint_spec(hhsize) + if spec is not None: + return spec + + expression_name = "Expression" + + # generate a list of activity pattern alternatives for this hhsize + # e.g. ['HH', 'HM', 'HN', 'MH', 'MM', 'MN', 'NH', 'NM', 'NN'] for hhsize=2 + alternatives = ["".join(tup) for tup in itertools.product("HMN", repeat=hhsize)] + + joint_alternatives = [ + "".join(tup) + "J" + for tup in itertools.product("HMN", repeat=hhsize) + if tup.count("M") + tup.count("N") >= 2 + ] + alternatives = alternatives + joint_alternatives + + # spec df has expression column plus a column for each alternative + spec = pd.DataFrame(columns=[expression_name] + alternatives) + + # Before processing the interaction_coefficients, we add add rows to the spec to carry + # the alternative utilities previously computed for each individual into all hh alternative + # columns in which the individual assigned that alternative. The Expression column contains + # the name of the choosers column with that individuals utility for the individual alternative + # and the hh alternative columns that should receive that utility are given a value of 1 + # e.g. M_p1 is a column in choosers with the individual utility to person p1 of alternative M + # Expression MM MN MH NM NN NH HM HN HH + # M_p1 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 + # N_p1 0.0 0.0 0.0 1.0 1.0 1.0 0.0 0.0 0.0 + for pnum in range(1, hhsize + 1): + for activity in ["M", "N", "H"]: + + new_row_index = len(spec) + spec.loc[new_row_index, expression_name] = add_pn(activity, pnum) + + # list of alternative columns where person pnum has expression activity + # e.g. for M_p1 we want the columns where activity M is in position p1 + alternative_columns = [ + alt for alt in alternatives if alt[pnum - 1] == activity + ] + spec.loc[new_row_index, alternative_columns] = 1 + + # for each row in the joint util table + for row in joint_tour_coefficients.itertuples(): + + # if there is no dependencies + if row.dependency is np.nan: + expression = row.Expression + # add a new row to spec + new_row_index = len(spec) + spec.loc[new_row_index, expression_name] = expression + spec.loc[new_row_index, alternatives] = row.coefficient + # if there is dependencies + else: + dependency_name = row.dependency + expression = row.Expression + coefficient = row.coefficient + if dependency_name in ["M_px", "N_px", "H_px"]: + if "_pxprod" in expression: + prod_conds = row.Expression.split("|") + expanded_expressions = [ + tup + for tup in itertools.product( + range(len(prod_conds)), repeat=hhsize + ) + ] + for expression_tup in expanded_expressions: + expression_list = [] + dependency_list = [] + for counter in range(len(expression_tup)): + expression_list.append( + prod_conds[expression_tup[counter]].replace( + "xprod", str(counter + 1) + ) + ) + if expression_tup[counter] == 0: + dependency_list.append( + dependency_name.replace("x", str(counter + 1)) + ) + + expression_value = "&".join(expression_list) + dependency_value = pd.Series( + np.ones(len(alternatives)), index=alternatives + ) + if len(dependency_list) > 0: + for dependency in dependency_list: + # temp = spec.loc[spec[expression_name]==dependency, alternatives].squeeze().fillna(0) + dependency_value *= ( + spec.loc[ + spec[expression_name] == dependency, + alternatives, + ] + .squeeze() + .fillna(0) + ) + + # add a new row to spec + new_row_index = len(spec) + spec.loc[new_row_index] = dependency_value + spec.loc[new_row_index, expression_name] = expression_value + spec.loc[new_row_index, alternatives] = ( + spec.loc[new_row_index, alternatives] * coefficient + ) + + elif "_px" in expression: + for pnum in range(1, hhsize + 1): + dependency_name = row.dependency.replace("x", str(pnum)) + expression = row.Expression.replace("x", str(pnum)) + + # add a new row to spec + new_row_index = len(spec) + spec.loc[new_row_index] = spec.loc[ + spec[expression_name] == dependency_name + ].squeeze() + spec.loc[new_row_index, expression_name] = expression + spec.loc[new_row_index, alternatives] = ( + spec.loc[new_row_index, alternatives] * coefficient + ) + + # drop dependency rows + spec = spec[~spec[expression_name].str.startswith(("M_p", "N_p", "H_p"))] + + # eval expression goes in the index + spec.set_index(expression_name, inplace=True) + + for c in spec.columns: + spec[c] = spec[c].fillna(0) + + simulate.uniquify_spec_index(spec) + + # make non-joint alts 0 + for c in alternatives: + if c.endswith("J"): + continue + else: + spec[c] = 0 + + if trace_spec: + tracing.trace_df( + spec, + "%s.hhsize%d_joint_spec" % (trace_label, hhsize), + transpose=False, + slicer="NONE", + ) + + if trace_spec: + tracing.trace_df( + spec, + "%s.hhsize%d_joint_spec_patched" % (trace_label, hhsize), + transpose=False, + slicer="NONE", + ) + + if cache: + cache_joint_spec(hhsize, spec) + + t0 = tracing.print_elapsed_time("build_cdap_joint_spec hh_size %s" % hhsize, t0) + + return spec + + def add_interaction_column(choosers, p_tup): """ Add an interaction column in place to choosers, listing the ptypes of the persons in p_tup @@ -578,6 +822,12 @@ def hh_choosers(indiv_utils, hhsize): # we want to merge the ptype and M, N, and H utilities for each individual in the household merge_cols = [_hh_id_, _ptype_, "M", "N", "H"] + # add attributes for joint tour utility + model_settings = config.read_model_settings("cdap.yaml") + additional_merge_cols = model_settings.get("JOINT_TOUR_USEFUL_COLUMNS", None) + if additional_merge_cols is not None: + merge_cols.extend(additional_merge_cols) + if hhsize > MAX_HHSIZE: raise RuntimeError("hh_choosers hhsize > MAX_HHSIZE") @@ -620,11 +870,19 @@ def hh_choosers(indiv_utils, hhsize): for tup in itertools.combinations(list(range(1, hhsize + 1)), i): add_interaction_column(choosers, tup) + # add hhsize + choosers["hhsize"] = hhsize + return choosers def household_activity_choices( - indiv_utils, interaction_coefficients, hhsize, trace_hh_id=None, trace_label=None + indiv_utils, + interaction_coefficients, + hhsize, + trace_hh_id=None, + trace_label=None, + add_joint_tour_utility=False, ): """ Calculate household utilities for each activity pattern alternative for households of hhsize @@ -669,6 +927,7 @@ def household_activity_choices( hhsize, trace_spec=(trace_hh_id in choosers.index), trace_label=trace_label, + joint_tour_alt=add_joint_tour_utility, ) utils = simulate.eval_utilities(spec, choosers, trace_label=trace_label) @@ -676,6 +935,23 @@ def household_activity_choices( if len(utils.index) == 0: return pd.Series(dtype="float64") + # calculate joint tour utility + if add_joint_tour_utility & (hhsize > 1): + # calculate joint utils + joint_tour_spec = build_cdap_joint_spec( + interaction_coefficients, + hhsize, + trace_spec=(trace_hh_id in choosers.index), + trace_label=trace_label, + ) + + joint_tour_utils = simulate.eval_utilities( + joint_tour_spec, choosers, trace_label=trace_label + ) + + # add joint util to util + utils = utils.add(joint_tour_utils) + probs = logit.utils_to_probs(utils, trace_label=trace_label) # select an activity pattern alternative for each household based on probability @@ -867,6 +1143,7 @@ def _run_cdap( locals_d, trace_hh_id, trace_label, + add_joint_tour_utility, ): """ Implements core run_cdap functionality on persons df (or chunked subset thereof) @@ -909,6 +1186,7 @@ def _run_cdap( hhsize=hhsize, trace_hh_id=trace_hh_id, trace_label=trace_label, + add_joint_tour_utility=add_joint_tour_utility, ) hh_choices_list.append(choices) @@ -940,6 +1218,13 @@ def _run_cdap( persons["cdap_activity"] = person_choices chunk.log_df(trace_label, "persons", persons) + # return household joint tour flag + if add_joint_tour_utility: + hh_activity_choices = hh_activity_choices.to_frame(name="hh_choices") + hh_activity_choices["has_joint_tour"] = hh_activity_choices["hh_choices"].apply( + lambda x: 1 if "J" in x else 0 + ) + # if DUMP: # tracing.trace_df(hh_activity_choices, '%s.DUMP.hh_activity_choices' % trace_label, # transpose=False, slicer='NONE') @@ -951,7 +1236,10 @@ def _run_cdap( del persons chunk.log_df(trace_label, "persons", None) - return result + if add_joint_tour_utility: + return result, hh_activity_choices["has_joint_tour"] + else: + return result def run_cdap( @@ -964,6 +1252,7 @@ def run_cdap( chunk_size=0, trace_hh_id=None, trace_label=None, + add_joint_tour_utility=False, ): """ Choose individual activity patterns for persons. @@ -990,6 +1279,8 @@ def run_cdap( hh_id to trace or None if no hh tracing trace_label : str label for tracing or None if no tracing + add_joint_tour_utility : Bool + cdap model include joint tour utility or not Returns ------- @@ -1011,16 +1302,30 @@ def run_cdap( chunk_trace_label, ) in chunk.adaptive_chunked_choosers_by_chunk_id(persons, chunk_size, trace_label): - cdap_results = _run_cdap( - persons_chunk, - person_type_map, - cdap_indiv_spec, - cdap_interaction_coefficients, - cdap_fixed_relative_proportions, - locals_d, - trace_hh_id, - chunk_trace_label, - ) + if add_joint_tour_utility: + cdap_results, hh_choice_results = _run_cdap( + persons_chunk, + person_type_map, + cdap_indiv_spec, + cdap_interaction_coefficients, + cdap_fixed_relative_proportions, + locals_d, + trace_hh_id, + chunk_trace_label, + add_joint_tour_utility, + ) + else: + cdap_results = _run_cdap( + persons_chunk, + person_type_map, + cdap_indiv_spec, + cdap_interaction_coefficients, + cdap_fixed_relative_proportions, + locals_d, + trace_hh_id, + chunk_trace_label, + add_joint_tour_utility, + ) result_list.append(cdap_results) @@ -1042,4 +1347,8 @@ def run_cdap( ) # return choices column as series - return cdap_results["cdap_activity"] + if add_joint_tour_utility: + return cdap_results["cdap_activity"], hh_choice_results + else: + # return choices column as series + return cdap_results["cdap_activity"] diff --git a/activitysim/abm/models/util/probabilistic_scheduling.py b/activitysim/abm/models/util/probabilistic_scheduling.py index aab2e8d70..6fc7689a6 100644 --- a/activitysim/abm/models/util/probabilistic_scheduling.py +++ b/activitysim/abm/models/util/probabilistic_scheduling.py @@ -172,10 +172,22 @@ def _preprocess_scheduling_probs( ) elif scheduling_mode == "stop_duration": chooser_probs = _preprocess_stop_duration_probs(choosers) + elif scheduling_mode == "relative": + # creating a dataframe with just the trip_id as index and alternatives as columns + probs_cols = [ + c + for c in probs_spec.columns + if ((c not in probs_join_cols) & (c.isnumeric())) + ] + chooser_probs = choosers.loc[:, probs_cols] + chooser_probs = chooser_probs.div(chooser_probs.sum(axis=1), axis=0) + assert ( + ~chooser_probs.isna().values.any() + ), f"Missing probabilities for trips \n {chooser_probs[chooser_probs.isna().any(axis=1)].index}" else: logger.error( "Invalid scheduling mode specified: {0}.".format(scheduling_mode), - "Please select one of ['departure', 'stop_duration'] and try again.", + "Please select one of ['departure', 'stop_duration', 'relative'] and try again.", ) # probs should sum to 1 with residual probs resulting in choice of 'fail' @@ -196,6 +208,12 @@ def _postprocess_scheduling_choices( # convert alt choice index to depart time (setting failed choices to -1) failed = choices == choice_cols.get_loc("fail") + if scheduling_mode == "relative": + if failed.any(): + RuntimeError( + f"Failed trips in realtive mode for {failed.sum()} trips: {choosers[failed]}" + ) + # For the stop duration-based probabilities, the alternatives are offsets that # get applied to trip-specific departure and arrival times, so depart_alt_base # is a column/series rather than a scalar. @@ -334,7 +352,11 @@ def make_scheduling_choices( if failed.any(): choices = choices[~failed] - if all([check_col in choosers_df.columns for check_col in ["earliest", "latest"]]): + if all( + [check_col in choosers_df.columns for check_col in ["earliest", "latest"]] + ) & (scheduling_mode != "relative"): + # check to make sure choice does not come before previously scheduled trip or after end of tour + # does not apply if choices are relative to previous trip depart assert (choices >= choosers_df.earliest[~failed]).all() assert (choices <= choosers_df.latest[~failed]).all() diff --git a/activitysim/abm/models/util/tour_frequency.py b/activitysim/abm/models/util/tour_frequency.py index 37108b564..a73482fe5 100644 --- a/activitysim/abm/models/util/tour_frequency.py +++ b/activitysim/abm/models/util/tour_frequency.py @@ -5,6 +5,7 @@ import numpy as np import pandas as pd +from activitysim.core import config from activitysim.abm.models.util.canonical_ids import set_tour_index from activitysim.core.util import reindex @@ -459,3 +460,283 @@ def process_joint_tours(joint_tour_frequency, joint_tour_frequency_alts, point_p 17978574 joint 4 5143198 """ return tours + + +def process_joint_tours_frequency_composition( + joint_tour_frequency_composition, + joint_tour_frequency_composition_alts, + point_persons, +): + """ + This method processes the joint_tour_frequency_composition column that comes out of + the model of the same name and turns into a DataFrame that represents the + joint tours that were generated + + Parameters + ---------- + joint_tour_frequency_composition : pandas.Series + household joint_tour_frequency_composition (which came out of the joint tour frequency composition model) + indexed by household_id + joint_tour_frequency_composition_alts: DataFrame + A DataFrame which has as a unique index with joint_tour_frequency_composition values + and frequency counts for the tours to be generated for that choice + point_persons : pandas DataFrame + table with columns for (at least) person_ids and home_zone_id indexed by household_id + + Returns + ------- + tours : DataFrame + An example of a tours DataFrame is supplied as a comment in the + source code - it has an index which is a tour identifier, a household_id + column, a tour_type column, composition column and tour_type_num and tour_num columns + which is set to 1 or 2 depending whether it is the first or second joint tour + made by the household. + """ + + assert not joint_tour_frequency_composition.isnull().any() + + tours = process_tours_frequency_composition( + joint_tour_frequency_composition.dropna(), + joint_tour_frequency_composition_alts, + tour_category="joint", + parent_col="household_id", + ) + + assert not tours.index.duplicated().any() + assert point_persons.index.name == "household_id" + + # - assign a temp point person to tour so we can create stable index + tours["person_id"] = reindex(point_persons.person_id, tours.household_id) + tours["origin"] = reindex(point_persons.home_zone_id, tours.household_id) + + # assign stable (predictable) tour_id + set_tour_index(tours, is_joint=True) + + """ + household_id tour_type tour_type_count tour_type_num tour_num tour_count + tour_id + 3209530 320953 disc 1 1 1 2 + 3209531 320953 disc 2 2 2 2 + 23267026 2326702 shop 1 1 1 1 + 17978574 1797857 main 1 1 1 1 + + tour_category tour_category_id person_id + 3209530 joint 4 577234 + 3209531 joint 4 577234 + 23267026 joint 4 1742708 + 17978574 joint 4 5143198 + """ + return tours + + +def process_tours_frequency_composition( + joint_tour_frequency_composition, + joint_tour_frequency_composition_alts, + tour_category, + parent_col="person_id", +): + """ + This method processes the joint_tour_frequency_composition column that comes + out of the model of the same name and turns into a DataFrame that + represents the tours that were generated + + Parameters + ---------- + joint_tour_frequency_composition: Series + A series which has as the index and the chosen alternative + index as the value + joint_tour_frequency_composition_alts: DataFrame + A DataFrame which has as a unique index which relates to the values + in the series above typically includes columns which are named for trip + purposes with values which are counts for that trip purpose, and tour composition. Example + trip purposes include escort, shopping, othmaint, othdiscr, eatout, + social, etc. Tour composition includes adults, children, and mixed. + A row would be an alternative which might be to take + one shopping trip in a adult-only tour and zero trips of other purposes, etc. + tour_category : str + one of 'mandatory', 'non_mandatory', 'atwork', or 'joint' + parent_col: str + the name of the index (parent_tour_id for atwork subtours, otherwise person_id) + + Returns + ------- + tours : pandas.DataFrame + An example of a tours DataFrame is supplied as a comment in the + source code - it has an index which is a unique tour identifier, + a person_id column, and a tour type column which comes from the + column names of the alternatives DataFrame supplied above. + + tours.tour_type - tour type (e.g. school, work, shopping, eat) + tours.composition - tour composition (e.g. adults, children, mixed) + tours.tour_type_num - if there are two 'school' type tours, they will be numbered 1 and 2 + tours.tour_type_count - number of tours of tour_type parent has (parent's max tour_type_num) + tours.tour_num - index of tour (of any type) for parent + tours.tour_count - number of tours of any type) for parent (parent's max tour_num) + tours.tour_category - one of 'mandatory', 'non_mandatory', 'atwork', or 'joint' + """ + + # get the actual alternatives for each person - have to go back to the + # non_mandatory_tour_frequency_alts dataframe to get this - the choice + # above just stored the index values for the chosen alts + tour_counts = joint_tour_frequency_composition_alts.loc[ + joint_tour_frequency_composition + ] + + # assign person ids to the index + tour_counts.index = joint_tour_frequency_composition.index + + """ + alt1 alt2 alt3 + + 2588676 2 0 0 + 2588677 1 1 0 + """ + + tours = create_joint_tours(tour_counts, tour_category, parent_col) + + return tours + + +def create_joint_tours(tour_counts, tour_category, parent_col="person_id"): + """ + This method processes the tour_frequency column that comes + out of the model of the same name and turns into a DataFrame that + represents the tours that were generated + + Parameters + ---------- + tour_counts: DataFrame + table specifying how many tours of each type to create + one row per person (or parent_tour for atwork subtours) + one (int) column per tour_type, with number of tours to create + tour_category : str + one of 'mandatory', 'non_mandatory', 'atwork', or 'joint' + + Returns + ------- + tours : pandas.DataFrame + An example of a tours DataFrame is supplied as a comment in the + source code - it has an index which is a unique tour identifier, + a person_id column, and a tour type column which comes from the + column names of the alternatives DataFrame supplied above. + + tours.tour_type - tour type (e.g. school, work, shopping, eat) + tours.composition - tour composition (e.g. adults, children, mixed) + tours.tour_type_num - if there are two 'school' type tours, they will be numbered 1 and 2 + tours.tour_type_count - number of tours of tour_type parent has (parent's max tour_type_num) + tours.tour_num - index of tour (of any type) for parent + tours.tour_count - number of tours of any type) for parent (parent's max tour_num) + tours.tour_category - one of 'mandatory', 'non_mandatory', 'atwork', or 'joint' + """ + + # FIXME - document requirement to ensure adjacent tour_type_nums in tour_num order + + """ + alt1 alt2 alt3 + + 2588676 2 0 0 + 2588677 1 1 0 + """ + model_settings_file_name = "joint_tour_frequency_composition.yaml" + + model_settings = config.read_model_settings(model_settings_file_name) + + alts_table_structure = model_settings.get("ALTS_TABLE_STRUCTURE", None) + assert ( + alts_table_structure is not None + ), f"Expected to find ALTS_TABLE_STRUCTURE setting in joint_tour_frequency_composition.yaml" + + tour_type_dict = alts_table_structure.get("PURPOSE", None).get("VALUE_MAP", None) + assert ( + tour_type_dict is not None + ), f"Expected to find PURPOSE.VALUE_MAP setting in ALTS_TABLE_STRUCTURE" + + tour_type_cols = alts_table_structure.get("PURPOSE", None).get("COLUMNS", None) + assert ( + tour_type_cols is not None + ), f"Expected to find PURPOSE.COLUMNS setting in ALTS_TABLE_STRUCTURE" + + tour_comp_dict = alts_table_structure.get("COMPOSITION", None).get( + "VALUE_MAP", None + ) + assert ( + tour_comp_dict is not None + ), f"Expected to find COMPOSITION.VALUE_MAP setting in ALTS_TABLE_STRUCTURE" + + tour_comp_cols = alts_table_structure.get("COMPOSITION", None).get("COLUMNS", None) + assert ( + tour_comp_cols is not None + ), f"Expected to find COMPOSITION.COLUMNS setting in ALTS_TABLE_STRUCTURE" + + # reformat with the columns given below + tours_purp = tour_counts[tour_type_cols].stack().reset_index() + tours_purp.columns = [parent_col, "tour_id_temp", "tour_type"] + tours_purp["tour_id_temp"] = range(1, 1 + len(tours_purp)) + tours_purp["tour_type"] = tours_purp["tour_type"].map(tour_type_dict) + + """ + tour_id_temp tour_type + 0 2588676 purpose1 5 + 1 2588676 purpose2 0 + 2 2588677 purpose1 5 + 3 2588677 purpose2 5 + 4 2588678 purpose1 6 + 5 2588678 purpose2 7 + + parent_col is the index from non_mandatory_tour_frequency + tour_type is the column name from non_mandatory_tour_frequency_alts + tour_type_count is the count value of the tour's chosen alt's tour_type from alts table + """ + tours_comp = tour_counts[tour_comp_cols].stack().reset_index() + tours_comp.columns = [parent_col, "tour_id_temp", "composition"] + tours_comp["tour_id_temp"] = range(1, 1 + len(tours_comp)) + tours_comp["composition"] = tours_comp["composition"].map(tour_comp_dict) + + """ + tour_id_temp tour_composition + 0 2588676 party1 1 + 1 2588676 party2 0 + 2 2588677 party1 1 + 3 2588677 party2 1 + 4 2588678 party1 1 + 5 2588678 party2 2 + + parent_col is the index from non_mandatory_tour_frequency + tour_type is the column name from non_mandatory_tour_frequency_alts + tour_type_count is the count value of the tour's chosen alt's tour_type from alts table + """ + tours = pd.merge( + tours_purp, tours_comp, how="left", on=[parent_col, "tour_id_temp"] + ) + + tours = tours[(tours.tour_type.notnull()) & (tours.tour_type.notnull())] + + grouped = tours.groupby([parent_col, "tour_type"]) + tours["tour_type_num"] = grouped.cumcount() + 1 + tours["tour_type_count"] = tours["tour_type_num"] + grouped.cumcount( + ascending=False + ) + + grouped = tours.groupby(parent_col) + tours["tour_num"] = grouped.cumcount() + 1 + tours["tour_count"] = tours["tour_num"] + grouped.cumcount(ascending=False) + + """ + tour_type tour_type_num tour_type_count tour_num tour_count + 0 2588676 alt1 1 2 1 4 + 0 2588676 alt1 2 2 2 4 + 0 2588676 alt2 1 1 3 4 + 0 2588676 alt3 1 1 4 4 + """ + + # set these here to ensure consistency across different tour categories + assert tour_category in ["mandatory", "non_mandatory", "atwork", "joint"] + tours["tour_category"] = tour_category + + # for joint tours, the correct number will be filled in after participation step + tours["number_of_participants"] = 1 + + # index is arbitrary but don't want any duplicates in index + tours.reset_index(drop=True, inplace=True) + + return tours diff --git a/activitysim/abm/models/vehicle_type_choice.py b/activitysim/abm/models/vehicle_type_choice.py index 95723eb9d..324e505dd 100644 --- a/activitysim/abm/models/vehicle_type_choice.py +++ b/activitysim/abm/models/vehicle_type_choice.py @@ -124,7 +124,7 @@ def annotate_vehicle_type_choice_persons(model_settings, trace_label): model_settings=model_settings.get("annotate_persons"), trace_label=tracing.extend_trace_label(trace_label, "annotate_persons"), ) - pipeline.replace_table("persons", households) + pipeline.replace_table("persons", persons) def annotate_vehicle_type_choice_vehicles(model_settings, trace_label): @@ -214,9 +214,14 @@ def construct_model_alternatives(model_settings, alts_cats_dict, vehicle_type_da alts_wide._merge == "left_only", ["body_type", "fuel_type", "age"] ] - assert ( - len(missing_alts) == 0 - ), f"missing vehicle data for alternatives:\n {missing_alts}" + if model_settings.get("REQUIRE_DATA_FOR_ALL_ALTS", False): + # fail if alternative does not have an associated record in the data + assert ( + len(missing_alts) == 0 + ), f"missing vehicle data for alternatives:\n {missing_alts}" + else: + # eliminate alternatives if no vehicle type data + alts_wide = alts_wide[alts_wide._merge != "left_only"] alts_wide.drop(columns="_merge", inplace=True) # converting age to integer to allow interactions in utilities diff --git a/activitysim/abm/models/work_from_home.py b/activitysim/abm/models/work_from_home.py index 97a80d301..043264000 100755 --- a/activitysim/abm/models/work_from_home.py +++ b/activitysim/abm/models/work_from_home.py @@ -58,7 +58,7 @@ def work_from_home(persons_merged, persons, chunk_size, trace_hh_id): if estimator: estimator.write_model_settings(model_settings, model_settings_file_name) estimator.write_spec(model_settings) - estimator.write_coefficients(coefficients_df) + estimator.write_coefficients(coefficients_df, model_settings) estimator.write_choosers(choosers) # - iterative single process what-if adjustment if specified diff --git a/activitysim/abm/tables/shadow_pricing.py b/activitysim/abm/tables/shadow_pricing.py index 3a3ba7f56..396cf7c56 100644 --- a/activitysim/abm/tables/shadow_pricing.py +++ b/activitysim/abm/tables/shadow_pricing.py @@ -61,6 +61,12 @@ "workplace": "income_segment", } +default_segment_to_name_dict = { + # model_selector : persons_segment_name + "school": "school_segment", + "workplace": "income_segment", +} + def size_table_name(model_selector): """ diff --git a/activitysim/cli/create.py b/activitysim/cli/create.py index ec545d378..7cd8d218c 100644 --- a/activitysim/cli/create.py +++ b/activitysim/cli/create.py @@ -123,7 +123,7 @@ def get_example( Files downloaded via http pointers will be cached in this location. If a path is not given but just a truthy value, then a cache directory is created using in a location - selected by the appdirs library (or, if not installed, + selected by the platformdirs library (or, if not installed, linking is skipped.) """ if example_name not in EXAMPLES: @@ -200,11 +200,11 @@ def download_asset(url, target_path, sha256=None, link=True): if link: if not isinstance(link, (str, Path)): try: - import appdirs + import platformdirs except ImportError: link = False else: - link = appdirs.user_data_dir("ActivitySim") + link = platformdirs.user_data_dir("ActivitySim") original_target_path = target_path target_path = os.path.join(link, target_path) os.makedirs(os.path.dirname(target_path), exist_ok=True) diff --git a/activitysim/core/config.py b/activitysim/core/config.py index 7024d0512..aaa7ed2fb 100644 --- a/activitysim/core/config.py +++ b/activitysim/core/config.py @@ -750,6 +750,14 @@ def filter_warnings(): else: warnings.filterwarnings("default", category=CacheMissWarning) + # beginning from PR #660 (after 1.2.0), a FutureWarning is emitted when the trip + # scheduling component lacks a logic_version setting + warnings.filterwarnings( + "ignore", + category=FutureWarning, + message="The trip_scheduling component now has a logic_version setting.*", + ) + def handle_standard_args(parser=None): diff --git a/activitysim/core/configuration.py b/activitysim/core/configuration.py new file mode 100644 index 000000000..3174653b2 --- /dev/null +++ b/activitysim/core/configuration.py @@ -0,0 +1,291 @@ +from typing import Union + +try: + from pydantic import BaseModel as PydanticBase +except ModuleNotFoundError: + + class PydanticBase: + pass + + +class InputTable(PydanticBase): + """ + The features that define an input table to be read by ActivitySim. + """ + + tablename: str + """Name of the injected table""" + + filename: str = None + """ + Name of the CSV or HDF5 file to read. + + If not provided, defaults to `input_store` + """ + + index_col: str = None + """table column to use for the index""" + + rename_columns: dict[str, str] = None + """dictionary of column name mappings""" + + keep_columns: list[str] = None + """ + columns to keep once read in to memory. + + Save only the columns needed for modeling or analysis to save on memory + and file I/O + """ + + h5_tablename: str = None + """table name if reading from HDF5 and different from `tablename`""" + + +class Settings(PydanticBase): + """ + The overall settings for the ActivitySim model system. + + The input for these settings is typically stored in one main YAML file, + usually called ``settings.yaml``. + + Note that this implementation is presently used only for generating + documentation, but future work may migrate the settings implementation to + actually use this pydantic code to validate the settings before running + the model. + """ + + models: list[str] + """ + list of model steps to run - auto ownership, tour frequency, etc. + + See :ref:`model_steps` for more details about each step. + """ + + resume_after: str = None + """to resume running the data pipeline after the last successful checkpoint""" + + input_table_list: list[InputTable] + """list of table names, indices, and column re-maps for each table in `input_store`""" + + input_store: str = None + """HDF5 inputs file""" + + create_input_store: bool = False + """ + Write the inputs as read in back to an HDF5 store. + + If enabled, this writes the store to the outputs folder to use for subsequent + model runs, as reading HDF5 can be faster than reading CSV files.""" + + households_sample_size: int = None + """ + Number of households to sample and simulate + + If omitted or set to 0, ActivitySim will simulate all households. + """ + trace_hh_id: Union[int, list] = None + """ + Trace household id(s) + + If omitted, no tracing is written out + """ + + trace_od: list[int] = None + """ + Trace origin, destination pair in accessibility calculation + + If omitted, no tracing is written out. + """ + + chunk_training_mode: str = None + """ + The method to use for chunk training. + + Valid values include {disabled, training, production, adaptive}. + See :ref:`chunk_size` for more details. + """ + + chunk_size: int = None + """ + Approximate amount of RAM to allocate to ActivitySim for batch processing. + + See :ref:`chunk_size` for more details. + """ + + chunk_method: str = None + """ + Memory use measure to use for chunking. + + See :ref:`chunk_size`. + """ + + checkpoints: Union[bool, list] = True + """ + When to write checkpoint (intermediate table states) to disk. + + If True, checkpoints are written at each step. If False, no intermediate + checkpoints will be written before the end of run. Or, provide an explicit + list of models to checkpoint. + """ + + check_for_variability: bool = False + """ + Debugging feature to find broken model specifications. + + Enabling this check does not alter valid results but slows down model runs. + """ + + log_alt_losers: bool = False + """ + Write out expressions when all alternatives are unavailable. + + This can be useful for model development to catch errors in specifications. + Enabling this check does not alter valid results but slows down model runs. + """ + + use_shadow_pricing: bool = False + """turn shadow_pricing on and off for work and school location""" + + output_tables: list[str] = None + """list of output tables to write to CSV or HDF5""" + + want_dest_choice_sample_tables: bool = False + """turn writing of sample_tables on and off for all models""" + + cleanup_pipeline_after_run: bool = False + """ + Cleans up pipeline after successful run. + + This will clean up pipeline only after successful runs, by creating a + single-checkpoint pipeline file, and deleting any subprocess pipelines. + """ + + sharrow: Union[bool, str] = False + """ + Set the sharrow operating mode. + + .. versionadded:: 1.2 + + * `false` - Do not use sharrow. This is the default if no value is given. + * `true` - Use sharrow optimizations when possible, but fall back to + legacy `pandas.eval` systems when any error is encountered. This is the + preferred mode for running with sharrow if reliability is more important + than performance. + * `require` - Use sharrow optimizations, and raise an error if they fail + unexpectedly. This is the preferred mode for running with sharrow + if performance is a concern. + * `test` - Run every relevant calculation using both sharrow and legacy + systems, and compare them to ensure the results match. This is the slowest + mode of operation, but useful for development and debugging. + """ + + +class ZarrDigitalEncoding(PydanticBase): + """Digital encoding instructions for skim tables. + + .. versionadded:: 1.2 + """ + + regex: str + """A regular expression for matching skim matrix names. + + All skims with names that match under typical regular expression rules + for Python will be processed together. + """ + + joint_dict: str + """The name of the joint dictionary for this group. + + This must be a unique name for this set of skims, and a new array + will be added to the Dataset with this name. It will be an integer- + type array indicating the position of each element in the jointly + encoded dictionary.""" + + +class TAZ_Settings(PydanticBase): + """ + Complex settings for TAZ skims that are not just OMX file(s). + + .. versionadded:: 1.2 + """ + + omx: str = None + """The filename of the data stored in OMX format. + + This is treated as a fallback for the raw input data, if ZARR format data + is not available. + """ + + zarr: str = None + """The filename of the data stored in ZARR format. + + Reading ZARR data can be much faster than reading OMX format data, so if + this filename is given, the ZARR file format is preferred if it exists. If + it does not exist, then OMX data is read in and then ZARR data is written + out for future usage. + + .. versionadded:: 1.2 + """ + + zarr_digital_encoding: list[ZarrDigitalEncoding] = None + """ + A list of encodings to apply before saving skims in ZARR format. + + .. versionadded:: 1.2 + """ + + +class NetworkSettings(PydanticBase): + """ + Network level of service and skims settings + + The input for these settings is typically stored in one YAML file, + usually called ``network_los.yaml``. + """ + + zone_system: int + """Which zone system type is used. + + * 1 - TAZ only. + * 2 - MAZ and TAZ. + * 3 - MAZ, TAZ, and TAP + """ + + taz_skims: Union[str, TAZ_Settings] = None + """Instructions for how to load and pre-process skim matrices. + + If given as a string, it is interpreted as the location for OMX file(s), + either as a single file or as a glob-matching pattern for multiple files. + The time period for the matrix must be represented at the end of the matrix + name and be seperated by a double_underscore (e.g. `BUS_IVT__AM` indicates base + skim BUS_IVT with a time period of AM. + + Alternatively, this can be given as a nested dictionary defined via the + TAZ_Settings class, which allows for ZARR transformation and pre-processing. + """ + + skim_time_periods: dict + """time period upper bound values and labels + + * ``time_window`` - total duration (in minutes) of the modeled time span (Default: 1440 minutes (24 hours)) + * ``period_minutes`` - length of time (in minutes) each model time period represents. Must be whole factor of ``time_window``. (Default: 60 minutes) + * ``periods`` - Breakpoints that define the aggregate periods for skims and assignment + * ``labels`` - Labels to define names for aggregate periods for skims and assignment + """ + + read_skim_cache: bool = False + """Read cached skims (using numpy memmap) from output directory. + + Reading from memmap is much faster than omx, but the memmap is a huge + uncompressed file. + """ + + write_skim_cache: bool = False + """Write memmapped cached skims to output directory. + + This is needed if you want to use the cached skims to speed up subsequent + runs. + """ + + cache_dir: str = None + """alternate dir to read/write cache files (defaults to output_dir)""" diff --git a/activitysim/core/los.py b/activitysim/core/los.py index e69ed587f..c1c3a8451 100644 --- a/activitysim/core/los.py +++ b/activitysim/core/los.py @@ -2,6 +2,7 @@ # See full license in LICENSE.txt. import logging +import os import warnings import numpy as np diff --git a/activitysim/core/pathbuilder_cache.py b/activitysim/core/pathbuilder_cache.py index 1bd219693..5153cf160 100644 --- a/activitysim/core/pathbuilder_cache.py +++ b/activitysim/core/pathbuilder_cache.py @@ -9,6 +9,7 @@ import numpy as np import pandas as pd +import psutil from activitysim.core import config, inject, simulate, util diff --git a/activitysim/examples/prototype_mtc_extended/test/output/cache/.gitignore b/activitysim/examples/prototype_mtc_extended/test/output/cache/.gitignore index 1d085cacc..3dd2e62f9 100644 --- a/activitysim/examples/prototype_mtc_extended/test/output/cache/.gitignore +++ b/activitysim/examples/prototype_mtc_extended/test/output/cache/.gitignore @@ -1 +1,2 @@ -** +*.mmap +*.feather diff --git a/activitysim/examples/prototype_mwcog/configs/trip_destination_annotate_trips_preprocessor.csv b/activitysim/examples/prototype_mwcog/configs/trip_destination_annotate_trips_preprocessor.csv old mode 100644 new mode 100755 diff --git a/activitysim/examples/prototype_mwcog/configs/trip_scheduling_preprocessor.csv b/activitysim/examples/prototype_mwcog/configs/trip_scheduling_preprocessor.csv new file mode 100644 index 000000000..732a58d47 --- /dev/null +++ b/activitysim/examples/prototype_mwcog/configs/trip_scheduling_preprocessor.csv @@ -0,0 +1,8 @@ +Description,Target,Expression +,periods_left,(df.latest - df.earliest) +# binning the periods differently for inbound and outbound +,periods_left_min,"np.where(df['outbound'], periods_left.clip(upper=25), periods_left.clip(upper=34))" +,periods_left_max,"np.where(((periods_left >= 25) & (df['outbound'])) | ((periods_left >= 34) & (~df['outbound'])), 47, periods_left)" +,tour_purpose,"reindex(tours.tour_type, df.tour_id)" +,tour_purpose_grouped,"np.where(tour_purpose.isin(['work','school','univ']), 'mand', 'non_mand')" +,half_tour_stops_remaining_grouped,(df.trip_count - df.trip_num).clip(upper=1) \ No newline at end of file diff --git a/activitysim/examples/prototype_mwcog/configs/trip_scheduling_probs_purpose_stops.csv b/activitysim/examples/prototype_mwcog/configs/trip_scheduling_probs_purpose_stops.csv new file mode 100644 index 000000000..411be00eb --- /dev/null +++ b/activitysim/examples/prototype_mwcog/configs/trip_scheduling_probs_purpose_stops.csv @@ -0,0 +1,245 @@ +periods_left_min,periods_left_max,outbound,tour_purpose_grouped,half_tour_stops_remaining_grouped,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,All +0,0,True,non_mand,0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +0,0,True,non_mand,1,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +0,0,True,mand,0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +0,0,True,mand,1,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +1,1,True,non_mand,0,0.8189802736716861,0.18101972632831478,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +1,1,True,non_mand,1,0.7721889137040513,0.22781108629594915,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +1,1,True,mand,0,0.7471719634686398,0.2528280365313602,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +1,1,True,mand,1,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +2,2,True,non_mand,0,0.5313044094657583,0.46665243420937097,0.00204315632485774,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +2,2,True,non_mand,1,0.7175829817374099,0.2807545194400709,0.0016624988225180234,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +2,2,True,mand,0,0.5035022647690804,0.49649773523092017,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +2,2,True,mand,1,0.8745153839084898,0.12548461609151035,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +3,3,True,non_mand,0,0.3871957673026593,0.5842636573575687,0.027848779906802835,0.0006917954329635533,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +3,3,True,non_mand,1,0.5010068584030869,0.4944859928509608,0.004507148745955219,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +3,3,True,mand,0,0.47374691698873894,0.48185051672462087,0.04440256628664039,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +3,3,True,mand,1,0.4975171975856041,0.4834274927388484,0.019055309675547517,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +4,4,True,non_mand,0,0.3000152058882846,0.5523183073306172,0.13664303181097184,0.011023454970117077,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +4,4,True,non_mand,1,0.3743770992053098,0.5727827563748306,0.05252770967230497,0.00031243474755708465,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +4,4,True,mand,0,0.4391344468565407,0.4730858153439597,0.08579467818492309,0.001985059614577168,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +4,4,True,mand,1,0.17374342144703583,0.705501446138433,0.12075513241453113,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +5,5,True,non_mand,0,0.24443687276143128,0.48727017005994244,0.24105582258752195,0.027237134591092966,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +5,5,True,non_mand,1,0.3498737043600855,0.5468850124616544,0.0957015471401984,0.002142098611144654,0.0053976374269204585,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +5,5,True,mand,0,0.4140440879091029,0.4627566659226456,0.10589932963919767,0.014346985277468863,0.0029529312515844176,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +5,5,True,mand,1,0.5359817354115067,0.40328213098074,0.037043756388711026,0.023692377219042413,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +6,6,True,non_mand,0,0.2243718573226493,0.4740049987478467,0.2185942840913799,0.07387248869388857,0.008608771317053272,0.0005475998271755717,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +6,6,True,non_mand,1,0.2947249323070468,0.520484919863231,0.16267063104650237,0.021821311374649363,0.00029820540857341003,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +6,6,True,mand,0,0.34571265959006825,0.45183505047762074,0.11547038429330879,0.08043856620520728,0.006543339433795003,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +6,6,True,mand,1,0.46036107799104353,0.3701917482866324,0.14122662957933466,0.028220544142989194,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +7,7,True,non_mand,0,0.227621158038117,0.417953229518577,0.19141787402389457,0.12197351063472531,0.024548137961874116,0.016486089822811145,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +7,7,True,non_mand,1,0.2832486215408319,0.5166096440702325,0.14826728166817885,0.03482546263765433,0.017048990083102438,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +7,7,True,mand,0,0.361803588610528,0.418900938560931,0.14154525076540292,0.06743958274104898,0.006099978058599388,0.004210661263489495,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +7,7,True,mand,1,0.4127559556392927,0.4462328382983683,0.1195063008397756,0.012231152152406215,0.009273753070157131,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +8,8,True,non_mand,0,0.19426921480484255,0.40592917871708584,0.19011533368438208,0.15982429426585337,0.040643179164081826,0.006644362842185375,0.002011822208828069,0.0005626143127424159,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +8,8,True,non_mand,1,0.23006768855966434,0.4951325777522361,0.16375321837246617,0.09014636059161886,0.012948244048729797,0.007951910675286304,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +8,8,True,mand,0,0.3404793706490589,0.4564428277054562,0.14909890279509022,0.024535359848871188,0.007981254754395728,0.020513594855995246,0.0,0.0009486893911321145,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +8,8,True,mand,1,0.399341249303726,0.41517942529414553,0.1028491817940402,0.04745891472898081,0.03517122887910787,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +9,9,True,non_mand,0,0.19874760126421334,0.3630228482412267,0.1444748881448116,0.16435014395285896,0.10036289384754772,0.017397511428007644,0.008202316900872985,0.0031073806650114963,0.0003344155554514234,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +9,9,True,non_mand,1,0.22748125907091696,0.4891138773218324,0.21855171544454474,0.04724707111068227,0.016939736746825574,0.00045246712463884055,0.000213873180559771,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +9,9,True,mand,0,0.37368001529264117,0.40060534327725444,0.11191565670765437,0.06782772701563022,0.03125402744106718,0.011589870883400537,0.001558362508815955,0.0015689968735345759,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +9,9,True,mand,1,0.2567315234988767,0.5572074890664362,0.10628235358815401,0.07427082306966946,0.002083433027377295,0.003424377749486876,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +10,10,True,non_mand,0,0.18414136513468135,0.3197692844976048,0.19719338356553304,0.16620135022943144,0.06960029735040153,0.03703358451667586,0.014494298970866393,0.0068016927998264445,0.004764742934979405,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +10,10,True,non_mand,1,0.22820299437971506,0.48795761528080067,0.1549340394408621,0.09519810801564392,0.02664096931437101,0.0038191046031214,0.0027576448173758537,0.0004895241481095858,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +10,10,True,mand,0,0.2924258078226892,0.46366769271762154,0.11886521424960046,0.06217986582313677,0.025764091367057613,0.016078005167636363,0.0017215479420771597,0.019297774910179692,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +10,10,True,mand,1,0.22445327282351105,0.3869668718823247,0.18146111316276614,0.1899539000261889,0.016646553939701842,0.0,0.0005182881655077271,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +11,11,True,non_mand,0,0.1838047344313972,0.4451769992587658,0.152991609518764,0.10039166250104836,0.06367584589757627,0.03151581147531881,0.008585327734442478,0.009924884136955484,0.0012902203336801305,0.00251568701530955,0.00012721769674307987,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +11,11,True,non_mand,1,0.22323053576220492,0.43792687319101775,0.17149150600844593,0.08992672587419363,0.06021379863217045,0.011341895844761014,0.002924004745341519,0.0029446599418644186,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +11,11,True,mand,0,0.2549729920032347,0.3846638483858408,0.1585996489799274,0.07048148043675959,0.0610612844984867,0.02950967271600184,0.009390882720852532,0.019671473627125007,0.011648716631770929,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +11,11,True,mand,1,0.31950618996163216,0.370416105116807,0.12957808333436566,0.038771889005981476,0.07973400907657878,0.008259064901326241,0.04502512717413414,0.0,0.0,0.00870953142917452,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +12,12,True,non_mand,0,0.15538064701402524,0.34010855114672783,0.15756329624436757,0.130761080225149,0.08058876296099016,0.037166670112688684,0.05321282457870319,0.011684514315131676,0.008420820875982287,0.022760982646872548,0.002351849879359441,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +12,12,True,non_mand,1,0.18615603339448467,0.4442747128851546,0.16119531212501342,0.1660481650340877,0.01822419609095152,0.014405133011713384,0.0012287665864568532,0.00810044705472734,0.0,0.00036723381740970943,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +12,12,True,mand,0,0.2833186435388759,0.4473279201816816,0.0839513747492686,0.08780578472571127,0.048675906218727354,0.018950473118234137,0.029969897467500405,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +12,12,True,mand,1,0.3716081395440234,0.24335198225727428,0.15817450794815305,0.1152128686656522,0.09842277539670218,0.0,0.012825429182031002,0.0,0.0004042970061645304,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +13,13,True,non_mand,0,0.1280486077306424,0.39007727678250526,0.14429472032308305,0.12987881052290906,0.05673434374115411,0.04374230904631316,0.03370924463183397,0.022796437331145697,0.005698472187466286,0.03744492108087016,0.007574856622076875,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +13,13,True,non_mand,1,0.16420817620589498,0.3959652826942212,0.21269414158675182,0.10510649107393175,0.062059223793042705,0.03832758967086638,0.01031829635321654,0.007272614386214486,0.0038487289764247883,0.00019945525943466293,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +13,13,True,mand,0,0.2833739707820797,0.3472246351141721,0.12472684460184481,0.1087803737635112,0.04158238860256562,0.02102549542839796,0.004873270302794455,0.05209115241161954,0.0,0.0,0.01632186899301426,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +13,13,True,mand,1,0.20066138301721598,0.3252681760134406,0.06612907451937301,0.1197886582841732,0.22936068409786692,0.03448374665640273,0.0068774276923423625,0.0007760790887603079,0.016654770630425347,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +14,14,True,non_mand,0,0.21736634651976025,0.2911804898239222,0.14177795654611225,0.07388892050301235,0.08781548032944456,0.044928908010177494,0.0792545723131907,0.021645018917800064,0.02019552748207418,0.009467311676119831,0.004536650962516739,0.007398198338740162,0.0005446185771287058,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +14,14,True,non_mand,1,0.2343054288430577,0.3037047693015579,0.18586258067809125,0.14484685683240442,0.06798436270712183,0.04598952809490658,0.00407148418725873,0.003288198365222629,0.0,0.0018933319504502446,0.007492591087270938,0.0005608679526570394,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +14,14,True,mand,0,0.3454886512576222,0.38014428702430497,0.13782651573334836,0.044263018546040186,0.055676392088022865,0.010906524177868795,0.0072979890708083925,0.007361983152376035,0.0,0.001430578916990835,0.009604060032617677,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +14,14,True,mand,1,0.4852409017501698,0.2684239060123367,0.15637469849088115,0.04917106696035559,0.01712199313248224,0.014788285966204288,0.0066105570512929685,0.0,0.0022685906362778065,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +15,15,True,non_mand,0,0.25269778070190596,0.2968540782999024,0.11023455674822831,0.05623827230855225,0.06597186788243106,0.1253009893013266,0.01271029987709566,0.052921232042414855,0.006233945238574574,0.0012759056875845305,0.01162477209683355,0.0037846301847631685,0.0020877532596896746,0.00206391637069746,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +15,15,True,non_mand,1,0.17865337321760114,0.49598387546653,0.17985004316104092,0.0834123491136488,0.02861982991731569,0.01507389127479415,0.0019319769530352945,0.015088099515112047,0.0,0.0,0.0013865613809220093,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +15,15,True,mand,0,0.5092314635021563,0.2909852832285074,0.1007263601936202,0.05369042418623467,0.015831820236393533,0.00696398701811726,0.009594759834484176,0.005897226236671945,0.0016561807514684653,0.0028240915770827166,0.0025984032352619696,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +15,15,True,mand,1,0.3065494168965283,0.3171690632857757,0.15389037912080228,0.08157827533204816,0.05578445762327045,0.025762048043104755,0.024355412276719727,0.0021433410196588184,0.004404725115949303,0.0,0.0,0.028362881286142977,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +16,16,True,non_mand,0,0.23933291204976098,0.33470032117477017,0.16347743110076973,0.07443734333026066,0.03793288215034974,0.057132956981553754,0.005334799175762797,0.01899323978978337,0.00043592297563987335,0.03487186028711262,0.01541730805407518,0.010943184082674567,0.0015278355776893143,0.005462003269796668,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +16,16,True,non_mand,1,0.16005321326665203,0.37632691905494753,0.15394957154631203,0.1304548210249311,0.10940790296800768,0.02500721732909631,0.013135655612855335,0.017070125977595278,0.0007067958022550534,0.013887777417347766,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +16,16,True,mand,0,0.3848194266722145,0.37134484471331375,0.0850662068736148,0.05017749283620628,0.017003906169515512,0.021747227413822744,0.008386061255936564,0.011286918024608511,0.010448753616855348,0.0,0.0,0.0012353190869387998,0.0016269833209067346,0.0,0.036856860016065106,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +16,16,True,mand,1,0.2275194752607601,0.25017235420678974,0.11692008159168814,0.2070096816790754,0.14023010283480625,0.009814183791811608,0.01979234880065379,0.0,0.009783746942694935,0.0,0.016295555427818544,0.0024624694639021833,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +17,17,True,non_mand,0,0.2526702328957933,0.27447465838212554,0.09213362766425133,0.21312793523475992,0.06524452915763224,0.026394837256766328,0.028183453538624264,0.00591378437050656,0.016211185354215143,0.0013689285176775245,0.0024881369773125427,0.0,0.011475536248101093,0.003433553098931867,0.0040596569100583325,0.0028199443932443616,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +17,17,True,non_mand,1,0.17523974786396865,0.3585193462713332,0.2049836229835515,0.050516166565969176,0.07709240067318539,0.08181910721392045,0.012684940794303552,0.013453983030564066,0.003034514575602301,0.020700169867956354,0.0019560001596443948,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +17,17,True,mand,0,0.4114491047000963,0.4134305296546959,0.06043576184993309,0.05546620254054133,0.014232550856757764,0.009566984849911121,0.010921244427410532,0.0065069883496819666,0.005398249675380565,0.00545950083354648,0.006220799751873012,0.0003236540673956202,0.0,0.0,0.000588428442776014,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +17,17,True,mand,1,0.29483908954012533,0.4126571783996355,0.1282010951680747,0.07767698088397365,0.03921799675702734,0.009704164761495144,0.016349316407632902,0.01982939678355619,0.0,0.0,0.0,0.001524781298478771,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +18,18,True,non_mand,0,0.23734082671976767,0.3050705316929325,0.07789215339238303,0.1368917708633237,0.04187179834207113,0.033981947159287984,0.06554042288542364,0.022664102297987824,0.0298455093855354,0.012412943716680362,0.019932736861367033,0.0,0.013004164316165131,0.00021200801979027862,0.002179329872955506,0.001159754474329442,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +18,18,True,non_mand,1,0.13913077114477862,0.34815770585582523,0.23520811083080348,0.08246456459530692,0.0821646726705314,0.06163170546693259,0.029090075742036436,0.012357830239898176,0.0033727865960344024,0.0064217768578526,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +18,18,True,mand,0,0.5028117748095691,0.350811002436585,0.06094068744196811,0.025138559142886138,0.013313948517148913,0.010443856162040044,0.012709166980486838,0.0103699428446387,0.0024898484271303474,0.003108631861406074,0.0,0.0,0.007862581376140397,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +18,18,True,mand,1,0.41324485045768594,0.28488516180866524,0.09899198705298416,0.1046574784011423,0.01481702835528995,0.04219034266694274,0.023047590271449092,0.01246376876040535,0.004803638903289208,0.0,0.00041287271562461545,0.00048528060652142086,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +19,19,True,non_mand,0,0.3017565747841334,0.3141421626967243,0.13897942362878032,0.07953424716467176,0.04789339041763478,0.029590309407092362,0.005483011799124794,0.04033077361125482,0.00831325910282016,0.020194011839126474,0.006281678832042689,0.005532634472438549,0.0,0.0,0.0019685222441560013,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +19,19,True,non_mand,1,0.17072663057970913,0.3548023964811101,0.17539393090627897,0.08487984563776048,0.03603542807021147,0.029090578331425573,0.04430798127122374,0.022003753637441455,0.0586663427539483,0.0012850338963282585,0.0,0.022808078434562406,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +19,19,True,mand,0,0.44131354765837166,0.4047130846841438,0.06864755834098452,0.025515466907659275,0.03423311148754811,0.007825267364543038,0.0034266911596967154,0.001956863696708489,0.005495386233444543,0.0032524374925951157,0.0,0.0014950458806589127,0.0008607604468698304,0.0,0.0,0.0,0.0005059114587113161,0.000758867188066974,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +19,19,True,mand,1,0.3385595402274405,0.3560802991655533,0.10715183692502118,0.030544747048605964,0.02707302813897836,0.023694134679513583,0.0385475571963037,0.00874147499353564,0.007208544430021171,0.02225451532998375,0.0036500124100919736,0.036494309454951385,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +20,20,True,non_mand,0,0.32840582877506,0.3239718725548607,0.09724592373395033,0.07933000984262077,0.016521588382256296,0.04110087420857762,0.03800046003709891,0.003630837851231657,0.001650395338610952,0.009947579789589194,0.0012276885608375706,0.0,0.0189480649672734,0.0034287444577843222,0.0,0.013266834107749372,0.001229054205963644,0.004036575372647966,0.0,0.0180576678138876,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +20,20,True,non_mand,1,0.2568109508347746,0.2643209479779701,0.09125414821459571,0.08639034986642669,0.13646840347881434,0.033677709597699536,0.03132989171946656,0.051938714190768176,0.020333452242512175,0.008060014807481985,0.0,0.0,0.0183356907222172,0.001079726347272931,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +20,20,True,mand,0,0.36112165984167366,0.4511281799953402,0.09754378504634288,0.03354921807753693,0.017356046010882212,0.003213813405431729,0.006258373471072896,0.0017575825135433373,0.0013827505776258344,0.00722334238502016,0.012338623470051404,0.004703819134656911,0.0003803283546665727,0.0003357851615107776,0.00011032650304917473,0.0,0.001596366051596955,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +20,20,True,mand,1,0.3816459372615953,0.3945478121020502,0.08524720483157228,0.019855043064103323,0.0074712757278695115,0.03363691799725278,0.017751306835856975,0.03862113193829549,0.004935331469569992,0.006864838362616386,0.0012543850194759146,0.0032942666931832206,0.0003260156090476146,0.0,0.0,0.004548533087511939,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +21,21,True,non_mand,0,0.2690669634726405,0.3723736827575617,0.16325508608213551,0.046694971020562734,0.03464559409802502,0.006355678854842793,0.019497487360188612,0.015508631840764652,0.016240893261411725,0.01731097729494585,0.0,0.006288442421438049,0.029035866448718573,0.0,0.0,0.001410473914972469,0.0,0.0023152511717912405,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +21,21,True,non_mand,1,0.27352491172131355,0.2737010895683116,0.17663919029561195,0.08789123960664523,0.04435910718967327,0.02244206741473184,0.040466404405768486,0.029759664134995787,0.027277248413337063,0.019021056437541865,0.003827918738164591,0.0,0.0007187057625978561,0.0,0.0,0.0,0.0003713963113067903,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +21,21,True,mand,0,0.3421767930625402,0.4583821797125419,0.10184422751171661,0.043339296331545055,0.021807383888143045,0.014121841670799959,0.002249176990388862,0.004344863694448759,0.0,0.0061059831791194395,0.00100140175966159,0.002998017787369841,0.0,0.0,0.0007177609921813928,0.0,0.0,0.0009110734195443683,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +21,21,True,mand,1,0.3852523661677553,0.34324948914400705,0.0993124798614889,0.06979577858677936,0.021741120873680984,0.01640646685815812,0.023385459240988556,0.02215392910226852,0.01010099940923899,0.00680351262199579,0.0013969836073747422,0.0,0.0004014145262633554,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +22,22,True,non_mand,0,0.25477183402553005,0.3694056597934993,0.2006597726876724,0.06851248067274086,0.01934086312579471,0.004994729796151471,0.01937602523742874,0.012662439857387622,0.003988019894474462,0.013846794085397778,0.01975152051420429,0.005486164422143218,0.0,0.00163458835254345,0.0,0.0,0.001773014020379506,0.0,0.0004898851159845548,0.0016801531321044578,0.0016260552665631272,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +22,22,True,non_mand,1,0.17874304652108153,0.35419753445154684,0.18606966793109989,0.0679875784765435,0.07473717670265836,0.013330369529280333,0.062252982464887155,0.0030528728703864876,0.03374293988005319,0.01823048784918307,0.0016485884402127082,0.0,0.0,0.006006754883067085,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +22,22,True,mand,0,0.3231040937789736,0.37783574056416336,0.11282585788818966,0.07473591438427163,0.030714524374384062,0.03129122706779622,0.010073667114053839,0.003029764662524868,0.01521408011270044,0.0004846653635579069,0.005193560580841647,0.004988236597648051,0.0012611246538849238,0.001782874677601488,0.0016885630090716064,0.0,0.0,0.0,0.0013615559937593246,0.004414549176577772,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +22,22,True,mand,1,0.34319991902948516,0.4202126831088522,0.1434568705706193,0.031395328956467086,0.02396133543507801,0.006830826629039821,0.011093288892382156,0.0046681244828163555,0.013376849364490588,0.0,0.0,0.0,0.00180477353076914,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +23,23,True,non_mand,0,0.22315237915937625,0.3585126730950114,0.15086660734461227,0.04003015806055507,0.010704597553027875,0.09504534327523127,0.015536044412849838,0.0071776156811848395,0.008975199943097508,0.05273738326518863,0.012890327924280074,0.0,0.0,0.0022834622424379057,0.0,0.0,0.0,0.0,0.005300151960071576,0.0,0.016788056083075552,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +23,23,True,non_mand,1,0.21054648561134698,0.4204533340822677,0.12412795180540473,0.052446732470240245,0.05766140062618662,0.03186729787989351,0.031306696755072604,0.016898810441317264,0.04640595053614962,0.0017567169982827672,0.006528622793838264,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +23,23,True,mand,0,0.2810588064052126,0.4291299040354918,0.1375500150736873,0.052474912378944125,0.03169969809125566,0.014285807975679484,0.0075344484834238105,0.006051070026925496,0.025439860854126622,0.0007661398331433164,0.002275597986726701,0.003361411279311516,0.0011638133306478963,0.0,0.0059455309394979075,0.001262983305926154,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +23,23,True,mand,1,0.2671172269866584,0.4800696157756553,0.058539868244201876,0.022576969912060492,0.06015500872112822,0.050180520674440884,0.011310032497415629,0.020806824086393293,0.017236264656944254,0.0012034744362839894,0.0,0.0,0.0,0.004303496983961252,0.0,0.004541549584258667,0.0,0.001959147440598433,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +24,24,True,non_mand,0,0.17801854764023076,0.33530679714265477,0.13348963369334507,0.07116283229740007,0.015827338429672495,0.020384755253339402,0.03711544964381847,0.01619478665901007,0.03766780688214263,0.0013021755750721319,0.015663540780604546,0.004615541075489265,0.0,0.055358257663124945,0.0,0.007919781127453444,0.04624612685294099,0.0,0.0,0.0,0.02372662928370056,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +24,24,True,non_mand,1,0.19883866184802476,0.3989841260454337,0.17440138282205528,0.044915816103523944,0.04686151373319533,0.02531386457905582,0.05162905332411728,0.0,0.012064034831485559,0.019741109148670957,0.0215373403892625,0.0,0.0,0.0,0.005713097175175187,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +24,24,True,mand,0,0.2942920558990901,0.4487646399779205,0.09648160648117156,0.060370355912672424,0.04881731825902547,0.009610609195121394,0.0032581874042822206,0.01769742428154386,0.0,0.0010155869912132766,0.0006002352032171769,0.00970870776617855,0.0,0.0,0.0013601793728941043,0.0,0.002532808926316935,0.0,0.00549028432935123,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +24,24,True,mand,1,0.36545266921468933,0.3240397115036439,0.06081441358762848,0.06379428134177592,0.0765101482479992,0.0034617820646519197,0.0,0.0007295223052285381,0.005625391544493849,0.006273555830207512,0.023048066936616433,0.0,0.003964139346397377,0.035672397827294935,0.010949931019435805,0.0,0.0196639892299377,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +25,47,True,non_mand,0,0.16693246482461485,0.27572302183688535,0.06502710270928731,0.14929679299607282,0.098820422219055,0.029690619614459367,0.015539474985465207,0.04220478472089951,0.033834957834988584,0.006362011186128971,0.002397014372466234,0.022849399999460028,0.051225623357771005,0.0,0.0,0.0,0.0,0.00017537708397509532,0.0022893305829807097,0.0014731968865586296,0.0012541062165624093,0.025321621488626295,0.0,0.0,0.006488528654305694,0.0030941484294369514,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +25,47,True,non_mand,1,0.1616705841202927,0.27191086649507307,0.22021908800051926,0.061561676086117297,0.0765553221187797,0.03446525060143435,0.05702793411636113,0.02174697868721139,0.028611170728552335,0.010330712376886535,0.004658417106272408,0.011249404614325042,0.0010501468268611662,0.021013204209753045,0.0,0.0008565909328864426,0.013060567050533751,0.0019812136574427963,0.0,0.0,0.0,0.0,0.0020308722706966855,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +25,47,True,mand,0,0.2584666874832539,0.34765150161411806,0.13678525809093164,0.08909913309462639,0.027911554983097473,0.0362446366281597,0.013848854049887283,0.006955248371422206,0.009704937220782311,0.011630127544640762,0.002717838359516249,0.009018580475599182,0.0030351075625971264,0.0004365002979092682,0.009006690059237045,0.00792629402548114,0.009193074656176145,0.004084189558323619,0.009775936550396406,0.0011201519622454656,0.0026830068147981395,0.0,0.0016135722995967666,0.0010911182972038987,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +25,47,True,mand,1,0.22389052863060707,0.25782744040607447,0.13372069707144552,0.06566376497901984,0.08824743970769301,0.030064755444687695,0.05917317978857198,0.01713691927327129,0.026583876492388636,0.028654351670731135,0.01630714416464881,0.0166703541691361,0.0036689128882868025,0.0016985526894867638,0.00727094746660144,0.0,0.00031387182127881537,0.0,0.0,0.002780583450620694,0.0,0.0,0.0,0.0,0.0,0.020326679885448184,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +0,0,False,non_mand,0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +0,0,False,non_mand,1,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +0,0,False,mand,0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +0,0,False,mand,1,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +1,1,False,non_mand,0,0.3085058556833788,0.6914941443165699,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +1,1,False,non_mand,1,0.6098957373391095,0.3901042626608902,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +1,1,False,mand,0,0.3400196071668157,0.6599803928332094,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +1,1,False,mand,1,0.660646645005993,0.33935335499400854,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +2,2,False,non_mand,0,0.01566536243004071,0.5087619037320673,0.47557273383787263,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +2,2,False,non_mand,1,0.18601272710111572,0.7362146227370155,0.07777265016188578,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +2,2,False,mand,0,0.044693926240483454,0.531858172433529,0.42344790132600213,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +2,2,False,mand,1,0.3010902917833252,0.6463185562492355,0.052591151967433455,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +3,3,False,non_mand,0,0.0033046685451080648,0.05265059202234202,0.45906353943154127,0.48498120000099215,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +3,3,False,non_mand,1,0.1065693642191575,0.45232960069446004,0.4030101423101475,0.03809089277626278,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +3,3,False,mand,0,0.012005726429216724,0.09355702040285643,0.46993124064528696,0.4245060125226436,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +3,3,False,mand,1,0.193873969079137,0.4672563873148181,0.3040892300940505,0.03478041351198802,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +4,4,False,non_mand,0,0.0016036671252261981,0.017767458700728957,0.07240919724407537,0.49306198484343444,0.4151576920865569,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +4,4,False,non_mand,1,0.07296581099716495,0.23684940936611923,0.3858336032497618,0.2775773381455728,0.02677383824140037,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +4,4,False,mand,0,0.00484376576675081,0.030795083592889384,0.07832900933388429,0.48303325553412996,0.40299888577233856,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +4,4,False,mand,1,0.13403842057693022,0.32086007222114277,0.2794636225577261,0.23982956587455542,0.025808318769642357,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +5,5,False,non_mand,0,0.0030101669481335555,0.013800918694849406,0.023247493981202575,0.07866283505005688,0.49342482051787834,0.3878537648078958,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +5,5,False,non_mand,1,0.04807347591616507,0.16548737528438784,0.25592287500785454,0.33829108226746024,0.17147069374366333,0.020754497780470584,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +5,5,False,mand,0,0.0009063314408092798,0.0052896314594121354,0.0183945561751926,0.06237264951046812,0.49556217273496406,0.4174746586791465,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +5,5,False,mand,1,0.09083503923757143,0.23933355378662308,0.21767609914690794,0.23011271637875585,0.20748236078672283,0.014560230663417042,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +6,6,False,non_mand,0,0.0006876713822025752,0.006418703163848254,0.00436742804615121,0.014961274075229396,0.13809761892452907,0.49924199681737336,0.33622530759066993,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +6,6,False,non_mand,1,0.049436407291043365,0.1441757013954298,0.19441551085983177,0.27100350347421354,0.20939091792785372,0.12366106164989442,0.007916897401727949,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +6,6,False,mand,0,0.0003365289460912691,0.0006703870275310202,0.0024224029510688844,0.01995922101616982,0.08602343944230291,0.4723069105203939,0.41828111009643604,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +6,6,False,mand,1,0.12293688899612817,0.1644760974383713,0.15959652963026888,0.21729082638893976,0.1719148596737281,0.1496036101153616,0.014181187757200762,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +7,7,False,non_mand,0,0.004203653206945777,0.004945483875130407,0.003598149852488818,0.025428743152195253,0.032497375955108355,0.11302995715962148,0.5062574221068749,0.310039214691625,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +7,7,False,non_mand,1,0.04210741577811832,0.1329856811001213,0.14892997819960876,0.21344726065060435,0.20785659810555915,0.16011532545387835,0.08309279020905272,0.011464950503049121,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +7,7,False,mand,0,0.0021012824584694017,0.0006672411030797706,0.0038073384134930995,0.0020943505765855424,0.018395846057886776,0.08786950542800698,0.44560625287674727,0.439458183085729,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +7,7,False,mand,1,0.06930725791071919,0.14037653944560585,0.16328177075866776,0.14015853278825197,0.1682047245649486,0.11416334176960255,0.17221930154119275,0.032288531221008276,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +8,8,False,non_mand,0,0.0013435715573411012,0.01230029961818488,0.01766638104178269,0.0019936868644967803,0.028005885483463208,0.04584050984339523,0.10480092095098578,0.5050913307173912,0.2829574139229501,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +8,8,False,non_mand,1,0.03430095328556757,0.12916553216501875,0.12407144933981593,0.16312580111296485,0.18020781394946458,0.14010974567167578,0.13153685442758237,0.08283058905690686,0.014651260990994843,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +8,8,False,mand,0,0.0012067963803153098,0.0002514069487143899,0.0,0.0008964277974523003,0.004972038913820343,0.022714179372248598,0.09553181475594548,0.4764865292981976,0.39794080653330005,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +8,8,False,mand,1,0.05134069912577083,0.16757533120486318,0.09887343956517608,0.0996665505448871,0.12270377398119678,0.13809878378715226,0.15430889460945024,0.15315011536579665,0.01428241181570826,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +9,9,False,non_mand,0,0.004559470206999937,0.004018845991368789,0.0007760295232695167,0.006013976920517883,0.008692144860353274,0.012851157374586298,0.03484847907479647,0.14602534703811887,0.4677379005198763,0.31447664849011464,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +9,9,False,non_mand,1,0.028970342864014863,0.07961863207288168,0.11747629066979155,0.14769342844102212,0.1523700663239815,0.14685742408550045,0.11570479846319044,0.13517062840604288,0.07389495343362677,0.00224343523994273,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +9,9,False,mand,0,0.004929616858539351,0.002514875381848358,0.0003334282185824377,0.0015409839340080169,0.0015902958303687191,0.006426324017008129,0.018789457453368623,0.08983405897399756,0.4658182846410647,0.4082226746912089,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +9,9,False,mand,1,0.061462929439804526,0.15338577649722202,0.08549602573931231,0.09024757684757531,0.07560940237251315,0.09326303621395977,0.11546627424183062,0.17230894469298577,0.13284771441289978,0.01991231954189876,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +10,10,False,non_mand,0,0.0004759779923034959,0.0023163479045703685,0.00026078698710457526,0.004038661179580536,0.028045271910474005,0.01765532211958581,0.028880477899209854,0.0595428856116037,0.1640072279689932,0.46701093878322636,0.22776610164335107,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +10,10,False,non_mand,1,0.04107841528105521,0.07823770314857553,0.15486523592282003,0.11435853904543723,0.12044817485561693,0.12325800678166501,0.09290194233821064,0.10742004090489292,0.09344368602379595,0.06604282739441104,0.007945428303517193,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +10,10,False,mand,0,0.0004494869525118119,0.0008938234818741619,0.0015315361240291418,0.0,0.005334156696620282,0.0017013361802096973,0.005076110634371264,0.03140885294342614,0.12791674700486952,0.456292321441596,0.3693956285404916,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +10,10,False,mand,1,0.06637770734519799,0.1037347269546955,0.04929764211388457,0.08000403089864469,0.05681003466616977,0.0863980114645966,0.10697579974459152,0.10876091580547065,0.19260513160181897,0.12922032129012748,0.01981567811480177,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +11,11,False,non_mand,0,0.0009065086990610609,0.006157868401284852,0.0003100705574739186,0.0009706008241725078,0.0003254632163615597,0.003130404315870445,0.020825938868845477,0.0644701163930229,0.04261762461914473,0.16051114862816465,0.43063897518796784,0.26913528028862904,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +11,11,False,non_mand,1,0.04473474589816076,0.11766077271535123,0.07177841577666452,0.1131263354696125,0.10758351836461788,0.11696281382247811,0.09159779595421777,0.09281255134137854,0.10160072093522363,0.06838552118110745,0.07099504002390444,0.002761768517284982,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +11,11,False,mand,0,0.0024792594597977742,0.0007773309530198535,0.00036874407771155974,0.0010169689392536456,0.0017630528307359774,0.0,0.002174406455855905,0.00701544991066077,0.03893266216208622,0.11181304151582698,0.42621427953007496,0.40744480416497525,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +11,11,False,mand,1,0.04409957471856176,0.12318929881910916,0.07078091352119609,0.06363033511330742,0.06462904930268315,0.06303245399572764,0.06541702315293788,0.0625756694122921,0.1199555634125709,0.17151940594087506,0.11827193197593719,0.032898780634803414,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +12,12,False,non_mand,0,0.0020469632772412783,0.005118515335118939,0.0013159156550736598,0.0,0.0007908607181557826,0.021017980277829137,0.004826785690562101,0.004123145950079362,0.05061684195463624,0.11067985112791373,0.14006899854901622,0.4469621846879527,0.2124319567764208,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +12,12,False,non_mand,1,0.03070787278819616,0.10748251498391112,0.10529354364329667,0.10498462765101912,0.09891306875650994,0.0664204336491066,0.12088536426440363,0.07410396610101483,0.07939374069499847,0.06628998760178974,0.07867960738818341,0.06259586978835742,0.004249402689215375,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +12,12,False,mand,0,0.0006372193853895992,0.0,0.005848074282949092,0.0,0.0,0.0,0.0,0.0010149435014358149,0.004569623704587577,0.028054534250587834,0.11749645384146713,0.4671681855422318,0.3752109654913544,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +12,12,False,mand,1,0.04002187637050176,0.09526836768228618,0.059358519465698846,0.03576047145014369,0.04810390407695772,0.03936412035301255,0.06365899284587356,0.07580805326819011,0.11088995914891119,0.14867772123176348,0.15146074936787685,0.10389289373200306,0.027734371006782478,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +13,13,False,non_mand,0,0.010581845746745117,0.02135469078155703,0.0,0.0015680703637736314,0.001832220432725227,0.0015572715675743669,0.004722721405453711,0.0015552119625428912,0.020301595024043714,0.05294252743383133,0.02739040080000406,0.19595135104925895,0.4558594788349525,0.20438261459753626,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +13,13,False,non_mand,1,0.08242038012633962,0.11109911021658904,0.0834599922053207,0.10526411307609268,0.09561577758278461,0.08429541153794354,0.06506213952322829,0.09335214637086123,0.051599022262841715,0.07756706269165822,0.083942634322639,0.028698585379787145,0.033703141293734674,0.003920483410179549,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +13,13,False,mand,0,0.0002114867555093238,0.0007563718036992013,0.0004421685796641646,0.00036419480365186714,0.0003682920487837825,0.0,0.0,0.0,0.008255277137243444,0.004927956685967232,0.019750154588259843,0.07994274761093642,0.3745235312581257,0.5104578187281599,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +13,13,False,mand,1,0.03460987876574106,0.07894981745463045,0.04589558870888185,0.012970377926487097,0.04808962168469219,0.05549865205893623,0.042534431425930115,0.05818052149874343,0.09295231797485712,0.0877287949553075,0.12566300567166405,0.14963976497245862,0.15526480921105232,0.012022417690619317,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +14,14,False,non_mand,0,0.0,0.0006578086994089901,0.01302603786736732,0.0,0.0006592863277712734,0.0008924786174391466,0.0005394873318307191,0.0,0.0041217132854244,0.01522305974266395,0.06622968234414911,0.0483182924082985,0.11981097037630566,0.435989256913797,0.294531926085542,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +14,14,False,non_mand,1,0.04340498068238858,0.147951761325986,0.07264071903152215,0.04281460481044742,0.07457928395632307,0.048378295570339784,0.08732960773886839,0.09219930503334722,0.09128470192088546,0.05019019945259609,0.049538071651751434,0.038355555959303296,0.0935002193823536,0.0477720540329725,0.020060639450914765,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +14,14,False,mand,0,4.3246973510772455e-05,0.0015216628366039775,0.0003993766367743454,0.0,0.0,0.0004707113297645492,0.0,0.0,0.0008075792765713283,0.0,0.006289172555100225,0.0182123246792965,0.05208444331605652,0.383581731025321,0.5365897513709964,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +14,14,False,mand,1,0.039150747297890164,0.054833142291523404,0.047082873795495445,0.03298477957620137,0.037454014256929555,0.03230432367809892,0.03327697750429275,0.03994444636251793,0.06384435747924255,0.0537960157785593,0.08442279855642591,0.097795432275471,0.14027428653059662,0.21859768986491956,0.02423811475183733,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +15,15,False,non_mand,0,0.0044221205692116855,0.0009801923634170041,0.0001427006121181721,0.0,0.000508160548952053,0.0033277464063984417,0.0,0.0028758539422529803,0.0011239627287658995,0.0,0.0025802253117421323,0.024883423167047537,0.07027269844752945,0.13059386627460212,0.5127789792728545,0.24551007035510772,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +15,15,False,non_mand,1,0.038287496457294415,0.08476197683093822,0.06360863877583045,0.07199736395846229,0.06787500929314788,0.045702973252856424,0.06344093654945081,0.10512264253660736,0.08156722082324581,0.02108868850056482,0.05209243227673514,0.020772749433657898,0.07156303760819425,0.1015023142209167,0.09097558401325304,0.019640935468845697,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +15,15,False,mand,0,0.0,0.0005626759564094324,0.0,0.0,0.0,0.0,0.0,8.384499794164758e-05,0.0,0.0,0.00029977482874100913,0.0017152465912250259,0.006761382428903971,0.03258013271517248,0.4264807243994966,0.5315162180821112,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +15,15,False,mand,1,0.016404579755016607,0.017036582483842596,0.020547731770206346,0.00917552202798977,0.01560367880929944,0.01977799822209969,0.04842708043929425,0.04219496183703155,0.041046119542705914,0.06788772643972953,0.09363143799368517,0.0691600214354772,0.11123370786224275,0.176309953591141,0.2015416109812438,0.05002128680899598,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +16,16,False,non_mand,0,0.014050345876972627,0.0,0.002801887663417347,0.0,0.0010050424815216852,0.0,0.006525236517820661,0.0,0.014459325332627424,0.004223443787743102,0.00026919822463454567,0.016861818330387683,0.025649076743019753,0.062346996473496244,0.12918228193997883,0.4133291592237026,0.30929618740467696,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +16,16,False,non_mand,1,0.040428321125155216,0.04484592663699025,0.0667567119191192,0.05512837775106797,0.06609770431106861,0.05324636312662705,0.07998282756176713,0.06446811052358363,0.049367380566723996,0.09605046020428629,0.05298377911220337,0.03895563064697063,0.036334009718150394,0.08819297038436848,0.11393408673084879,0.052515331547916544,0.000712008133150821,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +16,16,False,mand,0,0.0011212035185111234,0.0018749886523068754,0.0,0.0,0.0,0.00028843066554384513,0.0,9.23311804431816e-05,0.0001326348415503372,9.1982235892906e-05,0.00013827478127552482,0.0003449856980034226,0.0012368236023759876,0.00829463072505366,0.0655618147486044,0.5861877071626057,0.3346341921878303,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +16,16,False,mand,1,0.0027910764821412926,0.008085595626922376,0.011451177472914891,0.0165723647858112,0.03183163392055063,0.020310317987154235,0.01071127840078966,0.021878272658562025,0.02968039103033993,0.03611873034192362,0.03414105914199353,0.07098930728623262,0.07055590437293402,0.0963283759247339,0.18967984147024144,0.2957553527093214,0.053119320387436234,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +17,17,False,non_mand,0,0.0,0.023307927168187848,0.004000226473400521,0.0,0.0,0.0,0.0,0.002187330857501246,0.0008700418558189156,0.0009409359675874714,0.001356227280953211,0.0006439923704507155,0.005661031464194419,0.0016356077432996966,0.02249734694057814,0.10096010808314712,0.5461978482479335,0.2897413755469471,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +17,17,False,non_mand,1,0.03351833920961381,0.06702818639626788,0.015411469522095775,0.01683881855242247,0.0609874536578672,0.08117313707517244,0.08146730779020327,0.07861338118997839,0.030337000409543846,0.08046451494260316,0.05675737001355755,0.024748398560688913,0.04578173063779357,0.05784910499758113,0.060092288970562395,0.07839474720334631,0.11292168213191822,0.017615068738784326,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +17,17,False,mand,0,0.004556971804669404,0.0020384858508298367,0.0005035822947509159,0.0,0.0,0.0,0.0,0.0,0.00011313129719986935,0.0,0.0001060062126540252,0.0022413395351012903,0.0026615457554179586,0.0015649018415282612,0.011185263868029541,0.08327655245403838,0.4951600795598544,0.396592139525925,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +17,17,False,mand,1,0.009271208383827494,0.015623766293825708,0.00399078756047959,0.014380728254660085,0.013752189739450473,0.012552311007141435,0.018669022940268277,0.02643465832301535,0.03576568820355527,0.013812145573082291,0.014192101408299927,0.03495999795980903,0.049688706165011864,0.07343713316418343,0.13137465606423182,0.24570752186370814,0.2327606052799791,0.053626771815473206,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +18,18,False,non_mand,0,0.0003349257533891248,0.000455365657052843,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.00399069463959953,0.0,0.004974173476017343,0.011982705042316938,0.0185317456189463,0.014737218095135571,0.10300581741159799,0.4548505022677063,0.38713685203823844,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +18,18,False,non_mand,1,0.006645270632043586,0.035268301644150096,0.03719481091514608,0.0764717316909774,0.05084949163665219,0.03072605507879998,0.07965705839179173,0.055852260708506414,0.047504410609469104,0.08789454042394572,0.06391269170038437,0.05820619460013512,0.026307959991774092,0.06833216785600095,0.06690171101883549,0.04184759757726937,0.05794427704574052,0.06842048952190465,0.0400629789564728,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +18,18,False,mand,0,0.0,0.0002912943851750418,0.002560390969445633,0.0,0.0,0.0,0.0,0.0,0.0,0.00042881892002179375,3.152485934184723e-05,0.0003200038506389674,0.00010463837912428658,0.003602647489904629,0.00604940434453755,0.019344593434821866,0.1231669898863159,0.4388882258622614,0.40521146761840815,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +18,18,False,mand,1,0.0015729613791709916,0.0017028214683226762,0.00982572710017358,0.008621497005950553,0.009945983398555108,0.006473947115953141,0.010874549986303468,0.013324878858735227,0.013150668336686027,0.016233519607117226,0.030737036541870152,0.022025611353876984,0.025009784539932634,0.05236233697233131,0.12084151446919604,0.13962444085661238,0.22502388956558184,0.26406445999940914,0.028584371444223464,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +19,19,False,non_mand,0,0.0002935332102889036,0.005480040918355398,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0008255354694775797,0.0,0.0010193757706574635,0.01160812436454304,0.0,0.018093584424663776,0.036569988013863096,0.02166471490780873,0.10872350649971427,0.4933448848126991,0.302376711607928,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +19,19,False,non_mand,1,0.015167393550085784,0.06436767249690344,0.021978022060404466,0.026195047943679668,0.040972730779458254,0.05799364265524419,0.04559663345917261,0.019777271155391924,0.06983518624960366,0.08149142675680957,0.04761440004472914,0.04422216833566978,0.05654170938082257,0.014715748163634008,0.037923688559589344,0.010098284596012719,0.0942210851861242,0.16189816425443762,0.07094096850201331,0.018448755870213534,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +19,19,False,mand,0,0.0,0.0013543798954379705,0.0,0.0,2.6913303113467185e-05,0.0,0.0,2.6693623247862424e-05,0.0,0.00019994177268318624,0.0,4.717574041357856e-05,0.0,0.000219271285569539,0.0005387875450895063,0.0052995559256559495,0.018651855117429263,0.09781678251194907,0.561190661360467,0.3146279819189439,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +19,19,False,mand,1,0.00010206219094949653,0.004977279031464755,0.005971108330419951,0.0022948767165544876,0.002164702079430046,0.012235305038568204,0.0030255498152621705,0.010162563640467144,0.011899488070682994,0.017198225268187414,0.019020612349906756,0.009885372430624408,0.008398172853246283,0.03164376570178275,0.05870788437664778,0.07712669939847168,0.15123018866057794,0.2550729981107298,0.301166537224902,0.017716608711121136,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +20,20,False,non_mand,0,0.013854594349188058,0.00022662198037211477,0.0014734681064250009,0.0,0.0,0.0,0.0,0.0,0.0004810081741433067,0.001506155068759339,0.0037986706277299245,0.0,0.0,0.0013504265617815643,0.00019385758468053123,0.0,0.011048740598159513,0.0037902611286686387,0.12542702791890903,0.5746262862863871,0.26222288161479496,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +20,20,False,non_mand,1,0.021321155768967898,0.05286065953947156,0.024538352225844363,0.016613365222966726,0.0624934231537968,0.016939877445033783,0.007598242289219351,0.034768285328409386,0.046449412738704426,0.05948164439475669,0.039083023097467716,0.024127228159278466,0.009930439541584277,0.042366850927406476,0.06166640455265051,0.08632790082796032,0.06893642092451197,0.08684849677413964,0.13868866936299099,0.09896014772483963,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +20,20,False,mand,0,0.0,0.00014387922014249266,0.0,0.0014952956265923143,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.00024498308911677895,0.0007205352484350487,0.003450413811709883,0.030262487258412907,0.19937531244757992,0.5904725869974611,0.17383450630055045,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +20,20,False,mand,1,0.0001016345135907172,0.0013431148166342822,0.0025214057951854748,0.0019538419512949356,0.00031501442240043577,0.002173587504733341,0.01829238124377114,0.008201342197763316,0.006929082902138864,0.015977084047267068,0.013162826759767045,0.024777425980938576,0.012952872970959886,0.019038068519657468,0.0489058827362567,0.08297368096529972,0.0714992700699535,0.13817057595539783,0.268925469755579,0.24201236349724414,0.01977307339416366,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +21,21,False,non_mand,0,0.0,0.008080239580408306,0.00653365195023542,0.0,0.0,0.0,0.0017143244078877587,0.0,0.0,0.0,0.02330870782272815,0.0,0.0,0.0,0.0044051113856997766,0.0,0.015877969566220392,0.022756728927372263,0.03840585286610053,0.1768320521108488,0.48564207130797943,0.21644329007451926,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +21,21,False,non_mand,1,0.034988652032331806,0.028352557627599802,0.07832671759997871,0.014498479558418625,0.021452446300926627,0.044726196824526186,0.016884880651404977,0.05679465377468503,0.028301309132595515,0.05257766416225226,0.08589905275199353,0.052945334102946294,0.02088040059107313,0.011775113976478898,0.05407441616750971,0.016209732173072304,0.02881556662505882,0.05410314372690426,0.10904287723732753,0.11767750258553024,0.07167330239738584,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +21,21,False,mand,0,3.5902246180404136e-05,0.0003287418834560863,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0005844406394864265,0.0011395879163835726,0.002457512684508867,0.011903359512269136,0.058671865569636474,0.2735668072416954,0.48033203705426747,0.17097974525211096,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +21,21,False,mand,1,0.0,0.0010676949867987023,0.0003741642123714111,0.0003392872263632287,0.0019013418573134112,0.005964794433767494,0.004111667621835298,0.009152267167737024,0.009056498033029246,0.009715477313451742,0.007128756442822842,0.019287987286840905,0.008715848337179232,0.018587104375939884,0.025656997065551555,0.06942035498877833,0.0857249089840367,0.11979220774428162,0.19816034939510632,0.2715038243473685,0.12095602829796262,0.013382439881461582,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +22,22,False,non_mand,0,0.0,0.002772802942743006,0.0,0.0,0.0,0.00208710133979679,0.0,0.0012133046041248117,0.0,0.0025797578764766168,0.0,0.0,0.001444469515349913,0.0008629555916225466,0.0,0.00307704158343639,0.0,0.002830643430422829,0.01769971550817686,0.085323665686875,0.3241131645539106,0.3352579379799715,0.22073743938709334,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +22,22,False,non_mand,1,0.003943202011583586,0.07590482767457281,0.010022084233224371,0.009004346978365886,0.01944597202531891,0.014149940036728577,0.04861335549448911,0.005658799896185953,0.08215714869482671,0.04271279267950798,0.049004045967736616,0.05661020516859074,0.05007057791871834,0.019629252201956937,0.020925406925534316,0.032621056163113483,0.01305643867359321,0.07832145179247733,0.06858371853794595,0.12530957849750027,0.13601874202743744,0.03692457599698219,0.0013124804036092647,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +22,22,False,mand,0,0.0033319545069183487,0.00040293376633402495,0.0,4.978674800183608e-05,4.956840826720383e-05,0.0,0.0,0.00048080827168619404,0.0,0.0,0.00037907395233851166,0.0,0.0,0.0,0.0,0.0010411329007553862,0.0006886689934808201,0.0018842792130508302,0.030055426235856154,0.11106661717859341,0.34783111970489866,0.38452147913984164,0.11821715097997308,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +22,22,False,mand,1,0.0,0.0009844126997186388,0.0011967267681276734,0.0019472708709395152,0.00306324636258839,0.005218500288671079,0.008959996278556434,0.013328186876110292,0.01948593457473374,0.0029207397730027914,0.016523202648888523,0.012774503142272065,0.012979848878806757,0.016499438380020322,0.02892590011752825,0.06721987003262893,0.08228486043678297,0.06297809963520319,0.14050401489836273,0.22635805834453743,0.21126684046820765,0.06107107140955881,0.00350927711475168,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +23,23,False,non_mand,0,0.020946657824256545,0.0,0.0,0.0,0.0,0.0,0.004711436323343341,0.0,0.0,0.0005332302439481441,0.0,0.0,0.0,0.0,0.0028469849527635485,0.0,0.003752044056675865,0.0060734526097271195,0.005376679727065213,0.018229286160826877,0.0893450127112203,0.1946541464012934,0.3979914205914805,0.25553964839739934,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +23,23,False,non_mand,1,0.013495568361334306,0.015067442486257767,0.0,0.01857213338220899,0.011450767637648131,0.01054539852032298,0.0325342310595822,0.014967514051863,0.0600307214086128,0.06913683245424698,0.08408790287712406,0.054831404843056694,0.02182393095144691,0.04507909184868209,0.031070400701647148,0.04154822675716908,0.023259329978976354,0.06718347019519803,0.06520816539610565,0.05050121284258412,0.11023952111018313,0.09952041831559622,0.05696863823292922,0.00287767658722409,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +23,23,False,mand,0,0.0,0.0,0.0,0.0,0.0,0.0006021162410303741,0.0,0.0063030418216984685,0.0,0.0,0.0,0.0,0.0,0.00021618365840965026,0.0,0.00033124132710278336,0.0002795232526629928,0.001709205247850362,0.0018169391708012528,0.021116367316931353,0.1734276051812627,0.26303548645617175,0.40599341260436056,0.12516887772171442,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +23,23,False,mand,1,0.0005664297327648591,0.0016667589289531017,0.0017746929301902608,0.004883182110559827,0.0016371396888604573,0.0033712624678077915,0.0,0.0005555037786081591,0.0058865336484199195,0.012019305681875423,0.01002769786944633,0.0038787403968613982,0.007739255591478886,0.030853128423908176,0.022978737087604693,0.06756447135089728,0.06384320606476022,0.07193296371300899,0.14178927759270055,0.1678106068493928,0.18046286971892364,0.15990714563785483,0.03786010827300599,0.0009909824621165745,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +24,24,False,non_mand,0,0.001957236455297285,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.002139163740884773,0.0,0.0,0.0,0.0,0.0,0.004861403580473194,0.014696944307544956,0.0,0.006362562379164253,0.0,0.030924532083993154,0.16087761163198888,0.16507515037083167,0.49147707095271914,0.12162832449710316,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +24,24,False,non_mand,1,0.004658839008606419,0.031109764265227966,0.0031358654271668065,0.007135974233933102,0.022284415150529348,0.045165743434747045,0.03467575600780006,0.029249486464707687,0.016528250759267955,0.044217071484616434,0.05052768525351878,0.026021451442437685,0.020810508617239865,0.05510583769065272,0.0653719796812064,0.06162011175881972,0.04348047893484723,0.02955610197534336,0.044209350767777114,0.08979342087125931,0.07450566834376521,0.11556001515984184,0.07585893374518235,0.0,0.009417289521505862,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +24,24,False,mand,0,0.0,0.0012614821175236817,0.0,0.0009483979593045735,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,9.798584859674903e-05,0.0,0.0007660491638100698,0.0,0.0,0.0019123735615852804,0.0008663669483088619,0.004302987999128094,0.04625657711687475,0.17518637256962677,0.30146158026255426,0.35473324543549245,0.11220658101719452,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +24,24,False,mand,1,0.0004273288234473731,0.00048395960583567954,0.0,0.004412445943197242,0.0013813769998042077,0.0006865842481945973,0.0030763780403890366,0.0010409122039024103,0.003904455225818047,0.007212567117042947,0.02272289997510155,0.006219000048672273,0.012474286827782032,0.01971598808855006,0.03399285316467546,0.03491920715439283,0.03650142127196347,0.06084846208894538,0.13514622420931124,0.13700214086205523,0.15371146352951298,0.17698954947094717,0.10153619524905207,0.043787551002105955,0.0018067488493017003,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +25,25,False,non_mand,0,0.0,0.026855467767289344,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0051884196592915325,0.0,0.0,0.0,0.0,0.0,0.0,0.01236158321943575,0.0,0.014676963582940926,0.041784470228698634,0.012771413566842436,0.09982169057332398,0.12081608047775094,0.5289034488282967,0.13682046209612983,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +25,25,False,non_mand,1,0.005205279463922217,0.042238707562628146,0.017900291924254377,0.07230496755756445,0.02750209063570552,0.008254141459919673,0.02685029411104523,0.02129477270095243,0.014820981886008321,0.007442876456201476,0.061368631180781834,0.04859090710876045,0.010779476678561986,0.0021181593731498323,0.04204879677467802,0.018961013921286456,0.00528557522604036,0.0060082585179672375,0.03614187488234714,0.15823571685080345,0.09822016733925946,0.06922820156058726,0.03700690352034442,0.03381012329710709,0.12838179001012345,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +25,25,False,mand,0,0.0010447700996694333,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0015226397157089662,0.0,0.0,0.0009403214751077665,0.0,0.002731049479785308,0.0,0.001992005134632034,0.004389706257466054,0.011114410719972786,0.1097896710326778,0.17012499798677858,0.24343612562029995,0.33832497455701194,0.11458932792088994,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +25,25,False,mand,1,0.00010113064033479776,0.00010113064033479776,0.0,0.0009593244487670843,0.008620759851692944,0.0,0.008874859291453811,0.003452633512794278,0.0018134409243518086,0.004356931975913798,0.005233383881383854,0.013581909702358333,0.009571366298209278,0.010726786393504573,0.01934779615544867,0.033664487334236076,0.08534550964421805,0.12065718642222509,0.08869241945051536,0.13354844628738305,0.11046731204818085,0.11292664234524964,0.07664839693148495,0.10677927592879725,0.04055021472419117,0.003978655166971246,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +26,26,False,non_mand,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.05638197040670044,0.086772396809289,0.12754790024816223,0.12145320114349349,0.4270529910776051,0.18079154031474942,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +26,26,False,non_mand,1,0.0032816541532269144,0.004723626004281977,0.026439011226640424,0.0005880721513242938,0.042172106569430566,0.0007220328446468592,0.012760069622394126,0.022646845870121123,0.0070380593365810444,0.021621077765149294,0.004406268444740761,0.05178888301094209,0.004194300766825882,0.019594593157807948,0.05498509339253303,0.015576055941276168,0.044711322373922974,0.03851088324294953,0.0965578912979413,0.19939592028453582,0.032901430193206405,0.04076944104804929,0.06600611906708521,0.017104172995515886,0.02091244051020818,0.15059262872866347,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +26,26,False,mand,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0010097336126187006,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.001441050016718605,0.0,0.0,0.0046066100976096145,0.013521444204739937,0.04544363682134943,0.06666196076952169,0.16690657011014065,0.2887578863218669,0.27309966945130104,0.13855143859413344,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +26,26,False,mand,1,0.0,0.00012169349614156285,0.0,0.0,0.0013173695741662316,0.0009265168581856395,0.0031389015898456783,0.0020165199440940257,0.010271836279595626,0.009057459962892419,0.0056692219406281,0.01070424223648886,0.020558169356061695,0.023885629242994217,0.021160318030269843,0.07225119188773171,0.03788655313040271,0.09567453552181272,0.09303908498691627,0.11786802715893488,0.14714781743007943,0.10076138476440295,0.07335439048371141,0.04477248140682615,0.0658474705618937,0.03720864052146022,0.005360543634463427,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +27,27,False,non_mand,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.08321242053607554,0.0,0.0,0.0,0.0,0.0,0.0,0.1338447602742628,0.03668550180000455,0.49717047549970805,0.249086841889949,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +27,27,False,non_mand,1,0.0,0.004365998971203495,0.005526284200613821,0.0008911511944426591,0.0011596535370158579,0.003395153940115188,0.04538785874219372,0.0055802080224916385,0.004506717471949083,0.0,0.008296915415056333,0.12606703843688324,0.0033068758467361585,0.0026176551091245783,0.015491058421315896,0.03168870370601159,0.006165764836894523,0.0,0.028471518309172703,0.06427089762850444,0.059166792379607605,0.07619714332429037,0.06634515151233768,0.1665278885843596,0.2437273109787969,0.005253026115539571,0.025593233315344036,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +27,27,False,mand,0,0.0,0.0,0.0,0.0,0.00462768920781746,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0035328639744926383,0.0,0.0,0.0,0.0,0.0,0.0,0.0015195476841073636,0.016350375623336286,0.05513216116239345,0.05024722754740453,0.08374001115365137,0.23742738630739216,0.37190299673247407,0.17551974060693057,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +27,27,False,mand,1,0.0,0.0,0.0030853357555393544,0.0,0.007355900477770891,0.0,0.004476242658243728,0.0,0.002450323584012583,0.003127720585114698,0.0012324417543434169,0.005909487945169219,0.02231052237177983,0.021531899261560544,0.023875777308208983,0.029564153701998417,0.06627080391668981,0.07286626003978702,0.11836336264770164,0.09964250780261288,0.11905552110276761,0.09884716142339667,0.1375407692998142,0.055388982752597564,0.04418894367205662,0.037359235713303,0.024159309154340412,0.001397337071189429,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +28,28,False,non_mand,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.005893423084126639,0.0,0.0,0.0,0.0,0.0,0.0,0.06161217745176845,0.012370949015906263,0.054056220103717884,0.6963123577829712,0.1697548725615096,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +28,28,False,non_mand,1,0.005932528749905598,0.009505545485504526,0.008695916728570308,0.009401284500361828,0.02066641400789642,0.051459663047809814,0.04223797307726802,0.0,0.007850433332501685,0.0,0.0069687141103478385,0.0,0.0025233289149239452,0.005679781768764818,0.018155975879139228,0.0,0.1477910941309391,0.0,0.006931105738499081,0.09073055144548066,0.19310915989343444,0.023804251999506372,0.003093163529902435,0.0,0.0,0.15376188747556613,0.12610302068418353,0.06559820549949387,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +28,28,False,mand,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0008351107514563876,0.012044830966816321,0.02979571436041339,0.02950318899023904,0.08606776129729246,0.10639999593145809,0.2857411728554919,0.393745903142871,0.05586632170396188,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +28,28,False,mand,1,0.0,0.0,0.0,0.0,0.0,0.0019523840336447369,0.0,0.0,0.004671328994893418,0.0029056025069879037,0.028440969718154557,0.01074815253397821,0.0010004579810449796,0.01370332771073568,0.009523342437613025,0.028630559942846363,0.09460687744328454,0.07838474387055222,0.09177519973357763,0.10582855612136319,0.1478180879239831,0.06990112601414306,0.1038704503553094,0.06580411575211609,0.05550725738512009,0.042589253745558386,0.03146743928459926,0.01087076651049371,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +29,29,False,non_mand,0,0.0,0.0,0.04816934499315065,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.018613280602750668,0.0,0.019038253732547417,0.1616884514392184,0.0,0.0,0.03538469184099581,0.002470550707674957,0.12096372328811623,0.25912170627301173,0.3345499971225342,0.0,0.0,0.0,0.0,0.0,1.0 +29,29,False,non_mand,1,0.0,0.0,0.011625503605139476,0.00449176304936865,0.0,0.017260228259021338,0.007694527003352663,0.011835476784643568,0.0,0.30530009965298444,0.0,0.020218763234210593,0.0,0.009332348224563141,0.16159285646221677,0.02292660165756739,0.0,0.06405190543802423,0.11240285054736682,0.03807948441655916,0.17379470427728044,0.00635750952735676,0.004066864440049928,0.003541161546199974,0.016751699114957996,0.0,0.00635750952735676,0.002318143231779766,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +29,29,False,mand,0,0.0,0.0,0.003934712829786398,0.0,0.005495865779772318,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.006241144008995931,0.0,0.0,0.0007979160784828135,0.0,0.0,0.0,0.0,0.0183907917637835,0.04117427671427664,0.015079814294754976,0.1166730947201058,0.19244374077248716,0.45975383301587736,0.1400148100216773,0.0,0.0,0.0,0.0,0.0,1.0 +29,29,False,mand,1,0.0,0.0,0.009577616659769035,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.03749246066899982,0.0,0.009565906440226353,0.017607420525218333,0.010279925578379836,0.06737171658058286,0.057031143230995715,0.04668780808310395,0.10257497787647352,0.1364103583114607,0.12669323680904365,0.0971845822447083,0.06855366388867322,0.05448418300195883,0.02211515686869544,0.013671105485262873,0.04090098427472115,0.04507357237068319,0.03333332875041091,0.0033908523506327596,0.0,0.0,0.0,0.0,0.0,1.0 +30,30,False,non_mand,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.061802484025478444,0.0,0.27015710745904653,0.043233624690139666,0.3572952814818533,0.2675115023434822,0.0,0.0,0.0,0.0,1.0 +30,30,False,non_mand,1,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.012418494674007168,0.0,0.24675165306293573,0.0,0.08617252673192825,0.04363889956401214,0.0,0.0,0.013245525905700285,0.006858576451340298,0.05822476466129167,0.02643379066772429,0.1168462326698982,0.0507176389333524,0.14675829754376166,0.1713043210897166,0.00978849987936505,0.0,0.0,0.0051628226199749655,0.0,0.0,0.005677955544991209,0.0,0.0,0.0,0.0,0.0,1.0 +30,30,False,mand,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.007547370393836327,0.0,0.015229507359741521,0.11353399101555982,0.10503974728823559,0.22536193435006424,0.39521505871092594,0.1380723908816365,0.0,0.0,0.0,0.0,1.0 +30,30,False,mand,1,0.0,0.0,0.04281100958118251,0.0,0.0,0.0,0.0,0.0017845947566491568,0.014438582121224591,0.0,0.0027362482023577336,0.0,0.007924810335435397,0.014161034730439585,0.010645978191166163,0.015090083084884505,0.10481464461430465,0.04918662684180706,0.08149212883106766,0.02926872033665626,0.19552008579721641,0.12458798679258958,0.05911080652651869,0.033423081415431335,0.02523561789122675,0.0024912639521436444,0.060528357818212065,0.020157276783711174,0.033825970908845975,0.06224870185486725,0.008516388632062234,0.0,0.0,0.0,0.0,1.0 +31,31,False,non_mand,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.029977424692256244,0.46967591059198405,0.50034666471576,0.0,0.0,0.0,1.0 +31,31,False,non_mand,1,0.0,0.0,0.0,0.01833810824001649,0.0,0.0,0.0,0.0,0.011516290886021865,0.16308529577680958,0.0,0.0,0.0,0.02547074507105579,0.01652281484738158,0.0,0.04452351185239044,0.009317122261056536,0.19971424002149518,0.013045312623538401,0.0075661778015869464,0.3102328065307183,0.0,0.025003003703219125,0.035055083246462164,0.030069783720618536,0.018526881151892546,0.034928530599363024,0.037084291666373344,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +31,31,False,mand,0,0.0,0.0,0.0,0.0,0.0,0.011660697134411879,0.08359356906747217,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0074351633681512585,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.053515133972031996,0.0,0.046642788537647514,0.06362339255281085,0.004389112388089102,0.04017428022808142,0.4817135990383709,0.20725226371293273,0.0,0.0,0.0,1.0 +31,31,False,mand,1,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.014153420408759243,0.0,0.0,0.0,0.0,0.023248141345199345,0.008890938931074744,0.05285349575062624,0.04990553163058654,0.16677175839150424,0.11331994669851629,0.1181638409115989,0.07387812106291494,0.15865917983104275,0.031235937800509726,0.06596532918651592,0.035468217376292764,0.013865230438545558,0.033059807910658684,0.03141248412869757,0.006106628878031803,0.003041989318924492,0.0,0.0,0.0,0.0,1.0 +32,32,False,non_mand,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.09030713454422928,0.10225330344102772,0.0,0.0,0.0,0.0,0.34201165614137685,0.10656854103943249,0.35885936483393366,0.0,0.0,1.0 +32,32,False,non_mand,1,0.0,0.03615936143527503,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.11870838866384083,0.0,0.0,0.030664587449557346,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.026266199236874226,0.0,0.0,0.08761524377109123,0.0,0.0,0.7005862194433614,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0 +32,32,False,mand,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.05789616370086815,0.1344598373883522,0.3375637056076247,0.2230108052807423,0.24706948802241244,0.0,0.0,1.0 +32,32,False,mand,1,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.009238420497671889,0.0,0.0,0.0,0.0,0.0,0.0,0.027952902624459142,0.004745183696099721,0.041750935844626774,0.03560104623729895,0.019208273165269348,0.039862390831722126,0.2445054537893148,0.1472889280930601,0.10677793164025022,0.07872994398102684,0.04261569901118799,0.005675051098870241,0.0815413323203732,0.019486477408908912,0.0,0.09502002975985951,0.0,0.0,0.0,0.0,0.0,1.0 +33,33,False,non_mand,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.3937868145193479,0.4486503063939636,0.15756287908668853,0.0,1.0 +33,33,False,non_mand,1,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.020230772694571117,0.0,0.13595146003291136,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.09279893744389224,0.0,0.0,0.07918749737876385,0.0,0.0,0.12358922634696451,0.07179448760198139,0.0,0.0,0.1394804713644242,0.0,0.2868037587900601,0.0,0.0,0.05016338834643131,0.0,0.0,1.0 +33,33,False,mand,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.21087359210326426,0.35509399657354956,0.28936975269124166,0.14466265863194447,0.0,1.0 +33,33,False,mand,1,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.023247760476100464,0.0,0.024677767802522798,0.0,0.009363181643807422,0.029519156456030052,0.11193010731182607,0.02285317247116739,0.051385963088573655,0.04473753625556975,0.14095762264166245,0.055024985843556244,0.17384148255260748,0.029384651649520036,0.16325933704399054,0.03425760908549876,0.013563487427945331,0.015926159431522906,0.007948502073252565,0.0,0.022039827009254335,0.005005115351559031,0.013479183790602863,0.0,0.007597390593429946,0.0,0.0,1.0 +34,47,False,non_mand,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.018384368573649112,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.5577089454113409,0.0,0.4239066860150099,1.0 +34,47,False,non_mand,1,0.016657687671303212,0.02183836474581605,0.0,0.021670440655999233,0.0,0.10173930098123364,0.02498724707017388,0.0,0.14226492691657533,0.004760495563960537,0.0,0.0,0.0,0.0,0.0,0.0,0.02638875495711764,0.0,0.0,0.05929170885647927,0.0,0.0,0.0,0.0,0.0,0.008986741490552959,0.0,0.0,0.22252478651398835,0.033523970436925156,0.0,0.010929820731753599,0.017516567897537586,0.28691918551058354,0.0,1.0 +34,47,False,mand,0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0778976250021037,0.030793465479170962,0.0,0.0,0.012379085610171855,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.07427570742104288,0.0,0.0,0.0,0.0,0.10023495355353525,0.26524960444707757,0.1397015192237292,0.29946803926316845,1.0 +34,47,False,mand,1,0.0,0.0,0.0,0.0,0.1018436706346972,0.0,0.0,0.0,0.0,0.002263878168597051,0.0,0.000983293615706626,0.0,0.008218649939220985,0.023737052572553673,0.021264126033222547,0.05518389314660721,0.010993620292826722,0.20415745418381434,0.07475058698068834,0.07116274568401747,0.07424603443354091,0.06495972196633373,0.03217245961981454,0.08352494702875252,0.03514324066332105,0.026534322261271913,0.04879548794140681,0.004334841005982029,0.02812637911830777,0.0,0.0,0.015797438844245334,0.0,0.011806155865071414,1.0 diff --git a/activitysim/examples/prototype_semcog/configs/joint_tour_scheduling.yaml b/activitysim/examples/prototype_semcog/configs/joint_tour_scheduling.yaml old mode 100755 new mode 100644 diff --git a/activitysim/examples/prototype_semcog/configs/logging.yaml b/activitysim/examples/prototype_semcog/configs/logging.yaml old mode 100755 new mode 100644 diff --git a/activitysim/examples/prototype_semcog/configs/tour_scheduling_joint.csv b/activitysim/examples/prototype_semcog/configs/tour_scheduling_joint.csv old mode 100755 new mode 100644 diff --git a/conda-environments/activitysim-dev-base.yml b/conda-environments/activitysim-dev-base.yml index ac061b6ea..1e63b621d 100644 --- a/conda-environments/activitysim-dev-base.yml +++ b/conda-environments/activitysim-dev-base.yml @@ -16,11 +16,11 @@ dependencies: - python=3.9 - pip - asv # for benchmarking -- black +- black >= 22.0,<23 - bump2version # for making a release - coveralls -- cytoolz >= 0.8.1 -- dask +- cytoolz = 0.12.* +- dask = 2023.3.* - descartes - filelock - fsspec @@ -30,44 +30,45 @@ dependencies: - ipykernel # so this env will appear in jupyter as a selection - isort - jupyterlab -- larch >= 5.5.8 +- larch = 5.7.* - matplotlib - myst-parser # allows markdown in sphinx - nbconvert - nbformat -- numba >= 0.55.2 +- numba = 0.56.* - numexpr -- numpy >= 1.16.1,<=1.21 +- numpy = 1.23.* - numpydoc -- openmatrix >= 0.3.4.1 -- orca >= 1.6 -- pandas >= 1.1.0 +- openmatrix = 0.3.* +- orca = 1.8 +- pandas = 1.4.* +- platformdirs = 3.2.* - pre-commit -- psutil >= 4.1 -- pyarrow >= 2.0 +- psutil = 5.9.* +- pyarrow = 11.* - pycodestyle -- pydantic +- pydantic = 1.10.* - pydata-sphinx-theme -- pyinstrument -- pypyr +- pyinstrument = 4.4 +- pypyr = 5.8.* - pytables >=3.5.1,<3.7 -- pytest +- pytest = 7.2.* - pytest-cov - pytest-regressions -- pyyaml >= 5.1 -- requests >= 2.7 -- rich +- pyyaml = 6.* +- requests = 2.28.* +- rich = 13.3.* - ruby # required for benchmarking pre-commit hooks - setuptools_scm -- scikit-learn >= 1.1 +- scikit-learn = 1.2.* - simwrapper > 1.7 - snakeviz # for profiling -- sphinx -- sphinx_rtd_theme -- sphinx-argparse -- xarray >= 0.21 +- sphinx = 6.1.* +- sphinx_rtd_theme = 1.2.* +- sphinx-argparse = 0.4.* +- xarray = 2023.2.* - xmle -- zarr +- zarr = 2.14.* - pip: - autodoc_pydantic diff --git a/conda-environments/activitysim-dev.yml b/conda-environments/activitysim-dev.yml index 40e03ec10..cac073df6 100644 --- a/conda-environments/activitysim-dev.yml +++ b/conda-environments/activitysim-dev.yml @@ -12,11 +12,11 @@ dependencies: - python=3.9 - pip - asv # for benchmarking -- black +- black >= 22.0,<23 - bump2version # for making a release - coveralls -- cytoolz >= 0.8.1 -- dask +- cytoolz = 0.12.* +- dask = 2023.3.* - descartes - filelock - fsspec @@ -26,45 +26,46 @@ dependencies: - ipykernel # so this env will appear in jupyter as a selection - isort - jupyterlab -- larch >= 5.5.8 +- larch = 5.7.* - matplotlib - myst-parser # allows markdown in sphinx - nbconvert - nbformat -- numba >= 0.56.4 +- numba = 0.56.* - numexpr -- numpy >= 1.16.1 +- numpy = 1.23.* - numpydoc -- openmatrix >= 0.3.4.1 -- orca >= 1.6 -- pandas >= 1.1.0 +- openmatrix = 0.3.* +- orca = 1.8 +- pandas = 1.4.* +- platformdirs = 3.2.* - pre-commit -- psutil >= 4.1 -- pyarrow >= 2.0 +- psutil = 5.9.* +- pyarrow = 11.* - pycodestyle -- pydantic +- pydantic = 1.10.* - pydata-sphinx-theme -- pyinstrument -- pypyr +- pyinstrument = 4.4 +- pypyr = 5.8.* - pytables >=3.5.1,<3.7 -- pytest +- pytest = 7.2.* - pytest-cov - pytest-regressions -- pyyaml >= 5.1 -- requests >= 2.7 -- rich +- pyyaml = 6.* +- requests = 2.28.* +- rich = 13.3.* - ruby # required for benchmarking pre-commit hooks - setuptools_scm -- scikit-learn >= 1.1 +- scikit-learn = 1.2.* - sharrow >= 2.5.2 - simwrapper > 1.7 - snakeviz # for profiling -- sphinx -- sphinx_rtd_theme -- sphinx-argparse -- xarray >= 0.21 +- sphinx = 6.1.* +- sphinx_rtd_theme = 1.2.* +- sphinx-argparse = 0.4.* +- xarray = 2023.2.* - xmle -- zarr +- zarr = 2.14.* - pip: - autodoc_pydantic diff --git a/conda-environments/docbuild.yml b/conda-environments/docbuild.yml index 782eff73d..879338d1c 100644 --- a/conda-environments/docbuild.yml +++ b/conda-environments/docbuild.yml @@ -12,7 +12,7 @@ channels: dependencies: - python=3.9 - pip -- black +- black >= 22.0,<23 - bump2version - coveralls - cytoolz >= 0.8.1 diff --git a/conda-environments/github-actions-tests.yml b/conda-environments/github-actions-tests.yml index f94ca7130..28d6c51f8 100644 --- a/conda-environments/github-actions-tests.yml +++ b/conda-environments/github-actions-tests.yml @@ -7,28 +7,29 @@ channels: - conda-forge dependencies: - pip -- black +- black >= 22.0,<23 - coveralls -- cytoolz >= 0.8.1 +- cytoolz = 0.12.* +- dask = 2023.3.* - isort - nbmake -- numba >= 0.56.4 -- numpy >= 1.16.1 -- openmatrix >= 0.3.4.1 -- orca >= 1.6 -- pandas >= 1.1.0 -- psutil >= 4.1 -- pyarrow >= 2.0 -- pypyr >= 5.3 +- numba = 0.56.* +- numpy = 1.23.* +- openmatrix = 0.3.* +- orca = 1.8 +- pandas = 1.4.* +- platformdirs = 3.2.* +- psutil = 5.9.* +- pyarrow = 11.* +- pypyr = 5.8.* - pytables >= 3.5.1,<3.7 # orca's constraint -- pytest +- pytest = 7.2.* - pytest-cov - pytest-regressions -- pyyaml >= 5.1 -- requests >= 2.7 -- scikit-learn >= 1.1 +- pyyaml = 6.* +- requests = 2.28.* +- scikit-learn = 1.2.* - sharrow >= 2.5.2 - simwrapper > 1.7 -- scikit-learn >= 1.1.1 -- xarray >= 0.21 -- zarr +- xarray = 2023.2.* +- zarr = 2.14.* diff --git a/docs/examples.rst b/docs/examples.rst index add56f8b3..0b9634d28 100644 --- a/docs/examples.rst +++ b/docs/examples.rst @@ -290,7 +290,7 @@ After the frequency and time-of-day for work and school tours are determined, th next major model component relates to joint household travel. This component produces a number of joint tours by travel purpose for the entire household, travel party composition in terms of adults and children, and then defines the participation of each household -member in each joint household tour. It is followed by choice of destination and time-ofday. +member in each joint household tour. It is followed by choice of destination and time-of-day. The next stage relates to maintenance and discretionary tours that are modeled at the individual person level. The models include tour frequency, choice of destination and time @@ -513,7 +513,6 @@ Configuration This section has been moved to :ref:`configuration`. - .. _sub-model-spec-files: Sub-Model Specification Files diff --git a/docs/gettingstarted.rst b/docs/gettingstarted.rst index e3eee6088..69ed9392d 100644 --- a/docs/gettingstarted.rst +++ b/docs/gettingstarted.rst @@ -24,7 +24,7 @@ installs a variety of things on your system, and it is quite likely to be flagge Windows, anti-virus, or institutional IT policies as "unusual" software, which may require special treatment to actually install and use. -Download the installer from GitHub `here `__. It is strongly recommended to choose the option to install "for me only", as this should not require administrator privileges on your machine. Pay attention to the *complete path* of the installation location. You will need to know @@ -190,8 +190,14 @@ ActivitySim includes a :ref:`cli` for creating examples and running the model. To setup and run the primary example (see :ref:`examples`), do the following: * Open a command prompt -* Activate the conda environment with ActivitySim installed (i.e. ``conda activate asim``) -* Type ``activitysim create -e prototype_mtc -d test_prototype_mtc`` to copy the very small prototype_mtc example to a new test_prototype_mtc directory +* If you installed ActivitySim using conda environments, activate the conda + environment with ActivitySim installed (i.e. ``conda activate asim``) +* Or, if you used the :ref:`pre-packaged installer`, + replace all the commands below that call ``activitysim ...`` with the complete + path to your installed location, which is probably something + like ``c:\programdata\activitysim\scripts\activitysim.exe``. +* Type ``activitysim create -e prototype_mtc -d test_prototype_mtc`` to copy + the very small prototype_mtc example to a new test_prototype_mtc directory * Change to the test_prototype_mtc directory * Type ``activitysim run -c configs -o output -d data`` to run the example * Review the outputs in the output directory diff --git a/docs/models.rst b/docs/models.rst index ef79a38cd..d7249a353 100644 --- a/docs/models.rst +++ b/docs/models.rst @@ -1211,8 +1211,8 @@ Core Table: ``trips`` | Result Field: ``purpose, destination`` | Skims Keys: ``o .. _trip_scheduling: -Trip Scheduling (Probablistic) ------------------------------- +Trip Scheduling (Probabilistic) +------------------------------- For each trip, assign a departure hour based on an input lookup table of percents by tour purpose, direction (inbound/outbound), tour hour, and trip index. @@ -1232,6 +1232,41 @@ The trip scheduling model does not use mode choice logsums. Alternatives: Available time periods in the tour window (i.e. tour start and end period). When processing stops on work tours, the available time periods is constrained by the at-work subtour start and end period as well. +In order to avoid trip failing, a new probabilistic trip scheduling mode was developed named "relative". +When setting the _scheduling_mode_ option to relative, trips are scheduled relative to the previously scheduled trips. +The first trip still departs when the tour starts and for every subsequent trip, the choices are selected with respect to +the previous trip depart time. Inbound trips are no longer handled in reverse order. The key to this relative mode is to +index the probabilities based on how much time is remaining on the tour. For tours that include subtours, the time remaining will +be based on the subtour start time for outbound trips and will resume again for inbound trips after the subtour ends. +By indexing the probabilities based on time remaining and scheduling relative to the previous trip, scheduling trips in relative +mode will not fail. Note also that relative scheduling mode requires the use of logic +version 2 (see warning about logic versions, below). + +An example of trip scheduling in relative mode is included in the :ref:`prototype_mwcog` example. In this example, trip +scheduling probabilities are indexed by the following columns: + * periods_left_min: the minimum bin for the number of time periods left on the tour. + * periods_left_max: the maximum bin for the number of time periods left on the tour. This is the same as periods_left_min until the final time period bin. + * outbound: whether the trip occurs on the outbound leg of a tour. + * tour_purpose_grouped: Tour purpose grouped into mandatory and non-mandatory categories + * half_tour_stops_remaining_grouped: The number of stops remaining on the half tour with the categories of 0 and 1+ +Each of these variables are listed as merge columns in the trip_scheduling.yaml file and are declared in the trip scheduling preprocessor. +The variables above attempt to balance the statistics available for probability creation with the amount of segmentation of trip characteristics. + +.. warning:: + + Earlier versions of ActivitySim contained a logic error in this model, whereby + the earliest departure time for inbound legs was bounded by the maximum outbound + departure time, even if there was a scheduling failure for one or more outbound + leg departures and that bound was NA. For continuity, this process has been + retained in this ActivitySim component as *logic_version* 1, and it remains the + default process if the user does not explicitly specify a logic version in the + model settings yaml file. The revised logic includes bounding inbound legs only + when the maximum outbound departure time is well defined. This version of the + model can be used by explicitly setting `logic_version: 2` (or greater) in the + model settings yaml file. It is strongly recommended that all new model + development efforts use logic version 2; a future version of ActivitySim may + make this the default for this component, and/or remove logic version 1 entirely. + The main interface to the trip scheduling model is the :py:func:`~activitysim.abm.models.trip_scheduling.trip_scheduling` function. This function is registered as an Inject step in the example Pipeline. diff --git a/setup.cfg b/setup.cfg index cb3b41388..b2736a99a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -29,7 +29,7 @@ install_requires = numpy >= 1.16.1 openmatrix >= 0.3.4.1 orca >= 1.6 - pandas >= 1.1.0 + pandas >= 1.4, <2 psutil >= 4.1 pyarrow >= 2.0 pypyr >= 5.3 diff --git a/test/auto_ownership/.gitkeep b/test/auto_ownership/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/test/auto_ownership/configs/annotate_households.csv b/test/auto_ownership/configs/annotate_households.csv new file mode 100644 index 000000000..ad2c67bab --- /dev/null +++ b/test/auto_ownership/configs/annotate_households.csv @@ -0,0 +1,19 @@ +Description,Target,Expression +#,, annotate households table after import +,_PERSON_COUNT,"lambda query, persons, households: persons.query(query).groupby('household_id').size().reindex(households.index).fillna(0).astype(np.int8)" +number of non_workers,num_non_workers,households.hhsize - households.num_workers +number of drivers,num_drivers,"_PERSON_COUNT('16 <= age', persons, households)" +num_adults,num_adults,"_PERSON_COUNT('adult', persons, households)" +num_children,num_children,"_PERSON_COUNT('~adult', persons, households)" +num_young_children,num_young_children,"_PERSON_COUNT('age <= 5', persons, households)" +num_children_6_to_15,num_children_6_to_15,"_PERSON_COUNT('6 <= age <= 15', persons, households)" +num_children_16_to_17,num_children_16_to_17,"_PERSON_COUNT('16 <= age <= 17', persons, households)" +num_college_age,num_college_age,"_PERSON_COUNT('18 <= age <= 24', persons, households)" +# get definition from travel model two +num_young_adults,num_young_adults,"_PERSON_COUNT('18 <= age <= 24', persons, households)" +num_young_retirees,num_young_retirees,"_PERSON_COUNT('65 <= age <= 79', persons, households)" +num_old_retirees,num_old_retirees,"_PERSON_COUNT('80 <= age', persons, households)" +num_persons_18_to_35,num_persons_18_to_35,"_PERSON_COUNT('18 <= age <= 35', persons, households)" +num_persons_65_plus,num_persons_65_plus,"_PERSON_COUNT('65 <= age', persons, households)" +num_highschool_graduates,num_highschool_graduates,"_PERSON_COUNT('9 <= education_attainment', persons, households)" +#mobility av share, mobility_av_share, setting('mobility_av_share') diff --git a/test/auto_ownership/configs/annotate_landuse.csv b/test/auto_ownership/configs/annotate_landuse.csv new file mode 100644 index 000000000..65237c0ad --- /dev/null +++ b/test/auto_ownership/configs/annotate_landuse.csv @@ -0,0 +1,6 @@ +Description,Target,Expression +#,, annotate landuse table after import +household_density,household_density,land_use.TOTHH / land_use.TOTACRE +employment_density,employment_density,land_use.TOTEMP / land_use.TOTACRE +population_density,population_density,land_use.TOTPOP / land_use.TOTACRE +density_index,density_index,(household_density *employment_density) / (household_density + employment_density).clip(lower=1) \ No newline at end of file diff --git a/test/auto_ownership/configs/annotate_persons.csv b/test/auto_ownership/configs/annotate_persons.csv new file mode 100644 index 000000000..d52946719 --- /dev/null +++ b/test/auto_ownership/configs/annotate_persons.csv @@ -0,0 +1,40 @@ +Description,Target,Expression +#,, annotate persons table after import +age_16_to_19,age_16_to_19,"persons.age.between(16, 19)" +age_16_p,age_16_p,persons.age >= 16 +adult,adult,persons.age >= 18 +male,male,persons.sex == 1 +female,female,persons.sex == 2 +# TODO add ptype annotation +#,ptype, +#presence of non_worker other than self in household,has_non_worker,"other_than(persons.household_id, persons.ptype == PTYPE_NONWORK)" +#presence of retiree other than self in household,has_retiree,"other_than(persons.household_id, persons.ptype == PTYPE_RETIRED)" +#presence of preschooler other than self in household,has_preschool_kid,"other_than(persons.household_id, persons.ptype == PTYPE_PRESCHOOL)" +#presence of driving_kid other than self in household,has_driving_kid,"other_than(persons.household_id, persons.ptype == PTYPE_DRIVING)" +#presence of school_kid other than self in household,has_school_kid,"other_than(persons.household_id, persons.ptype == PTYPE_SCHOOL)" +#presence of full_time worker other than self in household (independent of person type),has_full_time,"other_than(persons.household_id, persons.pemploy==PEMPLOY_FULL)" +#presence of part_time worker other than self in household (independent of person type),has_part_time,"other_than(persons.household_id, persons.pemploy==PEMPLOY_PART)" +#presence of university student other than self in household,has_university,"other_than(persons.household_id, persons.ptype == PTYPE_UNIVERSITY)" +#student_is_employed,student_is_employed,"(persons.ptype.isin([PTYPE_UNIVERSITY, PTYPE_DRIVING]) & persons.pemploy.isin([PEMPLOY_FULL, PEMPLOY_PART]))" +#nonstudent_to_school,nonstudent_to_school,"(persons.ptype.isin([PTYPE_FULL, PTYPE_PART, PTYPE_NONWORK, PTYPE_RETIRED]) & persons.pstudent.isin([PSTUDENT_GRADE_OR_HIGH, PSTUDENT_UNIVERSITY]))" +#,, +#,, FIXME - if person is a university student but has school age student category value then reset student category value +#,pstudent,"persons.pstudent.where(persons.ptype!=PTYPE_UNIVERSITY, PSTUDENT_UNIVERSITY)" +#,, FIXME if person is a student of any kind but has full-time employment status then reset student category value to non-student +#,pstudent,"pstudent.where(persons.ptype!=PTYPE_FULL, PSTUDENT_NOT)" +#,, FIXME if student category is non-student and employment is student then reset student category value to student +#,pstudent,"pstudent.where((persons.ptype!=PTYPE_DRIVING) & (persons.ptype!=PTYPE_SCHOOL), PSTUDENT_GRADE_OR_HIGH)" +#,, +#is_student,is_student,"pstudent.isin([PSTUDENT_GRADE_OR_HIGH, PSTUDENT_UNIVERSITY])" +#preschool age can go to preschool,is_student,"is_student.where(persons.age > GRADE_SCHOOL_MIN_AGE, True)" +#preschool age can go to preschool,pstudent,"pstudent.where(persons.age > GRADE_SCHOOL_MIN_AGE, PSTUDENT_GRADE_OR_HIGH)" +#is_gradeschool,is_gradeschool,(pstudent == PSTUDENT_GRADE_OR_HIGH) & (persons.age <= GRADE_SCHOOL_MAX_AGE) +#is_highschool,is_highschool,(pstudent == PSTUDENT_GRADE_OR_HIGH) & (persons.age > GRADE_SCHOOL_MAX_AGE) +#is_university,is_university,pstudent == PSTUDENT_UNIVERSITY +#school_segment gradeschool,school_segment,"np.where(is_gradeschool, SCHOOL_SEGMENT_GRADE, SCHOOL_SEGMENT_NONE)" +#school_segment highschool,school_segment,"np.where(is_highschool, SCHOOL_SEGMENT_HIGH, school_segment)" +#school_segment university,school_segment,"np.where(is_university, SCHOOL_SEGMENT_UNIV, school_segment).astype(np.int8)" +#,, +#is_worker,is_worker,"persons.pemploy.isin([PEMPLOY_FULL, PEMPLOY_PART])" +#,, +home_zone_id,home_zone_id,"reindex(households.home_zone_id, persons.household_id)" diff --git a/test/auto_ownership/configs/annotate_persons_after_hh.csv b/test/auto_ownership/configs/annotate_persons_after_hh.csv new file mode 100644 index 000000000..0dfa16be6 --- /dev/null +++ b/test/auto_ownership/configs/annotate_persons_after_hh.csv @@ -0,0 +1,5 @@ +Description,Target,Expression +#,, annotate persons table after annotate_households +#,, adults get full hh_value_of_time and children get 60% +,_hh_vot,"reindex(households.hh_value_of_time, persons.household_id)" +,value_of_time,"_hh_vot.where(persons.age>=18, _hh_vot * 0.667)" \ No newline at end of file diff --git a/test/auto_ownership/configs/auto_ownership.csv b/test/auto_ownership/configs/auto_ownership.csv new file mode 100644 index 000000000..4b8abdfa1 --- /dev/null +++ b/test/auto_ownership/configs/auto_ownership.csv @@ -0,0 +1,61 @@ +Label,Description,Expression,0_CARS,1_CAR_1CV,1_CAR_1AV,2_CARS_2CV,2_CARS_2AV,2_CARS_1CV1AV,3_CARS_3CV,3_CARS_3AV,3_CARS_2CV1AV,3_CARS_1CV2AV,4_CARS_4CV +,Boolean indicating that household is in SF county,"@np.where(df.county_id == ID_SAN_FRANCISCO, 1, 0)",coef_boolean_indicating_that_household_is_in_sf_county_0_CARS,,,,,,,,,, +,alternative specific constant for 1 driver household,@df.num_drivers==1,coef_alternative_specific_constant_for_1_driver_household_0_CARS,,,coef_alternative_specific_constant_for_1_driver_household_2_CARS_2CV,coef_alternative_specific_constant_for_1_driver_household_2_CARS_2AV,coef_alternative_specific_constant_for_1_driver_household_2_CARS_1CV1AV,coef_alternative_specific_constant_for_1_driver_household_3_CARS_3CV,coef_alternative_specific_constant_for_1_driver_household_3_CARS_3AV,coef_alternative_specific_constant_for_1_driver_household_3_CARS_2CV1AV,coef_alternative_specific_constant_for_1_driver_household_3_CARS_1CV2AV,coef_alternative_specific_constant_for_1_driver_household_4_CARS_4CV +,alternative specific constant for 2 driver household,@df.num_drivers==2,coef_alternative_specific_constant_for_2_driver_household_0_CARS,coef_alternative_specific_constant_for_2_driver_household_1_CAR_1CV,coef_alternative_specific_constant_for_2_driver_household_1_CAR_1AV,,,,coef_alternative_specific_constant_for_2_driver_household_3_CARS_3CV,coef_alternative_specific_constant_for_2_driver_household_3_CARS_3AV,coef_alternative_specific_constant_for_2_driver_household_3_CARS_2CV1AV,coef_alternative_specific_constant_for_2_driver_household_3_CARS_1CV2AV,coef_alternative_specific_constant_for_2_driver_household_4_CARS_4CV +,alternative specific constant for 3 driver household,@df.num_drivers==3,coef_alternative_specific_constant_for_3_driver_household_0_CARS,coef_alternative_specific_constant_for_3_driver_household_1_CAR_1CV,coef_alternative_specific_constant_for_3_driver_household_1_CAR_1AV,coef_alternative_specific_constant_for_3_driver_household_2_CARS_2CV,coef_alternative_specific_constant_for_3_driver_household_2_CARS_2AV,coef_alternative_specific_constant_for_3_driver_household_2_CARS_1CV1AV,,,,,coef_alternative_specific_constant_for_3_driver_household_4_CARS_4CV +,alternative specific constant for 4+ driver household,@df.num_drivers>=4,coef_alternative_specific_constant_for_4_driver_household_0_CARS,coef_alternative_specific_constant_for_4_driver_household_1_CAR_1CV,coef_alternative_specific_constant_for_4_driver_household_1_CAR_1AV,coef_alternative_specific_constant_for_4_driver_household_2_CARS_2CV,coef_alternative_specific_constant_for_4_driver_household_2_CARS_2AV,coef_alternative_specific_constant_for_4_driver_household_2_CARS_1CV1AV,coef_alternative_specific_constant_for_4_driver_household_3_CARS_3CV,coef_alternative_specific_constant_for_4_driver_household_3_CARS_3AV,coef_alternative_specific_constant_for_4_driver_household_3_CARS_2CV1AV,coef_alternative_specific_constant_for_4_driver_household_3_CARS_1CV2AV, +,workers to drivers ratio for 1 driver household,"@np.where(df.num_drivers > 0, (df.num_drivers==1) * (df.num_workers/df.num_drivers), 0)",coef_workers_to_drivers_ratio_for_1_driver_household_0_CARS,,,coef_workers_to_drivers_ratio_for_1_driver_household_2_CARS_2CV,coef_workers_to_drivers_ratio_for_1_driver_household_2_CARS_2AV,coef_workers_to_drivers_ratio_for_1_driver_household_2_CARS_1CV1AV,coef_workers_to_drivers_ratio_for_1_driver_household_3_CARS_3CV,coef_workers_to_drivers_ratio_for_1_driver_household_3_CARS_3AV,coef_workers_to_drivers_ratio_for_1_driver_household_3_CARS_2CV1AV,coef_workers_to_drivers_ratio_for_1_driver_household_3_CARS_1CV2AV,coef_workers_to_drivers_ratio_for_1_driver_household_4_CARS_4CV +,workers to drivers ratio for 2 driver household,"@np.where(df.num_drivers > 0, (df.num_drivers==2) * (df.num_workers/df.num_drivers), 0)",coef_workers_to_drivers_ratio_for_2_driver_household_0_CARS,coef_workers_to_drivers_ratio_for_2_driver_household_1_CAR_1CV,coef_workers_to_drivers_ratio_for_2_driver_household_1_CAR_1AV,,,,coef_workers_to_drivers_ratio_for_2_driver_household_3_CARS_3CV,coef_workers_to_drivers_ratio_for_2_driver_household_3_CARS_3AV,coef_workers_to_drivers_ratio_for_2_driver_household_3_CARS_2CV1AV,coef_workers_to_drivers_ratio_for_2_driver_household_3_CARS_1CV2AV,coef_workers_to_drivers_ratio_for_2_driver_household_4_CARS_4CV +,workers to drivers ratio for 3 driver household,"@np.where(df.num_drivers > 0, (df.num_drivers==3) * (df.num_workers/df.num_drivers), 0)",coef_workers_to_drivers_ratio_for_3_driver_household_0_CARS,coef_workers_to_drivers_ratio_for_3_driver_household_1_CAR_1CV,coef_workers_to_drivers_ratio_for_3_driver_household_1_CAR_1AV,coef_workers_to_drivers_ratio_for_3_driver_household_2_CARS_2CV,coef_workers_to_drivers_ratio_for_3_driver_household_2_CARS_2AV,coef_workers_to_drivers_ratio_for_3_driver_household_2_CARS_1CV1AV,,,,,coef_workers_to_drivers_ratio_for_3_driver_household_4_CARS_4CV +,workers to drivers ratio for 4+ driver household,"@np.where(df.num_drivers > 0, (df.num_drivers>=4) * (df.num_workers/df.num_drivers), 0)",coef_workers_to_drivers_ratio_for_4_driver_household_0_CARS,coef_workers_to_drivers_ratio_for_4_driver_household_1_CAR_1CV,coef_workers_to_drivers_ratio_for_4_driver_household_1_CAR_1AV,coef_workers_to_drivers_ratio_for_4_driver_household_2_CARS_2CV,coef_workers_to_drivers_ratio_for_4_driver_household_2_CARS_2AV,coef_workers_to_drivers_ratio_for_4_driver_household_2_CARS_1CV1AV,coef_workers_to_drivers_ratio_for_4_driver_household_3_CARS_3CV,coef_workers_to_drivers_ratio_for_4_driver_household_3_CARS_3AV,coef_workers_to_drivers_ratio_for_4_driver_household_3_CARS_2CV1AV,coef_workers_to_drivers_ratio_for_4_driver_household_3_CARS_1CV2AV, +,young adults to drivers ratio for 1 driver household,"@np.where(df.num_drivers > 0, (df.num_drivers==1) * (df.num_young_adults/df.num_drivers), 0)",coef_young_adults_to_drivers_ratio_for_1_driver_household_0_CARS,,,,,,,,,, +,young adults to drivers ratio for 2 driver household,"@np.where(df.num_drivers > 0, (df.num_drivers==2) * (df.num_young_adults/df.num_drivers), 0)",coef_young_adults_to_drivers_ratio_for_2_driver_household_0_CARS,coef_young_adults_to_drivers_ratio_for_2_driver_household_1_CAR_1CV,coef_young_adults_to_drivers_ratio_for_2_driver_household_1_CAR_1AV,,,,,,,, +,young adults to drivers ratio for 3 driver household,"@np.where(df.num_drivers > 0, (df.num_drivers==3) * (df.num_young_adults/df.num_drivers), 0)",coef_young_adults_to_drivers_ratio_for_3_driver_household_0_CARS,coef_young_adults_to_drivers_ratio_for_3_driver_household_1_CAR_1CV,coef_young_adults_to_drivers_ratio_for_3_driver_household_1_CAR_1AV,coef_young_adults_to_drivers_ratio_for_3_driver_household_2_CARS_2CV,coef_young_adults_to_drivers_ratio_for_3_driver_household_2_CARS_2AV,coef_young_adults_to_drivers_ratio_for_3_driver_household_2_CARS_1CV1AV,,,,, +,young adults to drivers ratio for 4+ driver household,"@np.where(df.num_drivers > 0, (df.num_drivers>=4) * (df.num_young_adults/df.num_drivers), 0)",coef_young_adults_to_drivers_ratio_for_4_driver_household_0_CARS,coef_young_adults_to_drivers_ratio_for_4_driver_household_1_CAR_1CV,coef_young_adults_to_drivers_ratio_for_4_driver_household_1_CAR_1AV,coef_young_adults_to_drivers_ratio_for_4_driver_household_2_CARS_2CV,coef_young_adults_to_drivers_ratio_for_4_driver_household_2_CARS_2AV,coef_young_adults_to_drivers_ratio_for_4_driver_household_2_CARS_1CV1AV,coef_young_adults_to_drivers_ratio_for_4_driver_household_3_CARS_3CV,coef_young_adults_to_drivers_ratio_for_4_driver_household_3_CARS_3AV,coef_young_adults_to_drivers_ratio_for_4_driver_household_3_CARS_2CV1AV,coef_young_adults_to_drivers_ratio_for_4_driver_household_3_CARS_1CV2AV, +,school children to drivers ratio for 1 driver household,"@np.where(df.num_drivers > 0, (df.num_drivers==1) * (df.num_children_6_to_15/df.num_drivers), 0)",coef_school_children_to_drivers_ratio_for_1_driver_household_0_CARS,,,coef_school_children_to_drivers_ratio_for_1_driver_household_2_CARS_2CV,coef_school_children_to_drivers_ratio_for_1_driver_household_2_CARS_2AV,coef_school_children_to_drivers_ratio_for_1_driver_household_2_CARS_1CV1AV,coef_school_children_to_drivers_ratio_for_1_driver_household_3_CARS_3CV,coef_school_children_to_drivers_ratio_for_1_driver_household_3_CARS_3AV,coef_school_children_to_drivers_ratio_for_1_driver_household_3_CARS_2CV1AV,coef_school_children_to_drivers_ratio_for_1_driver_household_3_CARS_1CV2AV,coef_school_children_to_drivers_ratio_for_1_driver_household_4_CARS_4CV +,school children to drivers ratio for 2 driver household,"@np.where(df.num_drivers > 0, (df.num_drivers==2) * (df.num_children_6_to_15/df.num_drivers), 0)",coef_school_children_to_drivers_ratio_for_2_driver_household_0_CARS,coef_school_children_to_drivers_ratio_for_2_driver_household_1_CAR_1CV,coef_school_children_to_drivers_ratio_for_2_driver_household_1_CAR_1AV,,,,coef_school_children_to_drivers_ratio_for_2_driver_household_3_CARS_3CV,coef_school_children_to_drivers_ratio_for_2_driver_household_3_CARS_3AV,coef_school_children_to_drivers_ratio_for_2_driver_household_3_CARS_2CV1AV,coef_school_children_to_drivers_ratio_for_2_driver_household_3_CARS_1CV2AV,coef_school_children_to_drivers_ratio_for_2_driver_household_4_CARS_4CV +,school children to drivers ratio for 3 driver household,"@np.where(df.num_drivers > 0, (df.num_drivers==3) * (df.num_children_6_to_15/df.num_drivers), 0)",coef_school_children_to_drivers_ratio_for_3_driver_household_0_CARS,coef_school_children_to_drivers_ratio_for_3_driver_household_1_CAR_1CV,coef_school_children_to_drivers_ratio_for_3_driver_household_1_CAR_1AV,coef_school_children_to_drivers_ratio_for_3_driver_household_2_CARS_2CV,coef_school_children_to_drivers_ratio_for_3_driver_household_2_CARS_2AV,coef_school_children_to_drivers_ratio_for_3_driver_household_2_CARS_1CV1AV,,,,,coef_school_children_to_drivers_ratio_for_3_driver_household_4_CARS_4CV +,school children to drivers ratio for 4+ driver household,"@np.where(df.num_drivers > 0, (df.num_drivers>=4) * (df.num_children_6_to_15/df.num_drivers), 0)",coef_school_children_to_drivers_ratio_for_4_driver_household_0_CARS,coef_school_children_to_drivers_ratio_for_4_driver_household_1_CAR_1CV,coef_school_children_to_drivers_ratio_for_4_driver_household_1_CAR_1AV,coef_school_children_to_drivers_ratio_for_4_driver_household_2_CARS_2CV,coef_school_children_to_drivers_ratio_for_4_driver_household_2_CARS_2AV,coef_school_children_to_drivers_ratio_for_4_driver_household_2_CARS_1CV1AV,coef_school_children_to_drivers_ratio_for_4_driver_household_3_CARS_3CV,coef_school_children_to_drivers_ratio_for_4_driver_household_3_CARS_3AV,coef_school_children_to_drivers_ratio_for_4_driver_household_3_CARS_2CV1AV,coef_school_children_to_drivers_ratio_for_4_driver_household_3_CARS_1CV2AV, +,young retirees to drivers ratio for 1 driver household,"@np.where(df.num_drivers > 0, (df.num_drivers==1) * (df.num_young_retirees/df.num_drivers), 0)",coef_young_retirees_to_drivers_ratio_for_1_driver_household_0_CARS,,,coef_young_retirees_to_drivers_ratio_for_1_driver_household_2_CARS_2CV,coef_young_retirees_to_drivers_ratio_for_1_driver_household_2_CARS_2AV,coef_young_retirees_to_drivers_ratio_for_1_driver_household_2_CARS_1CV1AV,coef_young_retirees_to_drivers_ratio_for_1_driver_household_3_CARS_3CV,coef_young_retirees_to_drivers_ratio_for_1_driver_household_3_CARS_3AV,coef_young_retirees_to_drivers_ratio_for_1_driver_household_3_CARS_2CV1AV,coef_young_retirees_to_drivers_ratio_for_1_driver_household_3_CARS_1CV2AV,coef_young_retirees_to_drivers_ratio_for_1_driver_household_4_CARS_4CV +,young retirees to drivers ratio for 2 driver household,"@np.where(df.num_drivers > 0, (df.num_drivers==2) * (df.num_young_retirees/df.num_drivers), 0)",coef_young_retirees_to_drivers_ratio_for_2_driver_household_0_CARS,coef_young_retirees_to_drivers_ratio_for_2_driver_household_1_CAR_1CV,coef_young_retirees_to_drivers_ratio_for_2_driver_household_1_CAR_1AV,,,,coef_young_retirees_to_drivers_ratio_for_2_driver_household_3_CARS_3CV,coef_young_retirees_to_drivers_ratio_for_2_driver_household_3_CARS_3AV,coef_young_retirees_to_drivers_ratio_for_2_driver_household_3_CARS_2CV1AV,coef_young_retirees_to_drivers_ratio_for_2_driver_household_3_CARS_1CV2AV,coef_young_retirees_to_drivers_ratio_for_2_driver_household_4_CARS_4CV +,young retirees to drivers ratio for 3 driver household,"@np.where(df.num_drivers > 0, (df.num_drivers==3) * (df.num_young_retirees/df.num_drivers), 0)",coef_young_retirees_to_drivers_ratio_for_3_driver_household_0_CARS,coef_young_retirees_to_drivers_ratio_for_3_driver_household_1_CAR_1CV,coef_young_retirees_to_drivers_ratio_for_3_driver_household_1_CAR_1AV,coef_young_retirees_to_drivers_ratio_for_3_driver_household_2_CARS_2CV,coef_young_retirees_to_drivers_ratio_for_3_driver_household_2_CARS_2AV,coef_young_retirees_to_drivers_ratio_for_3_driver_household_2_CARS_1CV1AV,,,,,coef_young_retirees_to_drivers_ratio_for_3_driver_household_4_CARS_4CV +,young retirees to drivers ratio for 4+ driver household,"@np.where(df.num_drivers > 0, (df.num_drivers>=4) * (df.num_young_retirees/df.num_drivers), 0)",coef_young_retirees_to_drivers_ratio_for_4_driver_household_0_CARS,coef_young_retirees_to_drivers_ratio_for_4_driver_household_1_CAR_1CV,coef_young_retirees_to_drivers_ratio_for_4_driver_household_1_CAR_1AV,coef_young_retirees_to_drivers_ratio_for_4_driver_household_2_CARS_2CV,coef_young_retirees_to_drivers_ratio_for_4_driver_household_2_CARS_2AV,coef_young_retirees_to_drivers_ratio_for_4_driver_household_2_CARS_1CV1AV,coef_young_retirees_to_drivers_ratio_for_4_driver_household_3_CARS_3CV,coef_young_retirees_to_drivers_ratio_for_4_driver_household_3_CARS_3AV,coef_young_retirees_to_drivers_ratio_for_4_driver_household_3_CARS_2CV1AV,coef_young_retirees_to_drivers_ratio_for_4_driver_household_3_CARS_1CV2AV, +,old retirees to drivers ratio for 1 driver household,"@np.where(df.num_drivers > 0, (df.num_drivers==1) * (df.num_old_retirees/df.num_drivers), 0)",coef_old_retirees_to_drivers_ratio_for_1_driver_household_0_CARS,,,coef_old_retirees_to_drivers_ratio_for_1_driver_household_2_CARS_2CV,coef_old_retirees_to_drivers_ratio_for_1_driver_household_2_CARS_2AV,coef_old_retirees_to_drivers_ratio_for_1_driver_household_2_CARS_1CV1AV,coef_old_retirees_to_drivers_ratio_for_1_driver_household_3_CARS_3CV,coef_old_retirees_to_drivers_ratio_for_1_driver_household_3_CARS_3AV,coef_old_retirees_to_drivers_ratio_for_1_driver_household_3_CARS_2CV1AV,coef_old_retirees_to_drivers_ratio_for_1_driver_household_3_CARS_1CV2AV,coef_old_retirees_to_drivers_ratio_for_1_driver_household_4_CARS_4CV +,old retirees to drivers ratio for 2 driver household,"@np.where(df.num_drivers > 0, (df.num_drivers==2) * (df.num_old_retirees/df.num_drivers), 0)",coef_old_retirees_to_drivers_ratio_for_2_driver_household_0_CARS,coef_old_retirees_to_drivers_ratio_for_2_driver_household_1_CAR_1CV,coef_old_retirees_to_drivers_ratio_for_2_driver_household_1_CAR_1AV,,,,coef_old_retirees_to_drivers_ratio_for_2_driver_household_3_CARS_3CV,coef_old_retirees_to_drivers_ratio_for_2_driver_household_3_CARS_3AV,coef_old_retirees_to_drivers_ratio_for_2_driver_household_3_CARS_2CV1AV,coef_old_retirees_to_drivers_ratio_for_2_driver_household_3_CARS_1CV2AV,coef_old_retirees_to_drivers_ratio_for_2_driver_household_4_CARS_4CV +,old retirees to drivers ratio for 3 driver household,"@np.where(df.num_drivers > 0, (df.num_drivers==3) * (df.num_old_retirees/df.num_drivers), 0)",coef_old_retirees_to_drivers_ratio_for_3_driver_household_0_CARS,coef_old_retirees_to_drivers_ratio_for_3_driver_household_1_CAR_1CV,coef_old_retirees_to_drivers_ratio_for_3_driver_household_1_CAR_1AV,coef_old_retirees_to_drivers_ratio_for_3_driver_household_2_CARS_2CV,coef_old_retirees_to_drivers_ratio_for_3_driver_household_2_CARS_2AV,coef_old_retirees_to_drivers_ratio_for_3_driver_household_2_CARS_1CV1AV,,,,,coef_old_retirees_to_drivers_ratio_for_3_driver_household_4_CARS_4CV +,old retirees to drivers ratio for 4+ driver household,"@np.where(df.num_drivers > 0, (df.num_drivers>=4) * (df.num_old_retirees/df.num_drivers), 0)",coef_old_retirees_to_drivers_ratio_for_4_driver_household_0_CARS,coef_old_retirees_to_drivers_ratio_for_4_driver_household_1_CAR_1CV,coef_old_retirees_to_drivers_ratio_for_4_driver_household_1_CAR_1AV,coef_old_retirees_to_drivers_ratio_for_4_driver_household_2_CARS_2CV,coef_old_retirees_to_drivers_ratio_for_4_driver_household_2_CARS_2AV,coef_old_retirees_to_drivers_ratio_for_4_driver_household_2_CARS_1CV1AV,coef_old_retirees_to_drivers_ratio_for_4_driver_household_3_CARS_3CV,coef_old_retirees_to_drivers_ratio_for_4_driver_household_3_CARS_3AV,coef_old_retirees_to_drivers_ratio_for_4_driver_household_3_CARS_2CV1AV,coef_old_retirees_to_drivers_ratio_for_4_driver_household_3_CARS_1CV2AV, +,household income <30k,@(df.income<30000),coef_household_income_30k_0_CARS,coef_household_income_30k_1_CAR_1CV,coef_household_income_30k_1_CAR_1AV,,,,coef_household_income_30k_3_CARS_3CV,coef_household_income_30k_3_CARS_3AV,coef_household_income_30k_3_CARS_2CV1AV,coef_household_income_30k_3_CARS_1CV2AV,coef_household_income_30k_4_CARS_4CV +,household income 30-60k,@((df.income>=30000) & (df.income<60000)),coef_household_income_3060k_0_CARS,coef_household_income_3060k_1_CAR_1CV,coef_household_income_3060k_1_CAR_1AV,,,,coef_household_income_3060k_3_CARS_3CV,coef_household_income_3060k_3_CARS_3AV,coef_household_income_3060k_3_CARS_2CV1AV,coef_household_income_3060k_3_CARS_1CV2AV,coef_household_income_3060k_4_CARS_4CV +,household income 100k+,@(df.income>=100000),coef_household_income_100k_0_CARS,coef_household_income_100k_1_CAR_1CV,coef_household_income_100k_1_CAR_1AV,,,,coef_household_income_100k_3_CARS_3CV,coef_household_income_100k_3_CARS_3AV,coef_household_income_100k_3_CARS_2CV1AV,coef_household_income_100k_3_CARS_1CV2AV,coef_household_income_100k_4_CARS_4CV +,low educational level for 1 driver household,@((df.num_drivers==1) & (df.num_highschool_graduates==0)),coef_low_educational_level_for_1_driver_household_0_CARS,,,,,,coef_low_educational_level_for_1_driver_household_3_CARS_3CV,coef_low_educational_level_for_1_driver_household_3_CARS_3AV,coef_low_educational_level_for_1_driver_household_3_CARS_2CV1AV,coef_low_educational_level_for_1_driver_household_3_CARS_1CV2AV,coef_low_educational_level_for_1_driver_household_4_CARS_4CV +,low educational level for 2 driver household,@((df.num_drivers==2) & (df.num_highschool_graduates==0)),coef_low_educational_level_for_2_driver_household_0_CARS,coef_low_educational_level_for_2_driver_household_1_CAR_1CV,coef_low_educational_level_for_2_driver_household_1_CAR_1AV,,,,coef_low_educational_level_for_2_driver_household_3_CARS_3CV,coef_low_educational_level_for_2_driver_household_3_CARS_3AV,coef_low_educational_level_for_2_driver_household_3_CARS_2CV1AV,coef_low_educational_level_for_2_driver_household_3_CARS_1CV2AV,coef_low_educational_level_for_2_driver_household_4_CARS_4CV +,low educational level for 3 driver household,@((df.num_drivers==3) & (df.num_highschool_graduates==0)),coef_low_educational_level_for_3_driver_household_0_CARS,coef_low_educational_level_for_3_driver_household_1_CAR_1CV,coef_low_educational_level_for_3_driver_household_1_CAR_1AV,,,,,,,,coef_low_educational_level_for_3_driver_household_4_CARS_4CV +,low educational level for 4+ driver household,@((df.num_drivers>=4) & (df.num_highschool_graduates==0)),coef_low_educational_level_for_4_driver_household_0_CARS,coef_low_educational_level_for_4_driver_household_1_CAR_1CV,coef_low_educational_level_for_4_driver_household_1_CAR_1AV,,,,coef_low_educational_level_for_4_driver_household_3_CARS_3CV,coef_low_educational_level_for_4_driver_household_3_CARS_3AV,coef_low_educational_level_for_4_driver_household_3_CARS_2CV1AV,coef_low_educational_level_for_4_driver_household_3_CARS_1CV2AV, +,detached single family house,@df.building_size == 2,coef_detached_single_family_house_0_CARS,coef_detached_single_family_house_1_CAR_1CV,coef_detached_single_family_house_1_CAR_1AV,,,,coef_detached_single_family_house_3_CARS_3CV,coef_detached_single_family_house_3_CARS_3AV,coef_detached_single_family_house_3_CARS_2CV1AV,coef_detached_single_family_house_3_CARS_1CV2AV,coef_detached_single_family_house_4_CARS_4CV +,Intersection density,TotInt/502,,,,,,,coef_intersection_density_3_CARS_3CV,coef_intersection_density_3_CARS_3AV,coef_intersection_density_3_CARS_2CV1AV,coef_intersection_density_3_CARS_1CV2AV,coef_intersection_density_4_CARS_4CV +,Population density,PopDen,coef_population_density_0_CARS,coef_population_density_1_CAR_1CV,coef_population_density_1_CAR_1AV,,,,,,,, +,Retail density,RetEmpDen,coef_retail_density_0_CARS,coef_retail_density_1_CAR_1CV,coef_retail_density_1_CAR_1AV,,,,,,,, +,Non-motorized zonal accessbility,@df.nonmandatory_nm_accessibility,coef_nonmotorized_zonal_accessbility_0_CARS,coef_nonmotorized_zonal_accessbility_1_CAR_1CV,coef_nonmotorized_zonal_accessbility_1_CAR_1AV,,,,coef_nonmotorized_zonal_accessbility_3_CARS_3CV,coef_nonmotorized_zonal_accessbility_3_CARS_3AV,coef_nonmotorized_zonal_accessbility_3_CARS_2CV1AV,coef_nonmotorized_zonal_accessbility_3_CARS_1CV2AV,coef_nonmotorized_zonal_accessbility_4_CARS_4CV +,auto-transit zonal accessibility,@(df.nonmandatory_auto_accessibility - df.nonmandatory_transit_accessibility),coef_autotransit_zonal_accessibility_0_CARS,coef_autotransit_zonal_accessibility_1_CAR_1CV,coef_autotransit_zonal_accessibility_1_CAR_1AV,,,,,,,, +#,worker mandatory tour auto dependency,@((setting('use_accessibility') == 1) & (##workersAutoDependency##)),coef_worker_mandatory_tour_auto_dependency_0_CARS,coef_worker_mandatory_tour_auto_dependency_1_CAR_1CV,coef_worker_mandatory_tour_auto_dependency_1_CAR_1AV,,,,coef_worker_mandatory_tour_auto_dependency_3_CARS_3CV,coef_worker_mandatory_tour_auto_dependency_3_CARS_3AV,coef_worker_mandatory_tour_auto_dependency_3_CARS_2CV1AV,coef_worker_mandatory_tour_auto_dependency_3_CARS_1CV2AV,coef_worker_mandatory_tour_auto_dependency_4_CARS_4CV +#,student mandatory tour auto dependency,@((setting('use_accessibility') == 1) & (##studentsAutoDependency##)),coef_student_mandatory_tour_auto_dependency_0_CARS,coef_student_mandatory_tour_auto_dependency_1_CAR_1CV,coef_student_mandatory_tour_auto_dependency_1_CAR_1AV,,,,,,,, +#,worker mandatory tour rail mode portion,@((setting('use_accessibility') == 1) & (##workersRailProportion##)),coef_worker_mandatory_tour_rail_mode_portion_0_CARS,coef_worker_mandatory_tour_rail_mode_portion_1_CAR_1CV,coef_worker_mandatory_tour_rail_mode_portion_1_CAR_1AV,,,,coef_worker_mandatory_tour_rail_mode_portion_3_CARS_3CV,coef_worker_mandatory_tour_rail_mode_portion_3_CARS_3AV,coef_worker_mandatory_tour_rail_mode_portion_3_CARS_2CV1AV,coef_worker_mandatory_tour_rail_mode_portion_3_CARS_1CV2AV,coef_worker_mandatory_tour_rail_mode_portion_4_CARS_4CV +#,student mandatory tour rail mode portion,@((setting('use_accessibility') == 1) & (##studentsRailProportion##)),coef_student_mandatory_tour_rail_mode_portion_0_CARS,coef_student_mandatory_tour_rail_mode_portion_1_CAR_1CV,coef_student_mandatory_tour_rail_mode_portion_1_CAR_1AV,,,,,,,, +,ASC adjustment for non-GQ PRE-AO,@df.hh_unit_type==1,,coef_asc_adjustment_for_nongq_preao_1_CAR_1CV,coef_asc_adjustment_for_nongq_preao_1_CAR_1AV,coef_asc_adjustment_for_nongq_preao_2_CARS_2CV,coef_asc_adjustment_for_nongq_preao_2_CARS_2AV,coef_asc_adjustment_for_nongq_preao_2_CARS_1CV1AV,coef_asc_adjustment_for_nongq_preao_3_CARS_3CV,coef_asc_adjustment_for_nongq_preao_3_CARS_3AV,coef_asc_adjustment_for_nongq_preao_3_CARS_2CV1AV,coef_asc_adjustment_for_nongq_preao_3_CARS_1CV2AV,coef_asc_adjustment_for_nongq_preao_4_CARS_4CV +,ASC adjustment for non-GQ POST-AO,@((df.hh_unit_type==1) & (setting('use_accessibility') == 1)),,coef_asc_adjustment_for_nongq_postao_1_CAR_1CV,coef_asc_adjustment_for_nongq_postao_1_CAR_1AV,coef_asc_adjustment_for_nongq_postao_2_CARS_2CV,coef_asc_adjustment_for_nongq_postao_2_CARS_2AV,coef_asc_adjustment_for_nongq_postao_2_CARS_1CV1AV,coef_asc_adjustment_for_nongq_postao_3_CARS_3CV,coef_asc_adjustment_for_nongq_postao_3_CARS_3AV,coef_asc_adjustment_for_nongq_postao_3_CARS_2CV1AV,coef_asc_adjustment_for_nongq_postao_3_CARS_1CV2AV,coef_asc_adjustment_for_nongq_postao_4_CARS_4CV +,adjustment for 2 workers in non-family 0-car household,@((df.hh_type>3) & (df.num_workers==2)),coef_adjustment_for_2_workers_in_nonfamily_0car_household_0_CARS,,,,,,,,,, +,adjustment for 3 workers in non-family 0-car household,@((df.hh_type>3) & (df.num_workers==3)),coef_adjustment_for_3_workers_in_nonfamily_0car_household_0_CARS,,,,,,,,,, +,adjustment for 4+ workers in non-family 0-car household,@((df.hh_type>3) & (df.num_workers>3)),coef_adjustment_for_4_workers_in_nonfamily_0car_household_0_CARS,,,,,,,,,, +,adjustment for 4+ workers in family 0-car household,@((df.hh_type<=3) & (df.num_workers>3)),coef_adjustment_for_4_workers_in_family_0car_household_0_CARS,,,,,,,,,, +,TM2 Round 2 ASC adjustment for 1 workers in 0-car household,@df.num_workers==1,coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_0_CARS,,,coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_2_CARS_2CV,coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_2_CARS_2AV,coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_2_CARS_1CV1AV,coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_3_CARS_3CV,coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_3_CARS_3AV,coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_3_CARS_2CV1AV,coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_3_CARS_1CV2AV,coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_4_CARS_4CV +,TM2 Round 2 ASC adjustment for 2 workers in 0-car household,@df.num_workers==2,coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_0_CARS,,,coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_2_CARS_2CV,coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_2_CARS_2AV,coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_2_CARS_1CV1AV,coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_3_CARS_3CV,coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_3_CARS_3AV,coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_3_CARS_2CV1AV,coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_3_CARS_1CV2AV,coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_4_CARS_4CV +,TM2 Round 2 ASC adjustment for 3+ workers in 0-car household,@df.num_workers>=3,coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_0_CARS,,,coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_2_CARS_2CV,coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_2_CARS_2AV,coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_2_CARS_1CV1AV,coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_3_CARS_3CV,coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_3_CARS_3AV,coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_3_CARS_2CV1AV,coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_3_CARS_1CV2AV,coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_4_CARS_4CV +,TM2 Round 2 ASC adjustment for non-GQ PRE-AO,@df.hh_unit_type==1,coef_tm2_round_2_asc_adjustment_for_nongq_preao_0_CARS,,,coef_tm2_round_2_asc_adjustment_for_nongq_preao_2_CARS_2CV,coef_tm2_round_2_asc_adjustment_for_nongq_preao_2_CARS_2AV,coef_tm2_round_2_asc_adjustment_for_nongq_preao_2_CARS_1CV1AV,coef_tm2_round_2_asc_adjustment_for_nongq_preao_3_CARS_3CV,coef_tm2_round_2_asc_adjustment_for_nongq_preao_3_CARS_3AV,coef_tm2_round_2_asc_adjustment_for_nongq_preao_3_CARS_2CV1AV,coef_tm2_round_2_asc_adjustment_for_nongq_preao_3_CARS_1CV2AV,coef_tm2_round_2_asc_adjustment_for_nongq_preao_4_CARS_4CV +,TM2 Round 2 ASC adjustment for non-GQ POST-AO,@((df.hh_unit_type==1) & (setting('use_accessibility') == 1)),coef_tm2_round_2_asc_adjustment_for_nongq_postao_0_CARS,,,coef_tm2_round_2_asc_adjustment_for_nongq_postao_2_CARS_2CV,coef_tm2_round_2_asc_adjustment_for_nongq_postao_2_CARS_2AV,coef_tm2_round_2_asc_adjustment_for_nongq_postao_2_CARS_1CV1AV,coef_tm2_round_2_asc_adjustment_for_nongq_postao_3_CARS_3CV,coef_tm2_round_2_asc_adjustment_for_nongq_postao_3_CARS_3AV,coef_tm2_round_2_asc_adjustment_for_nongq_postao_3_CARS_2CV1AV,coef_tm2_round_2_asc_adjustment_for_nongq_postao_3_CARS_1CV2AV,coef_tm2_round_2_asc_adjustment_for_nongq_postao_4_CARS_4CV +,AV ASC - Household Income under $50k,@df.income<50000,,,coef_av_asc__household_income_under_50k_1_CAR_1AV,,coef_av_asc__household_income_under_50k_2_CARS_2AV,coef_av_asc__household_income_under_50k_2_CARS_1CV1AV,,coef_av_asc__household_income_under_50k_3_CARS_3AV,coef_av_asc__household_income_under_50k_3_CARS_2CV1AV,coef_av_asc__household_income_under_50k_3_CARS_1CV2AV, +,AV ASC - Household Income 100k+,@df.income>=100000,,,coef_av_asc__household_income_100k_1_CAR_1AV,,coef_av_asc__household_income_100k_2_CARS_2AV,coef_av_asc__household_income_100k_2_CARS_1CV1AV,,coef_av_asc__household_income_100k_3_CARS_3AV,coef_av_asc__household_income_100k_3_CARS_2CV1AV,coef_av_asc__household_income_100k_3_CARS_1CV2AV, +,AV ASC - Young household,@(df.num_persons_18_to_35>=df.num_persons_65_plus),,,coef_av_asc__young_household_1_CAR_1AV,,coef_av_asc__young_household_2_CARS_2AV,coef_av_asc__young_household_2_CARS_1CV1AV,,coef_av_asc__young_household_3_CARS_3AV,coef_av_asc__young_household_3_CARS_2CV1AV,coef_av_asc__young_household_3_CARS_1CV2AV, +,AV ASC - Old household,@(df.num_persons_18_to_35 < df.num_persons_65_plus),,,coef_av_asc__old_household_1_CAR_1AV,,coef_av_asc__old_household_2_CARS_2AV,coef_av_asc__old_household_2_CARS_1CV1AV,,coef_av_asc__old_household_3_CARS_3AV,coef_av_asc__old_household_3_CARS_2CV1AV,coef_av_asc__old_household_3_CARS_1CV2AV, +#,"AV Coeff Per Hour of travel by auto for work, summed across all workers in household",@((setting('use_accessibility') == 1) & (##@workAutoTime##)),,,"coef_av__coeff_per_hour_of_travel_by_auto_for_work,_summed_across_all_workers_in_household_1_CAR_1AV",,"coef_av__coeff_per_hour_of_travel_by_auto_for_work,_summed_across_all_workers_in_household_2_CARS_2AV","coef_av__coeff_per_hour_of_travel_by_auto_for_work,_summed_across_all_workers_in_household_2_CARS_1CV1AV",,"coef_av__coeff_per_hour_of_travel_by_auto_for_work,_summed_across_all_workers_in_household_3_CARS_3AV","coef_av__coeff_per_hour_of_travel_by_auto_for_work,_summed_across_all_workers_in_household_3_CARS_2CV1AV","coef_av__coeff_per_hour_of_travel_by_auto_for_work,_summed_across_all_workers_in_household_3_CARS_1CV2AV", +,AV ASC - 100% AV Share,@setting('mobility_av_share')==1.0,,coef_unavailable,,coef_unavailable,,coef_unavailable,coef_unavailable,,coef_unavailable,coef_unavailable,coef_unavailable +,AV ASC - 0% AV Share,@setting('mobility_av_share')==0,,,coef_unavailable,,coef_unavailable,coef_unavailable,,coef_unavailable,coef_unavailable,coef_unavailable, diff --git a/test/auto_ownership/configs/auto_ownership.yaml b/test/auto_ownership/configs/auto_ownership.yaml new file mode 100644 index 000000000..2cdde0464 --- /dev/null +++ b/test/auto_ownership/configs/auto_ownership.yaml @@ -0,0 +1,53 @@ + +SPEC: auto_ownership.csv +COEFFICIENTS: auto_ownership_coefficients.csv + +LOGIT_TYPE: NL + +NESTS: + name: root + coefficient: 1 + alternatives: + - name: own no car + coefficient: 0.668 + alternatives: + - name: zero car + coefficient: 0.3 + alternatives: + - 0_CARS + - name: own cars + coefficient: 0.668 + alternatives: + - name: one car + coefficient: 0.3 + alternatives: + - 1_CAR_1CV + - 1_CAR_1AV + - name: two cars + coefficient: 0.3 + alternatives: + - 2_CARS_2CV + - 2_CARS_2AV + - 2_CARS_1CV1AV + - name: three cars + coefficient: 0.3 + alternatives: + - 3_CARS_3CV + - 3_CARS_3AV + - 3_CARS_2CV1AV + - 3_CARS_1CV2AV + - name: four cars + coefficient: 0.3 + alternatives: + - 4_CARS_4CV + +CONSTANTS: + ID_SAN_FRANCISCO: 1 + ID_SAN_MATEO: 2 + ID_SANTA_CLARA: 3 + ID_ALAMEDA: 4 + ID_CONTRA_COSTA: 5 + ID_SOLANO: 6 + ID_NAPA: 7 + ID_SONOMA: 8 + ID_MARIN: 9 diff --git a/test/auto_ownership/configs/auto_ownership_coefficients.csv b/test/auto_ownership/configs/auto_ownership_coefficients.csv new file mode 100644 index 000000000..1d88703f1 --- /dev/null +++ b/test/auto_ownership/configs/auto_ownership_coefficients.csv @@ -0,0 +1,393 @@ +coefficient_name,value,constrain +coef_unavailable,-999,T +coef_boolean_indicating_that_household_is_in_sf_county_0_CARS,1.233276051,F +coef_alternative_specific_constant_for_1_driver_household_0_CARS,-1.920143842,F +coef_alternative_specific_constant_for_2_driver_household_0_CARS,-3.470781624,F +coef_alternative_specific_constant_for_3_driver_household_0_CARS,-3.329633459,F +coef_alternative_specific_constant_for_4_driver_household_0_CARS,-6.111494495,F +coef_workers_to_drivers_ratio_for_1_driver_household_0_CARS,-1.464256557,F +coef_workers_to_drivers_ratio_for_2_driver_household_0_CARS,-1.464256557,F +coef_workers_to_drivers_ratio_for_3_driver_household_0_CARS,-1.464256557,F +coef_workers_to_drivers_ratio_for_4_driver_household_0_CARS,-1.464256557,F +coef_young_adults_to_drivers_ratio_for_1_driver_household_0_CARS,-1.769767608,F +coef_young_adults_to_drivers_ratio_for_2_driver_household_0_CARS,-1.769767608,F +coef_young_adults_to_drivers_ratio_for_3_driver_household_0_CARS,-1.769767608,F +coef_young_adults_to_drivers_ratio_for_4_driver_household_0_CARS,-1.769767608,F +coef_school_children_to_drivers_ratio_for_1_driver_household_0_CARS,-0.346415088,F +coef_school_children_to_drivers_ratio_for_2_driver_household_0_CARS,-0.346415088,F +coef_school_children_to_drivers_ratio_for_3_driver_household_0_CARS,-0.346415088,F +coef_school_children_to_drivers_ratio_for_4_driver_household_0_CARS,-0.346415088,F +coef_young_retirees_to_drivers_ratio_for_1_driver_household_0_CARS,-0.38172487,F +coef_young_retirees_to_drivers_ratio_for_2_driver_household_0_CARS,-0.38172487,F +coef_young_retirees_to_drivers_ratio_for_3_driver_household_0_CARS,-0.38172487,F +coef_young_retirees_to_drivers_ratio_for_4_driver_household_0_CARS,-0.38172487,F +coef_old_retirees_to_drivers_ratio_for_1_driver_household_0_CARS,0.608700053,F +coef_old_retirees_to_drivers_ratio_for_2_driver_household_0_CARS,0.608700053,F +coef_old_retirees_to_drivers_ratio_for_3_driver_household_0_CARS,0.608700053,F +coef_old_retirees_to_drivers_ratio_for_4_driver_household_0_CARS,0.608700053,F +coef_household_income_30k_0_CARS,2.654926169,F +coef_household_income_3060k_0_CARS,0.918219369,F +coef_household_income_100k_0_CARS,-0.44306913,F +coef_low_educational_level_for_1_driver_household_0_CARS,0.767760942,F +coef_low_educational_level_for_2_driver_household_0_CARS,0.767760942,F +coef_low_educational_level_for_3_driver_household_0_CARS,0.767760942,F +coef_low_educational_level_for_4_driver_household_0_CARS,0.767760942,F +coef_detached_single_family_house_0_CARS,-1.774689947,F +coef_population_density_0_CARS,0.046206562,F +coef_retail_density_0_CARS,0.074563803,F +coef_nonmotorized_zonal_accessbility_0_CARS,0.060875253,F +coef_autotransit_zonal_accessibility_0_CARS,-0.200776981,F +coef_worker_mandatory_tour_auto_dependency_0_CARS,-0.16516642,F +coef_student_mandatory_tour_auto_dependency_0_CARS,-0.04422711,F +coef_worker_mandatory_tour_rail_mode_portion_0_CARS,0.171079447,F +coef_student_mandatory_tour_rail_mode_portion_0_CARS,0.26285636,F +coef_adjustment_for_2_workers_in_nonfamily_0car_household_0_CARS,0.725034403,F +coef_adjustment_for_3_workers_in_nonfamily_0car_household_0_CARS,1.194820674,F +coef_adjustment_for_4_workers_in_nonfamily_0car_household_0_CARS,2.844226409,F +coef_adjustment_for_4_workers_in_family_0car_household_0_CARS,2.116557339,F +coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_0_CARS,1.097234124,F +coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_0_CARS,0.893156568,F +coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_0_CARS,0.937133013,F +coef_tm2_round_2_asc_adjustment_for_nongq_preao_0_CARS,-1.511025686,F +coef_tm2_round_2_asc_adjustment_for_nongq_postao_0_CARS,-0.115788174,F +coef_alternative_specific_constant_for_2_driver_household_1_CAR_1CV,-2.20339718,F +coef_alternative_specific_constant_for_3_driver_household_1_CAR_1CV,-2.473061365,F +coef_alternative_specific_constant_for_4_driver_household_1_CAR_1CV,-3.983965837,F +coef_workers_to_drivers_ratio_for_2_driver_household_1_CAR_1CV,-0.407798013,F +coef_workers_to_drivers_ratio_for_3_driver_household_1_CAR_1CV,-0.407798013,F +coef_workers_to_drivers_ratio_for_4_driver_household_1_CAR_1CV,-0.407798013,F +coef_young_adults_to_drivers_ratio_for_2_driver_household_1_CAR_1CV,-0.598263093,F +coef_young_adults_to_drivers_ratio_for_3_driver_household_1_CAR_1CV,-0.598263093,F +coef_young_adults_to_drivers_ratio_for_4_driver_household_1_CAR_1CV,-0.598263093,F +coef_school_children_to_drivers_ratio_for_2_driver_household_1_CAR_1CV,-0.018572553,F +coef_school_children_to_drivers_ratio_for_3_driver_household_1_CAR_1CV,-0.018572553,F +coef_school_children_to_drivers_ratio_for_4_driver_household_1_CAR_1CV,-0.018572553,F +coef_young_retirees_to_drivers_ratio_for_2_driver_household_1_CAR_1CV,-0.19861915,F +coef_young_retirees_to_drivers_ratio_for_3_driver_household_1_CAR_1CV,-0.19861915,F +coef_young_retirees_to_drivers_ratio_for_4_driver_household_1_CAR_1CV,-0.19861915,F +coef_old_retirees_to_drivers_ratio_for_2_driver_household_1_CAR_1CV,0.232672708,F +coef_old_retirees_to_drivers_ratio_for_3_driver_household_1_CAR_1CV,0.232672708,F +coef_old_retirees_to_drivers_ratio_for_4_driver_household_1_CAR_1CV,0.232672708,F +coef_household_income_30k_1_CAR_1CV,0.632172646,F +coef_household_income_3060k_1_CAR_1CV,0.342605571,F +coef_household_income_100k_1_CAR_1CV,-0.44306913,F +coef_low_educational_level_for_2_driver_household_1_CAR_1CV,0.432294097,F +coef_low_educational_level_for_3_driver_household_1_CAR_1CV,0.432294097,F +coef_low_educational_level_for_4_driver_household_1_CAR_1CV,0.432294097,F +coef_detached_single_family_house_1_CAR_1CV,-0.528137281,F +coef_population_density_1_CAR_1CV,0.02268226,F +coef_retail_density_1_CAR_1CV,0.029544267,F +coef_nonmotorized_zonal_accessbility_1_CAR_1CV,0.039970159,F +coef_autotransit_zonal_accessibility_1_CAR_1CV,-0.009060243,F +coef_worker_mandatory_tour_auto_dependency_1_CAR_1CV,-0.16516642,F +coef_student_mandatory_tour_auto_dependency_1_CAR_1CV,-0.04422711,F +coef_worker_mandatory_tour_rail_mode_portion_1_CAR_1CV,0.171079447,F +coef_student_mandatory_tour_rail_mode_portion_1_CAR_1CV,0.26285636,F +coef_asc_adjustment_for_nongq_preao_1_CAR_1CV,0.04582774,F +coef_asc_adjustment_for_nongq_postao_1_CAR_1CV,-0.013942306,F +coef_alternative_specific_constant_for_2_driver_household_1_CAR_1AV,-2.20339718,F +coef_alternative_specific_constant_for_3_driver_household_1_CAR_1AV,-2.473061365,F +coef_alternative_specific_constant_for_4_driver_household_1_CAR_1AV,-3.983965837,F +coef_workers_to_drivers_ratio_for_2_driver_household_1_CAR_1AV,-0.407798013,F +coef_workers_to_drivers_ratio_for_3_driver_household_1_CAR_1AV,-0.407798013,F +coef_workers_to_drivers_ratio_for_4_driver_household_1_CAR_1AV,-0.407798013,F +coef_young_adults_to_drivers_ratio_for_2_driver_household_1_CAR_1AV,-0.598263093,F +coef_young_adults_to_drivers_ratio_for_3_driver_household_1_CAR_1AV,-0.598263093,F +coef_young_adults_to_drivers_ratio_for_4_driver_household_1_CAR_1AV,-0.598263093,F +coef_school_children_to_drivers_ratio_for_2_driver_household_1_CAR_1AV,-0.018572553,F +coef_school_children_to_drivers_ratio_for_3_driver_household_1_CAR_1AV,-0.018572553,F +coef_school_children_to_drivers_ratio_for_4_driver_household_1_CAR_1AV,-0.018572553,F +coef_young_retirees_to_drivers_ratio_for_2_driver_household_1_CAR_1AV,-0.19861915,F +coef_young_retirees_to_drivers_ratio_for_3_driver_household_1_CAR_1AV,-0.19861915,F +coef_young_retirees_to_drivers_ratio_for_4_driver_household_1_CAR_1AV,-0.19861915,F +coef_old_retirees_to_drivers_ratio_for_2_driver_household_1_CAR_1AV,0.232672708,F +coef_old_retirees_to_drivers_ratio_for_3_driver_household_1_CAR_1AV,0.232672708,F +coef_old_retirees_to_drivers_ratio_for_4_driver_household_1_CAR_1AV,0.232672708,F +coef_household_income_30k_1_CAR_1AV,0.632172646,F +coef_household_income_3060k_1_CAR_1AV,0.342605571,F +coef_household_income_100k_1_CAR_1AV,-0.44306913,F +coef_low_educational_level_for_2_driver_household_1_CAR_1AV,0.432294097,F +coef_low_educational_level_for_3_driver_household_1_CAR_1AV,0.432294097,F +coef_low_educational_level_for_4_driver_household_1_CAR_1AV,0.432294097,F +coef_detached_single_family_house_1_CAR_1AV,-0.528137281,F +coef_population_density_1_CAR_1AV,0.02268226,F +coef_retail_density_1_CAR_1AV,0.029544267,F +coef_nonmotorized_zonal_accessbility_1_CAR_1AV,0.039970159,F +coef_autotransit_zonal_accessibility_1_CAR_1AV,-0.009060243,F +coef_worker_mandatory_tour_auto_dependency_1_CAR_1AV,-0.16516642,F +coef_student_mandatory_tour_auto_dependency_1_CAR_1AV,-0.04422711,F +coef_worker_mandatory_tour_rail_mode_portion_1_CAR_1AV,0.171079447,F +coef_student_mandatory_tour_rail_mode_portion_1_CAR_1AV,0.26285636,F +coef_asc_adjustment_for_nongq_preao_1_CAR_1AV,0.04582774,F +coef_asc_adjustment_for_nongq_postao_1_CAR_1AV,-0.013942306,F +coef_av_asc__household_income_under_50k_1_CAR_1AV,-1,F +coef_av_asc__household_income_100k_1_CAR_1AV,1,F +coef_av_asc__young_household_1_CAR_1AV,0.5,F +coef_av_asc__old_household_1_CAR_1AV,-1,F +"coef_av__coeff_per_hour_of_travel_by_auto_for_work,_summed_across_all_workers_in_household_1_CAR_1AV",0.25,F +coef_alternative_specific_constant_for_1_driver_household_2_CARS_2CV,-0.934889684,F +coef_alternative_specific_constant_for_3_driver_household_2_CARS_2CV,-0.317496682,F +coef_alternative_specific_constant_for_4_driver_household_2_CARS_2CV,-0.909626603,F +coef_workers_to_drivers_ratio_for_1_driver_household_2_CARS_2CV,0.474996826,F +coef_workers_to_drivers_ratio_for_3_driver_household_2_CARS_2CV,-0.407798013,F +coef_workers_to_drivers_ratio_for_4_driver_household_2_CARS_2CV,-0.407798013,F +coef_young_adults_to_drivers_ratio_for_3_driver_household_2_CARS_2CV,-0.598263093,F +coef_young_adults_to_drivers_ratio_for_4_driver_household_2_CARS_2CV,-0.598263093,F +coef_school_children_to_drivers_ratio_for_1_driver_household_2_CARS_2CV,0.108758563,F +coef_school_children_to_drivers_ratio_for_3_driver_household_2_CARS_2CV,-0.018572553,F +coef_school_children_to_drivers_ratio_for_4_driver_household_2_CARS_2CV,-0.018572553,F +coef_young_retirees_to_drivers_ratio_for_1_driver_household_2_CARS_2CV,0.28676361,F +coef_young_retirees_to_drivers_ratio_for_3_driver_household_2_CARS_2CV,-0.19861915,F +coef_young_retirees_to_drivers_ratio_for_4_driver_household_2_CARS_2CV,-0.19861915,F +coef_old_retirees_to_drivers_ratio_for_1_driver_household_2_CARS_2CV,-0.901020484,F +coef_old_retirees_to_drivers_ratio_for_3_driver_household_2_CARS_2CV,0.232672708,F +coef_old_retirees_to_drivers_ratio_for_4_driver_household_2_CARS_2CV,0.232672708,F +coef_asc_adjustment_for_nongq_preao_2_CARS_2CV,-1.602468896,F +coef_asc_adjustment_for_nongq_postao_2_CARS_2CV,-0.132328921,F +coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_2_CARS_2CV,-0.151698573,F +coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_2_CARS_2CV,-0.17099367,F +coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_2_CARS_2CV,-0.553211417,F +coef_tm2_round_2_asc_adjustment_for_nongq_preao_2_CARS_2CV,0.723793144,F +coef_tm2_round_2_asc_adjustment_for_nongq_postao_2_CARS_2CV,0.16375467,F +coef_alternative_specific_constant_for_1_driver_household_2_CARS_2AV,-0.934889684,F +coef_alternative_specific_constant_for_3_driver_household_2_CARS_2AV,-0.317496682,F +coef_alternative_specific_constant_for_4_driver_household_2_CARS_2AV,-0.909626603,F +coef_workers_to_drivers_ratio_for_1_driver_household_2_CARS_2AV,0.474996826,F +coef_workers_to_drivers_ratio_for_3_driver_household_2_CARS_2AV,-0.407798013,F +coef_workers_to_drivers_ratio_for_4_driver_household_2_CARS_2AV,-0.407798013,F +coef_young_adults_to_drivers_ratio_for_3_driver_household_2_CARS_2AV,-0.598263093,F +coef_young_adults_to_drivers_ratio_for_4_driver_household_2_CARS_2AV,-0.598263093,F +coef_school_children_to_drivers_ratio_for_1_driver_household_2_CARS_2AV,0.108758563,F +coef_school_children_to_drivers_ratio_for_3_driver_household_2_CARS_2AV,-0.018572553,F +coef_school_children_to_drivers_ratio_for_4_driver_household_2_CARS_2AV,-0.018572553,F +coef_young_retirees_to_drivers_ratio_for_1_driver_household_2_CARS_2AV,0.28676361,F +coef_young_retirees_to_drivers_ratio_for_3_driver_household_2_CARS_2AV,-0.19861915,F +coef_young_retirees_to_drivers_ratio_for_4_driver_household_2_CARS_2AV,-0.19861915,F +coef_old_retirees_to_drivers_ratio_for_1_driver_household_2_CARS_2AV,-0.901020484,F +coef_old_retirees_to_drivers_ratio_for_3_driver_household_2_CARS_2AV,0.232672708,F +coef_old_retirees_to_drivers_ratio_for_4_driver_household_2_CARS_2AV,0.232672708,F +coef_asc_adjustment_for_nongq_preao_2_CARS_2AV,-1.602468896,F +coef_asc_adjustment_for_nongq_postao_2_CARS_2AV,-0.132328921,F +coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_2_CARS_2AV,-0.151698573,F +coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_2_CARS_2AV,-0.17099367,F +coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_2_CARS_2AV,-0.553211417,F +coef_tm2_round_2_asc_adjustment_for_nongq_preao_2_CARS_2AV,0.723793144,F +coef_tm2_round_2_asc_adjustment_for_nongq_postao_2_CARS_2AV,0.16375467,F +coef_av_asc__household_income_under_50k_2_CARS_2AV,-1,F +coef_av_asc__household_income_100k_2_CARS_2AV,1,F +coef_av_asc__young_household_2_CARS_2AV,0.5,F +coef_av_asc__old_household_2_CARS_2AV,-1,F +"coef_av__coeff_per_hour_of_travel_by_auto_for_work,_summed_across_all_workers_in_household_2_CARS_2AV",0.25,F +coef_alternative_specific_constant_for_1_driver_household_2_CARS_1CV1AV,-0.934889684,F +coef_alternative_specific_constant_for_3_driver_household_2_CARS_1CV1AV,-0.317496682,F +coef_alternative_specific_constant_for_4_driver_household_2_CARS_1CV1AV,-0.909626603,F +coef_workers_to_drivers_ratio_for_1_driver_household_2_CARS_1CV1AV,0.474996826,F +coef_workers_to_drivers_ratio_for_3_driver_household_2_CARS_1CV1AV,-0.407798013,F +coef_workers_to_drivers_ratio_for_4_driver_household_2_CARS_1CV1AV,-0.407798013,F +coef_young_adults_to_drivers_ratio_for_3_driver_household_2_CARS_1CV1AV,-0.598263093,F +coef_young_adults_to_drivers_ratio_for_4_driver_household_2_CARS_1CV1AV,-0.598263093,F +coef_school_children_to_drivers_ratio_for_1_driver_household_2_CARS_1CV1AV,0.108758563,F +coef_school_children_to_drivers_ratio_for_3_driver_household_2_CARS_1CV1AV,-0.018572553,F +coef_school_children_to_drivers_ratio_for_4_driver_household_2_CARS_1CV1AV,-0.018572553,F +coef_young_retirees_to_drivers_ratio_for_1_driver_household_2_CARS_1CV1AV,0.28676361,F +coef_young_retirees_to_drivers_ratio_for_3_driver_household_2_CARS_1CV1AV,-0.19861915,F +coef_young_retirees_to_drivers_ratio_for_4_driver_household_2_CARS_1CV1AV,-0.19861915,F +coef_old_retirees_to_drivers_ratio_for_1_driver_household_2_CARS_1CV1AV,-0.901020484,F +coef_old_retirees_to_drivers_ratio_for_3_driver_household_2_CARS_1CV1AV,0.232672708,F +coef_old_retirees_to_drivers_ratio_for_4_driver_household_2_CARS_1CV1AV,0.232672708,F +coef_asc_adjustment_for_nongq_preao_2_CARS_1CV1AV,-1.602468896,F +coef_asc_adjustment_for_nongq_postao_2_CARS_1CV1AV,-0.132328921,F +coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_2_CARS_1CV1AV,-0.151698573,F +coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_2_CARS_1CV1AV,-0.17099367,F +coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_2_CARS_1CV1AV,-0.553211417,F +coef_tm2_round_2_asc_adjustment_for_nongq_preao_2_CARS_1CV1AV,0.723793144,F +coef_tm2_round_2_asc_adjustment_for_nongq_postao_2_CARS_1CV1AV,0.16375467,F +coef_av_asc__household_income_under_50k_2_CARS_1CV1AV,-1,F +coef_av_asc__household_income_100k_2_CARS_1CV1AV,1,F +coef_av_asc__young_household_2_CARS_1CV1AV,0.5,F +coef_av_asc__old_household_2_CARS_1CV1AV,-1,F +"coef_av__coeff_per_hour_of_travel_by_auto_for_work,_summed_across_all_workers_in_household_2_CARS_1CV1AV",0.25,F +coef_alternative_specific_constant_for_1_driver_household_3_CARS_3CV,-1.904733531,F +coef_alternative_specific_constant_for_2_driver_household_3_CARS_3CV,-0.829354142,F +coef_alternative_specific_constant_for_4_driver_household_3_CARS_3CV,-0.524427892,F +coef_workers_to_drivers_ratio_for_1_driver_household_3_CARS_3CV,0.474996826,F +coef_workers_to_drivers_ratio_for_2_driver_household_3_CARS_3CV,0.474996826,F +coef_workers_to_drivers_ratio_for_4_driver_household_3_CARS_3CV,-0.407798013,F +coef_young_adults_to_drivers_ratio_for_4_driver_household_3_CARS_3CV,-0.598263093,F +coef_school_children_to_drivers_ratio_for_1_driver_household_3_CARS_3CV,0.108758563,F +coef_school_children_to_drivers_ratio_for_2_driver_household_3_CARS_3CV,0.108758563,F +coef_school_children_to_drivers_ratio_for_4_driver_household_3_CARS_3CV,-0.018572553,F +coef_young_retirees_to_drivers_ratio_for_1_driver_household_3_CARS_3CV,0.28676361,F +coef_young_retirees_to_drivers_ratio_for_2_driver_household_3_CARS_3CV,0.28676361,F +coef_young_retirees_to_drivers_ratio_for_4_driver_household_3_CARS_3CV,-0.19861915,F +coef_old_retirees_to_drivers_ratio_for_1_driver_household_3_CARS_3CV,-0.901020484,F +coef_old_retirees_to_drivers_ratio_for_2_driver_household_3_CARS_3CV,-0.901020484,F +coef_old_retirees_to_drivers_ratio_for_4_driver_household_3_CARS_3CV,0.232672708,F +coef_household_income_30k_3_CARS_3CV,-0.601152419,F +coef_household_income_3060k_3_CARS_3CV,-0.305680609,F +coef_household_income_100k_3_CARS_3CV,0.087029823,F +coef_low_educational_level_for_1_driver_household_3_CARS_3CV,-0.176660377,F +coef_low_educational_level_for_2_driver_household_3_CARS_3CV,-0.176660377,F +coef_low_educational_level_for_4_driver_household_3_CARS_3CV,0.432294097,F +coef_detached_single_family_house_3_CARS_3CV,0.427320086,F +coef_intersection_density_3_CARS_3CV,-0.326525635,F +coef_nonmotorized_zonal_accessbility_3_CARS_3CV,-0.052524462,F +coef_worker_mandatory_tour_auto_dependency_3_CARS_3CV,0.104064535,F +coef_worker_mandatory_tour_rail_mode_portion_3_CARS_3CV,-0.206713378,F +coef_asc_adjustment_for_nongq_preao_3_CARS_3CV,-2.169791463,F +coef_asc_adjustment_for_nongq_postao_3_CARS_3CV,-0.180285245,F +coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_3_CARS_3CV,-0.209786195,F +coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_3_CARS_3CV,-0.382492356,F +coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_3_CARS_3CV,0.065128979,F +coef_tm2_round_2_asc_adjustment_for_nongq_preao_3_CARS_3CV,0.617090781,F +coef_tm2_round_2_asc_adjustment_for_nongq_postao_3_CARS_3CV,0.222715484,F +coef_alternative_specific_constant_for_1_driver_household_3_CARS_3AV,-1.904733531,F +coef_alternative_specific_constant_for_2_driver_household_3_CARS_3AV,-0.829354142,F +coef_alternative_specific_constant_for_4_driver_household_3_CARS_3AV,-0.524427892,F +coef_workers_to_drivers_ratio_for_1_driver_household_3_CARS_3AV,0.474996826,F +coef_workers_to_drivers_ratio_for_2_driver_household_3_CARS_3AV,0.474996826,F +coef_workers_to_drivers_ratio_for_4_driver_household_3_CARS_3AV,-0.407798013,F +coef_young_adults_to_drivers_ratio_for_4_driver_household_3_CARS_3AV,-0.598263093,F +coef_school_children_to_drivers_ratio_for_1_driver_household_3_CARS_3AV,0.108758563,F +coef_school_children_to_drivers_ratio_for_2_driver_household_3_CARS_3AV,0.108758563,F +coef_school_children_to_drivers_ratio_for_4_driver_household_3_CARS_3AV,-0.018572553,F +coef_young_retirees_to_drivers_ratio_for_1_driver_household_3_CARS_3AV,0.28676361,F +coef_young_retirees_to_drivers_ratio_for_2_driver_household_3_CARS_3AV,0.28676361,F +coef_young_retirees_to_drivers_ratio_for_4_driver_household_3_CARS_3AV,-0.19861915,F +coef_old_retirees_to_drivers_ratio_for_1_driver_household_3_CARS_3AV,-0.901020484,F +coef_old_retirees_to_drivers_ratio_for_2_driver_household_3_CARS_3AV,-0.901020484,F +coef_old_retirees_to_drivers_ratio_for_4_driver_household_3_CARS_3AV,0.232672708,F +coef_household_income_30k_3_CARS_3AV,-0.601152419,F +coef_household_income_3060k_3_CARS_3AV,-0.305680609,F +coef_household_income_100k_3_CARS_3AV,0.087029823,F +coef_low_educational_level_for_1_driver_household_3_CARS_3AV,-0.176660377,F +coef_low_educational_level_for_2_driver_household_3_CARS_3AV,-0.176660377,F +coef_low_educational_level_for_4_driver_household_3_CARS_3AV,0.432294097,F +coef_detached_single_family_house_3_CARS_3AV,0.427320086,F +coef_intersection_density_3_CARS_3AV,-0.326525635,F +coef_nonmotorized_zonal_accessbility_3_CARS_3AV,-0.052524462,F +coef_worker_mandatory_tour_auto_dependency_3_CARS_3AV,0.104064535,F +coef_worker_mandatory_tour_rail_mode_portion_3_CARS_3AV,-0.206713378,F +coef_asc_adjustment_for_nongq_preao_3_CARS_3AV,-2.169791463,F +coef_asc_adjustment_for_nongq_postao_3_CARS_3AV,-0.180285245,F +coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_3_CARS_3AV,-0.209786195,F +coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_3_CARS_3AV,-0.382492356,F +coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_3_CARS_3AV,0.065128979,F +coef_tm2_round_2_asc_adjustment_for_nongq_preao_3_CARS_3AV,0.617090781,F +coef_tm2_round_2_asc_adjustment_for_nongq_postao_3_CARS_3AV,0.222715484,F +coef_av_asc__household_income_under_50k_3_CARS_3AV,-1,F +coef_av_asc__household_income_100k_3_CARS_3AV,1,F +coef_av_asc__young_household_3_CARS_3AV,0.5,F +coef_av_asc__old_household_3_CARS_3AV,-1,F +"coef_av__coeff_per_hour_of_travel_by_auto_for_work,_summed_across_all_workers_in_household_3_CARS_3AV",0.25,F +coef_alternative_specific_constant_for_1_driver_household_3_CARS_2CV1AV,-1.904733531,F +coef_alternative_specific_constant_for_2_driver_household_3_CARS_2CV1AV,-0.829354142,F +coef_alternative_specific_constant_for_4_driver_household_3_CARS_2CV1AV,-0.524427892,F +coef_workers_to_drivers_ratio_for_1_driver_household_3_CARS_2CV1AV,0.474996826,F +coef_workers_to_drivers_ratio_for_2_driver_household_3_CARS_2CV1AV,0.474996826,F +coef_workers_to_drivers_ratio_for_4_driver_household_3_CARS_2CV1AV,-0.407798013,F +coef_young_adults_to_drivers_ratio_for_4_driver_household_3_CARS_2CV1AV,-0.598263093,F +coef_school_children_to_drivers_ratio_for_1_driver_household_3_CARS_2CV1AV,0.108758563,F +coef_school_children_to_drivers_ratio_for_2_driver_household_3_CARS_2CV1AV,0.108758563,F +coef_school_children_to_drivers_ratio_for_4_driver_household_3_CARS_2CV1AV,-0.018572553,F +coef_young_retirees_to_drivers_ratio_for_1_driver_household_3_CARS_2CV1AV,0.28676361,F +coef_young_retirees_to_drivers_ratio_for_2_driver_household_3_CARS_2CV1AV,0.28676361,F +coef_young_retirees_to_drivers_ratio_for_4_driver_household_3_CARS_2CV1AV,-0.19861915,F +coef_old_retirees_to_drivers_ratio_for_1_driver_household_3_CARS_2CV1AV,-0.901020484,F +coef_old_retirees_to_drivers_ratio_for_2_driver_household_3_CARS_2CV1AV,-0.901020484,F +coef_old_retirees_to_drivers_ratio_for_4_driver_household_3_CARS_2CV1AV,0.232672708,F +coef_household_income_30k_3_CARS_2CV1AV,-0.601152419,F +coef_household_income_3060k_3_CARS_2CV1AV,-0.305680609,F +coef_household_income_100k_3_CARS_2CV1AV,0.087029823,F +coef_low_educational_level_for_1_driver_household_3_CARS_2CV1AV,-0.176660377,F +coef_low_educational_level_for_2_driver_household_3_CARS_2CV1AV,-0.176660377,F +coef_low_educational_level_for_4_driver_household_3_CARS_2CV1AV,0.432294097,F +coef_detached_single_family_house_3_CARS_2CV1AV,0.427320086,F +coef_intersection_density_3_CARS_2CV1AV,-0.326525635,F +coef_nonmotorized_zonal_accessbility_3_CARS_2CV1AV,-0.052524462,F +coef_worker_mandatory_tour_auto_dependency_3_CARS_2CV1AV,0.104064535,F +coef_worker_mandatory_tour_rail_mode_portion_3_CARS_2CV1AV,-0.206713378,F +coef_asc_adjustment_for_nongq_preao_3_CARS_2CV1AV,-2.169791463,F +coef_asc_adjustment_for_nongq_postao_3_CARS_2CV1AV,-0.180285245,F +coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_3_CARS_2CV1AV,-0.209786195,F +coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_3_CARS_2CV1AV,-0.382492356,F +coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_3_CARS_2CV1AV,0.065128979,F +coef_tm2_round_2_asc_adjustment_for_nongq_preao_3_CARS_2CV1AV,0.617090781,F +coef_tm2_round_2_asc_adjustment_for_nongq_postao_3_CARS_2CV1AV,0.222715484,F +coef_av_asc__household_income_under_50k_3_CARS_2CV1AV,-1,F +coef_av_asc__household_income_100k_3_CARS_2CV1AV,1,F +coef_av_asc__young_household_3_CARS_2CV1AV,0.5,F +coef_av_asc__old_household_3_CARS_2CV1AV,-1,F +"coef_av__coeff_per_hour_of_travel_by_auto_for_work,_summed_across_all_workers_in_household_3_CARS_2CV1AV",0.25,F +coef_alternative_specific_constant_for_1_driver_household_3_CARS_1CV2AV,-1.904733531,F +coef_alternative_specific_constant_for_2_driver_household_3_CARS_1CV2AV,-0.829354142,F +coef_alternative_specific_constant_for_4_driver_household_3_CARS_1CV2AV,-0.524427892,F +coef_workers_to_drivers_ratio_for_1_driver_household_3_CARS_1CV2AV,0.474996826,F +coef_workers_to_drivers_ratio_for_2_driver_household_3_CARS_1CV2AV,0.474996826,F +coef_workers_to_drivers_ratio_for_4_driver_household_3_CARS_1CV2AV,-0.407798013,F +coef_young_adults_to_drivers_ratio_for_4_driver_household_3_CARS_1CV2AV,-0.598263093,F +coef_school_children_to_drivers_ratio_for_1_driver_household_3_CARS_1CV2AV,0.108758563,F +coef_school_children_to_drivers_ratio_for_2_driver_household_3_CARS_1CV2AV,0.108758563,F +coef_school_children_to_drivers_ratio_for_4_driver_household_3_CARS_1CV2AV,-0.018572553,F +coef_young_retirees_to_drivers_ratio_for_1_driver_household_3_CARS_1CV2AV,0.28676361,F +coef_young_retirees_to_drivers_ratio_for_2_driver_household_3_CARS_1CV2AV,0.28676361,F +coef_young_retirees_to_drivers_ratio_for_4_driver_household_3_CARS_1CV2AV,-0.19861915,F +coef_old_retirees_to_drivers_ratio_for_1_driver_household_3_CARS_1CV2AV,-0.901020484,F +coef_old_retirees_to_drivers_ratio_for_2_driver_household_3_CARS_1CV2AV,-0.901020484,F +coef_old_retirees_to_drivers_ratio_for_4_driver_household_3_CARS_1CV2AV,0.232672708,F +coef_household_income_30k_3_CARS_1CV2AV,-0.601152419,F +coef_household_income_3060k_3_CARS_1CV2AV,-0.305680609,F +coef_household_income_100k_3_CARS_1CV2AV,0.087029823,F +coef_low_educational_level_for_1_driver_household_3_CARS_1CV2AV,-0.176660377,F +coef_low_educational_level_for_2_driver_household_3_CARS_1CV2AV,-0.176660377,F +coef_low_educational_level_for_4_driver_household_3_CARS_1CV2AV,0.432294097,F +coef_detached_single_family_house_3_CARS_1CV2AV,0.427320086,F +coef_intersection_density_3_CARS_1CV2AV,-0.326525635,F +coef_nonmotorized_zonal_accessbility_3_CARS_1CV2AV,-0.052524462,F +coef_worker_mandatory_tour_auto_dependency_3_CARS_1CV2AV,0.104064535,F +coef_worker_mandatory_tour_rail_mode_portion_3_CARS_1CV2AV,-0.206713378,F +coef_asc_adjustment_for_nongq_preao_3_CARS_1CV2AV,-2.169791463,F +coef_asc_adjustment_for_nongq_postao_3_CARS_1CV2AV,-0.180285245,F +coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_3_CARS_1CV2AV,-0.209786195,F +coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_3_CARS_1CV2AV,-0.382492356,F +coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_3_CARS_1CV2AV,0.065128979,F +coef_tm2_round_2_asc_adjustment_for_nongq_preao_3_CARS_1CV2AV,0.617090781,F +coef_tm2_round_2_asc_adjustment_for_nongq_postao_3_CARS_1CV2AV,0.222715484,F +coef_av_asc__household_income_under_50k_3_CARS_1CV2AV,-1,F +coef_av_asc__household_income_100k_3_CARS_1CV2AV,1,F +coef_av_asc__young_household_3_CARS_1CV2AV,0.5,F +coef_av_asc__old_household_3_CARS_1CV2AV,-1,F +"coef_av__coeff_per_hour_of_travel_by_auto_for_work,_summed_across_all_workers_in_household_3_CARS_1CV2AV",0.25,F +coef_alternative_specific_constant_for_1_driver_household_4_CARS_4CV,-2.488003709,F +coef_alternative_specific_constant_for_2_driver_household_4_CARS_4CV,-1.778311581,F +coef_alternative_specific_constant_for_3_driver_household_4_CARS_4CV,-0.533915593,F +coef_workers_to_drivers_ratio_for_1_driver_household_4_CARS_4CV,0.474996826,F +coef_workers_to_drivers_ratio_for_2_driver_household_4_CARS_4CV,0.474996826,F +coef_workers_to_drivers_ratio_for_3_driver_household_4_CARS_4CV,0.474996826,F +coef_school_children_to_drivers_ratio_for_1_driver_household_4_CARS_4CV,0.108758563,F +coef_school_children_to_drivers_ratio_for_2_driver_household_4_CARS_4CV,0.108758563,F +coef_school_children_to_drivers_ratio_for_3_driver_household_4_CARS_4CV,0.108758563,F +coef_young_retirees_to_drivers_ratio_for_1_driver_household_4_CARS_4CV,0.28676361,F +coef_young_retirees_to_drivers_ratio_for_2_driver_household_4_CARS_4CV,0.28676361,F +coef_young_retirees_to_drivers_ratio_for_3_driver_household_4_CARS_4CV,0.28676361,F +coef_old_retirees_to_drivers_ratio_for_1_driver_household_4_CARS_4CV,-0.901020484,F +coef_old_retirees_to_drivers_ratio_for_2_driver_household_4_CARS_4CV,-0.901020484,F +coef_old_retirees_to_drivers_ratio_for_3_driver_household_4_CARS_4CV,-0.901020484,F +coef_household_income_30k_4_CARS_4CV,-0.936061162,F +coef_household_income_3060k_4_CARS_4CV,-0.271548734,F +coef_household_income_100k_4_CARS_4CV,0.144123363,F +coef_low_educational_level_for_1_driver_household_4_CARS_4CV,-0.176660377,F +coef_low_educational_level_for_2_driver_household_4_CARS_4CV,-0.176660377,F +coef_low_educational_level_for_3_driver_household_4_CARS_4CV,-0.176660377,F +coef_detached_single_family_house_4_CARS_4CV,0.539511974,F +coef_intersection_density_4_CARS_4CV,-0.326525635,F +coef_nonmotorized_zonal_accessbility_4_CARS_4CV,-0.100612397,F +coef_worker_mandatory_tour_auto_dependency_4_CARS_4CV,0.104064535,F +coef_worker_mandatory_tour_rail_mode_portion_4_CARS_4CV,-0.206713378,F +coef_asc_adjustment_for_nongq_preao_4_CARS_4CV,-2.641133846,F +coef_asc_adjustment_for_nongq_postao_4_CARS_4CV,-0.186095557,F +coef_tm2_round_2_asc_adjustment_for_1_workers_in_0car_household_4_CARS_4CV,-0.308288035,F +coef_tm2_round_2_asc_adjustment_for_2_workers_in_0car_household_4_CARS_4CV,-0.551034746,F +coef_tm2_round_2_asc_adjustment_for_3_workers_in_0car_household_4_CARS_4CV,-0.048670057,F +coef_tm2_round_2_asc_adjustment_for_nongq_preao_4_CARS_4CV,0.69421287,F +coef_tm2_round_2_asc_adjustment_for_nongq_postao_4_CARS_4CV,0.2639107,F diff --git a/test/auto_ownership/configs/constants.yaml b/test/auto_ownership/configs/constants.yaml new file mode 100644 index 000000000..b0bd5a1f3 --- /dev/null +++ b/test/auto_ownership/configs/constants.yaml @@ -0,0 +1,68 @@ +## ActivitySim +## See full license in LICENSE.txt. + + +#HHT_NONE: 0 +#HHT_FAMILY_MARRIED: 1 +#HHT_FAMILY_MALE: 2 +#HHT_FAMILY_FEMALE: 3 +#HHT_NONFAMILY_MALE_ALONE: 4 +#HHT_NONFAMILY_MALE_NOTALONE: 5 +#HHT_NONFAMILY_FEMALE_ALONE: 6 +#HHT_NONFAMILY_FEMALE_NOTALONE: 7 + +# convenience for expression files +HHT_NONFAMILY: [4, 5, 6, 7] +HHT_FAMILY: [1, 2, 3] + +PSTUDENT_GRADE_OR_HIGH: 1 +PSTUDENT_UNIVERSITY: 2 +PSTUDENT_NOT: 3 + +GRADE_SCHOOL_MAX_AGE: 14 +GRADE_SCHOOL_MIN_AGE: 5 + +SCHOOL_SEGMENT_NONE: 0 +SCHOOL_SEGMENT_GRADE: 1 +SCHOOL_SEGMENT_HIGH: 2 +SCHOOL_SEGMENT_UNIV: 3 + +INCOME_SEGMENT_LOW: 1 +INCOME_SEGMENT_MED: 2 +INCOME_SEGMENT_HIGH: 3 +INCOME_SEGMENT_VERYHIGH: 4 + +PEMPLOY_FULL: 1 +PEMPLOY_PART: 2 +PEMPLOY_NOT: 3 +PEMPLOY_CHILD: 4 + +PTYPE_FULL: &ptype_full 1 +PTYPE_PART: &ptype_part 2 +PTYPE_UNIVERSITY: &ptype_university 3 +PTYPE_NONWORK: &ptype_nonwork 4 +PTYPE_RETIRED: &ptype_retired 5 +PTYPE_DRIVING: &ptype_driving 6 +PTYPE_SCHOOL: &ptype_school 7 +PTYPE_PRESCHOOL: &ptype_preschool 8 + +# these appear as column headers in non_mandatory_tour_frequency.csv +PTYPE_NAME: + *ptype_full: PTYPE_FULL + *ptype_part: PTYPE_PART + *ptype_university: PTYPE_UNIVERSITY + *ptype_nonwork: PTYPE_NONWORK + *ptype_retired: PTYPE_RETIRED + *ptype_driving: PTYPE_DRIVING + *ptype_school: PTYPE_SCHOOL + *ptype_preschool: PTYPE_PRESCHOOL + + +CDAP_ACTIVITY_MANDATORY: M +CDAP_ACTIVITY_NONMANDATORY: N +CDAP_ACTIVITY_HOME: H + +# Correction for transit skim expressions +# e.g. MTC transit skims (Cube TRANPLAN skims) use scaled ints and +# therefore need to be divided by the scale factor if used in expressions +TRANSIT_SCALE_FACTOR: 100 diff --git a/test/auto_ownership/configs/initialize_households.yaml b/test/auto_ownership/configs/initialize_households.yaml new file mode 100644 index 000000000..5d98a703d --- /dev/null +++ b/test/auto_ownership/configs/initialize_households.yaml @@ -0,0 +1,37 @@ +annotate_tables: + - tablename: persons + column_map: + HHID: household_id + PERID: person_id + AGEP: age + SEX: sex + SCHL: education_attainment + OCCP: occupation + WKHP: hours_worked + WKW: weeks_worked + EMPLOYED: employment_status + ESR: esr + SCHG: grade_attending + annotate: + SPEC: annotate_persons + DF: persons + TABLES: + - households + - tablename: households + column_map: + HHID: household_id + MAZ: home_zone_id + HHINCADJ: income + NWRKRS_ESR: num_workers + VEH: auto_ownership + NP: hhsize + HHT: hh_type + BLD: building_size + TYPE: hh_unit_type + MTCCountyID: county_id + annotate: + SPEC: annotate_households + DF: households + TABLES: + - persons + - land_use \ No newline at end of file diff --git a/test/auto_ownership/configs/initialize_landuse.yaml b/test/auto_ownership/configs/initialize_landuse.yaml new file mode 100644 index 000000000..7cc1d7e34 --- /dev/null +++ b/test/auto_ownership/configs/initialize_landuse.yaml @@ -0,0 +1,54 @@ +annotate_tables: + - tablename: land_use + column_map: + MAZ_ORIGINAL: zone_id + CountyID: county_id + DistID: DISTRICT + HH: TOTHH + POP: TOTPOP + ACRES: TOTACRE + emp_total: TOTEMP + annotate: + SPEC: annotate_landuse + DF: land_use + - tablename: accessibility + column_map: + column_1: nonmandatory_auto_accessibility + column_2: nonmandatory_transit_accessibility + column_3: nonmandatory_nm_accessibility + column_4: nonmandatory_sov0_accessibility + column_5: nonmandatory_sov1_accessibility + column_6: nonmandatory_sov2_accessibility + column_7: nonmandatory_hov0_accessibility + column_8: nonmandatory_hov1_accessibility + column_9: nonmandatory_hov2_accessibility + column_10: shop_hov_insufficient_accessibility + column_11: shop_hov_sufficient_accessibility + column_12: shop_hov_oversufficient_accessibility + column_13: maint_hov_insufficient_accessibility + column_14: maint_hov_sufficient_accessibility + column_15: maint_hov_oversufficient_accessibility + column_16: eat_hov_insufficient_accessibility + column_17: eat_hov_sufficient_accessibility + column_18: eat_hov_oversufficient_accessibility + column_19: visit_hov_insufficient_accessibility + column_20: visit_hov_sufficient_accessibility + column_21: visit_hov_oversufficient_accessibility + column_22: discr_hov_insufficient_accessibility + column_23: discr_hov_sufficient_accessibility + column_24: discr_hov_oversufficient_accessibility + column_25: escort_hov_insufficient_accessibility + column_26: escort_hov_sufficient_accessibility + column_27: escort_hov_oversufficient_accessibility + column_28: shop_sov_insufficient_accessibility + column_29: shop_sov_sufficient_accessibility + column_30: shop_sov_oversufficient_accessibility + column_31: maint_sov_insufficient_accessibility + column_32: maint_sov_sufficient_accessibility + column_33: maint_sov_oversufficient_accessibility + column_40: discr_sov_insufficient_accessibility + column_41: discr_sov_sufficient_accessibility + column_42: discr_sov_oversufficient_accessibility + column_45: total_emp_accessibility + column_47: hh_walktransit_accessibility + mgra : zone_id \ No newline at end of file diff --git a/test/auto_ownership/configs/network_los.yaml b/test/auto_ownership/configs/network_los.yaml new file mode 100644 index 000000000..391125a38 --- /dev/null +++ b/test/auto_ownership/configs/network_los.yaml @@ -0,0 +1,14 @@ +# read cached skims (using numpy memmap) from output directory (memmap is faster than omx ) +read_skim_cache: False +# write memmapped cached skims to output directory after reading from omx, for use in subsequent runs +write_skim_cache: True + +zone_system: 1 + +taz_skims: skims.omx + +skim_time_periods: + time_window: 1440 + period_minutes: 60 + periods: [0, 3, 5, 9, 14, 18, 24] # 3=3:00-3:59, 5=5:00-5:59, 9=9:00-9:59, 14=2:00-2:59, 18=6:00-6:59 + labels: ['EA', 'EA', 'AM', 'MD', 'PM', 'EV'] \ No newline at end of file diff --git a/test/auto_ownership/configs/settings.yaml b/test/auto_ownership/configs/settings.yaml new file mode 100644 index 000000000..ce94eef8e --- /dev/null +++ b/test/auto_ownership/configs/settings.yaml @@ -0,0 +1,65 @@ +# input tables +input_table_list: + - tablename: households + filename: households.csv + index_col: household_id + rename_columns: + unique_hh_id: household_id + NP: hhsize + hh_workers_from_esr: num_workers + VEH: auto_ownership + MAZ: home_zone_id + HINCP: income + keep_columns: + - home_zone_id + - income + - hhsize + - HHT + - auto_ownership + - num_workers + - tablename: persons + filename: persons.csv + index_col: person_id + rename_columns: + unique_hh_id: household_id + AGEP: age + SPORDER: PNUM + SEX: sex + employed: pemploy + student_status: pstudent + person_type: ptype + keep_columns: + - household_id + - age + - PNUM + - sex + - pemploy + - pstudent + - ptype + - tablename: land_use + filename: land_use.csv + index_col: zone_id + rename_columns: + MAZ_ORIGINAL: zone_id + CountyID: county_id + TAZ_ORIGINAL: TAZ + DistID: DISTRICT + HH: TOTHH + POP: TOTPOP + ACRES: TOTACRE + emp_total: TOTEMP + keep_columns: + - TAZ + - DISTRICT + - SD + - county_id + - TOTHH + - TOTPOP + - TOTACRE + +#trace_hh_id: 357022 +trace_hh_id: 36 + +use_accessibility: 0 + +mobility_av_share: 0.0 \ No newline at end of file diff --git a/test/auto_ownership/configs/tour_departure_and_duration_alternatives.csv b/test/auto_ownership/configs/tour_departure_and_duration_alternatives.csv new file mode 100644 index 000000000..bddab06b9 --- /dev/null +++ b/test/auto_ownership/configs/tour_departure_and_duration_alternatives.csv @@ -0,0 +1,191 @@ +start,end +5,5 +5,6 +5,7 +5,8 +5,9 +5,10 +5,11 +5,12 +5,13 +5,14 +5,15 +5,16 +5,17 +5,18 +5,19 +5,20 +5,21 +5,22 +5,23 +6,6 +6,7 +6,8 +6,9 +6,10 +6,11 +6,12 +6,13 +6,14 +6,15 +6,16 +6,17 +6,18 +6,19 +6,20 +6,21 +6,22 +6,23 +7,7 +7,8 +7,9 +7,10 +7,11 +7,12 +7,13 +7,14 +7,15 +7,16 +7,17 +7,18 +7,19 +7,20 +7,21 +7,22 +7,23 +8,8 +8,9 +8,10 +8,11 +8,12 +8,13 +8,14 +8,15 +8,16 +8,17 +8,18 +8,19 +8,20 +8,21 +8,22 +8,23 +9,9 +9,10 +9,11 +9,12 +9,13 +9,14 +9,15 +9,16 +9,17 +9,18 +9,19 +9,20 +9,21 +9,22 +9,23 +10,10 +10,11 +10,12 +10,13 +10,14 +10,15 +10,16 +10,17 +10,18 +10,19 +10,20 +10,21 +10,22 +10,23 +11,11 +11,12 +11,13 +11,14 +11,15 +11,16 +11,17 +11,18 +11,19 +11,20 +11,21 +11,22 +11,23 +12,12 +12,13 +12,14 +12,15 +12,16 +12,17 +12,18 +12,19 +12,20 +12,21 +12,22 +12,23 +13,13 +13,14 +13,15 +13,16 +13,17 +13,18 +13,19 +13,20 +13,21 +13,22 +13,23 +14,14 +14,15 +14,16 +14,17 +14,18 +14,19 +14,20 +14,21 +14,22 +14,23 +15,15 +15,16 +15,17 +15,18 +15,19 +15,20 +15,21 +15,22 +15,23 +16,16 +16,17 +16,18 +16,19 +16,20 +16,21 +16,22 +16,23 +17,17 +17,18 +17,19 +17,20 +17,21 +17,22 +17,23 +18,18 +18,19 +18,20 +18,21 +18,22 +18,23 +19,19 +19,20 +19,21 +19,22 +19,23 +20,20 +20,21 +20,22 +20,23 +21,21 +21,22 +21,23 +22,22 +22,23 +23,23 \ No newline at end of file diff --git a/test/auto_ownership/data/.gitkeep b/test/auto_ownership/data/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/test/auto_ownership/test_auto_ownership.py b/test/auto_ownership/test_auto_ownership.py new file mode 100644 index 000000000..63a49969d --- /dev/null +++ b/test/auto_ownership/test_auto_ownership.py @@ -0,0 +1,434 @@ +import logging +import pytest +import os +import shutil +import pandas as pd +import numpy as np +from numpy import dot +from numpy.linalg import norm +import orca +from numpy.random import randint +import scipy.stats as stats + +# import models is necessary to initalize the model steps with orca +from activitysim.abm import models +from activitysim.core import pipeline, config +from activitysim.core import tracing + +logger = logging.getLogger(__name__) + +# Used by conftest.py initialize_pipeline method +@pytest.fixture(scope="module") +def module() -> str: + """ + A pytest fixture that returns the data folder location. + :return: folder location for any necessary data to initialize the tests + """ + return "auto_ownership" + + +# Used by conftest.py initialize_pipeline method +@pytest.fixture(scope="module") +def tables(prepare_module_inputs) -> dict[str, str]: + """ + A pytest fixture that returns the "mock" tables to build pipeline dataframes. The + key-value pair is the name of the table and the index column. + :return: dict + """ + return { + "land_use": "MAZ_ORIGINAL", + "persons": "person_id", + "households": "household_id", + "accessibility": "MAZ_ORIGINAL", + } + + +# Used by conftest.py initialize_pipeline method +# Set to true if you need to read skims into the pipeline +@pytest.fixture(scope="module") +def initialize_network_los() -> bool: + """ + A pytest boolean fixture indicating whether network skims should be read from the + fixtures test data folder. + :return: bool + """ + return False + + +# Used by conftest.py reconnect_pipeline method +@pytest.fixture(scope="module") +def load_checkpoint() -> bool: + """ + checkpoint to be loaded from the pipeline when reconnecting. + """ + return "initialize_households" + + +@pytest.mark.skipif( + os.path.isfile("test/auto_ownership/output/pipeline.h5"), + reason="no need to recreate pipeline store if alreayd exist", +) +def test_prepare_input_pipeline(initialize_pipeline: pipeline.Pipeline, caplog): + # Run summarize model + caplog.set_level(logging.INFO) + + # run model step + pipeline.run(models=["initialize_landuse", "initialize_households"]) + + pipeline.close_pipeline() + + +def test_auto_ownership(reconnect_pipeline: pipeline.Pipeline, caplog): + + caplog.set_level(logging.INFO) + + # run model step + pipeline.run( + models=["auto_ownership_simulate"], resume_after="initialize_households" + ) + + # get the updated pipeline data + household_df = pipeline.get_table("households") + # logger.info("household_df columns: ", household_df.columns.tolist()) + + # target_col = "autos" + target_col = "pre_autos" + choice_col = "auto_ownership" + simulated_col = "autos_model" + + similarity_threshold = 0.99 + + ao_alternatives_df = pd.DataFrame.from_dict( + { + choice_col: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "auto_choice_label": [ + "0_CARS", + "1_CAR_1CV", + "1_CAR_1AV", + "2_CARS_2CV", + "2_CARS_2AV", + "2_CARS_1CV1AV", + "3_CARS_3CV", + "3_CARS_3AV", + "3_CARS_2CV1AV", + "3_CARS_1CV2AV", + "4_CARS_4CV", + ], + simulated_col: [0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4], + } + ) + + household_df = pd.merge(household_df, ao_alternatives_df, how="left", on=choice_col) + + # AO summary from the model + simulated_df = create_summary( + household_df, key=simulated_col, out_col="Simulated_Share" + ) + + # AO summary from the results/target + target_df = create_summary(household_df, key=target_col, out_col="Target_Share") + + merged_df = pd.merge( + target_df, simulated_df, left_on=target_col, right_on=simulated_col, how="outer" + ) + merged_df = merged_df.fillna(0) + + # compare simulated and target results by computing the cosine similarity between them + similarity_value = cosine_similarity( + merged_df["Target_Share"].tolist(), merged_df["Simulated_Share"].tolist() + ) + + # save the results to disk + merged_df.to_csv( + os.path.join("test", "auto_ownership", "output", "ao_test_results.csv"), + index=False, + ) + + # if the cosine_similarity >= threshold then the simulated and target results are "similar" + assert similarity_value >= similarity_threshold + + +@pytest.mark.skip +def test_auto_ownership_variation(reconnect_pipeline: pipeline.Pipeline, caplog): + + caplog.set_level(logging.INFO) + + output_file = os.path.join( + "test", "auto_ownership", "output", "ao_results_variation.csv" + ) + + if os.path.isfile(output_file): + out_df = pd.read_csv(output_file) + + pipeline.open_pipeline(resume_after="initialize_households") + + household_df = pipeline.get_table("households") + + else: + target_col = "pre_autos" + choice_col = "auto_ownership" + simulated_col = "autos_model" + + ao_alternatives_df = pd.DataFrame.from_dict( + { + choice_col: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + "auto_choice_label": [ + "0_CARS", + "1_CAR_1CV", + "1_CAR_1AV", + "2_CARS_2CV", + "2_CARS_2AV", + "2_CARS_1CV1AV", + "3_CARS_3CV", + "3_CARS_3AV", + "3_CARS_2CV1AV", + "3_CARS_1CV2AV", + "4_CARS_4CV", + ], + simulated_col: [0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4], + } + ) + + NUM_SEEDS = 100 + + for i in range(1, NUM_SEEDS + 1): + base_seed = randint(1, 99999) + orca.add_injectable("rng_base_seed", base_seed) + + # run model step + pipeline.run( + models=["auto_ownership_simulate"], resume_after="initialize_households" + ) + + # get the updated pipeline data + household_df = pipeline.get_table("households") + + household_df = pd.merge( + household_df, ao_alternatives_df, how="left", on=choice_col + ) + + # AO summary from the model + simulated_share_col_name = "simulation_" + str(i) + simulated_df = create_summary( + household_df, key=simulated_col, out_col=simulated_share_col_name + ) + + if i == 1: + out_df = create_summary(household_df, key=target_col, out_col="target") + + out_df = pd.concat( + [out_df, simulated_df[[simulated_share_col_name]]], axis=1 + ) + + # since model_name is used as checkpoint name, the same model can not be run more than once. + # have to close the pipeline before running the same model again. + pipeline.close_pipeline() + + out_df["simulation_min"] = out_df.filter(like="simulation_").min(axis=1) + out_df["simulation_max"] = out_df.filter(like="simulation_").max(axis=1) + out_df["simulation_mean"] = out_df.filter(like="simulation_").mean(axis=1) + + # reorder columns + cols = [ + "pre_autos", + "target", + "simulation_mean", + "simulation_min", + "simulation_max", + ] + cols = cols + [x for x in out_df.columns if x not in cols] + out_df = out_df[cols] + + out_df.to_csv(output_file, index=False) + + # chi-square test + alpha = 0.05 + observed_prob = out_df["simulation_mean"] + expected_prob = out_df["target"] + + num_hh = len(household_df) + + observed = [p * num_hh for p in observed_prob] + expected = [p * num_hh for p in expected_prob] + + observed_sum = sum(observed) + expected_sum = sum(expected) + + # the sum of the observed and expected frequencies must be the same for the test + observed = [f * expected_sum / observed_sum for f in observed] + + chi_square, prob = stats.chisquare(observed, expected) + p_value = 1 - prob + + # Ho: Target and Simulated results are from same distribution and there is no significant difference b/w the two. + # Ha: Target and Simulated results are statistically different. + + conclusion = "Failed to reject the null hypothesis." + if p_value >= alpha: + conclusion = "Null Hypothesis is rejected. Obersved and Simulated results are statistically different." + + logger.info(conclusion) + + # if p-value is less than alpha, then difference between simulated and target results + # are statistically greater than the random variation of the model results + assert p_value < alpha + + +# fetch/prepare existing files for model inputs +# e.g. read accessibilities.csv from ctramp result, rename columns, write out to accessibility.csv which is the input to activitysim +@pytest.fixture(scope="module") +def prepare_module_inputs() -> None: + """ + copy input files from sharepoint into test folder + + create unique person id in person file + + :return: None + """ + # https://wsponlinenam.sharepoint.com/sites/US-TM2ConversionProject/Shared%20Documents/Forms/ + # AllItems.aspx?id=%2Fsites%2FUS%2DTM2ConversionProject%2FShared%20Documents%2FTask%203%20ActivitySim&viewid=7a1eaca7%2D3999%2D4d45%2D9701%2D9943cc3d6ab1 + accessibility_file = os.path.join( + "test", "auto_ownership", "data", "accessibilities.csv" + ) + household_file = os.path.join( + "test", "auto_ownership", "data", "popsyn", "households.csv" + ) + person_file = os.path.join( + "test", "auto_ownership", "data", "popsyn", "persons.csv" + ) + landuse_file = os.path.join( + "test", "auto_ownership", "data", "landuse", "maz_data_withDensity.csv" + ) + + test_dir = os.path.join("test", "auto_ownership", "data") + + shutil.copy(accessibility_file, os.path.join(test_dir, "accessibility.csv")) + shutil.copy(household_file, os.path.join(test_dir, "households.csv")) + shutil.copy(person_file, os.path.join(test_dir, "persons.csv")) + shutil.copy(landuse_file, os.path.join(test_dir, "land_use.csv")) + + # add original maz id to accessibility table + land_use_df = pd.read_csv(os.path.join(test_dir, "land_use.csv")) + + accessibility_df = pd.read_csv(os.path.join(test_dir, "accessibility.csv")) + + accessibility_df = pd.merge( + accessibility_df, + land_use_df[["MAZ", "MAZ_ORIGINAL"]].rename(columns={"MAZ": "mgra"}), + how="left", + on="mgra", + ) + + accessibility_df.to_csv(os.path.join(test_dir, "accessibility.csv"), index=False) + + # currently household file has to have these two columns, even before annotation + # because annotate person happens before household and uses these two columns + # TODO find a way to get around this + #### + + # household file from populationsim + household_df = pd.read_csv(os.path.join(test_dir, "households.csv")) + + household_columns_dict = {"HHID": "household_id", "MAZ": "home_zone_id"} + + household_df.rename(columns=household_columns_dict, inplace=True) + + # get columns from ctramp output + tm2_simulated_household_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "householdData_3.csv") + ) + tm2_simulated_household_df.rename(columns={"hh_id": "household_id"}, inplace=True) + + household_df = pd.merge( + household_df, + tm2_simulated_household_df[ + [ + "household_id", + "autos", + "automated_vehicles", + "transponder", + "cdap_pattern", + "jtf_choice", + ] + ], + how="inner", # tm2 is not 100% sample run + on="household_id", + ) + + tm2_pre_ao_results_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "aoResults_pre.csv") + ) + tm2_pre_ao_results_df.rename( + columns={"HHID": "household_id", "AO": "pre_autos"}, inplace=True + ) + + household_df = pd.merge( + household_df, tm2_pre_ao_results_df, how="inner", on="household_id" + ) + + household_df.to_csv(os.path.join(test_dir, "households.csv"), index=False) + + # person file from populationsim + person_df = pd.read_csv(os.path.join(test_dir, "persons.csv")) + + person_columns_dict = {"HHID": "household_id", "PERID": "person_id"} + + person_df.rename(columns=person_columns_dict, inplace=True) + + # get columns from ctramp result + tm2_simulated_person_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "personData_3.csv") + ) + tm2_simulated_person_df.rename(columns={"hh_id": "household_id"}, inplace=True) + + person_df = pd.merge( + person_df, + tm2_simulated_person_df[ + [ + "household_id", + "person_id", + "type", + "value_of_time", + "activity_pattern", + "imf_choice", + "inmf_choice", + "fp_choice", + "reimb_pct", + "workDCLogsum", + "schoolDCLogsum", + ] + ], + how="inner", # ctramp might not be 100% sample run + on=["household_id", "person_id"], + ) + + person_df.to_csv(os.path.join(test_dir, "persons.csv"), index=False) + + +def create_summary(input_df, key, out_col="Share") -> pd.DataFrame: + """ + Create summary for the input data. + 1. group input data by the "key" column + 2. calculate the percent of input data records in each "key" category. + + :return: pd.DataFrame + """ + + out_df = input_df.groupby(key).size().reset_index(name="Count") + out_df[out_col] = round(out_df["Count"] / out_df["Count"].sum(), 4) + + return out_df[[key, out_col]] + + +def cosine_similarity(a, b): + """ + Computes cosine similarity between two vectors. + + Cosine similarity is used here as a metric to measure similarity between two sequence of numbers. + Two sequence of numbers are represented as vectors (in a multi-dimensional space) and cosine similiarity is defined as the cosine of the angle between them + i.e., dot products of the vectors divided by the product of their lengths. + + :return: + """ + + return dot(a, b) / (norm(a) * norm(b)) diff --git a/test/cdap/.gitkeep b/test/cdap/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/test/cdap/configs/annotate_households.csv b/test/cdap/configs/annotate_households.csv new file mode 100644 index 000000000..bd6dc6fef --- /dev/null +++ b/test/cdap/configs/annotate_households.csv @@ -0,0 +1,18 @@ +Description,Target,Expression +#,, annotate households table after import +,_PERSON_COUNT,"lambda query, persons, households: persons.query(query).groupby('household_id').size().reindex(households.index).fillna(0).astype(np.int8)" +number of non_workers,num_non_workers,households.hhsize - households.num_workers +number of drivers,num_drivers,"_PERSON_COUNT('16 <= age', persons, households)" +num_adults,num_adults,"_PERSON_COUNT('adult', persons, households)" +num_children,num_children,"_PERSON_COUNT('~adult', persons, households)" +num_young_children,num_young_children,"_PERSON_COUNT('age <= 5', persons, households)" +num_children_6_to_15,num_children_6_to_15,"_PERSON_COUNT('6 <= age <= 15', persons, households)" +num_children_16_to_17,num_children_16_to_17,"_PERSON_COUNT('16 <= age <= 17', persons, households)" +num_college_age,num_college_age,"_PERSON_COUNT('18 <= age <= 24', persons, households)" +# get definition from travel model two +num_young_adults,num_young_adults,"_PERSON_COUNT('18 <= age <= 24', persons, households)" +num_young_retirees,num_young_retirees,"_PERSON_COUNT('65 <= age <= 79', persons, households)" +num_old_retirees,num_old_retirees,"_PERSON_COUNT('80 <= age', persons, households)" +num_persons_18_to_35,num_persons_18_to_35,"_PERSON_COUNT('18 <= age <= 35', persons, households)" +num_persons_65_plus,num_persons_65_plus,"_PERSON_COUNT('65 <= age', persons, households)" +num_highschool_graduates,num_highschool_graduates,"_PERSON_COUNT('9 <= education_attainment', persons, households)" \ No newline at end of file diff --git a/test/cdap/configs/annotate_households_cdap.csv b/test/cdap/configs/annotate_households_cdap.csv new file mode 100644 index 000000000..cd66b1c42 --- /dev/null +++ b/test/cdap/configs/annotate_households_cdap.csv @@ -0,0 +1,11 @@ +Description,Target,Expression +#,, annotate households table after cdap model has run +num_under16_not_at_school,num_under16_not_at_school,persons.under16_not_at_school.astype(int).groupby(persons.household_id).sum().reindex(households.index).fillna(0).astype(np.int8) +num_travel_active,num_travel_active,persons.travel_active.astype(int).groupby(persons.household_id).sum().reindex(households.index).fillna(0).astype(np.int8) +num_travel_active_adults,num_travel_active_adults,(persons.adult & persons.travel_active).astype(int).groupby(persons.household_id).sum().reindex(households.index).fillna(0).astype(np.int8) +num_travel_active_preschoolers,num_travel_active_preschoolers,((persons.ptype == PTYPE_PRESCHOOL) & persons.travel_active).astype(int).groupby(persons.household_id).sum().reindex(households.index).fillna(0).astype(np.int8) +num_travel_active_children,num_travel_active_children,num_travel_active - num_travel_active_adults +num_travel_active_non_preschoolers,num_travel_active_non_preschoolers,num_travel_active - num_travel_active_preschoolers +#participates_in_jtf_model,participates_in_jtf_model,(num_travel_active > 1) & (num_travel_active_non_preschoolers > 0) +participates_in_jtf_model,participates_in_jtf_model,(num_travel_active > 1) +cdap_activity,cdap_activity,"persons.cdap_activity.groupby(persons.household_id).apply(''.join).reindex(households.index).fillna('')" \ No newline at end of file diff --git a/test/cdap/configs/annotate_landuse.csv b/test/cdap/configs/annotate_landuse.csv new file mode 100644 index 000000000..65237c0ad --- /dev/null +++ b/test/cdap/configs/annotate_landuse.csv @@ -0,0 +1,6 @@ +Description,Target,Expression +#,, annotate landuse table after import +household_density,household_density,land_use.TOTHH / land_use.TOTACRE +employment_density,employment_density,land_use.TOTEMP / land_use.TOTACRE +population_density,population_density,land_use.TOTPOP / land_use.TOTACRE +density_index,density_index,(household_density *employment_density) / (household_density + employment_density).clip(lower=1) \ No newline at end of file diff --git a/test/cdap/configs/annotate_persons.csv b/test/cdap/configs/annotate_persons.csv new file mode 100644 index 000000000..0aea67814 --- /dev/null +++ b/test/cdap/configs/annotate_persons.csv @@ -0,0 +1,54 @@ +Description,Target,Expression +#,, annotate persons table after import +age_16_to_19,age_16_to_19,"persons.age.between(16, 19)" +age_16_p,age_16_p,persons.age >= 16 +adult,adult,persons.age >= 18 +male,male,persons.sex == 1 +female,female,persons.sex == 2 +#,, annotate employment category +#employment category - under employment age,empcat, +#employment category - over employment age and not employed,empcat, +#employment category - over employment age and working at least 35 hours a week and 27+ weeks a year,empcat, +#employment category - over employment age and not working at least 35 hours a week and 27+ weeks a year,empcat, +#,,TODO add ptype annotation +,ptype,0 +,ptype,"np.where(persons.type == 'Full-time worker', 1, ptype)" +,ptype,"np.where(persons.type == 'Part-time worker', 2, ptype)" +,ptype,"np.where(persons.type == 'University student', 3, ptype)" +,ptype,"np.where(persons.type == 'Non-worker', 4, ptype)" +,ptype,"np.where(persons.type == 'Retired', 5, ptype)" +,ptype,"np.where(persons.type == 'Student of driving age', 6, ptype)" +,ptype,"np.where(persons.type == 'Student of non-driving age', 7, ptype)" +,ptype,"np.where(persons.type == 'Child too young for school', 8, ptype)" +#full time worker,ptype +#presence of non_worker other than self in household,has_non_worker,"other_than(persons.household_id, persons.ptype == PTYPE_NONWORK)" +#presence of retiree other than self in household,has_retiree,"other_than(persons.household_id, persons.ptype == PTYPE_RETIRED)" +#presence of preschooler other than self in household,has_preschool_kid,"other_than(persons.household_id, persons.ptype == PTYPE_PRESCHOOL)" +#presence of driving_kid other than self in household,has_driving_kid,"other_than(persons.household_id, persons.ptype == PTYPE_DRIVING)" +#presence of school_kid other than self in household,has_school_kid,"other_than(persons.household_id, persons.ptype == PTYPE_SCHOOL)" +#presence of full_time worker other than self in household (independent of person type),has_full_time,"other_than(persons.household_id, persons.pemploy==PEMPLOY_FULL)" +#presence of part_time worker other than self in household (independent of person type),has_part_time,"other_than(persons.household_id, persons.pemploy==PEMPLOY_PART)" +#presence of university student other than self in household,has_university,"other_than(persons.household_id, persons.ptype == PTYPE_UNIVERSITY)" +#student_is_employed,student_is_employed,"(persons.ptype.isin([PTYPE_UNIVERSITY, PTYPE_DRIVING]) & persons.pemploy.isin([PEMPLOY_FULL, PEMPLOY_PART]))" +#nonstudent_to_school,nonstudent_to_school,"(persons.ptype.isin([PTYPE_FULL, PTYPE_PART, PTYPE_NONWORK, PTYPE_RETIRED]) & persons.pstudent.isin([PSTUDENT_GRADE_OR_HIGH, PSTUDENT_UNIVERSITY]))" +#,, +#,, FIXME - if person is a university student but has school age student category value then reset student category value +#,pstudent,"persons.pstudent.where(persons.ptype!=PTYPE_UNIVERSITY, PSTUDENT_UNIVERSITY)" +#,, FIXME if person is a student of any kind but has full-time employment status then reset student category value to non-student +#,pstudent,"pstudent.where(persons.ptype!=PTYPE_FULL, PSTUDENT_NOT)" +#,, FIXME if student category is non-student and employment is student then reset student category value to student +#,pstudent,"pstudent.where((persons.ptype!=PTYPE_DRIVING) & (persons.ptype!=PTYPE_SCHOOL), PSTUDENT_GRADE_OR_HIGH)" +#,, +#is_student,is_student,"pstudent.isin([PSTUDENT_GRADE_OR_HIGH, PSTUDENT_UNIVERSITY])" +#preschool age can go to preschool,is_student,"is_student.where(persons.age > GRADE_SCHOOL_MIN_AGE, True)" +#preschool age can go to preschool,pstudent,"pstudent.where(persons.age > GRADE_SCHOOL_MIN_AGE, PSTUDENT_GRADE_OR_HIGH)" +#is_gradeschool,is_gradeschool,(pstudent == PSTUDENT_GRADE_OR_HIGH) & (persons.age <= GRADE_SCHOOL_MAX_AGE) +#is_highschool,is_highschool,(pstudent == PSTUDENT_GRADE_OR_HIGH) & (persons.age > GRADE_SCHOOL_MAX_AGE) +#is_university,is_university,pstudent == PSTUDENT_UNIVERSITY +#school_segment gradeschool,school_segment,"np.where(is_gradeschool, SCHOOL_SEGMENT_GRADE, SCHOOL_SEGMENT_NONE)" +#school_segment highschool,school_segment,"np.where(is_highschool, SCHOOL_SEGMENT_HIGH, school_segment)" +#school_segment university,school_segment,"np.where(is_university, SCHOOL_SEGMENT_UNIV, school_segment).astype(np.int8)" +#,, +#is_worker,is_worker,"persons.pemploy.isin([PEMPLOY_FULL, PEMPLOY_PART])" +#,, +home_zone_id,home_zone_id,"reindex(households.home_zone_id, persons.household_id)" diff --git a/test/cdap/configs/annotate_persons_after_hh.csv b/test/cdap/configs/annotate_persons_after_hh.csv new file mode 100644 index 000000000..0dfa16be6 --- /dev/null +++ b/test/cdap/configs/annotate_persons_after_hh.csv @@ -0,0 +1,5 @@ +Description,Target,Expression +#,, annotate persons table after annotate_households +#,, adults get full hh_value_of_time and children get 60% +,_hh_vot,"reindex(households.hh_value_of_time, persons.household_id)" +,value_of_time,"_hh_vot.where(persons.age>=18, _hh_vot * 0.667)" \ No newline at end of file diff --git a/test/cdap/configs/annotate_persons_cdap.csv b/test/cdap/configs/annotate_persons_cdap.csv new file mode 100644 index 000000000..2ad5e56a6 --- /dev/null +++ b/test/cdap/configs/annotate_persons_cdap.csv @@ -0,0 +1,6 @@ +Description,Target,Expression +#,, annotate persons table after cdap model has run +travel_active,travel_active,persons.cdap_activity != CDAP_ACTIVITY_HOME +under16_not_at_school,under16_not_at_school,"persons.ptype.isin([PTYPE_SCHOOL, PTYPE_PRESCHOOL]) & persons.cdap_activity.isin(['N', 'H'])" +has_preschool_kid_at_home,has_preschool_kid_at_home,"other_than(persons.household_id, (persons.ptype == PTYPE_PRESCHOOL) & (persons.cdap_activity == 'H'))" +has_school_kid_at_home,has_school_kid_at_home,"other_than(persons.household_id, (persons.ptype == PTYPE_SCHOOL) & (persons.cdap_activity == 'H'))" diff --git a/test/cdap/configs/cdap.yaml b/test/cdap/configs/cdap.yaml new file mode 100644 index 000000000..5758444c2 --- /dev/null +++ b/test/cdap/configs/cdap.yaml @@ -0,0 +1,49 @@ + +INDIV_AND_HHSIZE1_SPEC: cdap_indiv_and_hhsize1.csv +COEFFICIENTS: cdap_coefficients.csv +INTERACTION_COEFFICIENTS: cdap_interaction_coefficients.csv + +FIXED_RELATIVE_PROPORTIONS_SPEC: cdap_fixed_relative_proportions.csv + +# set to True if want to introduce joint tour utility in cdap +# otherwise set to False or comment out, defaulted to False +ADD_JOINT_TOUR_UTILITY: True +JOINT_TOUR_COEFFICIENTS: cdap_joint_tour_coefficients.csv +JOINT_TOUR_USEFUL_COLUMNS: + - autos + - income + - num_workers + - nonmandatory_hov0_accessibility + - nonmandatory_hov1_accessibility + - nonmandatory_hov2_accessibility + - WorkLocationLogsum + +CONSTANTS: + FULL: 1 + PART: 2 + UNIVERSITY: 3 + NONWORK: 4 + RETIRED: 5 + DRIVING: 6 + SCHOOL: 7 + PRESCHOOL: 8 + +PERSON_TYPE_MAP: + WORKER: + - 1 + - 2 + CHILD: + - 6 + - 7 + - 8 + +annotate_persons: + SPEC: annotate_persons_cdap + DF: persons + + +annotate_households: + SPEC: annotate_households_cdap + DF: households + TABLES: + - persons diff --git a/test/cdap/configs/cdap_coefficients.csv b/test/cdap/configs/cdap_coefficients.csv new file mode 100644 index 000000000..110ee2a44 --- /dev/null +++ b/test/cdap/configs/cdap_coefficients.csv @@ -0,0 +1,235 @@ +coefficient_name,value,constrain +coef_UNAVAILABLE,-999,T +coef_full_time_worker_asc_M,2.9114,F +coef_full_time_worker_asc_N,-0.7695,F +coef_part_time_worker_asc_M,2.9274,F +coef_part_time_worker_asc_N,1.3675,F +coef_university_student_asc_M,1.7642,F +coef_university_student_asc_N,-0.3138,F +coef_non_working_adult_asc_M,-3.1521,F +coef_non_working_adult_asc_N,0.513,F +coef_retired_asc_M,-2.7055,F +coef_retired_asc_N,0.9234,F +coef_driving_age_child_who_is_in_school_asc_M,3.2036,F +coef_driving_age_child_who_is_in_school_asc_N,-3.4315,F +coef_pre_driving_age_child_who_is_in_school_asc_M,7.0644,F +coef_pre_driving_age_child_who_is_in_school_asc_N,2.574,F +coef_pre_driving_age_child_who_is_too_young_for_school_asc_M,1.1,F +coef_pre_driving_age_child_who_is_too_young_for_school_asc_N,0.6017,F +#,, +coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_age_0_to_1_M,-1.5151,F +coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_age_0_to_1_N,0.3702,F +coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_age_4_to_5_M,3.2965,F +coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_age_4_to_5_N,1.1392,F +coef_pre_driving_age_child_who_is_in_school_interaction_with_age_13_to_15_M,-0.8582,F +coef_full_time_worker_interaction_with_age_less_than_35_N,-0.145,F +coef_part_time_worker_interaction_with_age_less_than_35_M,-0.7095,F +coef_part_time_worker_interaction_with_age_less_than_35_N,-1.4213,F +#,, +coef_full_time_worker_interaction_with_female_gender_M,0.3032,F +coef_full_time_worker_interaction_with_female_gender_N,0.7718,F +coef_part_time_worker_interaction_with_female_gender_M,0.061,F +coef_part_time_worker_interaction_with_female_gender_N,0.4176,F +coef_university_student_interaction_with_female_gender_M,1.2429,F +coef_university_student_interaction_with_female_gender_N,2.2549,F +coef_non_working_adult_interaction_with_female_gender_N,0.1475,F +coef_retired_interaction_with_female_M,-0.7751,F +coef_retired_interaction_with_female_N,-0.3729,F +coef_driving_age_child_who_is_in_school_interaction_with_female_N,0.7991,F +#,, +coef_full_time_worker_interaction_with_more_cars_than_workers_N,-0.087,F +coef_non_working_adult_interaction_with_more_cars_than_workers_N,0.2122,F +coef_retired_interaction_with_more_cars_than_workers_N,0.8642,F +coef_driving_age_child_who_is_in_school_interaction_with_more_cars_than_workers_M,0.0988,F +coef_full_time_worker_interaction_with_zero_cars_M,-0.3377,F +coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_zero_cars_M,-0.5917,F +coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_zero_cars_N,-1.4389,F +coef_full_time_worker_interaction_with_fewer_cars_than_workers_M,-0.3377,F +coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_fewer_cars_than_workers_M,-0.4778,F +coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_fewer_cars_than_workers_N,-0.5259,F +#,, +coef_full_time_worker_interaction_with_income_less_than_30k_M,-0.7201,F +coef_full_time_worker_interaction_with_income_less_than_30k_H,-0.5331,F +coef_part_time_worker_interaction_with_income_less_than_30k_M,0.1285,F +coef_university_student_interaction_with_income_less_than_30k_M,0.4359,F +coef_university_student_interaction_with_income_between_60k_and_100k_H,0.6352,F +coef_university_student_interaction_with_income_more_than_100k_H,0.6352,F +coef_non_working_adult_interaction_with_income_more_than_100k_H,-0.2468,F +coef_retired_interaction_with_income_more_than_100k_M,-0.1418,F +coef_retired_interaction_with_income_more_than_100k_H,-0.2388,F +coef_pre_driving_age_child_who_is_in_school_interaction_with_income_less_than_30k_M,1.2007,F +coef_pre_driving_age_child_who_is_in_school_interaction_with_income_less_than_30k_H,1.9783,F +coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_income_between_60k_and_100k_M,0.2952,F +coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_income_more_than_100k_M,0.2952,F +#,, +coef_full_time_worker_intraction_with_peak_accessibility_to_all_employment_M,0.1212,F +coef_part_time_worker_interaction_with_peak_accessibility_to_all_employment_M,0.2004,F +coef_non_working_adult_interaction_with_peak_accessibility_to_all_employment_M,0.2314,F +coef_retired_interaction_with_peak_accessibility_to_all_employment_M,0.2792,F +coef_non_working_adult_retired_or_univ_student_interaction_with_off_peak_accessibility_to_all_employment_N,0.0721,F +coef_child_who_is_in_school_or_too_young_for_school_interaction_with_off_peak_accessibility_to_retail_N,0.0823,F +#,, +coef_university_student_interaction_with_school_location_mc_logsum_M,0.0243,F +coef_full_time_worker_interaction_with_usual_work_location_is_home_M,-2.4147,F +coef_part_time_worker_interaction_with_usual_work_location_is_home_M,-2.8801,F +coef_full_time_worker_interaction_with_no_usual_work_location_M,-0.3777,F +coef_part_time_worker_interaction_with_no_usual_work_location_M,-0.6869,F +coef_full_time_worker_asc_adjustment_M,-0.2301,F +coef_part_time_worker_asc_adjustment_M,-0.471,F +coef_university_student_asc_adjustment_M,-0.3361,F +coef_driving_age_child_who_is_in_school_asc_adjustment_M,0.1434,F +coef_pre_driving_age_child_who_is_in_school_asc_adjustment_M,0.4725,F +coef_pre_driving_age_child_who_is_too_young_for_school_asc_adjustment_M,0.5554,F +coef_part_time_worker_asc_adjustment_tm2_calib_M,-0.3499,F +coef_university_student_asc_adjustment_tm2_calib_M,-0.9471,F +coef_non_working_adult_asc_adjustment_tm2_calib_M,0,F +coef_retired_asc_adjustment_tm2_calib_M,0,F +coef_full_time_worker_interaction_with_retail_accessibility_N,0.0445,F +coef_non_working_adult_interaction_with_retail_accessibility_N,0.0069,F +coef_driving_age_child_who_is_in_school_interaction_with_retail_accessibility_N,0.157,F +coef_full_time_worker_interaction_with_usual_work_location_is_home_N,0.87616,F +coef_full_time_worker_asc_adjustment_N,-0.1846,F +coef_part_time_worker_asc_adjustment_N,-0.4229,F +coef_university_student_asc_adjustment_N,0.0325,F +coef_non_working_adult_asc_adjustment_N,0.077,F +coef_retired_asc_adjustment_N,-0.0012,F +coef_driving_age_child_who_is_in_school_asc_adjustment_N,-0.8075,F +coef_pre_driving_age_child_who_is_in_school_asc_adjustment_N,-0.1462,F +coef_pre_driving_age_child_who_is_too_young_for_school_asc_adjustment_N,0.134,F +coef_part_time_worker_asc_adjustment_tm2_calib_N,0.5217,F +coef_university_student_asc_adjustment_tm2_calib_N,-0.6678,F +coef_non_working_adult_asc_adjustment_tm2_calib_N,0.0466,F +coef_retired_asc_adjustment_tm2_calib_N,0.1313,F +coef_full_time_worker_interaction_with_detached_home_H,0.1538,F +coef_part_time_worker_interaction_with_detached_home_H,0.0862,F +coef_retired_interaction_with_detached_home_H,0.7415,F +coef_driving_age_child_who_is_in_school_interaction_with_detached_home_H,2.023,F +#,, +# 2-way interactions,, +coef_H_11,0.7511,F +coef_H_12,0,F +coef_H_13,0,F +coef_H_14,0,F +coef_H_15,0.6692,F +coef_H_16,1.3472,F +coef_H_17,0,F +coef_H_18,0.7797,F +coef_H_22,0.7897,F +coef_H_23,1.617,F +coef_H_24,1.1606,F +coef_H_25,0.7915,F +coef_H_26,0,F +coef_H_27,1.8203,F +coef_H_28,1.7547,F +coef_H_33,0,F +coef_H_34,0.637,F +coef_H_35,0.1955,F +coef_H_36,2.2375,F +coef_H_37,0,F +coef_H_38,1.7118,F +coef_H_44,1.2214,F +coef_H_45,0.8544,F +coef_H_46,1.116,F +coef_H_47,1.974,F +coef_H_48,2.1615,F +coef_H_55,1.0484,F +coef_H_56_57,0,F +coef_H_58,1.9117,F +coef_H_66,3.192,F +coef_H_67,0,F +coef_H_68,0,F +coef_H_77,5.6222,F +coef_H_78,2.8078,F +coef_H_88,3.2327,F +coef_M_11,0,F +coef_M_12,0,F +coef_M_13,0.0627,F +coef_M_16,0,F +coef_M_17,0.1434,F +coef_M_18,0.3851,F +coef_M_22,0,F +coef_M_23,0.5967,F +coef_M_26,0,F +coef_M_27,0.4024,F +coef_M_28,0.4453,F +coef_M_33,0.3881,F +coef_M_36,0,F +coef_M_37,0.2755,F +coef_M_38,0.4148,F +coef_M_66,0.6854,F +coef_M_67,0.3692,F +coef_M_68,0.5467,F +coef_M_77,0.7729,F +coef_M_78,0,F +coef_M_88,0,F +coef_N_11,0.15,F +coef_N_12,0,F +coef_N_13,0,F +coef_N_14,0,F +coef_N_15,0,F +coef_N_16,1.0053,F +coef_N_17,0.3041,F +coef_N_18,0,F +coef_N_22,0,F +coef_N_23,0,F +coef_N_24,0,F +coef_N_25,0,F +coef_N_26,0,F +coef_N_27,0.3248,F +coef_N_28,0.9231,F +coef_N_33,0,F +coef_N_34,0,F +coef_N_35,0.8526,F +coef_N_36,0.9678,F +coef_N_37,0,F +coef_N_38,0.9241,F +coef_N_44,0,F +coef_N_45,0,F +coef_N_46,0.7134,F +coef_N_47,0.8509,F +coef_N_48,1.1721,F +coef_N_55,0,F +coef_N_56_57_58,0,F +coef_N_66,0,F +coef_N_67,1.8265,F +coef_N_68,1.1744,F +coef_N_77,2.5719,F +coef_N_78,0.7036,F +coef_N_88,0.4338,F +# 3-way interactions,, +coef_H_114,1.5072,F +coef_H_117_118,0.8382,F +coef_H_127_128,0.4246,F +coef_H_147_148,0.1548,F +coef_H_177_178_187_188,-0.7547,F +coef_H_277_278_287_288,-2.2535,F +coef_H_447_448,-0.9024,F +coef_H_477_478_487_488,-1.3723,F +coef_H_777_778_788_888,-2.4703,F +coef_M_111,0.298,F +coef_M_112,0.2032,F +coef_M_122,-0.6279,F +coef_M_127_128,-0.0432,F +coef_M_177_178_187_188,-0.1301,F +coef_M_227_228,-0.1524,F +coef_M_277_278_287_288,-0.1259,F +coef_M_777_778_788_888,-0.0112,F +coef_N_117_118,-0.5454,F +coef_N_144,-0.9496,F +coef_N_127_128,-1.7459,F +coef_N_147_148,-0.1659,F +coef_N_177_178_187_188,0.4687,F +coef_N_222,1.8781,F +coef_N_277_278_287_288,-0.6913,F +coef_N_477_478_487_488,-0.4894,F +coef_N_777_778_788_888,-0.0582,F +# cdap_all_people,, +coef_M_xxx,-0.114,F +coef_N_xxx,-0.4673,F +coef_H_xxx,-0.1538,F +coef_M_xxxx,0.4569,F +coef_N_xxxx,-0.4669,F +coef_H_xxxx,-0.4645,F +coef_M_xxxxx,-0.2607,F +coef_N_xxxxx,-1.4859,F +coef_H_xxxxx,-9,F diff --git a/test/cdap/configs/cdap_fixed_relative_proportions.csv b/test/cdap/configs/cdap_fixed_relative_proportions.csv new file mode 100644 index 000000000..788f398b6 --- /dev/null +++ b/test/cdap/configs/cdap_fixed_relative_proportions.csv @@ -0,0 +1,9 @@ +Description,Expression,M,N,H +Full-time worker,ptype == 1,0.79647,0.09368,0.10985 +Part-time worker,ptype == 2,0.61678,0.25757,0.12565 +University student,ptype == 3,0.69229,0.15641,0.1513 +Non-working adult,ptype == 4,0,0.67169,0.32831 +Retired,ptype == 5,0,0.54295,0.45705 +Driving-age child who is in school,ptype == 6,0.77609,0.06004,0.16387 +Pre-driving-age child who is in school,ptype == 7,0.68514,0.09144,0.22342 +Child who is too young for school,ptype == 8,0.14056,0.06512,0.79432 diff --git a/test/cdap/configs/cdap_indiv_and_hhsize1.csv b/test/cdap/configs/cdap_indiv_and_hhsize1.csv new file mode 100644 index 000000000..a5cb0d660 --- /dev/null +++ b/test/cdap/configs/cdap_indiv_and_hhsize1.csv @@ -0,0 +1,81 @@ +Description,Expression,M,N,H +Full-time worker alternative-specific constants,ptype == 1,coef_full_time_worker_asc_M,coef_full_time_worker_asc_N, +Part-time worker alternative-specific constants,ptype == 2,coef_part_time_worker_asc_M,coef_part_time_worker_asc_N, +University student alternative-specific constants,ptype == 3,coef_university_student_asc_M,coef_university_student_asc_N, +Non-working adult alternative-specific constants,ptype == 4,coef_non_working_adult_asc_M,coef_non_working_adult_asc_N, +Retired alternative-specific constants,ptype == 5,coef_retired_asc_M,coef_retired_asc_N, +Driving-age child who is in school alternative-specific constants,ptype == 6,coef_driving_age_child_who_is_in_school_asc_M,coef_driving_age_child_who_is_in_school_asc_N, +Pre-driving-age child who is in school alternative-specific constants,ptype == 7,coef_pre_driving_age_child_who_is_in_school_asc_M,coef_pre_driving_age_child_who_is_in_school_asc_N, +Pre-driving-age child who is too young for school alternative-specific constants,ptype == 8,coef_pre_driving_age_child_who_is_too_young_for_school_asc_M,coef_pre_driving_age_child_who_is_too_young_for_school_asc_N, +#,,,, +Pre-driving-age child who is too young for school interaction with age 0 to 1,(ptype == 8) & (age >= 0) & (age <= 1),coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_age_0_to_1_M,coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_age_0_to_1_N, +Pre-driving-age child who is too young for school interaction with age 4 to 5,(ptype == 8) & (age >= 4) & (age <= 5),coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_age_4_to_5_M,coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_age_4_to_5_N, +Pre-driving-age child who is in school interaction with age 13 to 15,(ptype == 7) & (age >= 13) & (age <= 15),coef_pre_driving_age_child_who_is_in_school_interaction_with_age_13_to_15_M,, +Full-time worker interaction with age less than 35,(ptype == 1) & (age < 35),,coef_full_time_worker_interaction_with_age_less_than_35_N, +Part-time worker interaction with age less than 35,(ptype == 2) & (age < 35),coef_part_time_worker_interaction_with_age_less_than_35_N,coef_part_time_worker_interaction_with_age_less_than_35_N, +Retired interaction with age more than 80,(ptype == 5) & (age > 80),,, +#,,,, +Full-time worker interaction with female gender,(ptype == 1) & (sex == 2),coef_full_time_worker_interaction_with_female_gender_M,coef_full_time_worker_interaction_with_female_gender_N, +Part-time worker interaction with female gender,(ptype == 2) & (sex == 2),coef_part_time_worker_interaction_with_female_gender_M,coef_part_time_worker_interaction_with_female_gender_N, +University student interaction with female gender,(ptype == 3) & (sex == 2),coef_university_student_interaction_with_female_gender_M,coef_university_student_interaction_with_female_gender_N, +Non-working adult interaction with female gender,(ptype == 4) & (sex == 2),,coef_non_working_adult_interaction_with_female_gender_N, +Retired interaction with female,(ptype == 5) & (sex == 2),coef_retired_interaction_with_female_M,coef_retired_interaction_with_female_N, +Driving-age child interaction with female,(ptype == 6) & (sex == 2),,coef_driving_age_child_who_is_in_school_interaction_with_female_N, +#,,,, +Full-time worker interaction with more cars than workers,(ptype == 1) & (autos > num_workers),,coef_full_time_worker_interaction_with_more_cars_than_workers_N, +Non-working adult interaction with more cars than workers,(ptype == 4) & (autos > num_workers),,coef_non_working_adult_interaction_with_more_cars_than_workers_N, +Retired interaction with more cars than workers,(ptype == 5) & (autos > num_workers),,coef_retired_interaction_with_more_cars_than_workers_N, +Driving-age child who is in school interaction with more cars than workers,(ptype == 6) & (autos > num_workers),coef_driving_age_child_who_is_in_school_interaction_with_more_cars_than_workers_M,, +Full-time worker interaction with zero cars,(ptype == 1) & (autos==0),coef_full_time_worker_interaction_with_zero_cars_M,, +Pre-driving-age child who is too young for school interaction with zero cars,(ptype == 8) & (autos==0),coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_zero_cars_M,coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_zero_cars_N, +Full-time worker interaction with fewer cars than workers,(ptype == 1) & (autos < num_workers),coef_full_time_worker_interaction_with_fewer_cars_than_workers_M,, +Pre-driving-age child who is too young for school interaction with fewer cars than workers,(ptype == 8) & (autos < num_workers),coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_fewer_cars_than_workers_M,coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_fewer_cars_than_workers_N, +#,,,, +Full-time worker interaction with income less than $30k,(ptype == 1) & (income < 30000),coef_full_time_worker_interaction_with_income_less_than_30k_M,,coef_full_time_worker_interaction_with_income_less_than_30k_H +Part-time worker interaction with income less than $30k,(ptype == 2) & (income < 30000),coef_part_time_worker_interaction_with_income_less_than_30k_M,, +University student interaction with income less than $30k,(ptype == 3) & (income < 30000),coef_university_student_interaction_with_income_less_than_30k_M,, +University student interaction with income between $60k and $100k,(ptype == 3) & (income >= 60000) & (income <= 100000),,,coef_university_student_interaction_with_income_between_60k_and_100k_H +University student interaction with income more than $100k,(ptype == 3) & (income >= 100000),,,coef_university_student_interaction_with_income_more_than_100k_H +Non-working adult interaction with income more than $100k,(ptype == 4) & (income >= 100000),,,coef_non_working_adult_interaction_with_income_more_than_100k_H +Retired interaction with income between $60k and $100k,(ptype == 5) & (income >= 60000) & (income <= 100000),,, +Retired interaction with income more than $100k,(ptype == 5) & (income >= 100000),coef_retired_interaction_with_income_more_than_100k_M,,coef_retired_interaction_with_income_more_than_100k_H +Pre-driving-age child who is in school interaction with income less than $30k,(ptype == 7) & (income < 30000),coef_pre_driving_age_child_who_is_in_school_interaction_with_income_less_than_30k_M,,coef_pre_driving_age_child_who_is_in_school_interaction_with_income_less_than_30k_H +Pre-driving-age child who is too young for school interaction with income between $60k and $100k,(ptype == 8) & (income >= 60000) & (income <= 100000),coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_income_between_60k_and_100k_M,, +Pre-driving-age child who is too young for school interaction with income more than $100k,(ptype == 8) & (income >= 100000),coef_pre_driving_age_child_who_is_too_young_for_school_interaction_with_income_more_than_100k_M,, +#,,,, +Uinversity Student interaction with peak accessibility to all employment,(ptype == 3) * SchoolLocationLogsum,coef_university_student_interaction_with_school_location_mc_logsum_M,, +Full-time Worker interaction with accessibility to retail,"@np.where((df.ptype == 1)*(df.autosdf.num_workers),df.nonmandatory_hov2_accessibility,0)",,coef_full_time_worker_interaction_with_retail_accessibility_N, +Non-working adult interaction with accessibility to retail,"@np.where((df.ptype == 4)*(df.autosdf.num_workers),df.nonmandatory_hov2_accessibility,0)",,coef_non_working_adult_interaction_with_retail_accessibility_N, +Driving-age child who is in school interaction with accessibility to retail,"@np.where((df.ptype == 6)*(df.autosdf.num_workers),df.nonmandatory_hov2_accessibility,0)",,coef_driving_age_child_who_is_in_school_interaction_with_retail_accessibility_N, +#,,,, +Full-time worker interaction with usual work location is home,(ptype==1)&(WorkLocation==99999),coef_full_time_worker_interaction_with_usual_work_location_is_home_M,coef_full_time_worker_interaction_with_usual_work_location_is_home_N, +Part-time worker interaction with usual work location is home,(ptype==2)&(WorkLocation==99999),coef_part_time_worker_interaction_with_usual_work_location_is_home_M,, +Full-time worker interaction with no usual work location,(ptype==1)&((WorkLocation==99999)|(WorkLocation<=0)),coef_full_time_worker_interaction_with_no_usual_work_location_M,, +Part-time worker interaction with no usual work location,(ptype==2)&((WorkLocation==99999)|(WorkLocation<=0)),coef_part_time_worker_interaction_with_no_usual_work_location_M,, +#,,,, +Full-time worker interaction with detached house,(ptype==1)&(building_size<3),,,coef_full_time_worker_interaction_with_detached_home_H +Part-time worker interaction with detached house,(ptype==2)&(building_size<3),,,coef_part_time_worker_interaction_with_detached_home_H +Retired interaction with detached house,(ptype==5)&(building_size<3),,,coef_retired_interaction_with_detached_home_H +Pre-driving-age child in School interaction with detached house,(ptype==6)&(building_size<3),,,coef_driving_age_child_who_is_in_school_interaction_with_detached_home_H +#,,,, +Mandatory pattern unavailable for retired person,ptype==5,coef_UNAVAILABLE,, +Mandatory pattern unavailable for nonworking adult person type,ptype==4,coef_UNAVAILABLE,, +#,,,, +Alternative Specific Constant Adjustment for Full-time worker,ptype == 1,coef_full_time_worker_asc_adjustment_M,coef_full_time_worker_asc_adjustment_N, +Alternative Specific Constant Adjustment for Part-time worker,ptype == 2,coef_part_time_worker_asc_adjustment_M,coef_part_time_worker_asc_adjustment_N, +Alternative Specific Constant Adjustment for University student,ptype == 3,coef_university_student_asc_adjustment_M,coef_university_student_asc_adjustment_N, +Alternative Specific Constant Adjustment for Non-working adult,ptype == 4,,coef_non_working_adult_asc_adjustment_N, +Alternative Specific Constant Adjustment for Retired,ptype == 5,,coef_retired_asc_adjustment_N, +Alternative Specific Constant Adjustment for Driving-age child who is in school,ptype == 6,coef_driving_age_child_who_is_in_school_asc_adjustment_M,coef_driving_age_child_who_is_in_school_asc_adjustment_N, +Alternative Specific Constant Adjustment for Pre-driving-age child who is in school,ptype == 7,coef_pre_driving_age_child_who_is_in_school_asc_adjustment_M,coef_pre_driving_age_child_who_is_in_school_asc_adjustment_N, +Alternative Specific Constant Adjustment for Pre-driving-age child who is too young for school,ptype == 8,coef_pre_driving_age_child_who_is_too_young_for_school_asc_adjustment_M,coef_pre_driving_age_child_who_is_too_young_for_school_asc_adjustment_N, +ASC Adjustment for Part-time worker -- TM2 calibration,ptype == 2,coef_part_time_worker_asc_adjustment_tm2_calib_M,coef_part_time_worker_asc_adjustment_tm2_calib_N, +ASC Adjustment for University student -- TM2 calibration,ptype == 3,coef_university_student_asc_adjustment_tm2_calib_M,coef_university_student_asc_adjustment_tm2_calib_N, +ASC Adjustment for Non-working adult -- TM2 calibration,ptype == 4,coef_non_working_adult_asc_adjustment_tm2_calib_M,coef_non_working_adult_asc_adjustment_tm2_calib_N, +ASC Adjustment for Retired --TM2 calibration,ptype == 5,coef_retired_asc_adjustment_tm2_calib_M,coef_retired_asc_adjustment_tm2_calib_N, diff --git a/test/cdap/configs/cdap_interaction_coefficients.csv b/test/cdap/configs/cdap_interaction_coefficients.csv new file mode 100644 index 000000000..f94fa1723 --- /dev/null +++ b/test/cdap/configs/cdap_interaction_coefficients.csv @@ -0,0 +1,177 @@ +activity,interaction_ptypes,coefficient +# 2-way interactions,, +H,11,coef_H_11 +H,12,coef_H_12 +H,13,coef_H_13 +H,14,coef_H_14 +H,15,coef_H_15 +H,16,coef_H_16 +H,17,coef_H_17 +H,18,coef_H_18 +H,22,coef_H_22 +H,23,coef_H_23 +H,24,coef_H_24 +H,25,coef_H_25 +H,26,coef_H_26 +H,27,coef_H_27 +H,28,coef_H_28 +H,33,coef_H_33 +H,34,coef_H_34 +H,35,coef_H_35 +H,36,coef_H_36 +H,37,coef_H_37 +H,38,coef_H_38 +H,44,coef_H_44 +H,45,coef_H_45 +H,46,coef_H_46 +H,47,coef_H_47 +H,48,coef_H_48 +H,55,coef_H_55 +H,56,coef_H_56_57 +H,57,coef_H_56_57 +H,58,coef_H_58 +H,66,coef_H_66 +H,67,coef_H_67 +H,68,coef_H_68 +H,77,coef_H_77 +H,78,coef_H_78 +H,88,coef_H_88 +M,11,coef_M_11 +M,12,coef_M_12 +M,13,coef_M_13 +M,16,coef_M_16 +M,17,coef_M_17 +M,18,coef_M_18 +M,22,coef_M_22 +M,23,coef_M_23 +M,26,coef_M_26 +M,27,coef_M_27 +M,28,coef_M_28 +M,33,coef_M_33 +M,36,coef_M_36 +M,37,coef_M_37 +M,38,coef_M_38 +M,66,coef_M_66 +M,67,coef_M_67 +M,68,coef_M_68 +M,77,coef_M_77 +M,78,coef_M_78 +M,88,coef_M_88 +N,11,coef_N_11 +N,12,coef_N_12 +N,13,coef_N_13 +N,14,coef_N_14 +N,15,coef_N_15 +N,16,coef_N_16 +N,17,coef_N_17 +N,18,coef_N_18 +N,22,coef_N_22 +N,23,coef_N_23 +N,24,coef_N_24 +N,25,coef_N_25 +N,26,coef_N_26 +N,27,coef_N_27 +N,28,coef_N_28 +N,33,coef_N_33 +N,34,coef_N_34 +N,35,coef_N_35 +N,36,coef_N_36 +N,37,coef_N_37 +N,38,coef_N_38 +N,44,coef_N_44 +N,45,coef_N_45 +N,46,coef_N_46 +N,47,coef_N_47 +N,48,coef_N_48 +N,55,coef_N_55 +N,56,coef_N_56_57_58 +N,57,coef_N_56_57_58 +N,58,coef_N_56_57_58 +N,66,coef_N_66 +N,67,coef_N_67 +N,68,coef_N_68 +N,77,coef_N_77 +N,78,coef_N_78 +N,88,coef_N_88 +# 3-way interactions,, +H,114,coef_H_114 +H,117,coef_H_117_118 +H,118,coef_H_117_118 +H,127,coef_H_127_128 +H,128,coef_H_127_128 +H,147,coef_H_147_148 +H,148,coef_H_147_148 +H,177,coef_H_177_178_187_188 +H,178,coef_H_177_178_187_188 +H,187,coef_H_177_178_187_188 +H,188,coef_H_177_178_187_188 +H,277,coef_H_277_278_287_288 +H,278,coef_H_277_278_287_288 +H,287,coef_H_277_278_287_288 +H,288,coef_H_277_278_287_288 +H,447,coef_H_447_448 +H,448,coef_H_447_448 +H,477,coef_H_477_478_487_488 +H,478,coef_H_477_478_487_488 +H,487,coef_H_477_478_487_488 +H,488,coef_H_477_478_487_488 +H,777,coef_H_777_778_788_888 +H,778,coef_H_777_778_788_888 +H,788,coef_H_777_778_788_888 +H,888,coef_H_777_778_788_888 +M,111,coef_M_111 +M,112,coef_M_112 +M,122,coef_M_122 +M,127,coef_M_127_128 +M,128,coef_M_127_128 +M,177,coef_M_177_178_187_188 +M,178,coef_M_177_178_187_188 +M,187,coef_M_177_178_187_188 +M,188,coef_M_177_178_187_188 +M,227,coef_M_227_228 +M,228,coef_M_227_228 +M,277,coef_M_277_278_287_288 +M,278,coef_M_277_278_287_288 +M,287,coef_M_277_278_287_288 +M,288,coef_M_277_278_287_288 +M,777,coef_M_777_778_788_888 +M,778,coef_M_777_778_788_888 +M,788,coef_M_777_778_788_888 +M,888,coef_M_777_778_788_888 +N,117,coef_N_117_118 +N,118,coef_N_117_118 +N,144,coef_N_144 +N,127,coef_N_127_128 +N,128,coef_N_127_128 +N,147,coef_N_147_148 +N,148,coef_N_147_148 +N,177,coef_N_177_178_187_188 +N,178,coef_N_177_178_187_188 +N,187,coef_N_177_178_187_188 +N,188,coef_N_177_178_187_188 +N,222,coef_N_222 +N,277,coef_N_277_278_287_288 +N,278,coef_N_277_278_287_288 +N,287,coef_N_277_278_287_288 +N,288,coef_N_277_278_287_288 +N,477,coef_N_477_478_487_488 +N,478,coef_N_477_478_487_488 +N,487,coef_N_477_478_487_488 +N,488,coef_N_477_478_487_488 +N,777,coef_N_777_778_788_888 +N,778,coef_N_777_778_788_888 +N,788,coef_N_777_778_788_888 +N,888,coef_N_777_778_788_888 +# cdap_final_rules,, +M,5,coef_UNAVAILABLE +M,4,coef_UNAVAILABLE +# cdap_all_people,, +M,***,coef_M_xxx +N,***,coef_N_xxx +H,***,coef_H_xxx +M,****,coef_M_xxxx +N,****,coef_N_xxxx +H,****,coef_H_xxxx +M,*****,coef_M_xxxxx +N,*****,coef_N_xxxxx +H,*****,coef_H_xxxxx diff --git a/test/cdap/configs/cdap_joint_tour_coefficients.csv b/test/cdap/configs/cdap_joint_tour_coefficients.csv new file mode 100644 index 000000000..14ee3fee3 --- /dev/null +++ b/test/cdap/configs/cdap_joint_tour_coefficients.csv @@ -0,0 +1,22 @@ +Label,description,Expression,dependency,coefficient +,constant - joint tour,1,,-3.1506 +,joint tour for hhsize 2,hhsize==2,,0.331420519 +,joint tour for hhsize 3,hhsize==3,,0.360848095 +,joint tour for hhsize 4,hhsize==4,,-0.118640717 +,joint tour for hhsize 5+,hhsize>=5,,-0.053509306 +,person x is adult and DAP is M,ptype_px<7,M_px,0.008 +,person x is adult and DAP is N,ptype_px<7,N_px,1.2557 +,person x is kid and DAP is M,ptype_px>6,M_px,0.1088 +,person x is kid and DAP is N,ptype_px>6,N_px,1.6898 +,Accessibility to retail employment/Non-Mandatory Attractions for Joint Tour,(autos_p1num_workers_p1)*nonmandatory_hov2_accessibility_p1,,0.055031985 +,Income less than $30k,income_p1<30000,,-0.192506367 +,Income between $60k and $100k,(income_p1>=60000)&(income_p1<=100000),,0.104325349 +,Income more than $100k,income_p1>100000,,0.104325349 +,No Car Households,autos_p1==0,,0 +,Cars Less than Workers,autos_p1num_workers_p1,,-0.005896499 +,Constant - Joint Tour - MTC TM2 Calibration,1,,-0.5918 +,WorkAccessForMandatoryDap,WorkLocationLogsum_px,M_px,0.17217579 +,If All Adults stay at Home/ None of the Adults have Dap 1 or 2,ptype_pxprod<7|ptype_pxprod>6,H_px,-0.988838929 diff --git a/test/cdap/configs/constants.yaml b/test/cdap/configs/constants.yaml new file mode 100644 index 000000000..b0bd5a1f3 --- /dev/null +++ b/test/cdap/configs/constants.yaml @@ -0,0 +1,68 @@ +## ActivitySim +## See full license in LICENSE.txt. + + +#HHT_NONE: 0 +#HHT_FAMILY_MARRIED: 1 +#HHT_FAMILY_MALE: 2 +#HHT_FAMILY_FEMALE: 3 +#HHT_NONFAMILY_MALE_ALONE: 4 +#HHT_NONFAMILY_MALE_NOTALONE: 5 +#HHT_NONFAMILY_FEMALE_ALONE: 6 +#HHT_NONFAMILY_FEMALE_NOTALONE: 7 + +# convenience for expression files +HHT_NONFAMILY: [4, 5, 6, 7] +HHT_FAMILY: [1, 2, 3] + +PSTUDENT_GRADE_OR_HIGH: 1 +PSTUDENT_UNIVERSITY: 2 +PSTUDENT_NOT: 3 + +GRADE_SCHOOL_MAX_AGE: 14 +GRADE_SCHOOL_MIN_AGE: 5 + +SCHOOL_SEGMENT_NONE: 0 +SCHOOL_SEGMENT_GRADE: 1 +SCHOOL_SEGMENT_HIGH: 2 +SCHOOL_SEGMENT_UNIV: 3 + +INCOME_SEGMENT_LOW: 1 +INCOME_SEGMENT_MED: 2 +INCOME_SEGMENT_HIGH: 3 +INCOME_SEGMENT_VERYHIGH: 4 + +PEMPLOY_FULL: 1 +PEMPLOY_PART: 2 +PEMPLOY_NOT: 3 +PEMPLOY_CHILD: 4 + +PTYPE_FULL: &ptype_full 1 +PTYPE_PART: &ptype_part 2 +PTYPE_UNIVERSITY: &ptype_university 3 +PTYPE_NONWORK: &ptype_nonwork 4 +PTYPE_RETIRED: &ptype_retired 5 +PTYPE_DRIVING: &ptype_driving 6 +PTYPE_SCHOOL: &ptype_school 7 +PTYPE_PRESCHOOL: &ptype_preschool 8 + +# these appear as column headers in non_mandatory_tour_frequency.csv +PTYPE_NAME: + *ptype_full: PTYPE_FULL + *ptype_part: PTYPE_PART + *ptype_university: PTYPE_UNIVERSITY + *ptype_nonwork: PTYPE_NONWORK + *ptype_retired: PTYPE_RETIRED + *ptype_driving: PTYPE_DRIVING + *ptype_school: PTYPE_SCHOOL + *ptype_preschool: PTYPE_PRESCHOOL + + +CDAP_ACTIVITY_MANDATORY: M +CDAP_ACTIVITY_NONMANDATORY: N +CDAP_ACTIVITY_HOME: H + +# Correction for transit skim expressions +# e.g. MTC transit skims (Cube TRANPLAN skims) use scaled ints and +# therefore need to be divided by the scale factor if used in expressions +TRANSIT_SCALE_FACTOR: 100 diff --git a/test/cdap/configs/initialize_households.yaml b/test/cdap/configs/initialize_households.yaml new file mode 100644 index 000000000..5d98a703d --- /dev/null +++ b/test/cdap/configs/initialize_households.yaml @@ -0,0 +1,37 @@ +annotate_tables: + - tablename: persons + column_map: + HHID: household_id + PERID: person_id + AGEP: age + SEX: sex + SCHL: education_attainment + OCCP: occupation + WKHP: hours_worked + WKW: weeks_worked + EMPLOYED: employment_status + ESR: esr + SCHG: grade_attending + annotate: + SPEC: annotate_persons + DF: persons + TABLES: + - households + - tablename: households + column_map: + HHID: household_id + MAZ: home_zone_id + HHINCADJ: income + NWRKRS_ESR: num_workers + VEH: auto_ownership + NP: hhsize + HHT: hh_type + BLD: building_size + TYPE: hh_unit_type + MTCCountyID: county_id + annotate: + SPEC: annotate_households + DF: households + TABLES: + - persons + - land_use \ No newline at end of file diff --git a/test/cdap/configs/initialize_landuse.yaml b/test/cdap/configs/initialize_landuse.yaml new file mode 100644 index 000000000..7cc1d7e34 --- /dev/null +++ b/test/cdap/configs/initialize_landuse.yaml @@ -0,0 +1,54 @@ +annotate_tables: + - tablename: land_use + column_map: + MAZ_ORIGINAL: zone_id + CountyID: county_id + DistID: DISTRICT + HH: TOTHH + POP: TOTPOP + ACRES: TOTACRE + emp_total: TOTEMP + annotate: + SPEC: annotate_landuse + DF: land_use + - tablename: accessibility + column_map: + column_1: nonmandatory_auto_accessibility + column_2: nonmandatory_transit_accessibility + column_3: nonmandatory_nm_accessibility + column_4: nonmandatory_sov0_accessibility + column_5: nonmandatory_sov1_accessibility + column_6: nonmandatory_sov2_accessibility + column_7: nonmandatory_hov0_accessibility + column_8: nonmandatory_hov1_accessibility + column_9: nonmandatory_hov2_accessibility + column_10: shop_hov_insufficient_accessibility + column_11: shop_hov_sufficient_accessibility + column_12: shop_hov_oversufficient_accessibility + column_13: maint_hov_insufficient_accessibility + column_14: maint_hov_sufficient_accessibility + column_15: maint_hov_oversufficient_accessibility + column_16: eat_hov_insufficient_accessibility + column_17: eat_hov_sufficient_accessibility + column_18: eat_hov_oversufficient_accessibility + column_19: visit_hov_insufficient_accessibility + column_20: visit_hov_sufficient_accessibility + column_21: visit_hov_oversufficient_accessibility + column_22: discr_hov_insufficient_accessibility + column_23: discr_hov_sufficient_accessibility + column_24: discr_hov_oversufficient_accessibility + column_25: escort_hov_insufficient_accessibility + column_26: escort_hov_sufficient_accessibility + column_27: escort_hov_oversufficient_accessibility + column_28: shop_sov_insufficient_accessibility + column_29: shop_sov_sufficient_accessibility + column_30: shop_sov_oversufficient_accessibility + column_31: maint_sov_insufficient_accessibility + column_32: maint_sov_sufficient_accessibility + column_33: maint_sov_oversufficient_accessibility + column_40: discr_sov_insufficient_accessibility + column_41: discr_sov_sufficient_accessibility + column_42: discr_sov_oversufficient_accessibility + column_45: total_emp_accessibility + column_47: hh_walktransit_accessibility + mgra : zone_id \ No newline at end of file diff --git a/test/cdap/configs/network_los.yaml b/test/cdap/configs/network_los.yaml new file mode 100644 index 000000000..391125a38 --- /dev/null +++ b/test/cdap/configs/network_los.yaml @@ -0,0 +1,14 @@ +# read cached skims (using numpy memmap) from output directory (memmap is faster than omx ) +read_skim_cache: False +# write memmapped cached skims to output directory after reading from omx, for use in subsequent runs +write_skim_cache: True + +zone_system: 1 + +taz_skims: skims.omx + +skim_time_periods: + time_window: 1440 + period_minutes: 60 + periods: [0, 3, 5, 9, 14, 18, 24] # 3=3:00-3:59, 5=5:00-5:59, 9=9:00-9:59, 14=2:00-2:59, 18=6:00-6:59 + labels: ['EA', 'EA', 'AM', 'MD', 'PM', 'EV'] \ No newline at end of file diff --git a/test/cdap/configs/settings.yaml b/test/cdap/configs/settings.yaml new file mode 100644 index 000000000..bd0f4acc9 --- /dev/null +++ b/test/cdap/configs/settings.yaml @@ -0,0 +1,60 @@ +# input tables +input_table_list: + - tablename: households + filename: households.csv + index_col: household_id + rename_columns: + unique_hh_id: household_id + NP: hhsize + hh_workers_from_esr: num_workers + VEH: auto_ownership + MAZ: home_zone_id + HINCP: income + keep_columns: + - home_zone_id + - income + - hhsize + - HHT + - auto_ownership + - num_workers + - tablename: persons + filename: persons.csv + index_col: person_id + rename_columns: + unique_hh_id: household_id + AGEP: age + SPORDER: PNUM + SEX: sex + employed: pemploy + student_status: pstudent + person_type: ptype + keep_columns: + - household_id + - age + - PNUM + - sex + - pemploy + - pstudent + - ptype + - tablename: land_use + filename: land_use.csv + index_col: zone_id + rename_columns: + MAZ_ORIGINAL: zone_id + CountyID: county_id + TAZ_ORIGINAL: TAZ + DistID: DISTRICT + HH: TOTHH + POP: TOTPOP + ACRES: TOTACRE + emp_total: TOTEMP + keep_columns: + - TAZ + - DISTRICT + - SD + - county_id + - TOTHH + - TOTPOP + - TOTACRE + +trace_hh_id: 2 \ No newline at end of file diff --git a/test/cdap/configs/tour_departure_and_duration_alternatives.csv b/test/cdap/configs/tour_departure_and_duration_alternatives.csv new file mode 100644 index 000000000..bddab06b9 --- /dev/null +++ b/test/cdap/configs/tour_departure_and_duration_alternatives.csv @@ -0,0 +1,191 @@ +start,end +5,5 +5,6 +5,7 +5,8 +5,9 +5,10 +5,11 +5,12 +5,13 +5,14 +5,15 +5,16 +5,17 +5,18 +5,19 +5,20 +5,21 +5,22 +5,23 +6,6 +6,7 +6,8 +6,9 +6,10 +6,11 +6,12 +6,13 +6,14 +6,15 +6,16 +6,17 +6,18 +6,19 +6,20 +6,21 +6,22 +6,23 +7,7 +7,8 +7,9 +7,10 +7,11 +7,12 +7,13 +7,14 +7,15 +7,16 +7,17 +7,18 +7,19 +7,20 +7,21 +7,22 +7,23 +8,8 +8,9 +8,10 +8,11 +8,12 +8,13 +8,14 +8,15 +8,16 +8,17 +8,18 +8,19 +8,20 +8,21 +8,22 +8,23 +9,9 +9,10 +9,11 +9,12 +9,13 +9,14 +9,15 +9,16 +9,17 +9,18 +9,19 +9,20 +9,21 +9,22 +9,23 +10,10 +10,11 +10,12 +10,13 +10,14 +10,15 +10,16 +10,17 +10,18 +10,19 +10,20 +10,21 +10,22 +10,23 +11,11 +11,12 +11,13 +11,14 +11,15 +11,16 +11,17 +11,18 +11,19 +11,20 +11,21 +11,22 +11,23 +12,12 +12,13 +12,14 +12,15 +12,16 +12,17 +12,18 +12,19 +12,20 +12,21 +12,22 +12,23 +13,13 +13,14 +13,15 +13,16 +13,17 +13,18 +13,19 +13,20 +13,21 +13,22 +13,23 +14,14 +14,15 +14,16 +14,17 +14,18 +14,19 +14,20 +14,21 +14,22 +14,23 +15,15 +15,16 +15,17 +15,18 +15,19 +15,20 +15,21 +15,22 +15,23 +16,16 +16,17 +16,18 +16,19 +16,20 +16,21 +16,22 +16,23 +17,17 +17,18 +17,19 +17,20 +17,21 +17,22 +17,23 +18,18 +18,19 +18,20 +18,21 +18,22 +18,23 +19,19 +19,20 +19,21 +19,22 +19,23 +20,20 +20,21 +20,22 +20,23 +21,21 +21,22 +21,23 +22,22 +22,23 +23,23 \ No newline at end of file diff --git a/test/cdap/data/.gitkeep b/test/cdap/data/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/test/cdap/test_cdap.py b/test/cdap/test_cdap.py new file mode 100644 index 000000000..df74740b4 --- /dev/null +++ b/test/cdap/test_cdap.py @@ -0,0 +1,413 @@ +import logging +import pytest +import os +import shutil +import pandas as pd +import numpy as np +from numpy import dot +from numpy.linalg import norm + +# import models is necessary to initalize the model steps with orca +from activitysim.abm import models +from activitysim.core import pipeline, config +from activitysim.core import tracing + +logger = logging.getLogger(__name__) + +# Used by conftest.py initialize_pipeline method +@pytest.fixture(scope="module") +def module() -> str: + """ + A pytest fixture that returns the data folder location. + :return: folder location for any necessary data to initialize the tests + """ + return "cdap" + + +# Used by conftest.py initialize_pipeline method +@pytest.fixture(scope="module") +def tables(prepare_module_inputs) -> dict[str, str]: + """ + A pytest fixture that returns the "mock" tables to build pipeline dataframes. The + key-value pair is the name of the table and the index column. + :return: dict + """ + return { + "land_use": "MAZ_ORIGINAL", + "persons": "person_id", + "households": "household_id", + "accessibility": "MAZ_ORIGINAL", + } + + +# Used by conftest.py initialize_pipeline method +# Set to true if you need to read skims into the pipeline +@pytest.fixture(scope="module") +def initialize_network_los() -> bool: + """ + A pytest boolean fixture indicating whether network skims should be read from the + fixtures test data folder. + :return: bool + """ + return False + + +@pytest.fixture(scope="module") +def load_checkpoint() -> bool: + """ + checkpoint to be loaded from the pipeline when reconnecting. + """ + return "initialize_households" + + +# make a reconnect_pipeline internal to cdap +@pytest.mark.skipif( + os.path.isfile("test/cdap/output/pipeline.h5"), + reason="no need to recreate pipeline store if alreayd exist", +) +def test_prepare_input_pipeline(initialize_pipeline: pipeline.Pipeline, caplog): + # Run summarize model + caplog.set_level(logging.INFO) + + # run model step + pipeline.run(models=["initialize_landuse", "initialize_households"]) + + pipeline.close_pipeline() + + +def test_cdap_from_pipeline(reconnect_pipeline: pipeline.Pipeline, caplog): + # Run summarize model + caplog.set_level(logging.INFO) + + # run model step + pipeline.run(models=["cdap_simulate"], resume_after="initialize_households") + + # get the updated pipeline data + person_df = pipeline.get_table("persons") + + # get the updated pipeline data + household_df = pipeline.get_table("households") + + ############################ + # person cdap pattern validation + ############################ + # cdap person result from the model + logger.info("person cdap pattern validation") + + target_key = "activity_pattern" + simulated_key = "cdap_activity" + similarity_threshold = 0.99 + + simulated_df = create_summary( + person_df, key=simulated_key, out_col="Simulated_Share" + ) + + # cdap person result from the TM2 run + target_df = create_summary(person_df, key=target_key, out_col="Target_Share") + + # compare simulated and target results + similarity_value = compare_simulated_against_target( + target_df, simulated_df, target_key, simulated_key + ) + + # if the cosine_similarity >= threshold then the simulated and target results are "similar" + assert similarity_value >= similarity_threshold + + ############################ + # household joint pattern validation + ############################ + # cdap household result from the model + logger.info("household joint vs non-joint tour validation") + + target_key = "has_joint_tour_tm2" + simulated_key = "has_joint_tour" + similarity_threshold = 0.99 + + simulated_df = create_summary( + household_df, key=simulated_key, out_col="Simulated_Share" + ) + + # cdap household result from the TM2 run + household_df["has_joint_tour_tm2"] = np.where( + household_df["cdap_pattern"].str.endswith("j"), 1, 0 + ) + target_df = create_summary(household_df, key=target_key, out_col="Target_Share") + + # compare simulated and target results + similarity_value = compare_simulated_against_target( + target_df, simulated_df, target_key, simulated_key + ) + + # if the cosine_similarity >= threshold then the simulated and target results are "similar" + assert similarity_value >= similarity_threshold + + ############################ + # one person household cdap pattern validation + ############################ + # cdap household result from the model + logger.info("one-person household cdap pattern validation") + + target_key = "cdap_pattern" + simulated_key = "cdap_activity" + similarity_threshold = 0.99 + + household_df["cdap_pattern"] = household_df["cdap_pattern"].apply( + lambda x: x[:-1].upper() if x.endswith("0") else x.upper() + ) + household_df["cdap_activity"] = household_df.apply( + lambda x: x["cdap_activity"] + "J" + if x["has_joint_tour"] == 1 + else x["cdap_activity"], + axis=1, + ) + + hh1_df = household_df[household_df.hhsize == 1].copy() + + simulated_df = create_summary(hh1_df, key=simulated_key, out_col="Simulated_Share") + target_df = create_summary(hh1_df, key=target_key, out_col="Target_Share") + + # compare simulated and target results + similarity_value = compare_simulated_against_target( + target_df, simulated_df, target_key, simulated_key + ) + + # if the cosine_similarity >= threshold then the simulated and target results are "similar" + assert similarity_value >= similarity_threshold + + ############################ + # two person household cdap pattern validation + ############################ + # cdap household result from the model + logger.info("two-person household cdap pattern validation") + + target_key = "cdap_pattern" + simulated_key = "cdap_activity" + similarity_threshold = 0.99 + + hh2_df = household_df[household_df.hhsize == 2].copy() + + simulated_df = create_summary(hh2_df, key=simulated_key, out_col="Simulated_Share") + target_df = create_summary(hh2_df, key=target_key, out_col="Target_Share") + + # compare simulated and target results + similarity_value = compare_simulated_against_target( + target_df, simulated_df, target_key, simulated_key + ) + + # if the cosine_similarity >= threshold then the simulated and target results are "similar" + assert similarity_value >= similarity_threshold + + ############################ + # three person household cdap pattern validation + ############################ + # cdap household result from the model + logger.info("three-person household cdap pattern validation") + + target_key = "cdap_pattern" + simulated_key = "cdap_activity" + similarity_threshold = 0.99 + + hh3_df = household_df[household_df.hhsize == 3].copy() + + simulated_df = create_summary(hh3_df, key=simulated_key, out_col="Simulated_Share") + target_df = create_summary(hh3_df, key=target_key, out_col="Target_Share") + + # compare simulated and target results + similarity_value = compare_simulated_against_target( + target_df, simulated_df, target_key, simulated_key + ) + + # if the cosine_similarity >= threshold then the simulated and target results are "similar" + assert similarity_value >= similarity_threshold + + +# fetch/prepare existing files for model inputs +# e.g. read accessibilities.csv from ctramp result, rename columns, write out to accessibility.csv which is the input to activitysim +@pytest.fixture(scope="module") +def prepare_module_inputs() -> None: + """ + copy input files from sharepoint into test folder + + create unique person id in person file + + :return: None + """ + # https://wsponlinenam.sharepoint.com/sites/US-TM2ConversionProject/Shared%20Documents/Forms/ + # AllItems.aspx?id=%2Fsites%2FUS%2DTM2ConversionProject%2FShared%20Documents%2FTask%203%20ActivitySim&viewid=7a1eaca7%2D3999%2D4d45%2D9701%2D9943cc3d6ab1 + accessibility_file = os.path.join( + "test", "cdap", "data", "tm2_outputs", "accessibilities.csv" + ) + household_file = os.path.join("test", "cdap", "data", "popsyn", "households.csv") + person_file = os.path.join("test", "cdap", "data", "popsyn", "persons.csv") + landuse_file = os.path.join( + "test", "cdap", "data", "landuse", "maz_data_withDensity.csv" + ) + + test_dir = os.path.join("test", "cdap", "data") + + shutil.copy(accessibility_file, os.path.join(test_dir, "accessibility.csv")) + shutil.copy(household_file, os.path.join(test_dir, "households.csv")) + shutil.copy(person_file, os.path.join(test_dir, "persons.csv")) + shutil.copy(landuse_file, os.path.join(test_dir, "land_use.csv")) + + # add original maz id to accessibility table + land_use_df = pd.read_csv(os.path.join(test_dir, "land_use.csv")) + accessibility_df = pd.read_csv(os.path.join(test_dir, "accessibility.csv")) + + accessibility_df = pd.merge( + accessibility_df, + land_use_df[["MAZ", "MAZ_ORIGINAL"]].rename(columns={"MAZ": "mgra"}), + how="left", + on="mgra", + ) + + accessibility_df.to_csv(os.path.join(test_dir, "accessibility.csv"), index=False) + + # currently household file has to have these two columns, even before annotation + # because annotate person happens before household and uses these two columns + # TODO find a way to get around this + #### + household_df = pd.read_csv(os.path.join(test_dir, "households.csv")) + + household_columns_dict = {"HHID": "household_id", "MAZ": "home_zone_id"} + + household_df.rename(columns=household_columns_dict, inplace=True) + + tm2_simulated_household_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "householdData_3.csv") + ) + tm2_simulated_household_df.rename(columns={"hh_id": "household_id"}, inplace=True) + + household_df = pd.merge( + household_df, + tm2_simulated_household_df[ + [ + "household_id", + "autos", + "automated_vehicles", + "transponder", + "cdap_pattern", + "jtf_choice", + ] + ], + how="inner", # tm2 is not 100% sample run + on="household_id", + ) + + household_df.to_csv(os.path.join(test_dir, "households.csv"), index=False) + + person_df = pd.read_csv(os.path.join(test_dir, "persons.csv")) + + person_columns_dict = {"HHID": "household_id", "PERID": "person_id"} + + person_df.rename(columns=person_columns_dict, inplace=True) + + tm2_simulated_person_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "personData_3.csv") + ) + tm2_simulated_person_df.rename(columns={"hh_id": "household_id"}, inplace=True) + + person_df = pd.merge( + person_df, + tm2_simulated_person_df[ + [ + "household_id", + "person_id", + "type", + "value_of_time", + "activity_pattern", + "imf_choice", + "inmf_choice", + "fp_choice", + "reimb_pct", + "workDCLogsum", + "schoolDCLogsum", + ] + ], + how="inner", # tm2 is not 100% sample run + on=["household_id", "person_id"], + ) + + # get tm2 simulated workplace and school location results + tm2_simulated_wsloc_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "wsLocResults_3.csv") + ) + tm2_simulated_wsloc_df.rename( + columns={"HHID": "household_id", "PersonID": "person_id"}, inplace=True + ) + + person_df = pd.merge( + person_df, + tm2_simulated_wsloc_df[ + [ + "household_id", + "person_id", + "WorkLocation", + "WorkLocationLogsum", # this is the same as `workDCLogsum` in tm2 person output + "SchoolLocation", + "SchoolLocationLogsum", # this is the same as `schoolDCLogsum` in tm2 person output + ] + ], + how="inner", # ctramp might not be 100% sample run + on=["household_id", "person_id"], + ) + + person_df.to_csv(os.path.join(test_dir, "persons.csv"), index=False) + #### + + +def create_summary(input_df, key, out_col="Share") -> pd.DataFrame: + """ + Create summary for the input data. + 1. group input data by the "key" column + 2. calculate the percent of input data records in each "key" category. + + :return: pd.DataFrame + """ + + out_df = input_df.groupby(key).size().reset_index(name="Count") + out_df[out_col] = round(out_df["Count"] / out_df["Count"].sum(), 4) + + return out_df[[key, out_col]] + + +def cosine_similarity(a, b): + """ + Computes cosine similarity between two vectors. + + Cosine similarity is used here as a metric to measure similarity between two sequence of numbers. + Two sequence of numbers are represented as vectors (in a multi-dimensional space) and cosine similiarity is defined as the cosine of the angle between them + i.e., dot products of the vectors divided by the product of their lengths. + + :return: + """ + + return dot(a, b) / (norm(a) * norm(b)) + + +def compare_simulated_against_target( + target_df: pd.DataFrame, + simulated_df: pd.DataFrame, + target_key: str, + simulated_key: str, +) -> bool: + """ + compares the simulated and target results by computing the cosine similarity between them. + + :return: + """ + + merged_df = pd.merge( + target_df, simulated_df, left_on=target_key, right_on=simulated_key, how="outer" + ) + merged_df = merged_df.fillna(0) + + logger.info("simulated vs target share:\n%s" % merged_df) + + similarity_value = cosine_similarity( + merged_df["Target_Share"].tolist(), merged_df["Simulated_Share"].tolist() + ) + + logger.info("cosine similarity:\n%s" % similarity_value) + + return similarity_value diff --git a/test/conftest.py b/test/conftest.py new file mode 100644 index 000000000..7d8b33203 --- /dev/null +++ b/test/conftest.py @@ -0,0 +1,105 @@ +import os + +import orca +import pandas as pd +import pytest +from activitysim.core import pipeline +from activitysim.core.los import Network_LOS as los + + +@pytest.fixture(scope="module") +def initialize_pipeline( + module: str, tables: dict[str, str], initialize_network_los: bool +) -> pipeline.Pipeline: + test_dir = os.path.join("test", module) + configs_dir = os.path.join(test_dir, "configs") + data_dir = os.path.join(test_dir, "data") + output_dir = os.path.join(test_dir, "output") + + if os.path.isdir(configs_dir): + orca.add_injectable("configs_dir", configs_dir) + + if os.path.isdir(data_dir): + orca.add_injectable("data_dir", data_dir) + + if os.path.isdir(test_dir): + if not os.path.isdir(output_dir): + os.mkdir(output_dir) + orca.add_injectable("output_dir", output_dir) + + # Read in the input test dataframes + for dataframe_name, idx_name in tables.items(): + df = pd.read_csv( + os.path.join("test", module, "data", f"{dataframe_name}.csv"), + index_col=idx_name, + ) + orca.add_table(dataframe_name, df) + + if initialize_network_los: + net_los = los() + net_los.load_data() + orca.add_injectable("network_los", net_los) + + # Add an output directory in current working directory if it's not already there + try: + os.makedirs("output") + except FileExistsError: + # directory already exists + pass + + # Add the dataframes to the pipeline + pipeline.open_pipeline() + pipeline.add_checkpoint(module) + pipeline.close_pipeline() + + # By convention, this method needs to yield something + yield pipeline._PIPELINE + + if pipeline.is_open(): + pipeline.close_pipeline() + + +@pytest.fixture(scope="module") +def reconnect_pipeline( + module: str, initialize_network_los: bool, load_checkpoint: str +) -> pipeline.Pipeline: + test_dir = os.path.join("test", module) + configs_dir = os.path.join(test_dir, "configs") + data_dir = os.path.join(test_dir, "data") + output_dir = os.path.join(test_dir, "output") + + if os.path.isdir(configs_dir): + orca.add_injectable("configs_dir", configs_dir) + + if os.path.isdir(data_dir): + orca.add_injectable("data_dir", data_dir) + + if os.path.isdir(test_dir): + if not os.path.isdir(output_dir): + os.mkdir(output_dir) + orca.add_injectable("output_dir", output_dir) + + # Read in the existing pipeline + orca.add_injectable("pipeline_file_path", output_dir) + + if initialize_network_los: + net_los = los() + net_los.load_data() + orca.add_injectable("network_los", net_los) + + # Add an output directory in current working directory if it's not already there + try: + os.makedirs("output") + except FileExistsError: + # directory already exists + pass + + pipeline.open_pipeline(resume_after=load_checkpoint) + pipeline.add_checkpoint(module) + pipeline.close_pipeline() + # By convention, this method needs to yield something + yield pipeline._PIPELINE + + # pytest teardown code + if pipeline.is_open(): + pipeline.close_pipeline() diff --git a/test/joint_tour_frequency/.gitkeep b/test/joint_tour_frequency/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/test/joint_tours/.gitkeep b/test/joint_tours/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/test/joint_tours/configs/JointTourFrequency.xls b/test/joint_tours/configs/JointTourFrequency.xls new file mode 100644 index 0000000000000000000000000000000000000000..2eb7699bb7834fc87281d584c5cefe0416a62155 GIT binary patch literal 95232 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 EH}Ov4asU7T literal 0 HcmV?d00001 diff --git a/test/joint_tours/configs/annotate_households.csv b/test/joint_tours/configs/annotate_households.csv new file mode 100644 index 000000000..eead2858c --- /dev/null +++ b/test/joint_tours/configs/annotate_households.csv @@ -0,0 +1,19 @@ +Description,Target,Expression +#,, annotate households table after import +,_PERSON_COUNT,"lambda query, persons, households: persons.query(query).groupby('household_id').size().reindex(households.index).fillna(0).astype(np.int8)" +num_adults,num_adults,"_PERSON_COUNT('adult', persons, households)" +num_children,num_children,"_PERSON_COUNT('~adult', persons, households)" +num_travel_active,num_travel_active,persons.travel_active.astype(int).groupby(persons.household_id).sum().reindex(households.index).fillna(0).astype(np.int8) +num_travel_active_preschoolers,num_travel_active_preschoolers,((persons.ptype == PTYPE_PRESCHOOL) & persons.travel_active).astype(int).groupby(persons.household_id).sum().reindex(households.index).fillna(0).astype(np.int8) +num_travel_active_non_preschoolers,num_travel_active_non_preschoolers,num_travel_active - num_travel_active_preschoolers +participates_in_jtf_model,participates_in_jtf_model,(num_travel_active > 1) & (num_travel_active_non_preschoolers > 0) +number of travel active fulltime workers,num_travel_active_full_time_workers,"_PERSON_COUNT('(ptype == 1) & (cdap_activity != \'H\')', persons, households)" +number of travel active parttime workers,num_travel_active_part_time_workers,"_PERSON_COUNT('(ptype == 2) & (cdap_activity != \'H\')', persons, households)" +number of travel active university student,num_travel_active_university_students,"_PERSON_COUNT('(ptype == 3) & (cdap_activity != \'H\')', persons, households)" +number of travel active non-workers,num_travel_active_non_workers,"_PERSON_COUNT('(ptype == 4) & (cdap_activity != \'H\')', persons, households)" +number of travel active retirees,num_travel_active_retirees,"_PERSON_COUNT('(ptype == 5) & (cdap_activity != \'H\')', persons, households)" +number of travel active driving age students,num_travel_active_driving_age_students,"_PERSON_COUNT('(ptype == 6) & (cdap_activity != \'H\')', persons, households)" +number of travel active pre-driving age school kids,num_travel_active_pre_driving_age_school_kids,"_PERSON_COUNT('(ptype == 7) & (cdap_activity != \'H\')', persons, households)" +number of travel active pre-school kids,num_travel_active_pre_school_kids,"_PERSON_COUNT('(ptype == 8) & (cdap_activity != \'H\')', persons, households)" +number of travel active adults,num_travel_active_adults,"_PERSON_COUNT('adult & (cdap_activity != \'H\')', persons, households)" +number of travel active chilren,num_travel_active_children,"_PERSON_COUNT('~adult & (cdap_activity != \'H\')', persons, households)" \ No newline at end of file diff --git a/test/joint_tours/configs/annotate_landuse.csv b/test/joint_tours/configs/annotate_landuse.csv new file mode 100644 index 000000000..65237c0ad --- /dev/null +++ b/test/joint_tours/configs/annotate_landuse.csv @@ -0,0 +1,6 @@ +Description,Target,Expression +#,, annotate landuse table after import +household_density,household_density,land_use.TOTHH / land_use.TOTACRE +employment_density,employment_density,land_use.TOTEMP / land_use.TOTACRE +population_density,population_density,land_use.TOTPOP / land_use.TOTACRE +density_index,density_index,(household_density *employment_density) / (household_density + employment_density).clip(lower=1) \ No newline at end of file diff --git a/test/joint_tours/configs/annotate_persons.csv b/test/joint_tours/configs/annotate_persons.csv new file mode 100644 index 000000000..6af8a61d7 --- /dev/null +++ b/test/joint_tours/configs/annotate_persons.csv @@ -0,0 +1,16 @@ +Description,Target,Expression +#,, annotate persons table after import +,ptype,0 +,ptype,"np.where(persons.type == 'Full-time worker', 1, ptype)" +,ptype,"np.where(persons.type == 'Part-time worker', 2, ptype)" +,ptype,"np.where(persons.type == 'University student', 3, ptype)" +,ptype,"np.where(persons.type == 'Non-worker', 4, ptype)" +,ptype,"np.where(persons.type == 'Retired', 5, ptype)" +,ptype,"np.where(persons.type == 'Student of driving age', 6, ptype)" +,ptype,"np.where(persons.type == 'Student of non-driving age', 7, ptype)" +,ptype,"np.where(persons.type == 'Child too young for school', 8, ptype)" +home_zone_id,home_zone_id,"reindex(households.home_zone_id, persons.household_id)" +travel_active,travel_active,persons.cdap_activity != CDAP_ACTIVITY_HOME +# adult is needed as it's harded coded in activitysim core overlap.py +adult,adult,ptype<=6 +child,child,ptype>6 \ No newline at end of file diff --git a/test/joint_tours/configs/annotate_persons_jtp.csv b/test/joint_tours/configs/annotate_persons_jtp.csv new file mode 100644 index 000000000..a72c86605 --- /dev/null +++ b/test/joint_tours/configs/annotate_persons_jtp.csv @@ -0,0 +1,3 @@ +Description,Target,Expression +#,, annotate persons table after joint_tour_participation model has run +num_joint_tours,num_joint_tours,"joint_tour_participants.groupby('person_id').size().reindex(persons.index).fillna(0).astype(np.int8)" diff --git a/test/joint_tours/configs/annotate_tours.csv b/test/joint_tours/configs/annotate_tours.csv new file mode 100644 index 000000000..225abe7f8 --- /dev/null +++ b/test/joint_tours/configs/annotate_tours.csv @@ -0,0 +1,6 @@ +Description,Target,Expression +,tour_category,tours.tour_category.str.lower() +,tour_purpose,tours.tour_purpose.str.lower() +,tour_type,tours.tour_purpose.str.lower() +,origin,tours.orig_mgra +,destination,tours.dest_mgra diff --git a/test/joint_tours/configs/constants.yaml b/test/joint_tours/configs/constants.yaml new file mode 100644 index 000000000..b0bd5a1f3 --- /dev/null +++ b/test/joint_tours/configs/constants.yaml @@ -0,0 +1,68 @@ +## ActivitySim +## See full license in LICENSE.txt. + + +#HHT_NONE: 0 +#HHT_FAMILY_MARRIED: 1 +#HHT_FAMILY_MALE: 2 +#HHT_FAMILY_FEMALE: 3 +#HHT_NONFAMILY_MALE_ALONE: 4 +#HHT_NONFAMILY_MALE_NOTALONE: 5 +#HHT_NONFAMILY_FEMALE_ALONE: 6 +#HHT_NONFAMILY_FEMALE_NOTALONE: 7 + +# convenience for expression files +HHT_NONFAMILY: [4, 5, 6, 7] +HHT_FAMILY: [1, 2, 3] + +PSTUDENT_GRADE_OR_HIGH: 1 +PSTUDENT_UNIVERSITY: 2 +PSTUDENT_NOT: 3 + +GRADE_SCHOOL_MAX_AGE: 14 +GRADE_SCHOOL_MIN_AGE: 5 + +SCHOOL_SEGMENT_NONE: 0 +SCHOOL_SEGMENT_GRADE: 1 +SCHOOL_SEGMENT_HIGH: 2 +SCHOOL_SEGMENT_UNIV: 3 + +INCOME_SEGMENT_LOW: 1 +INCOME_SEGMENT_MED: 2 +INCOME_SEGMENT_HIGH: 3 +INCOME_SEGMENT_VERYHIGH: 4 + +PEMPLOY_FULL: 1 +PEMPLOY_PART: 2 +PEMPLOY_NOT: 3 +PEMPLOY_CHILD: 4 + +PTYPE_FULL: &ptype_full 1 +PTYPE_PART: &ptype_part 2 +PTYPE_UNIVERSITY: &ptype_university 3 +PTYPE_NONWORK: &ptype_nonwork 4 +PTYPE_RETIRED: &ptype_retired 5 +PTYPE_DRIVING: &ptype_driving 6 +PTYPE_SCHOOL: &ptype_school 7 +PTYPE_PRESCHOOL: &ptype_preschool 8 + +# these appear as column headers in non_mandatory_tour_frequency.csv +PTYPE_NAME: + *ptype_full: PTYPE_FULL + *ptype_part: PTYPE_PART + *ptype_university: PTYPE_UNIVERSITY + *ptype_nonwork: PTYPE_NONWORK + *ptype_retired: PTYPE_RETIRED + *ptype_driving: PTYPE_DRIVING + *ptype_school: PTYPE_SCHOOL + *ptype_preschool: PTYPE_PRESCHOOL + + +CDAP_ACTIVITY_MANDATORY: M +CDAP_ACTIVITY_NONMANDATORY: N +CDAP_ACTIVITY_HOME: H + +# Correction for transit skim expressions +# e.g. MTC transit skims (Cube TRANPLAN skims) use scaled ints and +# therefore need to be divided by the scale factor if used in expressions +TRANSIT_SCALE_FACTOR: 100 diff --git a/test/joint_tours/configs/initialize_households.yaml b/test/joint_tours/configs/initialize_households.yaml new file mode 100644 index 000000000..a5cabc3df --- /dev/null +++ b/test/joint_tours/configs/initialize_households.yaml @@ -0,0 +1,38 @@ +annotate_tables: + - tablename: persons + column_map: + HHID: household_id + PERID: person_id + AGEP: age + SEX: sex + SCHL: education_attainment + OCCP: occupation + WKHP: hours_worked + WKW: weeks_worked + EMPLOYED: employment_status + ESR: esr + SCHG: grade_attending + activity_pattern: cdap_activity + annotate: + SPEC: annotate_persons + DF: persons + TABLES: + - households + - tablename: households + column_map: + HHID: household_id + MAZ: home_zone_id + HHINCADJ: income + NWRKRS_ESR: num_workers + VEH: auto_ownership + NP: hhsize + HHT: hh_type + BLD: building_size + TYPE: hh_unit_type + MTCCountyID: county_id + annotate: + SPEC: annotate_households + DF: households + TABLES: + - persons + - land_use \ No newline at end of file diff --git a/test/joint_tours/configs/initialize_landuse.yaml b/test/joint_tours/configs/initialize_landuse.yaml new file mode 100644 index 000000000..7cc1d7e34 --- /dev/null +++ b/test/joint_tours/configs/initialize_landuse.yaml @@ -0,0 +1,54 @@ +annotate_tables: + - tablename: land_use + column_map: + MAZ_ORIGINAL: zone_id + CountyID: county_id + DistID: DISTRICT + HH: TOTHH + POP: TOTPOP + ACRES: TOTACRE + emp_total: TOTEMP + annotate: + SPEC: annotate_landuse + DF: land_use + - tablename: accessibility + column_map: + column_1: nonmandatory_auto_accessibility + column_2: nonmandatory_transit_accessibility + column_3: nonmandatory_nm_accessibility + column_4: nonmandatory_sov0_accessibility + column_5: nonmandatory_sov1_accessibility + column_6: nonmandatory_sov2_accessibility + column_7: nonmandatory_hov0_accessibility + column_8: nonmandatory_hov1_accessibility + column_9: nonmandatory_hov2_accessibility + column_10: shop_hov_insufficient_accessibility + column_11: shop_hov_sufficient_accessibility + column_12: shop_hov_oversufficient_accessibility + column_13: maint_hov_insufficient_accessibility + column_14: maint_hov_sufficient_accessibility + column_15: maint_hov_oversufficient_accessibility + column_16: eat_hov_insufficient_accessibility + column_17: eat_hov_sufficient_accessibility + column_18: eat_hov_oversufficient_accessibility + column_19: visit_hov_insufficient_accessibility + column_20: visit_hov_sufficient_accessibility + column_21: visit_hov_oversufficient_accessibility + column_22: discr_hov_insufficient_accessibility + column_23: discr_hov_sufficient_accessibility + column_24: discr_hov_oversufficient_accessibility + column_25: escort_hov_insufficient_accessibility + column_26: escort_hov_sufficient_accessibility + column_27: escort_hov_oversufficient_accessibility + column_28: shop_sov_insufficient_accessibility + column_29: shop_sov_sufficient_accessibility + column_30: shop_sov_oversufficient_accessibility + column_31: maint_sov_insufficient_accessibility + column_32: maint_sov_sufficient_accessibility + column_33: maint_sov_oversufficient_accessibility + column_40: discr_sov_insufficient_accessibility + column_41: discr_sov_sufficient_accessibility + column_42: discr_sov_oversufficient_accessibility + column_45: total_emp_accessibility + column_47: hh_walktransit_accessibility + mgra : zone_id \ No newline at end of file diff --git a/test/joint_tours/configs/initialize_tours.yaml b/test/joint_tours/configs/initialize_tours.yaml new file mode 100644 index 000000000..999382c62 --- /dev/null +++ b/test/joint_tours/configs/initialize_tours.yaml @@ -0,0 +1,6 @@ +# +annotate_tours: + SPEC: annotate_tours + DF: tours + TABLES: + - land_use \ No newline at end of file diff --git a/test/joint_tours/configs/joint_tour_frequency_composition.csv b/test/joint_tours/configs/joint_tour_frequency_composition.csv new file mode 100644 index 000000000..2cace7b25 --- /dev/null +++ b/test/joint_tours/configs/joint_tour_frequency_composition.csv @@ -0,0 +1,99 @@ +Label,Description,Expression,Coefficient +,Constant for shopping tour,@df.shopping,coef_constant_for_shopping_tour +,Constant for Maintenance tour,@df.othmaint,coef_constant_for_maintenance_tour +,Constant for eating out tour,@df.eatout,coef_constant_for_eating_out_tour +,Constant for visiting tour,@df.social,coef_constant_for_visiting_tour +,Constant for discretionary tour,@df.othdiscr,coef_constant_for_discretionary_tour +,Constant for 2 shopping tour,@df.shopping==2,coef_constant_for_2_shopping_tour +,1 Shopping and 1 Maintenance Tour,@((df.shopping==1) & (df.othmaint==1)),coef_1_shopping_and_1_maintenance_tour +,1 Shopping and 1 Eating Out Tour,@((df.shopping==1) & (df.eatout==1)),coef_1_shopping_and_1_eating_out_tour +,1 Shopping and 1 Visiting Tour,@((df.shopping==1) & (df.social==1)),coef_1_shopping_and_1_visiting_tour +,1 Shopping and 1 Discretionary Tour,@((df.shopping==1) & (df.othdiscr==1)),coef_1_shopping_and_1_discretionary_tour +,Constant for 2 Maintenance tour,@df.othmaint==2,coef_constant_for_2_maintenance_tour +,1 Maintenance and 1 Eating Out Tour,@((df.othmaint==1) & (df.eatout==1)),coef_1_maintenance_and_1_eating_out_tour +,1 Maintenance and 1 Visiting Tour,@((df.othmaint==1) & (df.social==1)),coef_1_maintenance_and_1_visiting_tour +,1 Maintenance and 1 Discretionary Tour,@((df.othmaint==1) & (df.othdiscr==1)),coef_1_maintenance_and_1_discretionary_tour +,Constant for 2 eating out tour,@df.eatout==2,coef_constant_for_2_eating_out_tour +,1 Eating Out and 1 Visiting Tour,@((df.eatout==1) & (df.social==1)),coef_1_eating_out_and_1_visiting_tour +,1 Eating Out and 1 Discretionary Tour,@((df.eatout==1) & (df.othdiscr==1)),coef_1_eating_out_and_1_discretionary_tour +,Constant for 2 visiting tour,@df.social==2,coef_constant_for_2_visiting_tour +,1 Visiting and 1 Discretionary Tour,@((df.social==1) & (df.othdiscr==1)),coef_1_visiting_and_1_discretionary_tour +,Constant for 2 discretionary tour,othdiscr==2,coef_constant_for_2_discretionary_tour +,Number of Active Full time workers /Shopping,num_travel_active_full_time_workers * shopping,coef_number_of_active_full_time_workers_shopping +,Number of Active Non-workers /Shopping,num_travel_active_non_workers * shopping,coef_number_of_active_nonworkers_shopping +,Number of Active Pre- Driving Age School Children /Shopping,num_travel_active_pre_driving_age_school_kids * shopping,coef_number_of_active_pre_driving_age_school_children_shopping +,Number of Active Preschool Children /Shopping,num_travel_active_pre_school_kids * shopping,coef_number_of_active_preschool_children_shopping +,Number of Active Non-workers /Maintenance,num_travel_active_non_workers * othmaint,coef_number_of_active_nonworkers_maintenance +,Number of Active Retirees /Maintenance,num_travel_active_retirees * othmaint,coef_number_of_active_retirees_maintenance +,Number of Active Driving Age School Children /Maintenance,num_travel_active_driving_age_students * othmaint,coef_number_of_active_driving_age_school_children_maintenance +,Number of Active Preschool Children /Maintenance,num_travel_active_pre_school_kids * othmaint,coef_number_of_active_preschool_children_maintenance +,Number of Active Full time workers /Eating Out,num_travel_active_full_time_workers * eatout,coef_number_of_active_full_time_workers_eating_out +,Number of Active University Students /Eating Out,num_travel_active_university_students * eatout,coef_number_of_active_university_students_eating_out +,Number of Active Retirees /Eating Out,num_travel_active_retirees * eatout,coef_number_of_active_retirees_eating_out +,Number of Active Pre- Driving Age School Children /Eating Out,num_travel_active_pre_driving_age_school_kids * eatout,coef_number_of_active_pre_driving_age_school_children_eating_out +,Number of Active Preschool Children /Eating Out,num_travel_active_pre_school_kids * eatout,coef_number_of_active_preschool_children_eating_out +,Number of Active Pre- Driving Age School Children /Visiting,num_travel_active_pre_driving_age_school_kids * social,coef_number_of_active_pre_driving_age_school_children_visiting +,Number of Active Preschool Children /Visiting,num_travel_active_pre_school_kids * social,coef_number_of_active_preschool_children_visiting +,Number of Active Part time workers /Discretionary,num_travel_active_part_time_workers * othdiscr,coef_number_of_active_part_time_workers_discretionary +,Number of Active University Students /Discretionary,num_travel_active_university_students * othdiscr,coef_number_of_active_university_students_discretionary +,Number of Active Driving Age School Children /Discretionary,num_travel_active_driving_age_students * othdiscr,coef_number_of_active_driving_age_school_children_discretionary +,Number of Active Preschool Children /Discretionary,num_travel_active_pre_school_kids * othdiscr,coef_number_of_active_preschool_children_discretionary +,HH has more autos than workers/ Maintenance,(auto_ownership > num_workers) * othmaint,coef_hh_has_more_autos_than_workers_maintenance +,Income > $100k /Maintenance,(income>100000) * othmaint,coef_income_gtr_100k_maintenance +,"Income Less than $29,999 / Eating Out",(income<30000) * eatout,coef_income_less_than_29999__eating_out +,"Income Between $30,000 to $59,999 / Eating Out",((income>=30000) & (income<60000)) * othmaint,coef_income_between_30000_to_59999__eating_out +,"Income Less than $29,999 / Discretionary",(income<30000) * othdiscr,coef_income_less_than_29999__discretionary +,"Income Between $30,000 to $59,999 / Discretionary",((income>=30000) & (income<60000)) * othdiscr,coef_income_between_30000_to_59999__discretionary +,Shopping HOV accessibility for 2 Tours,((autosnum_workers)*shop_hov_oversufficient_accessibility)*(num_joint_tours==2)*shopping,coef_shopping_hov_accessibility_for_2_tours +,Maintenance HOV Accessibility,((autosnum_workers)*maint_hov_oversufficient_accessibility)*othmaint,coef_maintenance_hov_accessibility +,Discretionary HOV Accessibility,((autosnum_workers)*discr_hov_oversufficient_accessibility)*othdiscr,coef_discretionary_hov_accessibility +,Constant for Children Party/ Shopping Tour,@(df.purpose1==5)*(df.party1==2)+(df.purpose2==5)*(df.party2==2),coef_constant_for_children_party_shopping_tour +,Constant for Children Party/ Maintenance Tour,@(df.purpose1==6)*(df.party1==2)+(df.purpose2==6)*(df.party2==2),coef_constant_for_children_party_maintenance_tour +,Constant for Children Party/ Eating Out Tour,@(df.purpose1==7)*(df.party1==2)+(df.purpose2==7)*(df.party2==2),coef_constant_for_children_party_eating_out_tour +,Constant for Children Party/ Visiting Tour,@(df.purpose1==8)*(df.party1==2)+(df.purpose2==8)*(df.party2==2),coef_constant_for_children_party_visiting_tour +,Constant for Children Party/ Discretionary Tour,@(df.purpose1==9)*(df.party1==2)+(df.purpose2==9)*(df.party2==2),coef_constant_for_children_party_discretionary_tour +,Constant for Mixed Party/ Shopping Tour,@(df.purpose1==5)*(df.party1==2)+(df.purpose2==5)*(df.party2==2),coef_constant_for_mixed_party_shopping_tour +,Constant for Mixed Party/ Maintenance Tour,@(df.purpose1==6)*(df.party1==3)+(df.purpose2==6)*(df.party2==3),coef_constant_for_mixed_party_maintenance_tour +,Constant for Mixed Party/ Eating Out Tour,@(df.purpose1==7)*(df.party1==3)+(df.purpose2==7)*(df.party2==3),coef_constant_for_mixed_party_eating_out_tour +,Constant for Mixed Party/ Visiting Tour,@(df.purpose1==8)*(df.party1==3)+(df.purpose2==8)*(df.party2==3),coef_constant_for_mixed_party_visiting_tour +,Constant for Mixed Party/ Discretionary Tour,@(df.purpose1==9)*(df.party1==3)+(df.purpose2==9)*(df.party2==3),coef_constant_for_mixed_party_discretionary_tour +,Number of Active Full time workers /Adult Party,num_travel_active_full_time_workers * (party1==1) + num_travel_active_full_time_workers * (party2==1),coef_number_of_active_full_time_workers_adult_party +,Number of Active Part time workers /Adult Party,num_travel_active_part_time_workers * (party1==1) + num_travel_active_part_time_workers * (party2==1),coef_number_of_active_part_time_workers_adult_party +,Number of Active University Students /Adult Party,num_travel_active_university_students * (party1==1) + num_travel_active_university_students * (party2==1),coef_number_of_active_university_students_adult_party +,Number of Active Non-workers /Adult Party,num_travel_active_non_workers * (party1==1) + num_travel_active_non_workers * (party2==1),coef_number_of_active_nonworkers_adult_party +,Number of Active Retirees /Adult Party,num_travel_active_retirees * (party1==1) + num_travel_active_retirees * (party2==1),coef_number_of_active_retirees_adult_party +,Number of Active Driving Age School Children /Children Party,num_travel_active_driving_age_students * (party1==1) + num_travel_active_driving_age_students * (party2==1),coef_number_of_active_driving_age_school_children_children_party +,Number of Active Pre- Driving Age School Children /Children Party,num_travel_active_pre_driving_age_school_kids * (party1==2) + num_travel_active_pre_driving_age_school_kids * (party2==2),coef_number_of_active_pre_driving_age_school_children_children_party +,Number of Active Part time workers /Mixed Party,num_travel_active_part_time_workers * (party1==2) + num_travel_active_part_time_workers * (party2==2),coef_number_of_active_part_time_workers_mixed_party +,Number of Active Driving Age School Children /Mixed Party,num_travel_active_driving_age_students * (party1==3) + num_travel_active_driving_age_students * (party2==3),coef_number_of_active_driving_age_school_children_mixed_party +,Number of Active Pre- Driving Age School Children /Mixed Party,num_travel_active_pre_driving_age_school_kids * (party1==3) + num_travel_active_pre_driving_age_school_kids * (party2==3),coef_number_of_active_pre_driving_age_school_children_mixed_party +,Number of Active Preschool Children /Mixed Party,num_travel_active_pre_school_kids * (party1==3) + num_travel_active_pre_school_kids * (party2==3),coef_number_of_active_preschool_children_mixed_party +,HH has no autos / Mixed Party,@(df.autos==0)*(df.party1==3)+(df.autos==0)*(df.party2==3),coef_hh_has_no_autos__mixed_party +,HH has less autos than workers/ Mixed Party,@(df.autos100000)*(df.party1==2)+(df.income>100000)*(df.party2==2),coef_income_more_than_100k_child_party +,Income more than $100k /Mixed Party,@(df.income>100000)*(df.party1==3)+(df.income>100000)*(df.party2==3),coef_income_more_than_100k_mixed_party +,Log of max window overlaps between adults,@df.log_time_window_overlap_adult*((df.party1==1)+(df.party2==1)),coef_log_of_max_window_overlaps_between_adults +,Log of max window overlaps between children,@df.log_time_window_overlap_child*((df.party1==2)+(df.party2==2)),coef_log_of_max_window_overlaps_between_children +,Log of max window overlaps between adult & child,@df.log_time_window_overlap_adult_child*((df.party1==3)+(df.party2==3)),coef_log_of_max_window_overlaps_between_adult_child +,Not more than 1 travel active adult in HH,@(df.num_travel_active_adults < 2)*(((df.party1==1)+(df.party2==1))>0),coef_unavailable +,Not more than 1 travel active child in HH,@(df.num_travel_active_children < 2)*(((df.party1==2)+(df.party2==2))>0),coef_unavailable +,No travel-active pair adult-child in HH ,@((df.num_travel_active_adults*df.num_travel_active_children) ==0)*(((df.party1==3)+(df.party2==3))>0),coef_unavailable +,Adjustment for Children Party/ Shopping Tour,@(df.purpose1==5)*(df.party1==2)+(df.purpose2==5)*(df.party2==2),coef_adjustment_for_children_party_shopping_tour +,Adjustment for Children Party/ Maintenance Tour,@(df.purpose1==6)*(df.party1==2)+(df.purpose2==6)*(df.party2==2),coef_adjustment_for_children_party_maintenance_tour +,Adjustment for Children Party/ Eating Out Tour,@(df.purpose1==7)*(df.party1==2)+(df.purpose2==7)*(df.party2==2),coef_adjustment_for_children_party_eating_out_tour +,Adjustment for Children Party/ Visiting Tour,@(df.purpose1==8)*(df.party1==2)+(df.purpose2==8)*(df.party2==2),coef_adjustment_for_children_party_visiting_tour +,Adjustment for Children Party/ Discretionary Tour,@(df.purpose1==9)*(df.party1==2)+(df.purpose2==9)*(df.party2==2),coef_adjustment_for_children_party_discretionary_tour +,Adjustment for Mixed Party/ Shopping Tour,@(df.purpose1==5)*(df.party1==2)+(df.purpose2==5)*(df.party2==2),coef_adjustment_for_mixed_party_shopping_tour +,Adjustment for Mixed Party/ Maintenance Tour,@(df.purpose1==6)*(df.party1==3)+(df.purpose2==6)*(df.party2==3),coef_adjustment_for_mixed_party_maintenance_tour +,Adjustment for Mixed Party/ Eating Out Tour,@(df.purpose1==7)*(df.party1==3)+(df.purpose2==7)*(df.party2==3),coef_adjustment_for_mixed_party_eating_out_tour +,Adjustment for Mixed Party/ Visiting Tour,@(df.purpose1==8)*(df.party1==3)+(df.purpose2==8)*(df.party2==3),coef_adjustment_for_mixed_party_visiting_tour +,Adjustment for Mixed Party/ Discretionary Tour,@(df.purpose1==9)*(df.party1==3)+(df.purpose2==9)*(df.party2==3),coef_adjustment_for_mixed_party_discretionary_tour +,Adjustment for shopping tour,shopping,coef_adjustment_for_shopping_tour +,Adjustment for Maintenance tour,othmaint,coef_adjustment_for_maintenance_tour +,Adjustment for eating out tour,eatout,coef_adjustment_for_eating_out_tour +,Adjustment for visiting tour,social,coef_adjustment_for_visiting_tour +,Adjustment for discretionary tour,othdiscr,coef_adjustment_for_discretionary_tour +,Adjustment for share of 2 Joint Tours,num_joint_tours==2,coef_adjustment_for_share_of_2_joint_tours +,TM2 Adjustment for Children Party,@(df.party1==2)+(df.party2==2),coef_tm2_adjustment_for_children_party +,TM2 Adjustment for Mixed Party,@(df.party1==3)+(df.party2==3),coef_tm2_adjustment_for_mixed_party +,TM2 adjustment for share of 2 Joint Tours,num_joint_tours==2,coef_tm2_adjustment_for_share_of_2_joint_tours diff --git a/test/joint_tours/configs/joint_tour_frequency_composition.yaml b/test/joint_tours/configs/joint_tour_frequency_composition.yaml new file mode 100644 index 000000000..ce31ea8df --- /dev/null +++ b/test/joint_tours/configs/joint_tour_frequency_composition.yaml @@ -0,0 +1,35 @@ +LOGIT_TYPE: MNL + +SPEC: joint_tour_frequency_composition.csv +COEFFICIENTS: joint_tour_frequency_composition_coeffs.csv + +preprocessor: + SPEC: joint_tour_frequency_composition_annotate_households_preprocessor.csv + DF: households + TABLES: + - persons + +ALTS_PREPROCESSOR: + SPEC: joint_tour_frequency_composition_annotate_alt_preprocessor.csv + DF: alt_tdd + +# define the structure of alternative table +ALTS_TABLE_STRUCTURE: + PURPOSE: + COLUMNS: + - purpose1 + - purpose2 + VALUE_MAP: + 5: shopping + 6: othmaint + 7: eatout + 8: social + 9: othdiscr + COMPOSITION: + COLUMNS: + - party1 + - party2 + VALUE_MAP: + 1: adults + 2: children + 3: mixed \ No newline at end of file diff --git a/test/joint_tours/configs/joint_tour_frequency_composition_alternatives.csv b/test/joint_tours/configs/joint_tour_frequency_composition_alternatives.csv new file mode 100644 index 000000000..657f98741 --- /dev/null +++ b/test/joint_tours/configs/joint_tour_frequency_composition_alternatives.csv @@ -0,0 +1,151 @@ +alt,purpose1,purpose2,party1,party2 +1,5,0,1,0 +2,5,0,2,0 +3,5,0,3,0 +4,6,0,1,0 +5,6,0,2,0 +6,6,0,3,0 +7,7,0,1,0 +8,7,0,2,0 +9,7,0,3,0 +10,8,0,1,0 +11,8,0,2,0 +12,8,0,3,0 +13,9,0,1,0 +14,9,0,2,0 +15,9,0,3,0 +16,5,5,1,1 +17,5,5,1,2 +18,5,5,1,3 +19,5,5,2,1 +20,5,5,2,2 +21,5,5,2,3 +22,5,5,3,1 +23,5,5,3,2 +24,5,5,3,3 +25,5,6,1,1 +26,5,6,1,2 +27,5,6,1,3 +28,5,6,2,1 +29,5,6,2,2 +30,5,6,2,3 +31,5,6,3,1 +32,5,6,3,2 +33,5,6,3,3 +34,5,7,1,1 +35,5,7,1,2 +36,5,7,1,3 +37,5,7,2,1 +38,5,7,2,2 +39,5,7,2,3 +40,5,7,3,1 +41,5,7,3,2 +42,5,7,3,3 +43,5,8,1,1 +44,5,8,1,2 +45,5,8,1,3 +46,5,8,2,1 +47,5,8,2,2 +48,5,8,2,3 +49,5,8,3,1 +50,5,8,3,2 +51,5,8,3,3 +52,5,9,1,1 +53,5,9,1,2 +54,5,9,1,3 +55,5,9,2,1 +56,5,9,2,2 +57,5,9,2,3 +58,5,9,3,1 +59,5,9,3,2 +60,5,9,3,3 +61,6,6,1,1 +62,6,6,1,2 +63,6,6,1,3 +64,6,6,2,1 +65,6,6,2,2 +66,6,6,2,3 +67,6,6,3,1 +68,6,6,3,2 +69,6,6,3,3 +70,6,7,1,1 +71,6,7,1,2 +72,6,7,1,3 +73,6,7,2,1 +74,6,7,2,2 +75,6,7,2,3 +76,6,7,3,1 +77,6,7,3,2 +78,6,7,3,3 +79,6,8,1,1 +80,6,8,1,2 +81,6,8,1,3 +82,6,8,2,1 +83,6,8,2,2 +84,6,8,2,3 +85,6,8,3,1 +86,6,8,3,2 +87,6,8,3,3 +88,6,9,1,1 +89,6,9,1,2 +90,6,9,1,3 +91,6,9,2,1 +92,6,9,2,2 +93,6,9,2,3 +94,6,9,3,1 +95,6,9,3,2 +96,6,9,3,3 +97,7,7,1,1 +98,7,7,1,2 +99,7,7,1,3 +100,7,7,2,1 +101,7,7,2,2 +102,7,7,2,3 +103,7,7,3,1 +104,7,7,3,2 +105,7,7,3,3 +106,7,8,1,1 +107,7,8,1,2 +108,7,8,1,3 +109,7,8,2,1 +110,7,8,2,2 +111,7,8,2,3 +112,7,8,3,1 +113,7,8,3,2 +114,7,8,3,3 +115,7,9,1,1 +116,7,9,1,2 +117,7,9,1,3 +118,7,9,2,1 +119,7,9,2,2 +120,7,9,2,3 +121,7,9,3,1 +122,7,9,3,2 +123,7,9,3,3 +124,8,8,1,1 +125,8,8,1,2 +126,8,8,1,3 +127,8,8,2,1 +128,8,8,2,2 +129,8,8,2,3 +130,8,8,3,1 +131,8,8,3,2 +132,8,8,3,3 +133,8,9,1,1 +134,8,9,1,2 +135,8,9,1,3 +136,8,9,2,1 +137,8,9,2,2 +138,8,9,2,3 +139,8,9,3,1 +140,8,9,3,2 +141,8,9,3,3 +142,9,9,1,1 +143,9,9,1,2 +144,9,9,1,3 +145,9,9,2,1 +146,9,9,2,2 +147,9,9,2,3 +148,9,9,3,1 +149,9,9,3,2 +150,9,9,3,3 diff --git a/test/joint_tours/configs/joint_tour_frequency_composition_annotate_alt_preprocessor.csv b/test/joint_tours/configs/joint_tour_frequency_composition_annotate_alt_preprocessor.csv new file mode 100644 index 000000000..389d28a13 --- /dev/null +++ b/test/joint_tours/configs/joint_tour_frequency_composition_annotate_alt_preprocessor.csv @@ -0,0 +1,7 @@ +Description,Target,Expression +,shopping,"np.where(alt_tdd.purpose1 == 5, 1, 0) + np.where(alt_tdd.purpose2 == 5, 1, 0)" +,othmaint,"np.where(alt_tdd.purpose1 == 6, 1, 0) + np.where(alt_tdd.purpose2 == 6, 1, 0)" +,eatout,"np.where(alt_tdd.purpose1 == 7, 1, 0) + np.where(alt_tdd.purpose2 == 7, 1, 0)" +,social,"np.where(alt_tdd.purpose1 == 8, 1, 0) + np.where(alt_tdd.purpose2 == 8, 1, 0)" +,othdiscr,"np.where(alt_tdd.purpose1 == 9, 1, 0) + np.where(alt_tdd.purpose2 == 9, 1, 0)" +,num_joint_tours,shopping+othmaint+eatout+social+othdiscr \ No newline at end of file diff --git a/test/joint_tours/configs/joint_tour_frequency_composition_annotate_households_preprocessor.csv b/test/joint_tours/configs/joint_tour_frequency_composition_annotate_households_preprocessor.csv new file mode 100644 index 000000000..1b4a5c91d --- /dev/null +++ b/test/joint_tours/configs/joint_tour_frequency_composition_annotate_households_preprocessor.csv @@ -0,0 +1,8 @@ +Description,Target,Expression +,_HH_OVERLAPS,"hh_time_window_overlap(households, persons)" +,time_window_overlap_adult,_HH_OVERLAPS['aa'] +,time_window_overlap_child,_HH_OVERLAPS['cc'] +,time_window_overlap_adult_child,_HH_OVERLAPS['ac'] +logTimeWindowOverlapAdult,log_time_window_overlap_adult,np.log1p(time_window_overlap_adult) +logTimeWindowOverlapChild,log_time_window_overlap_child,np.log1p(time_window_overlap_child) +logTimeWindowOverlapAdultChild,log_time_window_overlap_adult_child,np.log1p(time_window_overlap_adult_child) diff --git a/test/joint_tours/configs/joint_tour_frequency_composition_coeffs.csv b/test/joint_tours/configs/joint_tour_frequency_composition_coeffs.csv new file mode 100644 index 000000000..da82e8fa9 --- /dev/null +++ b/test/joint_tours/configs/joint_tour_frequency_composition_coeffs.csv @@ -0,0 +1,97 @@ +coefficient_name,value,constrain +coef_unavailable,-999,T +coef_constant_for_shopping_tour,0,T +coef_constant_for_maintenance_tour,-1.477,F +coef_constant_for_eating_out_tour,0.5796,F +coef_constant_for_visiting_tour,-1.0037,F +coef_constant_for_discretionary_tour,-1.1195,F +coef_constant_for_2_shopping_tour,-13.70946409,F +coef_1_shopping_and_1_maintenance_tour,-12.13684801,F +coef_1_shopping_and_1_eating_out_tour,-12.79892713,F +coef_1_shopping_and_1_visiting_tour,-12.22077221,F +coef_1_shopping_and_1_discretionary_tour,-12.57867869,F +coef_constant_for_2_maintenance_tour,-13.43572169,F +coef_1_maintenance_and_1_eating_out_tour,-12.18915033,F +coef_1_maintenance_and_1_visiting_tour,-11.81267905,F +coef_1_maintenance_and_1_discretionary_tour,-12.28867197,F +coef_constant_for_2_eating_out_tour,-13.15388273,F +coef_1_eating_out_and_1_visiting_tour,-13.15388273,F +coef_1_eating_out_and_1_discretionary_tour,-12.56102569,F +coef_constant_for_2_visiting_tour,-13.15388273,F +coef_1_visiting_and_1_discretionary_tour,-12.37222202,F +coef_constant_for_2_discretionary_tour,-13.23532342,F +coef_number_of_active_full_time_workers_shopping,0.09864381,F +coef_number_of_active_nonworkers_shopping,0.393630718,F +coef_number_of_active_pre_driving_age_school_children_shopping,-0.313021042,F +coef_number_of_active_preschool_children_shopping,-1.213950718,F +coef_number_of_active_nonworkers_maintenance,0.322738327,F +coef_number_of_active_retirees_maintenance,0.298632515,F +coef_number_of_active_driving_age_school_children_maintenance,0.503901856,F +coef_number_of_active_preschool_children_maintenance,-1.160523204,F +coef_number_of_active_full_time_workers_eating_out,-0.305934663,F +coef_number_of_active_university_students_eating_out,-0.65706029,F +coef_number_of_active_retirees_eating_out,-0.391710731,F +coef_number_of_active_pre_driving_age_school_children_eating_out,-0.25140082,F +coef_number_of_active_preschool_children_eating_out,-1.700731169,F +coef_number_of_active_pre_driving_age_school_children_visiting,0.162335324,F +coef_number_of_active_preschool_children_visiting,-0.96955678,F +coef_number_of_active_part_time_workers_discretionary,0.217898126,F +coef_number_of_active_university_students_discretionary,-0.610578234,F +coef_number_of_active_driving_age_school_children_discretionary,0.359485499,F +coef_number_of_active_preschool_children_discretionary,-1.244458661,F +coef_hh_has_more_autos_than_workers_maintenance,-0.336188392,F +coef_income_gtr_100k_maintenance,-0.475730683,F +coef_income_less_than_29999__eating_out,-1.282190776,F +coef_income_between_30000_to_59999__eating_out,-0.275046208,F +coef_income_less_than_29999__discretionary,-0.352579013,F +coef_income_between_30000_to_59999__discretionary,-0.191735343,F +coef_shopping_hov_accessibility_for_2_tours,0.039513822,F +coef_maintenance_hov_accessibility,0.128132691,F +coef_discretionary_hov_accessibility,0.089590553,F +coef_constant_for_children_party_shopping_tour,-5.374907972,F +coef_constant_for_children_party_maintenance_tour,-5.144798184,F +coef_constant_for_children_party_eating_out_tour,-4.09806907,F +coef_constant_for_children_party_visiting_tour,-4.09806907,F +coef_constant_for_children_party_discretionary_tour,-4.09806907,F +coef_constant_for_mixed_party_shopping_tour,0.575879495,F +coef_constant_for_mixed_party_maintenance_tour,0.515873866,F +coef_constant_for_mixed_party_eating_out_tour,0.168592084,F +coef_constant_for_mixed_party_visiting_tour,0.078060666,F +coef_constant_for_mixed_party_discretionary_tour,0.856042068,F +coef_number_of_active_full_time_workers_adult_party,0.599335502,F +coef_number_of_active_part_time_workers_adult_party,1.113944272,F +coef_number_of_active_university_students_adult_party,0.231138167,F +coef_number_of_active_nonworkers_adult_party,0.341446999,F +coef_number_of_active_retirees_adult_party,0.657220801,F +coef_number_of_active_driving_age_school_children_children_party,0.580109231,F +coef_number_of_active_pre_driving_age_school_children_children_party,0.580109231,F +coef_number_of_active_part_time_workers_mixed_party,0.522327137,F +coef_number_of_active_driving_age_school_children_mixed_party,0.216908669,F +coef_number_of_active_pre_driving_age_school_children_mixed_party,0.31440104,F +coef_number_of_active_preschool_children_mixed_party,0.897670235,F +coef_hh_has_no_autos__mixed_party,-2.920728233,F +coef_hh_has_less_autos_than_workers_mixed_party,-0.546339245,F +coef_income_more_than_100k_child_party,-1.189112151,F +coef_income_more_than_100k_mixed_party,-0.303217156,F +coef_log_of_max_window_overlaps_between_adults,2.96902119,F +coef_log_of_max_window_overlaps_between_children,4.673601828,F +coef_log_of_max_window_overlaps_between_adult_child,3.523795377,F +coef_adjustment_for_children_party_shopping_tour,0.407745781,F +coef_adjustment_for_children_party_maintenance_tour,0.284925252,F +coef_adjustment_for_children_party_eating_out_tour,0,T +coef_adjustment_for_children_party_visiting_tour,0.966264444,F +coef_adjustment_for_children_party_discretionary_tour,0.144740532,F +coef_adjustment_for_mixed_party_shopping_tour,0.681178558,F +coef_adjustment_for_mixed_party_maintenance_tour,0.476324741,F +coef_adjustment_for_mixed_party_eating_out_tour,0.827297043,F +coef_adjustment_for_mixed_party_visiting_tour,0.691826384,F +coef_adjustment_for_mixed_party_discretionary_tour,0.697808415,F +coef_adjustment_for_shopping_tour,0,T +coef_adjustment_for_maintenance_tour,0.06575155,F +coef_adjustment_for_eating_out_tour,0.0643679,F +coef_adjustment_for_visiting_tour,0.00785518,F +coef_adjustment_for_discretionary_tour,0.076075677,F +coef_adjustment_for_share_of_2_joint_tours,-1.214059893,F +coef_tm2_adjustment_for_children_party,0,F +coef_tm2_adjustment_for_mixed_party,0,F +coef_tm2_adjustment_for_share_of_2_joint_tours,-0.5,F diff --git a/test/joint_tours/configs/joint_tour_participation.csv b/test/joint_tours/configs/joint_tour_participation.csv new file mode 100644 index 000000000..9f3151129 --- /dev/null +++ b/test/joint_tours/configs/joint_tour_participation.csv @@ -0,0 +1,67 @@ +Label,Description,Expression,participate,not_participate +,Dummy for full-time worker in adult party,(ptype==1) & (composition=='adults'),coef_full_time_worker_adults_only_party, +,Dummy for part-time worker in adult party,(ptype==2) & (composition=='adults'),coef_part_time_worker_adults_only_party, +,Dummy for university student in adult party,(ptype==3) & (composition=='adults'),coef_university_students_adults_only_party, +,Dummy for nonworker in adult party,(ptype==4) & (composition=='adults'),coef_non_worker_adults_only_party, +,Dummy for retiree in adult party,(ptype==5) & (composition=='adults'),coef_retiree_adults_only_party, +,Dummy for driving school child in children party,(ptype==6) & (composition=='children'),coef_driving_age_student_children_only_party, +,Dummy for pre-driving school child in children party,(ptype==7) & (composition=='children'),coef_pre_driving_age_student_children_only_party, +,Dummy for preschool child in children party,(ptype==8) & (composition=='children'),coef_child_too_young_for_school_children_only_party, +util_full_time_worker_mixed_party,Dummy for full-time worker in mixed party,(ptype==1) & (composition=='mixed'),coef_full_time_worker_mixed_party, +util_part_time_worker_mixed_party,Dummy for part-time worker in mixed party,(ptype==2) & (composition=='mixed'),coef_part_time_worker_mixed_party, +util_university_student_mixed_party,Dummy for university student in mixed party,(ptype==3) & (composition=='mixed'),coef_university_student_mixed_party, +util_non_worker_mixed_party,Dummy for nonworker in mixed party,(ptype==4) & (composition=='mixed'),coef_non_worker_mixed_party, +util_retiree_mixed_party,Dummy for retiree in mixed party,(ptype==5) & (composition=='mixed'),coef_retiree_mixed_party, +util_child_too_young_for_school_mixed_party,Dummy for driving school child in mixed party,(ptype==6) & (composition=='mixed'),coef_child_too_young_for_school_mixed_party, +util_pre_driving_age_student_mixed_party,Dummy for pre-driving school child in mixed party,(ptype==7) & (composition=='mixed'),coef_pre_driving_age_student_mixed_party, +util_driving_age_student_mixed_party,Dummy for preschool child in mixed party,(ptype==8) & (composition=='mixed'),coef_driving_age_student_mixed_party, +#,,,, +,Dummy for part-time worker on maintenance joint tour ,(ptype==2) & (tour_type=='othmaint'),coef_part_time_worker_specific_to_maintenance_joint_tours, +,Dummy for non-worker on maintenance joint tour ,(ptype==4) & (tour_type=='othmaint'),coef_non_worker_specific_to_maintenance_joint_tours, +,Dummy for preschool child on maintenance joint tour ,(ptype==8) & (tour_type=='othmaint'),coef_pre_school_kid_specific_to_maintenance_joint_tours, +,Dummy for full-time worker on eating out joint tour ,(ptype==1) & (tour_type=='eatout'),coef_full_time_worker_specific_to_eating_out_joint_tours, +,Dummy for part-time worker on eating out joint tour ,(ptype==2) & (tour_type=='eatout'),coef_part_time_worker_specific_to_eating_out_joint_tours, +,Dummy for pre-driving age school child on eating out joint tour ,(ptype==7) & (tour_type=='eatout'),coef_pre_driving_age_student_specific_to_eating_out_joint_tours, +,Dummy for part-time worker on discretionary joint tour ,(ptype==2) & (tour_type=='othdiscr'),coef_part_time_worker_specific_to_discretionary_joint_tours, +,Dummy for retiree on discretionary joint tour ,(ptype==5) & (tour_type=='othdiscr'),coef_retiree_specific_to_discretionary_joint_tours, +,Dummy for driving school child on discretionary joint tour ,(ptype==6) & (tour_type=='othdiscr'),coef_driving_age_student_specific_to_discretionary_joint_tours, +,Dummy for pre-driving school child on discretionary joint tour ,(ptype==7) & (tour_type=='othdiscr'),coef_pre_driving_age_student_specific_to_discretionary_joint_tours, +,Dummy for part-time worker on visiting joint tour ,(ptype==2) & (tour_type=='social'),coef_part_time_worker_specific_to_visiting_joint_tours, +,Dummy for non-worker on visiting joint tour ,(ptype==4) & (tour_type=='social'),coef_non_worker_specific_to_visiting_joint_tours, +,Dummy for retiree on visiting joint tour ,(ptype==5) & (tour_type=='social'),coef_retiree_specific_to_visiting_joint_tours, +,Dummy for driving school child on visiting joint tour ,(ptype==6) & (tour_type=='social'),coef_driving_age_student_specific_to_visiting_joint_tours, +,Dummy for preschool child on visiting joint tour ,(ptype==8) & (tour_type=='social'),coef_pre_school_kid_specific_to_visiting_joint_tours, +#,,,, +,Dummy for low car ownership for adult in adult party,(autosnum_workers)&(composition=='mixed')&adult,coef_adult_more_automobiles_than_workers_mixed_party, +,Dummy for no car for child in mixed party,(autos==0)&(composition=='mixed')&child,coef_child_zero_automobiles_mixed_party, +#,,,, +,Dummy for low income for adult in adult party,(income<30000)&(composition=='adults')&adult,coef_dummy_for_low_income_for_adult_in_adult_party, +,Dummy for high income for adult in mixed party,(income>100000)&(composition=='mixed')&adult,coef_dummy_for_high_income_for_adult_in_mixed_party, +,Dummy for high income for child in mixed party,(income>100000)&(composition=='mixed')&child,coef_dummy_for_high_income_for_child_in_mixed_party, +#,,,, +,No of HH joint tours for adult in adult party,(adult&(composition=='adults'))*num_hh_joint_tours,coef_adult_number_of_joint_tours_adult_only, +,No of HH joint tours for adult in mixed party,(adult&(composition=='mixed'))*num_hh_joint_tours,coef_adult_number_of_joint_tours_mixed, +,No of HH joint tours for child in children party,(child&(composition=='children'))*num_hh_joint_tours,coef_child_number_of_joint_tours_child_only, +,No of HH joint tours for child in mixed party,(child&(composition=='mixed'))*num_hh_joint_tours,coef_child_number_of_joint_tours_mixed, +#,,,, +,No of other HH adults for adult in adult party,(adult & (composition=='adults')) * (num_adults.clip(upper=4) - 1),coef_adult_number_of_other_adults_in_the_household_adults_only_party, +,No of other HH adults for adult in mixed party,(adult & (composition=='mixed')) * (num_adults.clip(upper=4) - 1),coef_adult_number_of_other_adults_in_the_household_mixed_party, +,No of other HH children for child in children party,(~adult & (composition=='children')) * (num_children.clip(upper=4) - 1),coef_child_number_of_other_children_in_the_household_child_only_party, +,No of other HH children for child in mixed party,(~adult & (composition=='mixed')) * (num_children.clip(upper=4) - 1),coef_child_number_of_other_children_in_the_household_mixed, +#,,,, +util_adult_log_of_max_window_overlap_with_an_adult_adult_only_party,"Adult, log of max window overlap with an adult, adult-only party",(adult & (composition=='adults')) * log_time_window_overlap_adult,coef_adult_log_of_max_window_overlap_with_an_adult_adult_only_party, +util_adult_log_of_max_window_overlap_with_a_child_mixed,"Adult, log of max window overlap with a child, mixed",(adult & (composition=='mixed')) * log_time_window_overlap_adult_child,coef_adult_log_of_max_window_overlap_with_a_child_mixed, +util_child_log_of_max_window_overlap_with_an_adult_mixed,"Child, log of max window overlap with an adult, mixed",(~adult &(composition=='mixed')) * log_time_window_overlap_adult_child,coef_child_log_of_max_window_overlap_with_an_adult_mixed, +util_child_log_of_max_window_overlap_with_a_child_child,"Child, log of max window overlap with a child, child",(~adult & (composition=='children')) * log_time_window_overlap_child,coef_child_log_of_max_window_overlap_with_a_child_child, +#,,,, +util_adults_are_prohibited_in_participating_in_child_only_tours,Adults are prohibited in participating in child-only tours,adult & (composition=='children'),coef_unavailable, +util_children_are_prohibited_in_participating_in_adult_only_tours,Children are prohibited in participating in adult-only tours,~adult & (composition=='adults'),coef_unavailable, +util_persons_with_home_activity_patterns_are_prohibilted_from_participating,Persons with Home activity patterns are prohibilted from participating,~travel_active,coef_unavailable, +#,,,, +util_if_only_two_available_adults_both_must_participate_in_adult_only_tour,"If only two available adults, both must participate in adult-only tour",adult & travel_active & (composition=='adults') & (num_travel_active_adults<3),,coef_unavailable +util_if_only_one_available_adult_traveler_must_participate_in_mixed_tour,"If only one available adult, traveler must participate in mixed tour",adult & travel_active & (composition=='mixed') & (num_travel_active_adults<2),,coef_unavailable +util_if_only_two_available_children_both_must_participate_in_child_only_tour,"If only two available children, both must participate in child-only tour",~adult & travel_active & (composition=='children') & (num_travel_active_children<3),,coef_unavailable +util_if_only_one_available_child_traveler_must_participate_in_mixed_tour,"If only one available child, traveler must participate in mixed tour",~adult & travel_active & (composition == 'mixed') & (num_travel_active_children<2),,coef_unavailable +#,,,, +,Global adjustment constant for whether person participated or not,1,coef_global_adj_for_paticipation, diff --git a/test/joint_tours/configs/joint_tour_participation.yaml b/test/joint_tours/configs/joint_tour_participation.yaml new file mode 100644 index 000000000..6e4fe5050 --- /dev/null +++ b/test/joint_tours/configs/joint_tour_participation.yaml @@ -0,0 +1,21 @@ + +SPEC: joint_tour_participation.csv +COEFFICIENTS: joint_tour_participation_coefficients.csv + +LOGIT_TYPE: MNL + +max_participation_choice_iterations: 1000 + +preprocessor: + SPEC: joint_tour_participation_annotate_participants_preprocessor + DF: participants + TABLES: + - tours +# - persons +# - accessibility + +annotate_persons: + SPEC: annotate_persons_jtp + DF: persons + TABLES: + - joint_tour_participants diff --git a/test/joint_tours/configs/joint_tour_participation_annotate_participants_preprocessor.csv b/test/joint_tours/configs/joint_tour_participation_annotate_participants_preprocessor.csv new file mode 100644 index 000000000..95dac2f9e --- /dev/null +++ b/test/joint_tours/configs/joint_tour_participation_annotate_participants_preprocessor.csv @@ -0,0 +1,13 @@ +Description,Target,Expression +,_P_OVERLAPS,person_time_window_overlap(persons) +,time_window_overlap_adult,"reindex(_P_OVERLAPS.aa, participants.person_id)" +,time_window_overlap_child,"reindex(_P_OVERLAPS.cc, participants.person_id)" +,time_window_overlap_adult_child,"reindex(_P_OVERLAPS.ac, participants.person_id)" +logTimeWindowOverlapAdult,log_time_window_overlap_adult,np.log1p(time_window_overlap_adult) +logTimeWindowOverlapChild,log_time_window_overlap_child,np.log1p(time_window_overlap_child) +logTimeWindowOverlapAdultChild,log_time_window_overlap_adult_child,np.log1p(time_window_overlap_adult_child) +#,, +,_JOINT_TOURS,tours[tours.tour_category=='joint'] +,num_hh_joint_tours,"reindex_i(_JOINT_TOURS.groupby('household_id').size(), participants.household_id)" +#,, +,person_is_preschool,participants.ptype == 8 \ No newline at end of file diff --git a/test/joint_tours/configs/joint_tour_participation_coefficients.csv b/test/joint_tours/configs/joint_tour_participation_coefficients.csv new file mode 100644 index 000000000..8126d3088 --- /dev/null +++ b/test/joint_tours/configs/joint_tour_participation_coefficients.csv @@ -0,0 +1,59 @@ +coefficient_name,value,constrain +coef_unavailable,-999,T +coef_full_time_worker_adults_only_party,-0.844885174,F +coef_part_time_worker_adults_only_party,-1.837563723,F +coef_university_students_adults_only_party,-0.970251833,F +coef_non_worker_adults_only_party,-0.757939204,F +coef_retiree_adults_only_party,1.196798335,F +coef_driving_age_student_children_only_party,-12.08924396,F +coef_pre_driving_age_student_children_only_party,-16.16999328,F +coef_child_too_young_for_school_children_only_party,-16.16999328,F +coef_full_time_worker_mixed_party,0.453048547,F +coef_part_time_worker_mixed_party,1.263225489,F +coef_university_student_mixed_party,1.561741231,F +coef_non_worker_mixed_party,2.90040237,F +coef_retiree_mixed_party,1.043276837,F +coef_child_too_young_for_school_mixed_party,-1.916267403,F +coef_pre_driving_age_student_mixed_party,-1.91645719,F +coef_driving_age_student_mixed_party,-0.933863842,F +#,, +coef_part_time_worker_specific_to_maintenance_joint_tours,0.766072366,F +coef_non_worker_specific_to_maintenance_joint_tours,0.971450303,F +coef_pre_school_kid_specific_to_maintenance_joint_tours,-0.52817951,F +coef_full_time_worker_specific_to_eating_out_joint_tours,0.535579735,F +coef_part_time_worker_specific_to_eating_out_joint_tours,1.23257663,F +coef_pre_driving_age_student_specific_to_eating_out_joint_tours,1.535608884,F +coef_part_time_worker_specific_to_discretionary_joint_tours,0.539337302,F +coef_retiree_specific_to_discretionary_joint_tours,1.105118702,F +coef_driving_age_student_specific_to_discretionary_joint_tours,-1.151066894,F +coef_pre_driving_age_student_specific_to_discretionary_joint_tours,0.798684189,F +coef_part_time_worker_specific_to_visiting_joint_tours,1.075535443,F +coef_non_worker_specific_to_visiting_joint_tours,1.075535443,F +coef_retiree_specific_to_visiting_joint_tours,-1.930328716,F +coef_driving_age_student_specific_to_visiting_joint_tours,-1.334515344,F +coef_pre_school_kid_specific_to_visiting_joint_tours,1.552698221,F +#,, +coef_adult_fewer_automobiles_than_workers_adult_only_party,1.292641814,F +coef_adult_more_automobiles_than_workers_mixed_party,-0.390671553,F +coef_child_zero_automobiles_mixed_party,-1.546687521,F +#,, +coef_dummy_for_low_income_for_adult_in_adult_party,-0.680688378,F +coef_dummy_for_high_income_for_adult_in_mixed_party,-0.20257569,F +coef_dummy_for_high_income_for_child_in_mixed_party,-0.74160668,F +#,, +coef_adult_number_of_joint_tours_adult_only,-0.599443484,F +coef_adult_number_of_joint_tours_mixed,-0.218541079,F +coef_child_number_of_joint_tours_child_only,-0.313832442,F +coef_child_number_of_joint_tours_mixed,-0.241748337,F +#,, +coef_adult_number_of_other_adults_in_the_household_adults_only_party,-0.747528682,F +coef_adult_number_of_other_adults_in_the_household_mixed_party,-0.285988025,F +coef_child_number_of_other_children_in_the_household_child_only_party,-2.305908575,F +coef_child_number_of_other_children_in_the_household_mixed,-0.471545203,F +#,, +coef_adult_log_of_max_window_overlap_with_an_adult_adult_only_party,1.634378325,F +coef_adult_log_of_max_window_overlap_with_a_child_mixed,0.057012356,F +coef_child_log_of_max_window_overlap_with_an_adult_mixed,1.616796615,F +coef_child_log_of_max_window_overlap_with_a_child_child,10.70256432,F +#,, +coef_global_adj_for_paticipation,-1,T diff --git a/test/joint_tours/configs/network_los.yaml b/test/joint_tours/configs/network_los.yaml new file mode 100644 index 000000000..391125a38 --- /dev/null +++ b/test/joint_tours/configs/network_los.yaml @@ -0,0 +1,14 @@ +# read cached skims (using numpy memmap) from output directory (memmap is faster than omx ) +read_skim_cache: False +# write memmapped cached skims to output directory after reading from omx, for use in subsequent runs +write_skim_cache: True + +zone_system: 1 + +taz_skims: skims.omx + +skim_time_periods: + time_window: 1440 + period_minutes: 60 + periods: [0, 3, 5, 9, 14, 18, 24] # 3=3:00-3:59, 5=5:00-5:59, 9=9:00-9:59, 14=2:00-2:59, 18=6:00-6:59 + labels: ['EA', 'EA', 'AM', 'MD', 'PM', 'EV'] \ No newline at end of file diff --git a/test/joint_tours/configs/settings.yaml b/test/joint_tours/configs/settings.yaml new file mode 100644 index 000000000..64584bdf4 --- /dev/null +++ b/test/joint_tours/configs/settings.yaml @@ -0,0 +1,79 @@ +# input tables +input_table_list: + - tablename: households + filename: households.csv + index_col: household_id + rename_columns: + unique_hh_id: household_id + NP: hhsize + hh_workers_from_esr: num_workers + VEH: auto_ownership + MAZ: home_zone_id + HINCP: income + keep_columns: + - home_zone_id + - income + - hhsize + - HHT + - auto_ownership + - num_workers + - tablename: persons + filename: persons.csv + index_col: person_id + rename_columns: + unique_hh_id: household_id + AGEP: age + SPORDER: PNUM + SEX: sex + employed: pemploy + student_status: pstudent + person_type: ptype + keep_columns: + - household_id + - age + - PNUM + - sex + - pemploy + - pstudent + - ptype + - tablename: land_use + filename: land_use.csv + index_col: zone_id + rename_columns: + MAZ_ORIGINAL: zone_id + CountyID: county_id + TAZ_ORIGINAL: TAZ + DistID: DISTRICT + HH: TOTHH + POP: TOTPOP + ACRES: TOTACRE + emp_total: TOTEMP + keep_columns: + - TAZ + - DISTRICT + - SD + - county_id + - TOTHH + - TOTPOP + - TOTACRE + - tablename: tours + filename: mandatory_tours.csv + # since tours has a canonical index name 'tour_id', we must explicitly indicate that no index should be assigned + # canonical index_col 'tour_id' will be assigned by initialize_tours + index_col: + rename_columns: + hh_id: household_id + start_period: start + end_period: end + keep_columns: + - person_id + - household_id + - person_type + - tour_category + - tour_purpose + - orig_mgra + - dest_mgra + - start + - end + +trace_hh_id: \ No newline at end of file diff --git a/test/joint_tours/configs/tour_departure_and_duration_alternatives.csv b/test/joint_tours/configs/tour_departure_and_duration_alternatives.csv new file mode 100644 index 000000000..bddab06b9 --- /dev/null +++ b/test/joint_tours/configs/tour_departure_and_duration_alternatives.csv @@ -0,0 +1,191 @@ +start,end +5,5 +5,6 +5,7 +5,8 +5,9 +5,10 +5,11 +5,12 +5,13 +5,14 +5,15 +5,16 +5,17 +5,18 +5,19 +5,20 +5,21 +5,22 +5,23 +6,6 +6,7 +6,8 +6,9 +6,10 +6,11 +6,12 +6,13 +6,14 +6,15 +6,16 +6,17 +6,18 +6,19 +6,20 +6,21 +6,22 +6,23 +7,7 +7,8 +7,9 +7,10 +7,11 +7,12 +7,13 +7,14 +7,15 +7,16 +7,17 +7,18 +7,19 +7,20 +7,21 +7,22 +7,23 +8,8 +8,9 +8,10 +8,11 +8,12 +8,13 +8,14 +8,15 +8,16 +8,17 +8,18 +8,19 +8,20 +8,21 +8,22 +8,23 +9,9 +9,10 +9,11 +9,12 +9,13 +9,14 +9,15 +9,16 +9,17 +9,18 +9,19 +9,20 +9,21 +9,22 +9,23 +10,10 +10,11 +10,12 +10,13 +10,14 +10,15 +10,16 +10,17 +10,18 +10,19 +10,20 +10,21 +10,22 +10,23 +11,11 +11,12 +11,13 +11,14 +11,15 +11,16 +11,17 +11,18 +11,19 +11,20 +11,21 +11,22 +11,23 +12,12 +12,13 +12,14 +12,15 +12,16 +12,17 +12,18 +12,19 +12,20 +12,21 +12,22 +12,23 +13,13 +13,14 +13,15 +13,16 +13,17 +13,18 +13,19 +13,20 +13,21 +13,22 +13,23 +14,14 +14,15 +14,16 +14,17 +14,18 +14,19 +14,20 +14,21 +14,22 +14,23 +15,15 +15,16 +15,17 +15,18 +15,19 +15,20 +15,21 +15,22 +15,23 +16,16 +16,17 +16,18 +16,19 +16,20 +16,21 +16,22 +16,23 +17,17 +17,18 +17,19 +17,20 +17,21 +17,22 +17,23 +18,18 +18,19 +18,20 +18,21 +18,22 +18,23 +19,19 +19,20 +19,21 +19,22 +19,23 +20,20 +20,21 +20,22 +20,23 +21,21 +21,22 +21,23 +22,22 +22,23 +23,23 \ No newline at end of file diff --git a/test/joint_tours/test_joint_tours.py b/test/joint_tours/test_joint_tours.py new file mode 100644 index 000000000..2edccb042 --- /dev/null +++ b/test/joint_tours/test_joint_tours.py @@ -0,0 +1,265 @@ +import logging +import pytest +import os +import shutil +import pandas as pd +import numpy as np +from numpy import dot +from numpy.linalg import norm + +# import models is necessary to initalize the model steps with orca +from activitysim.abm import models +from activitysim.core import pipeline, config +from activitysim.core import tracing + +logger = logging.getLogger(__name__) + +# Used by conftest.py initialize_pipeline method +@pytest.fixture(scope="module") +def module() -> str: + """ + A pytest fixture that returns the data folder location. + :return: folder location for any necessary data to initialize the tests + """ + return "joint_tours" + + +# Used by conftest.py initialize_pipeline method +@pytest.fixture(scope="module") +# def tables() -> dict[str, str]: +def tables(prepare_module_inputs) -> dict[str, str]: + """ + A pytest fixture that returns the "mock" tables to build pipeline dataframes. The + key-value pair is the name of the table and the index column. + :return: dict + """ + return { + "land_use": "MAZ_ORIGINAL", + "persons": "person_id", + "households": "household_id", + "accessibility": "MAZ_ORIGINAL", + "tours": "tour_id", + } + + +# Used by conftest.py initialize_pipeline method +# Set to true if you need to read skims into the pipeline +@pytest.fixture(scope="module") +def initialize_network_los() -> bool: + """ + A pytest boolean fixture indicating whether network skims should be read from the + fixtures test data folder. + :return: bool + """ + return False + + +# Used by conftest.py reconnect_pipeline method +@pytest.fixture(scope="module") +def load_checkpoint() -> bool: + """ + checkpoint to be loaded from the pipeline when reconnecting. + """ + return "initialize_households" + + +@pytest.mark.skipif( + os.path.isfile("test/joint_tours/output/pipeline.h5"), + reason="no need to recreate pipeline store if already exist", +) +def test_prepare_input_pipeline(initialize_pipeline: pipeline.Pipeline, caplog): + # Run summarize model + caplog.set_level(logging.INFO) + + # run model step + pipeline.run(models=["initialize_landuse", "initialize_households"]) + person_df = pipeline.get_table("persons") + pipeline.close_pipeline() + + +def test_joint_tours_frequency_composition( + reconnect_pipeline: pipeline.Pipeline, caplog +): + + caplog.set_level(logging.INFO) + + # run model step + pipeline.run( + models=["joint_tour_frequency_composition"], + resume_after="initialize_households", + ) + + pipeline.close_pipeline() + + +def test_joint_tours_participation(reconnect_pipeline: pipeline.Pipeline, caplog): + + caplog.set_level(logging.INFO) + + # run model step + pipeline.run( + models=["joint_tour_participation"], + resume_after="joint_tour_frequency_composition", + ) + + pipeline.close_pipeline() + + +# fetch/prepare existing files for model inputs +# e.g. read accessibilities.csv from ctramp result, rename columns, write out to accessibility.csv which is the input to activitysim +@pytest.fixture(scope="module") +def prepare_module_inputs() -> None: + """ + copy input files from sharepoint into test folder + + create unique person id in person file + + :return: None + """ + # https://wsponlinenam.sharepoint.com/sites/US-TM2ConversionProject/Shared%20Documents/Forms/ + # AllItems.aspx?id=%2Fsites%2FUS%2DTM2ConversionProject%2FShared%20Documents%2FTask%203%20ActivitySim&viewid=7a1eaca7%2D3999%2D4d45%2D9701%2D9943cc3d6ab1 + test_dir = os.path.join("test", "joint_tours", "data") + + accessibility_file = os.path.join(test_dir, "tm2_outputs", "accessibilities.csv") + household_file = os.path.join(test_dir, "popsyn", "households.csv") + person_file = os.path.join(test_dir, "popsyn", "persons.csv") + landuse_file = os.path.join(test_dir, "landuse", "maz_data_withDensity.csv") + + shutil.copy(accessibility_file, os.path.join(test_dir, "accessibility.csv")) + shutil.copy(household_file, os.path.join(test_dir, "households.csv")) + shutil.copy(person_file, os.path.join(test_dir, "persons.csv")) + shutil.copy(landuse_file, os.path.join(test_dir, "land_use.csv")) + + # add original maz id to accessibility table + land_use_df = pd.read_csv(os.path.join(test_dir, "land_use.csv")) + + accessibility_df = pd.read_csv(os.path.join(test_dir, "accessibility.csv")) + + accessibility_df = pd.merge( + accessibility_df, + land_use_df[["MAZ", "MAZ_ORIGINAL"]].rename(columns={"MAZ": "mgra"}), + how="left", + on="mgra", + ) + + accessibility_df.to_csv(os.path.join(test_dir, "accessibility.csv"), index=False) + + # currently household file has to have these two columns, even before annotation + # because annotate person happens before household and uses these two columns + # TODO find a way to get around this + #### + + # household file from populationsim + household_df = pd.read_csv(os.path.join(test_dir, "households.csv")) + + household_columns_dict = {"HHID": "household_id", "MAZ": "home_zone_id"} + + household_df.rename(columns=household_columns_dict, inplace=True) + + # get columns from ctramp output + tm2_simulated_household_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "householdData_1.csv") + ) + tm2_simulated_household_df.rename(columns={"hh_id": "household_id"}, inplace=True) + + household_df = pd.merge( + household_df, + tm2_simulated_household_df[ + [ + "household_id", + "autos", + "automated_vehicles", + "transponder", + "cdap_pattern", + "jtf_choice", + ] + ], + how="inner", # tm2 is not 100% sample run + on="household_id", + ) + + household_df.to_csv(os.path.join(test_dir, "households.csv"), index=False) + + # person file from populationsim + person_df = pd.read_csv(os.path.join(test_dir, "persons.csv")) + + person_columns_dict = {"HHID": "household_id", "PERID": "person_id"} + + person_df.rename(columns=person_columns_dict, inplace=True) + + # get columns from ctramp result + tm2_simulated_person_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "personData_1.csv") + ) + tm2_simulated_person_df.rename(columns={"hh_id": "household_id"}, inplace=True) + + person_df = pd.merge( + person_df, + tm2_simulated_person_df[ + [ + "household_id", + "person_id", + "type", + "value_of_time", + "activity_pattern", + "imf_choice", + "inmf_choice", + "fp_choice", + "reimb_pct", + "workDCLogsum", + "schoolDCLogsum", + ] + ], + how="inner", # ctramp might not be 100% sample run + on=["household_id", "person_id"], + ) + + person_df["PNUM"] = person_df.groupby("household_id")["person_id"].rank() + + person_df.to_csv(os.path.join(test_dir, "persons.csv"), index=False) + + ## get tour data from tm2 output + + tm2_simulated_indiv_tour_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "indivTourData_1.csv") + ) + tm2_simulated_indiv_tour_df = tm2_simulated_indiv_tour_df[ + tm2_simulated_indiv_tour_df.tour_category == "MANDATORY" + ] + + tm2_simulated_tour_df = pd.concat( + [tm2_simulated_indiv_tour_df], sort=False, ignore_index=True + ) + + tm2_simulated_tour_df.rename(columns={"hh_id": "household_id"}).to_csv( + os.path.join(test_dir, "tours.csv"), index=False + ) + + +def create_summary(input_df, key, out_col="Share") -> pd.DataFrame: + """ + Create summary for the input data. + 1. group input data by the "key" column + 2. calculate the percent of input data records in each "key" category. + + :return: pd.DataFrame + """ + + out_df = input_df.groupby(key).size().reset_index(name="Count") + out_df[out_col] = round(out_df["Count"] / out_df["Count"].sum(), 4) + + return out_df[[key, out_col]] + + +def cosine_similarity(a, b): + """ + Computes cosine similarity between two vectors. + + Cosine similarity is used here as a metric to measure similarity between two sequence of numbers. + Two sequence of numbers are represented as vectors (in a multi-dimensional space) and cosine similiarity is defined as the cosine of the angle between them + i.e., dot products of the vectors divided by the product of their lengths. + + :return: + """ + + return dot(a, b) / (norm(a) * norm(b)) diff --git a/test/non_mandatory_tour_frequency/.gitkeep b/test/non_mandatory_tour_frequency/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/test/non_mandatory_tour_frequency/configs/NonMandatoryIndividualTourFrequency.xls b/test/non_mandatory_tour_frequency/configs/NonMandatoryIndividualTourFrequency.xls new file mode 100644 index 0000000000000000000000000000000000000000..4726c3f73248adae3cc3c978e86424907238e027 GIT binary patch literal 192512 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

MB6@BP)Tr0?4wH1Y#3}uwyGD5Ngr{V&n_>hZ=~H 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 IU!C&*3nxMplK=n! literal 0 HcmV?d00001 diff --git a/test/non_mandatory_tour_frequency/configs/annotate_households.csv b/test/non_mandatory_tour_frequency/configs/annotate_households.csv new file mode 100644 index 000000000..ac21d3797 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/annotate_households.csv @@ -0,0 +1,13 @@ +Description,Target,Expression +#,, annotate households table after import +,_PERSON_COUNT,"lambda query, persons, households: persons.query(query).groupby('household_id').size().reindex(households.index).fillna(0).astype(np.int8)" +number of fulltime workers,num_full_time_workers,"_PERSON_COUNT('ptype == 1', persons, households)" +number of parttime workers,num_part_time_workers,"_PERSON_COUNT('ptype == 2', persons, households)" +number of university student,num_university_students,"_PERSON_COUNT('ptype == 3', persons, households)" +number of non-workers,num_non_workers,"_PERSON_COUNT('ptype == 4', persons, households)" +number of retirees,num_retirees,"_PERSON_COUNT('ptype == 5', persons, households)" +number of driving age students,num_driving_age_students,"_PERSON_COUNT('ptype == 6', persons, households)" +number of pre-driving age school kids,num_pre_driving_age_school_kids,"_PERSON_COUNT('ptype == 7', persons, households)" +number of pre-school kids,num_pre_school_kids,"_PERSON_COUNT('ptype == 8', persons, households)" +number of pre-driving age school kids who go out,num_pre_driving_age_school_kids_go_out,"_PERSON_COUNT('(ptype == 7) & (cdap_activity != \'H\')', persons, households)" +number of pre-school kids who go out,num_pre_school_kids_go_out,"_PERSON_COUNT('(ptype == 8) & (cdap_activity != \'H\')', persons, households)" \ No newline at end of file diff --git a/test/non_mandatory_tour_frequency/configs/annotate_landuse.csv b/test/non_mandatory_tour_frequency/configs/annotate_landuse.csv new file mode 100644 index 000000000..65237c0ad --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/annotate_landuse.csv @@ -0,0 +1,6 @@ +Description,Target,Expression +#,, annotate landuse table after import +household_density,household_density,land_use.TOTHH / land_use.TOTACRE +employment_density,employment_density,land_use.TOTEMP / land_use.TOTACRE +population_density,population_density,land_use.TOTPOP / land_use.TOTACRE +density_index,density_index,(household_density *employment_density) / (household_density + employment_density).clip(lower=1) \ No newline at end of file diff --git a/test/non_mandatory_tour_frequency/configs/annotate_persons.csv b/test/non_mandatory_tour_frequency/configs/annotate_persons.csv new file mode 100644 index 000000000..a68eb7e67 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/annotate_persons.csv @@ -0,0 +1,17 @@ +Description,Target,Expression +#,, annotate persons table after import +age_16_to_19,age_16_to_19,"persons.age.between(16, 19)" +age_16_p,age_16_p,persons.age >= 16 +adult,adult,persons.age >= 18 +male,male,persons.sex == 1 +female,female,persons.sex == 2 +,ptype,0 +,ptype,"np.where(persons.type == 'Full-time worker', 1, ptype)" +,ptype,"np.where(persons.type == 'Part-time worker', 2, ptype)" +,ptype,"np.where(persons.type == 'University student', 3, ptype)" +,ptype,"np.where(persons.type == 'Non-worker', 4, ptype)" +,ptype,"np.where(persons.type == 'Retired', 5, ptype)" +,ptype,"np.where(persons.type == 'Student of driving age', 6, ptype)" +,ptype,"np.where(persons.type == 'Student of non-driving age', 7, ptype)" +,ptype,"np.where(persons.type == 'Child too young for school', 8, ptype)" +home_zone_id,home_zone_id,"reindex(households.home_zone_id, persons.household_id)" \ No newline at end of file diff --git a/test/non_mandatory_tour_frequency/configs/annotate_persons_after_hh.csv b/test/non_mandatory_tour_frequency/configs/annotate_persons_after_hh.csv new file mode 100644 index 000000000..0dfa16be6 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/annotate_persons_after_hh.csv @@ -0,0 +1,5 @@ +Description,Target,Expression +#,, annotate persons table after annotate_households +#,, adults get full hh_value_of_time and children get 60% +,_hh_vot,"reindex(households.hh_value_of_time, persons.household_id)" +,value_of_time,"_hh_vot.where(persons.age>=18, _hh_vot * 0.667)" \ No newline at end of file diff --git a/test/non_mandatory_tour_frequency/configs/annotate_persons_nmtf.csv b/test/non_mandatory_tour_frequency/configs/annotate_persons_nmtf.csv new file mode 100644 index 000000000..07890f237 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/annotate_persons_nmtf.csv @@ -0,0 +1,10 @@ +Description,Target,Expression +#,, annotate persons table after non_mandatory_tour_frequency model has run +num_non_mand,num_non_mand,tours[tours.tour_category=='non_mandatory'].groupby('person_id').size().reindex(persons.index).fillna(0).astype(np.int8) +num_escort_tours,num_escort_tours,tours[tours.tour_type == 'escort'].groupby('person_id').size().reindex(persons.index).fillna(0).astype(np.int8) +num_eatout_tours,num_eatout_tours,tours[tours.tour_type == 'eatout'].groupby('person_id').size().reindex(persons.index).fillna(0).astype(np.int8) +num_shop_tours,num_shop_tours,tours[tours.tour_type == 'shopping'].groupby('person_id').size().reindex(persons.index).fillna(0).astype(np.int8) +num_maint_tours,num_maint_tours,tours[tours.tour_type == 'othmaint'].groupby('person_id').size().reindex(persons.index).fillna(0).astype(np.int8) +num_discr_tours,num_discr_tours,tours[tours.tour_type == 'othdiscr'].groupby('person_id').size().reindex(persons.index).fillna(0).astype(np.int8) +num_social_tours,num_social_tours,tours[tours.tour_type == 'social'].groupby('person_id').size().reindex(persons.index).fillna(0).astype(np.int8) +num_non_escort_tours,num_non_escort_tours,num_non_mand-num_escort_tours diff --git a/test/non_mandatory_tour_frequency/configs/constants.yaml b/test/non_mandatory_tour_frequency/configs/constants.yaml new file mode 100644 index 000000000..b0bd5a1f3 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/constants.yaml @@ -0,0 +1,68 @@ +## ActivitySim +## See full license in LICENSE.txt. + + +#HHT_NONE: 0 +#HHT_FAMILY_MARRIED: 1 +#HHT_FAMILY_MALE: 2 +#HHT_FAMILY_FEMALE: 3 +#HHT_NONFAMILY_MALE_ALONE: 4 +#HHT_NONFAMILY_MALE_NOTALONE: 5 +#HHT_NONFAMILY_FEMALE_ALONE: 6 +#HHT_NONFAMILY_FEMALE_NOTALONE: 7 + +# convenience for expression files +HHT_NONFAMILY: [4, 5, 6, 7] +HHT_FAMILY: [1, 2, 3] + +PSTUDENT_GRADE_OR_HIGH: 1 +PSTUDENT_UNIVERSITY: 2 +PSTUDENT_NOT: 3 + +GRADE_SCHOOL_MAX_AGE: 14 +GRADE_SCHOOL_MIN_AGE: 5 + +SCHOOL_SEGMENT_NONE: 0 +SCHOOL_SEGMENT_GRADE: 1 +SCHOOL_SEGMENT_HIGH: 2 +SCHOOL_SEGMENT_UNIV: 3 + +INCOME_SEGMENT_LOW: 1 +INCOME_SEGMENT_MED: 2 +INCOME_SEGMENT_HIGH: 3 +INCOME_SEGMENT_VERYHIGH: 4 + +PEMPLOY_FULL: 1 +PEMPLOY_PART: 2 +PEMPLOY_NOT: 3 +PEMPLOY_CHILD: 4 + +PTYPE_FULL: &ptype_full 1 +PTYPE_PART: &ptype_part 2 +PTYPE_UNIVERSITY: &ptype_university 3 +PTYPE_NONWORK: &ptype_nonwork 4 +PTYPE_RETIRED: &ptype_retired 5 +PTYPE_DRIVING: &ptype_driving 6 +PTYPE_SCHOOL: &ptype_school 7 +PTYPE_PRESCHOOL: &ptype_preschool 8 + +# these appear as column headers in non_mandatory_tour_frequency.csv +PTYPE_NAME: + *ptype_full: PTYPE_FULL + *ptype_part: PTYPE_PART + *ptype_university: PTYPE_UNIVERSITY + *ptype_nonwork: PTYPE_NONWORK + *ptype_retired: PTYPE_RETIRED + *ptype_driving: PTYPE_DRIVING + *ptype_school: PTYPE_SCHOOL + *ptype_preschool: PTYPE_PRESCHOOL + + +CDAP_ACTIVITY_MANDATORY: M +CDAP_ACTIVITY_NONMANDATORY: N +CDAP_ACTIVITY_HOME: H + +# Correction for transit skim expressions +# e.g. MTC transit skims (Cube TRANPLAN skims) use scaled ints and +# therefore need to be divided by the scale factor if used in expressions +TRANSIT_SCALE_FACTOR: 100 diff --git a/test/non_mandatory_tour_frequency/configs/initialize_households.yaml b/test/non_mandatory_tour_frequency/configs/initialize_households.yaml new file mode 100644 index 000000000..07e34e8a4 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/initialize_households.yaml @@ -0,0 +1,48 @@ +annotate_tables: + - tablename: persons + column_map: + HHID: household_id + PERID: person_id + AGEP: age + SEX: sex + SCHL: education_attainment + OCCP: occupation + WKHP: hours_worked + WKW: weeks_worked + EMPLOYED: employment_status + ESR: esr + SCHG: grade_attending + activity_pattern: cdap_activity + annotate: + SPEC: annotate_persons + DF: persons + TABLES: + - households + - tablename: households + column_map: + HHID: household_id + MAZ: home_zone_id + HHINCADJ: income + NWRKRS_ESR: num_workers + VEH: auto_ownership + NP: hhsize + HHT: hh_type + BLD: building_size + TYPE: hh_unit_type + MTCCountyID: county_id + annotate: + SPEC: annotate_households + DF: households + TABLES: + - persons + - land_use + +CONSTANTS: + PTYPE_FULL: 1 + PTYPE_PART: 2 + PTYPE_UNIVERSITY: 3 + PTYPE_NONWORK: 4 + PTYPE_RETIRED: 5 + PTYPE_DRIVING: 6 + PTYPE_SCHOOL: 7 + PTYPE_PRESCHOOL: 8 \ No newline at end of file diff --git a/test/non_mandatory_tour_frequency/configs/initialize_landuse.yaml b/test/non_mandatory_tour_frequency/configs/initialize_landuse.yaml new file mode 100644 index 000000000..7cc1d7e34 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/initialize_landuse.yaml @@ -0,0 +1,54 @@ +annotate_tables: + - tablename: land_use + column_map: + MAZ_ORIGINAL: zone_id + CountyID: county_id + DistID: DISTRICT + HH: TOTHH + POP: TOTPOP + ACRES: TOTACRE + emp_total: TOTEMP + annotate: + SPEC: annotate_landuse + DF: land_use + - tablename: accessibility + column_map: + column_1: nonmandatory_auto_accessibility + column_2: nonmandatory_transit_accessibility + column_3: nonmandatory_nm_accessibility + column_4: nonmandatory_sov0_accessibility + column_5: nonmandatory_sov1_accessibility + column_6: nonmandatory_sov2_accessibility + column_7: nonmandatory_hov0_accessibility + column_8: nonmandatory_hov1_accessibility + column_9: nonmandatory_hov2_accessibility + column_10: shop_hov_insufficient_accessibility + column_11: shop_hov_sufficient_accessibility + column_12: shop_hov_oversufficient_accessibility + column_13: maint_hov_insufficient_accessibility + column_14: maint_hov_sufficient_accessibility + column_15: maint_hov_oversufficient_accessibility + column_16: eat_hov_insufficient_accessibility + column_17: eat_hov_sufficient_accessibility + column_18: eat_hov_oversufficient_accessibility + column_19: visit_hov_insufficient_accessibility + column_20: visit_hov_sufficient_accessibility + column_21: visit_hov_oversufficient_accessibility + column_22: discr_hov_insufficient_accessibility + column_23: discr_hov_sufficient_accessibility + column_24: discr_hov_oversufficient_accessibility + column_25: escort_hov_insufficient_accessibility + column_26: escort_hov_sufficient_accessibility + column_27: escort_hov_oversufficient_accessibility + column_28: shop_sov_insufficient_accessibility + column_29: shop_sov_sufficient_accessibility + column_30: shop_sov_oversufficient_accessibility + column_31: maint_sov_insufficient_accessibility + column_32: maint_sov_sufficient_accessibility + column_33: maint_sov_oversufficient_accessibility + column_40: discr_sov_insufficient_accessibility + column_41: discr_sov_sufficient_accessibility + column_42: discr_sov_oversufficient_accessibility + column_45: total_emp_accessibility + column_47: hh_walktransit_accessibility + mgra : zone_id \ No newline at end of file diff --git a/test/non_mandatory_tour_frequency/configs/network_los.yaml b/test/non_mandatory_tour_frequency/configs/network_los.yaml new file mode 100644 index 000000000..391125a38 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/network_los.yaml @@ -0,0 +1,14 @@ +# read cached skims (using numpy memmap) from output directory (memmap is faster than omx ) +read_skim_cache: False +# write memmapped cached skims to output directory after reading from omx, for use in subsequent runs +write_skim_cache: True + +zone_system: 1 + +taz_skims: skims.omx + +skim_time_periods: + time_window: 1440 + period_minutes: 60 + periods: [0, 3, 5, 9, 14, 18, 24] # 3=3:00-3:59, 5=5:00-5:59, 9=9:00-9:59, 14=2:00-2:59, 18=6:00-6:59 + labels: ['EA', 'EA', 'AM', 'MD', 'PM', 'EV'] \ No newline at end of file diff --git a/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency.csv b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency.csv new file mode 100644 index 000000000..7a3fc8703 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency.csv @@ -0,0 +1,187 @@ +Label,Description,Expression,PTYPE_FULL,PTYPE_PART,PTYPE_UNIVERSITY,PTYPE_NONWORK,PTYPE_RETIRED,PTYPE_DRIVING,PTYPE_SCHOOL,PTYPE_PRESCHOOL +util_escorting_tour,Escorting Tour,escort,coef_escorting_tour,coef_escorting_tour,coef_escorting_tour,coef_escorting_tour,coef_escorting_tour,coef_escorting_tour,coef_escorting_tour,coef_escorting_tour +util_discretionary_tour,Discretionary Tour,othdiscr,coef_discretionary_tour,coef_discretionary_tour,coef_discretionary_tour,coef_discretionary_tour,coef_discretionary_tour,coef_discretionary_tour,coef_discretionary_tour,coef_discretionary_tour +util_shopping_tour,Shopping Tour,shopping,coef_shopping_tour,coef_shopping_tour,coef_shopping_tour,coef_shopping_tour,coef_shopping_tour,coef_shopping_tour,coef_shopping_tour,coef_shopping_tour +util_maintenance_tour,Maintenance Tour,othmaint,coef_maintenance_tour,coef_maintenance_tour,coef_maintenance_tour,coef_maintenance_tour,coef_maintenance_tour,coef_maintenance_tour,coef_maintenance_tour,coef_maintenance_tour +util_visiting_or_social_tour,Visiting/Social Tour,social,coef_visiting_or_social_tour,coef_visiting_or_social_tour,coef_visiting_or_social_tour,coef_visiting_or_social_tour,coef_visiting_or_social_tour,coef_visiting_or_social_tour,coef_visiting_or_social_tour,coef_visiting_or_social_tour +util_eating_out_tour,Eating Out Tour,eatout,coef_eating_out_tour,coef_eating_out_tour,coef_eating_out_tour,coef_eating_out_tour,coef_eating_out_tour,coef_eating_out_tour,coef_eating_out_tour,coef_eating_out_tour +util_total_number_of_tours_is_0_no_prior_tours,Total Number of Tours = 0 (No Prior Tours),(tot_tours == 0) & (num_mandatory_tours == 0) & (num_person_joint_tours == 0),coef_unavailable,coef_unavailable,coef_unavailable,coef_unavailable,coef_unavailable,coef_unavailable,coef_unavailable,coef_unavailable +util_total_number_of_tours_is_0_prior_tours,Total Number of Tours = 0 (1 or more Prior Tours),(tot_tours == 0) & ((num_mandatory_tours > 0) | (num_person_joint_tours > 0)),coef_total_number_of_tours_is_0_prior_tours,coef_total_number_of_tours_is_0_prior_tours,coef_total_number_of_tours_is_0_prior_tours,coef_total_number_of_tours_is_0_prior_tours,coef_total_number_of_tours_is_0_prior_tours,coef_total_number_of_tours_is_0_prior_tours,coef_total_number_of_tours_is_0_prior_tours,coef_total_number_of_tours_is_0_prior_tours +util_total_number_of_tours_is_1,Total Number of Tours = 1,tot_tours == 1,coef_total_number_of_tours_is_1,coef_total_number_of_tours_is_1,coef_total_number_of_tours_is_1,,,,, +util_total_number_of_tours_is_2,Total Number of Tours = 2,tot_tours == 2,coef_total_number_of_tours_is_2,coef_total_number_of_tours_is_2,,,,,coef_total_number_of_tours_is_2,coef_total_number_of_tours_is_2 +util_total_number_of_tours_is_3,Total Number of Tours = 3,tot_tours == 3,coef_total_number_of_tours_is_3,coef_total_number_of_tours_is_3,,coef_total_number_of_tours_is_3,,,coef_total_number_of_tours_is_3,coef_total_number_of_tours_is_3 +util_total_number_of_tours_is_4,Total Number of Tours = 4,tot_tours == 4,coef_total_number_of_tours_is_4,coef_total_number_of_tours_is_4,,coef_total_number_of_tours_is_4,,,, +util_total_number_of_tours_is_5,Total Number of Tours = 5,tot_tours == 5,coef_unavailable,coef_total_number_of_tours_is_5,,coef_unavailable,coef_unavailable,,, +util_total_number_of_tours_is_6_plus,Total Number of Tours = 6+,tot_tours > 5,coef_unavailable,coef_total_number_of_tours_is_6_plus,,coef_unavailable,coef_unavailable,,, +util_total_number_of_tours_is_1+,Total Number of Tours >= 1,tot_tours >= 1,,,,,,coef_total_number_of_tours_is_1_plus,, +util_total_number_of_tours_is_4+,Total Number of Tours >= 4,tot_tours >= 4,,,,,,coef_unavailable,coef_unavailable,coef_unavailable +util_has_mandatory_tours_and_tour_frequency_is_1,One or more Mandatory tour & tour frequency =1,(num_mandatory_tours>0)&(tot_tours == 1),,,,,,,coef_has_mandatory_tours_and_tour_frequency_is_1, +util_has_mandatory_tours_and_tour_frequency_is_2,One or more Mandatory tour & tour frequency =2,(num_mandatory_tours>0)&(tot_tours == 2),coef_has_mandatory_tours_and_tour_frequency_is_2,coef_has_mandatory_tours_and_tour_frequency_is_2,,,,,, +util_has_mandatory_tours_and_tour_frequency_is_2+,One or more Mandatory tour & tour frequency =2+,(num_mandatory_tours>0)&(tot_tours >= 2),,,coef_has_mandatory_tours_and_tour_frequency_is_2_plus,,,coef_has_mandatory_tours_and_tour_frequency_is_2_plus,coef_has_mandatory_tours_and_tour_frequency_is_2_plus,coef_has_mandatory_tours_and_tour_frequency_is_2_plus +util_has_mandatory_tours_and_tour_frequency_is_3,One or more Mandatory tour & tour frequency =3,(num_mandatory_tours>0)&(tot_tours == 3),coef_has_mandatory_tours_and_tour_frequency_is_3,coef_has_mandatory_tours_and_tour_frequency_is_3,,,,,, +util_has_mandatory_tours_and_tour_frequency_is_4+,One or more Mandatory tour & tour frequency =4+,(num_mandatory_tours>0)&(tot_tours >= 4),coef_has_mandatory_tours_and_tour_frequency_is_4_plus,coef_has_mandatory_tours_and_tour_frequency_is_4_plus,,,,,, +util_has_joint_tours_and_tour_frequency_is_1,One or more Joint tour & tour frequency =1,(num_person_joint_tours>0)&(tot_tours == 1),,,coef_has_joint_tours_and_tour_frequency_is_1,coef_has_joint_tours_and_tour_frequency_is_1,coef_has_joint_tours_and_tour_frequency_is_1,,, +util_has_joint_tours_and_tour_frequency_is_2,One or more Joint tour & tour frequency =2,(num_person_joint_tours>0)&(tot_tours == 2),,,,coef_has_joint_tours_and_tour_frequency_is_2,,,, +util_has_joint_tours_and_tour_frequency_is_3+,One or more Joint tour & tour frequency =3+,(num_person_joint_tours>0)&(tot_tours >= 3),coef_has_joint_tours_and_tour_frequency_is_3_plus,,,coef_has_joint_tours_and_tour_frequency_is_3_plus,,,, +util_has_joint_tours_and_tour_frequency_is_4+,One or more Joint tour & tour frequency =4+,(num_person_joint_tours>0)&(tot_tours >= 4),,coef_has_joint_tours_and_tour_frequency_is_4_plus,,,,,, +util_has_joint_tours_and_tour_frequency_is_2+,One or more Joint tour & tour frequency =2+,(num_person_joint_tours>0)&(tot_tours >= 2),,,coef_has_joint_tours_and_tour_frequency_is_2_plus,,coef_has_joint_tours_and_tour_frequency_is_2_plus,,, +util_has_joint_tours_and_tour_frequency_is_1+,One or more Joint tour & tour frequency =1+,(num_person_joint_tours>0)&(tot_tours >= 1),,,,,,,coef_has_joint_tours_and_tour_frequency_is_1_plus, +util_number_of_joint_shopping_tours,Number of Joint Shopping tours,(shopping>0) * num_person_joint_shop_tours,coef_number_of_joint_shopping_tours,,,coef_number_of_joint_shopping_tours,coef_number_of_joint_shopping_tours,,, +util_number_of_joint_maintenance_tours,Number of Joint Maintenance tours,(othmaint>0) * num_person_joint_maint_tours,,,,coef_number_of_joint_maintenance_tours,coef_number_of_joint_maintenance_tours,,, +util_number_of_joint_eating_out_tours,Number of Joint Eating Out tours,(eatout>0) * num_person_joint_eatout_tours,,,,,coef_number_of_joint_eating_out_tours,,, +util_number_of_joint_discretionary_tours,Number of Joint Discretionary tours,(othdiscr>0) * num_person_joint_othdiscr_tours,coef_number_of_joint_discretionary_tours,coef_number_of_joint_discretionary_tours,,,coef_number_of_joint_discretionary_tours,coef_number_of_joint_discretionary_tours,coef_number_of_joint_discretionary_tours, +util_more_than_one_escorting_tours,More than one escorting tours,escort > 1,coef_more_than_one_escorting_tours,coef_more_than_one_escorting_tours,coef_more_than_one_escorting_tours,coef_more_than_one_escorting_tours,coef_more_than_one_escorting_tours,,coef_more_than_one_escorting_tours,coef_more_than_one_escorting_tours +util_more_than_one_shopping_tours,More than one shopping tours,shopping > 1,,coef_more_than_one_shopping_tours,,coef_more_than_one_shopping_tours,coef_more_than_one_shopping_tours,,, +util_more_than_one_maintenance_tours,More than one maintenance tours,othmaint>1,,,,coef_more_than_one_maintenance_tours,coef_more_than_one_maintenance_tours,,, +util_more_than_one_discretionary_tours,More than one discretionary tours,othdiscr > 1,coef_more_than_one_discretionary_tours,coef_more_than_one_discretionary_tours,,coef_more_than_one_discretionary_tours,,coef_more_than_one_discretionary_tours,coef_more_than_one_discretionary_tours, +util_low_income_group_and_escorting_tour,Dummy for low Income group (> 150K) & escorting tour,low_income * escort,,,coef_low_income_group_and_escorting_tour,,,coef_low_income_group_and_escorting_tour,, +util_mediumlow_income_group_and_escorting_tour,Dummy for medium low Income group (> 150K) & escorting tour,medium_low_income * escort,,,coef_medium_low_income_group_and_escorting_tour,,,coef_medium_low_income_group_and_escorting_tour,, +util_mediumhigh_income_group_and_escorting_tour,Dummy for medium high Income group (> 150K) & escorting tour,medium_high_income * escort,,,coef_medium_high_income_group_and_escorting_tour,,,,, +util_high_income_group_and_escorting_tour,Dummy for high Income group (> 150K) & escorting tour,high_income * escort,coef_high_income_group_and_escorting_tour,coef_high_income_group_and_escorting_tour,coef_high_income_group_and_escorting_tour,,,,,coef_high_income_group_and_escorting_tour +util_low_income_group_and_shopping_tour,Dummy for low Income group (> 150K) & shopping tour,low_income * shopping,,coef_low_income_group_and_shopping_tour,,coef_low_income_group_and_shopping_tour,,,, +util_mediumlow_income_group_and_shopping_tour,Dummy for medium low Income group (> 150K) & shopping tour,medium_low_income * shopping,,coef_medium_low_income_group_and_shopping_tour,,coef_medium_low_income_group_and_shopping_tour,,,, +util_mediumhigh_income_group_and_shopping_tour,Dummy for medium high Income group (> 150K) & shopping tour,medium_high_income * shopping,coef_mediumhigh_income_group_and_shopping_tour,coef_medium_high_income_group_and_shopping_tour,coef_medium_high_income_group_and_shopping_tour,,coef_mediumhigh_income_group_and_shopping_tour,,, +util_high_income_group_and_shopping_tour,Dummy for high Income group (> 150K) & shopping tour,high_income * shopping,coef_high_income_group_and_shopping_tour,coef_high_income_group_and_shopping_tour,coef_high_income_group_and_shopping_tour,,coef_high_income_group_and_shopping_tour,,coef_high_income_group_and_shopping_tour, +util_low_income_group_and_maintenance_tour,Dummy for low Income group (<30k) & maintenance tour,low_income * othmaint,coef_low_income_group_and_maintenance_tour,,,,coef_low_income_group_and_maintenance_tour,,, +util_mediumlow_income_group_and_maintenance_tour,Dummy for Mediumlow Income group (30K-60K) & maintenance tour,medium_low_income * othmaint,coef_mediumlow_income_group_and_maintenance_tour,,,,coef_mediumlow_income_group_and_maintenance_tour,,, +util_mediumhigh_income_group_and_maintenance_tour,Dummy for Medium high Income group (30K-60K) & maintenance tour,medium_high_income * othmaint,,,coef_mediumhigh_income_group_and_maintenance_tour,,,,coef_mediumhigh_income_group_and_maintenance_tour, +util_high_income_group_and_maintenance_tour,Dummy for High Income group (>150K) & maintenance tour,high_income * othmaint,coef_high_income_group_and_maintenance_tour,,coef_high_income_group_and_maintenance_tour,,,,coef_high_income_group_and_maintenance_tour, +util_low_income_group_and_eating_out_tour,Dummy for Low Income group (<30K) & Eating out tour,low_income * eatout,coef_low_income_group_and_eating_out_tour,coef_low_income_group_and_eating_out_tour,,coef_low_income_group_and_eating_out_tour,coef_low_income_group_and_eating_out_tour,,, +util_medium_low_income_group_and_eating_out_tour,Dummy for medium low Income group (>150K) & Eating out tour,medium_low_income * eatout,,coef_medium_low_income_group_and_eating_out_tour,,,coef_medium_low_income_group_and_eating_out_tour,,, +util_medium_high_income_group_and_eating_out_tour,Dummy for medium high Income group (>150K) & Eating out tour,medium_high_income * eatout,,,coef_medium_high_income_group_and_eating_out_tour,,,,, +util_high_income_group_and_eating_out_tour,Dummy for High Income group (>150K) & Eating out tour,high_income * eatout,coef_high_income_group_and_eating_out_tour,,coef_high_income_group_and_eating_out_tour,coef_high_income_group_and_eating_out_tour,,,, +util_low_income_group_and_discretionary_tour,Dummy for Low Income group (<30K) & Discretionary tour,low_income * othdiscr,coef_low_income_group_and_discretionary_tour,coef_low_income_group_and_discretionary_tour,coef_low_income_group_and_discretionary_tour,coef_low_income_group_and_discretionary_tour,coef_low_income_group_and_discretionary_tour,coef_low_income_group_and_discretionary_tour,coef_low_income_group_and_discretionary_tour, +util_medium_low_income_group_and_discretionary_tour,Dummy for Medium Low Income group (<30K) & Discretionary tour,medium_low_income * othdiscr,,,,coef_medium_low_income_group_and_discretionary_tour,,,coef_medium_low_income_group_and_discretionary_tour, +util_mediumhigh_income_group_and_discretionary_tour,Dummy for Mediumhigh Income group (100k-150K) & Discretionary tour,medium_high_income * othdiscr,coef_mediumhigh_income_group_and_discretionary_tour,coef_mediumhigh_income_group_and_discretionary_tour,coef_mediumhigh_income_group_and_discretionary_tour,,coef_mediumhigh_income_group_and_discretionary_tour,coef_mediumhigh_income_group_and_discretionary_tour,, +util_high_income_group_and_discretionary_tour,Dummy for High Income group (>150K) & Discretionary tour,high_income * othdiscr,coef_high_income_group_and_discretionary_tour,coef_high_income_group_and_discretionary_tour,coef_high_income_group_and_discretionary_tour,,coef_high_income_group_and_discretionary_tour,coef_high_income_group_and_discretionary_tour,coef_high_income_group_and_discretionary_tour, +util_low_income_group_and_visiting_tour,Dummy for Low Income group (<30k) & Visiting tour,low_income * social,coef_low_income_group_and_visiting_tour,,coef_low_income_group_and_visiting_tour,,,,coef_low_income_group_and_visiting_tour, +util_mediumlow_income_group_and_visiting_tour,Dummy for medium Low Income group (<30k) & Visiting tour,medium_low_income * social,,,coef_medium_low_income_group_and_visiting_tour,,,,coef_medium_low_income_group_and_visiting_tour, +util_high_income_group_and_visiting_tour,Dummy for high Income group (<30k) & Visiting tour,high_income * social,,,coef_high_income_group_and_visiting_tour,coef_high_income_group_and_visiting_tour,coef_high_income_group_and_visiting_tour,coef_high_income_group_and_visiting_tour,coef_high_income_group_and_visiting_tour, +util_mediumhigh_income_group_and_visiting_tour,Dummy for Mediumhigh Income group (50K-100K) & Visiting tour,medium_high_income * social,,,,coef_mediumhigh_income_group_and_visiting_tour,,coef_mediumhigh_income_group_and_visiting_tour,, +util_female_and_escorting_tour,Dummy for Female & Escorting Tour,female * escort,coef_female_and_escorting_tour,coef_female_and_escorting_tour,coef_female_and_escorting_tour,coef_female_and_escorting_tour,,,, +util_female_and_shopping_tour,Dummy for Female & Shopping Tour,female * shopping,,coef_female_and_shopping_tour,coef_female_and_shopping_tour,coef_female_and_shopping_tour,coef_female_and_shopping_tour,coef_female_and_shopping_tour,, +util_female_and_maintenance_tour,Dummy for Female & Maintenance Tour,female * othmaint,,,coef_female_and_maintenance_tour,,coef_female_and_maintenance_tour,,, +util_female_and_eatingout_tour,Dummy for Female & EatingOut Tour,female * eatout,,coef_female_and_eatingout_tour,,,coef_female_and_eatingout_tour,,, +util_female_and_discretionary_tour,Dummy for Female & Discretionary Tour,female * othdiscr,,,,,coef_female_and_discretionary_tour,,, +util_female_and_discretionary_tour,Dummy for Female & Visiting Tour,female * social,,,coef_female_and_visit_tour,coef_female_and_visit_tour,,,, +util_zero_car_ownership_and_tour_frequency_is_2+,Dummy for zero car ownership & tour frequency >=2,no_cars & (tot_tours >= 2),coef_zero_car_ownership_and_tour_frequency_is_2_plus,coef_zero_car_ownership_and_tour_frequency_is_2_plus,,coef_zero_car_ownership_and_tour_frequency_is_2_plus,,,, +util_car_shortage_vs_workers_and_tour_frequency_is_2+,Dummy for Car Shortage vs Workers & tour frequency >=2,~no_cars & (car_sufficiency < 0) & (tot_tours >= 2),coef_car_shortage_vs_workers_and_tour_frequency_is_2_plus,coef_car_shortage_vs_workers_and_tour_frequency_is_2_plus,,,,,, +util_car_surplus_vs_workers_and_tour_frequency_is_1+,Dummy for Car Surplus vs Workers & tour frequency >=1,~no_cars & (car_sufficiency > 0) & (tot_tours >= 1),,,coef_car_surplus_vs_workers_and_tour_frequency_is_1_plus,,,,, +util_car_surplus_vs_workers_and_tour_frequency_is_3+,Dummy for Car Surplus vs Workers & tour frequency >=3,~no_cars & (car_sufficiency > 0) & (tot_tours >= 3),coef_car_surplus_vs_workers_and_tour_frequency_is_3_plus,,,,,,, +util_zero_car_ownership_and_escorting_tour,Dummy for zero car ownership & number of escorting tour,no_cars * escort,coef_zero_car_ownership_and_escorting_tour,,,coef_zero_car_ownership_and_escorting_tour,,,,coef_zero_car_ownership_and_escorting_tour +util_car_shortage_vs_workers_and_escorting_tour,Dummy for Car Shortage vs Workers & number of escorting tours,(~no_cars & (car_sufficiency < 0)) * escort,coef_car_shortage_vs_workers_and_number_of_escorting_tours,coef_car_shortage_vs_workers_and_number_of_escorting_tours,,,,,,coef_car_shortage_vs_workers_and_number_of_escorting_tours +util_car_surplus_vs_workers_and_escorting_tour,Dummy for Car Surplus vs Workers & number of escorting tours,(~no_cars & (car_sufficiency > 0)) * escort,,coef_car_surplus_vs_workers_and_number_of_escorting_tours,,coef_car_surplus_vs_workers_and_number_of_escorting_tours,,,, +util_car_shortage_vs_workers_and_shopping_tour,Dummy for Car Shortage vs Workers & number of shopping tours,(~no_cars & (car_sufficiency < 0)) * shopping,,coef_car_shortage_vs_workers_and_number_of_shopping_tours,,,,,, +util_car_surplus_vs_workers_and_shopping_tour,Dummy for Car Surplus vs Workers & number of shopping tours,(~no_cars & (car_sufficiency > 0)) * shopping,,coef_car_surplus_vs_workers_and_number_of_shopping_tours,,,,,, +util_car_surplus_vs_workers_and_maintenance_tour,Dummy for Car Surplus vs Workers & number of maintenance tours,(~no_cars & (car_sufficiency > 0)) * othmaint,,,,,,,coef_car_surplus_vs_workers_and_number_of_maintenance_tours, +util_car_surplus_vs_workers_and_discretionary_tour,Dummy for Car Surplus vs Workers & number of discretionary tours,(~no_cars & (car_sufficiency > 0)) * othdiscr,,,,,,,coef_car_surplus_vs_workers_and_number_of_discretionary_tours, +util_number_of_full_time_worker_and_escorting_tour,Dummy for number of Full time Worker (other than modeled person) & Escorting tour ,num_full_time_workers_not_self * escort,coef_number_of_full_time_worker_and_escorting_tour,coef_number_of_full_time_worker_and_escorting_tour,coef_number_of_full_time_worker_and_escorting_tour,coef_number_of_full_time_worker_and_escorting_tour,coef_number_of_full_time_worker_and_escorting_tour,,, +util_number_of_part_time_worker_and_escorting_tour,Dummy for number of Part time Worker (other than modeled person) & Escorting tour ,num_part_time_workers_not_self * escort,coef_number_of_part_time_worker_and_escorting_tour,coef_number_of_part_time_worker_and_escorting_tour,coef_number_of_part_time_worker_and_escorting_tour,coef_number_of_part_time_worker_and_escorting_tour,coef_number_of_part_time_worker_and_escorting_tour,,,coef_number_of_part_time_worker_and_escorting_tour +util_number_of_non_worker_and_escorting_tour,Dummy for number of Non-Worker (other than modeled person) & Escorting tour ,num_non_workers_not_self * escort,coef_number_of_non_worker_and_escorting_tour,coef_number_of_non_worker_and_escorting_tour,coef_number_of_non_worker_and_escorting_tour,coef_number_of_non_worker_and_escorting_tour,coef_number_of_non_worker_and_escorting_tour,,,coef_number_of_non_worker_and_escorting_tour +util_number_of_retiree_and_escorting_tour,Dummy for number of Retiree (other than modeled person) & Escorting tour ,num_retirees_not_self * escort,coef_number_of_retiree_and_escorting_tour,,coef_number_of_retiree_and_escorting_tour,coef_number_of_retiree_and_escorting_tour,,,, +util_number_of_university_student_and_escorting_tour,Dummy for number of University Student (other than modeled person) & Escorting tour ,num_university_students_not_self * escort,coef_number_of_university_student_and_escorting_tour,coef_number_of_university_student_and_escorting_tour,coef_number_of_university_student_and_escorting_tour,coef_number_of_university_student_and_escorting_tour,,,,coef_number_of_university_student_and_escorting_tour +util_number_of_driving_school_kid_and_escorting_tour,Dummy for number of Driving School Kid (other than modeled person) & Escorting tour ,num_driving_age_students_not_self * escort,coef_number_of_driving_school_kid_and_escorting_tour,coef_number_of_driving_school_kid_and_escorting_tour,,coef_number_of_driving_school_kid_and_escorting_tour,coef_number_of_driving_school_kid_and_escorting_tour,,, +util_go_out_pre_driving_school_kid_and_escorting_tour,Dummy for number of Pre-Driving School Kid go out & Escorting tour ,num_pre_driving_age_school_kids_go_out * escort,coef_go_out_pre_driving_school_kid_and_escorting_tour,coef_go_out_pre_driving_school_kid_and_escorting_tour,coef_go_out_pre_driving_school_kid_and_escorting_tour,coef_go_out_pre_driving_school_kid_and_escorting_tour,coef_go_out_pre_driving_school_kid_and_escorting_tour,coef_go_out_pre_driving_school_kid_and_escorting_tour,coef_go_out_pre_driving_school_kid_and_escorting_tour,coef_go_out_pre_driving_school_kid_and_escorting_tour +util_go_out_pre_school_kid_and_escorting_tour,Dummy for Pre-School Kid going out & Escorting tour ,num_pre_school_kids_go_out * escort,coef_go_out_school_kid_and_escorting_tour,coef_go_out_school_kid_and_escorting_tour,coef_go_out_school_kid_and_escorting_tour,coef_go_out_school_kid_and_escorting_tour,,,,coef_go_out_school_kid_and_escorting_tour +util_number_of_full_time_worker_and_shopping_tour,Dummy for number of Full time Worker (other than modeled person) & Shopping tour ,num_full_time_workers_not_self * shopping,,coef_number_of_full_time_worker_and_shopping_tour,coef_number_of_full_time_worker_and_shopping_tour,,,coef_number_of_full_time_worker_and_shopping_tour,, +util_number_of_part_time_worker_and_shopping_tour,Dummy for number of Part time Worker (other than modeled person) & Shopping tour ,num_part_time_workers_not_self * shopping,,coef_number_of_part_time_worker_and_shopping_tour,coef_number_of_part_time_worker_and_shopping_tour,,,coef_number_of_part_time_worker_and_shopping_tour,, +util_number_of_non_worker_and_shopping_tour,Dummy for number of Non-Worker (other than modeled person) & Shopping tour ,num_non_workers_not_self * shopping,,coef_number_of_non_worker_and_shopping_tour,,coef_number_of_non_worker_and_shopping_tour,,coef_number_of_non_worker_and_shopping_tour,, +util_number_of_retiree_and_shopping_tour,Dummy for number of Retiree (other than modeled person) & Shopping tour ,num_retirees_not_self * shopping,,,,,coef_number_of_retiree_and_shopping_tour,,, +util_number_of_university_student_and_shopping_tour,Dummy for number of University Student (other than modeled person) & Shopping tour ,num_university_students_not_self * shopping,,,coef_number_of_university_student_and_shopping_tour,,,,, +util_number_of_driving_school_kid_and_shopping_tour,Dummy for number of Driving School Kid (other than modeled person) & Shopping tour ,num_driving_age_students_not_self * shopping,coef_number_of_driving_school_kid_and_shopping_tour,,,,,,coef_number_of_driving_school_kid_and_shopping_tour, +util_number_of_pre_driving_school_kid_and_shopping_tour,Dummy for number of Pre-Driving School Kid (other than modeled person) & Shopping tour ,num_pre_driving_age_school_kids_not_self * shopping,coef_number_of_pre_driving_school_kid_and_shopping_tour,,,,,coef_number_of_pre_driving_school_kid_and_shopping_tour,coef_number_of_pre_driving_school_kid_and_shopping_tour, +util_number_of_pre_school_kid_and_shopping_tour,Dummy for number of Pre-School Kid (other than modeled person) & Shopping tour ,num_pre_school_kids_not_self * shopping,coef_number_of_pre_school_kid_and_shopping_tour,,,,,coef_number_of_pre_school_kid_and_shopping_tour,coef_number_of_pre_school_kid_and_shopping_tour, +util_number_of_full_time_worker_and_maintenance_tour,Dummy for number of Full time Worker (other than modeled person) & Maintenance tour ,num_full_time_workers_not_self * othmaint,coef_number_of_full_time_worker_and_maintenance_tour,coef_number_of_full_time_worker_and_maintenance_tour,coef_number_of_full_time_worker_and_maintenance_tour,coef_number_of_full_time_worker_and_maintenance_tour,,,, +util_number_of_part_time_worker_and_maintenance_tour,Dummy for number of Part time Worker (other than modeled person) & Maintenance tour ,num_part_time_workers_not_self * othmaint,coef_number_of_part_time_worker_and_maintenance_tour,coef_number_of_part_time_worker_and_maintenance_tour,coef_number_of_part_time_worker_and_maintenance_tour,coef_number_of_part_time_worker_and_maintenance_tour,,,, +util_number_of_non_worker_and_maintenance_tour,Dummy for number of Non-Worker(other than modeled person) & Maintenance tour ,num_non_workers_not_self * othmaint,coef_number_of_non_worker_and_maintenance_tour,coef_number_of_non_worker_and_maintenance_tour,coef_number_of_non_worker_and_maintenance_tour,,,,, +util_number_of_retiree_and_maintenance_tour,Dummy for number of Retiree (other than modeled person) & Maintenance tour ,num_retirees_not_self * othmaint,,,,,coef_number_of_retiree_and_maintenance_tour,,, +util_number_of_university_student_and_maintenance_tour,Dummy for number of University Student (other than modeled person) & Maintenance tour ,num_university_students_not_self * othmaint,coef_number_of_university_student_and_maintenance_tour,,coef_number_of_university_student_and_maintenance_tour,,,,, +util_number_of_full_time_worker_and_eating_out_tour,Dummy for number of Full time Worker (other than modeled person) & Eating Out tour ,num_full_time_workers_not_self * eatout,coef_number_of_full_time_worker_and_eating_out_tour,coef_number_of_full_time_worker_and_eating_out_tour,,,,,, +util_number_of_part_time_worker_and_eating_out_tour,Dummy for number of Part time Worker (other than modeled person) & Eating Out tour ,num_part_time_workers_not_self * eatout,coef_number_of_part_time_worker_and_eating_out_tour,,,,,,, +util_number_of_non_worker_and_eating_out_tour,Dummy for number of Non-Worker (other than modeled person) & Eating Out tour ,num_non_workers_not_self * eatout,coef_number_of_non_worker_and_eating_out_tour,,,,,,, +util_number_of_retiree_and_eating_out_tour,Dummy for number of Retiree (other than modeled person) & Eating Out tour ,num_retirees_not_self * eatout,coef_number_of_retiree_and_eating_out_tour,,,,,,, +util_number_of_university_student_and_eating_out_tour,Dummy for number of University Student (other than modeled person) & Eating Out tour ,num_university_students_not_self * eatout,coef_number_of_university_student_and_eating_out_tour,,,,,,, +util_number_of_pre_driving_school_kid_and_eating_out_tour,Dummy for number of Pre-Driving School Kid (other than modeled person) & Eating Out tour ,num_pre_driving_age_school_kids_not_self * eatout,coef_number_of_pre_driving_school_kid_and_eating_out_tour,,,coef_number_of_pre_driving_school_kid_and_eating_out_tour,,,, +util_number_of_pre_school_kid_and_eating_out_tour,Dummy for number of Pre-School Kid (other than modeled person) & Eating Out tour ,num_pre_school_kids_not_self * eatout,coef_number_of_pre_school_kid_and_eating_out_tour,,,coef_number_of_pre_school_kid_and_eating_out_tour,,,, +util_number_of_part_time_worker_and_visiting_tour,Dummy for number of Part time Worker (other than modeled person) & Visiting tour ,num_part_time_workers_not_self * social,,coef_number_of_part_time_worker_and_visiting_tour,,,,,, +util_number_of_non_worker_and_visiting_tour,Dummy for number of Non-Worker (other than modeled person) & Visiting tour ,num_non_workers_not_self * social,coef_number_of_non_worker_and_visiting_tour,,,,,,, +util_number_of_retiree_and_visiting_tour,Dummy for number of Retiree (other than modeled person) & Visiting tour ,num_retirees_not_self * social,coef_number_of_retiree_and_visiting_tour,coef_number_of_retiree_and_visiting_tour,,,coef_number_of_retiree_and_visiting_tour,,, +util_number_of_university_student_and_visiting_tour,Dummy for number of University Student (other than modeled person) & Visiting tour ,num_university_students_not_self * social,coef_number_of_university_student_and_visiting_tour,,,,,,, +util_number_of_driving_school_kid_and_visiting_tour,Dummy for number of Driving School Kid (other than modeled person) & visiting tour ,num_driving_age_students_not_self * social,,coef_number_of_driving_school_kid_and_visiting_tour,,,,,coef_number_of_driving_school_kid_and_visiting_tour, +util_number_of_pre_driving_school_kid_and_visiting_tour,Dummy for number of Pre-Driving School Kid (other than modeled person) & visiting tour ,num_pre_driving_age_school_kids_not_self * social,,coef_number_of_pre_driving_school_kid_and_visiting_tour,,coef_number_of_pre_driving_school_kid_and_visiting_tour,,,coef_number_of_pre_driving_school_kid_and_visiting_tour, +util_number_of_pre_school_kid_and_visiting_tour,Dummy for number of Pre-School Kid (other than modeled person) & visiting tour ,num_pre_school_kids_not_self * social,,coef_number_of_pre_school_kid_and_visiting_tour,,coef_number_of_pre_school_kid_and_visiting_tour,,,coef_number_of_pre_school_kid_and_visiting_tour, +util_number_of_part_time_worker_and_discretionary_tour,Dummy for number of Part time Worker (other than modeled person) & Discretionary tour ,num_part_time_workers_not_self * othdiscr,,,,,,coef_number_of_part_time_worker_and_discretionary_tour,, +util_number_of_non_worker_and_discretionary_tour,Dummy for number of Non-Worker (other than modeled person) & Discretionary tour ,num_non_workers_not_self * othdiscr,,,,,,coef_number_of_non_worker_and_discretionary_tour,, +util_number_of_university_student_and_discretionary_tour,Dummy for number of University Student (other than modeled person) & Discretionary tour ,num_university_students_not_self * othdiscr,,,coef_number_of_university_student_and_discretionary_tour,,,coef_number_of_university_student_and_discretionary_tour,, +util_number_of_driving_school_kid_and_discretionary_tour,Dummy for number of Driving School Kid (other than modeled person) & Discretionary tour ,num_driving_age_students_not_self * othdiscr,coef_number_of_driving_school_kid_and_discretionary_tour,coef_number_of_driving_school_kid_and_discretionary_tour,,coef_number_of_driving_school_kid_and_discretionary_tour,,,coef_number_of_driving_school_kid_and_discretionary_tour, +util_number_of_pre_driving_school_kid_and_discretionary_tour,Dummy for number of Pre-Driving School Kid (other than modeled person) & Discretionary tour ,num_pre_driving_age_school_kids_not_self * othdiscr,coef_number_of_pre_driving_school_kid_and_discretionary_tour,coef_number_of_pre_driving_school_kid_and_discretionary_tour,,coef_number_of_pre_driving_school_kid_and_discretionary_tour,,,coef_number_of_pre_driving_school_kid_and_discretionary_tour, +util_number_of_pre_school_kid_and_discretionary_tour,Dummy for number of Pre-School Kid (other than modeled person) & Discretionary tour ,num_pre_school_kids_not_self * othdiscr,coef_number_of_pre_school_kid_and_discretionary_tour,coef_number_of_pre_school_kid_and_discretionary_tour,,coef_number_of_pre_school_kid_and_discretionary_tour,,,coef_number_of_pre_school_kid_and_discretionary_tour, +util_retired_hh_and_escorting,"Household Type (All Retirees and Non-workers only), Escorting",retiredHh * escort,,,,,coef_retired_hh_and_escorting_tour,,, +util_retired_hh_and_shopping,"Household Type (All Retirees and Non-workers only), Shopping",retiredHh * shopping,,,,,coef_retired_hh_and_shopping_tour,,, +util_retired_hh_and_eating_out,"Household Type (All Retirees and Non-workers only), Eating out",retiredHh * eatout,,,,,coef_retired_hh_and_eating_out_tour,,, +util_retired_hh_and_discretionary,"Household Type (All Retirees and Non-workers only), Discretionary",retiredHh * othdiscr,,,,,coef_retired_hh_and_discretionary_tour,,, +util_work_accessibility_and_tour_frequency_is_1,Work Accessibility & Tour Frequency =1,WorkLocationLogsum * ((tot_tours == 1) & (cdap_activity == 'M')),coef_work_accessibility_and_tour_frequency_is_1,coef_work_accessibility_and_tour_frequency_is_1,,,,,, +util_work_accessibility_and_tour_frequency_is_2,Work Accessibility & Tour Frequency =2,WorkLocationLogsum * ((tot_tours == 2) & (cdap_activity == 'M')),coef_work_accessibility_and_tour_frequency_is_2,coef_work_accessibility_and_tour_frequency_is_2,,,,,, +util_work_accessibility_and_tour_frequency_is_3,Work Accessibility & Tour Frequency =3,WorkLocationLogsum * ((tot_tours == 3) & (cdap_activity == 'M')),coef_work_accessibility_and_tour_frequency_is_3,,,,,,, +util_work_accessibility_and_tour_frequency_is_3_plus,Work Accessibility & Tour Frequency =3+,WorkLocationLogsum * ((tot_tours >= 3) & (cdap_activity == 'M')),,coef_work_accessibility_and_tour_frequency_is_3_plus,,,,,, +util_work_accessibility_and_tour_frequency_is_4,Work Accessibility & Tour Frequency =4,WorkLocationLogsum * ((tot_tours == 4) & (cdap_activity == 'M')),coef_work_accessibility_and_tour_frequency_is_4,,,,,,, +util_work_accessibility_and_tour_frequency_is_5_plus,Work Accessibility & Tour Frequency =5+,WorkLocationLogsum * ((tot_tours > 5) & (cdap_activity == 'M')),coef_work_accessibility_and_tour_frequency_is_5_plus,,,,,,, +util_school_accessibility_and_tour_frequency_is_1,School Accessibility & Tour Frequency =1,SchoolLocationLogsum * ((tot_tours == 1) & (cdap_activity == 'M')),,,,,,,coef_school_accessibility_and_tour_frequency_is_1, +util_school_accessibility_and_tour_frequency_is_1_plus,School Accessibility & Tour Frequency =1+,SchoolLocationLogsum * ((tot_tours >= 1) & (cdap_activity == 'M')),,,coef_school_accessibility_and_tour_frequency_is_1_plus,,,,, +util_school_accessibility_and_tour_frequency_is_2_plus,School Accessibility & Tour Frequency =2+,SchoolLocationLogsum * ((tot_tours >= 2) & (cdap_activity == 'M')),,,,,,coef_school_accessibility_and_tour_frequency_is_2_plus,coef_school_accessibility_and_tour_frequency_is_2_plus, +util_work_from_home_and_tour_frequency_is_1,Work From Home & Tour Frequency =1,(WorkLocation==99999) & (tot_tours == 1),coef_work_from_home_and_tour_frequency_is_1,,,,,,, +util_work_from_home_and_tour_frequency_is_2,Work From Home & Tour Frequency =2,(WorkLocation==99999) & (tot_tours == 2),coef_work_from_home_and_tour_frequency_is_2,,,,,,, +util_work_from_home_and_tour_frequency_is_3,Work From Home & Tour Frequency =3,(WorkLocation==99999) & (tot_tours == 3),coef_work_from_home_and_tour_frequency_is_3,,,,,,, +util_work_from_home_and_tour_frequency_is_4,Work From Home & Tour Frequency =4,(WorkLocation==99999) & (tot_tours == 4),coef_work_from_home_and_tour_frequency_is_4,,,,,,, +util_work_from_home_and_tour_frequency_is_5_plus,Work From Home & Tour Frequency =5+,(WorkLocation==99999) & (tot_tours > 5),coef_work_from_home_and_tour_frequency_is_5_plus,,,,,,, +util_retail_accessibility_for_escorting,Retail Accessibility for Escorting,((autosnum_workers)*escort_hov_oversufficient_accessibility)*escort,coef_retail_accessibility_for_escorting,coef_retail_accessibility_for_escorting,,coef_retail_accessibility_for_escorting,coef_retail_accessibility_for_escorting,,coef_retail_accessibility_for_escorting,coef_retail_accessibility_for_escorting +util_retail_accessibility_for_shopping,Retail Accessibility for Shopping,((autosnum_workers)*shop_hov_oversufficient_accessibility)*shopping,coef_retail_accessibility_for_shopping,,,,coef_retail_accessibility_for_shopping,coef_retail_accessibility_for_shopping,coef_retail_accessibility_for_shopping,coef_retail_accessibility_for_shopping +util_retail_accessibility_for_maintenance,Retail Accessibility for Maintenance,((autosnum_workers)*maint_hov_oversufficient_accessibility)*othmaint,coef_retail_accessibility_for_maintenance,coef_retail_accessibility_for_maintenance,,coef_retail_accessibility_for_maintenance,coef_retail_accessibility_for_maintenance,,coef_retail_accessibility_for_maintenance, +util_retail_accessibility_for_eating_out,Retail Accessibility for Eating Out,((autosnum_workers)*eat_hov_oversufficient_accessibility)*eatout,coef_retail_accessibility_for_eating_out,coef_retail_accessibility_for_eating_out,,,,coef_retail_accessibility_for_eating_out,coef_retail_accessibility_for_eating_out, +util_retail_accessibility_for_discretionary,Retail Accessibility for Discretionary,((autosnum_workers)*discr_hov_oversufficient_accessibility)*othdiscr,,,coef_retail_accessibility_for_discretionary,coef_retail_accessibility_for_discretionary,coef_retail_accessibility_for_discretionary,,coef_retail_accessibility_for_discretionary, +util_retail_accessibility_for_visiting,Retail Accessibility for Visiting,((autosnum_workers)*visit_hov_oversufficient_accessibility)*othdiscr,,,,coef_retail_accessibility_for_visiting,coef_retail_accessibility_for_visiting,,, +util_walk_accessibility_for_discretionary,Walk Accessibility for Discretionary,nonmandatory_nm_accessibility *othdiscr,coef_walk_accessibility_for_discretionary,coef_walk_accessibility_for_discretionary,,,,,, +util_walk_accessibility_for_eat_out,Walk Accessibility for Eating Out,nonmandatory_nm_accessibility *eatout,,,coef_walk_accessibility_for_eatout,coef_walk_accessibility_for_eatout,,,, +util_origin_population_density_for_visiting,Population Density & Visiting tour,PopDen * social,,coef_origin_population_density_for_visiting,,,,,, +util_college_education_and_escorting,College Education & Escorting tour,(education_attainment>=13) * escort,,,,,coef_college_education_for_escorting,,, +util_college_education_and_visiting,College Education & Visiting tour,(education_attainment>=13) * social,coef_college_education_for_visiting,,,,coef_college_education_for_visiting,,, +util_college_education_and_discretionary,College Education & Discretionary tour,(education_attainment>=13) * othdiscr,coef_college_education_for_discretionary,coef_college_education_for_discretionary,,coef_college_education_for_discretionary,coef_college_education_for_discretionary,,, +util_college_education_and_shopping,College Education & Shopping tour,(education_attainment>=13) * shopping,,,,coef_college_education_for_shopping,coef_college_education_for_shopping,,, +util_college_education_and_maintenance,College Education & Maintenance tour,(education_attainment>=13) * othmaint,,,,coef_college_education_for_maintenance,,,, +util_college_education_and_eating_out,College Education & Eating out tour,(education_attainment>=13) * eatout,,,,coef_college_education_for_eatout,,,, +util_low_education_and_visiting,Less than High School Education & Visiting tour,(education_attainment<9) * social,coef_low_education_for_visiting,,,coef_low_education_for_visiting,,,, +util_low_education_and_discretionary,Less than High School Education & Discretionary tour,(education_attainment<9) * othdiscr,,coef_low_education_for_discretionary,,coef_low_education_for_discretionary,coef_low_education_for_discretionary,,, +util_low_education_and_escorting,Less than High School Education & Escorting tour,(education_attainment<9) * escort,,,,coef_low_education_for_escorting,coef_low_education_for_escorting,,, +util_low_education_and_shopping,Less than High School Education & Shopping tour,(education_attainment<9) * shopping,,,,coef_low_education_for_shopping,coef_low_education_for_shopping,,, +util_low_education_and_eating_out,Less than High School Education & Eating out tour,(education_attainment<9) * eatout,,,,coef_low_education_for_eatout,,,, +util_low_education_and_maintenance,Less than High School Education & Maintenance tour,(education_attainment<9) * othmaint,,,,,coef_low_education_for_maintenance,,, +util_detached_household_and_escorting_tour,Detached Household & Escorting tour,(building_size==1) * escort,coef_detached_household_and_escorting,coef_detached_household_and_escorting,,,coef_detached_household_and_escorting,,, +util_detached_household_and_eat_out,Detached Household & Eating out tour,(building_size==1) * eatout,,coef_detached_household_and_eating_out,,,coef_detached_household_and_eating_out,,, +util_detached_household_and_discretionary,Detached Household & discretionary tour,(building_size==1) * othdiscr,,,coef_detached_household_and_discretionary,,coef_detached_household_and_discretionary,,, +util_1_escort_tour_constant,1 Escort Tour Constant,escort == 1,coef_1_escort_tour_constant,coef_1_escort_tour_constant,coef_1_escort_tour_constant,coef_1_escort_tour_constant,coef_1_escort_tour_constant,coef_1_escort_tour_constant,coef_1_escort_tour_constant,coef_1_escort_tour_constant +util_2_plus_escort_tours_constant,2+ Escort Tours Constant,escort >= 2,coef_2_plus_escort_tours_constant,coef_2_plus_escort_tours_constant,coef_2_plus_escort_tours_constant,coef_2_plus_escort_tours_constant,coef_2_plus_escort_tours_constant,coef_2_plus_escort_tours_constant,coef_2_plus_escort_tours_constant,coef_2_plus_escort_tours_constant +util_1_shopping_tours_constant,1 Shopping Tours Constant,shopping == 1,coef_1_shopping_tours_constant,coef_1_shopping_tours_constant,coef_1_shopping_tours_constant,coef_1_shopping_tours_constant,coef_1_shopping_tours_constant,coef_1_shopping_tours_constant,coef_1_shopping_tours_constant,coef_1_shopping_tours_constant +util_2_plus_shopping_tours_constant,2+ Shopping Tours Constant,shopping >= 2,coef_2_plus_shopping_tours_constant,coef_2_plus_shopping_tours_constant,coef_2_plus_shopping_tours_constant,coef_2_plus_shopping_tours_constant,coef_2_plus_shopping_tours_constant,coef_2_plus_shopping_tours_constant,coef_2_plus_shopping_tours_constant,coef_2_plus_shopping_tours_constant +util_1_maintenance_tours_constant,1 Maintenance Tours Constant,othmaint == 1,coef_1_maintenance_tours_constant,coef_1_maintenance_tours_constant,coef_1_maintenance_tours_constant,coef_1_maintenance_tours_constant,coef_1_maintenance_tours_constant,coef_1_maintenance_tours_constant,coef_1_maintenance_tours_constant,coef_1_maintenance_tours_constant +util_2_plus_maintenance_tours_constant,2+ Maintenance Tours Constant,othmaint >= 2,coef_2_plus_maintenance_tours_constant,coef_2_plus_maintenance_tours_constant,coef_2_plus_maintenance_tours_constant,coef_2_plus_maintenance_tours_constant,coef_2_plus_maintenance_tours_constant,coef_2_plus_maintenance_tours_constant,coef_2_plus_maintenance_tours_constant,coef_2_plus_maintenance_tours_constant +util_1_plus_eating_out_tours_constant,1+ Eating Out Tours Constant,(eatout >= 1) * eatout,coef_1_plus_eating_out_tours_constant,coef_1_plus_eating_out_tours_constant,coef_1_plus_eating_out_tours_constant,coef_1_plus_eating_out_tours_constant,coef_1_plus_eating_out_tours_constant,coef_1_plus_eating_out_tours_constant,coef_1_plus_eating_out_tours_constant,coef_1_plus_eating_out_tours_constant +util_1_plus_visting_tours_constant,1+ Visting Tours Constant,(social >= 1) * social,coef_1_plus_visting_tours_constant,coef_1_plus_visting_tours_constant,coef_1_plus_visting_tours_constant,coef_1_plus_visting_tours_constant,coef_1_plus_visting_tours_constant,coef_1_plus_visting_tours_constant,coef_1_plus_visting_tours_constant,coef_1_plus_visting_tours_constant +util_1_other_discretionary_tours_constant,1 Other Discretionary Tours Constant,othdiscr == 1,coef_1_other_discretionary_tours_constant,coef_1_other_discretionary_tours_constant,coef_1_other_discretionary_tours_constant,coef_1_other_discretionary_tours_constant,coef_1_other_discretionary_tours_constant,coef_1_other_discretionary_tours_constant,coef_1_other_discretionary_tours_constant,coef_1_other_discretionary_tours_constant +util_2_plus_other_discretionary_tours_constant,2+ Other Discretionary Tours Constant,othdiscr >= 2,coef_2_plus_other_discretionary_tours_constant,coef_2_plus_other_discretionary_tours_constant,coef_2_plus_other_discretionary_tours_constant,coef_2_plus_other_discretionary_tours_constant,coef_2_plus_other_discretionary_tours_constant,coef_2_plus_other_discretionary_tours_constant,coef_2_plus_other_discretionary_tours_constant,coef_2_plus_other_discretionary_tours_constant +util_1_escort_tour_constant_tm2,1 Escort Tour constant_tm2,escort == 1,,coef_1_escort_tour_constant_tm2,coef_1_escort_tour_constant_tm2,coef_1_escort_tour_constant_tm2,coef_1_escort_tour_constant_tm2,coef_1_escort_tour_constant_tm2,coef_1_escort_tour_constant_tm2,coef_1_escort_tour_constant_tm2 +util_2_plus_escort_tours_constant_tm2,2+ Escort Tours constant_tm2,escort >= 2,,coef_2_plus_escort_tours_constant_tm2,coef_2_plus_escort_tours_constant_tm2,coef_2_plus_escort_tours_constant_tm2,coef_2_plus_escort_tours_constant_tm2,coef_2_plus_escort_tours_constant_tm2,coef_2_plus_escort_tours_constant_tm2,coef_2_plus_escort_tours_constant_tm2 +util_1_shopping_tours_constant_tm2,1 Shopping Tours constant_tm2,shopping == 1,,coef_1_shopping_tours_constant_tm2,coef_1_shopping_tours_constant_tm2,coef_1_shopping_tours_constant_tm2,coef_1_shopping_tours_constant_tm2,coef_1_shopping_tours_constant_tm2,coef_1_shopping_tours_constant_tm2,coef_1_shopping_tours_constant_tm2 +util_2_plus_shopping_tours_constant_tm2,2+ Shopping Tours constant_tm2,shopping >= 2,,coef_2_plus_shopping_tours_constant_tm2,coef_2_plus_shopping_tours_constant_tm2,coef_2_plus_shopping_tours_constant_tm2,coef_2_plus_shopping_tours_constant_tm2,coef_2_plus_shopping_tours_constant_tm2,coef_2_plus_shopping_tours_constant_tm2,coef_2_plus_shopping_tours_constant_tm2 +util_1_maintenance_tours_constant_tm2,1 Maintenance Tours constant_tm2,othmaint == 1,,coef_1_maintenance_tours_constant_tm2,coef_1_maintenance_tours_constant_tm2,coef_1_maintenance_tours_constant_tm2,coef_1_maintenance_tours_constant_tm2,coef_1_maintenance_tours_constant_tm2,coef_1_maintenance_tours_constant_tm2,coef_1_maintenance_tours_constant_tm2 +util_2_plus_maintenance_tours_constant_tm2,2+ Maintenance Tours constant_tm2,othmaint >= 2,,coef_2_plus_maintenance_tours_constant_tm2,coef_2_plus_maintenance_tours_constant_tm2,coef_2_plus_maintenance_tours_constant_tm2,coef_2_plus_maintenance_tours_constant_tm2,coef_2_plus_maintenance_tours_constant_tm2,coef_2_plus_maintenance_tours_constant_tm2,coef_2_plus_maintenance_tours_constant_tm2 +util_1_plus_eating_out_tours_constant_tm2,1+ Eating Out Tours constant_tm2,(eatout >= 1) * eatout,,coef_1_plus_eating_out_tours_constant_tm2,coef_1_plus_eating_out_tours_constant_tm2,coef_1_plus_eating_out_tours_constant_tm2,coef_1_plus_eating_out_tours_constant_tm2,coef_1_plus_eating_out_tours_constant_tm2,coef_1_plus_eating_out_tours_constant_tm2,coef_1_plus_eating_out_tours_constant_tm2 +util_1_plus_visting_tours_constant_tm2,1+ Visting Tours constant_tm2,(social >= 1) * social,,coef_1_plus_visting_tours_constant_tm2,coef_1_plus_visting_tours_constant_tm2,coef_1_plus_visting_tours_constant_tm2,coef_1_plus_visting_tours_constant_tm2,coef_1_plus_visting_tours_constant_tm2,coef_1_plus_visting_tours_constant_tm2,coef_1_plus_visting_tours_constant_tm2 +util_1_other_discretionary_tours_constant_tm2,1 Other Discretionary Tours constant_tm2,othdiscr == 1,,coef_1_other_discretionary_tours_constant_tm2,coef_1_other_discretionary_tours_constant_tm2,coef_1_other_discretionary_tours_constant_tm2,coef_1_other_discretionary_tours_constant_tm2,coef_1_other_discretionary_tours_constant_tm2,coef_1_other_discretionary_tours_constant_tm2,coef_1_other_discretionary_tours_constant_tm2 +util_2_plus_other_discretionary_tours_constant_tm2,2+ Other Discretionary Tours constant_tm2,othdiscr >= 2,,coef_2_plus_other_discretionary_tours_constant_tm2,coef_2_plus_other_discretionary_tours_constant_tm2,coef_2_plus_other_discretionary_tours_constant_tm2,coef_2_plus_other_discretionary_tours_constant_tm2,coef_2_plus_other_discretionary_tours_constant_tm2,coef_2_plus_other_discretionary_tours_constant_tm2,coef_2_plus_other_discretionary_tours_constant_tm2 +util_mandatory_dap_and_1_non_mand_tour_ABM_2_calib,Mandatory and 1 Non-Mandatory - ABM2 Calibration,(cdap_activity=='M') & (tot_tours==1),coef_mandatory_dap_and_1_non_mand_tour,coef_mandatory_dap_and_1_non_mand_tour,coef_mandatory_dap_and_1_non_mand_tour,,,coef_mandatory_dap_and_1_non_mand_tour,coef_mandatory_dap_and_1_non_mand_tour, +util_mandatory_dap_and_2_non_mand_tour_ABM_2_calib,Mandatory and 2 Non-Mandatory - ABM2 Calibration,(cdap_activity=='M') & (tot_tours==2),coef_mandatory_dap_and_2_non_mand_tour,coef_mandatory_dap_and_2_non_mand_tour,coef_mandatory_dap_and_2_non_mand_tour,,,coef_mandatory_dap_and_2_non_mand_tour,coef_mandatory_dap_and_2_non_mand_tour, +util_mandatory_dap_and_3_plus_non_mand_tour_ABM_2_calib,Mandatory and 3+ Non-Mandatory - ABM2 Calibration,(cdap_activity=='M') & (tot_tours>=3),coef_mandatory_dap_and_3_plus_non_mand_tour,coef_mandatory_dap_and_3_plus_non_mand_tour,coef_mandatory_dap_and_3_plus_non_mand_tour,,,coef_mandatory_dap_and_3_plus_non_mand_tour,coef_mandatory_dap_and_3_plus_non_mand_tour, +util_non_mandatory_dap_and_1_non_mand_tour_ABM_2_calib,0 Mandatory and 1 Non-Mandatory - ABM2 Calibration,(cdap_activity=='N') & (tot_tours==1),coef_non_mandatory_dap_and_1_non_mand_tour,coef_non_mandatory_dap_and_1_non_mand_tour,coef_non_mandatory_dap_and_1_non_mand_tour,coef_non_mandatory_dap_and_1_non_mand_tour,coef_non_mandatory_dap_and_1_non_mand_tour,coef_non_mandatory_dap_and_1_non_mand_tour,coef_non_mandatory_dap_and_1_non_mand_tour,coef_non_mandatory_dap_and_1_non_mand_tour +util_non_mandatory_dap_and_2_non_mand_tour_ABM_2_calib,0 Mandatory and 2 Non-Mandatory - ABM2 Calibration,(cdap_activity=='N') & (tot_tours==2),coef_non_mandatory_dap_and_2_non_mand_tour,coef_non_mandatory_dap_and_2_non_mand_tour,coef_non_mandatory_dap_and_2_non_mand_tour,coef_non_mandatory_dap_and_2_non_mand_tour,coef_non_mandatory_dap_and_2_non_mand_tour,coef_non_mandatory_dap_and_2_non_mand_tour,coef_non_mandatory_dap_and_2_non_mand_tour,coef_non_mandatory_dap_and_2_non_mand_tour +util_non_mandatory_dap_and_3_non_mand_tour_ABM_2_calib,0 Mandatory and 3 Non-Mandatory - ABM2 Calibration,(cdap_activity=='N') & (tot_tours==3),coef_non_mandatory_dap_and_3_non_mand_tour,coef_non_mandatory_dap_and_3_non_mand_tour,coef_non_mandatory_dap_and_3_non_mand_tour,coef_non_mandatory_dap_and_3_non_mand_tour,coef_non_mandatory_dap_and_3_non_mand_tour,coef_non_mandatory_dap_and_3_non_mand_tour,coef_non_mandatory_dap_and_3_non_mand_tour,coef_non_mandatory_dap_and_3_non_mand_tour +util_non_mandatory_dap_and_4_plus_non_mand_tour_ABM_2_calib,0 Mandatory and 4+ Non-Mandatory - ABM2 Calibration,(cdap_activity=='N') & (tot_tours>=4),coef_non_mandatory_dap_and_4_plus_non_mand_tour,coef_non_mandatory_dap_and_4_plus_non_mand_tour,coef_non_mandatory_dap_and_4_plus_non_mand_tour,coef_non_mandatory_dap_and_4_plus_non_mand_tour,coef_non_mandatory_dap_and_4_plus_non_mand_tour,coef_non_mandatory_dap_and_4_plus_non_mand_tour,coef_non_mandatory_dap_and_4_plus_non_mand_tour,coef_non_mandatory_dap_and_4_plus_non_mand_tour diff --git a/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency.yaml b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency.yaml new file mode 100644 index 000000000..53f56d613 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency.yaml @@ -0,0 +1,52 @@ + +SEGMENT_COL: ptype +SPEC: non_mandatory_tour_frequency.csv + +SPEC_SEGMENTS: + - NAME: PTYPE_FULL + PTYPE: 1 + COEFFICIENTS: non_mandatory_tour_frequency_coefficients_PTYPE_FULL.csv + - NAME: PTYPE_PART + PTYPE: 2 + COEFFICIENTS: non_mandatory_tour_frequency_coefficients_PTYPE_PART.csv + - NAME: PTYPE_UNIVERSITY + PTYPE: 3 + COEFFICIENTS: non_mandatory_tour_frequency_coefficients_PTYPE_UNIVERSITY.csv + - NAME: PTYPE_NONWORK + PTYPE: 4 + COEFFICIENTS: non_mandatory_tour_frequency_coefficients_PTYPE_NONWORK.csv + - NAME: PTYPE_RETIRED + PTYPE: 5 + COEFFICIENTS: non_mandatory_tour_frequency_coefficients_PTYPE_RETIRED.csv + - NAME: PTYPE_DRIVING + PTYPE: 6 + COEFFICIENTS: non_mandatory_tour_frequency_coefficients_PTYPE_DRIVING.csv + - NAME: PTYPE_SCHOOL + PTYPE: 7 + COEFFICIENTS: non_mandatory_tour_frequency_coefficients_PTYPE_SCHOOL.csv + - NAME: PTYPE_PRESCHOOL + PTYPE: 8 + COEFFICIENTS: non_mandatory_tour_frequency_coefficients_PTYPE_PRESCHOOL.csv + +annotate_persons: + SPEC: annotate_persons_nmtf + DF: persons + TABLES: + - tours + +preprocessor: + SPEC: non_mandatory_tour_frequency_annotate_persons_preprocessor + DF: persons + TABLES: + - tours +# - accessibility + +CONSTANTS: + PTYPE_FULL: 1 + PTYPE_PART: 2 + PTYPE_UNIVERSITY: 3 + PTYPE_NONWORK: 4 + PTYPE_RETIRED: 5 + PTYPE_DRIVING: 6 + PTYPE_SCHOOL: 7 + PTYPE_PRESCHOOL: 8 diff --git a/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_alternatives.csv b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_alternatives.csv new file mode 100644 index 000000000..e4d4f2e4a --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_alternatives.csv @@ -0,0 +1,198 @@ +escort,shopping,othmaint,eatout,social,othdiscr +0,0,0,0,0,0 +0,0,0,0,0,1 +0,0,0,0,0,2 +0,0,0,0,1,0 +0,0,0,0,1,1 +0,0,0,0,1,2 +0,0,0,1,0,0 +0,0,0,1,0,1 +0,0,0,1,0,2 +0,0,0,1,1,0 +0,0,0,1,1,1 +0,0,0,1,1,2 +0,0,1,0,0,0 +0,0,1,0,0,1 +0,0,1,0,0,2 +0,0,1,0,1,0 +0,0,1,0,1,1 +0,0,1,0,1,2 +0,0,1,1,0,0 +0,0,1,1,0,1 +0,0,1,1,0,2 +0,0,1,1,1,0 +0,0,1,1,1,1 +0,0,1,1,1,2 +0,0,2,0,0,0 +0,0,2,0,0,1 +0,0,2,0,0,2 +0,0,2,0,1,0 +0,0,2,0,1,1 +0,0,2,0,1,2 +0,0,2,1,0,0 +0,0,2,1,0,1 +0,0,2,1,0,2 +0,0,2,1,1,0 +0,0,2,1,1,1 +0,1,0,0,0,0 +0,1,0,0,0,1 +0,1,0,0,0,2 +0,1,0,0,1,0 +0,1,0,0,1,1 +0,1,0,0,1,2 +0,1,0,1,0,0 +0,1,0,1,0,1 +0,1,0,1,0,2 +0,1,0,1,1,0 +0,1,0,1,1,1 +0,1,0,1,1,2 +0,1,1,0,0,0 +0,1,1,0,0,1 +0,1,1,0,0,2 +0,1,1,0,1,0 +0,1,1,0,1,1 +0,1,1,0,1,2 +0,1,1,1,0,0 +0,1,1,1,0,1 +0,1,1,1,0,2 +0,1,1,1,1,0 +0,1,1,1,1,1 +0,1,2,0,0,0 +0,1,2,0,0,1 +0,1,2,0,0,2 +0,1,2,0,1,0 +0,1,2,0,1,1 +0,1,2,1,0,0 +0,1,2,1,0,1 +0,1,2,1,1,0 +0,2,0,0,0,0 +0,2,0,0,0,1 +0,2,0,0,0,2 +0,2,0,0,1,0 +0,2,0,0,1,1 +0,2,0,0,1,2 +0,2,0,1,0,0 +0,2,0,1,0,1 +0,2,0,1,0,2 +0,2,0,1,1,0 +0,2,0,1,1,1 +0,2,1,0,0,0 +0,2,1,0,0,1 +0,2,1,0,0,2 +0,2,1,0,1,0 +0,2,1,0,1,1 +0,2,1,1,0,0 +0,2,1,1,0,1 +0,2,1,1,1,0 +0,2,2,0,0,0 +0,2,2,0,0,1 +0,2,2,0,1,0 +0,2,2,1,0,0 +1,0,0,0,0,0 +1,0,0,0,0,1 +1,0,0,0,0,2 +1,0,0,0,1,0 +1,0,0,0,1,1 +1,0,0,0,1,2 +1,0,0,1,0,0 +1,0,0,1,0,1 +1,0,0,1,0,2 +1,0,0,1,1,0 +1,0,0,1,1,1 +1,0,0,1,1,2 +1,0,1,0,0,0 +1,0,1,0,0,1 +1,0,1,0,0,2 +1,0,1,0,1,0 +1,0,1,0,1,1 +1,0,1,0,1,2 +1,0,1,1,0,0 +1,0,1,1,0,1 +1,0,1,1,0,2 +1,0,1,1,1,0 +1,0,1,1,1,1 +1,0,2,0,0,0 +1,0,2,0,0,1 +1,0,2,0,0,2 +1,0,2,0,1,0 +1,0,2,0,1,1 +1,0,2,1,0,0 +1,0,2,1,0,1 +1,0,2,1,1,0 +1,1,0,0,0,0 +1,1,0,0,0,1 +1,1,0,0,0,2 +1,1,0,0,1,0 +1,1,0,0,1,1 +1,1,0,0,1,2 +1,1,0,1,0,0 +1,1,0,1,0,1 +1,1,0,1,0,2 +1,1,0,1,1,0 +1,1,0,1,1,1 +1,1,1,0,0,0 +1,1,1,0,0,1 +1,1,1,0,0,2 +1,1,1,0,1,0 +1,1,1,0,1,1 +1,1,1,1,0,0 +1,1,1,1,0,1 +1,1,1,1,1,0 +1,1,2,0,0,0 +1,1,2,0,0,1 +1,1,2,0,1,0 +1,1,2,1,0,0 +1,2,0,0,0,0 +1,2,0,0,0,1 +1,2,0,0,0,2 +1,2,0,0,1,0 +1,2,0,0,1,1 +1,2,0,1,0,0 +1,2,0,1,0,1 +1,2,0,1,1,0 +1,2,1,0,0,0 +1,2,1,0,0,1 +1,2,1,0,1,0 +1,2,1,1,0,0 +1,2,2,0,0,0 +2,0,0,0,0,0 +2,0,0,0,0,1 +2,0,0,0,0,2 +2,0,0,0,1,0 +2,0,0,0,1,1 +2,0,0,0,1,2 +2,0,0,1,0,0 +2,0,0,1,0,1 +2,0,0,1,0,2 +2,0,0,1,1,0 +2,0,0,1,1,1 +2,0,1,0,0,0 +2,0,1,0,0,1 +2,0,1,0,0,2 +2,0,1,0,1,0 +2,0,1,0,1,1 +2,0,1,1,0,0 +2,0,1,1,0,1 +2,0,1,1,1,0 +2,0,2,0,0,0 +2,0,2,0,0,1 +2,0,2,0,1,0 +2,0,2,1,0,0 +2,1,0,0,0,0 +2,1,0,0,0,1 +2,1,0,0,0,2 +2,1,0,0,1,0 +2,1,0,0,1,1 +2,1,0,1,0,0 +2,1,0,1,0,1 +2,1,0,1,1,0 +2,1,1,0,0,0 +2,1,1,0,0,1 +2,1,1,0,1,0 +2,1,1,1,0,0 +2,1,2,0,0,0 +2,2,0,0,0,0 +2,2,0,0,0,1 +2,2,0,0,1,0 +2,2,0,1,0,0 +2,2,1,0,0,0 diff --git a/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_annotate_persons_preprocessor.csv b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_annotate_persons_preprocessor.csv new file mode 100644 index 000000000..9b63dbc42 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_annotate_persons_preprocessor.csv @@ -0,0 +1,36 @@ +Description,Target,Expression +#,, +,low_income,persons.income<=30000 +,medium_low_income,(persons.income > 30000) & (persons.income <= 60000) +,medium_income,(persons.income > 60000) & (persons.income <= 100000) +,medium_high_income,(persons.income > 100000) & (persons.income <= 150000) +,high_income,(persons.income > 150000) +,no_cars,(persons.auto_ownership == 0) +,car_sufficiency,persons.autos-persons.num_workers +#,, +# joint tour counts per persons,, +get joint tours,_JOINT_TOURS,tours[tours.tour_category=='JOINT_NON_MANDATORY'] +create participant list in joint tours,_JOINT_TOURS,"_JOINT_TOURS.assign(person_num=_JOINT_TOURS.apply(lambda x: [int(p) for p in x.tour_participants.split(' ')],axis=1))" +explode joint tour participants,_JOINT_TOURS,_JOINT_TOURS.explode('person_num') +join joint tour info with persons,_JOINT_TOURS_PERSONS,"pd.merge(_JOINT_TOURS[['household_id','person_num','tour_purpose']],persons.reset_index()[['household_id','person_num','person_id']], on=['household_id','person_num'], how='left')" +,num_person_joint_tours,"reindex_i(_JOINT_TOURS_PERSONS.groupby(['person_id']).size(), persons.index)" +,num_person_joint_shop_tours,"reindex_i(_JOINT_TOURS_PERSONS[_JOINT_TOURS_PERSONS.tour_purpose=='Shop'].groupby(['person_id']).size(), persons.index)" +,num_person_joint_maint_tours,"reindex_i(_JOINT_TOURS_PERSONS[_JOINT_TOURS_PERSONS.tour_purpose=='Maintenance'].groupby(['person_id']).size(), persons.index)" +,num_person_joint_eatout_tours,"reindex_i(_JOINT_TOURS_PERSONS[_JOINT_TOURS_PERSONS.tour_purpose=='Eating Out'].groupby(['person_id']).size(), persons.index)" +,num_person_joint_visit_tours,"reindex_i(_JOINT_TOURS_PERSONS[_JOINT_TOURS_PERSONS.tour_purpose=='Visiting'].groupby(['person_id']).size(), persons.index)" +,num_person_joint_othdiscr_tours,"reindex_i(_JOINT_TOURS_PERSONS[_JOINT_TOURS_PERSONS.tour_purpose=='Discretionary'].groupby(['person_id']).size(), persons.index)" +# non_mandatory tour frequency extension,, +,_INDIV_TOURS,tours[tours.tour_category!='JOINT_NON_MANDATORY'] +,num_mandatory_tours,"reindex_i(_INDIV_TOURS[_INDIV_TOURS.tour_purpose=='MANDATORY'].groupby('person_id').size(), persons.index)" +,has_mandatory_tour,(num_mandatory_tours > 0) * 1 +,has_joint_tour,(num_person_joint_tours > 0) * 1 +# number of person types in household in addition to self,, +,num_full_time_workers_not_self,"np.where(df.ptype == PTYPE_FULL, df.num_full_time_workers-1, df.num_full_time_workers)" +,num_part_time_workers_not_self,"np.where(df.ptype == PTYPE_PART, df.num_part_time_workers-1, df.num_part_time_workers)" +,num_university_students_not_self,"np.where(df.ptype == PTYPE_UNIVERSITY, df.num_university_students-1, df.num_university_students)" +,num_non_workers_not_self,"np.where(df.ptype == PTYPE_NONWORK, df.num_non_workers-1, df.num_non_workers)" +,num_retirees_not_self,"np.where(df.ptype == PTYPE_RETIRED, df.num_retirees-1, df.num_retirees)" +,num_driving_age_students_not_self,"np.where(df.ptype == PTYPE_DRIVING, df.num_driving_age_students-1, df.num_driving_age_students)" +,num_pre_driving_age_school_kids_not_self,"np.where(df.ptype == PTYPE_SCHOOL, df.num_pre_driving_age_school_kids-1, df.num_pre_driving_age_school_kids)" +,num_pre_school_kids_not_self,"np.where(df.ptype == PTYPE_PRESCHOOL, df.num_pre_school_kids-1, df.num_pre_school_kids)" +,retiredHh,"np.where(df.num_full_time_workers+df.num_part_time_workers+df.num_university_students+df.num_driving_age_students+df.num_pre_driving_age_school_kids+df.num_pre_school_kids == 0,1,0)" \ No newline at end of file diff --git a/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_DRIVING.csv b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_DRIVING.csv new file mode 100644 index 000000000..7d443b83a --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_DRIVING.csv @@ -0,0 +1,60 @@ +coefficient_name,value,constrain +coef_unavailable,-999,T +coef_escorting_tour,-5.0011,F +coef_discretionary_tour,-2.0687,F +coef_shopping_tour,-16.7785,F +coef_maintenance_tour,-3.2583,F +coef_visiting_or_social_tour,-2.6366,F +coef_eating_out_tour,-18.1598,F +coef_total_number_of_tours_is_0_prior_tours,0,T +coef_total_number_of_tours_is_1_plus,-0.4825,F +coef_has_mandatory_tours_and_tour_frequency_is_2_plus,-2.5161,F +coef_number_of_joint_discretionary_tours,-0.2308,F +coef_more_than_one_discretionary_tours,-1.1938,F +coef_low_income_group_and_escorting_tour,1.1208,F +coef_medium_low_income_group_and_escorting_tour,1.1208,F +coef_low_income_group_and_discretionary_tour,-0.8053,F +coef_mediumhigh_income_group_and_discretionary_tour,0.5225,F +coef_high_income_group_and_discretionary_tour,0.8604,F +coef_high_income_group_and_visiting_tour,0.5513,F +coef_mediumhigh_income_group_and_visiting_tour,0.5513,F +coef_female_and_shopping_tour,0.9646,F +coef_go_out_pre_driving_school_kid_and_escorting_tour,0.4901,F +coef_number_of_full_time_worker_and_shopping_tour,0.3173,F +coef_number_of_part_time_worker_and_shopping_tour,0.3173,F +coef_number_of_non_worker_and_shopping_tour,0.3173,F +coef_number_of_pre_driving_school_kid_and_shopping_tour,0.3133,F +coef_number_of_pre_school_kid_and_shopping_tour,0.3133,F +coef_number_of_part_time_worker_and_discretionary_tour,0.3202,F +coef_number_of_non_worker_and_discretionary_tour,0.3202,F +coef_number_of_university_student_and_discretionary_tour,0.5522,F +coef_school_accessibility_and_tour_frequency_is_2_plus,1.9398,F +coef_retail_accessibility_for_shopping,0.7809,F +coef_retail_accessibility_for_eating_out,1.0093,F +coef_1_escort_tour_constant,-0.052,F +coef_2_plus_escort_tours_constant,0,T +coef_1_shopping_tours_constant,1.025,F +coef_2_plus_shopping_tours_constant,0,T +coef_1_maintenance_tours_constant,-0.294,F +coef_2_plus_maintenance_tours_constant,0,T +coef_1_plus_eating_out_tours_constant,-1.079,F +coef_1_plus_visting_tours_constant,-0.107,F +coef_1_other_discretionary_tours_constant,-0.393,F +coef_2_plus_other_discretionary_tours_constant,-1.086,F +coef_1_escort_tour_constant_tm2,-1.007,F +coef_2_plus_escort_tours_constant_tm2,0,T +coef_1_shopping_tours_constant_tm2,1.027,F +coef_2_plus_shopping_tours_constant_tm2,1.027,F +coef_1_maintenance_tours_constant_tm2,-0.196,F +coef_2_plus_maintenance_tours_constant_tm2,-0.196,F +coef_1_plus_eating_out_tours_constant_tm2,2.909,F +coef_1_plus_visting_tours_constant_tm2,-1.417,F +coef_1_other_discretionary_tours_constant_tm2,-1.519,F +coef_2_plus_other_discretionary_tours_constant_tm2,-1.519,F +coef_mandatory_dap_and_1_non_mand_tour,1.222628436,F +coef_mandatory_dap_and_2_non_mand_tour,0.593278832,F +coef_mandatory_dap_and_3_plus_non_mand_tour,0.070965231,F +coef_non_mandatory_dap_and_1_non_mand_tour,0.756307862,F +coef_non_mandatory_dap_and_2_non_mand_tour,1.396284118,F +coef_non_mandatory_dap_and_3_non_mand_tour,3.551847757,F +coef_non_mandatory_dap_and_4_plus_non_mand_tour,-0.058600545,F diff --git a/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_FULL.csv b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_FULL.csv new file mode 100644 index 000000000..bfe82bc6b --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_FULL.csv @@ -0,0 +1,103 @@ +coefficient_name,value,constrain +coef_unavailable,-999,T +coef_escorting_tour,-8.005637824,F +coef_discretionary_tour,-4.191895252,F +coef_shopping_tour,-6.093236864,F +coef_maintenance_tour,-4.450826306,F +coef_visiting_or_social_tour,-3.869879887,F +coef_eating_out_tour,-12.62493048,F +coef_total_number_of_tours_is_0_prior_tours,0,T +coef_total_number_of_tours_is_1,0,T +coef_total_number_of_tours_is_2,1.328670418,F +coef_total_number_of_tours_is_3,3.027432477,F +coef_total_number_of_tours_is_4,3.547389909,F +coef_has_mandatory_tours_and_tour_frequency_is_2,-1.122394705,F +coef_has_mandatory_tours_and_tour_frequency_is_3,-2.057588493,F +coef_has_mandatory_tours_and_tour_frequency_is_4_plus,-2.057588493,F +coef_has_joint_tours_and_tour_frequency_is_3_plus,-0.477609877,F +coef_number_of_joint_shopping_tours,-0.170864341,F +coef_number_of_joint_discretionary_tours,-1.163664908,F +coef_more_than_one_escorting_tours,0.613851731,F +coef_more_than_one_discretionary_tours,-0.236694132,F +coef_high_income_group_and_escorting_tour,-0.066520907,F +coef_mediumhigh_income_group_and_shopping_tour,0.06372943,F +coef_high_income_group_and_shopping_tour,0.06372943,F +coef_low_income_group_and_maintenance_tour,0.251347332,F +coef_mediumlow_income_group_and_maintenance_tour,0.188910438,F +coef_high_income_group_and_maintenance_tour,-0.231879121,F +coef_low_income_group_and_eating_out_tour,-1.810193362,F +coef_high_income_group_and_eating_out_tour,0.31465606,F +coef_low_income_group_and_discretionary_tour,-0.565623738,F +coef_mediumhigh_income_group_and_discretionary_tour,-0.231043198,F +coef_high_income_group_and_discretionary_tour,0.107170058,F +coef_low_income_group_and_visiting_tour,0.178971977,F +coef_female_and_escorting_tour,0.137391737,F +coef_zero_car_ownership_and_tour_frequency_is_2_plus,-0.935804805,F +coef_car_shortage_vs_workers_and_tour_frequency_is_2_plus,-0.361005701,F +coef_car_surplus_vs_workers_and_tour_frequency_is_3_plus,0.072613168,F +coef_zero_car_ownership_and_escorting_tour,-0.873271814,F +coef_car_shortage_vs_workers_and_number_of_escorting_tours,0.412574716,F +coef_number_of_full_time_worker_and_escorting_tour,0.212097217,F +coef_number_of_part_time_worker_and_escorting_tour,-0.073067961,F +coef_number_of_non_worker_and_escorting_tour,-0.323356663,F +coef_number_of_retiree_and_escorting_tour,-0.558947959,F +coef_number_of_university_student_and_escorting_tour,0.275136763,F +coef_number_of_driving_school_kid_and_escorting_tour,0.579434039,F +coef_go_out_pre_driving_school_kid_and_escorting_tour,0.639740336,F +coef_go_out_school_kid_and_escorting_tour,0.384950782,F +coef_number_of_driving_school_kid_and_shopping_tour,-0.218745414,F +coef_number_of_pre_driving_school_kid_and_shopping_tour,-0.218745414,F +coef_number_of_pre_school_kid_and_shopping_tour,-0.218745414,F +coef_number_of_full_time_worker_and_maintenance_tour,-0.219097089,F +coef_number_of_part_time_worker_and_maintenance_tour,-0.219097089,F +coef_number_of_non_worker_and_maintenance_tour,-0.219097089,F +coef_number_of_university_student_and_maintenance_tour,-0.219097089,F +coef_number_of_full_time_worker_and_eating_out_tour,-0.764033574,F +coef_number_of_part_time_worker_and_eating_out_tour,-0.764033574,F +coef_number_of_non_worker_and_eating_out_tour,-0.764033574,F +coef_number_of_retiree_and_eating_out_tour,-0.764033574,F +coef_number_of_university_student_and_eating_out_tour,-0.764033574,F +coef_number_of_pre_driving_school_kid_and_eating_out_tour,-0.355618746,F +coef_number_of_pre_school_kid_and_eating_out_tour,-0.355618746,F +coef_number_of_non_worker_and_visiting_tour,-0.444931696,F +coef_number_of_retiree_and_visiting_tour,-0.444931696,F +coef_number_of_university_student_and_visiting_tour,-0.444931696,F +coef_number_of_driving_school_kid_and_discretionary_tour,-0.021518881,F +coef_number_of_pre_driving_school_kid_and_discretionary_tour,-0.021518881,F +coef_number_of_pre_school_kid_and_discretionary_tour,-0.157036558,F +coef_work_accessibility_and_tour_frequency_is_1,0.3286661,F +coef_work_accessibility_and_tour_frequency_is_2,0.71855271,F +coef_work_accessibility_and_tour_frequency_is_3,0.71855271,F +coef_work_accessibility_and_tour_frequency_is_4,0.71855271,F +coef_work_accessibility_and_tour_frequency_is_5_plus,0.71855271,F +coef_work_from_home_and_tour_frequency_is_1,0.915860359,F +coef_work_from_home_and_tour_frequency_is_2,1.100337176,F +coef_work_from_home_and_tour_frequency_is_3,1.100337176,F +coef_work_from_home_and_tour_frequency_is_4,1.100337176,F +coef_work_from_home_and_tour_frequency_is_5_plus,1.100337176,F +coef_retail_accessibility_for_escorting,0.291279719,F +coef_retail_accessibility_for_shopping,0.205237982,F +coef_retail_accessibility_for_maintenance,0.097381625,F +coef_retail_accessibility_for_eating_out,0.678030129,F +coef_walk_accessibility_for_discretionary,0.045591079,F +coef_college_education_for_visiting,-0.671955208,F +coef_college_education_for_discretionary,0.621905223,F +coef_low_education_for_visiting,0.454831607,F +coef_detached_household_and_escorting,0.22019233,F +coef_1_escort_tour_constant,0.390268916,F +coef_2_plus_escort_tours_constant,0.779302172,F +coef_1_shopping_tours_constant,0.264,F +coef_2_plus_shopping_tours_constant,0.383672128,F +coef_1_maintenance_tours_constant,-0.097866802,F +coef_2_plus_maintenance_tours_constant,-0.090890202,F +coef_1_plus_eating_out_tours_constant,-0.974733991,F +coef_1_plus_visting_tours_constant,-0.147867593,F +coef_1_other_discretionary_tours_constant,0.037252469,F +coef_2_plus_other_discretionary_tours_constant,0.221679699,F +coef_mandatory_dap_and_1_non_mand_tour,0.613102892,F +coef_mandatory_dap_and_2_non_mand_tour,1.298340523,F +coef_mandatory_dap_and_3_plus_non_mand_tour,0.294678801,F +coef_non_mandatory_dap_and_1_non_mand_tour,0.40551385,F +coef_non_mandatory_dap_and_2_non_mand_tour,-0.058684635,F +coef_non_mandatory_dap_and_3_non_mand_tour,0.181724483,F +coef_non_mandatory_dap_and_4_plus_non_mand_tour,3.456313043,F diff --git a/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_NONWORK.csv b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_NONWORK.csv new file mode 100644 index 000000000..4d022be71 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_NONWORK.csv @@ -0,0 +1,90 @@ +coefficient_name,value,constrain +coef_unavailable,-999,T +coef_escorting_tour,-5.5709,F +coef_discretionary_tour,-3.1828,F +coef_shopping_tour,-1.5833,F +coef_maintenance_tour,-2.0214,F +coef_visiting_or_social_tour,-6.6293,F +coef_eating_out_tour,-8.9856,F +coef_total_number_of_tours_is_0_prior_tours,0,T +coef_total_number_of_tours_is_3,-0.793922128,F +coef_total_number_of_tours_is_4,-1.117938236,F +coef_has_joint_tours_and_tour_frequency_is_1,-0.968579459,F +coef_has_joint_tours_and_tour_frequency_is_2,-1.808495529,F +coef_has_joint_tours_and_tour_frequency_is_3_plus,-2.59200638,F +coef_number_of_joint_shopping_tours,-0.466843362,F +coef_number_of_joint_maintenance_tours,-0.575337406,F +coef_more_than_one_escorting_tours,1.3605,F +coef_more_than_one_shopping_tours,-0.7454,F +coef_more_than_one_maintenance_tours,-0.1194,F +coef_more_than_one_discretionary_tours,0.1253,F +coef_low_income_group_and_shopping_tour,-0.2599,F +coef_medium_low_income_group_and_shopping_tour,-0.2599,F +coef_low_income_group_and_eating_out_tour,-0.2857,F +coef_high_income_group_and_eating_out_tour,2.223,F +coef_low_income_group_and_discretionary_tour,-0.5775,F +coef_medium_low_income_group_and_discretionary_tour,-0.5775,F +coef_high_income_group_and_visiting_tour,0.2695,F +coef_mediumhigh_income_group_and_visiting_tour,0.2695,F +coef_female_and_escorting_tour,0.6769,F +coef_female_and_shopping_tour,0.5108,F +coef_female_and_visit_tour,0.7494,F +coef_zero_car_ownership_and_tour_frequency_is_2_plus,-1.0038,F +coef_zero_car_ownership_and_escorting_tour,-0.8907,F +coef_car_surplus_vs_workers_and_number_of_escorting_tours,0.1802,F +coef_number_of_full_time_worker_and_escorting_tour,0.2514,F +coef_number_of_part_time_worker_and_escorting_tour,0.2512,F +coef_number_of_non_worker_and_escorting_tour,-0.3489,F +coef_number_of_retiree_and_escorting_tour,0.2841,F +coef_number_of_university_student_and_escorting_tour,0.4583,F +coef_number_of_driving_school_kid_and_escorting_tour,0.7483,F +coef_go_out_pre_driving_school_kid_and_escorting_tour,0.9378,F +coef_go_out_school_kid_and_escorting_tour,0.9374,F +coef_number_of_non_worker_and_shopping_tour,-0.478,F +coef_number_of_full_time_worker_and_maintenance_tour,0.0904,F +coef_number_of_part_time_worker_and_maintenance_tour,0.0904,F +coef_number_of_pre_driving_school_kid_and_eating_out_tour,-0.6629,F +coef_number_of_pre_school_kid_and_eating_out_tour,-0.6629,F +coef_number_of_pre_driving_school_kid_and_visiting_tour,-0.4021,F +coef_number_of_pre_school_kid_and_visiting_tour,-0.4021,F +coef_number_of_driving_school_kid_and_discretionary_tour,-0.2039,F +coef_number_of_pre_driving_school_kid_and_discretionary_tour,-0.2039,F +coef_number_of_pre_school_kid_and_discretionary_tour,-0.2039,F +coef_retail_accessibility_for_escorting,0.1609,F +coef_retail_accessibility_for_maintenance,0.0194,F +coef_retail_accessibility_for_discretionary,0.0632,F +coef_retail_accessibility_for_visiting,0.2883,F +coef_walk_accessibility_for_eatout,0.6073,F +coef_college_education_for_discretionary,0.981,F +coef_college_education_for_shopping,0.3677,F +coef_college_education_for_maintenance,0.5982,F +coef_college_education_for_eatout,0.7979,F +coef_low_education_for_visiting,-1.6201,F +coef_low_education_for_discretionary,-0.837,F +coef_low_education_for_escorting,0.1748,F +coef_low_education_for_shopping,-0.3525,F +coef_low_education_for_eatout,-0.4838,F +coef_1_escort_tour_constant,-2.501,F +coef_2_plus_escort_tours_constant,-1.958,F +coef_1_shopping_tours_constant,-2.666,F +coef_2_plus_shopping_tours_constant,-2.884,F +coef_1_maintenance_tours_constant,-2.908,F +coef_2_plus_maintenance_tours_constant,-2.97,F +coef_1_plus_eating_out_tours_constant,-3.022,F +coef_1_plus_visting_tours_constant,-2.736,F +coef_1_other_discretionary_tours_constant,-2.612,F +coef_2_plus_other_discretionary_tours_constant,-2.663,F +coef_1_escort_tour_constant_tm2,-1.52187411,F +coef_2_plus_escort_tours_constant_tm2,-1.489501032,F +coef_1_shopping_tours_constant_tm2,-1.853328287,F +coef_2_plus_shopping_tours_constant_tm2,-1.853328287,F +coef_1_maintenance_tours_constant_tm2,-0.808408856,F +coef_2_plus_maintenance_tours_constant_tm2,-0.808408856,F +coef_1_plus_eating_out_tours_constant_tm2,0.600524339,F +coef_1_plus_visting_tours_constant_tm2,-0.284937967,F +coef_1_other_discretionary_tours_constant_tm2,-0.504897539,F +coef_2_plus_other_discretionary_tours_constant_tm2,-0.504897539,F +coef_non_mandatory_dap_and_1_non_mand_tour,0.563996011,F +coef_non_mandatory_dap_and_2_non_mand_tour,1.1354493,F +coef_non_mandatory_dap_and_3_non_mand_tour,1.647365455,F +coef_non_mandatory_dap_and_4_plus_non_mand_tour,6.448243189,F diff --git a/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_PART.csv b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_PART.csv new file mode 100644 index 000000000..2d32768ef --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_PART.csv @@ -0,0 +1,103 @@ +coefficient_name,value,Constrain +coef_unavailable,-999,T +coef_escorting_tour,-6.825870475,F +coef_discretionary_tour,-3.103671535,F +coef_shopping_tour,-2.585699928,F +coef_maintenance_tour,-4.876815454,F +coef_visiting_or_social_tour,-4.787916747,F +coef_eating_out_tour,-8.091973006,F +coef_total_number_of_tours_is_0_prior_tours,0,T +coef_total_number_of_tours_is_1,0,T +coef_total_number_of_tours_is_2,1.347662088,F +coef_total_number_of_tours_is_3,1.958684542,F +coef_total_number_of_tours_is_4,3.406917203,F +coef_total_number_of_tours_is_5,3.406917203,F +coef_total_number_of_tours_is_6_plus,3.406917203,F +coef_has_mandatory_tours_and_tour_frequency_is_2,-1.383795025,F +coef_has_mandatory_tours_and_tour_frequency_is_3,-1.383795025,F +coef_has_mandatory_tours_and_tour_frequency_is_4_plus,-2.308089044,F +coef_has_joint_tours_and_tour_frequency_is_4_plus,-0.850963319,F +coef_number_of_joint_discretionary_tours,-0.13985943,F +coef_more_than_one_escorting_tours,0.688722128,F +coef_more_than_one_shopping_tours,-0.806980084,F +coef_more_than_one_discretionary_tours,-1.123565611,F +coef_high_income_group_and_escorting_tour,-0.188741999,F +coef_low_income_group_and_shopping_tour,-0.584603787,F +coef_medium_low_income_group_and_shopping_tour,-0.191476033,F +coef_medium_high_income_group_and_shopping_tour,0.302369299,F +coef_high_income_group_and_shopping_tour,0.302369299,F +coef_low_income_group_and_eating_out_tour,-1.70963028,F +coef_medium_low_income_group_and_eating_out_tour,-1.018936807,F +coef_low_income_group_and_discretionary_tour,-0.697953689,F +coef_mediumhigh_income_group_and_discretionary_tour,0.441095148,F +coef_high_income_group_and_discretionary_tour,0.441095148,F +coef_female_and_escorting_tour,0.827860636,F +coef_female_and_shopping_tour,0.650180816,F +coef_female_and_eatingout_tour,-1.25440798,F +coef_zero_car_ownership_and_tour_frequency_is_2_plus,-2.213461849,F +coef_car_shortage_vs_workers_and_tour_frequency_is_2_plus,-0.490152764,F +coef_car_shortage_vs_workers_and_number_of_escorting_tours,0.245040809,F +coef_car_surplus_vs_workers_and_number_of_escorting_tours,-0.273518269,F +coef_car_shortage_vs_workers_and_number_of_shopping_tours,0.377878264,F +coef_car_surplus_vs_workers_and_number_of_shopping_tours,-0.579935901,F +coef_number_of_full_time_worker_and_escorting_tour,0.097720305,F +coef_number_of_part_time_worker_and_escorting_tour,-0.13505138,F +coef_number_of_non_worker_and_escorting_tour,-0.264726717,F +coef_number_of_university_student_and_escorting_tour,0.324362136,F +coef_number_of_driving_school_kid_and_escorting_tour,0.592250815,F +coef_go_out_pre_driving_school_kid_and_escorting_tour,0.807393603,F +coef_go_out_school_kid_and_escorting_tour,0.584027557,F +coef_number_of_full_time_worker_and_shopping_tour,-0.571692163,F +coef_number_of_part_time_worker_and_shopping_tour,-0.571692163,F +coef_number_of_non_worker_and_shopping_tour,-0.571692163,F +coef_number_of_full_time_worker_and_maintenance_tour,-0.242545271,F +coef_number_of_part_time_worker_and_maintenance_tour,-0.242545271,F +coef_number_of_non_worker_and_maintenance_tour,-1.173436234,F +coef_number_of_full_time_worker_and_eating_out_tour,-0.273301702,F +coef_number_of_part_time_worker_and_visiting_tour,0.887755866,F +coef_number_of_retiree_and_visiting_tour,0.885418039,F +coef_number_of_driving_school_kid_and_visiting_tour,0.023898086,F +coef_number_of_pre_driving_school_kid_and_visiting_tour,0.023898086,F +coef_number_of_pre_school_kid_and_visiting_tour,0.023898086,F +coef_number_of_driving_school_kid_and_discretionary_tour,0.257383748,F +coef_number_of_pre_driving_school_kid_and_discretionary_tour,0.257383748,F +coef_number_of_pre_school_kid_and_discretionary_tour,-2.431661289,F +coef_work_accessibility_and_tour_frequency_is_1,0.628740481,F +coef_work_accessibility_and_tour_frequency_is_2,0.842604039,F +coef_work_accessibility_and_tour_frequency_is_3_plus,0.814255739,F +coef_retail_accessibility_for_escorting,0.199705264,F +coef_retail_accessibility_for_maintenance,0.189588653,F +coef_retail_accessibility_for_eating_out,0.387577711,F +coef_walk_accessibility_for_discretionary,0.032230313,F +coef_origin_population_density_for_visiting,0.048808797,F +coef_college_education_for_discretionary,0.256548173,F +coef_low_education_for_discretionary,-0.974189529,F +coef_detached_household_and_escorting,0.290441415,F +coef_detached_household_and_eating_out,-0.227906236,F +coef_1_escort_tour_constant,0.444537569,F +coef_2_plus_escort_tours_constant,1.45203917,F +coef_1_shopping_tours_constant,0.19959348,F +coef_2_plus_shopping_tours_constant,0.365593218,F +coef_1_maintenance_tours_constant,-0.050890967,F +coef_2_plus_maintenance_tours_constant,0.025818889,F +coef_1_plus_eating_out_tours_constant,-0.688218447,F +coef_1_plus_visting_tours_constant,-0.761523103,F +coef_1_other_discretionary_tours_constant,0.151171319,F +coef_2_plus_other_discretionary_tours_constant,0.349908582,F +coef_1_escort_tour_constant_tm2,-1.041387049,F +coef_2_plus_escort_tours_constant_tm2,-1.209189663,F +coef_1_shopping_tours_constant_tm2,-1.496588445,F +coef_2_plus_shopping_tours_constant_tm2,-1.496588445,F +coef_1_maintenance_tours_constant_tm2,-0.067949689,F +coef_2_plus_maintenance_tours_constant_tm2,-0.067949689,F +coef_1_plus_eating_out_tours_constant_tm2,0.534488324,F +coef_1_plus_visting_tours_constant_tm2,-0.010969663,F +coef_1_other_discretionary_tours_constant_tm2,-0.530568731,F +coef_2_plus_other_discretionary_tours_constant_tm2,-0.530568731,F +coef_mandatory_dap_and_1_non_mand_tour,0.435298756,F +coef_mandatory_dap_and_2_non_mand_tour,1.193250166,F +coef_mandatory_dap_and_3_plus_non_mand_tour,1.803605616,F +coef_non_mandatory_dap_and_1_non_mand_tour,0.612888101,F +coef_non_mandatory_dap_and_2_non_mand_tour,0.745415157,F +coef_non_mandatory_dap_and_3_non_mand_tour,1.266755805,F +coef_non_mandatory_dap_and_4_plus_non_mand_tour,2.308013647,F diff --git a/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_PRESCHOOL.csv b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_PRESCHOOL.csv new file mode 100644 index 000000000..e3f9dce15 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_PRESCHOOL.csv @@ -0,0 +1,47 @@ +coefficient_name,value,constrain +coef_unavailable,-999,T +coef_escorting_tour,-7.2688,F +coef_discretionary_tour,-4.2006,F +coef_shopping_tour,-43.4464,F +coef_maintenance_tour,-3.3790,F +coef_visiting_or_social_tour,-4.0352,F +coef_eating_out_tour,-5.2924,F +coef_total_number_of_tours_is_0_prior_tours,0.0000,T +coef_total_number_of_tours_is_2,-0.7216,F +coef_total_number_of_tours_is_3,-0.9586,F +coef_has_mandatory_tours_and_tour_frequency_is_2_plus,-2.1108,F +coef_more_than_one_escorting_tours,2.3269,F +coef_high_income_group_and_escorting_tour,-0.6921,F +coef_zero_car_ownership_and_escorting_tour,-0.9936,F +coef_car_shortage_vs_workers_and_number_of_escorting_tours,-0.9936,F +coef_number_of_part_time_worker_and_escorting_tour,0.7831,F +coef_number_of_non_worker_and_escorting_tour,0.7831,F +coef_number_of_university_student_and_escorting_tour,0.8044,F +coef_go_out_pre_driving_school_kid_and_escorting_tour,0.5152,F +coef_go_out_school_kid_and_escorting_tour,0.6072,F +coef_retail_accessibility_for_escorting,0.2739,F +coef_retail_accessibility_for_shopping,2.7431,F +coef_1_escort_tour_constant,-8.402,F +coef_2_plus_escort_tours_constant,-9.519,F +coef_1_shopping_tours_constant,-3.856,F +coef_2_plus_shopping_tours_constant,0.000,T +coef_1_maintenance_tours_constant,-7.785,F +coef_2_plus_maintenance_tours_constant,-6.925,F +coef_1_plus_eating_out_tours_constant,-7.585,F +coef_1_plus_visting_tours_constant,-7.599,F +coef_1_other_discretionary_tours_constant,-7.462,F +coef_2_plus_other_discretionary_tours_constant,-15.000,F +coef_1_escort_tour_constant_tm2,-1.496,F +coef_2_plus_escort_tours_constant_tm2,-1.588,F +coef_1_shopping_tours_constant_tm2,0.031,F +coef_2_plus_shopping_tours_constant_tm2,0.031,F +coef_1_maintenance_tours_constant_tm2,-1.011,F +coef_2_plus_maintenance_tours_constant_tm2,-1.011,F +coef_1_plus_eating_out_tours_constant_tm2,-1.923,F +coef_1_plus_visting_tours_constant_tm2,-1.085,F +coef_1_other_discretionary_tours_constant_tm2,-1.126,F +coef_2_plus_other_discretionary_tours_constant_tm2,-1.126,F +coef_non_mandatory_dap_and_1_non_mand_tour,1.113941467,F +coef_non_mandatory_dap_and_2_non_mand_tour,0.375527882,F +coef_non_mandatory_dap_and_3_non_mand_tour,2.691413911,F +coef_non_mandatory_dap_and_4_plus_non_mand_tour,8.404994214,F diff --git a/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_RETIRED.csv b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_RETIRED.csv new file mode 100644 index 000000000..896947920 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_RETIRED.csv @@ -0,0 +1,84 @@ +coefficient_name,value,constrain +coef_unavailable,-999,T +coef_escorting_tour,-10.4405,F +coef_discretionary_tour,-6.1189,F +coef_shopping_tour,-4.6661,F +coef_maintenance_tour,-2.4724,F +coef_visiting_or_social_tour,-3.677,F +coef_eating_out_tour,-2.5648,F +coef_total_number_of_tours_is_0_prior_tours,-1.140675606,F +coef_has_joint_tours_and_tour_frequency_is_1,-1.601015729,F +coef_has_joint_tours_and_tour_frequency_is_2_plus,-2.105529269,F +coef_number_of_joint_shopping_tours,-0.6377,F +coef_number_of_joint_maintenance_tours,-0.4348,F +coef_number_of_joint_eating_out_tours,-0.7839,F +coef_number_of_joint_discretionary_tours,-0.085,F +coef_more_than_one_escorting_tours,2.0794,F +coef_more_than_one_shopping_tours,-1.1624,F +coef_more_than_one_maintenance_tours,-0.5943,F +coef_mediumhigh_income_group_and_shopping_tour,0.4056,F +coef_high_income_group_and_shopping_tour,0.4056,F +coef_low_income_group_and_maintenance_tour,-0.2202,F +coef_mediumlow_income_group_and_maintenance_tour,-0.2202,F +coef_low_income_group_and_eating_out_tour,-1.0384,F +coef_medium_low_income_group_and_eating_out_tour,-0.4217,F +coef_low_income_group_and_discretionary_tour,-0.3758,F +coef_mediumhigh_income_group_and_discretionary_tour,0.1222,F +coef_high_income_group_and_discretionary_tour,0.1222,F +coef_high_income_group_and_visiting_tour,-1.104,F +coef_female_and_shopping_tour,-0.0455,F +coef_female_and_maintenance_tour,-0.2926,F +coef_female_and_eatingout_tour,-0.2472,F +coef_female_and_discretionary_tour,-0.0647,F +coef_number_of_full_time_worker_and_escorting_tour,-0.1294,F +coef_number_of_part_time_worker_and_escorting_tour,-0.1294,F +coef_number_of_non_worker_and_escorting_tour,-0.1294,F +coef_number_of_driving_school_kid_and_escorting_tour,0.6054,F +coef_go_out_pre_driving_school_kid_and_escorting_tour,0.7285,F +coef_number_of_retiree_and_shopping_tour,-0.4462,F +coef_number_of_retiree_and_maintenance_tour,-0.4112,F +coef_number_of_retiree_and_visiting_tour,-0.2327,F +coef_retired_hh_and_escorting_tour,-0.8133,F +coef_retired_hh_and_shopping_tour,0.2715,F +coef_retired_hh_and_eating_out_tour,0.2011,F +coef_retired_hh_and_discretionary_tour,0.2624,F +coef_retail_accessibility_for_escorting,0.5109,F +coef_retail_accessibility_for_shopping,0.2262,F +coef_retail_accessibility_for_maintenance,0.1154,F +coef_retail_accessibility_for_discretionary,0.3252,F +coef_retail_accessibility_for_visiting,0.0533,F +coef_college_education_for_escorting,0.1522,F +coef_college_education_for_visiting,0.2179,F +coef_college_education_for_discretionary,0.3046,F +coef_college_education_for_shopping,0.2046,F +coef_low_education_for_discretionary,-0.8504,F +coef_low_education_for_escorting,-0.8443,F +coef_low_education_for_shopping,-0.5676,F +coef_low_education_for_maintenance,-0.6861,F +coef_detached_household_and_escorting,0.3809,F +coef_detached_household_and_eating_out,-0.3389,F +coef_detached_household_and_discretionary,-0.3286,F +coef_1_escort_tour_constant,-2.342,F +coef_2_plus_escort_tours_constant,-1.988,F +coef_1_shopping_tours_constant,-2.414,F +coef_2_plus_shopping_tours_constant,-2.101,F +coef_1_maintenance_tours_constant,-2.869,F +coef_2_plus_maintenance_tours_constant,-3.015,F +coef_1_plus_eating_out_tours_constant,-2.979,F +coef_1_plus_visting_tours_constant,-2.806,F +coef_1_other_discretionary_tours_constant,-3.196,F +coef_2_plus_other_discretionary_tours_constant,-3.482,F +coef_1_escort_tour_constant_tm2,-0.287618769,F +coef_2_plus_escort_tours_constant_tm2,0.65554552,F +coef_1_shopping_tours_constant_tm2,-1.385280597,F +coef_2_plus_shopping_tours_constant_tm2,-1.385280597,F +coef_1_maintenance_tours_constant_tm2,-1.480017973,F +coef_2_plus_maintenance_tours_constant_tm2,-1.480017973,F +coef_1_plus_eating_out_tours_constant_tm2,-1.385672408,F +coef_1_plus_visting_tours_constant_tm2,-1.218799144,F +coef_1_other_discretionary_tours_constant_tm2,0.538161829,F +coef_2_plus_other_discretionary_tours_constant_tm2,0.538161829,F +coef_non_mandatory_dap_and_1_non_mand_tour,1.152725777,F +coef_non_mandatory_dap_and_2_non_mand_tour,0.022553605,F +coef_non_mandatory_dap_and_3_non_mand_tour,6.338227151,F +coef_non_mandatory_dap_and_4_plus_non_mand_tour,6.237997735,F diff --git a/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_SCHOOL.csv b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_SCHOOL.csv new file mode 100644 index 000000000..405ec48a1 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_SCHOOL.csv @@ -0,0 +1,72 @@ +coefficient_name,value,constrain +coef_unavailable,-999,T +coef_escorting_tour,-10.3136,F +coef_discretionary_tour,-8.0543,F +coef_shopping_tour,-17.8882,F +coef_maintenance_tour,-14.5925,F +coef_visiting_or_social_tour,-2.9744,F +coef_eating_out_tour,-42.1591,F +coef_total_number_of_tours_is_0_prior_tours,0,T +coef_total_number_of_tours_is_2,-0.7045,F +coef_total_number_of_tours_is_3,-0.7045,F +coef_has_mandatory_tours_and_tour_frequency_is_1,-1.8596,F +coef_has_mandatory_tours_and_tour_frequency_is_2_plus,-6.1247,F +coef_has_joint_tours_and_tour_frequency_is_1_plus,-1.0154,F +coef_number_of_joint_discretionary_tours,-1.2257,F +coef_more_than_one_escorting_tours,0.3358,F +coef_more_than_one_discretionary_tours,-0.8724,F +coef_high_income_group_and_shopping_tour,1.0878,F +coef_mediumhigh_income_group_and_maintenance_tour,1.0499,F +coef_high_income_group_and_maintenance_tour,1.0499,F +coef_low_income_group_and_discretionary_tour,-2.1495,F +coef_medium_low_income_group_and_discretionary_tour,-0.9706,F +coef_high_income_group_and_discretionary_tour,0.6655,F +coef_low_income_group_and_visiting_tour,-1.6227,F +coef_medium_low_income_group_and_visiting_tour,-1.6227,F +coef_high_income_group_and_visiting_tour,1.1424,F +coef_car_surplus_vs_workers_and_number_of_maintenance_tours,0.4721,F +coef_car_surplus_vs_workers_and_number_of_discretionary_tours,0.1531,F +coef_go_out_pre_driving_school_kid_and_escorting_tour,0.4372,F +coef_number_of_driving_school_kid_and_shopping_tour,-0.1631,F +coef_number_of_pre_driving_school_kid_and_shopping_tour,-0.1631,F +coef_number_of_pre_school_kid_and_shopping_tour,-0.1631,F +coef_number_of_driving_school_kid_and_visiting_tour,0.3656,F +coef_number_of_pre_driving_school_kid_and_visiting_tour,0.3656,F +coef_number_of_pre_school_kid_and_visiting_tour,0.3656,F +coef_number_of_driving_school_kid_and_discretionary_tour,0.2287,F +coef_number_of_pre_driving_school_kid_and_discretionary_tour,0.2287,F +coef_number_of_pre_school_kid_and_discretionary_tour,0.2287,F +coef_school_accessibility_and_tour_frequency_is_1,0.6512,F +coef_school_accessibility_and_tour_frequency_is_2_plus,3.8532,F +coef_retail_accessibility_for_escorting,0.5583,F +coef_retail_accessibility_for_shopping,0.9818,F +coef_retail_accessibility_for_maintenance,0.8866,F +coef_retail_accessibility_for_eating_out,2.8733,F +coef_retail_accessibility_for_discretionary,0.5082,F +coef_1_escort_tour_constant,-0.405,F +coef_2_plus_escort_tours_constant,-0.688,F +coef_1_shopping_tours_constant,1.708,F +coef_2_plus_shopping_tours_constant,0,T +coef_1_maintenance_tours_constant,-1.042,F +coef_2_plus_maintenance_tours_constant,0,T +coef_1_plus_eating_out_tours_constant,-3.915,F +coef_1_plus_visting_tours_constant,-0.653,F +coef_1_other_discretionary_tours_constant,-1.095,F +coef_2_plus_other_discretionary_tours_constant,-2.257,F +coef_1_escort_tour_constant_tm2,-0.491,F +coef_2_plus_escort_tours_constant_tm2,-0.491,F +coef_1_shopping_tours_constant_tm2,0.246,F +coef_2_plus_shopping_tours_constant_tm2,0.246,F +coef_1_maintenance_tours_constant_tm2,1.445,F +coef_2_plus_maintenance_tours_constant_tm2,1.445,F +coef_1_plus_eating_out_tours_constant_tm2,0.005,F +coef_1_plus_visting_tours_constant_tm2,-2.381,F +coef_1_other_discretionary_tours_constant_tm2,0.614,F +coef_2_plus_other_discretionary_tours_constant_tm2,0.614,F +coef_mandatory_dap_and_1_non_mand_tour,2.692763095,F +coef_mandatory_dap_and_2_non_mand_tour,5.492779247,F +coef_mandatory_dap_and_3_plus_non_mand_tour,1.891501612,F +coef_non_mandatory_dap_and_1_non_mand_tour,4.002447263,F +coef_non_mandatory_dap_and_2_non_mand_tour,2.426047336,F +coef_non_mandatory_dap_and_3_non_mand_tour,-5.579294246,F +coef_non_mandatory_dap_and_4_plus_non_mand_tour,-3.501958214,F diff --git a/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_UNIVERSITY.csv b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_UNIVERSITY.csv new file mode 100644 index 000000000..8c8809347 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_coefficients_PTYPE_UNIVERSITY.csv @@ -0,0 +1,81 @@ +coefficient_name,value,constrain +coef_unavailable,-999,T +coef_escorting_tour,-3.151460752,F +coef_discretionary_tour,-4.548188518,F +coef_shopping_tour,-2.772689119,F +coef_maintenance_tour,-2.262570738,F +coef_visiting_or_social_tour,-4.212581954,F +coef_eating_out_tour,-14.69186496,F +coef_total_number_of_tours_is_0_prior_tours,0,T +coef_total_number_of_tours_is_1,-0.257343536,F +coef_has_mandatory_tours_and_tour_frequency_is_2_plus,-1.072062082,F +coef_has_joint_tours_and_tour_frequency_is_1,-0.336245855,F +coef_has_joint_tours_and_tour_frequency_is_2_plus,-0.388633303,F +coef_more_than_one_escorting_tours,2.72245229,F +coef_low_income_group_and_escorting_tour,0.202123266,F +coef_medium_low_income_group_and_escorting_tour,0.202123266,F +coef_medium_high_income_group_and_escorting_tour,-0.060806947,F +coef_high_income_group_and_escorting_tour,-0.060806947,F +coef_medium_high_income_group_and_shopping_tour,0.685514685,F +coef_high_income_group_and_shopping_tour,0.702798296,F +coef_mediumhigh_income_group_and_maintenance_tour,-0.252582535,F +coef_high_income_group_and_maintenance_tour,-0.252582535,F +coef_medium_high_income_group_and_eating_out_tour,1.584951486,F +coef_high_income_group_and_eating_out_tour,1.584951486,F +coef_low_income_group_and_discretionary_tour,-0.174583696,F +coef_mediumhigh_income_group_and_discretionary_tour,0.61551534,F +coef_high_income_group_and_discretionary_tour,0.61551534,F +coef_low_income_group_and_visiting_tour,0.709390489,F +coef_medium_low_income_group_and_visiting_tour,0.709390489,F +coef_high_income_group_and_visiting_tour,-0.174583696,F +coef_female_and_escorting_tour,0.187876356,F +coef_female_and_shopping_tour,0.986977296,F +coef_female_and_maintenance_tour,0.203259744,F +coef_female_and_visit_tour,1.063972932,F +coef_car_surplus_vs_workers_and_tour_frequency_is_1_plus,0.427064876,F +coef_number_of_full_time_worker_and_escorting_tour,-0.30107932,F +coef_number_of_part_time_worker_and_escorting_tour,-0.457600247,F +coef_number_of_non_worker_and_escorting_tour,-0.457600247,F +coef_number_of_retiree_and_escorting_tour,-0.637017887,F +coef_number_of_university_student_and_escorting_tour,0.420147909,F +coef_go_out_pre_driving_school_kid_and_escorting_tour,0.767818174,F +coef_go_out_school_kid_and_escorting_tour,0.578638577,F +coef_number_of_full_time_worker_and_shopping_tour,-0.500867474,F +coef_number_of_part_time_worker_and_shopping_tour,-0.760659628,F +coef_number_of_university_student_and_shopping_tour,-1.440951366,F +coef_number_of_full_time_worker_and_maintenance_tour,-0.540708813,F +coef_number_of_part_time_worker_and_maintenance_tour,-0.540708813,F +coef_number_of_non_worker_and_maintenance_tour,-0.540708813,F +coef_number_of_university_student_and_maintenance_tour,-1.047970628,F +coef_number_of_university_student_and_discretionary_tour,0.089391871,F +coef_school_accessibility_and_tour_frequency_is_1_plus,0.512981401,F +coef_retail_accessibility_for_discretionary,0.146060018,F +coef_walk_accessibility_for_eatout,1.002231311,F +coef_detached_household_and_discretionary,-0.330258504,F +coef_1_escort_tour_constant,0.212419359,F +coef_2_plus_escort_tours_constant,0.941880945,F +coef_1_shopping_tours_constant,0.292005818,F +coef_2_plus_shopping_tours_constant,0.365107316,F +coef_1_maintenance_tours_constant,-0.361543976,F +coef_2_plus_maintenance_tours_constant,0,T +coef_1_plus_eating_out_tours_constant,-0.297763109,F +coef_1_plus_visting_tours_constant,-0.657474419,F +coef_1_other_discretionary_tours_constant,0.941880945,F +coef_2_plus_other_discretionary_tours_constant,-0.390350079,F +coef_1_escort_tour_constant_tm2,-0.367737876,F +coef_2_plus_escort_tours_constant_tm2,-1.248352386,F +coef_1_shopping_tours_constant_tm2,-1.437353532,F +coef_2_plus_shopping_tours_constant_tm2,-1.437353532,F +coef_1_maintenance_tours_constant_tm2,-1.454556703,F +coef_2_plus_maintenance_tours_constant_tm2,-1.454556703,F +coef_1_plus_eating_out_tours_constant_tm2,1.506897479,F +coef_1_plus_visting_tours_constant_tm2,-0.716560806,F +coef_1_other_discretionary_tours_constant_tm2,-0.194927725,F +coef_2_plus_other_discretionary_tours_constant_tm2,-0.194927725,F +coef_mandatory_dap_and_1_non_mand_tour,0.775208618,F +coef_mandatory_dap_and_2_non_mand_tour,1.056946603,F +coef_mandatory_dap_and_3_plus_non_mand_tour,-5.001269397,F +coef_non_mandatory_dap_and_1_non_mand_tour,-0.396651853,F +coef_non_mandatory_dap_and_2_non_mand_tour,-0.794997137,F +coef_non_mandatory_dap_and_3_non_mand_tour,-2.141825245,F +coef_non_mandatory_dap_and_4_plus_non_mand_tour,-5.009271306,F diff --git a/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_extension_probs.csv b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_extension_probs.csv new file mode 100644 index 000000000..830885237 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/non_mandatory_tour_frequency_extension_probs.csv @@ -0,0 +1,193 @@ +ptype,has_mandatory_tour,has_joint_tour,nonmandatory_tour_type,0_tours,1_tours,2_tours +1,0,0,1,0.71087271,0.886861358,1 +2,0,0,1,0.640712953,0.863555773,1 +3,0,0,1,0.726456335,0.726456335,1 +4,0,0,1,0.665679012,0.903816044,1 +5,0,0,1,0.861430335,0.92284115,1 +6,0,0,1,1,1,1 +7,0,0,1,0,1,1 +8,0,0,1,0.754632385,0.918132897,1 +1,1,0,1,0.824975545,1,1 +2,1,0,1,0.881285721,0.964131273,1 +3,1,0,1,0.856158692,1,1 +4,1,0,1,1,1,1 +5,1,0,1,1,1,1 +6,1,0,1,1,1,1 +7,1,0,1,1,1,1 +8,1,0,1,1,1,1 +1,0,0,2,0.918802841,1,1 +2,0,0,2,1,1,1 +3,0,0,2,1,1,1 +4,0,0,2,1,1,1 +5,0,0,2,0.911351921,0.964395496,1 +6,0,0,2,1,1,1 +7,0,0,2,1,1,1 +8,0,0,2,0.91707294,1,1 +1,1,0,2,1,1,1 +2,1,0,2,1,1,1 +3,1,0,2,1,1,1 +4,1,0,2,1,1,1 +5,1,0,2,1,1,1 +6,1,0,2,1,1,1 +7,1,0,2,1,1,1 +8,1,0,2,1,1,1 +1,0,0,3,0.885080064,0.942540032,1 +2,0,0,3,0.832615585,1,1 +3,0,0,3,1,1,1 +4,0,0,3,1,1,1 +5,0,0,3,0.874364173,0.972270724,1 +6,0,0,3,1,1,1 +7,0,0,3,1,1,1 +8,0,0,3,1,1,1 +1,1,0,3,1,1,1 +2,1,0,3,1,1,1 +3,1,0,3,1,1,1 +4,1,0,3,1,1,1 +5,1,0,3,1,1,1 +6,1,0,3,1,1,1 +7,1,0,3,1,1,1 +8,1,0,3,1,1,1 +1,0,0,4,1,1,1 +2,0,0,4,0.99296599,1,1 +3,0,0,4,1,1,1 +4,0,0,4,0.976072814,1,1 +5,0,0,4,0.956476086,0.993572522,1 +6,0,0,4,1,1,1 +7,0,0,4,1,1,1 +8,0,0,4,0.991144007,1,1 +1,1,0,4,0.99740908,1,1 +2,1,0,4,0.939184617,1,1 +3,1,0,4,1,1,1 +4,1,0,4,0.749851433,1,1 +5,1,0,4,1,1,1 +6,1,0,4,1,1,1 +7,1,0,4,1,1,1 +8,1,0,4,0.949874016,1,1 +1,0,0,5,1,1,1 +2,0,0,5,1,1,1 +3,0,0,5,1,1,1 +4,0,0,5,0.954541082,1,1 +5,0,0,5,0.955216408,1,1 +6,0,0,5,1,1,1 +7,0,0,5,1,1,1 +8,0,0,5,0.931183243,1,1 +1,1,0,5,0.970742777,1,1 +2,1,0,5,0.882901912,1,1 +3,1,0,5,1,1,1 +4,1,0,5,0.334132623,1,1 +5,1,0,5,1,1,1 +6,1,0,5,0.934804611,0.934804611,1 +7,1,0,5,0.965932685,1,1 +8,1,0,5,1,1,1 +1,0,0,6,1,1,1 +2,0,0,6,1,1,1 +3,0,0,6,1,1,1 +4,0,0,6,0.86514867,1,1 +5,0,0,6,0.896321835,1,1 +6,0,0,6,1,1,1 +7,0,0,6,1,1,1 +8,0,0,6,1,1,1 +1,1,0,6,1,1,1 +2,1,0,6,1,1,1 +3,1,0,6,1,1,1 +4,1,0,6,1,1,1 +5,1,0,6,1,1,1 +6,1,0,6,1,1,1 +7,1,0,6,1,1,1 +8,1,0,6,1,1,1 +1,0,1,1,1,1,1 +2,0,1,1,1,1,1 +3,0,1,1,1,1,1 +4,0,1,1,1,1,1 +5,0,1,1,1,1,1 +6,0,1,1,1,1,1 +7,0,1,1,1,1,1 +8,0,1,1,1,1,1 +1,1,1,1,1,1,1 +2,1,1,1,1,1,1 +3,1,1,1,1,1,1 +4,1,1,1,1,1,1 +5,1,1,1,1,1,1 +6,1,1,1,1,1,1 +7,1,1,1,1,1,1 +8,1,1,1,1,1,1 +1,0,1,2,1,1,1 +2,0,1,2,1,1,1 +3,0,1,2,1,1,1 +4,0,1,2,1,1,1 +5,0,1,2,1,1,1 +6,0,1,2,1,1,1 +7,0,1,2,1,1,1 +8,0,1,2,1,1,1 +1,1,1,2,1,1,1 +2,1,1,2,1,1,1 +3,1,1,2,1,1,1 +4,1,1,2,1,1,1 +5,1,1,2,1,1,1 +6,1,1,2,1,1,1 +7,1,1,2,1,1,1 +8,1,1,2,1,1,1 +1,0,1,3,1,1,1 +2,0,1,3,1,1,1 +3,0,1,3,1,1,1 +4,0,1,3,1,1,1 +5,0,1,3,1,1,1 +6,0,1,3,1,1,1 +7,0,1,3,1,1,1 +8,0,1,3,1,1,1 +1,1,1,3,1,1,1 +2,1,1,3,1,1,1 +3,1,1,3,1,1,1 +4,1,1,3,1,1,1 +5,1,1,3,1,1,1 +6,1,1,3,1,1,1 +7,1,1,3,1,1,1 +8,1,1,3,1,1,1 +1,0,1,4,1,1,1 +2,0,1,4,1,1,1 +3,0,1,4,1,1,1 +4,0,1,4,1,1,1 +5,0,1,4,1,1,1 +6,0,1,4,1,1,1 +7,0,1,4,1,1,1 +8,0,1,4,1,1,1 +1,1,1,4,1,1,1 +2,1,1,4,1,1,1 +3,1,1,4,1,1,1 +4,1,1,4,1,1,1 +5,1,1,4,1,1,1 +6,1,1,4,1,1,1 +7,1,1,4,1,1,1 +8,1,1,4,1,1,1 +1,0,1,5,1,1,1 +2,0,1,5,1,1,1 +3,0,1,5,1,1,1 +4,0,1,5,1,1,1 +5,0,1,5,1,1,1 +6,0,1,5,1,1,1 +7,0,1,5,1,1,1 +8,0,1,5,1,1,1 +1,1,1,5,1,1,1 +2,1,1,5,1,1,1 +3,1,1,5,1,1,1 +4,1,1,5,1,1,1 +5,1,1,5,1,1,1 +6,1,1,5,1,1,1 +7,1,1,5,1,1,1 +8,1,1,5,1,1,1 +1,0,1,6,1,1,1 +2,0,1,6,1,1,1 +3,0,1,6,1,1,1 +4,0,1,6,1,1,1 +5,0,1,6,1,1,1 +6,0,1,6,1,1,1 +7,0,1,6,1,1,1 +8,0,1,6,1,1,1 +1,1,1,6,1,1,1 +2,1,1,6,1,1,1 +3,1,1,6,1,1,1 +4,1,1,6,1,1,1 +5,1,1,6,1,1,1 +6,1,1,6,1,1,1 +7,1,1,6,1,1,1 +8,1,1,6,1,1,1 diff --git a/test/non_mandatory_tour_frequency/configs/settings.yaml b/test/non_mandatory_tour_frequency/configs/settings.yaml new file mode 100644 index 000000000..4136d0b80 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/settings.yaml @@ -0,0 +1,60 @@ +# input tables +input_table_list: + - tablename: households + filename: households.csv + index_col: household_id + rename_columns: + unique_hh_id: household_id + NP: hhsize + hh_workers_from_esr: num_workers + VEH: auto_ownership + MAZ: home_zone_id + HINCP: income + keep_columns: + - home_zone_id + - income + - hhsize + - HHT + - auto_ownership + - num_workers + - tablename: persons + filename: persons.csv + index_col: person_id + rename_columns: + unique_hh_id: household_id + AGEP: age + SPORDER: PNUM + SEX: sex + employed: pemploy + student_status: pstudent + person_type: ptype + keep_columns: + - household_id + - age + - PNUM + - sex + - pemploy + - pstudent + - ptype + - tablename: land_use + filename: land_use.csv + index_col: zone_id + rename_columns: + MAZ_ORIGINAL: zone_id + CountyID: county_id + TAZ_ORIGINAL: TAZ + DistID: DISTRICT + HH: TOTHH + POP: TOTPOP + ACRES: TOTACRE + emp_total: TOTEMP + keep_columns: + - TAZ + - DISTRICT + - SD + - county_id + - TOTHH + - TOTPOP + - TOTACRE + +trace_hh_id: \ No newline at end of file diff --git a/test/non_mandatory_tour_frequency/configs/tour_departure_and_duration_alternatives.csv b/test/non_mandatory_tour_frequency/configs/tour_departure_and_duration_alternatives.csv new file mode 100644 index 000000000..bddab06b9 --- /dev/null +++ b/test/non_mandatory_tour_frequency/configs/tour_departure_and_duration_alternatives.csv @@ -0,0 +1,191 @@ +start,end +5,5 +5,6 +5,7 +5,8 +5,9 +5,10 +5,11 +5,12 +5,13 +5,14 +5,15 +5,16 +5,17 +5,18 +5,19 +5,20 +5,21 +5,22 +5,23 +6,6 +6,7 +6,8 +6,9 +6,10 +6,11 +6,12 +6,13 +6,14 +6,15 +6,16 +6,17 +6,18 +6,19 +6,20 +6,21 +6,22 +6,23 +7,7 +7,8 +7,9 +7,10 +7,11 +7,12 +7,13 +7,14 +7,15 +7,16 +7,17 +7,18 +7,19 +7,20 +7,21 +7,22 +7,23 +8,8 +8,9 +8,10 +8,11 +8,12 +8,13 +8,14 +8,15 +8,16 +8,17 +8,18 +8,19 +8,20 +8,21 +8,22 +8,23 +9,9 +9,10 +9,11 +9,12 +9,13 +9,14 +9,15 +9,16 +9,17 +9,18 +9,19 +9,20 +9,21 +9,22 +9,23 +10,10 +10,11 +10,12 +10,13 +10,14 +10,15 +10,16 +10,17 +10,18 +10,19 +10,20 +10,21 +10,22 +10,23 +11,11 +11,12 +11,13 +11,14 +11,15 +11,16 +11,17 +11,18 +11,19 +11,20 +11,21 +11,22 +11,23 +12,12 +12,13 +12,14 +12,15 +12,16 +12,17 +12,18 +12,19 +12,20 +12,21 +12,22 +12,23 +13,13 +13,14 +13,15 +13,16 +13,17 +13,18 +13,19 +13,20 +13,21 +13,22 +13,23 +14,14 +14,15 +14,16 +14,17 +14,18 +14,19 +14,20 +14,21 +14,22 +14,23 +15,15 +15,16 +15,17 +15,18 +15,19 +15,20 +15,21 +15,22 +15,23 +16,16 +16,17 +16,18 +16,19 +16,20 +16,21 +16,22 +16,23 +17,17 +17,18 +17,19 +17,20 +17,21 +17,22 +17,23 +18,18 +18,19 +18,20 +18,21 +18,22 +18,23 +19,19 +19,20 +19,21 +19,22 +19,23 +20,20 +20,21 +20,22 +20,23 +21,21 +21,22 +21,23 +22,22 +22,23 +23,23 \ No newline at end of file diff --git a/test/non_mandatory_tour_frequency/data/.gitkeep b/test/non_mandatory_tour_frequency/data/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/test/non_mandatory_tour_frequency/test_non_mandatory_tour_frequency.py b/test/non_mandatory_tour_frequency/test_non_mandatory_tour_frequency.py new file mode 100644 index 000000000..1563de756 --- /dev/null +++ b/test/non_mandatory_tour_frequency/test_non_mandatory_tour_frequency.py @@ -0,0 +1,336 @@ +import logging +import pytest +import os +import shutil +import pandas as pd +import numpy as np +from numpy import dot +from numpy.linalg import norm + +# import models is necessary to initalize the model steps with orca +from activitysim.abm import models +from activitysim.core import pipeline, config +from activitysim.core import tracing + +logger = logging.getLogger(__name__) + +# Used by conftest.py initialize_pipeline method +@pytest.fixture(scope="module") +def module() -> str: + """ + A pytest fixture that returns the data folder location. + :return: folder location for any necessary data to initialize the tests + """ + return "non_mandatory_tour_frequency" + + +# Used by conftest.py initialize_pipeline method +@pytest.fixture(scope="module") +def tables(prepare_module_inputs) -> dict[str, str]: + """ + A pytest fixture that returns the "mock" tables to build pipeline dataframes. The + key-value pair is the name of the table and the index column. + :return: dict + """ + return { + "land_use": "MAZ_ORIGINAL", + "persons": "person_id", + "households": "household_id", + "accessibility": "MAZ_ORIGINAL", + "tours": "tour_id", + } + + +# Used by conftest.py initialize_pipeline method +# Set to true if you need to read skims into the pipeline +@pytest.fixture(scope="module") +def initialize_network_los() -> bool: + """ + A pytest boolean fixture indicating whether network skims should be read from the + fixtures test data folder. + :return: bool + """ + return False + + +@pytest.fixture(scope="module") +def load_checkpoint() -> bool: + """ + checkpoint to be loaded from the pipeline when reconnecting. + """ + return "initialize_households" + + +# make a reconnect_pipeline internal to test module +@pytest.mark.skipif( + os.path.isfile("test/non_mandatory_tour_frequency/output/pipeline.h5"), + reason="no need to recreate pipeline store if alreayd exist", +) +def test_prepare_input_pipeline(initialize_pipeline: pipeline.Pipeline, caplog): + # Run summarize model + caplog.set_level(logging.INFO) + + # run model step + pipeline.run(models=["initialize_landuse", "initialize_households"]) + + # get the updated pipeline data + person_df = pipeline.get_table("persons") + person_df.to_csv("test/non_mandatory_tour_frequency/output/person.csv", index=False) + + # get the updated pipeline data + household_df = pipeline.get_table("households") + household_df.to_csv( + "test/non_mandatory_tour_frequency/output/household.csv", index=False + ) + + pipeline.close_pipeline() + + +def test_nmtf_from_pipeline(reconnect_pipeline: pipeline.Pipeline, caplog): + # Run summarize model + caplog.set_level(logging.INFO) + + # run model step + pipeline.run( + models=["non_mandatory_tour_frequency"], resume_after="initialize_households" + ) + + # get the updated pipeline data + person_df = pipeline.get_table("persons") + + # get the updated pipeline data + household_df = pipeline.get_table("households") + + ############################ + # person nmtf validation + ############################ + # nmtf person result from the model + logger.info("person nmtf pattern validation") + + target_key = "inmf_choice" + simulated_key = "non_mandatory_tour_frequency" + similarity_threshold = 0.99 + + simulated_df = create_summary( + person_df, key=simulated_key, out_col="Simulated_Share" + ) + + # result from the TM2 run + target_df = create_summary(person_df, key=target_key, out_col="Target_Share") + + # compare simulated and target results + similarity_value = compare_simulated_against_target( + target_df, simulated_df, target_key, simulated_key + ) + + # if the cosine_similarity >= threshold then the simulated and target results are "similar" + assert similarity_value >= similarity_threshold + + +# fetch/prepare existing files for model inputs +# e.g. read accessibilities.csv from ctramp result, rename columns, write out to accessibility.csv which is the input to activitysim +@pytest.fixture(scope="module") +def prepare_module_inputs() -> None: + """ + copy input files from sharepoint into test folder + + create unique person id in person file + + :return: None + """ + # https://wsponlinenam.sharepoint.com/sites/US-TM2ConversionProject/Shared%20Documents/Forms/ + # AllItems.aspx?id=%2Fsites%2FUS%2DTM2ConversionProject%2FShared%20Documents%2FTask%203%20ActivitySim&viewid=7a1eaca7%2D3999%2D4d45%2D9701%2D9943cc3d6ab1 + test_dir = os.path.join("test", "non_mandatory_tour_frequency", "data") + + accessibility_file = os.path.join(test_dir, "tm2_outputs", "accessibilities.csv") + household_file = os.path.join(test_dir, "popsyn", "households.csv") + person_file = os.path.join(test_dir, "popsyn", "persons.csv") + landuse_file = os.path.join(test_dir, "landuse", "maz_data_withDensity.csv") + + shutil.copy(accessibility_file, os.path.join(test_dir, "accessibility.csv")) + shutil.copy(household_file, os.path.join(test_dir, "households.csv")) + shutil.copy(person_file, os.path.join(test_dir, "persons.csv")) + shutil.copy(landuse_file, os.path.join(test_dir, "land_use.csv")) + + # add original maz id to accessibility table + land_use_df = pd.read_csv(os.path.join(test_dir, "land_use.csv")) + accessibility_df = pd.read_csv(os.path.join(test_dir, "accessibility.csv")) + + accessibility_df = pd.merge( + accessibility_df, + land_use_df[["MAZ", "MAZ_ORIGINAL"]].rename(columns={"MAZ": "mgra"}), + how="left", + on="mgra", + ) + + accessibility_df.to_csv(os.path.join(test_dir, "accessibility.csv"), index=False) + + # currently household file has to have these two columns, even before annotation + # because annotate person happens before household and uses these two columns + # TODO find a way to get around this + #### + household_df = pd.read_csv(os.path.join(test_dir, "households.csv")) + + household_columns_dict = {"HHID": "household_id", "MAZ": "home_zone_id"} + + household_df.rename(columns=household_columns_dict, inplace=True) + + tm2_simulated_household_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "householdData_1.csv") + ) + tm2_simulated_household_df.rename(columns={"hh_id": "household_id"}, inplace=True) + + household_df = pd.merge( + household_df, + tm2_simulated_household_df[ + [ + "household_id", + "autos", + "automated_vehicles", + "transponder", + "cdap_pattern", + "jtf_choice", + ] + ], + how="inner", # tm2 is not 100% sample run + on="household_id", + ) + + household_df.to_csv(os.path.join(test_dir, "households.csv"), index=False) + + person_df = pd.read_csv(os.path.join(test_dir, "persons.csv")) + + person_columns_dict = {"HHID": "household_id", "PERID": "person_id"} + + person_df.rename(columns=person_columns_dict, inplace=True) + + tm2_simulated_person_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "personData_1.csv") + ) + tm2_simulated_person_df.rename(columns={"hh_id": "household_id"}, inplace=True) + + person_df = pd.merge( + person_df, + tm2_simulated_person_df[ + [ + "household_id", + "person_id", + "person_num", + "type", + "value_of_time", + "activity_pattern", + "imf_choice", + "inmf_choice", + "fp_choice", + "reimb_pct", + "workDCLogsum", + "schoolDCLogsum", + ] + ], + how="inner", # tm2 is not 100% sample run + on=["household_id", "person_id"], + ) + + # get tm2 simulated workplace and school location results + tm2_simulated_wsloc_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "wsLocResults_1.csv") + ) + tm2_simulated_wsloc_df.rename( + columns={"HHID": "household_id", "PersonID": "person_id"}, inplace=True + ) + + person_df = pd.merge( + person_df, + tm2_simulated_wsloc_df[ + [ + "household_id", + "person_id", + "WorkLocation", + "WorkLocationLogsum", # this is the same as `workDCLogsum` in tm2 person output + "SchoolLocation", + "SchoolLocationLogsum", # this is the same as `schoolDCLogsum` in tm2 person output + ] + ], + how="inner", # ctramp might not be 100% sample run + on=["household_id", "person_id"], + ) + + person_df.to_csv(os.path.join(test_dir, "persons.csv"), index=False) + + ## get tour data from tn2 output + + tm2_simulated_indiv_tour_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "indivTourData_1.csv") + ) + tm2_simulated_joint_tour_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "jointTourData_1.csv") + ) + + tm2_simulated_tour_df = pd.concat( + [tm2_simulated_indiv_tour_df, tm2_simulated_joint_tour_df], + sort=False, + ignore_index=True, + ) + + tm2_simulated_tour_df.rename(columns={"hh_id": "household_id"}).to_csv( + os.path.join(test_dir, "tours.csv"), index=False + ) + + #### + + +def create_summary(input_df, key, out_col="Share") -> pd.DataFrame: + """ + Create summary for the input data. + 1. group input data by the "key" column + 2. calculate the percent of input data records in each "key" category. + + :return: pd.DataFrame + """ + + out_df = input_df.groupby(key).size().reset_index(name="Count") + out_df[out_col] = round(out_df["Count"] / out_df["Count"].sum(), 4) + + return out_df[[key, out_col]] + + +def cosine_similarity(a, b): + """ + Computes cosine similarity between two vectors. + + Cosine similarity is used here as a metric to measure similarity between two sequence of numbers. + Two sequence of numbers are represented as vectors (in a multi-dimensional space) and cosine similiarity is defined as the cosine of the angle between them + i.e., dot products of the vectors divided by the product of their lengths. + + :return: + """ + + return dot(a, b) / (norm(a) * norm(b)) + + +def compare_simulated_against_target( + target_df: pd.DataFrame, + simulated_df: pd.DataFrame, + target_key: str, + simulated_key: str, +) -> bool: + """ + compares the simulated and target results by computing the cosine similarity between them. + + :return: + """ + + merged_df = pd.merge( + target_df, simulated_df, left_on=target_key, right_on=simulated_key, how="outer" + ) + merged_df = merged_df.fillna(0) + + logger.info("simulated vs target share:\n%s" % merged_df) + + similarity_value = cosine_similarity( + merged_df["Target_Share"].tolist(), merged_df["Simulated_Share"].tolist() + ) + + logger.info("cosine similarity:\n%s" % similarity_value) + + return similarity_value diff --git a/test/parking_location/.gitkeep b/test/parking_location/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/test/parking_location/compare-parking-location-results.R b/test/parking_location/compare-parking-location-results.R new file mode 100644 index 000000000..22c607f8d --- /dev/null +++ b/test/parking_location/compare-parking-location-results.R @@ -0,0 +1,62 @@ +library(tidyverse) +library(ggplot2) + +trips_df <- read_csv("./output/trips_after_parking_choice.csv") + +walk_dist_df <- read_csv("./data/ped_distance_maz_maz.csv") + +landuse_df <- read_csv("./data/land_use.csv") + +landuse_df <- landuse_df %>% + select(maz, maz_county_based, TAZ_ORIGINAL) + +work_df <- trips_df %>% + rename(parking_maz_target = parking_mgra) %>% + rename(parking_maz_simulated = parking_zone) %>% + select(trip_id, household_id, person_id, person_num, stop_id, tour_purpose, orig_purpose, dest_purpose, orig_maz = origin, dest_maz = destination, + activity_duration_in_hours, parking_maz_target, parking_maz_simulated) %>% + left_join(landuse_df, by = c("orig_maz" = "maz")) %>% + rename(orig_maz_county_based = maz_county_based, orig_taz = TAZ_ORIGINAL) %>% + left_join(landuse_df, by = c("dest_maz" = "maz")) %>% + rename(dest_maz_county_based = maz_county_based, dest_taz = TAZ_ORIGINAL) %>% + left_join(landuse_df, by = c("parking_maz_target" = "maz")) %>% + rename(parking_maz_county_based_target = maz_county_based, parking_taz_target = TAZ_ORIGINAL) %>% + left_join(landuse_df, by = c("parking_maz_simulated" = "maz")) %>% + rename(parking_maz_county_based_simulated = maz_county_based, parking_taz_simulated = TAZ_ORIGINAL) %>% + left_join(walk_dist_df, by = c("parking_maz_simulated" = "OMAZ", "dest_maz" = "DMAZ")) %>% + rename(parking_distance_simulated = DISTWALK) %>% + left_join(walk_dist_df, by = c("parking_maz_target" = "OMAZ", "dest_maz" = "DMAZ")) %>% + rename(parking_distance_target = DISTWALK) %>% + left_join(walk_dist_df, by = c("parking_maz_target" = "OMAZ", "parking_maz_simulated" = "DMAZ")) %>% + rename(distance_target_simulation = DISTWALK) %>% + select(trip_id, household_id, person_id, stop_id, tour_purpose, orig_purpose, dest_purpose, + orig_maz, dest_maz, orig_maz_county_based, dest_maz_county_based, orig_taz, dest_taz, + parking_maz_target, parking_maz_simulated, parking_taz_target, parking_taz_simulated, + parking_distance_target, parking_distance_simulated, distance_target_simulation) + + +write.csv(work_df, "./output/parking-location-choice-results.csv", row.names = F) + + +summary_df <- work_df %>% + group_by(dest_purpose) %>% + summarise( + trips_count = n(), + min_distance_target = round(min(parking_distance_target, na.rm = T), 3), + min_distance_simulated = round(min(parking_distance_simulated, na.rm = T), 3), + max_distance_target = round(max(parking_distance_target, na.rm = T), 3), + max_distance_simulated = round(max(parking_distance_simulated, na.rm = T), 3), + mean_distance_target = round(mean(parking_distance_target, na.rm = T), 3), + mean_distance_simulated = round(mean(parking_distance_simulated, na.rm = T), 3), + median_distance_target = round(median(parking_distance_target, na.rm = T), 3), + median_distance_simulated = round(median(parking_distance_simulated, na.rm = T), 3) + ) + +#ggplot(work_df, aes(x=distance_target_simulation)) + geom_histogram(binwidth=0.025, color="black", fill="white") + +#ggplot(work_df, aes(x=parking_distance_target)) + geom_histogram(binwidth=0.05, color="black", fill="white") + +#ggplot(work_df, aes(x=parking_distance_simulated)) + geom_histogram(binwidth=0.05, color="black", fill="white") + + + diff --git a/test/parking_location/configs/ParkLocationChoice.xls b/test/parking_location/configs/ParkLocationChoice.xls new file mode 100644 index 0000000000000000000000000000000000000000..3ea95291060c0a8982650d021591a73c749d7ac8 GIT binary patch literal 117248 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 16 +adult,adult,persons.age >= 18 +male,male,persons.sex == 1 +female,female,persons.sex == 2 +,ptype,0 +,ptype,"np.where(persons.type == 'Full-time worker', 1, ptype)" +,ptype,"np.where(persons.type == 'Part-time worker', 2, ptype)" +,ptype,"np.where(persons.type == 'University student', 3, ptype)" +,ptype,"np.where(persons.type == 'Non-worker', 4, ptype)" +,ptype,"np.where(persons.type == 'Retired', 5, ptype)" +,ptype,"np.where(persons.type == 'Student of driving age', 6, ptype)" +,ptype,"np.where(persons.type == 'Student of non-driving age', 7, ptype)" +,ptype,"np.where(persons.type == 'Child too young for school', 8, ptype)" \ No newline at end of file diff --git a/test/parking_location/configs/annotate_persons_after_hh.csv b/test/parking_location/configs/annotate_persons_after_hh.csv new file mode 100644 index 000000000..0dfa16be6 --- /dev/null +++ b/test/parking_location/configs/annotate_persons_after_hh.csv @@ -0,0 +1,5 @@ +Description,Target,Expression +#,, annotate persons table after annotate_households +#,, adults get full hh_value_of_time and children get 60% +,_hh_vot,"reindex(households.hh_value_of_time, persons.household_id)" +,value_of_time,"_hh_vot.where(persons.age>=18, _hh_vot * 0.667)" \ No newline at end of file diff --git a/test/parking_location/configs/initialize_households.yaml b/test/parking_location/configs/initialize_households.yaml new file mode 100644 index 000000000..15891431e --- /dev/null +++ b/test/parking_location/configs/initialize_households.yaml @@ -0,0 +1,37 @@ +annotate_tables: + - tablename: persons + column_map: + HHID: household_id + PERID: person_id + AGEP: age + SEX: sex + SCHL: education_attainment + OCCP: occupation + WKHP: hours_worked + WKW: weeks_worked + EMPLOYED: employment_status + ESR: esr + SCHG: grade_attending + activity_pattern: cdap_activity + annotate: + SPEC: annotate_persons + DF: persons + TABLES: + - households + - tablename: households + column_map: + HHID: household_id + HHINCADJ: income + NWRKRS_ESR: num_workers + VEH: auto_ownership + NP: hhsize + HHT: hh_type + BLD: building_size + TYPE: hh_unit_type + MTCCountyID: county_id + annotate: + SPEC: annotate_households + DF: households + TABLES: + - persons + - land_use \ No newline at end of file diff --git a/test/parking_location/configs/initialize_landuse.yaml b/test/parking_location/configs/initialize_landuse.yaml new file mode 100644 index 000000000..d30ddb245 --- /dev/null +++ b/test/parking_location/configs/initialize_landuse.yaml @@ -0,0 +1,52 @@ +annotate_tables: + - tablename: land_use + column_map: + CountyID: county_id + DistID: DISTRICT + HH: TOTHH + POP: TOTPOP + ACRES: TOTACRE + emp_total: TOTEMP + annotate: + SPEC: annotate_landuse + DF: land_use + - tablename: accessibility + column_map: + column_1: nonmandatory_auto_accessibility + column_2: nonmandatory_transit_accessibility + column_3: nonmandatory_nm_accessibility + column_4: nonmandatory_sov0_accessibility + column_5: nonmandatory_sov1_accessibility + column_6: nonmandatory_sov2_accessibility + column_7: nonmandatory_hov0_accessibility + column_8: nonmandatory_hov1_accessibility + column_9: nonmandatory_hov2_accessibility + column_10: shop_hov_insufficient_accessibility + column_11: shop_hov_sufficient_accessibility + column_12: shop_hov_oversufficient_accessibility + column_13: maint_hov_insufficient_accessibility + column_14: maint_hov_sufficient_accessibility + column_15: maint_hov_oversufficient_accessibility + column_16: eat_hov_insufficient_accessibility + column_17: eat_hov_sufficient_accessibility + column_18: eat_hov_oversufficient_accessibility + column_19: visit_hov_insufficient_accessibility + column_20: visit_hov_sufficient_accessibility + column_21: visit_hov_oversufficient_accessibility + column_22: discr_hov_insufficient_accessibility + column_23: discr_hov_sufficient_accessibility + column_24: discr_hov_oversufficient_accessibility + column_25: escort_hov_insufficient_accessibility + column_26: escort_hov_sufficient_accessibility + column_27: escort_hov_oversufficient_accessibility + column_28: shop_sov_insufficient_accessibility + column_29: shop_sov_sufficient_accessibility + column_30: shop_sov_oversufficient_accessibility + column_31: maint_sov_insufficient_accessibility + column_32: maint_sov_sufficient_accessibility + column_33: maint_sov_oversufficient_accessibility + column_40: discr_sov_insufficient_accessibility + column_41: discr_sov_sufficient_accessibility + column_42: discr_sov_oversufficient_accessibility + column_45: total_emp_accessibility + column_47: hh_walktransit_accessibility \ No newline at end of file diff --git a/test/parking_location/configs/network_los.yaml b/test/parking_location/configs/network_los.yaml new file mode 100644 index 000000000..5603ab859 --- /dev/null +++ b/test/parking_location/configs/network_los.yaml @@ -0,0 +1,24 @@ +# read cached skims (using numpy memmap) from output directory (memmap is faster than omx ) +read_skim_cache: False +# write memmapped cached skims to output directory after reading from omx, for use in subsequent runs +write_skim_cache: False + +zone_system: 2 + +taz_skims: skims.omx + +maz: maz.csv + +maz_to_maz: + tables: + - ped_distance_maz_maz.csv + + # maz_to_maz blending distance (missing or 0 means no blending) + max_blend_distance: + DISTWALK: 0 + +skim_time_periods: + time_window: 1440 + period_minutes: 60 + periods: [0, 3, 5, 9, 14, 18, 24] # 3=3:00-3:59, 5=5:00-5:59, 9=9:00-9:59, 14=2:00-2:59, 18=6:00-6:59 + labels: ['EA', 'EA', 'AM', 'MD', 'PM', 'EV'] \ No newline at end of file diff --git a/test/parking_location/configs/parking_location_choice.csv b/test/parking_location/configs/parking_location_choice.csv new file mode 100644 index 000000000..d9a10c39d --- /dev/null +++ b/test/parking_location/configs/parking_location_choice.csv @@ -0,0 +1,34 @@ +Description,Expression,no_segmentation +Person is worker,_person_is_worker@((df.ptype == 1) | (df.ptype == 2)),1 +Trip is work purpose,_work_trip@(df.purpose == 'work'),1 +Number of hourly stalls,_hourly_stalls@df.hstallsoth,1 +Number of daily stalls,_daily_stalls@df.dstallsoth,1 +Number of monthly stalls,_monthly_stalls@df.mstallsoth,1 +Hourly stalls available,_hourly_stalls_available@_hourly_stalls > 0,1 +Daily stalls available,_daily_stalls_available@_daily_stalls > 0,1 +Monthly stalls available,_monthly_stalls_available@_monthly_stalls > 0,1 +Hourly parking cost cents,_hourly_parking_cost@df.hparkcost * 100,1 +Number of free parking hours,_num_free_hours@df.numfreehrs,1 +Daily parking cost cents,_daily_parking_cost@df.dparkcost * 100,1 +Monthly parking cost cents,_monthly_parking_cost@df.mparkcost * 100,1 +Monthly parking is allowed,_monthly_allowed@_monthly_stalls_available & _work_trip & _person_is_worker,1 +Total hourly parking cost,_total_hourly_parking_cost@(_hourly_parking_cost * (df.activity_duration - _num_free_hours)),1 +Hourly is cheaper than daily,"_hourly_cheaper_than_daily@np.where(_daily_stalls_available, _total_hourly_parking_cost < _daily_parking_cost,True)",1 +Hourly is cheaper than monthly,"_hourly_cheaper_than_monthly@np.where(_monthly_allowed, _total_hourly_parking_cost < _monthly_parking_cost,True)",1 +Hourly parking is best,_hourly_best@(_hourly_stalls_available & _hourly_cheaper_than_daily & _hourly_cheaper_than_monthly),1 +Daily is cheaper than hourly,"_daily_cheaper_than_hourly@np.where(_hourly_stalls_available, _daily_parking_cost < _total_hourly_parking_cost,True)",1 +Daily is cheaper than monthly,"_daily_cheaper_than_monthly@np.where(_monthly_allowed, _daily_parking_cost < _monthly_parking_cost,True)",1 +Daily parking is best,_daily_best@(_daily_stalls_available & _daily_cheaper_than_hourly & _daily_cheaper_than_monthly),1 +Monthly is cheaper than hourly,"_monthly_cheaper_than_hourly@np.where(_hourly_stalls_available, _monthly_parking_cost < _total_hourly_parking_cost,True)",1 +Monthly is cheaper than daily,"_monthly_cheaper_than_daily@np.where(_daily_stalls_available, _monthly_parking_cost < _daily_stalls_available,True)",1 +Monthly parking is best,_monthly_best@(_monthly_allowed & _monthly_cheaper_than_hourly & _monthly_cheaper_than_daily),1 +Parking size,_parking_size@(_hourly_best * _hourly_stalls) + (_daily_best * _daily_stalls) + (_monthly_best * _monthly_stalls),1 +Parking cost,_parking_cost@(_hourly_best * _total_hourly_parking_cost) + (_daily_best * _daily_parking_cost) + (_monthly_best * _monthly_parking_cost),1 +Parking to destination distance skim,_walk_distance@pd_skims['DISTWALK'],1 +# actual utility terms starts from here +Log of parking size,"@np.where(_parking_size>0,np.log(_parking_size),-9999)",1 +Cost work trip,"@np.where(df.purpose == 'work', _parking_cost, 0)",coef_cost_work_trip +Cost other trip,"@np.where(df.purpose != 'work', _parking_cost, 0)",coef_cost_other_trip +Walk distance,@_walk_distance,coef_walk_distance +Walk Unavailability,"@np.where(_walk_distance == 0, 1, 0)",coef_unavailable +Require parking zone to be less than 0.75 mile from dest,"@np.where(_walk_distance > 0.75, 1, 0) * (df.destination != df.parking_zone)",coef_unavailable \ No newline at end of file diff --git a/test/parking_location/configs/parking_location_choice.yaml b/test/parking_location/configs/parking_location_choice.yaml new file mode 100644 index 000000000..e7992c7e6 --- /dev/null +++ b/test/parking_location/configs/parking_location_choice.yaml @@ -0,0 +1,22 @@ +SPECIFICATION: parking_location_choice.csv + +COEFFICIENTS: parking_location_choice_coeffs.csv + +PREPROCESSOR: + SPEC: parking_location_choice_annotate_trips_preprocessor + DF: trips_merged + TABLES: + - land_use + - persons + +# boolean column to filter choosers (True means keep) +CHOOSER_FILTER_COLUMN_NAME: is_park_eligible +CHOOSER_SEGMENT_COLUMN_NAME: parking_segment + +ALTERNATIVE_FILTER_COLUMN_NAME: is_parking_zone +ALT_DEST_COL_NAME: parking_zone + +TRIP_DEPARTURE_PERIOD: 'stop_period' + +TRIP_ORIGIN: origin +TRIP_DESTINATION: destination diff --git a/test/parking_location/configs/parking_location_choice_annotate_trips_preprocessor.csv b/test/parking_location/configs/parking_location_choice_annotate_trips_preprocessor.csv new file mode 100644 index 000000000..a49f48b12 --- /dev/null +++ b/test/parking_location/configs/parking_location_choice_annotate_trips_preprocessor.csv @@ -0,0 +1,6 @@ +Description,Target,Expression +Person Type,ptype,"reindex(persons.ptype, df.person_id)" +Trip mode is drive,drive_trip,df.trip_mode <= 8 +Parking segment,parking_segment,setting('segment') +Parking eligible trip,is_park_eligible,(drive_trip & (df.purpose != "home")) +Activity duration,activity_duration,df.activity_duration_in_hours diff --git a/test/parking_location/configs/parking_location_choice_coeffs.csv b/test/parking_location/configs/parking_location_choice_coeffs.csv new file mode 100644 index 000000000..0edccfbf1 --- /dev/null +++ b/test/parking_location/configs/parking_location_choice_coeffs.csv @@ -0,0 +1,5 @@ +coefficient_name,value,constrain +coef_unavailable,-9999,T +coef_walk_distance,-11.8,F +coef_cost_work_trip,-0.0072,F +coef_cost_other_trip,-0.0041,F diff --git a/test/parking_location/configs/settings.yaml b/test/parking_location/configs/settings.yaml new file mode 100644 index 000000000..1cd739cb4 --- /dev/null +++ b/test/parking_location/configs/settings.yaml @@ -0,0 +1,62 @@ +# input tables +input_table_list: + - tablename: households + filename: households.csv + index_col: household_id + rename_columns: + unique_hh_id: household_id + NP: hhsize + hh_workers_from_esr: num_workers + VEH: auto_ownership + MAZ: home_zone_id + HINCP: income + keep_columns: + - home_zone_id + - income + - hhsize + - HHT + - auto_ownership + - num_workers + - tablename: persons + filename: persons.csv + index_col: person_id + rename_columns: + unique_hh_id: household_id + AGEP: age + SPORDER: PNUM + SEX: sex + employed: pemploy + student_status: pstudent + person_type: ptype + keep_columns: + - household_id + - age + - PNUM + - sex + - pemploy + - pstudent + - ptype + - tablename: land_use + filename: land_use.csv + index_col: zone_id + rename_columns: + MAZ_ORIGINAL: zone_id + CountyID: county_id + TAZ_ORIGINAL: TAZ + DistID: DISTRICT + HH: TOTHH + POP: TOTPOP + ACRES: TOTACRE + emp_total: TOTEMP + keep_columns: + - TAZ + - DISTRICT + - SD + - county_id + - TOTHH + - TOTPOP + - TOTACRE + +trace_hh_id: 5924 + +segment: "no_segmentation" \ No newline at end of file diff --git a/test/parking_location/configs/tour_departure_and_duration_alternatives.csv b/test/parking_location/configs/tour_departure_and_duration_alternatives.csv new file mode 100644 index 000000000..bddab06b9 --- /dev/null +++ b/test/parking_location/configs/tour_departure_and_duration_alternatives.csv @@ -0,0 +1,191 @@ +start,end +5,5 +5,6 +5,7 +5,8 +5,9 +5,10 +5,11 +5,12 +5,13 +5,14 +5,15 +5,16 +5,17 +5,18 +5,19 +5,20 +5,21 +5,22 +5,23 +6,6 +6,7 +6,8 +6,9 +6,10 +6,11 +6,12 +6,13 +6,14 +6,15 +6,16 +6,17 +6,18 +6,19 +6,20 +6,21 +6,22 +6,23 +7,7 +7,8 +7,9 +7,10 +7,11 +7,12 +7,13 +7,14 +7,15 +7,16 +7,17 +7,18 +7,19 +7,20 +7,21 +7,22 +7,23 +8,8 +8,9 +8,10 +8,11 +8,12 +8,13 +8,14 +8,15 +8,16 +8,17 +8,18 +8,19 +8,20 +8,21 +8,22 +8,23 +9,9 +9,10 +9,11 +9,12 +9,13 +9,14 +9,15 +9,16 +9,17 +9,18 +9,19 +9,20 +9,21 +9,22 +9,23 +10,10 +10,11 +10,12 +10,13 +10,14 +10,15 +10,16 +10,17 +10,18 +10,19 +10,20 +10,21 +10,22 +10,23 +11,11 +11,12 +11,13 +11,14 +11,15 +11,16 +11,17 +11,18 +11,19 +11,20 +11,21 +11,22 +11,23 +12,12 +12,13 +12,14 +12,15 +12,16 +12,17 +12,18 +12,19 +12,20 +12,21 +12,22 +12,23 +13,13 +13,14 +13,15 +13,16 +13,17 +13,18 +13,19 +13,20 +13,21 +13,22 +13,23 +14,14 +14,15 +14,16 +14,17 +14,18 +14,19 +14,20 +14,21 +14,22 +14,23 +15,15 +15,16 +15,17 +15,18 +15,19 +15,20 +15,21 +15,22 +15,23 +16,16 +16,17 +16,18 +16,19 +16,20 +16,21 +16,22 +16,23 +17,17 +17,18 +17,19 +17,20 +17,21 +17,22 +17,23 +18,18 +18,19 +18,20 +18,21 +18,22 +18,23 +19,19 +19,20 +19,21 +19,22 +19,23 +20,20 +20,21 +20,22 +20,23 +21,21 +21,22 +21,23 +22,22 +22,23 +23,23 \ No newline at end of file diff --git a/test/parking_location/notebook/parking-location-results-summary.twbx b/test/parking_location/notebook/parking-location-results-summary.twbx new file mode 100644 index 0000000000000000000000000000000000000000..fa837b590c2bc11efb0550c832bc2401cedb9011 GIT binary patch literal 717798 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

    ^~RBK(1Ympd*`rFh?7bO*y}< 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

    W*Eh!kki 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%0AhC@zw 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

    I&vb;;IkKWFItUpQ=Xzm0Olid+aYwprk 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%0DVe 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%0AK`ykMI*$lFutR|Jl~FOMJ)c3X;%aLP-onmBtvg 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 H3IG5A(|R$+ literal 0 HcmV?d00001 diff --git a/test/parking_location/test_parking_location.py b/test/parking_location/test_parking_location.py new file mode 100644 index 000000000..6859c93c4 --- /dev/null +++ b/test/parking_location/test_parking_location.py @@ -0,0 +1,458 @@ +import logging +import pytest +import os +import shutil +import pandas as pd +import numpy as np +from numpy import dot +from numpy.linalg import norm +import orca + +# import models is necessary to initalize the model steps with orca +from activitysim.abm import models +from activitysim.core import pipeline, config +from activitysim.core import tracing + +from activitysim.core import simulate +from activitysim.core import config +from activitysim.abm.models.util import estimation +import yaml + +logger = logging.getLogger(__name__) + +# Used by conftest.py initialize_pipeline method +@pytest.fixture(scope="module") +def module() -> str: + """ + A pytest fixture that returns the data folder location. + :return: folder location for any necessary data to initialize the tests + """ + return "parking_location" + + +# Used by conftest.py initialize_pipeline method +@pytest.fixture(scope="module") +def tables(prepare_module_inputs) -> dict[str, str]: + """ + A pytest fixture that returns the "mock" tables to build pipeline dataframes. The + key-value pair is the name of the table and the index column. + :return: dict + """ + return { + "land_use": "maz", + "persons": "person_id", + "households": "household_id", + "accessibility": "maz", + "tours": "tour_id", + "trips": "trip_id", + } + + +# Used by conftest.py initialize_pipeline method +# Set to true if you need to read skims into the pipeline +@pytest.fixture(scope="module") +def initialize_network_los() -> bool: + """ + A pytest boolean fixture indicating whether network skims should be read from the + fixtures test data folder. + :return: boolcls + """ + return True + + +@pytest.fixture(scope="module") +def load_checkpoint() -> bool: + """ + checkpoint to be loaded from the pipeline when reconnecting. + """ + return "initialize_households" + + +# make a reconnect_pipeline internal to test module +@pytest.mark.skipif( + os.path.isfile("test/parking_location/output/pipeline.h5"), + reason="no need to recreate pipeline store if already exist", +) +def test_prepare_input_pipeline(initialize_pipeline: pipeline.Pipeline, caplog): + # Run summarize model + caplog.set_level(logging.INFO) + + # run model step + pipeline.run(models=["initialize_landuse", "initialize_households"]) + + # save the updated pipeline tables + person_df = pipeline.get_table("persons") + person_df.to_csv("test/parking_location/output/person.csv") + + household_df = pipeline.get_table("households") + household_df.to_csv("test/parking_location/output/household.csv") + + land_use_df = pipeline.get_table("land_use") + land_use_df.to_csv("test/parking_location/output/land_use.csv") + + accessibility_df = pipeline.get_table("accessibility") + accessibility_df.to_csv("test/parking_location/output/accessibility.csv") + + tours_df = pipeline.get_table("tours") + tours_df.to_csv("test/parking_location/output/tours.csv") + + trips_df = pipeline.get_table("trips") + trips_df.to_csv("test/parking_location/output/trips.csv") + + pipeline.close_pipeline() + + +# @pytest.mark.skip +def test_parking_location(reconnect_pipeline: pipeline.Pipeline, caplog): + # Run summarize model + caplog.set_level(logging.INFO) + + # run model step + pipeline.run(models=["parking_location"], resume_after="initialize_households") + + # get the updated trips data + trips_df = pipeline.get_table("trips") + trips_df.to_csv("test/parking_location/output/trips_after_parking_choice.csv") + + +# fetch/prepare existing files for model inputs +# e.g. read accessibilities.csv from ctramp result, rename columns, write out to accessibility.csv which is the input to activitysim +@pytest.fixture(scope="module") +def prepare_module_inputs() -> None: + """ + + copy input files from sharepoint into test folder + + create unique person id in person file + + :return: None + """ + # https://wsponlinenam.sharepoint.com/sites/US-TM2ConversionProject/Shared%20Documents/Forms/ + # AllItems.aspx?id=%2Fsites%2FUS%2DTM2ConversionProject%2FShared%20Documents%2FTask%203%20ActivitySim&viewid=7a1eaca7%2D3999%2D4d45%2D9701%2D9943cc3d6ab1 + test_dir = os.path.join("test", "parking_location", "data") + + accessibility_file = os.path.join( + "test", "parking_location", "data", "accessibilities.csv" + ) + household_file = os.path.join(test_dir, "popsyn", "households.csv") + person_file = os.path.join(test_dir, "popsyn", "persons.csv") + landuse_file = os.path.join(test_dir, "landuse", "maz_data_withDensity.csv") + + shutil.copy(accessibility_file, os.path.join(test_dir, "accessibility.csv")) + shutil.copy(household_file, os.path.join(test_dir, "households.csv")) + shutil.copy(person_file, os.path.join(test_dir, "persons.csv")) + shutil.copy(landuse_file, os.path.join(test_dir, "land_use.csv")) + + # add original maz id to accessibility table + land_use_df = pd.read_csv(os.path.join(test_dir, "land_use.csv")) + + land_use_df.rename( + columns={"MAZ": "maz", "MAZ_ORIGINAL": "maz_county_based"}, inplace=True + ) + + land_use_df.to_csv(os.path.join(test_dir, "land_use.csv"), index=False) + + accessibility_df = pd.read_csv(os.path.join(test_dir, "accessibility.csv")) + + accessibility_df["maz"] = accessibility_df["mgra"] + + accessibility_df.to_csv(os.path.join(test_dir, "accessibility.csv"), index=False) + + # currently household file has to have these two columns, even before annotation + # because annotate person happens before household and uses these two columns + # TODO find a way to get around this + #### + household_df = pd.read_csv(os.path.join(test_dir, "households.csv")) + + household_columns_dict = { + "HHID": "household_id", + "TAZ": "taz", + "MAZ": "maz_county_based", + } + + household_df.rename(columns=household_columns_dict, inplace=True) + + tm2_simulated_household_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "householdData_1.csv") + ) + tm2_simulated_household_df.rename(columns={"hh_id": "household_id"}, inplace=True) + + household_df = pd.merge( + household_df, + tm2_simulated_household_df[ + [ + "household_id", + "autos", + "automated_vehicles", + "transponder", + "cdap_pattern", + "jtf_choice", + ] + ], + how="inner", # tm2 is not 100% sample run + on="household_id", + ) + + household_df.to_csv(os.path.join(test_dir, "households.csv"), index=False) + + person_df = pd.read_csv(os.path.join(test_dir, "persons.csv")) + + person_columns_dict = {"HHID": "household_id", "PERID": "person_id"} + + person_df.rename(columns=person_columns_dict, inplace=True) + + tm2_simulated_person_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "personData_1.csv") + ) + tm2_simulated_person_df.rename(columns={"hh_id": "household_id"}, inplace=True) + + person_df = pd.merge( + person_df, + tm2_simulated_person_df[ + [ + "household_id", + "person_id", + "person_num", + "type", + "value_of_time", + "activity_pattern", + "imf_choice", + "inmf_choice", + "fp_choice", + "reimb_pct", + "workDCLogsum", + "schoolDCLogsum", + ] + ], + how="inner", # tm2 is not 100% sample run + on=["household_id", "person_id"], + ) + + # get tm2 simulated workplace and school location results + tm2_simulated_wsloc_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "wsLocResults_1.csv") + ) + tm2_simulated_wsloc_df.rename( + columns={"HHID": "household_id", "PersonID": "person_id"}, inplace=True + ) + + person_df = pd.merge( + person_df, + tm2_simulated_wsloc_df[ + [ + "household_id", + "person_id", + "WorkLocation", + "WorkLocationLogsum", # this is the same as `workDCLogsum` in tm2 person output + "SchoolLocation", + "SchoolLocationLogsum", # this is the same as `schoolDCLogsum` in tm2 person output + ] + ], + how="inner", # ctramp might not be 100% sample run + on=["household_id", "person_id"], + ) + + person_df.to_csv(os.path.join(test_dir, "persons.csv"), index=False) + + ## get tour data from tm2 output + + tm2_simulated_indiv_tour_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "indivTourData_1.csv") + ) + tm2_simulated_joint_tour_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "jointTourData_1.csv") + ) + + tm2_simulated_tour_df = pd.concat( + [tm2_simulated_indiv_tour_df, tm2_simulated_joint_tour_df], + sort=False, + ignore_index=True, + ) + + tm2_simulated_tour_df.rename(columns={"hh_id": "household_id"}, inplace=True) + + tm2_simulated_tour_df["unique_tour_id"] = range(1, len(tm2_simulated_tour_df) + 1) + + ## get trip data from tm2 output + tm2_simulated_indiv_trip_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "indivTripData_1.csv") + ) + tm2_simulated_joint_trip_df = pd.read_csv( + os.path.join(test_dir, "tm2_outputs", "jointTripData_1.csv") + ) + + tm2_simulated_trip_df = pd.concat( + [tm2_simulated_indiv_trip_df, tm2_simulated_joint_trip_df], + sort=False, + ignore_index=True, + ) + + tm2_simulated_trip_df.rename(columns={"hh_id": "household_id"}, inplace=True) + + tm2_simulated_trip_df["trip_id"] = range(1, len(tm2_simulated_trip_df) + 1) + + tm2_simulated_trip_df = pd.merge( + tm2_simulated_trip_df, + tm2_simulated_tour_df[ + [ + "household_id", + "person_id", + "tour_id", + "tour_purpose", + "unique_tour_id", + "start_period", + "end_period", + ] + ], + how="left", + on=["household_id", "person_id", "tour_id", "tour_purpose"], + ) + # drop tour id and rename unique_tour_id to tour_id + tm2_simulated_tour_df.drop(["tour_id"], axis=1, inplace=True) + tm2_simulated_tour_df.rename(columns={"unique_tour_id": "tour_id"}, inplace=True) + + tm2_simulated_trip_df.drop(["tour_id"], axis=1, inplace=True) + tm2_simulated_trip_df.rename( + columns={ + "unique_tour_id": "tour_id", + "orig_mgra": "origin", + "dest_mgra": "destination", + "start_period": "tour_start_period", + "end_period": "tour_end_period", + }, + inplace=True, + ) + + tm2_simulated_trip_df["purpose"] = tm2_simulated_trip_df["dest_purpose"].str.lower() + + period_map_df = pd.read_csv(os.path.join(test_dir, "period_mapping_mtc.csv")) + + tm2_simulated_trip_df.sort_values( + by=["household_id", "person_id", "person_num", "stop_period", "tour_id"], + inplace=True, + ) + + tm2_simulated_trip_df = pd.merge( + tm2_simulated_trip_df, + period_map_df, + left_on="stop_period", + right_on="period", + how="left", + ) + + tm2_simulated_trip_df["trip_departure_time"] = tm2_simulated_trip_df[ + "minutes_reference" + ] + tm2_simulated_trip_df["trip_arrival_time"] = ( + tm2_simulated_trip_df["trip_departure_time"] + + tm2_simulated_trip_df["TRIP_TIME"] + ) + tm2_simulated_trip_df["next_trip_departure_time"] = tm2_simulated_trip_df.groupby( + ["household_id", "person_id", "person_num"] + )["trip_arrival_time"].shift(-1) + + # activity duration is start of next trip - end of current trip + tm2_simulated_trip_df["activity_duration"] = ( + tm2_simulated_trip_df["next_trip_departure_time"] + - tm2_simulated_trip_df["trip_arrival_time"] + ) + + # set default activity duration to 5 minutes + tm2_simulated_trip_df["activity_duration"] = np.where( + tm2_simulated_trip_df["activity_duration"] > 0, + tm2_simulated_trip_df["activity_duration"], + 5, + ) + + # activity duration in hours + tm2_simulated_trip_df["activity_duration_in_hours"] = ( + tm2_simulated_trip_df["activity_duration"] / 60 + ) + + tm2_simulated_trip_df.drop( + [ + "period", + "start_time", + "end_time", + "minutes_reference", + "trip_departure_time", + "trip_arrival_time", + "next_trip_departure_time", + "activity_duration", + ], + inplace=True, + axis=1, + ) + + # randomly select 100,000 trips to run the parking location choice model + # memory constraint on `logit.interaction_dataset` for large trips table + # tm2_simulated_trip_df = tm2_simulated_trip_df.sample(100000, random_state=1) + + # select only if target parking maz is > 0 + tm2_simulated_trip_df = tm2_simulated_trip_df[ + tm2_simulated_trip_df["parking_mgra"] > 0 + ] + + tm2_simulated_tour_df = tm2_simulated_tour_df[ + tm2_simulated_tour_df.household_id.isin(tm2_simulated_trip_df.household_id) + ] + tm2_simulated_tour_df.to_csv(os.path.join(test_dir, "tours.csv"), index=False) + + tm2_simulated_trip_df.to_csv(os.path.join(test_dir, "trips.csv"), index=False) + + +def create_summary(input_df, key, out_col="Share") -> pd.DataFrame: + """ + Create summary for the input data. + 1. group input data by the "key" column + 2. calculate the percent of input data records in each "key" category. + + :return: pd.DataFrame + """ + + out_df = input_df.groupby(key).size().reset_index(name="Count") + out_df[out_col] = round(out_df["Count"] / out_df["Count"].sum(), 4) + + return out_df[[key, out_col]] + + +def cosine_similarity(a, b): + """ + Computes cosine similarity between two vectors. + + Cosine similarity is used here as a metric to measure similarity between two sequence of numbers. + Two sequence of numbers are represented as vectors (in a multi-dimensional space) and cosine similiarity is defined as the cosine of the angle between them + i.e., dot products of the vectors divided by the product of their lengths. + + :return: + """ + + return dot(a, b) / (norm(a) * norm(b)) + + +def compare_simulated_against_target( + target_df: pd.DataFrame, + simulated_df: pd.DataFrame, + target_key: str, + simulated_key: str, +) -> bool: + """ + compares the simulated and target results by computing the cosine similarity between them. + + :return: + """ + + merged_df = pd.merge( + target_df, simulated_df, left_on=target_key, right_on=simulated_key, how="outer" + ) + merged_df = merged_df.fillna(0) + + logger.info("simulated vs target share:\n%s" % merged_df) + + similarity_value = cosine_similarity( + merged_df["Target_Share"].tolist(), merged_df["Simulated_Share"].tolist() + ) + + logger.info("cosine similarity:\n%s" % similarity_value) + + return similarity_value