diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index 3145ab066..7b41abe60 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -75,6 +75,58 @@ jobs: repository_url: https://test.pypi.org/legacy/ verbose: true + docbuild: + needs: test-built-dist + if: github.event_name == 'release' + name: ubuntu-latest py3.9 + runs-on: ubuntu-latest + defaults: + run: + shell: bash -l {0} + steps: + - uses: actions/checkout@v3 + - uses: actions/download-artifact@v3 + with: + name: releases + path: dist + - name: Set up Python 3.9 + uses: actions/setup-python@v2 + with: + python-version: 3.9 + - name: Install dependencies + uses: conda-incubator/setup-miniconda@v2 + with: + miniforge-variant: Mambaforge + miniforge-version: latest + use-mamba: true + environment-file: conda-environments/docbuild.yml + python-version: 3.9 + activate-environment: docbuild + auto-activate-base: false + auto-update-conda: false + - name: Install activitysim + run: | + python -m pip install dist/activitysim-*.whl + - name: Conda checkup + run: | + conda info -a + conda list + echo REPOSITORY ${{ github.repository }} + echo REF ${{ github.ref }} + echo REF_NAME ${{ github.ref_name }} + - name: Build the docs + run: | + cd docs + make clean + make html + - name: Push to GitHub Pages + uses: peaceiris/actions-gh-pages@v3.8.0 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + # Token is created automatically by Github Actions, no other config needed + publish_dir: ./docs/_build/html + destination_dir: ${{ github.ref_name }} + upload-to-pypi: needs: test-built-dist if: github.event_name == 'release' @@ -89,4 +141,4 @@ jobs: with: user: __token__ password: ${{ secrets.PYPI_TOKEN }} - verbose: true \ No newline at end of file + verbose: true diff --git a/HOW_TO_RELEASE.md b/HOW_TO_RELEASE.md index e8f2a4263..edbfee7c2 100644 --- a/HOW_TO_RELEASE.md +++ b/HOW_TO_RELEASE.md @@ -5,9 +5,9 @@ 01. Check that the branch you intend to release is passing tests on Travis. If it's not passing there you should not release it. -00. Start from a completely clean conda environment - and git repository. Assuming you have `conda` installed, you can do so - by starting where ActivitySim is not yet cloned (e.g. in an empty +00. Start from a completely clean conda environment + and git repository. Assuming you have `conda` installed, you can do so + by starting where ActivitySim is not yet cloned (e.g. in an empty directory) and running: ```sh conda create -n TEMP-ASIM-DEV python=3.9 git gh -c conda-forge --override-channels @@ -19,7 +19,7 @@ 00. Per project policy, code on the main branch should have been released, but if you are *preparing* a release then the code should be on the `develop` - branch. Switch to that branch now, and make sure it is synced to the + branch. Switch to that branch now, and make sure it is synced to the version on GitHub: ```sh git switch develop @@ -28,45 +28,46 @@ 00. Update your Conda environment for testing. We do not want to use an existing environment on your machine, as it may be out-of-date - and we want to make sure everything passes muster using the + and we want to make sure everything passes muster using the most up-to-date dependencies available. The following command - will update the active environment (we made this to be `TEMP-ASIM-DEV` + will update the active environment (we made this to be `TEMP-ASIM-DEV` if you followed the directions above). ```sh conda env update --file=conda-environments/activitysim-dev.yml ``` - If you add to the ActivitySim dependencies, make sure to also update - the environments in `conda-environments`, which are used for testing - and development. If they are not updated, these environments will end + If you add to the ActivitySim dependencies, make sure to also update + the environments in `conda-environments`, which are used for testing + and development. If they are not updated, these environments will end up with dependencies loaded from *pip* instead of *conda-forge*. -00. Run pycodestyle to ensure that the codebase passes all style checks. +00. Run `black` to ensure that the codebase passes minimal 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 - pycodestyle . + 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. - - A few of the tests require pre-created data that is not included in the - repository directly, but rather recreated on the fly before testing. The - regular test suite takes some time to run, between about half an hour and + at least through this step on a Windows machine before finalizing a + release. + + A few of the tests require pre-created data that is not included in the + repository directly, but rather recreated on the fly before testing. The + regular test suite takes some time to run, between about half an hour and two hours depending on the specs of your machine. ```sh python activitysim/examples/placeholder_multiple_zone/scripts/two_zone_example_data.py python activitysim/examples/placeholder_multiple_zone/scripts/three_zone_example_data.py pytest . ``` - + 00. Test the full-scale regional examples. These examples are big, too - large to run on Travis, and will take a lot of time (many hours) to + large to run on GitHub Actions, and will take a lot of time (many hours) to download and run. ```sh mkdir tmp-asim @@ -76,7 +77,7 @@ call run_all_examples.bat ``` These tests will run through the gamut even if some of them crash, so - if you don't sit and watch them go (please don't do this) you'll need + if you don't sit and watch them go (please don't do this) you'll need to scan through the results to make sure there are no errors after the fact. ```sh @@ -84,60 +85,33 @@ ``` 00. Test the notebooks in `activitysim/examples/prototype_mtc/notebooks`. - There are also demo notebooks for estimation, but their functionality + There are also demo notebooks for estimation, but their functionality is completely tested in the unit tests run previously. -00. Use bump2version to tag the release commit and update the - version number. The following code will generate a "patch" release, - incrementing the third value in the version number (i.e. "1.2.3" - becomes "1.2.4"). Alternatively, make a "minor" or "major" release. - The `--list` command will generate output to your console to confirm - that the old and new version numbers are what you expect, before you - push the commit (with the changed version in the code) and tags to - GitHub. - ```sh - bump2version patch --list - ``` - - It is also possible to make a development pre-release. To do so, - explicitly set the version number to the next patch plus a ".devN" - suffix: - - ```sh - bump2version patch --new-version 1.2.3.dev0 --list - ``` - - Then, when ready to make a "final" release, set the version by - explicitly removing the suffix: - ```sh - bump2version patch --new-version 1.2.3 --list - ``` - -00. Push the tagged commit to GitHub. - ```sh - git push --tags - ``` - -00. For non-development releases, open a pull request to merge the proposed - release into main. The following command will open a web browser for +00. For non-development releases, open a pull request to merge the proposed + release into main. The following command will open a web browser for you to create the pull request. ```sh gh pr create --web ``` After creating the PR, confirm with the ActivitySim PMC that the release is ready before actually merging it. - + Once final approval is granted, merge the PR into main. The presence of the git tags added earlier will trigger automated build steps to prepare and deploy the release to pypi and conda-forge. - + 00. Create a "release" on GitHub. ```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 + to the main branch, any pre-release should also be built against a non-default branch. For example, to pre-release from the `develop` branch: ```sh @@ -147,11 +121,19 @@ --notes "this pre-release is for a cool new feature" \ --title "Development Pre-Release" ``` - -00. Clean up your workspace, including removing the Conda environment used for - testing (which will prevent you from accidentally using an old + +00. Clean up your workspace, including removing the Conda environment used for + testing (which will prevent you from accidentally using an old environment when you should have a fresh up-to-date one next time). ```sh conda deactivate conda env remove -n TEMP-ASIM-DEV - ``` \ No newline at end of file + ``` + +00. Change the default redirect page for the ActivitySim documentation to point + to the newly released documentation. The redirect page can be edited + [here](https://github.com/ActivitySim/activitysim/blob/gh-pages/index.html). + +00. Add the new release to the `switch.json` file. Don't delete the references + for existing old documentation. The switcher can be edited + [here](https://github.com/ActivitySim/activitysim/blob/gh-pages/switcher.json). diff --git a/activitysim/abm/models/__init__.py b/activitysim/abm/models/__init__.py index 76e685563..716222611 100644 --- a/activitysim/abm/models/__init__.py +++ b/activitysim/abm/models/__init__.py @@ -1,7 +1,9 @@ # ActivitySim # See full license in LICENSE.txt. + from . import ( accessibility, + disaggregate_accessibility, atwork_subtour_destination, atwork_subtour_frequency, atwork_subtour_mode_choice, @@ -24,6 +26,7 @@ non_mandatory_scheduling, non_mandatory_tour_frequency, parking_location_choice, + school_escorting, stop_frequency, summarize, tour_mode_choice, diff --git a/activitysim/abm/models/disaggregate_accessibility.py b/activitysim/abm/models/disaggregate_accessibility.py new file mode 100644 index 000000000..225ca2626 --- /dev/null +++ b/activitysim/abm/models/disaggregate_accessibility.py @@ -0,0 +1,643 @@ +import random +import logging +import pandas as pd +import numpy as np +from functools import reduce +from orca import orca + +from activitysim.core import inject, tracing, config, pipeline, util, los, logit +from activitysim.abm.models import location_choice, initialize +from activitysim.abm.models.util import tour_destination, estimation +from activitysim.abm.tables import shadow_pricing +from activitysim.core.expressions import assign_columns + +from sklearn.cluster import KMeans + +logger = logging.getLogger(__name__) + + +def read_disaggregate_accessibility_yaml(file_name): + """ + Adds in default table suffixes 'proto_' if not defined in the settings file + """ + model_settings = config.read_model_settings(file_name) + if not model_settings.get("suffixes"): + model_settings["suffixes"] = { + "SUFFIX": "proto_", + "ROOTS": [ + "persons", + "households", + "tours", + "persons_merged", + "person_id", + "household_id", + "tour_id", + ], + } + # Convert decimal sample rate to integer sample size + for sample in ["ORIGIN_SAMPLE_SIZE", "DESTINATION_SAMPLE_SIZE"]: + size = model_settings.get(sample, 0) + if size > 0 and size < 1: + model_settings[sample] = round( + size * len(pipeline.get_table("land_use").index) + ) + + return model_settings + + +class ProtoPop: + def __init__(self, network_los, chunk_size): + # Run necessary inits for later + initialize.initialize_landuse() + + # Initialization + self.proto_pop = {} + self.land_use = pipeline.get_table("land_use") + self.network_los = network_los + self.chunk_size = chunk_size + self.model_settings = read_disaggregate_accessibility_yaml( + "disaggregate_accessibility.yaml" + ) + + # Random seed + self.seed = len(self.land_use.index) + + # Generation + self.params = self.read_table_settings() + self.create_proto_pop() + self.inject_tables() + self.annotate_tables() + self.merge_persons() + + def zone_sampler(self): + """ + This is a "pre"-sampling method, which selects a sample from the total zones and generates a proto-pop on it. + This is particularly useful for multi-zone models where there are many MAZs. + Otherwise it could cause memory usage and computation time to explode. + + Important to distinguish this zone sampling from the core destination_sample method. The destination method + is destination oriented, and essentially weights samples by their size terms in order to sample important + destinations. This is irrelevant for accessibility, which is concerned with the accessibility FROM origins + to destinations. + + Thus, this sampling approach will weight the zones by their relative population. + + method: + None/Default - Sample zones weighted by population, ensuring at least one TAZ is sampled per MAZ + If n-samples > n-tazs then sample 1 MAZ from each TAZ until n-remaining-samples < n-tazs, + then sample n-remaining-samples TAZs and sample an MAZ within each of those TAZs. + If n-samples < n-tazs, then it proceeds to the above 'then' condition. + + uniform - Unweighted sample of N zones independent of each other. + + uniform-taz - Unweighted sample of 1 zone per taz up to the N samples specified. + + k-means - K-Means clustering is performed on the zone centroids (must be provided as maz_centroids.csv), + weighted by population. The clustering yields k XY coordinates weighted by zone population + for n-samples = k-clusters specified. Once k new cluster centroids are found, these are then + approximated into the nearest available zone centroid and used to calculate accessibilities on. + + By default, the k-means method is run on 10 different initial cluster seeds (n_init) using using + "k-means++" seeding algorithm (https://en.wikipedia.org/wiki/K-means%2B%2B). The k-means method + runs for max_iter iterations (default=300). + + """ + + # default_zone_col = 'TAZ' if not (self.network_los.zone_system == los.ONE_ZONE) else 'zone_id' + # zone_cols = self.model_settings["zone_id_names"].get("zone_group_cols", default_zone_col) + id_col = self.model_settings["zone_id_names"].get("index_col", "zone_id") + method = self.model_settings.get("ORIGIN_SAMPLE_METHOD") + n_samples = self.model_settings.get("ORIGIN_SAMPLE_SIZE", 0) + + # Get weights, need to get households first to get persons merged. + # Note: This will cause empty zones to be excluded. Which is intended, but just know that. + zone_weights = self.land_use.TOTPOP.to_frame("weight") + zone_weights = zone_weights[zone_weights.weight != 0] + + # If more samples than zones, just default to all zones + if n_samples == 0 or n_samples > len(zone_weights.index): + n_samples = len(zone_weights.index) + print("WARNING: ORIGIN_SAMPLE_SIZE >= n-zones. Using all zones.") + method = "full" # If it's a full sample, no need to sample + + if method and method == "full": + sample_idx = self.land_use.index + elif method and method.lower() == "uniform": + sample_idx = sorted(random.sample(sorted(self.land_use.index), n_samples)) + elif method and method.lower() == "uniform-taz": + # Randomly select one MAZ per TAZ by randomizing the index and then select the first MAZ in each TAZ + # Then truncate the sampled indices by N samples and sort it + sample_idx = ( + self.land_use.sample(frac=1) + .reset_index() + .groupby("TAZ")[id_col] + .first() + ) + sample_idx = sorted(sample_idx) + elif method and method.lower() == "kmeans": + # Performs a simple k-means clustering using centroid XY coordinates + centroids_df = pipeline.get_table("maz_centroids") + + # Assert that land_use zone ids is subset of centroid zone ids + assert set(self.land_use.index).issubset(set(centroids_df.index)) + + # Join the land_use pop on centroids, + # this also filter only zones we need (relevant if running scaled model) + centroids_df = centroids_df.join(self.land_use.TOTPOP, how="inner") + xy_list = list(centroids_df[["X", "Y"]].itertuples(index=False, name=None)) + xy_weights = np.array(centroids_df.TOTPOP) + + # Initializer k-means class + """ + init: (default='k-means++') + ‘k-means++’ : selects initial cluster centroids using sampling based on an + empirical probability distribution of the points’ contribution to the overall inertia. + This technique speeds up convergence, and is theoretically proven to be O(log k) -optimal. + See the description of n_init for more details. + + ‘random’: choose n_clusters observations (rows) at random from data for the initial centroids. + + n_init: (default=10) + Number of time the k-means algorithm will be run with different centroid seeds. + The final results will be the best output of n_init consecutive runs in terms of inertia. + + max_iter: (default=300) + Maximum number of iterations of the k-means algorithm for a single run. + + n_clusters (pass n-samples): + The number of clusters to form as well as the number of centroids to generate. + This is the n-samples we are choosing. + """ + + kmeans = KMeans( + init="k-means++", + n_clusters=n_samples, + n_init=10, + max_iter=300, + random_state=self.seed, + ) + + # Calculate the k-means cluster points + # Find the nearest MAZ for each cluster + kmeans_res = kmeans.fit(X=xy_list, sample_weight=xy_weights) + sample_idx = [ + util.nearest_node_index(_xy, xy_list) + for _xy in kmeans_res.cluster_centers_ + ] + else: + # Default method. + # First sample the TAZ then select subzones weighted by the population size + if self.network_los.zone_system == los.TWO_ZONE: + # Join on TAZ and aggregate + maz_candidates = zone_weights.merge( + self.network_los.maz_taz_df, left_index=True, right_on="MAZ" + ) + taz_candidates = maz_candidates.groupby("TAZ").sum().drop(columns="MAZ") + + # Sample TAZs then sample sample 1 MAZ per TAZ for all TAZs, repeat MAZ sampling until no samples left + n_samples_remaining = n_samples + maz_sample_idx = [] + + while len(maz_candidates.index) > 0 and n_samples_remaining > 0: + # To ensure that each TAZ gets selected at least once when n > n-TAZs + if n_samples_remaining >= len(maz_candidates.groupby("TAZ").size()): + # Sample 1 MAZ per TAZ based on weight + maz_sample_idx += list( + maz_candidates.groupby("TAZ") + .sample( + n=1, + weights="weight", + replace=False, + random_state=self.seed, + ) + .MAZ + ) + else: + # If there are more TAZs than samples remaining, then sample from TAZs first, then MAZs + # Otherwise we would end up with more samples than we want + taz_sample_idx = list( + taz_candidates.sample( + n=n_samples_remaining, + weights="weight", + replace=False, + random_state=self.seed, + ).index + ) + # Now keep only those TAZs and sample MAZs from them + maz_candidates = maz_candidates[ + maz_candidates.TAZ.isin(taz_sample_idx) + ] + maz_sample_idx += list( + maz_candidates.groupby("TAZ") + .sample( + n=1, + weights="weight", + replace=False, + random_state=self.seed, + ) + .MAZ + ) + + # Remove selected candidates from weight list + maz_candidates = maz_candidates[ + ~maz_candidates.MAZ.isin(maz_sample_idx) + ] + # Calculate the remaining samples to collect + n_samples_remaining = n_samples - len(maz_sample_idx) + n_samples_remaining = ( + 0 if n_samples_remaining < 0 else n_samples_remaining + ) + + # The final MAZ list + sample_idx = maz_sample_idx + else: + sample_idx = list( + zone_weights.sample( + n=n_samples, + weights="weight", + replace=True, + random_state=self.seed, + ).index + ) + + return {id_col: sorted(sample_idx)} + + def read_table_settings(self): + # Check if setup properly + assert "CREATE_TABLES" in self.model_settings.keys() + create_tables = self.model_settings["CREATE_TABLES"] + assert all([True for k, v in create_tables.items() if "VARIABLES" in v.keys()]) + assert all( + [ + True + for x in ["PERSONS", "HOUSEHOLDS", "TOURS"] + if x in create_tables.keys() + ] + ) + + params = {} + for name, table in create_tables.items(): + # Ensure table variables are all lists + params[name.lower()] = { + "variables": { + k: (v if isinstance(v, list) else [v]) + for k, v in table["VARIABLES"].items() + }, + "mapped": table.get("mapped_fields", []), + "filter": table.get("filter_rows", []), + "join_on": table.get("JOIN_ON", []), + "index_col": table.get("index_col", []), + "zone_col": table.get("zone_col", []), + "rename_columns": table.get("rename_columns", []), + } + + # Set zone_id name if not already specified + self.model_settings["zone_id_names"] = self.model_settings.get( + "zone_id_names", {"index_col": "zone_id"} + ) + + # Add in the zone variables + zone_list = self.zone_sampler() + + # Add zones to households dicts as vary_on variable + params["proto_households"]["variables"] = { + **params["proto_households"]["variables"], + **zone_list, + } + + return params + + def generate_replicates(self, table_name): + """ + Generates replicates finding the cartesian product of the non-mapped field variables. + The mapped fields are then annotated after replication + """ + # Generate replicates + df = pd.DataFrame(util.named_product(**self.params[table_name]["variables"])) + + # Applying mapped variables + if len(self.params[table_name]["mapped"]) > 0: + for mapped_from, mapped_to_pair in self.params[table_name][ + "mapped" + ].items(): + for name, mapped_to in mapped_to_pair.items(): + df[name] = df[mapped_from].map(mapped_to) + + # Perform filter step + if (len(self.params[table_name]["filter"])) > 0: + for filt in self.params[table_name]["filter"]: + df[eval(filt)].reset_index(drop=True) + + return df + + def create_proto_pop(self): + # Separate out the mapped data from the varying data and create base replicate tables + klist = ["proto_households", "proto_persons", "proto_tours"] + households, persons, tours = [self.generate_replicates(k) for k in klist] + + # Names + households.name, persons.name, tours.name = klist + + # Create ID columns, defaults to "%tablename%_id" + hhid, perid, tourid = [ + self.params[x]["index_col"] + if len(self.params[x]["index_col"]) > 0 + else x + "_id" + for x in klist + ] + + # Create hhid + households[hhid] = households.index + 1 + households["household_serial_no"] = households[hhid] + + # Assign persons to households + rep = ( + pd.DataFrame(util.named_product(hhid=households[hhid], index=persons.index)) + .set_index("index") + .rename(columns={"hhid": hhid}) + ) + persons = rep.join(persons).sort_values(hhid).reset_index(drop=True) + persons[perid] = persons.index + 1 + + # Assign persons to tours + tkey, pkey = list(self.params["proto_tours"]["join_on"].items())[0] + tours = tours.merge(persons[[pkey, hhid, perid]], left_on=tkey, right_on=pkey) + tours.index = tours.index.set_names([tourid]) + tours = tours.reset_index().drop(columns=[pkey]) + + # Set index + households.set_index(hhid, inplace=True, drop=False) + persons.set_index(perid, inplace=True, drop=False) + tours.set_index(tourid, inplace=True, drop=False) + + # Store tables + self.proto_pop = { + "proto_households": households, + "proto_persons": persons, + "proto_tours": tours, + } + + # Rename any columns. Do this first before any annotating + for tablename, df in self.proto_pop.items(): + colnames = self.params[tablename]["rename_columns"] + if len(colnames) > 0: + df.rename(columns=colnames, inplace=True) + + def inject_tables(self): + # Update canonical tables lists + inject.add_injectable( + "traceable_tables", + inject.get_injectable("traceable_tables") + list(self.proto_pop.keys()), + ) + for tablename, df in self.proto_pop.items(): + inject.add_table(tablename, df) + pipeline.get_rn_generator().add_channel(tablename, df) + tracing.register_traceable_table(tablename, df) + # pipeline.get_rn_generator().drop_channel(tablename) + + def annotate_tables(self): + # Extract annotations + for annotations in self.model_settings["annotate_proto_tables"]: + tablename = annotations["tablename"] + df = pipeline.get_table(tablename) + assert df is not None + assert annotations is not None + assign_columns( + df=df, + model_settings={ + **annotations["annotate"], + **self.model_settings["suffixes"], + }, + trace_label=tracing.extend_trace_label("ProtoPop.annotate", tablename), + ) + pipeline.replace_table(tablename, df) + + def merge_persons(self): + persons = pipeline.get_table("proto_persons") + households = pipeline.get_table("proto_households") + + # For dropping any extra columns created during merge + cols_to_use = households.columns.difference(persons.columns) + + # persons_merged to emulate the persons_merged table in the pipeline + persons_merged = persons.join( + households[cols_to_use], on=self.params["proto_households"]["index_col"] + ).merge( + self.land_use, + left_on=self.params["proto_households"]["zone_col"], + right_on=self.model_settings["zone_id_names"]["index_col"], + ) + + perid = self.params["proto_persons"]["index_col"] + persons_merged.set_index(perid, inplace=True, drop=True) + self.proto_pop["proto_persons_merged"] = persons_merged + + # Store in pipeline + inject.add_table("proto_persons_merged", persons_merged) + + +def get_disaggregate_logsums(network_los, chunk_size, trace_hh_id): + logsums = {} + persons_merged = pipeline.get_table("proto_persons_merged").sort_index( + inplace=False + ) + disagg_model_settings = read_disaggregate_accessibility_yaml( + "disaggregate_accessibility.yaml" + ) + + for model_name in [ + "workplace_location", + "school_location", + "non_mandatory_tour_destination", + ]: + trace_label = tracing.extend_trace_label(model_name, "accessibilities") + print("Running model {}".format(trace_label)) + model_settings = config.read_model_settings(model_name + ".yaml") + model_settings["SAMPLE_SIZE"] = disagg_model_settings.get( + "DESTINATION_SAMPLE_SIZE" + ) + estimator = estimation.manager.begin_estimation(trace_label) + if estimator: + location_choice.write_estimation_specs( + estimator, model_settings, model_name + ".yaml" + ) + + # Append table references in settings with "proto_" + # This avoids having to make duplicate copies of config files for disagg accessibilities + model_settings = util.suffix_tables_in_settings(model_settings) + model_settings["CHOOSER_ID_COLUMN"] = "proto_person_id" + + # Include the suffix tags to pass onto downstream logsum models (e.g., tour mode choice) + if model_settings.get("LOGSUM_SETTINGS", None): + suffixes = util.concat_suffix_dict(disagg_model_settings.get("suffixes")) + suffixes.insert(0, model_settings.get("LOGSUM_SETTINGS")) + model_settings["LOGSUM_SETTINGS"] = " ".join(suffixes) + + if model_name != "non_mandatory_tour_destination": + shadow_price_calculator = shadow_pricing.load_shadow_price_calculator( + model_settings + ) + # filter to only workers or students + chooser_filter_column = model_settings["CHOOSER_FILTER_COLUMN_NAME"] + choosers = persons_merged[persons_merged[chooser_filter_column]] + + # run location choice and return logsums + _logsums, _ = location_choice.run_location_choice( + choosers, + network_los, + shadow_price_calculator=shadow_price_calculator, + want_logsums=True, + want_sample_table=True, + estimator=estimator, + model_settings=model_settings, + chunk_size=chunk_size, + chunk_tag=trace_label, + trace_hh_id=trace_hh_id, + trace_label=trace_label, + skip_choice=True, + ) + + # Merge onto persons + if _logsums is not None and len(_logsums.index) > 0: + keep_cols = list(set(_logsums.columns).difference(choosers.columns)) + logsums[model_name] = persons_merged.merge( + _logsums[keep_cols], on="proto_person_id" + ) + + else: + tours = pipeline.get_table("proto_tours") + tours = tours[tours.tour_category == "non_mandatory"] + + _logsums, _ = tour_destination.run_tour_destination( + tours, + persons_merged, + want_logsums=True, + want_sample_table=True, + model_settings=model_settings, + network_los=network_los, + estimator=estimator, + chunk_size=chunk_size, + trace_hh_id=trace_hh_id, + trace_label=trace_label, + skip_choice=True, + ) + + # Merge onto persons & tours + if _logsums is not None and len(_logsums.index) > 0: + tour_logsums = tours.merge( + _logsums["logsums"].to_frame(), left_index=True, right_index=True + ) + keep_cols = list( + set(tour_logsums.columns).difference(persons_merged.columns) + ) + logsums[model_name] = persons_merged.merge( + tour_logsums[keep_cols], on="proto_person_id" + ) + + return logsums + + +@inject.step() +def initialize_proto_population(network_los, chunk_size): + # Synthesize the proto-population + ProtoPop(network_los, chunk_size) + return + + +@inject.step() +def compute_disaggregate_accessibility(network_los, chunk_size, trace_hh_id): + """ + Compute enhanced disaggregate accessibility for user specified population segments, + as well as each zone in land use file using expressions from accessibility_spec. + + """ + + # Synthesize the proto-population + model_settings = read_disaggregate_accessibility_yaml( + "disaggregate_accessibility.yaml" + ) + + # - initialize shadow_pricing size tables after annotating household and person tables + # since these are scaled to model size, they have to be created while single-process + # this can now be called as a standalone model step instead, add_size_tables + add_size_tables = model_settings.get("add_size_tables", True) + if add_size_tables: + # warnings.warn(f"Calling add_size_tables from initialize will be removed in the future.", FutureWarning) + shadow_pricing.add_size_tables(model_settings.get("suffixes")) + + # Re-Register tables in this step, necessary for multiprocessing + for tablename in ["proto_households", "proto_persons", "proto_tours"]: + df = inject.get_table(tablename).to_frame() + traceables = inject.get_injectable("traceable_tables") + if tablename not in pipeline.get_rn_generator().channels: + pipeline.get_rn_generator().add_channel(tablename, df) + if tablename not in traceables: + inject.add_injectable("traceable_tables", traceables + [tablename]) + tracing.register_traceable_table(tablename, df) + del df + + # Run location choice + logsums = get_disaggregate_logsums(network_los, chunk_size, trace_hh_id) + logsums = {k + "_accessibility": v for k, v in logsums.items()} + + # Combined accessibility table + # Setup dict for fixed location accessibilities + access_list = [] + for k, df in logsums.items(): + if "non_mandatory_tour_destination" in k: + # cast non-mandatory purposes to wide + df = pd.pivot( + df, + index=["proto_household_id", "proto_person_id"], + columns="tour_type", + values="logsums", + ) + df.columns = ["_".join([str(x), "accessibility"]) for x in df.columns] + access_list.append(df) + else: + access_list.append( + df[["proto_household_id", "logsums"]].rename(columns={"logsums": k}) + ) + # Merge to wide data frame. Merged on household_id, logsums are at household level + access_df = reduce( + lambda x, y: pd.merge(x, y, on="proto_household_id", how="outer"), access_list + ) + + # Merge in the proto pop data and inject it + access_df = ( + access_df.merge( + pipeline.get_table("proto_persons_merged").reset_index(), + on="proto_household_id", + ) + .set_index("proto_person_id") + .sort_index() + ) + + logsums["proto_disaggregate_accessibility"] = access_df + + # Drop any tables prematurely created + for tablename in [ + "school_destination_size", + "workplace_destination_size", + ]: + pipeline.drop_table(tablename) + + for ch in list(pipeline.get_rn_generator().channels.keys()): + pipeline.get_rn_generator().drop_channel(ch) + + # Drop any prematurely added traceables + for trace in [ + x for x in inject.get_injectable("traceable_tables") if "proto_" not in x + ]: + tracing.deregister_traceable_table(trace) + + # need to clear any premature tables that were added during the previous run + orca._TABLES.clear() + for name, func in inject._DECORATED_TABLES.items(): + logger.debug("reinject decorated table %s" % name) + orca.add_table(name, func) + + # Inject accessibility results into pipeline + [inject.add_table(k, df) for k, df in logsums.items()] + + return diff --git a/activitysim/abm/models/initialize.py b/activitysim/abm/models/initialize.py index 14419dfde..fd9f47bb8 100644 --- a/activitysim/abm/models/initialize.py +++ b/activitysim/abm/models/initialize.py @@ -6,7 +6,7 @@ import pandas as pd -from activitysim.abm.tables import shadow_pricing +from activitysim.abm.tables import shadow_pricing, disaggregate_accessibility from activitysim.core import chunk, config, expressions, inject, mem, pipeline, tracing from activitysim.core.steps.output import ( track_skim_usage, @@ -141,7 +141,8 @@ def initialize_households(): add_size_tables = model_settings.get("add_size_tables", True) if add_size_tables: # warnings.warn(f"Calling add_size_tables from initialize will be removed in the future.", FutureWarning) - shadow_pricing.add_size_tables() + suffixes = inject.get_injectable("disaggregate_suffixes") + shadow_pricing.add_size_tables(suffixes) # - preload person_windows person_windows = inject.get_table("person_windows").to_frame() diff --git a/activitysim/abm/models/location_choice.py b/activitysim/abm/models/location_choice.py index f35d3eb15..9b565c9a7 100644 --- a/activitysim/abm/models/location_choice.py +++ b/activitysim/abm/models/location_choice.py @@ -227,7 +227,7 @@ def location_sample( DEST_MAZ = "dest_MAZ" -def aggregate_size_terms(dest_size_terms, network_los): +def aggregate_size_terms(dest_size_terms, network_los, model_settings): # # aggregate MAZ_size_terms to TAZ_size_terms # @@ -261,6 +261,21 @@ def aggregate_size_terms(dest_size_terms, network_los): for c in weighted_average_cols: TAZ_size_terms[c] /= TAZ_size_terms["size_term"] # weighted average + spc = shadow_pricing.load_shadow_price_calculator(model_settings) + if spc.use_shadow_pricing and ( + spc.shadow_settings["SHADOW_PRICE_METHOD"] == "simulation" + ): + # allow TAZs with at least one underassigned MAZ in them, therefore with a shadowprice larger than -999, to be selected again + TAZ_size_terms["shadow_price_utility_adjustment"] = np.where( + TAZ_size_terms["shadow_price_utility_adjustment"] > -999, 0, -999 + ) + # now, negative size term means shadow price is -999. Setting size_term to 0 so the prob of that MAZ being selected becomes 0 + MAZ_size_terms["size_term"] = np.where( + MAZ_size_terms["shadow_price_utility_adjustment"] < 0, + 0, + MAZ_size_terms["size_term"], + ) + if TAZ_size_terms.isna().any(axis=None): logger.warning( f"TAZ_size_terms with NAN values\n{TAZ_size_terms[TAZ_size_terms.isna().any(axis=1)]}" @@ -308,7 +323,9 @@ def location_presample( alt_dest_col_name = model_settings["ALT_DEST_COL_NAME"] assert DEST_TAZ != alt_dest_col_name - MAZ_size_terms, TAZ_size_terms = aggregate_size_terms(dest_size_terms, network_los) + MAZ_size_terms, TAZ_size_terms = aggregate_size_terms( + dest_size_terms, network_los, model_settings + ) # convert MAZ zone_id to 'TAZ' in choosers (persons_merged) # persons_merged[HOME_TAZ] = persons_merged[HOME_MAZ].map(maz_to_taz) @@ -524,6 +541,7 @@ def run_location_simulate( chunk_size, chunk_tag, trace_label, + skip_choice=False, ): """ run location model on location_sample annotated with mode_choice logsum @@ -594,6 +612,7 @@ def run_location_simulate( trace_label=trace_label, trace_choice_name=model_settings["DEST_CHOICE_COLUMN_NAME"], estimator=estimator, + skip_choice=skip_choice, ) if not want_logsums: @@ -618,6 +637,7 @@ def run_location_choice( chunk_tag, trace_hh_id, trace_label, + skip_choice=False, ): """ Run the three-part location choice algorithm to generate a location choice for each chooser @@ -716,6 +736,7 @@ def run_location_choice( trace_label=tracing.extend_trace_label( trace_label, "simulate.%s" % segment_name ), + skip_choice=skip_choice, ) if estimator: @@ -856,6 +877,7 @@ def iterate_location_choice( # chooser segmentation allows different sets coefficients for e.g. different income_segments or tour_types chooser_segment_column = model_settings["CHOOSER_SEGMENT_COLUMN_NAME"] + segment_ids = model_settings["SEGMENT_IDS"] assert ( chooser_segment_column in persons_merged_df @@ -869,11 +891,38 @@ def iterate_location_choice( for iteration in range(1, max_iterations + 1): + persons_merged_df_ = persons_merged_df.copy() + if spc.use_shadow_pricing and iteration > 1: spc.update_shadow_prices() - choices_df, save_sample_df = run_location_choice( - persons_merged_df, + if spc.shadow_settings["SHADOW_PRICE_METHOD"] == "simulation": + # filter from the sampled persons + persons_merged_df_ = persons_merged_df_[ + persons_merged_df_.index.isin(spc.sampled_persons.index) + ] + # handle cases where a segment has persons but no zones to receive them + desired_size_sum = spc.desired_size[ + spc.desired_size.index.isin( + spc.shadow_prices[spc.shadow_prices.iloc[:, 0] != -999].index + ) + ].sum() + zero_desired_size_segments = [ + i for i in desired_size_sum.index if desired_size_sum[i] == 0 + ] + zero_desired_size_segments_ids = [ + segment_ids[key] for key in zero_desired_size_segments + ] + persons_merged_df_ = persons_merged_df_[ + ~persons_merged_df_[chooser_segment_column].isin( + zero_desired_size_segments_ids + ) + ] + + persons_merged_df_ = persons_merged_df_.sort_index() + + choices_df_, save_sample_df = run_location_choice( + persons_merged_df_, network_los, shadow_price_calculator=spc, want_logsums=logsum_column_name is not None, @@ -886,10 +935,35 @@ def iterate_location_choice( trace_label=tracing.extend_trace_label(trace_label, "i%s" % iteration), ) - # choices_df is a pandas DataFrame with columns 'choice' and (optionally) 'logsum' - if choices_df is None: + # choices_df is a pandas DataFrame with columns "choice" and (optionally) "logsum" + if choices_df_ is None: break + if spc.use_shadow_pricing: + # handle simulation method + if ( + spc.shadow_settings["SHADOW_PRICE_METHOD"] == "simulation" + and iteration > 1 + ): + # if a process ends up with no sampled workers in it, hence an empty choice_df_, then choice_df wil be what it was previously + if len(choices_df_) == 0: + choices_df = choices_df + else: + choices_df = pd.concat([choices_df, choices_df_], axis=0) + choices_df_index = choices_df_.index.name + choices_df = choices_df.reset_index() + # update choices of workers/students + choices_df = choices_df.drop_duplicates( + subset=[choices_df_index], keep="last" + ) + choices_df = choices_df.set_index(choices_df_index) + choices_df = choices_df.sort_index() + else: + choices_df = choices_df_.copy() + + else: + choices_df = choices_df_ + spc.set_choices( choices=choices_df["choice"], segment_ids=persons_merged_df[chooser_segment_column].reindex( diff --git a/activitysim/abm/models/non_mandatory_destination.py b/activitysim/abm/models/non_mandatory_destination.py index 322d0ed32..adfd4a098 100644 --- a/activitysim/abm/models/non_mandatory_destination.py +++ b/activitysim/abm/models/non_mandatory_destination.py @@ -7,7 +7,8 @@ from activitysim.core import config, inject, pipeline, simulate, tracing from activitysim.core.util import assign_in_place -from .util import estimation, tour_destination +from .util import estimation, tour_destination, annotate + logger = logging.getLogger(__name__) @@ -43,7 +44,18 @@ def non_mandatory_tour_destination( # choosers are tours - in a sense tours are choosing their destination non_mandatory_tours = tours[tours.tour_category == "non_mandatory"] - # - if no mandatory_tours + # separating out pure escort school tours + # they already have their destination set + if pipeline.is_table("school_escort_tours"): + nm_tour_index = non_mandatory_tours.index + pure_school_escort_tours = non_mandatory_tours[ + (non_mandatory_tours["school_esc_outbound"] == "pure_escort") + | (non_mandatory_tours["school_esc_inbound"] == "pure_escort") + ] + non_mandatory_tours = non_mandatory_tours[ + ~non_mandatory_tours.index.isin(pure_school_escort_tours.index) + ] + if non_mandatory_tours.shape[0] == 0: tracing.no_results(trace_label) return @@ -85,14 +97,27 @@ def non_mandatory_tour_destination( non_mandatory_tours["destination"] = choices_df.choice + # merging back in school escort tours and preserving index + if pipeline.is_table("school_escort_tours"): + non_mandatory_tours = pd.concat( + [pure_school_escort_tours, non_mandatory_tours] + ).set_index(nm_tour_index) + assign_in_place(tours, non_mandatory_tours[["destination"]]) if want_logsums: non_mandatory_tours[logsum_column_name] = choices_df["logsum"] assign_in_place(tours, non_mandatory_tours[[logsum_column_name]]) + assert all( + ~tours["destination"].isna() + ), f"Tours are missing destination: {tours[tours['destination'].isna()]}" + pipeline.replace_table("tours", tours) + if model_settings.get("annotate_tours"): + annotate.annotate_tours(model_settings, trace_label) + if want_sample_table: assert len(save_sample_df.index.get_level_values(0).unique()) == len(choices_df) # save_sample_df.set_index(model_settings['ALT_DEST_COL_NAME'], append=True, inplace=True) diff --git a/activitysim/abm/models/non_mandatory_scheduling.py b/activitysim/abm/models/non_mandatory_scheduling.py index b827f1853..22f555b42 100644 --- a/activitysim/abm/models/non_mandatory_scheduling.py +++ b/activitysim/abm/models/non_mandatory_scheduling.py @@ -11,7 +11,11 @@ from .util import estimation from .util.tour_scheduling import run_tour_scheduling +from .util.school_escort_tours_trips import create_pure_school_escort_tours + from .util.vectorize_tour_scheduling import vectorize_tour_scheduling +from activitysim.core.util import assign_in_place + logger = logging.getLogger(__name__) DUMP = False diff --git a/activitysim/abm/models/non_mandatory_tour_frequency.py b/activitysim/abm/models/non_mandatory_tour_frequency.py index 813bc7de6..22b4f98c2 100644 --- a/activitysim/abm/models/non_mandatory_tour_frequency.py +++ b/activitysim/abm/models/non_mandatory_tour_frequency.py @@ -4,6 +4,7 @@ import numpy as np import pandas as pd +from activitysim.abm.models.util import school_escort_tours_trips from activitysim.core import ( config, @@ -17,6 +18,9 @@ from activitysim.core.interaction_simulate import interaction_simulate from .util import estimation +from .util import annotate +from .util.school_escort_tours_trips import recompute_tour_count_statistics + from .util.overlap import person_max_window from .util.tour_frequency import process_non_mandatory_tours @@ -376,6 +380,13 @@ def non_mandatory_tour_frequency(persons, persons_merged, chunk_size, trace_hh_i tracing.register_traceable_table("tours", non_mandatory_tours) pipeline.get_rn_generator().add_channel("tours", non_mandatory_tours) + if pipeline.is_table("school_escort_tours"): + # need to re-compute tour frequency statistics to account for school escort tours + recompute_tour_count_statistics() + + if model_settings.get("annotate_tours"): + annotate.annotate_tours(model_settings, trace_label) + expressions.assign_columns( df=persons, model_settings=model_settings.get("annotate_persons"), diff --git a/activitysim/abm/models/school_escorting.py b/activitysim/abm/models/school_escorting.py new file mode 100644 index 000000000..c621665c4 --- /dev/null +++ b/activitysim/abm/models/school_escorting.py @@ -0,0 +1,499 @@ +# ActivitySim +# See full license in LICENSE.txt. +import logging + +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 activitysim.core import los + +import activitysim.abm.tables.tours as tables_tours +from activitysim.core.util import reindex + +import pandas as pd +import numpy as np +import warnings + +from .util import estimation +from .util import school_escort_tours_trips + +logger = logging.getLogger(__name__) + +# setting global defaults for max number of escortees and escortees in model +NUM_ESCORTEES = 3 +NUM_CHAPERONES = 2 + + +def determine_escorting_paricipants(choosers, persons, model_settings): + """ + Determining which persons correspond to chauffer 1..n and escortee 1..n. + Chauffers are those with the highest weight given by: + weight = 100 * person type + 10 * gender + 1*(age > 25) + and escortees are selected youngest to oldest. + + """ + + NUM_ESCORTEES = model_settings["NUM_ESCORTEES"] + NUM_CHAPERONES = model_settings["NUM_CHAPERONES"] + + ptype_col = model_settings.get("PERSONTYPE_COLUMN", "ptype") + sex_col = model_settings.get("GENDER_COLUMN", "sex") + age_col = model_settings.get("AGE_COLUMN", "age") + + # is this cut correct? + escortees = persons[ + persons.is_student & (persons[age_col] < 16) & (persons.cdap_activity == "M") + ] + households_with_escortees = escortees["household_id"] + + persontype_weight = 100 + gender_weight = 10 + age_weight = 1 + + # can we move all of these to a config file? + chaperones = persons[ + (persons[age_col] > 18) & persons.household_id.isin(households_with_escortees) + ] + + chaperones["chaperone_weight"] = ( + (persontype_weight * chaperones[ptype_col]) + + (gender_weight * np.where(chaperones[sex_col] == 1, 1, 2)) + + (age_weight * np.where(chaperones[age_col] > 25, 1, 0)) + ) + + chaperones["chaperone_num"] = ( + chaperones.sort_values("chaperone_weight", ascending=False) + .groupby("household_id") + .cumcount() + + 1 + ) + escortees["escortee_num"] = ( + escortees.sort_values("age", ascending=True).groupby("household_id").cumcount() + + 1 + ) + + participant_columns = [] + for i in range(1, NUM_CHAPERONES + 1): + choosers["chauf_id" + str(i)] = ( + chaperones[chaperones["chaperone_num"] == i] + .reset_index() + .set_index("household_id") + .reindex(choosers.index)["person_id"] + ) + participant_columns.append("chauf_id" + str(i)) + for i in range(1, NUM_ESCORTEES + 1): + choosers["child_id" + str(i)] = ( + escortees[escortees["escortee_num"] == i] + .reset_index() + .set_index("household_id") + .reindex(choosers.index)["person_id"] + ) + participant_columns.append("child_id" + str(i)) + + return choosers, participant_columns + + +def add_prev_choices_to_choosers(choosers, choices, alts, stage): + # adding choice details to chooser table + escorting_choice = "school_escorting_" + stage + choosers[escorting_choice] = choices + + stage_alts = alts.copy() + stage_alts.columns = stage_alts.columns + "_" + stage + + choosers = ( + choosers.reset_index() + .merge( + stage_alts, + how="left", + left_on=escorting_choice, + right_on=stage_alts.index.name, + ) + .set_index("household_id") + ) + + return choosers + + +def create_bundle_attributes(row): + """ + Parse a bundle to determine escortee numbers and tour info. + """ + escortee_str = "" + escortee_num_str = "" + school_dests_str = "" + school_starts_str = "" + school_ends_str = "" + school_tour_ids_str = "" + num_escortees = 0 + + for child_num in row["child_order"]: + child_num = str(child_num) + child_id = int(row["bundle_child" + child_num]) + + if child_id > 0: + num_escortees += 1 + school_dest = str(int(row["school_destination_child" + child_num])) + school_start = str(int(row["school_start_child" + child_num])) + school_end = str(int(row["school_end_child" + child_num])) + school_tour_id = str(int(row["school_tour_id_child" + child_num])) + + if escortee_str == "": + escortee_str = str(child_id) + escortee_num_str = str(child_num) + school_dests_str = school_dest + school_starts_str = school_start + school_ends_str = school_end + school_tour_ids_str = school_tour_id + else: + escortee_str = escortee_str + "_" + str(child_id) + escortee_num_str = escortee_num_str + "_" + str(child_num) + school_dests_str = school_dests_str + "_" + school_dest + school_starts_str = school_starts_str + "_" + school_start + school_ends_str = school_ends_str + "_" + school_end + school_tour_ids_str = school_tour_ids_str + "_" + school_tour_id + + row["escortees"] = escortee_str + row["escortee_nums"] = escortee_num_str + row["num_escortees"] = num_escortees + row["school_destinations"] = school_dests_str + row["school_starts"] = school_starts_str + row["school_ends"] = school_ends_str + row["school_tour_ids"] = school_tour_ids_str + return row + + +def create_school_escorting_bundles_table(choosers, tours, stage): + """ + Creates a table that has one row for every school escorting bundle. + Additional calculations are performed to help facilitate tour and + trip creation including escortee order, times, etc. + + Parameters + ---------- + choosers : pd.DataFrame + households pre-processed for the school escorting model + tours : pd.Dataframe + mandatory tours + stage : str + inbound or outbound_cond + + Returns + ------- + bundles : pd.DataFrame + one school escorting bundle per row + """ + # making a table of bundles + choosers = choosers.reset_index() + choosers = choosers.loc[choosers.index.repeat(choosers["nbundles"])] + + bundles = pd.DataFrame() + # bundles.index = choosers.index + bundles["household_id"] = choosers["household_id"] + bundles["home_zone_id"] = choosers["home_zone_id"] + bundles["school_escort_direction"] = ( + "outbound" if "outbound" in stage else "inbound" + ) + bundles["bundle_num"] = bundles.groupby("household_id").cumcount() + 1 + + # initialize values + bundles["chauf_type_num"] = 0 + + # getting bundle school start times and locations + school_tours = tours[(tours.tour_type == "school") & (tours.tour_num == 1)] + + school_starts = school_tours.set_index("person_id").start + school_ends = school_tours.set_index("person_id").end + school_destinations = school_tours.set_index("person_id").destination + school_origins = school_tours.set_index("person_id").origin + school_tour_ids = school_tours.reset_index().set_index("person_id").tour_id + + for child_num in range(1, 4): + i = str(child_num) + bundles["bundle_child" + i] = np.where( + choosers["bundle" + i] == bundles["bundle_num"], + choosers["child_id" + i], + -1, + ) + bundles["chauf_type_num"] = np.where( + (choosers["bundle" + i] == bundles["bundle_num"]), + choosers["chauf" + i], + bundles["chauf_type_num"], + ) + bundles["time_home_to_school" + i] = np.where( + (choosers["bundle" + i] == bundles["bundle_num"]), + choosers["time_home_to_school" + i], + np.NaN, + ) + + bundles["school_destination_child" + i] = reindex( + school_destinations, bundles["bundle_child" + i] + ) + bundles["school_origin_child" + i] = reindex( + school_origins, bundles["bundle_child" + i] + ) + bundles["school_start_child" + i] = reindex( + school_starts, bundles["bundle_child" + i] + ) + bundles["school_end_child" + i] = reindex( + school_ends, bundles["bundle_child" + i] + ) + bundles["school_tour_id_child" + i] = reindex( + school_tour_ids, bundles["bundle_child" + i] + ) + + # FIXME assumes only two chauffeurs + bundles["chauf_id"] = np.where( + bundles["chauf_type_num"] <= 2, choosers["chauf_id1"], choosers["chauf_id2"] + ).astype(int) + bundles["chauf_num"] = np.where(bundles["chauf_type_num"] <= 2, 1, 2) + bundles["escort_type"] = np.where( + bundles["chauf_type_num"].isin([1, 3]), "ride_share", "pure_escort" + ) + + # This is just pulled from the pre-processor. Will break if removed or renamed in pre-processor + # I think this is still a better implmentation than re-calculating here... + school_time_cols = [ + "time_home_to_school" + str(i) for i in range(1, NUM_ESCORTEES + 1) + ] + bundles["outbound_order"] = list(bundles[school_time_cols].values.argsort() + 1) + bundles["inbound_order"] = list( + (-1 * bundles[school_time_cols]).values.argsort() + 1 + ) # inbound gets reverse order + bundles["child_order"] = np.where( + bundles["school_escort_direction"] == "outbound", + bundles["outbound_order"], + bundles["inbound_order"], + ) + + bundles = bundles.apply(lambda row: create_bundle_attributes(row), axis=1) + + # getting chauffer mandatory times + mandatory_escort_tours = tours[ + (tours.tour_category == "mandatory") & (tours.tour_num == 1) + ] + bundles["first_mand_tour_start_time"] = reindex( + mandatory_escort_tours.set_index("person_id").start, bundles["chauf_id"] + ) + bundles["first_mand_tour_end_time"] = reindex( + mandatory_escort_tours.set_index("person_id").end, bundles["chauf_id"] + ) + bundles["first_mand_tour_id"] = reindex( + mandatory_escort_tours.reset_index().set_index("person_id").tour_id, + bundles["chauf_id"], + ) + bundles["first_mand_tour_dest"] = reindex( + mandatory_escort_tours.reset_index().set_index("person_id").destination, + bundles["chauf_id"], + ) + bundles["first_mand_tour_purpose"] = reindex( + mandatory_escort_tours.reset_index().set_index("person_id").tour_type, + bundles["chauf_id"], + ) + + bundles["Alt"] = choosers["Alt"] + bundles["Description"] = choosers["Description"] + + return bundles + + +@inject.step() +def school_escorting( + households, households_merged, persons, tours, chunk_size, trace_hh_id +): + """ + school escorting model + + The school escorting model determines whether children are dropped-off at or + picked-up from school, simultaneously with the driver responsible for + chauffeuring the children, which children are bundled together on half-tours, + and the type of tour (pure escort versus rideshare). + + Run iteratively for an outbound choice, an inbound choice, and an outbound choice + conditional on the inbound choice. The choices for inbound and outbound conditional + are used to create school escort tours and trips. + + Updates / adds the following tables to the pipeline: + + :: + + - households with school escorting choice + - tours including pure school escorting + - school_escort_tours which contains only pure school escort tours + - school_escort_trips + - timetable to avoid joint tours scheduled over school escort tours + + """ + trace_label = "school_escorting_simulate" + model_settings_file_name = "school_escorting.yaml" + model_settings = config.read_model_settings(model_settings_file_name) + + persons = persons.to_frame() + households = households.to_frame() + households_merged = households_merged.to_frame() + tours = tours.to_frame() + + alts = simulate.read_model_alts(model_settings["ALTS"], set_index="Alt") + + households_merged, participant_columns = determine_escorting_paricipants( + households_merged, persons, model_settings + ) + + constants = config.get_model_constants(model_settings) + locals_dict = {} + locals_dict.update(constants) + + school_escorting_stages = ["outbound", "inbound", "outbound_cond"] + escort_bundles = [] + for stage_num, stage in enumerate(school_escorting_stages): + stage_trace_label = trace_label + "_" + stage + estimator = estimation.manager.begin_estimation("school_escorting_" + stage) + + model_spec_raw = simulate.read_model_spec( + file_name=model_settings[stage.upper() + "_SPEC"] + ) + coefficients_df = simulate.read_model_coefficients( + file_name=model_settings[stage.upper() + "_COEFFICIENTS"] + ) + model_spec = simulate.eval_coefficients( + model_spec_raw, coefficients_df, estimator + ) + + # reduce memory by limiting columns if selected columns are supplied + chooser_columns = model_settings.get("SIMULATE_CHOOSER_COLUMNS", None) + if chooser_columns is not None: + chooser_columns = chooser_columns + participant_columns + choosers = households_merged[chooser_columns] + else: + choosers = households_merged + + # add previous data to stage + if stage_num >= 1: + choosers = add_prev_choices_to_choosers( + choosers, choices, alts, school_escorting_stages[stage_num - 1] + ) + + locals_dict.update(coefficients_df) + + logger.info("Running %s with %d households", stage_trace_label, len(choosers)) + + preprocessor_settings = model_settings.get("preprocessor_" + stage, None) + if preprocessor_settings: + expressions.assign_columns( + df=choosers, + model_settings=preprocessor_settings, + locals_dict=locals_dict, + trace_label=stage_trace_label, + ) + + if estimator: + estimator.write_model_settings(model_settings, model_settings_file_name) + estimator.write_spec(model_settings) + estimator.write_coefficients(coefficients_df, model_settings) + estimator.write_choosers(choosers) + + log_alt_losers = config.setting("log_alt_losers", False) + + choices = interaction_simulate( + choosers=choosers, + alternatives=alts, + spec=model_spec, + log_alt_losers=log_alt_losers, + locals_d=locals_dict, + chunk_size=chunk_size, + trace_label=stage_trace_label, + trace_choice_name="school_escorting_" + "stage", + estimator=estimator, + ) + + if estimator: + estimator.write_choices(choices) + choices = estimator.get_survey_values( + choices, "households", "school_escorting_" + stage + ) + estimator.write_override_choices(choices) + estimator.end_estimation() + + # no need to reindex as we used all households + escorting_choice = "school_escorting_" + stage + households[escorting_choice] = choices + + # tracing each step -- outbound, inbound, outbound_cond + tracing.print_summary( + escorting_choice, households[escorting_choice], value_counts=True + ) + + if trace_hh_id: + tracing.trace_df(households, label=escorting_choice, warn_if_empty=True) + + if stage_num >= 1: + choosers["Alt"] = choices + choosers = choosers.join(alts, how="left", on="Alt") + bundles = create_school_escorting_bundles_table( + choosers[choosers["Alt"] > 1], tours, stage + ) + escort_bundles.append(bundles) + + escort_bundles = pd.concat(escort_bundles) + escort_bundles["bundle_id"] = ( + escort_bundles["household_id"] * 10 + + escort_bundles.groupby("household_id").cumcount() + + 1 + ) + escort_bundles.sort_values( + by=["household_id", "school_escort_direction"], + ascending=[True, False], + inplace=True, + ) + + school_escort_tours = school_escort_tours_trips.create_pure_school_escort_tours( + escort_bundles + ) + chauf_tour_id_map = { + v: k for k, v in school_escort_tours["bundle_id"].to_dict().items() + } + escort_bundles["chauf_tour_id"] = np.where( + escort_bundles["escort_type"] == "ride_share", + escort_bundles["first_mand_tour_id"], + escort_bundles["bundle_id"].map(chauf_tour_id_map), + ) + + tours = school_escort_tours_trips.add_pure_escort_tours(tours, school_escort_tours) + tours = school_escort_tours_trips.process_tours_after_escorting_model( + escort_bundles, tours + ) + + school_escort_trips = school_escort_tours_trips.create_school_escort_trips( + escort_bundles + ) + + # update pipeline + pipeline.replace_table("households", households) + pipeline.replace_table("tours", tours) + pipeline.get_rn_generator().drop_channel("tours") + pipeline.get_rn_generator().add_channel("tours", tours) + # pipeline.replace_table("escort_bundles", escort_bundles) + # save school escorting tours and trips in pipeline so we can overwrite results from downstream models + pipeline.replace_table("school_escort_tours", school_escort_tours) + pipeline.replace_table("school_escort_trips", school_escort_trips) + + # updating timetable object with pure escort tours so joint tours do not schedule ontop + timetable = inject.get_injectable("timetable") + + # Need to do this such that only one person is in nth_tours + # thus, looping through tour_category and tour_num + # including mandatory tours because their start / end times may have + # changed to match the school escort times + for tour_category in tours.tour_category.unique(): + for tour_num, nth_tours in tours[tours.tour_category == tour_category].groupby( + "tour_num", sort=True + ): + timetable.assign( + window_row_ids=nth_tours["person_id"], tdds=nth_tours["tdd"] + ) + + timetable.replace_table() diff --git a/activitysim/abm/models/stop_frequency.py b/activitysim/abm/models/stop_frequency.py index dd52c0b7a..94a208075 100644 --- a/activitysim/abm/models/stop_frequency.py +++ b/activitysim/abm/models/stop_frequency.py @@ -4,6 +4,7 @@ import numpy as np import pandas as pd +from activitysim.abm.models.util import school_escort_tours_trips from activitysim.core import config, expressions, inject, pipeline, simulate, tracing from activitysim.core.util import assign_in_place, reindex @@ -234,3 +235,6 @@ def stop_frequency( slicer="person_id", columns=None, ) + + if pipeline.is_table("school_escort_trips"): + school_escort_tours_trips.merge_school_escort_trips_into_pipeline() diff --git a/activitysim/abm/models/trip_destination.py b/activitysim/abm/models/trip_destination.py index 133e5c5b0..7138d37c7 100644 --- a/activitysim/abm/models/trip_destination.py +++ b/activitysim/abm/models/trip_destination.py @@ -29,6 +29,7 @@ from activitysim.core.tracing import print_elapsed_time from activitysim.core.util import assign_in_place, reindex +from .util.school_escort_tours_trips import split_out_school_escorting_trips from .util import estimation logger = logging.getLogger(__name__) @@ -1284,6 +1285,13 @@ def trip_destination(trips, tours_merged, chunk_size, trace_hh_id): trips_df = trips.to_frame() tours_merged_df = tours_merged.to_frame() + if pipeline.is_table("school_escort_trips"): + school_escort_trips = pipeline.get_table("school_escort_trips") + # separate out school escorting trips to exclude them from the model and estimation data bundle + trips_df, se_trips_df, full_trips_index = split_out_school_escorting_trips( + trips_df, school_escort_trips + ) + estimator = estimation.manager.begin_estimation("trip_destination") if estimator: @@ -1356,6 +1364,23 @@ def trip_destination(trips, tours_merged, chunk_size, trace_hh_id): trips_df.drop(columns="failed", inplace=True, errors="ignore") + if pipeline.is_table("school_escort_trips"): + # setting destination for school escort trips + se_trips_df["destination"] = reindex( + school_escort_trips.destination, se_trips_df.index + ) + # merge trips back together preserving index order + trips_df = pd.concat([trips_df, se_trips_df]) + trips_df["destination"] = trips_df["destination"].astype(int) + trips_df = trips_df.reindex(full_trips_index) + # Origin is previous destination + # (leaving first origin alone as it's already set correctly) + trips_df["origin"] = np.where( + (trips_df["trip_num"] == 1) & (trips_df["outbound"] == True), + trips_df["origin"], + trips_df.groupby("tour_id")["destination"].shift(), + ).astype(int) + pipeline.replace_table("trips", trips_df) if trace_hh_id: diff --git a/activitysim/abm/models/trip_purpose.py b/activitysim/abm/models/trip_purpose.py index fe3103135..b62c79ffb 100644 --- a/activitysim/abm/models/trip_purpose.py +++ b/activitysim/abm/models/trip_purpose.py @@ -1,6 +1,7 @@ # ActivitySim # See full license in LICENSE.txt. import logging +from operator import index import numpy as np import pandas as pd @@ -17,6 +18,8 @@ ) from .util import estimation +from activitysim.core.util import reindex +from .util.school_escort_tours_trips import split_out_school_escorting_trips logger = logging.getLogger(__name__) @@ -71,9 +74,7 @@ def choose_intermediate_trip_purpose( # probs should sum to 1 across rows sum_probs = probs_spec[purpose_cols].sum(axis=1) - probs_spec.loc[:, purpose_cols] = probs_spec.loc[:, purpose_cols].div( - sum_probs, axis=0 - ) + probs_spec[purpose_cols] = probs_spec[purpose_cols].div(sum_probs, axis=0) # left join trips to probs (there may be multiple rows per trip for multiple depart ranges) choosers = pd.merge( @@ -265,6 +266,13 @@ def trip_purpose(trips, chunk_size, trace_hh_id): trips_df = trips.to_frame() + if pipeline.is_table("school_escort_trips"): + school_escort_trips = pipeline.get_table("school_escort_trips") + # separate out school escorting trips to exclude them from the model and estimation data bundle + trips_df, se_trips_df, full_trips_index = split_out_school_escorting_trips( + trips_df, school_escort_trips + ) + estimator = estimation.manager.begin_estimation("trip_purpose") if estimator: chooser_cols_for_estimation = [ @@ -293,6 +301,13 @@ def trip_purpose(trips, chunk_size, trace_hh_id): trips_df["purpose"] = choices + if pipeline.is_table("school_escort_trips"): + # setting purpose for school escort trips + se_trips_df["purpose"] = reindex(school_escort_trips.purpose, se_trips_df.index) + # merge trips back together preserving index order + trips_df = pd.concat([trips_df, se_trips_df]) + trips_df = trips_df.reindex(full_trips_index) + # we should have assigned a purpose to all trips assert not trips_df.purpose.isnull().any() diff --git a/activitysim/abm/models/trip_scheduling.py b/activitysim/abm/models/trip_scheduling.py index a594f5e0b..f8345650d 100644 --- a/activitysim/abm/models/trip_scheduling.py +++ b/activitysim/abm/models/trip_scheduling.py @@ -11,6 +11,7 @@ from activitysim.core import chunk, config, inject, logit, 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 logger = logging.getLogger(__name__) @@ -405,6 +406,14 @@ def trip_scheduling(trips, tours, chunk_size, trace_hh_id): trips_df = trips.to_frame() tours = tours.to_frame() + if pipeline.is_table("school_escort_trips"): + school_escort_trips = pipeline.get_table("school_escort_trips") + # separate out school escorting trips to exclude them from the model and estimation data bundle + trips_df, se_trips_df, full_trips_index = split_out_school_escorting_trips( + trips_df, school_escort_trips + ) + non_se_trips_df = trips_df + # add columns 'tour_hour', 'earliest', 'latest' to trips set_tour_hour(trips_df, tours) @@ -500,6 +509,13 @@ def trip_scheduling(trips, tours, chunk_size, trace_hh_id): trips_df = trips.to_frame() + if pipeline.is_table("school_escort_trips"): + # separate out school escorting trips to exclude them from the model and estimation data bundle + trips_df, se_trips_df, full_trips_index = split_out_school_escorting_trips( + trips_df, school_escort_trips + ) + non_se_trips_df = trips_df + choices = pd.concat(choices_list) choices = choices.reindex(trips_df.index) @@ -530,6 +546,20 @@ def trip_scheduling(trips, tours, chunk_size, trace_hh_id): trips_df["depart"] = choices + if pipeline.is_table("school_escort_trips"): + # setting destination for school escort trips + se_trips_df["depart"] = reindex(school_escort_trips.depart, se_trips_df.index) + non_se_trips_df["depart"] = reindex(trips_df.depart, non_se_trips_df.index) + # merge trips back together + full_trips_df = pd.concat([non_se_trips_df, se_trips_df]) + full_trips_df["depart"] = full_trips_df["depart"].astype(int) + # want to preserve the original order, but first need to remove trips that were dropped + new_full_trips_index = full_trips_index[ + full_trips_index.isin(trips_df.index) + | full_trips_index.isin(se_trips_df.index) + ] + trips_df = full_trips_df.reindex(new_full_trips_index) + assert not trips_df.depart.isnull().any() pipeline.replace_table("trips", trips_df) diff --git a/activitysim/abm/models/util/annotate.py b/activitysim/abm/models/util/annotate.py new file mode 100644 index 000000000..67ee45039 --- /dev/null +++ b/activitysim/abm/models/util/annotate.py @@ -0,0 +1,52 @@ +# ActivitySim +# See full license in LICENSE.txt. +import pandas as pd +import logging + +from activitysim.core import config +from activitysim.core import expressions +from activitysim.core import tracing +from activitysim.core import inject +from activitysim.core import pipeline + +""" +Code for annotating tables +""" + +logger = logging.getLogger(__name__) + + +def annotate_tours(model_settings, trace_label): + """ + Add columns to the tours table in the pipeline according to spec. + + Parameters + ---------- + model_settings : dict + trace_label : str + """ + tours = inject.get_table("tours").to_frame() + expressions.assign_columns( + df=tours, + model_settings=model_settings.get("annotate_tours"), + trace_label=tracing.extend_trace_label(trace_label, "annotate_tours"), + ) + pipeline.replace_table("tours", tours) + + +def annotate_trips(model_settings, trace_label): + """ + Add columns to the trips table in the pipeline according to spec. + + Parameters + ---------- + model_settings : dict + trace_label : str + """ + tours = inject.get_table("trips").to_frame() + expressions.assign_columns( + df=trips, + model_settings=model_settings.get("annotate_trips"), + trace_label=tracing.extend_trace_label(trace_label, "annotate_trips"), + ) + pipeline.replace_table("trips", trips) diff --git a/activitysim/abm/models/util/canonical_ids.py b/activitysim/abm/models/util/canonical_ids.py index 0720340fc..f1afa1a06 100644 --- a/activitysim/abm/models/util/canonical_ids.py +++ b/activitysim/abm/models/util/canonical_ids.py @@ -4,8 +4,12 @@ import numpy as np import pandas as pd +import re from activitysim.core.util import reindex +from activitysim.core import config +from activitysim.core import pipeline +from activitysim.core import simulate logger = logging.getLogger(__name__) @@ -54,6 +58,328 @@ def enumerate_tour_types(tour_flavors): return channels +def read_alts_file(file_name, set_index=None): + try: + alts = simulate.read_model_alts(file_name, set_index=set_index) + except RuntimeError: + logger.warning(f"Could not find file {file_name} to determine tour flavors.") + return pd.DataFrame() + return alts + + +def read_spec_file(file_name, set_index=None): + try: + alts = simulate.read_model_alts(file_name, set_index=set_index) + except RuntimeError: + logger.warning(f"Could not find file {file_name} to determine tour flavors.") + return pd.DataFrame() + return alts + + +def parse_tour_flavor_from_columns(columns, tour_flavor): + """ + determines the max number from columns if column name contains tour flavor + example: columns={'work1', 'work2'} -> 2 + + Parameters + ---------- + columns : list of str + tour_flavor : str + string subset that you want to find in columns + + Returns + ------- + int + max int found in columns with tour_flavor + """ + # below produces a list of numbers present in each column containing the tour flavor string + tour_numbers = [(re.findall(r"\d+", col)) for col in columns if tour_flavor in col] + + # flatten list + tour_numbers = [int(item) for sublist in tour_numbers for item in sublist] + + # find max + try: + max_tour_flavor = max(tour_numbers) + return max_tour_flavor + except ValueError: + # could not find a maximum integer for this flavor in the columns + return -1 + + +def determine_mandatory_tour_flavors(mtf_settings, model_spec, default_flavors): + provided_flavors = mtf_settings.get("MANDATORY_TOUR_FLAVORS", None) + + mandatory_tour_flavors = { + # hard code work and school tours + "work": parse_tour_flavor_from_columns(model_spec.columns, "work"), + "school": parse_tour_flavor_from_columns(model_spec.columns, "school"), + } + + valid_flavors = (mandatory_tour_flavors["work"] >= 1) & ( + mandatory_tour_flavors["school"] >= 1 + ) + + if provided_flavors is not None: + if mandatory_tour_flavors != provided_flavors: + logger.warning( + "Specified tour flavors do not match alternative file flavors" + ) + logger.warning( + f"{provided_flavors} does not equal {mandatory_tour_flavors}" + ) + # use provided flavors if provided + return provided_flavors + + if not valid_flavors: + # if flavors could not be parsed correctly and no flavors provided, return the default + logger.warning( + "Could not determine alts from alt file and no flavors were provided." + ) + logger.warning(f"Using defaults: {default_flavors}") + return default_flavors + + return mandatory_tour_flavors + + +def determine_non_mandatory_tour_max_extension( + model_settings, extension_probs, default_max_extension=2 +): + provided_max_extension = model_settings.get("MAX_EXTENSION", None) + + max_extension = parse_tour_flavor_from_columns(extension_probs.columns, "tour") + + if provided_max_extension is not None: + if provided_max_extension != max_extension: + logger.warning( + "Specified non mandatory tour extension does not match extension probabilities file" + ) + return provided_max_extension + + if (max_extension >= 0) & isinstance(max_extension, int): + return max_extension + + return default_max_extension + + +def determine_flavors_from_alts_file( + alts, provided_flavors, default_flavors, max_extension=0 +): + """ + determines the max number from alts for each column containing numbers + example: alts={'index': ['alt1', 'alt2'], 'escort': [1, 2], 'othdisc': [3, 4]} + yelds -> {'escort': 2, 'othdisc': 4} + + will return provided flavors if available + else, return default flavors if alts can't be groked + + Parameters + ---------- + alts : pd.DataFrame + provided_flavors : dict + tour flavors provided by user in the model yaml + default_flavors : dict + default tour flavors to fall back on + max_extension : int + scale to increase number of tours accross all alternatives + + Returns + ------- + dict + tour flavors + """ + try: + flavors = { + c: int(alts[c].max() + max_extension) + for c in alts.columns + if all(alts[c].astype(str).str.isnumeric()) + } + valid_flavors = all( + [(isinstance(flavor, str) & (num >= 0)) for flavor, num in flavors.items()] + ) & (len(flavors) > 0) + except (ValueError, AttributeError): + valid_flavors = False + + if provided_flavors is not None: + if flavors != provided_flavors: + logger.warning( + f"Specified tour flavors {provided_flavors} do not match alternative file flavors {flavors}" + ) + # use provided flavors if provided + return provided_flavors + + if not valid_flavors: + # if flavors could not be parsed correctly and no flavors provided, return the default + logger.warning( + "Could not determine alts from alt file and no flavors were provided." + ) + logger.warning(f"Using defaults: {default_flavors}") + return default_flavors + + return flavors + + +def read_alts_file(file_name, set_index=None): + try: + alts = simulate.read_model_alts(file_name, set_index=set_index) + except RuntimeError: + logger.warning(f"Could not find file {file_name} to determine tour flavors.") + return pd.DataFrame() + return alts + + +def read_spec_file(file_name, set_index=None): + try: + alts = simulate.read_model_alts(file_name, set_index=set_index) + except RuntimeError: + logger.warning(f"Could not find file {file_name} to determine tour flavors.") + return pd.DataFrame() + return alts + + +def parse_tour_flavor_from_columns(columns, tour_flavor): + """ + determines the max number from columns if column name contains tour flavor + example: columns={'work1', 'work2'} -> 2 + + Parameters + ---------- + columns : list of str + tour_flavor : str + string subset that you want to find in columns + + Returns + ------- + int + max int found in columns with tour_flavor + """ + # below produces a list of numbers present in each column containing the tour flavor string + tour_numbers = [(re.findall(r"\d+", col)) for col in columns if tour_flavor in col] + + # flatten list + tour_numbers = [int(item) for sublist in tour_numbers for item in sublist] + + # find max + try: + max_tour_flavor = max(tour_numbers) + return max_tour_flavor + except ValueError: + # could not find a maximum integer for this flavor in the columns + return -1 + + +def determine_mandatory_tour_flavors(mtf_settings, model_spec, default_flavors): + provided_flavors = mtf_settings.get("MANDATORY_TOUR_FLAVORS", None) + + mandatory_tour_flavors = { + # hard code work and school tours + "work": parse_tour_flavor_from_columns(model_spec.columns, "work"), + "school": parse_tour_flavor_from_columns(model_spec.columns, "school"), + } + + valid_flavors = (mandatory_tour_flavors["work"] >= 1) & ( + mandatory_tour_flavors["school"] >= 1 + ) + + if provided_flavors is not None: + if mandatory_tour_flavors != provided_flavors: + logger.warning( + "Specified tour flavors do not match alternative file flavors" + ) + logger.warning( + f"{provided_flavors} does not equal {mandatory_tour_flavors}" + ) + # use provided flavors if provided + return provided_flavors + + if not valid_flavors: + # if flavors could not be parsed correctly and no flavors provided, return the default + logger.warning( + "Could not determine alts from alt file and no flavors were provided." + ) + logger.warning(f"Using defaults: {default_flavors}") + return default_flavors + + return mandatory_tour_flavors + + +def determine_non_mandatory_tour_max_extension( + model_settings, extension_probs, default_max_extension=2 +): + provided_max_extension = model_settings.get("MAX_EXTENSION", None) + + max_extension = parse_tour_flavor_from_columns(extension_probs.columns, "tour") + + if provided_max_extension is not None: + if provided_max_extension != max_extension: + logger.warning( + "Specified non mandatory tour extension does not match extension probabilities file" + ) + return provided_max_extension + + if (max_extension >= 0) & isinstance(max_extension, int): + return max_extension + + return default_max_extension + + +def determine_flavors_from_alts_file( + alts, provided_flavors, default_flavors, max_extension=0 +): + """ + determines the max number from alts for each column containing numbers + example: alts={'index': ['alt1', 'alt2'], 'escort': [1, 2], 'othdisc': [3, 4]} + yelds -> {'escort': 2, 'othdisc': 4} + + will return provided flavors if available + else, return default flavors if alts can't be groked + + Parameters + ---------- + alts : pd.DataFrame + provided_flavors : dict + tour flavors provided by user in the model yaml + default_flavors : dict + default tour flavors to fall back on + max_extension : int + scale to increase number of tours accross all alternatives + + Returns + ------- + dict + tour flavors + """ + try: + flavors = { + c: int(alts[c].max() + max_extension) + for c in alts.columns + if all(alts[c].astype(str).str.isnumeric()) + } + valid_flavors = all( + [(isinstance(flavor, str) & (num >= 0)) for flavor, num in flavors.items()] + ) & (len(flavors) > 0) + except (ValueError, AttributeError): + valid_flavors = False + + if provided_flavors is not None: + if flavors != provided_flavors: + logger.warning( + f"Specified tour flavors {provided_flavors} do not match alternative file flavors {flavors}" + ) + # use provided flavors if provided + return provided_flavors + + if not valid_flavors: + # if flavors could not be parsed correctly and no flavors provided, return the default + logger.warning( + "Could not determine alts from alt file and no flavors were provided." + ) + logger.warning(f"Using defaults: {default_flavors}") + return default_flavors + + return flavors + + def canonical_tours(): """ create labels for every the possible tour by combining tour_type/tour_num. @@ -63,32 +389,74 @@ def canonical_tours(): list of canonical tour labels in alphabetical order """ - # FIXME we pathalogically know what the possible tour_types and their max tour_nums are - # FIXME instead, should get flavors from alts tables (but we would have to know their names...) - # alts = pipeline.get_table('non_mandatory_tour_frequency_alts') - # non_mandatory_tour_flavors = {c : alts[c].max() for c in alts.columns} - - # - non_mandatory_channels - MAX_EXTENSION = 2 - non_mandatory_tour_flavors = { - "escort": 2 + MAX_EXTENSION, - "shopping": 1 + MAX_EXTENSION, - "othmaint": 1 + MAX_EXTENSION, - "othdiscr": 1 + MAX_EXTENSION, - "eatout": 1 + MAX_EXTENSION, - "social": 1 + MAX_EXTENSION, + # ---- non_mandatory_channels + nm_model_settings_file_name = "non_mandatory_tour_frequency.yaml" + nm_model_settings = config.read_model_settings(nm_model_settings_file_name) + nm_alts = read_alts_file("non_mandatory_tour_frequency_alternatives.csv") + + # first need to determine max extension + try: + ext_probs_f = config.config_file_path( + "non_mandatory_tour_frequency_extension_probs.csv" + ) + extension_probs = pd.read_csv(ext_probs_f, comment="#") + except RuntimeError: + logger.warning( + f"non_mandatory_tour_frequency_extension_probs.csv file not found" + ) + extension_probs = pd.DataFrame() + max_extension = determine_non_mandatory_tour_max_extension( + nm_model_settings, extension_probs, default_max_extension=2 + ) + + provided_nm_tour_flavors = nm_model_settings.get("NON_MANDATORY_TOUR_FLAVORS", None) + default_nm_tour_flavors = { + "escort": 2 + max_extension, + "shopping": 1 + max_extension, + "othmaint": 1 + max_extension, + "othdiscr": 1 + max_extension, + "eatout": 1 + max_extension, + "social": 1 + max_extension, } + + non_mandatory_tour_flavors = determine_flavors_from_alts_file( + nm_alts, provided_nm_tour_flavors, default_nm_tour_flavors, max_extension + ) non_mandatory_channels = enumerate_tour_types(non_mandatory_tour_flavors) - # - mandatory_channels - mandatory_tour_flavors = {"work": 2, "school": 2} + logger.info(f"Non-Mandatory tour flavors used are {non_mandatory_tour_flavors}") + + # ---- mandatory_channels + mtf_model_settings_file_name = "mandatory_tour_frequency.yaml" + mtf_model_settings = config.read_model_settings(mtf_model_settings_file_name) + mtf_spec = mtf_model_settings.get("SPEC", "mandatory_tour_frequency.csv") + mtf_model_spec = read_spec_file(file_name=mtf_spec) + default_mandatory_tour_flavors = {"work": 2, "school": 2} + + mandatory_tour_flavors = determine_mandatory_tour_flavors( + mtf_model_settings, mtf_model_spec, default_mandatory_tour_flavors + ) mandatory_channels = enumerate_tour_types(mandatory_tour_flavors) - # - atwork_subtour_channels + logger.info(f"Mandatory tour flavors used are {mandatory_tour_flavors}") + + # ---- atwork_subtour_channels + atwork_model_settings_file_name = "atwork_subtour_frequency.yaml" + atwork_model_settings = config.read_model_settings(atwork_model_settings_file_name) + atwork_alts = read_alts_file("atwork_subtour_frequency_alternatives.csv") + + provided_atwork_flavors = atwork_model_settings.get("ATWORK_SUBTOUR_FLAVORS", None) + default_atwork_flavors = {"eat": 1, "business": 2, "maint": 1} + + atwork_subtour_flavors = determine_flavors_from_alts_file( + atwork_alts, provided_atwork_flavors, default_atwork_flavors + ) + atwork_subtour_channels = enumerate_tour_types(atwork_subtour_flavors) + + logger.info(f"Atwork subtour flavors used are {atwork_subtour_flavors}") + # we need to distinguish between subtours of different work tours # (e.g. eat1_1 is eat subtour for parent work tour 1 and eat1_2 is for work tour 2) - atwork_subtour_flavors = {"eat": 1, "business": 2, "maint": 1} - atwork_subtour_channels = enumerate_tour_types(atwork_subtour_flavors) max_work_tours = mandatory_tour_flavors["work"] atwork_subtour_channels = [ "%s_%s" % (c, i + 1) @@ -96,14 +464,24 @@ def canonical_tours(): for i in range(max_work_tours) ] - # - joint_tour_channels - joint_tour_flavors = { + # ---- joint_tour_channels + jtf_model_settings_file_name = "joint_tour_frequency.yaml" + jtf_model_settings = config.read_model_settings(jtf_model_settings_file_name) + jtf_alts = read_alts_file("joint_tour_frequency_alternatives.csv") + provided_joint_flavors = jtf_model_settings.get("JOINT_TOUR_FLAVORS", None) + + default_joint_flavors = { "shopping": 2, "othmaint": 2, "othdiscr": 2, "eatout": 2, "social": 2, } + joint_tour_flavors = determine_flavors_from_alts_file( + jtf_alts, provided_joint_flavors, default_joint_flavors + ) + logger.info(f"Joint tour flavors used are {joint_tour_flavors}") + joint_tour_channels = enumerate_tour_types(joint_tour_flavors) joint_tour_channels = ["j_%s" % c for c in joint_tour_channels] @@ -114,12 +492,29 @@ def canonical_tours(): + joint_tour_channels ) + # ---- school escort channels + # only include if model is run + if pipeline.is_table("school_escort_tours") | ( + "school_escorting" in config.setting("models", default=[]) + ): + se_model_settings_file_name = "school_escorting.yaml" + se_model_settings = config.read_model_settings(se_model_settings_file_name) + num_escortees = se_model_settings.get("NUM_ESCORTEES", 3) + school_escort_flavors = {"escort": 2 * num_escortees} + school_escort_channels = enumerate_tour_types(school_escort_flavors) + school_escort_channels = ["se_%s" % c for c in school_escort_channels] + logger.info(f"School escort tour flavors used are {school_escort_flavors}") + + sub_channels = sub_channels + school_escort_channels + sub_channels.sort() return sub_channels -def set_tour_index(tours, parent_tour_num_col=None, is_joint=False): +def set_tour_index( + tours, parent_tour_num_col=None, is_joint=False, is_school_escorting=False +): """ The new index values are stable based on the person_id, tour_type, and tour_num. The existing index is ignored and replaced. @@ -161,6 +556,9 @@ def set_tour_index(tours, parent_tour_num_col=None, is_joint=False): if is_joint: tours["tour_id"] = "j_" + tours["tour_id"] + if is_school_escorting: + tours["tour_id"] = "se_" + tours["tour_id"] + # map recognized strings to ints tours.tour_id = tours.tour_id.replace( to_replace=possible_tours, value=list(range(possible_tours_count)) @@ -171,9 +569,16 @@ def set_tour_index(tours, parent_tour_num_col=None, is_joint=False): tours.tour_id = (tours.person_id * possible_tours_count) + tours.tour_id - # if tours.tour_id.duplicated().any(): - # print("\ntours.tour_id not unique\n%s" % tours[tours.tour_id.duplicated(keep=False)]) - # print(tours[tours.tour_id.duplicated(keep=False)][['survey_tour_id', 'tour_type', 'tour_category']]) + if tours.tour_id.duplicated().any(): + print( + "\ntours.tour_id not unique\n%s" + % tours[tours.tour_id.duplicated(keep=False)] + ) + print( + tours[tours.tour_id.duplicated(keep=False)][ + ["survey_tour_id", "tour_type", "tour_category"] + ] + ) assert not tours.tour_id.duplicated().any() tours.set_index("tour_id", inplace=True, verify_integrity=True) @@ -182,14 +587,50 @@ def set_tour_index(tours, parent_tour_num_col=None, is_joint=False): return tours -def set_trip_index(trips, tour_id_column="tour_id"): +def determine_max_trips_per_leg(default_max_trips_per_leg=4): + model_settings_file_name = "stop_frequency.yaml" + model_settings = config.read_model_settings(model_settings_file_name) + + # first see if flavors given explicitly + provided_max_trips_per_leg = model_settings.get("MAX_TRIPS_PER_LEG", None) - MAX_TRIPS_PER_LEG = 4 # max number of trips per leg (inbound or outbound) of tour + # determine flavors from alternative file + try: + alts = read_alts_file("stop_frequency_alternatives.csv") + trips_per_leg = [ + int(alts[c].max()) + for c in alts.columns + if all(alts[c].astype(str).str.isnumeric()) + ] + # adding one for additional trip home or to primary dest + max_trips_per_leg = max(trips_per_leg) + 1 + if max_trips_per_leg > 1: + valid_max_trips = True + except (ValueError, RuntimeError): + valid_max_trips = False + + if provided_max_trips_per_leg is not None: + if provided_max_trips_per_leg != max_trips_per_leg: + logger.warning( + "Provided max number of stops on tour does not match with stop frequency alternatives file" + ) + return provided_max_trips_per_leg + + if valid_max_trips: + return max_trips_per_leg + + return default_max_trips_per_leg + + +def set_trip_index(trips, tour_id_column="tour_id"): + # max number of trips per leg (inbound or outbound) of tour + # = stops + 1 for primary half-tour destination + max_trips_per_leg = determine_max_trips_per_leg() # canonical_trip_num: 1st trip out = 1, 2nd trip out = 2, 1st in = 5, etc. - canonical_trip_num = (~trips.outbound * MAX_TRIPS_PER_LEG) + trips.trip_num + canonical_trip_num = (~trips.outbound * max_trips_per_leg) + trips.trip_num trips["trip_id"] = ( - trips[tour_id_column] * (2 * MAX_TRIPS_PER_LEG) + canonical_trip_num + trips[tour_id_column] * (2 * max_trips_per_leg) + canonical_trip_num ) trips.set_index("trip_id", inplace=True, verify_integrity=True) diff --git a/activitysim/abm/models/util/school_escort_tours_trips.py b/activitysim/abm/models/util/school_escort_tours_trips.py new file mode 100644 index 000000000..ec20cdc35 --- /dev/null +++ b/activitysim/abm/models/util/school_escort_tours_trips.py @@ -0,0 +1,596 @@ +import logging +import pandas as pd +import numpy as np +import warnings + +from activitysim.abm.models.util import canonical_ids +from activitysim.core import pipeline +from activitysim.core import inject + +from ..school_escorting import NUM_ESCORTEES + +logger = logging.getLogger(__name__) + + +def determine_chauf_outbound_flag(row, i): + if row["school_escort_direction"] == "outbound": + outbound = True + elif ( + (row["school_escort_direction"] == "inbound") + & (i == 0) + & (row["escort_type"] == "pure_escort") + ): + # chauf is going to pick up the first child + outbound = True + else: + # chauf is inbound and has already picked up a child or taken their mandatory tour + outbound = False + return outbound + + +def create_chauf_trip_table(row): + dropoff = True if row["school_escort_direction"] == "outbound" else False + + row["person_id"] = row["chauf_id"] + row["destination"] = row["school_destinations"].split("_") + + participants = [] + school_escort_trip_num = [] + outbound = [] + purposes = [] + + for i, child_id in enumerate(row["escortees"].split("_")): + if dropoff: + # have the remaining children in car + participants.append("_".join(row["escortees"].split("_")[i:])) + else: + # remaining children not yet in car + participants.append("_".join(row["escortees"].split("_")[: i + 1])) + school_escort_trip_num.append(i + 1) + outbound.append(determine_chauf_outbound_flag(row, i)) + purposes.append("escort") + + if not dropoff: + # adding trip home + outbound.append(False) + school_escort_trip_num.append(i + 2) + purposes.append("home") + row["destination"].append(row["home_zone_id"]) + # kids aren't in car until after they are picked up, inserting empty car for first trip + participants = [""] + participants + + if dropoff & (row["escort_type"] == "ride_share"): + # adding trip to work + outbound.append(True) + school_escort_trip_num.append(i + 2) + purposes.append(row["first_mand_tour_purpose"]) + row["destination"].append(row["first_mand_tour_dest"]) + # kids have already been dropped off + participants = participants + [""] + + row["escort_participants"] = participants + row["school_escort_trip_num"] = school_escort_trip_num + row["outbound"] = outbound + row["purpose"] = purposes + return row + + +def create_chauf_escort_trips(bundles): + + chauf_trip_bundles = bundles.apply(lambda row: create_chauf_trip_table(row), axis=1) + chauf_trip_bundles["tour_id"] = bundles["chauf_tour_id"].astype(int) + + # departure time is the first school start in the outbound school_escort_direction and the last school end in the inbound school_escort_direction + starts = ( + chauf_trip_bundles["school_starts"].str.split("_", expand=True).astype(float) + ) + ends = chauf_trip_bundles["school_ends"].str.split("_", expand=True).astype(float) + chauf_trip_bundles["depart"] = np.where( + chauf_trip_bundles["school_escort_direction"] == "outbound", + starts.min(axis=1), + ends.max(axis=1), + ) + + # create a new trip for each escortee destination + chauf_trips = chauf_trip_bundles.explode( + [ + "destination", + "escort_participants", + "school_escort_trip_num", + "outbound", + "purpose", + ] + ).reset_index() + + # numbering trips such that outbound escorting trips must come first and inbound trips must come last + outbound_trip_num = -1 * ( + chauf_trips.groupby(["tour_id", "outbound"]).cumcount(ascending=False) + 1 + ) + inbound_trip_num = 100 + chauf_trips.groupby(["tour_id", "outbound"]).cumcount( + ascending=True + ) + chauf_trips["trip_num"] = np.where( + chauf_trips.outbound == True, outbound_trip_num, inbound_trip_num + ) + + # --- determining trip origin + # origin is previous destination + chauf_trips["origin"] = chauf_trips.groupby("tour_id")["destination"].shift() + # outbound trips start at home + first_outbound_trips = (chauf_trips["outbound"] == True) & ( + chauf_trips["school_escort_trip_num"] == 1 + ) + chauf_trips.loc[first_outbound_trips, "origin"] = chauf_trips.loc[ + first_outbound_trips, "home_zone_id" + ] + # inbound school escort ride sharing trips start at work + first_rs_inb = ( + (chauf_trips["outbound"] == False) + & (chauf_trips["school_escort_trip_num"] == 1) + & (chauf_trips["escort_type"] == "ride_share") + ) + chauf_trips.loc[first_rs_inb, "origin"] = chauf_trips.loc[ + first_rs_inb, "first_mand_tour_dest" + ] + + assert all( + ~chauf_trips["origin"].isna() + ), f"Missing trip origins for {chauf_trips[chauf_trips['origin'].isna()]}" + + chauf_trips["primary_purpose"] = np.where( + chauf_trips["escort_type"] == "pure_escort", + "escort", + chauf_trips["first_mand_tour_purpose"], + ) + assert all( + ~chauf_trips["primary_purpose"].isna() + ), f"Missing tour purpose for {chauf_trips[chauf_trips['primary_purpose'].isna()]}" + + chauf_trips.loc[ + chauf_trips["purpose"] == "home", "trip_num" + ] = 999 # trips home are always last + chauf_trips.sort_values( + by=["household_id", "tour_id", "outbound", "trip_num"], + ascending=[True, True, False, True], + inplace=True, + ) + + return chauf_trips + + +def create_child_escorting_stops(row, escortee_num): + escortees = row["escortees"].split("_") + if escortee_num > (len(escortees) - 1): + # this bundle does not have this many escortees + return row + dropoff = True if row["school_escort_direction"] == "outbound" else False + + row["person_id"] = int(escortees[escortee_num]) + row["tour_id"] = row["school_tour_ids"].split("_")[escortee_num] + school_dests = row["school_destinations"].split("_") + + destinations = [] + purposes = [] + participants = [] + school_escort_trip_num = [] + + escortee_order = ( + escortees[: escortee_num + 1] if dropoff else escortees[escortee_num:] + ) + + # for i, child_id in enumerate(escortees[:escortee_num+1]): + for i, child_id in enumerate(escortee_order): + is_last_stop = i == len(escortee_order) - 1 + + if dropoff: + # dropping childen off + # children in car are the child and the children after + participants.append("_".join(escortees[i:])) + dest = school_dests[i] + purpose = "school" if row["person_id"] == int(child_id) else "escort" + + else: + # picking children up + # children in car are the child and those already picked up + participants.append("_".join(escortees[: escortee_num + i + 1])) + # going home if last stop, otherwise to next school destination + dest = ( + row["home_zone_id"] + if is_last_stop + else school_dests[escortee_num + i + 1] + ) + purpose = "home" if is_last_stop else "escort" + + # filling arrays + destinations.append(dest) + school_escort_trip_num.append(i + 1) + purposes.append(purpose) + + row["escort_participants"] = participants + row["school_escort_trip_num"] = school_escort_trip_num + row["purpose"] = purposes + row["destination"] = destinations + return row + + +def create_escortee_trips(bundles): + + escortee_trips = [] + for escortee_num in range(0, int(bundles.num_escortees.max()) + 1): + escortee_bundles = bundles.apply( + lambda row: create_child_escorting_stops(row, escortee_num), axis=1 + ) + escortee_trips.append(escortee_bundles) + + escortee_trips = pd.concat(escortee_trips) + escortee_trips = escortee_trips[~escortee_trips.person_id.isna()] + + # departure time is the first school start in the outbound direction and the last school end in the inbound direction + starts = escortee_trips["school_starts"].str.split("_", expand=True).astype(float) + ends = escortee_trips["school_ends"].str.split("_", expand=True).astype(float) + escortee_trips["outbound"] = np.where( + escortee_trips["school_escort_direction"] == "outbound", True, False + ) + escortee_trips["depart"] = np.where( + escortee_trips["school_escort_direction"] == "outbound", + starts.min(axis=1), + ends.max(axis=1), + ).astype(int) + escortee_trips["primary_purpose"] = "school" + + # create a new trip for each escortee destination + escortee_trips = escortee_trips.explode( + ["destination", "escort_participants", "school_escort_trip_num", "purpose"] + ).reset_index() + + # numbering trips such that outbound escorting trips must come first and inbound trips must come last + # this comes in handy when merging trips to others in the tour decided downstream + outbound_trip_num = -1 * ( + escortee_trips.groupby(["tour_id", "outbound"]).cumcount(ascending=False) + 1 + ) + inbound_trip_num = 100 + escortee_trips.groupby(["tour_id", "outbound"]).cumcount( + ascending=True + ) + escortee_trips["trip_num"] = np.where( + escortee_trips.outbound == True, outbound_trip_num, inbound_trip_num + ) + escortee_trips["trip_count"] = escortee_trips["trip_num"] + escortee_trips.groupby( + ["tour_id", "outbound"] + ).trip_num.transform("count") + + id_cols = ["household_id", "person_id", "tour_id"] + escortee_trips[id_cols] = escortee_trips[id_cols].astype("int64") + + escortee_trips.loc[ + escortee_trips["purpose"] == "home", "trip_num" + ] = 999 # trips home are always last + escortee_trips.sort_values( + by=["household_id", "tour_id", "outbound", "trip_num"], + ascending=[True, True, False, True], + inplace=True, + ) + escortee_trips["origin"] = escortee_trips.groupby("tour_id")["destination"].shift() + # first trips on tour start from home (except for atwork subtours, but school escorting doesn't happen on those tours) + escortee_trips["origin"] = np.where( + escortee_trips["origin"].isna(), + escortee_trips["home_zone_id"], + escortee_trips["origin"], + ) + + return escortee_trips + + +def create_school_escort_trips(escort_bundles): + chauf_trips = create_chauf_escort_trips(escort_bundles) + escortee_trips = create_escortee_trips(escort_bundles) + school_escort_trips = pd.concat([chauf_trips, escortee_trips], axis=0) + + # Can't assign a true trip id yet because they are numbered based on the number of stops in each direction. + # This isn't decided until after the stop frequency model runs. + # Creating this temporary school_escort_trip_id column to match them downstream + school_escort_trips["school_escort_trip_id"] = ( + school_escort_trips["tour_id"].astype("int64") * 10 + + school_escort_trips.groupby("tour_id")["trip_num"].cumcount() + ) + + return school_escort_trips + + +def add_pure_escort_tours(tours, school_escort_tours): + missing_cols = [ + col for col in tours.columns if col not in school_escort_tours.columns + ] + assert ( + len(missing_cols) == 0 + ), f"missing columns {missing_cols} in school_escort_tours" + if len(missing_cols) > 0: + logger.warning(f"Columns {missing_cols} are missing from school escort tours") + school_escort_tours[missing_cols] = pd.NA + + tours_to_add = school_escort_tours[~school_escort_tours.index.isin(tours.index)] + tours = pd.concat([tours, tours_to_add[tours.columns]]) + + return tours + + +def add_school_escorting_type_to_tours_table(escort_bundles, tours): + school_tour = (tours.tour_type == "school") & (tours.tour_num == 1) + + for school_escort_direction in ["outbound", "inbound"]: + for escort_type in ["ride_share", "pure_escort"]: + bundles = escort_bundles[ + (escort_bundles.school_escort_direction == school_escort_direction) + & (escort_bundles.escort_type == escort_type) + ] + # Setting for child school tours + for child_num in range(1, NUM_ESCORTEES + 1): + i = str(child_num) + filter = school_tour & tours["person_id"].isin( + bundles["bundle_child" + i] + ) + tours.loc[filter, "school_esc_" + school_escort_direction] = escort_type + + tours.loc[ + bundles.chauf_tour_id, "school_esc_" + school_escort_direction + ] = escort_type + + return tours + + +def process_tours_after_escorting_model(escort_bundles, tours): + # adding indicators to tours that include school escorting + tours = add_school_escorting_type_to_tours_table(escort_bundles, tours) + + # setting number of escortees on tour + num_escortees = escort_bundles.drop_duplicates("chauf_tour_id").set_index( + "chauf_tour_id" + )["num_escortees"] + tours.loc[num_escortees.index, "num_escortees"] = num_escortees + + # set same start / end time for tours if they are bundled together + tour_segment_id_cols = [ + "school_tour_id_child" + str(i) for i in range(1, NUM_ESCORTEES + 1) + ] + ["chauf_tour_id"] + + for id_col in tour_segment_id_cols: + out_segment_bundles = escort_bundles[ + (escort_bundles[id_col] > 1) + & (escort_bundles.school_escort_direction == "outbound") + ].set_index(id_col) + starts = ( + out_segment_bundles["school_starts"].str.split("_").str[0].astype(int) + ) # first start + tours.loc[starts.index, "start"] = starts + + inb_segment_bundles = escort_bundles[ + (escort_bundles[id_col] > 1) + & (escort_bundles.school_escort_direction == "inbound") + ].set_index(id_col) + ends = ( + inb_segment_bundles["school_ends"].str.split("_").str[-1].astype(int) + ) # last end + tours.loc[ends.index, "end"] = ends + + bad_end_times = tours["start"] > tours["end"] + tours.loc[bad_end_times, "end"] = tours.loc[bad_end_times, "start"] + + # updating tdd to match start and end times + tdd_alts = inject.get_injectable("tdd_alts") + tdd_alts["tdd"] = tdd_alts.index + tours.drop(columns="tdd", inplace=True) + + tours["tdd"] = pd.merge( + tours.reset_index(), tdd_alts, how="left", on=["start", "end"] + ).set_index("tour_id")["tdd"] + # since this is an injectable, we want to leave it how we found it + # not removing tdd created here will caues problems downstream + tdd_alts.drop(columns="tdd", inplace=True) + + assert all( + ~tours.tdd.isna() + ), f"Tours have missing tdd values: {tours[tours.tdd.isna()][['tour_type', 'start', 'end', 'tdd']]}" + + return tours + + +def merge_school_escort_trips_into_pipeline(): + school_escort_trips = pipeline.get_table("school_escort_trips") + tours = pipeline.get_table("tours") + trips = pipeline.get_table("trips") + + # want to remove stops if school escorting takes place on that half tour so we can replace them with the actual stops + out_se_tours = tours[ + tours["school_esc_outbound"].isin(["pure_escort", "ride_share"]) + ] + inb_se_tours = tours[ + tours["school_esc_inbound"].isin(["pure_escort", "ride_share"]) + ] + # removing outbound stops + trips = trips[ + ~(trips.tour_id.isin(out_se_tours.index) & (trips["outbound"] == True)) + ] + # removing inbound stops + trips = trips[ + ~(trips.tour_id.isin(inb_se_tours.index) & (trips["outbound"] == False)) + ] + + # don't want to double count the non-escort half-tour of chauffeurs doing pure escort + inb_chauf_pe_tours = tours[ + (tours["school_esc_inbound"] == "pure_escort") + & (tours.primary_purpose == "escort") + ] + out_chauf_pe_tours = tours[ + (tours["school_esc_outbound"] == "pure_escort") + & (tours.primary_purpose == "escort") + ] + school_escort_trips = school_escort_trips[ + ~( + school_escort_trips.tour_id.isin(inb_chauf_pe_tours.index) + & (school_escort_trips["outbound"] == True) + ) + ] + school_escort_trips = school_escort_trips[ + ~( + school_escort_trips.tour_id.isin(out_chauf_pe_tours.index) + & (school_escort_trips["outbound"] == False) + ) + ] + + # for better merge with trips created in stop frequency + school_escort_trips["failed"] = False + + trips = pd.concat( + [ + trips, + school_escort_trips[ + list(trips.columns) + + [ + "escort_participants", + "school_escort_direction", + "school_escort_trip_id", + ] + ], + ] + ) + # sorting by escorting order as determined when creating the school escort trips + trips.sort_values( + by=["household_id", "tour_id", "outbound", "trip_num"], + ascending=[True, True, False, True], + inplace=True, + ) + grouped = trips.groupby(["tour_id", "outbound"]) + trips["trip_num"] = trips.groupby(["tour_id", "outbound"]).cumcount() + 1 + trips["trip_count"] = trips["trip_num"] + grouped.cumcount(ascending=False) + + # ensuring data types + trips["outbound"] = trips["outbound"].astype(bool) + trips["origin"] = trips["origin"].astype(int) + trips["destination"] = trips["destination"].astype(int) + + # updating trip_id now that we have all trips + trips = canonical_ids.set_trip_index(trips) + school_escort_trip_id_map = { + v: k + for k, v in trips.loc[ + ~trips["school_escort_trip_id"].isna(), "school_escort_trip_id" + ] + .to_dict() + .items() + } + + school_escort_trips["trip_id"] = np.where( + school_escort_trips["school_escort_trip_id"].isin( + school_escort_trip_id_map.keys() + ), + school_escort_trips["school_escort_trip_id"].map(school_escort_trip_id_map), + school_escort_trips["school_escort_trip_id"], + ) + school_escort_trips.set_index("trip_id", inplace=True) + + # can drop school_escort_trip_id column now since it has been replaced + trips.drop(columns="school_escort_trip_id", inplace=True) + + # replace trip table and pipeline and register with the random number generator + pipeline.replace_table("trips", trips) + pipeline.get_rn_generator().drop_channel("trips") + pipeline.get_rn_generator().add_channel("trips", trips) + pipeline.replace_table("school_escort_trips", school_escort_trips) + + # updating stop frequency in tours tabel to be consistent + num_outbound_stops = ( + trips[trips.outbound == True].groupby("tour_id")["trip_num"].count() - 1 + ) + num_inbound_stops = ( + trips[trips.outbound == False].groupby("tour_id")["trip_num"].count() - 1 + ) + stop_freq = ( + num_outbound_stops.astype(str) + "out_" + num_inbound_stops.astype(str) + "in" + ) + tours.loc[stop_freq.index, "stop_frequency"] = stop_freq + + # no need to reset random number generator since no tours added + pipeline.replace_table("tours", tours) + + return trips + + +def recompute_tour_count_statistics(): + tours = pipeline.get_table("tours") + + grouped = tours.groupby(["person_id", "tour_type"]) + tours["tour_type_num"] = grouped.cumcount() + 1 + tours["tour_type_count"] = tours["tour_type_num"] + grouped.cumcount( + ascending=False + ) + + grouped = tours.groupby("person_id") + tours["tour_num"] = grouped.cumcount() + 1 + tours["tour_count"] = tours["tour_num"] + grouped.cumcount(ascending=False) + + pipeline.replace_table("tours", tours) + + +def create_pure_school_escort_tours(bundles): + # creating home to school tour for chauffers making pure escort tours + # ride share tours are already created since they go off the mandatory tour + pe_tours = bundles[bundles["escort_type"] == "pure_escort"] + + pe_tours["origin"] = pe_tours["home_zone_id"] + # desination is the last dropoff / pickup location + pe_tours["destination"] = ( + pe_tours["school_destinations"].str.split("_").str[-1].astype(int) + ) + # start is the first start time for outbound trips or the last school end time for inbound trips + starts = pe_tours["school_starts"].str.split("_").str[0].astype(int) + ends = pe_tours["school_ends"].str.split("_").str[-1].astype(int) + pe_tours["start"] = np.where( + pe_tours["school_escort_direction"] == "outbound", starts, ends + ) + + # just set end equal to start time -- non-escort half of tour is determined downstream + pe_tours["end"] = pe_tours["start"] + pe_tours["duration"] = pe_tours["end"] - pe_tours["start"] + pe_tours["tdd"] = pd.NA # updated with full tours table + + pe_tours["person_id"] = pe_tours["chauf_id"] + + pe_tours["tour_category"] = "non_mandatory" + pe_tours["number_of_participants"] = 1 + pe_tours["tour_type"] = "escort" + pe_tours["school_esc_outbound"] = np.where( + pe_tours["school_escort_direction"] == "outbound", "pure_escort", pd.NA + ) + pe_tours["school_esc_inbound"] = np.where( + pe_tours["school_escort_direction"] == "inbound", "pure_escort", pd.NA + ) + + pe_tours = pe_tours.sort_values(by=["household_id", "person_id", "start"]) + + # finding what the next start time for that person for scheduling + pe_tours["next_pure_escort_start"] = ( + pe_tours.groupby("person_id")["start"].shift(-1).fillna(0) + ) + + grouped = pe_tours.groupby(["person_id", "tour_type"]) + pe_tours["tour_type_num"] = grouped.cumcount() + 1 + pe_tours["tour_type_count"] = pe_tours["tour_type_num"] + grouped.cumcount( + ascending=False + ) + + grouped = pe_tours.groupby("person_id") + pe_tours["tour_num"] = grouped.cumcount() + 1 + pe_tours["tour_count"] = pe_tours["tour_num"] + grouped.cumcount(ascending=False) + + pe_tours = canonical_ids.set_tour_index(pe_tours, is_school_escorting=True) + + return pe_tours + + +def split_out_school_escorting_trips(trips, school_escort_trips): + # separate out school escorting trips to exclude them from the model + full_trips_index = trips.index + se_trips_mask = trips.index.isin(school_escort_trips.index) + se_trips = trips[se_trips_mask] + trips = trips[~se_trips_mask] + + return trips, se_trips, full_trips_index diff --git a/activitysim/abm/models/util/test/configs/atwork_subtour_frequency_alternatives.csv b/activitysim/abm/models/util/test/configs/atwork_subtour_frequency_alternatives.csv new file mode 100644 index 000000000..ba9941919 --- /dev/null +++ b/activitysim/abm/models/util/test/configs/atwork_subtour_frequency_alternatives.csv @@ -0,0 +1,8 @@ +#,,,alt file for building tours even though simulation is simple_simulate not interaction_simulate +alt,eat,business,maint +no_subtours,0,0,0 +eat,1,0,0 +business1,0,1,0 +maint,0,0,1 +business2,0,2,0 +eat_business,1,1,0 diff --git a/activitysim/abm/models/util/test/configs/joint_tour_frequency_alternatives.csv b/activitysim/abm/models/util/test/configs/joint_tour_frequency_alternatives.csv new file mode 100644 index 000000000..7bf93731f --- /dev/null +++ b/activitysim/abm/models/util/test/configs/joint_tour_frequency_alternatives.csv @@ -0,0 +1,23 @@ +#,,,,,alt file for building joint tours +alt,shopping,othmaint,eatout,social,othdiscr +0_tours,0,0,0,0,0 +1_Shop,1,0,0,0,0 +1_Main,0,1,0,0,0 +1_Eat,0,0,1,0,0 +1_Visit,0,0,0,1,0 +1_Disc,0,0,0,0,1 +2_SS,2,0,0,0,0 +2_SM,1,1,0,0,0 +2_SE,1,0,1,0,0 +2_SV,1,0,0,1,0 +2_SD,1,0,0,0,1 +2_MM,0,2,0,0,0 +2_ME,0,1,1,0,0 +2_MV,0,1,0,1,0 +2_MD,0,1,0,0,1 +2_EE,0,0,2,0,0 +2_EV,0,0,1,1,0 +2_ED,0,0,1,0,1 +2_VV,0,0,0,2,0 +2_VD,0,0,0,1,1 +2_DD,0,0,0,0,2 diff --git a/activitysim/abm/models/util/test/configs/mandatory_tour_frequency.csv b/activitysim/abm/models/util/test/configs/mandatory_tour_frequency.csv new file mode 100644 index 000000000..848bbf77a --- /dev/null +++ b/activitysim/abm/models/util/test/configs/mandatory_tour_frequency.csv @@ -0,0 +1,101 @@ +Label,Description,Expression,work1,work2,school1,school2,work_and_school +util_ft_worker,Full-time worker alternative-specific constants,ptype == 1,0,coef_ft_worker_work2_asc,,, +util_pt_worker,Part-time worker alternative-specific constants,ptype == 2,0,coef_pt_worker_work2_asc,,, +util_univ,University student alternative-specific constants,ptype == 3,coef_univ_work1_asc,coef_univ_work2_asc,0,coef_univ_school2_asc,coef_univ_work_and_school_asc +util_non_working_adult,Non-working adult alternative-specific constants,ptype == 4,,,,, +util_retired,Retired alternative-specific constants,ptype == 5,,,,, +util_driving_age_child,Driving-age child alternative-specific constants,ptype == 6,,,0,coef_driving_age_child_school2_asc,coef_driving_age_child_work_and_school_asc +util_pre_driving_age_child,Pre-driving age child who is in school alternative-specific constants,ptype == 7,,,0,coef_pre_driving_age_child_school2_asc, +util_female_ft_worker,Female - Full-time worker interaction,(ptype == 1) & female,0,coef_female_work2,coef_female_school1,,coef_female_work_and_school +util_female_pt_worker,Female - Part-time worker interaction,(ptype == 2) & female,0,coef_female_work2,coef_female_school1,,coef_female_work_and_school +util_female_univ,Female - University student interaction,(ptype == 3) & female,coef_female_work1,coef_female_work2,coef_female_school1,coef_female_school2,coef_female_work_and_school +util_female_non_working_adult,Female - Non-working adult interaction,(ptype == 4) & female,0,coef_female_work2,coef_female_school1,, +util_female_retired,Female - Retired interaction,(ptype == 5) & female,0,coef_female_work2,coef_female_school1,, +util_female_driving_age_child,Female - Driving-age child interaction,(ptype == 6) & female,coef_female_work1,,0,coef_female_school2,coef_female_work_and_school +util_female_pre_driving,Female - Pre-driving age child who is in school interaction,(ptype == 7) & female,coef_female_work1,,0,coef_female_school2, +util_under_35_ft,Under 35 - Full-time worker interaction,(ptype == 1) & (age <= 35),0,coef_under_35_work2,coef_under_35_school1,,coef_under_35_work_and_school +util_under_35_pt,Under 35 - Part-time worker interaction,(ptype == 2) & (age <= 35),0,coef_under_35_work2,coef_under_35_school1,,coef_under_35_work_and_school +util_under_35_univ,Under 35 - University student interaction,(ptype == 3) & (age <= 35),coef_under_35_work1,coef_under_35_work2,0,coef_under_35_school2,coef_under_35_work_and_school +util_under_35_non_working,Under 35 - Non-working adult interaction,(ptype == 4) & (age <= 35),0,coef_under_35_work2,coef_under_35_school1,, +util_can_walk_to_work_ft,Can walk to work - Full-time worker interaction,(ptype == 1) & (distance_to_work < 3),,coef_can_walk_to_work_work2,,, +util_can_walk_to_work_pt,Can walk to work - Part-time worker interaction,(ptype == 2) & (distance_to_work < 3),,coef_can_walk_to_work_work2,,, +util_can_walk_to_work_univ,Can walk to work - University student interaction,(ptype == 3) & (distance_to_work < 3),,coef_can_walk_to_work_work2,,, +util_can_walk_to_work_non_working_adult,Can walk to work - Non-working adult interaction,(ptype == 4) & (distance_to_work < 3),,coef_can_walk_to_work_work2,,, +util_can_walk_to_work_retired,Can walk to work - Retired interaction,(ptype == 5) & (distance_to_work < 3),,coef_can_walk_to_work_work2,,, +util_can_walk_to_school_univ,Can walk to school - University student interaction,(ptype == 3) & (distance_to_school < 3),,,,coef_can_walk_to_work_school2, +util_can_walk_to_school_driving_age_child,Can walk to school - Driving-age child interaction,(ptype == 6) & (distance_to_school < 3),,,,coef_can_walk_to_work_school2, +util_can_walk_to_school_pre_driving_age_child,Can walk to school - Pre-driving age child who is in school interaction,(ptype == 7) & (distance_to_school < 3),,,,coef_can_walk_to_work_school2, +util_can_walk_to_work_or_school_ft,Can walk to work or school - Full-time worker interaction,(ptype == 1) & (distance_to_work < 3 | distance_to_school < 3),,,,,coef_can_walk_to_work_and_school +util_can_walk_to_work_or_school_pt,Can walk to work or school - Part-time worker interaction,(ptype == 2) & (distance_to_work < 3 | distance_to_school < 3),,,,,coef_can_walk_to_work_and_school +util_can_walk_to_work_or_school_univ,Can walk to work or school - University student interaction,(ptype == 3) & (distance_to_work < 3 | distance_to_school < 3),,,,,coef_can_walk_to_work_and_school +util_can_walk_to_work_or_school_driving_age_child,Can walk to work or school - Driving-age child interaction,(ptype == 6) & (distance_to_work < 3 | distance_to_school < 3),,,,,coef_can_walk_to_work_and_school +util_round_trip_auto_time_to_work_ft,Round trip auto time to work - Full-time worker interaction,(ptype == 1) * roundtrip_auto_time_to_work,,coef_round_trip_auto_time_to_work_work2,,,coef_round_trip_auto_time_to_work_school2 +util_round_trip_auto_time_to_work_pt,Round trip auto time to work - Part-time worker interaction,(ptype == 2) * roundtrip_auto_time_to_work,,coef_round_trip_auto_time_to_work_work2,,,coef_round_trip_auto_time_to_work_school2 +util_round_trip_auto_time_to_work_univ,Round trip auto time to work - University student interaction,(ptype == 3) * roundtrip_auto_time_to_work,,coef_round_trip_auto_time_to_work_work2,,,coef_round_trip_auto_time_to_work_school2 +util_round_trip_auto_time_to_work_non_working_adult,Round trip auto time to work - Non-working adult interaction,(ptype == 4) * roundtrip_auto_time_to_work,,coef_round_trip_auto_time_to_work_work2,,, +util_round_trip_auto_time_to_work_retired,Round trip auto time to work - Retired,(ptype == 5) * roundtrip_auto_time_to_work,,coef_round_trip_auto_time_to_work_work2,,, +util_round_trip_auto_time_to_school_univ,Round trip auto time to school - University student interaction,(ptype == 3) * roundtrip_auto_time_to_school,,,,coef_round_trip_auto_time_to_work_school2,coef_round_trip_auto_time_to_work_work_and_school +util_round_trip_auto_time_to_school_driving_age_child,Round trip auto time to school - Driving-age child interaction,(ptype == 6) * roundtrip_auto_time_to_school,,,,coef_round_trip_auto_time_to_work_school2,coef_round_trip_auto_time_to_work_work_and_school +util_round_trip_auto_time_to_school_pre_driving_age_child,Round trip auto time to school - Pre-driving age child who is in school interaction,(ptype == 7) * roundtrip_auto_time_to_school,,,,coef_round_trip_auto_time_to_work_school2, +util_student_employted_univ,Student is employed - University student interaction,(ptype == 3) & student_is_employed,coef_student_employed,coef_student_employed,,,coef_student_employed +util_student_employted_driving_age_child,Student is employed - Driving-age child interaction,(ptype == 6) & student_is_employed,coef_student_employed,coef_student_employed,,,coef_student_employed +util_non_student_goes_to_school_ft,Non-student goes to school - Full-time worker interaction,(ptype == 1) & nonstudent_to_school,,,coef_non_student_goes_to_school,,coef_non_student_goes_to_school +util_non_student_goes_to_school_pt,Non-student goes to school - Part-time worker interaction,(ptype == 2) & nonstudent_to_school,,,coef_non_student_goes_to_school,,coef_non_student_goes_to_school +util_non_student_goes_to_school_non_working_adult,Non-student goes to school - Non-working adult interaction,(ptype == 4) & nonstudent_to_school,,,coef_non_student_goes_to_school,, +util_non_student_goes_to_school_retired,Non-student goes to school - Retired interaction,(ptype == 5) & nonstudent_to_school,,,coef_non_student_goes_to_school,, +util_no_cars_in_hh_ft,No cars in household - Full-time worker interaction,(ptype == 1) & (auto_ownership == 0),,coef_no_cars_in_hh_work2,,,coef_no_cars_in_hh_work_and_school +util_no_cars_in_hh_pt,No cars in household - Part-time worker interaction,(ptype == 2) & (auto_ownership == 0),,coef_no_cars_in_hh_work2,,,coef_no_cars_in_hh_work_and_school +util_no_cars_in_hh_unif,No cars in household - University student interaction,(ptype == 3) & (auto_ownership == 0),,coef_no_cars_in_hh_work2,,coef_no_cars_in_hh_school2,coef_no_cars_in_hh_work_and_school +util_no_cars_in_hh_non_working_adult,No cars in household - Non-working adult interaction,(ptype == 4) & (auto_ownership == 0),,coef_no_cars_in_hh_work2,,, +util_no_cars_in_hh_retired,No cars in household - Retired interaction,(ptype == 5) & (auto_ownership == 0),,coef_no_cars_in_hh_work2,,, +util_no_cars_in_hh_driving_age_student,No cars in household - Driving-age student interaction,(ptype == 6) & (auto_ownership == 0),,,,coef_no_cars_in_hh_school2,coef_no_cars_in_hh_work_and_school +util_no_cars_in_hh_pre_driving_age,No cars in household - Pre-driving age child who is in school interaction,(ptype == 7) & (auto_ownership == 0),,,,coef_no_cars_in_hh_school2, +util_fewer_cars_than_drivers_univ,Fewer cars than drivers in household - University student interaction,(ptype == 3) & (auto_ownership < num_drivers),,,,coef_few_cars_than_drivers_school2, +util_fewer_cars_than_drivers_driving_age_student,Fewer cars than drivers in household - Driving-age student interaction,(ptype == 6) & (auto_ownership < num_drivers),,,,coef_few_cars_than_drivers_school2, +util_fewer_cars_than_drivers_pre_driving_age,Fewer cars than drivers in household - Pre-driving age child who is in school interaction,(ptype == 7) & (auto_ownership < num_drivers),,,,coef_few_cars_than_drivers_school2, +util_num_preschool_in_hh_ft,Number of preschool children in household - Full-time worker interaction,(ptype == 1) * (num_young_children),0,coef_num_preschool_in_hh_work2,coef_num_preschool_in_hh_school1,,coef_num_preschool_in_hh_work_and_school +util_num_preschool_in_hh_pt,Number of preschool children in household - Part-time worker interaction,(ptype == 2) * (num_young_children),0,coef_num_preschool_in_hh_work2,coef_num_preschool_in_hh_school1,,coef_num_preschool_in_hh_work_and_school +util_num_preschool_in_hh_univ,Number of preschool children in household - University student interaction,(ptype == 3) * (num_young_children),coef_num_preschool_in_hh_work1,coef_num_preschool_in_hh_work2,0,coef_num_preschool_in_hh_school2,coef_num_preschool_in_hh_work_and_school +util_num_preschool_in_hh_non_working_adult,Number of preschool children in household - Non-working adult interaction,(ptype == 4) * (num_young_children),0,coef_num_preschool_in_hh_work2,coef_num_preschool_in_hh_school1,, +util_num_preschool_in_hh_retired,Number of preschool children in household - Retired interaction,(ptype == 5) * (num_young_children),0,coef_num_preschool_in_hh_work2,coef_num_preschool_in_hh_school1,, +util_num_preschool_in_hh_driving_age_student,Number of preschool children in household - Driving-age student interaction,(ptype == 6) * (num_young_children),coef_num_preschool_in_hh_work1,,0,coef_num_preschool_in_hh_school2,coef_num_preschool_in_hh_work_and_school +util_num_preschool_in_hh_pre_driving_age_in_school,Number of preschool children in household - Pre-driving age child who is in school interaction,(ptype == 7) * (num_young_children),coef_num_preschool_in_hh_work1,,0,coef_num_preschool_in_hh_school2, +util_num_nonworkers_in_hh_ft,Number of non-workers in the household - Full-time worker interaction,(ptype == 1) * num_non_workers,,,coef_num_non_workers_in_hh_school1,, +util_num_nonworkers_in_hh_pt,Number of non-workers in the household - Part-time worker interaction,(ptype == 2) * num_non_workers,,,coef_num_non_workers_in_hh_school1,, +util_hh_income_gt_50k_ft,Household income higher than $50k - Full-time worker interaction,(ptype == 1) & (income_in_thousands > 50),0,,coef_hh_income_gt_50k_school1,,coef_hh_income_gt_50k_worker_work_and_school +util_hh_income_gt_50k_pt,Household income higher than $50k - Part-time worker interaction,(ptype == 2) & (income_in_thousands > 50),0,,coef_hh_income_gt_50k_school1,,coef_hh_income_gt_50k_worker_work_and_school +util_hh_income_gt_50k_univ,Household income higher than $50k - University student interaction,(ptype == 3) & (income_in_thousands > 50),coef_hh_income_gt_50k_work,coef_hh_income_gt_50k_work,0,,coef_hh_income_gt_50k_student_work_and_school +util_hh_income_gt_50k_non_working_adult,Household income higher than $50k - Non-working adult interaction,(ptype == 4) & (income_in_thousands > 50),0,,coef_hh_income_gt_50k_school1,, +util_hh_income_gt_50k_retired,Household income higher than $50k - Retired interaction,(ptype == 5) & (income_in_thousands > 50),0,,coef_hh_income_gt_50k_school1,, +util_hh_income_gt_50k_driving_age_student,Household income higher than $50k - Driving-age student interaction,(ptype == 6) & (income_in_thousands > 50),coef_hh_income_gt_50k_work,,0,,coef_hh_income_gt_50k_student_work_and_school +util_hh_income_gt_50k_pre_driving_age_student,Household income higher than $50k - Pre-driving age child who is in school interaction,(ptype == 7) & (income_in_thousands > 50),coef_hh_income_gt_50k_work,,0,, +util_non_family_hh_ft,Non-family household - Full-time worker interaction,(ptype == 1) & non_family,0,,coef_non_family_hh_category1,,coef_non_family_hh_category1 +util_non_family_hh_pt,Non-family household - Part-time worker interaction,(ptype == 2) & non_family,0,,coef_non_family_hh_category1,,coef_non_family_hh_category1 +util_non_family_hh_univ,Non-family household - University student interaction,(ptype == 3) & non_family,coef_non_family_hh_category2,coef_non_family_hh_category2,0,,coef_non_family_hh_category2 +util_non_family_hh_non_working_adult,Non-family household - Non-working adult interaction,(ptype == 4) & non_family,0,,coef_non_family_hh_category1,, +util_non_family_hh_retired,Non-family household - Retired interaction,(ptype == 5) & non_family,0,,coef_non_family_hh_category1,, +util_non_family_hh_driving_age_student,Non-family household - Driving-age student interaction,(ptype == 6) & non_family,coef_non_family_hh_category2,,0,,coef_non_family_hh_category2 +util_non_family_hh_pre_driving_age_student,Non-family household - Pre-driving age child who is in school interaction,(ptype == 7) & non_family,coef_non_family_hh_category2,,0,, +util_num_under_16_not_at_school_ft,Number of children under 16 not at school - Full-time worker interaction,(ptype == 1) * num_under16_not_at_school,,coef_num_under_16_not_at_school_work2,,,coef_num_under_16_not_at_school_work_and_school +util_num_under_16_not_at_school_pt,Number of children under 16 not at school - Part-time worker interaction,(ptype == 2) * num_under16_not_at_school,,coef_num_under_16_not_at_school_work2,,,coef_num_under_16_not_at_school_work_and_school +util_num_under_16_not_at_school_univ,Number of children under 16 not at school - University student interaction,(ptype == 3) * num_under16_not_at_school,,coef_num_under_16_not_at_school_work2,,coef_num_under_16_not_at_school_school2,coef_num_under_16_not_at_school_work_and_school +util_num_under_16_not_at_school_non_working_adult,Number of children under 16 not at school - Non-working adult interaction,(ptype == 4) * num_under16_not_at_school,,coef_num_under_16_not_at_school_work2,,, +util_num_under_16_not_at_school_retired,Number of children under 16 not at school - Retired,(ptype == 5) * num_under16_not_at_school,,coef_num_under_16_not_at_school_work2,,, +util_num_under_16_not_at_school_driving_age_student,Number of children under 16 not at school - Driving-age student interaction,(ptype == 6) * num_under16_not_at_school,,,,coef_num_under_16_not_at_school_school2,coef_num_under_16_not_at_school_work_and_school +util_num_under_16_not_at_school_pre_driving_age,Number of children under 16 not at school - Pre-driving age child who is in school interaction,(ptype == 7) * num_under16_not_at_school,,,,coef_num_under_16_not_at_school_school2, +util_nome_urban_ft,Home is in urban area - Full-time worker interaction,(ptype == 1) & home_is_urban,0,coef_home_urban_work2,coef_home_urban_school1,,coef_home_urban_work_and_school +util_nome_urban_pt,Home is in urban area - Part-time worker interaction,(ptype == 2) & home_is_urban,0,coef_home_urban_work2,coef_home_urban_school1,,coef_home_urban_work_and_school +util_nome_urban_univ,Home is in urban area - University student interaction,(ptype == 3) & home_is_urban,coef_home_urban_work1,coef_home_urban_work2,0,coef_home_urban_school2,coef_home_urban_work_and_school +util_nome_urban_non_working_adult,Home is in urban area - Non-working adult interaction,(ptype == 4) & home_is_urban,0,coef_home_urban_work2,coef_home_urban_school1,, +util_nome_urban_retired,Home is in urban area - Retired interaction,(ptype == 5) & home_is_urban,0,coef_home_urban_work2,coef_home_urban_school1,, +util_nome_urban_driving_age_student,Home is in urban area - Driving-age student interaction,(ptype == 6) & home_is_urban,coef_home_urban_work1,,0,coef_home_urban_school2,coef_home_urban_work_and_school +util_nome_urban_pre_driving_age_student,Home is in urban area - Pre-driving age child who is in school interaction,(ptype == 7) & home_is_urban,coef_home_urban_work1,,0,coef_home_urban_school2, +util_availability_ft,Unavailable: Full-time worker,ptype == 1,,,,coef_unavailable, +util_availability_pt,Unavailable: Part-time worker,ptype == 2,,,,coef_unavailable, +util_availability_non_working_adult,Unavailable: Non-working adult,ptype == 4,,,,coef_unavailable,coef_unavailable +util_availability_retired,Unavailable: Retired,ptype == 5,,,,coef_unavailable,coef_unavailable +util_availability_driving_age_child,Unavailable: Driving-age child,ptype == 6,coef_unavailable,coef_unavailable,,, +util_availability_pre_driving_age_student,Unavailable: Pre-driving age child who is in school,ptype == 7,,coef_unavailable,,,coef_unavailable +util_availability_pre_driving_age_not_in_school,Unavailable: Pre-driving age child who is not in school,ptype == 8,coef_unavailable,coef_unavailable,,coef_unavailable,coef_unavailable +util_availability_work_tours_no_usual_work_location,Unavailable: Work tours for those with no usual work location,~(workplace_zone_id > -1),coef_unavailable,coef_unavailable,,,coef_unavailable +util_availability_school_tours_no_usual_school_location,Unavailable: School tours for those with no usual school location,~(school_zone_id > -1),,,coef_unavailable,coef_unavailable,coef_unavailable diff --git a/activitysim/abm/models/util/test/configs/mandatory_tour_frequency.yaml b/activitysim/abm/models/util/test/configs/mandatory_tour_frequency.yaml new file mode 100644 index 000000000..ae7c323c0 --- /dev/null +++ b/activitysim/abm/models/util/test/configs/mandatory_tour_frequency.yaml @@ -0,0 +1,10 @@ + +SPEC: mandatory_tour_frequency.csv +COEFFICIENTS: mandatory_tour_frequency_coefficients.csv + +annotate_persons: + SPEC: annotate_persons_mtf + DF: persons + TABLES: + - tours + diff --git a/activitysim/abm/models/util/test/configs/non_mandatory_tour_frequency_alternatives.csv b/activitysim/abm/models/util/test/configs/non_mandatory_tour_frequency_alternatives.csv new file mode 100644 index 000000000..b9765aa75 --- /dev/null +++ b/activitysim/abm/models/util/test/configs/non_mandatory_tour_frequency_alternatives.csv @@ -0,0 +1,97 @@ +escort,shopping,othmaint,othdiscr,eatout,social +0,0,0,0,0,0 +0,0,0,1,0,0 +0,0,0,0,0,1 +0,0,0,1,0,1 +0,0,0,0,1,0 +0,0,0,1,1,0 +0,0,0,0,1,1 +0,0,0,1,1,1 +0,0,1,0,0,0 +0,0,1,1,0,0 +0,0,1,0,0,1 +0,0,1,1,0,1 +0,0,1,0,1,0 +0,0,1,1,1,0 +0,0,1,0,1,1 +0,0,1,1,1,1 +0,1,0,0,0,0 +0,1,0,1,0,0 +0,1,0,0,0,1 +0,1,0,1,0,1 +0,1,0,0,1,0 +0,1,0,1,1,0 +0,1,0,0,1,1 +0,1,0,1,1,1 +0,1,1,0,0,0 +0,1,1,1,0,0 +0,1,1,0,0,1 +0,1,1,1,0,1 +0,1,1,0,1,0 +0,1,1,1,1,0 +0,1,1,0,1,1 +0,1,1,1,1,1 +1,0,0,0,0,0 +1,0,0,1,0,0 +1,0,0,0,0,1 +1,0,0,1,0,1 +1,0,0,0,1,0 +1,0,0,1,1,0 +1,0,0,0,1,1 +1,0,0,1,1,1 +1,0,1,0,0,0 +1,0,1,1,0,0 +1,0,1,0,0,1 +1,0,1,1,0,1 +1,0,1,0,1,0 +1,0,1,1,1,0 +1,0,1,0,1,1 +1,0,1,1,1,1 +1,1,0,0,0,0 +1,1,0,1,0,0 +1,1,0,0,0,1 +1,1,0,1,0,1 +1,1,0,0,1,0 +1,1,0,1,1,0 +1,1,0,0,1,1 +1,1,0,1,1,1 +1,1,1,0,0,0 +1,1,1,1,0,0 +1,1,1,0,0,1 +1,1,1,1,0,1 +1,1,1,0,1,0 +1,1,1,1,1,0 +1,1,1,0,1,1 +1,1,1,1,1,1 +2,0,0,0,0,0 +2,0,0,1,0,0 +2,0,0,0,0,1 +2,0,0,1,0,1 +2,0,0,0,1,0 +2,0,0,1,1,0 +2,0,0,0,1,1 +2,0,0,1,1,1 +2,0,1,0,0,0 +2,0,1,1,0,0 +2,0,1,0,0,1 +2,0,1,1,0,1 +2,0,1,0,1,0 +2,0,1,1,1,0 +2,0,1,0,1,1 +2,0,1,1,1,1 +2,1,0,0,0,0 +2,1,0,1,0,0 +2,1,0,0,0,1 +2,1,0,1,0,1 +2,1,0,0,1,0 +2,1,0,1,1,0 +2,1,0,0,1,1 +2,1,0,1,1,1 +2,1,1,0,0,0 +2,1,1,1,0,0 +2,1,1,0,0,1 +2,1,1,1,0,1 +2,1,1,0,1,0 +2,1,1,1,1,0 +2,1,1,0,1,1 +2,1,1,1,1,1 diff --git a/activitysim/abm/models/util/test/configs/non_mandatory_tour_frequency_extension_probs.csv b/activitysim/abm/models/util/test/configs/non_mandatory_tour_frequency_extension_probs.csv new file mode 100644 index 000000000..ec78c4c8e --- /dev/null +++ b/activitysim/abm/models/util/test/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.829545455,1,1 +2,0,0,1,0.769230769,1,1 +3,0,0,1,0.893939394,1,1 +4,0,0,1,0.75,1,1 +5,0,0,1,0.842105263,1,1 +6,0,0,1,0.714285714,1,1 +7,0,0,1,0.814814815,1,1 +8,0,0,1,0.75,1,1 +1,1,0,1,0.789473684,1,1 +2,1,0,1,0.6,1,1 +3,1,0,1,1,1,1 +4,1,0,1,1,1,1 +5,1,0,1,0.825910931,1,1 +6,1,0,1,0.837209302,1,1 +7,1,0,1,0.6,1,1 +8,1,0,1,1,1,1 +1,0,1,1,0.842105263,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,0.777777778,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,0,2,0.892694064,0.99086758,1 +2,0,0,2,0.84057971,0.992753623,1 +3,0,0,2,0.971014493,1,1 +4,0,0,2,0.96969697,1,1 +5,0,0,2,0.870056497,0.994350282,1 +6,0,0,2,0.866666667,1,1 +7,0,0,2,0.971014493,1,1 +8,0,0,2,0.931034483,1,1 +1,1,0,2,0.885057471,1,1 +2,1,0,2,0.727272727,1,1 +3,1,0,2,0.971428571,1,1 +4,1,0,2,1,1,1 +5,1,0,2,0.895977809,0.993065187,1 +6,1,0,2,0.885185185,1,1 +7,1,0,2,1,1,1 +8,1,0,2,1,1,1 +1,0,1,2,0.910087719,0.993421053,1 +2,0,1,2,0.88,1,1 +3,0,1,2,0.8,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,0.964912281,1,1 +7,1,1,2,1,1,1 +8,1,1,2,0.888888889,1,1 +1,0,0,3,0.935643564,0.997524752,1 +2,0,0,3,0.905660377,1,1 +3,0,0,3,0.978813559,1,1 +4,0,0,3,0.928571429,1,1 +5,0,0,3,0.901515152,0.992424242,1 +6,0,0,3,0.863636364,1,1 +7,0,0,3,0.947368421,1,1 +8,0,0,3,0.913043478,1,1 +1,1,0,3,0.893333333,0.986666667,1 +2,1,0,3,1,1,1 +3,1,0,3,1,1,1 +4,1,0,3,0.857142857,1,1 +5,1,0,3,0.916071429,0.996428571,1 +6,1,0,3,0.856382979,0.984042553,1 +7,1,0,3,1,1,1 +8,1,0,3,1,1,1 +1,0,1,3,0.916201117,0.991620112,1 +2,0,1,3,0.912280702,0.98245614,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,0.833333333,1,1 +7,0,1,3,0.961538462,1,1 +8,0,1,3,1,1,1 +1,1,1,3,0.97826087,0.989130435,1 +2,1,1,3,0.97260274,1,1 +3,1,1,3,1,1,1 +4,1,1,3,1,1,1 +5,1,1,3,0.995762712,1,1 +6,1,1,3,0.921568627,0.980392157,1 +7,1,1,3,1,1,1 +8,1,1,3,1,1,1 +1,0,0,4,0.9218107,0.995884774,1 +2,0,0,4,0.900900901,1,1 +3,0,0,4,0.997354497,1,1 +4,0,0,4,0.991176471,1,1 +5,0,0,4,0.921568627,0.980392157,1 +6,0,0,4,0.954545455,1,1 +7,0,0,4,1,1,1 +8,0,0,4,0.954545455,1,1 +1,1,0,4,0.941176471,0.970588235,1 +2,1,0,4,0.925925926,1,1 +3,1,0,4,1,1,1 +4,1,0,4,0.875,1,1 +5,1,0,4,0.915322581,1,1 +6,1,0,4,0.947674419,0.994186047,1 +7,1,0,4,0.666666667,1,1 +8,1,0,4,1,1,1 +1,0,1,4,0.925925926,0.987654321,1 +2,0,1,4,0.903703704,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,0.911111111,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,0.962962963,1,1 +7,1,1,4,1,1,1 +8,1,1,4,1,1,1 +1,0,0,5,0.976744186,1,1 +2,0,0,5,0.981818182,1,1 +3,0,0,5,0.985915493,1,1 +4,0,0,5,1,1,1 +5,0,0,5,1,1,1 +6,0,0,5,1,1,1 +7,0,0,5,1,1,1 +8,0,0,5,0.875,1,1 +1,1,0,5,1,1,1 +2,1,0,5,1,1,1 +3,1,0,5,0.964285714,1,1 +4,1,0,5,1,1,1 +5,1,0,5,0.985714286,1,1 +6,1,0,5,0.951807229,1,1 +7,1,0,5,1,1,1 +8,1,0,5,1,1,1 +1,0,1,5,0.926605505,1,1 +2,0,1,5,0.941176471,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,0.972972973,1,1 +4,1,1,5,1,1,1 +5,1,1,5,1,1,1 +6,1,1,5,0.933333333,1,1 +7,1,1,5,1,1,1 +8,1,1,5,1,1,1 +1,0,0,6,0.93837535,0.988795518,1 +2,0,0,6,0.888888889,1,1 +3,0,0,6,0.966832504,0.998341625,1 +4,0,0,6,0.942028986,1,1 +5,0,0,6,0.88034188,1,1 +6,0,0,6,0.925925926,1,1 +7,0,0,6,0.967741935,1,1 +8,0,0,6,0.90625,1,1 +1,1,0,6,0.85915493,1,1 +2,1,0,6,0.818181818,0.96969697,1 +3,1,0,6,1,1,1 +4,1,0,6,0.952380952,1,1 +5,1,0,6,0.879237288,0.997881356,1 +6,1,0,6,0.862944162,0.984771574,1 +7,1,0,6,0.9,1,1 +8,1,0,6,1,1,1 +1,0,1,6,0.927835052,0.996563574,1 +2,0,1,6,0.859375,0.9921875,1 +3,0,1,6,1,1,1 +4,0,1,6,1,1,1 +5,0,1,6,0.92,1,1 +6,0,1,6,1,1,1 +7,0,1,6,0.904761905,1,1 +8,0,1,6,1,1,1 +1,1,1,6,0.982758621,1,1 +2,1,1,6,0.927710843,0.987951807,1 +3,1,1,6,0.982954545,1,1 +4,1,1,6,0.938679245,1,1 +5,1,1,6,1,1,1 +6,1,1,6,0.9375,1,1 +7,1,1,6,1,1,1 +8,1,1,6,1,1,1 diff --git a/activitysim/abm/models/util/test/test_flexible_tour_trip_ids.py b/activitysim/abm/models/util/test/test_flexible_tour_trip_ids.py new file mode 100644 index 000000000..30084fc80 --- /dev/null +++ b/activitysim/abm/models/util/test/test_flexible_tour_trip_ids.py @@ -0,0 +1,110 @@ +# ActivitySim +# See full license in LICENSE.txt. + +import os + +import pandas as pd +import pandas.testing as pdt +import pytest + +from ..canonical_ids import ( + determine_mandatory_tour_flavors, + determine_flavors_from_alts_file, +) + + +def test_mandatory_tour_flavors(): + mtf_settings = {} + default_mandatory_tour_flavors = {"work": 2, "school": 2} + + # first test using default + mandatory_tour_flavors = determine_mandatory_tour_flavors( + mtf_settings, + pd.DataFrame(columns={"random_name"}), + default_mandatory_tour_flavors, + ) + + assert mandatory_tour_flavors == default_mandatory_tour_flavors + + # creating dummy spec with different values + model_spec = pd.DataFrame( + data={ + "Label": ["dummy"], + "Description": ["dummy"], + "Expression": [""], + "work1": [1], + "work2": [1], + "work3": [1], + "school1": [1], + "school2": [1], + "school3": [1], + "work_and_school": [1], + } + ) + + # second test reading from spec + mandatory_tour_flavors = determine_mandatory_tour_flavors( + mtf_settings, model_spec, default_mandatory_tour_flavors + ) + assert mandatory_tour_flavors == {"work": 3, "school": 3} + + # third test is reading flavors from settings + mtf_settings["MANDATORY_TOUR_FLAVORS"] = {"work": 3, "school": 2} + mandatory_tour_flavors = determine_mandatory_tour_flavors( + mtf_settings, model_spec, default_mandatory_tour_flavors + ) + + assert mandatory_tour_flavors == {"work": 3, "school": 2} + + +def test_tour_flavors_from_alt_files(): + # alternative tour frequency files are used in joint, atwork, and non-mandatory tour frequency models + # this unit test checks the output from determining flavors from an alt file + + default_tour_flavors = { + "escort": 2, + "othmaint": 1, + "othdiscr": 1, + } + + # first test using default + tour_flavors = determine_flavors_from_alts_file( + pd.DataFrame(columns={"random_name"}), + provided_flavors=None, + default_flavors=default_tour_flavors, + ) + + assert tour_flavors == default_tour_flavors + + # second test is reading from alts file + alts = pd.DataFrame( + data={ + "Alts": ["alt1", "alt2", "alt3", "alt4"], + "escort": [0, 1, 2, 3], + "othmaint": [0, 0, 0, 0], + "othdiscr": [1, 2, 0, 0], + } + ) + + tour_flavors = determine_flavors_from_alts_file( + alts, provided_flavors=None, default_flavors=default_tour_flavors + ) + assert tour_flavors == {"escort": 3, "othmaint": 0, "othdiscr": 2} + + # now with max extension applied + tour_flavors = determine_flavors_from_alts_file( + alts, + provided_flavors=None, + default_flavors=default_tour_flavors, + max_extension=2, + ) + assert tour_flavors == {"escort": 5, "othmaint": 2, "othdiscr": 4} + + # now with provided tour flavors (which will ignore the max extension supplied too) + tour_flavors = determine_flavors_from_alts_file( + alts, + provided_flavors={"escort": 3, "othmaint": 3, "othdiscr": 3}, + default_flavors=default_tour_flavors, + max_extension=2, + ) + assert tour_flavors == {"escort": 3, "othmaint": 3, "othdiscr": 3} diff --git a/activitysim/abm/models/util/test/test_mandatory_tour_frequency.py b/activitysim/abm/models/util/test/test_mandatory_tour_frequency.py index 2739e1a40..699c9d2ca 100644 --- a/activitysim/abm/models/util/test/test_mandatory_tour_frequency.py +++ b/activitysim/abm/models/util/test/test_mandatory_tour_frequency.py @@ -8,9 +8,18 @@ import pandas.testing as pdt import pytest +from activitysim.core import inject + from ..tour_frequency import process_mandatory_tours +def setup_function(): + configs_dir = os.path.join(os.path.dirname(__file__), "configs") + inject.add_injectable("configs_dir", configs_dir) + output_dir = os.path.join(os.path.dirname(__file__), "output") + inject.add_injectable("output_dir", output_dir) + + def mandatory_tour_frequency_alternatives(): configs_dir = os.path.join(os.path.dirname(__file__), "configs") f = os.path.join(configs_dir, "mandatory_tour_frequency_alternatives.csv") diff --git a/activitysim/abm/models/util/test/test_non_mandatory_tour_frequency.py b/activitysim/abm/models/util/test/test_non_mandatory_tour_frequency.py index 5ae895630..b7fac8044 100644 --- a/activitysim/abm/models/util/test/test_non_mandatory_tour_frequency.py +++ b/activitysim/abm/models/util/test/test_non_mandatory_tour_frequency.py @@ -8,9 +8,18 @@ import pandas.testing as pdt import pytest +from activitysim.core import inject + from ..tour_frequency import process_non_mandatory_tours +def setup_function(): + configs_dir = os.path.join(os.path.dirname(__file__), "configs") + inject.add_injectable("configs_dir", configs_dir) + output_dir = os.path.join(os.path.dirname(__file__), "output") + inject.add_injectable("output_dir", output_dir) + + def test_nmtf(): persons = pd.DataFrame( diff --git a/activitysim/abm/models/util/tour_destination.py b/activitysim/abm/models/util/tour_destination.py index a39037b47..c068db2bc 100644 --- a/activitysim/abm/models/util/tour_destination.py +++ b/activitysim/abm/models/util/tour_destination.py @@ -119,9 +119,12 @@ def _destination_sample( trace_label=trace_label, ) + # if special person id is passed + chooser_id_column = model_settings.get("CHOOSER_ID_COLUMN", "person_id") + # remember person_id in chosen alts so we can merge with persons in subsequent steps # (broadcasts person_id onto all alternatives sharing the same tour_id index value) - choices["person_id"] = choosers.person_id + choices[chooser_id_column] = choosers[chooser_id_column] return choices @@ -519,14 +522,18 @@ def run_destination_sample( # FIXME - MEMORY HACK - only include columns actually used in spec (omit them pre-merge) chooser_columns = model_settings["SIMULATE_CHOOSER_COLUMNS"] + + # if special person id is passed + chooser_id_column = model_settings.get("CHOOSER_ID_COLUMN", "person_id") + persons_merged = persons_merged[ [c for c in persons_merged.columns if c in chooser_columns] ] tours = tours[ - [c for c in tours.columns if c in chooser_columns or c == "person_id"] + [c for c in tours.columns if c in chooser_columns or c == chooser_id_column] ] choosers = pd.merge( - tours, persons_merged, left_on="person_id", right_index=True, how="left" + tours, persons_merged, left_on=chooser_id_column, right_index=True, how="left" ) # interaction_sample requires that choosers.index.is_monotonic_increasing @@ -576,7 +583,7 @@ def run_destination_sample( # remember person_id in chosen alts so we can merge with persons in subsequent steps # (broadcasts person_id onto all alternatives sharing the same tour_id index value) - choices["person_id"] = tours.person_id + choices[chooser_id_column] = tours[chooser_id_column] return choices @@ -612,6 +619,8 @@ def run_destination_logsums( """ logsum_settings = config.read_model_settings(model_settings["LOGSUM_SETTINGS"]) + # if special person id is passed + chooser_id_column = model_settings.get("CHOOSER_ID_COLUMN", "person_id") chunk_tag = "tour_destination.logsums" @@ -624,7 +633,7 @@ def run_destination_logsums( choosers = pd.merge( destination_sample, persons_merged, - left_on="person_id", + left_on=chooser_id_column, right_index=True, how="left", ) @@ -662,6 +671,7 @@ def run_destination_simulate( estimator, chunk_size, trace_label, + skip_choice=False, ): """ run destination_simulate on tour_destination_sample @@ -678,14 +688,18 @@ def run_destination_simulate( # FIXME - MEMORY HACK - only include columns actually used in spec (omit them pre-merge) chooser_columns = model_settings["SIMULATE_CHOOSER_COLUMNS"] + + # if special person id is passed + chooser_id_column = model_settings.get("CHOOSER_ID_COLUMN", "person_id") + persons_merged = persons_merged[ [c for c in persons_merged.columns if c in chooser_columns] ] tours = tours[ - [c for c in tours.columns if c in chooser_columns or c == "person_id"] + [c for c in tours.columns if c in chooser_columns or c == chooser_id_column] ] choosers = pd.merge( - tours, persons_merged, left_on="person_id", right_index=True, how="left" + tours, persons_merged, left_on=chooser_id_column, right_index=True, how="left" ) # interaction_sample requires that choosers.index.is_monotonic_increasing @@ -743,6 +757,7 @@ def run_destination_simulate( trace_label=trace_label, trace_choice_name="destination", estimator=estimator, + skip_choice=skip_choice, ) if not want_logsums: @@ -764,6 +779,7 @@ def run_tour_destination( chunk_size, trace_hh_id, trace_label, + skip_choice=False, ): size_term_calculator = SizeTermCalculator(model_settings["SIZE_TERM_SELECTOR"]) @@ -839,6 +855,7 @@ def run_tour_destination( estimator=estimator, chunk_size=chunk_size, trace_label=tracing.extend_trace_label(segment_trace_label, "simulate"), + skip_choice=skip_choice, ) choices_list.append(choices) diff --git a/activitysim/abm/models/util/trip.py b/activitysim/abm/models/util/trip.py index a137934f5..870801e27 100644 --- a/activitysim/abm/models/util/trip.py +++ b/activitysim/abm/models/util/trip.py @@ -84,6 +84,14 @@ def cleanup_failed_trips(trips): assign_in_place(trips, patch_trips[["trip_num", "trip_count"]]) + # origin needs to match the previous destination + # (leaving first origin alone as it's already set correctly) + trips["origin"] = np.where( + (trips["trip_num"] == 1) & (trips["outbound"] == True), + trips["origin"], + trips.groupby("tour_id")["destination"].shift(), + ).astype(int) + del trips["patch"] del trips["failed"] diff --git a/activitysim/abm/tables/__init__.py b/activitysim/abm/tables/__init__.py index 145c9186c..a78e7ec57 100644 --- a/activitysim/abm/tables/__init__.py +++ b/activitysim/abm/tables/__init__.py @@ -2,6 +2,7 @@ # See full license in LICENSE.txt. from . import ( accessibility, + disaggregate_accessibility, households, landuse, persons, diff --git a/activitysim/abm/tables/disaggregate_accessibility.py b/activitysim/abm/tables/disaggregate_accessibility.py new file mode 100644 index 000000000..1a9c21146 --- /dev/null +++ b/activitysim/abm/tables/disaggregate_accessibility.py @@ -0,0 +1,267 @@ +# ActivitySim +# See full license in LICENSE.txt. +import logging +import os + +import numpy as np +import pandas as pd +import pandas.api.types as ptypes + +from sklearn.naive_bayes import CategoricalNB +from activitysim.core import inject, config, pipeline, util, input + +logger = logging.getLogger(__name__) + + +def find_nearest_accessibility_zone(choosers, accessibility_df, method="skims"): + """ + Matches choosers zone to the nearest accessibility zones. + Can be achieved by querying the skims or by nearest neighbor of centroids + """ + origin_col = "home_zone_id" + + def weighted_average(df, values, weights): + return df[values].T.dot(df[weights]) / df[weights].sum() + + def nearest_skim(oz, zones): + return ( + oz, + zones[np.argmin([skim_dict.lookup([oz], [az], "DIST") for az in zones])], + ) + + def nearest_node(oz, zones_df): + _idx = util.nearest_node_index(_centroids.loc[oz].XY, zones_df.to_list()) + return oz, zones_df.index[_idx] + + unique_origin_zones = choosers[origin_col].unique() + accessibility_zones = list(set(accessibility_df[origin_col])) + + # First find any choosers zones that are missing from accessibility zones + matched_zones = list(set(unique_origin_zones).intersection(accessibility_zones)) + unmatched_zones = list(set(unique_origin_zones).difference(accessibility_zones)) + + # Store choosers index to ensure consistency + _idx = choosers.index + + if method == "centroids": + # Extract and vectorize TAZ centroids + centroids = inject.get_table("maz_centroids").to_frame() + + # TODO.NF This is a bit hacky, needs some work for variable zone names + if "TAZ" in centroids.columns: + # Find the TAZ centroid as weighted average of MAZ centroids + _centroids = centroids[centroids.TAZ.isin(accessibility_zones)] + _centroids = _centroids[["TAZ", "X", "Y", "Area"]].set_index("TAZ") + _centroids = _centroids.groupby("TAZ").apply( + weighted_average, ["X", "Y"], "Area" + ) + else: + _centroids = centroids + + # create XY tuple columns to find the nearest node with + _centroids["XY"] = list(zip(_centroids.X, _centroids.Y)) + nearest = [nearest_node(Oz, _centroids.XY) for Oz in unmatched_zones] + + else: + skim_dict = inject.get_injectable("skim_dict") + nearest = [nearest_skim(Oz, accessibility_zones) for Oz in unmatched_zones] + + # Add the nearest zones to the matched zones + matched = [(x, x) for x in matched_zones] + matched += nearest + + # Create a DF and merge to choosers + matched_df = pd.DataFrame( + matched, columns=[origin_col, "nearest_accessibility_zone_id"] + ) + matched_df = choosers.reset_index().merge(matched_df, on=origin_col) + matched_df = matched_df.set_index(choosers.index.name) + + return matched_df.loc[_idx] + + +@inject.injectable() +def disaggregate_suffixes(): + return {"SUFFIX": None, "ROOTS": []} + + +@inject.table() +def maz_centroids(): + df = input.read_input_table("maz_centroids") + + if not df.index.is_monotonic_increasing: + df = df.sort_index() + + logger.info("loaded maz_centroids %s" % (df.shape,)) + + # replace table function with dataframe + inject.add_table("maz_centroids", df) + + return df + + +@inject.table() +def proto_disaggregate_accessibility(): + + # Read existing accessibilities, but is not required to enable model compatibility + df = input.read_input_table("proto_disaggregate_accessibility", required=False) + + # If no df, return empty dataframe to skip this model + if not df: + return pd.DataFrame() + + # Ensure canonical index order + if not df.index.is_monotonic_increasing: + df = df.sort_index() + + logger.info("loaded proto_disaggregate_accessibility %s" % (df.shape,)) + + # replace table function with dataframe + inject.add_table("proto_disaggregate_accessibility", df) + + return df + + +@inject.table() +def disaggregate_accessibility(persons, households, land_use, accessibility): + """ + This step initializes pre-computed disaggregate accessibility and merges it onto the full synthetic population. + Function adds merged all disaggregate accessibility tables to the pipeline but returns nothing. + + """ + + # If disaggregate_accessibilities do not exist in the pipeline, it will try loading csv of that name + proto_accessibility_df = pipeline.get_table("proto_disaggregate_accessibility") + + # If there is no table, skip. We do this first to skip as fast as possible + if proto_accessibility_df.empty: + return pd.DataFrame() + + # Get persons merged manually + persons_merged_df = inject.merge_tables( + persons.name, tables=[persons, households, land_use, accessibility] + ) + + # Extract model settings + model_settings = config.read_model_settings("disaggregate_accessibility.yaml") + merging_params = model_settings.get("MERGE_ON") + accessibility_cols = [ + x for x in proto_accessibility_df.columns if "accessibility" in x + ] + + # Parse the merging parameters + assert merging_params is not None + + # Check if already assigned! + if set(accessibility_cols).intersection(persons_merged_df.columns) == set( + accessibility_cols + ): + return + + # Find the nearest zone (spatially) with accessibilities calculated + # Note that from here on the 'home_zone_id' is the matched name + if "nearest_accessibility_zone_id" not in persons_merged_df.columns: + persons_merged_df = find_nearest_accessibility_zone( + persons_merged_df, proto_accessibility_df + ) + + # Copy home_zone_id in proto-table to match the temporary 'nearest_zone_id' + proto_accessibility_df[ + "nearest_accessibility_zone_id" + ] = proto_accessibility_df.home_zone_id + + # Set up the useful columns + exact_cols = merging_params.get("by", []) + if "home_zone_id" in exact_cols: + exact_cols.remove("home_zone_id") + exact_cols.insert(0, "nearest_accessibility_zone_id") + + nearest_cols = merging_params.get("asof", []) + merge_cols = exact_cols + nearest_cols + + assert len(nearest_cols) <= 1 + + # Setup and left and right tables. If asof join is used, it must be sorted. + # Drop duplicate accessibilities once filtered (may expect duplicates on households). + # Simply dropping duplicate households won't work if sampling is not 100% + # because it will get slightly different logsums for households in the same zone. + # This is because different destination zones were selected. To resolve, get mean by cols. + right_df = ( + proto_accessibility_df.groupby(merge_cols)[accessibility_cols] + .mean() + .sort_values(nearest_cols) + .reset_index() + ) + + left_df = persons_merged_df[merge_cols].sort_values(nearest_cols) + + if merging_params.get("method") == "soft": + # a 'soft' merge is possible by finding the nearest neighbor + x_pop, x_proto = left_df[exact_cols], right_df[exact_cols] + y = x_proto.index + + # Note: Naive Bayes is fast but discretely constrained. Some refinement may be necessary + # Index error here means data ranges don't match (e.g., age or hh veh is 0,1,2,3 but proto only has 0,1,2) + # The proto pop must at least be the same size or bigger. + clf = CategoricalNB() + clf.fit(x_proto, y) + + assert not any( + x_proto.duplicated() + ) # Ensure no duplicates, would mean we're missing a variable + # assert all(clf.predict(x_proto) == y) # Ensure it can at least predict on itself. If not there is a problem + # Also can just relax this constraint and report the accuracy to the user + accuracy = round(100 * sum(clf.predict(x_proto) == y) / len(y), 2) + print( + "Disaggregate accessibility merge training accuracy:" + " {}% (<100% typically means insufficient merge-on features.)".format( + accuracy + ) + ) + + # Predict the nearest person ID and pull the logsums + matched_logsums_df = right_df.loc[clf.predict(x_pop)][ + accessibility_cols + ].reset_index(drop=True) + merge_df = pd.concat( + [left_df.reset_index(drop=False), matched_logsums_df], axis=1 + ).set_index("person_id") + + else: + # merge_asof is sensitive to dataframe data types. Ensure consistency by 'upgrading' any int32 to int64 + for col in merge_cols: + if left_df[col].dtype is not right_df[col].dtype: + assert ptypes.is_integer_dtype( + left_df[col] + ) and ptypes.is_integer_dtype(right_df[col]) + datatype = np.max([left_df[col].dtype, right_df[col].dtype]) + left_df[col] = left_df[col].astype(datatype) + right_df[col] = right_df[col].astype(datatype) + + if nearest_cols: + merge_df = pd.merge_asof( + left=left_df, + right=right_df, + by=exact_cols, + on=nearest_cols, + direction="nearest", + ) + else: + merge_df = pd.merge( + left=left_df.reset_index(), right=right_df, on=exact_cols, how="left" + ) + merge_df = merge_df.set_index("person_id") + + # Check that it was correctly left-joined + assert all(persons_merged_df[merge_cols] == merge_df[merge_cols]) + assert any(merge_df[accessibility_cols].isnull()) + + # Inject merged accessibilities so that it can be included in persons_merged function + inject.add_table("disaggregate_accessibility", merge_df[accessibility_cols]) + + return merge_df[accessibility_cols] + + +inject.broadcast( + "disaggregate_accessibility", "persons", cast_index=True, onto_on="person_id" +) diff --git a/activitysim/abm/tables/persons.py b/activitysim/abm/tables/persons.py index a193b8f6d..8b756a940 100644 --- a/activitysim/abm/tables/persons.py +++ b/activitysim/abm/tables/persons.py @@ -69,8 +69,19 @@ def persons(households, trace_hh_id): # another common merge for persons @inject.table() -def persons_merged(persons, households, land_use, accessibility): - - return inject.merge_tables( - persons.name, tables=[persons, households, land_use, accessibility] - ) +def persons_merged( + persons, households, land_use, accessibility, disaggregate_accessibility +): + + if not disaggregate_accessibility.to_frame().empty: + tables = [ + persons, + households, + land_use, + accessibility, + disaggregate_accessibility, + ] + else: + tables = [persons, households, land_use, accessibility] + + return inject.merge_tables(persons.name, tables=tables) diff --git a/activitysim/abm/tables/shadow_pricing.py b/activitysim/abm/tables/shadow_pricing.py index 053b1dcbc..c3a9d25b8 100644 --- a/activitysim/abm/tables/shadow_pricing.py +++ b/activitysim/abm/tables/shadow_pricing.py @@ -11,6 +11,7 @@ from activitysim.abm.tables.size_terms import tour_destination_size_terms from activitysim.core import config, inject, tracing, util +from activitysim.core.input import read_input_table logger = logging.getLogger(__name__) @@ -19,9 +20,9 @@ See docstrings for documentation on: -update_shadow_prices how shadow_price coefficients are calculated -synchronize_choices interprocess communication to compute aggregate modeled_size -check_fit convergence criteria for shadow_pric iteration +update_shadow_prices how shadow_price coefficients are calculated +synchronize_modeled_size interprocess communication to compute aggregate modeled_size +check_fit convergence criteria for shadow_pric iteration Import concepts and variables: @@ -46,13 +47,19 @@ we use the first two rows of the final column in numpy-wrapped shared data as 'reverse semaphores' (they synchronize concurrent access to shared data resource rather than throttling access) -ShadowPriceCalculator.synchronize_choices coordinates access to the global aggregate zone counts +ShadowPriceCalculator.synchronize_modeled_size coordinates access to the global aggregate zone counts (local_modeled_size summed across all sub-processes) using these two semaphores (which are really only tuples of indexes of locations in the shared data array. """ TALLY_CHECKIN = (0, -1) TALLY_CHECKOUT = (1, -1) +default_segment_to_name_dict = { + # model_selector : persons_segment_name + "school": "school_segment", + "workplace": "income_segment", +} + def size_table_name(model_selector): """ @@ -72,10 +79,16 @@ def size_table_name(model_selector): class ShadowPriceCalculator(object): def __init__( - self, model_settings, num_processes, shared_data=None, shared_data_lock=None + self, + model_settings, + num_processes, + shared_data=None, + shared_data_lock=None, + shared_data_choice=None, + shared_data_choice_lock=None, + shared_sp_choice_df=None, ): """ - Presence of shared_data is used as a flag for multiprocessing If we are multiprocessing, shared_data should be a multiprocessing.RawArray buffer to aggregate modeled_size across all sub-processes, and shared_data_lock should be @@ -116,7 +129,7 @@ def __init__( self.segment_ids = model_settings["SEGMENT_IDS"] - # - modeled_size (set by call to set_choices/synchronize_choices) + # - modeled_size (set by call to set_choices/synchronize_modeled_size) self.modeled_size = None if self.use_shadow_pricing: @@ -147,11 +160,22 @@ def __init__( self.shared_data = shared_data self.shared_data_lock = shared_data_lock + self.shared_data_choice = shared_data_choice + self.shared_data_choice_lock = shared_data_choice_lock + + self.shared_sp_choice_df = shared_sp_choice_df + if shared_sp_choice_df is not None: + self.shared_sp_choice_df = self.shared_sp_choice_df.astype("int") + self.shared_sp_choice_df = self.shared_sp_choice_df.set_index("person_id") + self.shared_sp_choice_df["choice"] = int(0) + # - load saved shadow_prices (if available) and set max_iterations accordingly if self.use_shadow_pricing: self.shadow_prices = None self.shadow_price_method = self.shadow_settings["SHADOW_PRICE_METHOD"] - assert self.shadow_price_method in ["daysim", "ctramp"] + assert self.shadow_price_method in ["daysim", "ctramp", "simulation"] + # ignore convergence criteria for zones smaller than target_threshold + self.target_threshold = self.shadow_settings["TARGET_THRESHOLD"] if self.shadow_settings["LOAD_SAVED_SHADOW_PRICES"]: # read_saved_shadow_prices logs error and returns None if file not found @@ -181,6 +205,49 @@ def __init__( self.num_fail = pd.DataFrame(index=self.desired_size.columns) self.max_abs_diff = pd.DataFrame(index=self.desired_size.columns) self.max_rel_diff = pd.DataFrame(index=self.desired_size.columns) + self.choices_by_iteration = pd.DataFrame() + + if ( + self.use_shadow_pricing + and self.shadow_settings["SHADOW_PRICE_METHOD"] == "simulation" + ): + + assert self.model_selector in ["workplace", "school"] + self.sampled_persons = pd.DataFrame() + self.target = {} + land_use = inject.get_table("land_use").to_frame() + + if self.model_selector == "workplace": + employment_targets = self.shadow_settings[ + "workplace_segmentation_targets" + ] + assert ( + employment_targets is not None + ), "Need to supply workplace_segmentation_targets in shadow_pricing.yaml" + + for segment, target in employment_targets.items(): + assert ( + segment in self.shadow_prices.columns + ), f"{segment} is not in {self.shadow_prices.columns}" + assert ( + target in land_use.columns + ), f"{target} is not in {land_use.columns}" + self.target[segment] = land_use[target] + + elif self.model_selector == "school": + school_targets = self.shadow_settings["school_segmentation_targets"] + assert ( + school_targets is not None + ), "Need to supply school_segmentation_targets in shadow_pricing.yaml" + + for segment, target in school_targets.items(): + assert ( + segment in self.shadow_prices.columns + ), f"{segment} is not in {self.shadow_prices.columns}" + assert ( + target in land_use.columns + ), f"{target} is not in landuse columns: {land_use.columns}" + self.target[segment] = land_use[target] def read_saved_shadow_prices(self, model_settings): """ @@ -216,35 +283,25 @@ def read_saved_shadow_prices(self, model_settings): return shadow_prices - def synchronize_choices(self, local_modeled_size): + def synchronize_modeled_size(self, local_modeled_size): """ We have to wait until all processes have computed choices and aggregated them by segment and zone before we can compute global aggregate zone counts (by segment). Since the global zone counts are in shared data, we have to coordinate access to the data structure across sub-processes. - Note that all access to self.shared_data has to be protected by acquiring shared_data_lock - - ShadowPriceCalculator.synchronize_choices coordinates access to the global aggregate + ShadowPriceCalculator.synchronize_modeled_size coordinates access to the global aggregate zone counts (local_modeled_size summed across all sub-processes). - * All processes wait (in case we are iterating) until any stragglers from the previous iteration have exited the building. (TALLY_CHECKOUT goes to zero) - * Processes then add their local counts into the shared_data and increment TALLY_CHECKIN - * All processes wait until everybody has checked in (TALLY_CHECKIN == num_processes) - * Processes make local copy of shared_data and check out (increment TALLY_CHECKOUT) - * first_in process waits until all processes have checked out, then zeros shared_data and clears semaphores - Parameters ---------- local_modeled_size : pandas DataFrame - - Returns ------- global_modeled_size_df : pandas DataFrame @@ -303,6 +360,77 @@ def wait(tally, target): return global_modeled_size_df + def synchronize_choices(self, local_modeled_size): + """ + Same thing as the above synchronize_modeled_size method with the small + difference of keeping track of the individual choices instead of the + aggregate modeled choices between processes. + + Parameters + ---------- + local_modeled_size : pandas DataFrame + + + Returns + ------- + global_modeled_size_df : pandas DataFrame + local copy of shared global_modeled_size data as dataframe + with same shape and columns as local_modeled_size + """ + + # shouldn't be called if we are not multiprocessing + assert self.shared_data_choice is not None + assert self.num_processes > 1 + + def get_tally(t): + with self.shared_data_choice_lock: + return self.shared_data_choice[t] + + def wait(tally, target): + while get_tally(tally) != target: + time.sleep(1) + + # - nobody checks in until checkout clears + wait(TALLY_CHECKOUT, 0) + + # - add local_modeled_size data, increment TALLY_CHECKIN + with self.shared_data_choice_lock: + first_in = self.shared_data_choice[TALLY_CHECKIN] == 0 + # add local data from df to shared data buffer + # final column is used for tallys, hence the negative index + # Ellipsis expands : to fill available dims so [..., 0:-1] is the whole array except for the tallys + self.shared_data_choice[..., 0:-1] += local_modeled_size.values.astype( + np.int64 + ) + self.shared_data_choice[TALLY_CHECKIN] += 1 + + # - wait until everybody else has checked in + wait(TALLY_CHECKIN, self.num_processes) + + # - copy shared data, increment TALLY_CHECKIN + with self.shared_data_choice_lock: + logger.info("copy shared_data") + # numpy array with sum of local_modeled_size.values from all processes + global_modeled_size_array = self.shared_data_choice[..., 0:-1].copy() + self.shared_data_choice[TALLY_CHECKOUT] += 1 + + # - first in waits until all other processes have checked out, and cleans tub + if first_in: + wait(TALLY_CHECKOUT, self.num_processes) + with self.shared_data_choice_lock: + # zero shared_data, clear TALLY_CHECKIN, and TALLY_CHECKOUT semaphores + self.shared_data_choice[:] = 0 + logger.info("first_in clearing shared_data") + + # convert summed numpy array data to conform to original dataframe + global_modeled_size_df = pd.DataFrame( + data=global_modeled_size_array, + index=local_modeled_size.index, + columns=local_modeled_size.columns, + ) + + return global_modeled_size_df + def set_choices(self, choices, segment_ids): """ aggregate individual location choices to modeled_size by zone and segment @@ -330,10 +458,29 @@ def set_choices(self, choices, segment_ids): if self.num_processes == 1: # - not multiprocessing + self.choices_synced = choices self.modeled_size = modeled_size else: # - if we are multiprocessing, we have to aggregate across sub-processes - self.modeled_size = self.synchronize_choices(modeled_size) + self.modeled_size = self.synchronize_modeled_size(modeled_size) + + # need to also store individual choices if simulation approach + choice_merged = pd.merge( + self.shared_sp_choice_df, + choices, + left_index=True, + right_index=True, + how="left", + suffixes=("_x", "_y"), + ) + + choice_merged["choice_y"] = choice_merged["choice_y"].fillna(0) + choice_merged["choice"] = ( + choice_merged["choice_x"] + choice_merged["choice_y"] + ) + choice_merged = choice_merged.drop(columns=["choice_x", "choice_y"]) + + self.choices_synced = self.synchronize_choices(choice_merged) def check_fit(self, iteration): """ @@ -367,37 +514,87 @@ def check_fit(self, iteration): percent_tolerance = self.shadow_settings["PERCENT_TOLERANCE"] # max percentage of zones allowed to fail fail_threshold = self.shadow_settings["FAIL_THRESHOLD"] + # option to write out choices by iteration for each person to trace folder + write_choices = self.shadow_settings.get("WRITE_ITERATION_CHOICES", False) + if write_choices: + self.choices_by_iteration[iteration] = self.choices_synced - modeled_size = self.modeled_size - desired_size = self.desired_size + if self.shadow_settings["SHADOW_PRICE_METHOD"] != "simulation": - abs_diff = (desired_size - modeled_size).abs() + modeled_size = self.modeled_size + desired_size = self.desired_size - rel_diff = abs_diff / modeled_size + abs_diff = (desired_size - modeled_size).abs() - # ignore zones where desired_size < threshold - rel_diff.where(desired_size >= size_threshold, 0, inplace=True) + self.rel_diff = abs_diff / modeled_size - # ignore zones where rel_diff < percent_tolerance - rel_diff.where(rel_diff > (percent_tolerance / 100.0), 0, inplace=True) + # ignore zones where desired_size < threshold + self.rel_diff.where(desired_size >= size_threshold, 0, inplace=True) - self.num_fail["iter%s" % iteration] = (rel_diff > 0).sum() - self.max_abs_diff["iter%s" % iteration] = abs_diff.max() - self.max_rel_diff["iter%s" % iteration] = rel_diff.max() + # ignore zones where rel_diff < percent_tolerance + self.rel_diff.where( + self.rel_diff > (percent_tolerance / 100.0), 0, inplace=True + ) + + self.num_fail["iter%s" % iteration] = (self.rel_diff > 0).sum() + self.max_abs_diff["iter%s" % iteration] = abs_diff.max() + self.max_rel_diff["iter%s" % iteration] = self.rel_diff.max() + + total_fails = (self.rel_diff > 0).values.sum() + + # FIXME - should not count zones where desired_size < threshold? (could calc in init) + max_fail = (fail_threshold / 100.0) * util.iprod(desired_size.shape) + + converged = total_fails <= max_fail + + else: + rel_diff_df = pd.DataFrame(index=self.shadow_prices.index) + abs_diff_df = pd.DataFrame(index=self.shadow_prices.index) + # checking each segment + for segment in self.segment_ids: + desired_size = self.target[segment] + modeled_size = self.modeled_size[segment] + + # loop over other segments and add to modeled share if they have the same target + for other_segment in self.segment_ids: + if (segment != other_segment) & ( + self.target[segment].equals(self.target[other_segment]) + ): + modeled_size = modeled_size + self.modeled_size[other_segment] + + # want to match distribution, not absolute numbers so share is computed + desired_share = desired_size / desired_size.sum() + modeled_share = modeled_size / modeled_size.sum() + + abs_diff_df[segment] = (desired_size - modeled_size).abs() + + rel_diff = desired_share / modeled_share + rel_diff = np.where( + # is the desired size below the threshold? + (desired_size <= self.target_threshold) + # is the difference within the tolerance? + | (np.abs(1 - rel_diff) < (percent_tolerance / 100.0)), + 0, + rel_diff, + ) + rel_diff_df[segment] = rel_diff - total_fails = (rel_diff > 0).values.sum() + # relative difference is set to max across segments + self.rel_diff = rel_diff_df.max(axis=1) + abs_diff = abs_diff_df.max(axis=1) - # FIXME - should not count zones where desired_size < threshold? (could calc in init) - max_fail = (fail_threshold / 100.0) * util.iprod(desired_size.shape) + self.num_fail["iter%s" % iteration] = (self.rel_diff > 0).sum() + self.max_abs_diff["iter%s" % iteration] = abs_diff.max() + self.max_rel_diff["iter%s" % iteration] = rel_diff.max() - converged = total_fails <= max_fail + total_fails = (self.rel_diff > 0).values.sum() - # for c in desired_size: - # print("check_fit %s segment %s" % (self.model_selector, c)) - # print(" modeled %s" % (modeled_size[c].sum())) - # print(" desired %s" % (desired_size[c].sum())) - # print(" max abs diff %s" % (abs_diff[c].max())) - # print(" max rel diff %s" % (rel_diff[c].max())) + # FIXME - should not count zones where desired_size < threshold? (could calc in init) + max_fail = (fail_threshold / 100.0) * util.iprod(desired_size.shape) + + converged = (total_fails <= np.ceil(max_fail)) | ( + (iteration > 1) & (len(self.sampled_persons) == 0) + ) logger.info( "check_fit %s iteration: %s converged: %s max_fail: %s total_fails: %s" @@ -410,6 +607,13 @@ def check_fit(self, iteration): logger.info("\nshadow_pricing max_rel_diff\n%s" % self.max_rel_diff) logger.info("\nshadow_pricing num_fail\n%s" % self.num_fail) + if write_choices: + tracing.write_csv( + self.choices_by_iteration, + "%s_choices_by_shadow_price_iteration" % self.model_selector, + transpose=False, + ) + return converged def update_shadow_prices(self): @@ -519,15 +723,104 @@ def update_shadow_prices(self): new_shadow_prices = self.shadow_prices + adjustment + elif shadow_price_method == "simulation": + # - NewMethod + """ + C_j = (emp_j/sum(emp_j))/(workers_j/sum(workers_j)) + + if C_j > 1: #under-estimate workers in zone + + shadow_price_j = 0 + + elif C_j < 1: #over-estimate workers in zone + + shadow_price_j = -999 + resimulate n workers from zone j, with n = int(workers_j-emp_j/sum(emp_j*workers_j)) + """ + percent_tolerance = self.shadow_settings["PERCENT_TOLERANCE"] + sampled_persons = pd.DataFrame() + persons_merged = inject.get_table("persons_merged").to_frame() + + # need to join the segment to the choices to sample correct persons + segment_to_name_dict = self.shadow_settings.get( + "", default_segment_to_name_dict + ) + segment_name = segment_to_name_dict[self.model_selector] + choices_synced = self.choices_synced.merge( + persons_merged[segment_name], + how="left", + left_index=True, + right_index=True, + ).rename(columns={segment_name: "segment"}) + + for segment in self.segment_ids: + desired_size = self.target[segment] + modeled_size = self.modeled_size[segment] + + # loop over other segments and add to modeled share if they have the same target + for other_segment in self.segment_ids: + if (segment != other_segment) & ( + self.target[segment].equals(self.target[other_segment]) + ): + modeled_size = modeled_size + self.modeled_size[other_segment] + + # want to match distribution, not absolute numbers so share is computed + desired_share = desired_size / desired_size.sum() + modeled_share = modeled_size / modeled_size.sum() + + sprice = desired_share / modeled_share + sprice.fillna(0, inplace=True) + sprice.replace([np.inf, -np.inf], 0, inplace=True) + + # shadow prices are set to -999 if overassigned or 0 if the zone still has room for this segment + self.shadow_prices[segment] = np.where( + (sprice <= 1 + percent_tolerance / 100), -999, 0 + ) + + zonal_sample_rate = 1 - sprice + overpredicted_zones = self.shadow_prices[ + self.shadow_prices[segment] == -999 + ].index + zones_outside_tol = zonal_sample_rate[ + zonal_sample_rate > percent_tolerance / 100 + ].index + small_zones = desired_size[desired_size <= self.target_threshold].index + + choices = choices_synced[ + (choices_synced["choice"].isin(overpredicted_zones)) + & (choices_synced["choice"].isin(zones_outside_tol)) + & ~(choices_synced["choice"].isin(small_zones)) + # sampling only from people in this segment + & (choices_synced["segment"] == self.segment_ids[segment]) + ]["choice"] + + choices_index = choices.index.name + choices = choices.reset_index() + + # handling unlikely cases where there are no more overassigned zones, but a few underassigned zones remain + if len(choices) > 0: + current_sample = ( + choices.groupby("choice") + .apply( + # FIXME is this sample stable? + lambda x: x.sample( + frac=zonal_sample_rate.loc[x.name], random_state=1 + ) + ) + .reset_index(drop=True) + .set_index(choices_index) + ) + if len(sampled_persons) == 0: + sampled_persons = current_sample + else: + sampled_persons = pd.concat([sampled_persons, current_sample]) + + self.sampled_persons = sampled_persons + else: raise RuntimeError("unknown SHADOW_PRICE_METHOD %s" % shadow_price_method) - # print("\nself.desired_size\n%s" % self.desired_size.head()) - # print("\nself.modeled_size\n%s" % self.modeled_size.head()) - # print("\nprevious shadow_prices\n%s" % self.shadow_prices.head()) - # print("\nnew_shadow_prices\n%s" % new_shadow_prices.head()) - - self.shadow_prices = new_shadow_prices + # self.shadow_prices = new_shadow_prices def dest_size_terms(self, segment): @@ -544,6 +837,8 @@ def dest_size_terms(self, segment): size_term_adjustment = self.shadow_prices[segment] elif shadow_price_method == "daysim": utility_adjustment = self.shadow_prices[segment] + elif shadow_price_method == "simulation": + utility_adjustment = self.shadow_prices[segment] else: raise RuntimeError( "unknown SHADOW_PRICE_METHOD %s" % shadow_price_method @@ -673,6 +968,121 @@ def buffers_for_shadow_pricing(shadow_pricing_info): return data_buffers +def buffers_for_shadow_pricing_choice(shadow_pricing_choice_info): + """ + Same as above buffers_for_shadow_price function except now we need to store + the actual choices for the simulation based shadow pricing method + + This allocates a multiprocessing.Array that can store the choice for each person + and then wraps a dataframe around it. That means the dataframe can be shared + and accessed across all threads. + Parameters + ---------- + shadow_pricing_info : dict + Returns + ------- + data_buffers : dict { : } + dict of multiprocessing.Array keyed by model_selector + and wrapped in a pandas dataframe + """ + + dtype = shadow_pricing_choice_info["dtype"] + block_shapes = shadow_pricing_choice_info["block_shapes"] + + data_buffers = {} + + for block_key, block_shape in block_shapes.items(): + + # buffer_size must be int, not np.int64 + buffer_size = util.iprod(block_shape) + + csz = buffer_size * np.dtype(dtype).itemsize + logger.info( + "allocating shared shadow pricing buffer for choices %s %s buffer_size %s bytes %s (%s)" + % (block_key, buffer_size, block_shape, csz, util.GB(csz)) + ) + + if np.issubdtype(dtype, np.int64): + typecode = ctypes.c_int64 + else: + raise RuntimeError( + "buffer_for_shadow_pricing unrecognized dtype %s" % dtype + ) + + shared_data_buffer = multiprocessing.Array(typecode, buffer_size) + + logger.info("buffer_for_shadow_pricing_choice added block %s" % block_key) + + data_buffers[block_key + "_choice"] = shared_data_buffer + + persons = read_input_table("persons") + sp_choice_df = persons.reset_index()["person_id"].to_frame() + + # declare a shared Array with data from sp_choice_df + mparr = multiprocessing.Array(ctypes.c_double, sp_choice_df.values.reshape(-1)) + + # create a new df based on the shared array + shared_sp_choice_df = pd.DataFrame( + np.frombuffer(mparr.get_obj()).reshape(sp_choice_df.shape), + columns=sp_choice_df.columns, + ) + data_buffers["shadow_price_choice_df"] = shared_sp_choice_df + + return data_buffers + + +def shadow_price_data_from_buffers_choice( + data_buffers, shadow_pricing_info, model_selector +): + """ + + Parameters + ---------- + data_buffers : dict of { : } + multiprocessing.Array is simply a convenient way to bundle Array and Lock + we extract the lock and wrap the RawArray in a numpy array for convenience in indexing + The shared data buffer has shape ( + 1) + extra column is for reverse semaphores with TALLY_CHECKIN and TALLY_CHECKOUT + shadow_pricing_info : dict + dict of useful info + dtype: sp_dtype, + block_shapes : OrderedDict({: }) + dict mapping model_selector to block shape (including extra column for semaphores) + e.g. {'school': (num_zones, num_segments + 1) + model_selector : str + location type model_selector (e.g. school or workplace) + + Returns + ------- + shared_data, shared_data_lock + shared_data : multiprocessing.Array or None (if single process) + shared_data_lock : numpy array wrapping multiprocessing.RawArray or None (if single process) + """ + + assert type(data_buffers) == dict + + dtype = shadow_pricing_info["dtype"] + block_shapes = shadow_pricing_info["block_shapes"] + + if model_selector not in block_shapes: + raise RuntimeError( + "Model selector %s not in shadow_pricing_info" % model_selector + ) + + if block_name(model_selector + "_choice") not in data_buffers: + raise RuntimeError( + "Block %s not in data_buffers" % block_name(model_selector + "_choice") + ) + + data = data_buffers[block_name(model_selector + "_choice")] + shape = ( + int(len(data) / block_shapes[model_selector][1]), + int(block_shapes[model_selector][1]), + ) + + return np.frombuffer(data.get_obj(), dtype=dtype).reshape(shape), data.get_lock() + + def shadow_price_data_from_buffers(data_buffers, shadow_pricing_info, model_selector): """ @@ -747,23 +1157,47 @@ def load_shadow_price_calculator(model_settings): shadow_pricing_info = inject.get_injectable("shadow_pricing_info", None) assert shadow_pricing_info is not None + shadow_pricing_choice_info = inject.get_injectable( + "shadow_pricing_choice_info", None + ) + assert shadow_pricing_choice_info is not None + # - extract data buffer and reshape as numpy array data, lock = shadow_price_data_from_buffers( data_buffers, shadow_pricing_info, model_selector ) + data_choice, lock_choice = shadow_price_data_from_buffers_choice( + data_buffers, shadow_pricing_choice_info, model_selector + ) + if "shadow_price_choice_df" in data_buffers: + shared_sp_choice_df = data_buffers["shadow_price_choice_df"] + else: + shared_sp_choice_df = None + else: assert num_processes == 1 data = None # ShadowPriceCalculator will allocate its own data lock = None + data_choice = None + lock_choice = None + shared_sp_choice_df = None # - ShadowPriceCalculator - spc = ShadowPriceCalculator(model_settings, num_processes, data, lock) + spc = ShadowPriceCalculator( + model_settings, + num_processes, + data, + lock, + data_choice, + lock_choice, + shared_sp_choice_df, + ) return spc @inject.step() -def add_size_tables(): +def add_size_tables(disaggregate_suffixes): """ inject tour_destination_size_terms tables for each model_selector (e.g. school, workplace) @@ -798,6 +1232,22 @@ def add_size_tables(): # but this allows compatability with existing CTRAMP behavior... scale_size_table = shadow_settings.get("SCALE_SIZE_TABLE", False) + # Suffixes for disaggregate accessibilities + # Set default here incase None is explicitly passed + disaggregate_suffixes = ( + {"SUFFIX": None, "ROOTS": []} + if not disaggregate_suffixes + else disaggregate_suffixes + ) + suffix, roots = disaggregate_suffixes.get("SUFFIX"), disaggregate_suffixes.get( + "ROOTS", [] + ) + + assert isinstance(roots, list) + assert (suffix is not None and roots) or ( + suffix is None and not roots + ), "Expected to find both 'ROOTS' and 'SUFFIX', missing one" + # shadow_pricing_models is dict of {: } # since these are scaled to model size, they have to be created while single-process @@ -805,6 +1255,11 @@ def add_size_tables(): model_settings = config.read_model_settings(model_name) + if suffix is not None and roots: + model_settings = util.suffix_tables_in_settings( + model_settings, suffix, roots + ) + assert model_selector == model_settings["MODEL_SELECTOR"] assert ( @@ -918,6 +1373,52 @@ def get_shadow_pricing_info(): return shadow_pricing_info +def get_shadow_pricing_choice_info(): + """ + return dict with info about dtype and shapes of desired and modeled size tables + + block shape is (num_zones, num_segments + 1) + + + Returns + ------- + shadow_pricing_info: dict + dtype: , + block_shapes: dict {: } + """ + + persons = read_input_table("persons") + + shadow_settings = config.read_model_settings("shadow_pricing.yaml") + + # shadow_pricing_models is dict of {: } + shadow_pricing_models = shadow_settings.get("shadow_pricing_models", {}) + + blocks = OrderedDict() + for model_selector in shadow_pricing_models: + + # each person will have a work or school location choice + sp_rows = len(persons) + + # extra tally column for TALLY_CHECKIN and TALLY_CHECKOUT semaphores + blocks[block_name(model_selector)] = (sp_rows, 2) + + sp_dtype = np.int64 + # sp_dtype = np.str + + shadow_pricing_choice_info = { + "dtype": sp_dtype, + "block_shapes": blocks, + } + + for k in shadow_pricing_choice_info: + logger.debug( + "shadow_pricing_choice_info %s: %s" % (k, shadow_pricing_choice_info.get(k)) + ) + + return shadow_pricing_choice_info + + @inject.injectable(cache=True) def shadow_pricing_info(): @@ -926,3 +1427,13 @@ def shadow_pricing_info(): logger.debug("loading shadow_pricing_info injectable") return get_shadow_pricing_info() + + +@inject.injectable(cache=True) +def shadow_pricing_choice_info(): + + # when multiprocessing with shared data mp_tasks has to call network_los methods + # get_shadow_pricing_info() and buffers_for_shadow_pricing() + logger.debug("loading shadow_pricing_choice_info injectable") + + return get_shadow_pricing_choice_info() diff --git a/activitysim/abm/tables/vehicles.py b/activitysim/abm/tables/vehicles.py index ab6a9d011..fdc886a25 100644 --- a/activitysim/abm/tables/vehicles.py +++ b/activitysim/abm/tables/vehicles.py @@ -38,7 +38,7 @@ def vehicles(households): inject.add_table("vehicles", vehicles) pipeline.get_rn_generator().add_channel("vehicles", vehicles) - tracing.register_traceable_table("households", vehicles) + tracing.register_traceable_table("vehicles", vehicles) return vehicles diff --git a/activitysim/core/config.py b/activitysim/core/config.py index 02d6fadea..0f0003673 100644 --- a/activitysim/core/config.py +++ b/activitysim/core/config.py @@ -11,6 +11,7 @@ import yaml from activitysim.core import inject +from activitysim.core import util logger = logging.getLogger(__name__) @@ -461,6 +462,14 @@ def backfill_settings(settings, backfill): set(configs_dir_list) ), f"repeating file names not allowed in config_dir list: {configs_dir_list}" + args = util.parse_suffix_args(file_name) + file_name = args.filename + + assert isinstance(args.ROOTS, list) + assert (args.SUFFIX is not None and args.ROOTS) or ( + args.SUFFIX is None and not args.ROOTS + ), ("Expected to find both 'ROOTS' and 'SUFFIX' in %s, missing one" % args.filename) + if not file_name.lower().endswith(".yaml"): file_name = "%s.yaml" % (file_name,) @@ -565,6 +574,10 @@ def backfill_settings(settings, backfill): if mandatory and not settings: raise SettingsFileNotFound(file_name, configs_dir_list) + # Adds proto_ suffix for disaggregate accessibilities + if args.SUFFIX is not None and args.ROOTS: + settings = util.suffix_tables_in_settings(settings, args.SUFFIX, args.ROOTS) + if include_stack: # if we were called recursively, return an updated list of source_file_paths return settings, source_file_paths diff --git a/activitysim/core/expressions.py b/activitysim/core/expressions.py index a64f66523..f090ef4ef 100644 --- a/activitysim/core/expressions.py +++ b/activitysim/core/expressions.py @@ -2,11 +2,16 @@ # See full license in LICENSE.txt. import logging +import argparse import numpy as np import pandas as pd from activitysim.core import assign, config, inject, simulate, tracing -from activitysim.core.util import assign_in_place +from activitysim.core.util import ( + assign_in_place, + suffix_expressions_df_str, + parse_suffix_args, +) logger = logging.getLogger(__name__) @@ -51,6 +56,21 @@ def compute_columns(df, model_settings, locals_dict={}, trace_label=None): helper_table_names = model_settings.get("TABLES", []) expressions_spec_name = model_settings.get("SPEC", None) + # Extract suffix for disaggregate accessibilities. + # The suffix args can either be passed in the model settings or as part of the config file string. + # Awkward, but avoids having to put positional arguments in every single asim function. + args = parse_suffix_args(expressions_spec_name) + + expressions_spec_name = args.filename + suffix = model_settings.get("SUFFIX", args.SUFFIX) + roots = model_settings.get("ROOTS", args.ROOTS) + + assert isinstance(roots, list) + assert (suffix is not None and roots) or (suffix is None and not roots), ( + "Expected to find both 'ROOTS' and 'SUFFIX' in %s, missing one" + % model_settings_name + ) + assert expressions_spec_name is not None, ( "Expected to find 'SPEC' in %s" % model_settings_name ) @@ -62,10 +82,14 @@ def compute_columns(df, model_settings, locals_dict={}, trace_label=None): logger.debug( f"{trace_label} compute_columns using expression spec file {expressions_spec_name}" ) + expressions_spec = assign.read_assignment_spec( config.config_file_path(expressions_spec_name) ) + if suffix is not None and roots: + expressions_spec = suffix_expressions_df_str(expressions_spec, suffix, roots) + assert expressions_spec.shape[0] > 0, ( "Expected to find some assignment expressions in %s" % expressions_spec_name ) diff --git a/activitysim/core/interaction_sample_simulate.py b/activitysim/core/interaction_sample_simulate.py index 776df91d4..881fcd566 100644 --- a/activitysim/core/interaction_sample_simulate.py +++ b/activitysim/core/interaction_sample_simulate.py @@ -25,6 +25,7 @@ def _interaction_sample_simulate( trace_label, trace_choice_name, estimator, + skip_choice=False, ): """ @@ -266,66 +267,70 @@ def _interaction_sample_simulate( # FIXME this is kind of gnarly, but we force choice of first alt probs.loc[zero_probs, 0] = 1.0 - # make choices - # positions is series with the chosen alternative represented as a column index in probs - # which is an integer between zero and num alternatives in the alternative sample - positions, rands = logit.make_choices( - probs, trace_label=trace_label, trace_choosers=choosers - ) + if skip_choice: + return choosers.join(logsums.to_frame("logsums")) - chunk.log_df(trace_label, "positions", positions) - chunk.log_df(trace_label, "rands", rands) + else: + # make choices + # positions is series with the chosen alternative represented as a column index in probs + # which is an integer between zero and num alternatives in the alternative sample + positions, rands = logit.make_choices( + probs, trace_label=trace_label, trace_choosers=choosers + ) - del probs - chunk.log_df(trace_label, "probs", None) + chunk.log_df(trace_label, "positions", positions) + chunk.log_df(trace_label, "rands", rands) - # shouldn't have chosen any of the dummy pad utilities - assert positions.max() < max_sample_count + del probs + chunk.log_df(trace_label, "probs", None) - # need to get from an integer offset into the alternative sample to the alternative index - # that is, we want the index value of the row that is offset by rows into the - # tranche of this choosers alternatives created by cross join of alternatives and choosers + # shouldn't have chosen any of the dummy pad utilities + assert positions.max() < max_sample_count - # resulting pandas Int64Index has one element per chooser row and is in same order as choosers - choices = alternatives[choice_column].take(positions + first_row_offsets) + # need to get from an integer offset into the alternative sample to the alternative index + # that is, we want the index value of the row that is offset by rows into the + # tranche of this choosers alternatives created by cross join of alternatives and choosers - # create a series with index from choosers and the index of the chosen alternative - choices = pd.Series(choices, index=choosers.index) + # resulting pandas Int64Index has one element per chooser row and is in same order as choosers + choices = alternatives[choice_column].take(positions + first_row_offsets) - chunk.log_df(trace_label, "choices", choices) + # create a series with index from choosers and the index of the chosen alternative + choices = pd.Series(choices, index=choosers.index) - if allow_zero_probs and zero_probs.any(): - # FIXME this is kind of gnarly, patch choice for zero_probs - choices.loc[zero_probs] = zero_prob_choice_val + chunk.log_df(trace_label, "choices", choices) - if have_trace_targets: - tracing.trace_df( - choices, - tracing.extend_trace_label(trace_label, "choices"), - columns=[None, trace_choice_name], - ) - tracing.trace_df( - rands, - tracing.extend_trace_label(trace_label, "rands"), - columns=[None, "rand"], - ) - if want_logsums: + if allow_zero_probs and zero_probs.any(): + # FIXME this is kind of gnarly, patch choice for zero_probs + choices.loc[zero_probs] = zero_prob_choice_val + + if have_trace_targets: + tracing.trace_df( + choices, + tracing.extend_trace_label(trace_label, "choices"), + columns=[None, trace_choice_name], + ) tracing.trace_df( - logsums, - tracing.extend_trace_label(trace_label, "logsum"), - columns=[None, "logsum"], + rands, + tracing.extend_trace_label(trace_label, "rands"), + columns=[None, "rand"], ) + if want_logsums: + tracing.trace_df( + logsums, + tracing.extend_trace_label(trace_label, "logsum"), + columns=[None, "logsum"], + ) - if want_logsums: - choices = choices.to_frame("choice") - choices["logsum"] = logsums + if want_logsums: + choices = choices.to_frame("choice") + choices["logsum"] = logsums - chunk.log_df(trace_label, "choices", choices) + chunk.log_df(trace_label, "choices", choices) - # handing this off to our caller - chunk.log_df(trace_label, "choices", None) + # handing this off to our caller + chunk.log_df(trace_label, "choices", None) - return choices + return choices def interaction_sample_simulate( @@ -344,6 +349,7 @@ def interaction_sample_simulate( trace_label=None, trace_choice_name=None, estimator=None, + skip_choice=False, ): """ @@ -383,6 +389,9 @@ def interaction_sample_simulate( when household tracing enabled. No tracing occurs if label is empty or None. trace_choice_name: str This is the column label to be used in trace file csv dump of choices + skip_choice: bool + This skips the logit choice step and simply returns the alternatives table with logsums + (used in disaggregate accessibility) Returns ------- @@ -428,6 +437,7 @@ def interaction_sample_simulate( chunk_trace_label, trace_choice_name, estimator, + skip_choice, ) result_list.append(choices) diff --git a/activitysim/core/mp_tasks.py b/activitysim/core/mp_tasks.py index 1d41c7c96..429ff2e86 100644 --- a/activitysim/core/mp_tasks.py +++ b/activitysim/core/mp_tasks.py @@ -1056,6 +1056,33 @@ def allocate_shared_shadow_pricing_buffers(): return shadow_pricing_buffers +def allocate_shared_shadow_pricing_buffers_choice(): + """ + This is called by the main process to allocate memory buffer to share with subprocs + + Returns + ------- + multiprocessing.RawArray + """ + + info("allocate_shared_shadow_pricing_buffers_choice") + + shadow_pricing_choice_info = inject.get_injectable( + "shadow_pricing_choice_info", None + ) + + if shadow_pricing_choice_info is not None: + from activitysim.abm.tables import shadow_pricing + + shadow_pricing_buffers_choice = ( + shadow_pricing.buffers_for_shadow_pricing_choice(shadow_pricing_choice_info) + ) + else: + shadow_pricing_buffers_choice = {} + + return shadow_pricing_buffers_choice + + def run_sub_simulations( injectables, shared_data_buffers, @@ -1401,6 +1428,12 @@ def find_breadcrumb(crumb, default=None): t0 = tracing.print_elapsed_time("allocate shared shadow_pricing buffer", t0) mem.trace_memory_info("allocate_shared_shadow_pricing_buffers.completed") + # combine shared_shadow_pricing_buffers to pool choices across all processes + t0 = tracing.print_elapsed_time() + shared_data_buffers.update(allocate_shared_shadow_pricing_buffers_choice()) + t0 = tracing.print_elapsed_time("allocate shared shadow_pricing choice buffer", t0) + mem.trace_memory_info("allocate_shared_shadow_pricing_buffers_choice.completed") + # - mp_setup_skims if len(shared_data_buffers) > 0: run_sub_task( diff --git a/activitysim/core/tracing.py b/activitysim/core/tracing.py index 22098065e..c81e21179 100644 --- a/activitysim/core/tracing.py +++ b/activitysim/core/tracing.py @@ -303,7 +303,8 @@ def register_traceable_table(table_name, df): return new_traced_ids = [] - if table_name == "households": + # if table_name == "households": + if table_name in ["households", "proto_households"]: if trace_hh_id not in df.index: logger.warning("trace_hh_id %s not in dataframe" % trace_hh_id) new_traced_ids = [] @@ -755,15 +756,32 @@ def interaction_trace_rows(interaction_df, choosers, sample_size=None): traceable_table_ids = inject.get_injectable("traceable_table_ids", {}) - if choosers.index.name == "person_id" and "persons" in traceable_table_ids: + # Determine whether actual tables or proto_ tables for disaggregate accessibilities + persons_table_name = set(traceable_table_ids).intersection( + ["persons", "proto_persons"] + ) + households_table_name = set(traceable_table_ids).intersection( + ["households", "proto_households"] + ) + + assert len(persons_table_name) == 1 and len(persons_table_name) == 1 + persons_table_name, households_table_name = ( + persons_table_name.pop(), + households_table_name.pop(), + ) + + if choosers.index.name == "person_id" and persons_table_name in traceable_table_ids: slicer_column_name = choosers.index.name - targets = traceable_table_ids["persons"] - elif "household_id" in choosers.columns and "households" in traceable_table_ids: + targets = traceable_table_ids[persons_table_name] + elif ( + "household_id" in choosers.columns + and households_table_name in traceable_table_ids + ): slicer_column_name = "household_id" - targets = traceable_table_ids["households"] - elif "person_id" in choosers.columns and "persons" in traceable_table_ids: + targets = traceable_table_ids[households_table_name] + elif "person_id" in choosers.columns and persons_table_name in traceable_table_ids: slicer_column_name = "person_id" - targets = traceable_table_ids["persons"] + targets = traceable_table_ids[persons_table_name] else: print(choosers.columns) raise RuntimeError( diff --git a/activitysim/core/util.py b/activitysim/core/util.py index 9a2f5c18d..c7030bc86 100644 --- a/activitysim/core/util.py +++ b/activitysim/core/util.py @@ -3,6 +3,7 @@ import logging import os +import argparse from builtins import zip from operator import itemgetter @@ -10,6 +11,9 @@ import cytoolz.curried import numpy as np import pandas as pd +import itertools +import yaml +import collections logger = logging.getLogger(__name__) @@ -378,3 +382,92 @@ def df_from_dict(values, index=None): # del values[c] return df + + +# for disaggregate accessibilities + + +def ordered_load( + stream, Loader=yaml.SafeLoader, object_pairs_hook=collections.OrderedDict +): + class OrderedLoader(Loader): + pass + + def construct_mapping(loader, node): + loader.flatten_mapping(node) + return object_pairs_hook(loader.construct_pairs(node)) + + OrderedLoader.add_constructor( + yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, construct_mapping + ) + return yaml.load(stream, OrderedLoader) + + +def named_product(**d): + names = d.keys() + vals = d.values() + for res in itertools.product(*vals): + yield dict(zip(names, res)) + + +def recursive_replace(obj, search, replace): + if isinstance(obj, dict): + for k, v in obj.items(): + obj[k] = recursive_replace(v, search, replace) + if isinstance(obj, list): + obj = [replace if x == search else x for x in obj] + if search == obj: + obj = replace + return obj + + +def suffix_tables_in_settings( + model_settings, + suffix="proto_", + tables=["persons", "households", "tours", "persons_merged"], +): + for k in tables: + model_settings = recursive_replace(model_settings, k, suffix + k) + return model_settings + + +def suffix_expressions_df_str( + df, suffix="proto_", tables=["persons", "households", "tours", "persons_merged"] +): + for k in tables: + df["expression"] = df.expression.str.replace(k, suffix + k) + return df + + +def parse_suffix_args(args): + parser = argparse.ArgumentParser() + parser.add_argument("filename", help="file name") + parser.add_argument("-s", "--SUFFIX", "-s", help="suffix to replace root targets") + parser.add_argument( + "-r", "--ROOTS", nargs="*", help="roots be suffixed", default=[] + ) + return parser.parse_args(args.split()) + + +def concat_suffix_dict(args): + if isinstance(args, dict): + args = sum([["--" + k, v] for k, v in args.items()], []) + if isinstance(args, list): + args = list(flatten(args)) + return args + + +def flatten(lst): + for sublist in lst: + if isinstance(sublist, list): + for item in sublist: + yield item + else: + yield sublist + + +def nearest_node_index(node, nodes): + nodes = np.asarray(nodes) + deltas = nodes - node + dist_2 = np.einsum("ij,ij->i", deltas, deltas) + return np.argmin(dist_2) diff --git a/activitysim/examples/placeholder_sandag/configs_3_zone/tour_mode_choice.csv b/activitysim/examples/placeholder_sandag/configs_3_zone/tour_mode_choice.csv index 609454d2e..920c21625 100644 --- a/activitysim/examples/placeholder_sandag/configs_3_zone/tour_mode_choice.csv +++ b/activitysim/examples/placeholder_sandag/configs_3_zone/tour_mode_choice.csv @@ -187,3 +187,6 @@ util_Walk_not_available_for_long_distances,Walk not available for long distances util_Bike_not_available_for_long_distances,Bike not available for long distances,@df.distance_bike_od > 8,,,,,,,,-999,,,,, util_Drive_alone_not_available_for_escort_tours,Drive alone not available for escort tours,is_escort,-999,-999,,,,,,,,,,, #, max(c_densityIndexOrigin*originDensityIndex,originDensityIndexMax),,,,,,,,,1,1,,, +#, School Escorting eligibility,,,,,,,,,,,,,,,,,,,,,, +util_one_or_more_school_escort,No SOV if on school escort tour,"@(df.get('num_escortees', 0) >= 1)",-999,-999,,,,,,,,,,, +util_two_or_more_school_escort,Can't take HOV2 if taking two children and yourself,"@(df.get('num_escortees', 0) >= 2)",,,-999,-999,,,,,,,,, \ No newline at end of file diff --git a/activitysim/examples/placeholder_sandag/configs_3_zone/trip_mode_choice.csv b/activitysim/examples/placeholder_sandag/configs_3_zone/trip_mode_choice.csv index 30952ec5d..e6bb38fdd 100644 --- a/activitysim/examples/placeholder_sandag/configs_3_zone/trip_mode_choice.csv +++ b/activitysim/examples/placeholder_sandag/configs_3_zone/trip_mode_choice.csv @@ -193,3 +193,6 @@ util_Bike_not_available_for_long_distances,Bike not available for long distances util_origin_density_index,Origin density index,@origin_density_applied*(origin_density_index_multiplier*df.origin_density_index).clip(origin_density_index_max),,,,,,,coef_ivt,coef_ivt,coef_ivt,coef_ivt,,coef_ivt,coef_ivt util_walk_express_penalty,Walk-express penalty for intermediate stops,@walk_express_penalty * ~(df.first_trip | df.first_trip),,,,,,,,,,,,, util_adjust_tnc_shared,TNC shared adjustment,@adjust_tnc_shared,,,,,,,,,,,,,coef_ivt +#, School Escorting eligibility,,,,,,,,,,,,,,,,,,,,,, +util_one_or_more_school_escort,No SOV if on school escort tour,(num_escortees >= 1),-999,-999,,,,,,,,,,, +util_two_or_more_school_escort,Can't take HOV2 if taking two children and yourself,(num_escortees >= 2),,,-999,-999,,,,,,,,, \ No newline at end of file diff --git a/activitysim/examples/placeholder_sandag/configs_3_zone/trip_mode_choice_annotate_trips_preprocessor.csv b/activitysim/examples/placeholder_sandag/configs_3_zone/trip_mode_choice_annotate_trips_preprocessor.csv index e07c28f0b..ea84ab8c8 100644 --- a/activitysim/examples/placeholder_sandag/configs_3_zone/trip_mode_choice_annotate_trips_preprocessor.csv +++ b/activitysim/examples/placeholder_sandag/configs_3_zone/trip_mode_choice_annotate_trips_preprocessor.csv @@ -63,7 +63,7 @@ dest terminal time not counted at home,_dest_terminal_time,"np.where(inbound & l ,destination_walk_time,shortWalk*60/walkSpeed # RIDEHAIL,, ,origin_density_measure,"(reindex(land_use.TOTPOP, df[orig_col_name]) + reindex(land_use.TOTEMP, df[orig_col_name])) / (reindex(land_use.TOTACRE, df[orig_col_name]) / 640)" -,origin_density,"pd.cut(origin_density_measure, bins=[-np.inf, 500, 2000, 5000, 15000, np.inf], labels=[5, 4, 3, 2, 1]).astype(int)" +,origin_density,"pd.cut(origin_density_measure.fillna(0), bins=[-np.inf, 500, 2000, 5000, 15000, np.inf], labels=[5, 4, 3, 2, 1]).astype(int)" ,origin_zone_taxi_wait_time_mean,"origin_density.map({k: v for k, v in Taxi_waitTime_mean.items()})" ,origin_zone_taxi_wait_time_sd,"origin_density.map({k: v for k, v in Taxi_waitTime_sd.items()})" # ,, Note that the mean and standard deviation are not the values for the distribution itself, but of the underlying normal distribution it is derived from @@ -108,3 +108,5 @@ dest terminal time not counted at home,_dest_terminal_time,"np.where(inbound & l ,distance,od_skims['DIST'] ,distance_walk_od,od_skims['DIST'] ,distance_bike_od,od_skims['DISTBIKE'] +# added for school escorting model,, +Number of school children in vehicle on trip,num_escortees,"0 if 'escort_participants' not in df.columns else df.escort_participants.fillna('').apply(lambda x: len(x.split('_')))" \ No newline at end of file diff --git a/activitysim/examples/prototype_mtc/configs/shadow_pricing.yaml b/activitysim/examples/prototype_mtc/configs/shadow_pricing.yaml index b61ec4192..89816475a 100644 --- a/activitysim/examples/prototype_mtc/configs/shadow_pricing.yaml +++ b/activitysim/examples/prototype_mtc/configs/shadow_pricing.yaml @@ -1,7 +1,7 @@ shadow_pricing_models: school: school_location workplace: workplace_location - + # global switch to enable/disable loading of saved shadow prices # (ignored if global use_shadow_pricing switch is False) LOAD_SAVED_SHADOW_PRICES: True @@ -32,3 +32,4 @@ DAMPING_FACTOR: 1 # FIXME should these be the same as PERCENT_TOLERANCE and FAIL_THRESHOLD above? DAYSIM_ABSOLUTE_TOLERANCE: 50 DAYSIM_PERCENT_TOLERANCE: 10 + \ No newline at end of file diff --git a/activitysim/examples/prototype_mtc_extended/configs/annotate_landuse.csv b/activitysim/examples/prototype_mtc_extended/configs/annotate_landuse.csv new file mode 100644 index 000000000..a434db9db --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/annotate_landuse.csv @@ -0,0 +1,17 @@ +Description,Target,Expression +#,, annotate landuse table after import +household_density,household_density,land_use.TOTHH / (land_use.RESACRE + land_use.CIACRE) +employment_density,employment_density,land_use.TOTEMP / (land_use.RESACRE + land_use.CIACRE) +density_index,density_index,(household_density *employment_density) / (household_density + employment_density).clip(lower=1) +,is_cbd,land_use.area_type == 1 +# additions put in place for simulation shadow pricing approach,, +total university enrollment,TOTENR_univ,land_use.COLLFTE + land_use.COLLPTE +# example external worker implementation,, +Example with 10 percent external workers across all zones,ext_work_share,0.1 +scaling employment fields,RETEMPN_scaled,land_use.RETEMPN * (1 - ext_work_share) +,FPSEMPN_scaled,land_use.FPSEMPN * (1 - ext_work_share) +,HEREMPN_scaled,land_use.HEREMPN * (1 - ext_work_share) +,OTHEMPN_scaled,land_use.OTHEMPN * (1 - ext_work_share) +,AGREMPN_scaled,land_use.AGREMPN * (1 - ext_work_share) +,MWTEMPN_scaled,land_use.MWTEMPN * (1 - ext_work_share) +,TOTEMP_scaled,land_use.TOTEMP * (1 - ext_work_share) diff --git a/activitysim/examples/prototype_mtc_extended/configs/annotate_non_mandatory_destination.csv b/activitysim/examples/prototype_mtc_extended/configs/annotate_non_mandatory_destination.csv new file mode 100644 index 000000000..cdd627bb6 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/annotate_non_mandatory_destination.csv @@ -0,0 +1,3 @@ +Description,Target,Expression +overwrite non-mandatory tour destination for school escort tours,_school_escort_tour_destination,"reindex(school_escort_tours.destination, df.index)" +,destination,"np.where(_school_escort_tour_destination.isna(), df.destination, _school_escort_tour_destination)" \ No newline at end of file diff --git a/activitysim/examples/prototype_mtc_extended/configs/annotate_non_mandatory_tour_frequency.csv b/activitysim/examples/prototype_mtc_extended/configs/annotate_non_mandatory_tour_frequency.csv new file mode 100644 index 000000000..a4861c99d --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/annotate_non_mandatory_tour_frequency.csv @@ -0,0 +1,6 @@ +Description,Target,Expression +# re-calculating tour counts with school escorting tours included,, +,tour_type_num,"df.groupby(['person_id', 'tour_type']).cumcount() + 1" +,tour_type_count,"tour_type_num + df.groupby(['person_id', 'tour_type']).cumcount(ascending=False)" +,tour_num,"df.groupby('person_id').cumcount() + 1" +,tour_count,"tour_num + df.groupby('person_id').cumcount(ascending=False)" \ No newline at end of file diff --git a/activitysim/examples/prototype_mtc_extended/configs/annotate_proto_households.csv b/activitysim/examples/prototype_mtc_extended/configs/annotate_proto_households.csv new file mode 100644 index 000000000..95720faef --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/annotate_proto_households.csv @@ -0,0 +1,4 @@ +# This is an example use of annotation for dissaggregate accessibilities +# But this particular case could probably be handled using variable mapping +Description,Target,Expression +auto ownership,auto_ownership,"np.clip(households.veh, 0, 2)" diff --git a/activitysim/examples/prototype_mtc_extended/configs/destination_choice_size_terms.csv b/activitysim/examples/prototype_mtc_extended/configs/destination_choice_size_terms.csv new file mode 100644 index 000000000..f07de5d48 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/destination_choice_size_terms.csv @@ -0,0 +1,28 @@ +model_selector,segment,TOTHH,RETEMPN,FPSEMPN,HEREMPN,OTHEMPN,AGREMPN,MWTEMPN,AGE0519,HSENROLL,COLLFTE,COLLPTE,RETEMPN_scaled,FPSEMPN_scaled,HEREMPN_scaled,OTHEMPN_scaled,AGREMPN_scaled,MWTEMPN_scaled +workplace,work_low,0,0,0,0,0,0,0,0,0,0,0,0.129,0.193,0.383,0.12,0.01,0.164 +workplace,work_med,0,0,0,0,0,0,0,0,0,0,0,0.12,0.197,0.325,0.139,0.008,0.21 +workplace,work_high,0,0,0,0,0,0,0,0,0,0,0,0.11,0.207,0.284,0.154,0.006,0.239 +workplace,work_veryhigh,0,0,0,0,0,0,0,0,0,0,0,0.093,0.27,0.241,0.146,0.004,0.246 +school,university,0,0,0,0,0,0,0,0,0,0.592,0.408,0,0,0,0,0,0 +school,gradeschool,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +school,highschool,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +non_mandatory,escort,0,0.225,0,0.144,0,0,0,0.465,0.166,0,0,0,0,0,0,0,0 +#non_mandatory,escort_kids,0,0.225,0,0.144,0,0,0,0.465,0.166,0,0,0,0,0,0,0,0 +#non_mandatory,escort_nokids,0,0.225,0,0.144,0,0,0,0.465,0.166,0,0,0,0,0,0,0,0 +non_mandatory,shopping,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +non_mandatory,eatout,0,0.742,0,0.258,0,0,0,0,0,0,0,0,0,0,0,0,0 +non_mandatory,othmaint,0,0.482,0,0.518,0,0,0,0,0,0,0,0,0,0,0,0,0 +non_mandatory,social,0,0.522,0,0.478,0,0,0,0,0,0,0,0,0,0,0,0,0 +non_mandatory,othdiscr,0.252,0.212,0,0.272,0.165,0,0,0,0.098,0,0,0,0,0,0,0,0 +atwork,atwork,0,0.742,0,0.258,0,0,0,0,0,0,0,0,0,0,0,0,0 +trip,work,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 +trip,escort,0.001,0.225,0,0.144,0,0,0,0.464,0.166,0,0,0,0,0,0,0,0 +trip,shopping,0.001,0.999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +trip,eatout,0,0.742,0,0.258,0,0,0,0,0,0,0,0,0,0,0,0,0 +trip,othmaint,0.001,0.481,0,0.518,0,0,0,0,0,0,0,0,0,0,0,0,0 +trip,social,0.001,0.521,0,0.478,0,0,0,0,0,0,0,0,0,0,0,0,0 +trip,othdiscr,0.252,0.212,0,0.272,0.165,0,0,0,0.098,0,0,0,0,0,0,0,0 +trip,univ,0.001,0,0,0,0,0,0,0,0,0.592,0.408,0,0,0,0,0,0 +# not needed as school is not chosen as an intermediate trip destination,,,,,,,,,,,,,,,,,, +#trip,gradeschool,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +#trip,highschool,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 diff --git a/activitysim/examples/prototype_mtc_extended/configs/disaggregate_accessibility.yaml b/activitysim/examples/prototype_mtc_extended/configs/disaggregate_accessibility.yaml new file mode 100644 index 000000000..d066e126b --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/disaggregate_accessibility.yaml @@ -0,0 +1,156 @@ +# Sampling size. 0 = no limit +# can be whole integer value or a sample rate (percent of zones) +# zero or missing defaults to full sample! +DESTINATION_SAMPLE_SIZE: 0.5 +ORIGIN_SAMPLE_SIZE: 5000 + +# Specify the tables to be created and their variables. +# Single values are constants +# Lists are varying and will generate the cartesian product (i.e., all possible non-repeating combinations) + +# Example result for households below: +#hhid veh hinccat1 hinc hworkers persons hht bldgsz +# 1 0 1 14000 1 2 1 2 +# 2 1 1 14000 1 2 1 2 +# 3 2 1 14000 1 2 1 2 +# 4 0 2 67000 1 2 1 2 +# 5 1 2 67000 1 2 1 2 +# 6 2 2 67000 1 2 1 2 +# .... + +#Note: parameters in ALL CAPS below are required by the program for synthesis +CREATE_TABLES: + PROTO_HOUSEHOLDS: + index_col: proto_household_id + zone_col: home_zone_id + rename_columns: + zone_id: home_zone_id + VARIABLES: + hinccat1: [1, 2, 3, 4] # Income categories + hworkers: 1 # Household workers + veh: [0, 1, 2] # Household vehicles + persons: 2 # Two persons household + HHT: 1 # Married-couple family household + bldgsz: 2 # Building size - Single family detached + # Additional columns that are mapped to another (e.g., hhinccat1: 1 = hinc: 14000) + mapped_fields: + hinccat1: # List new fields mapped to this field + income: # Median income within each quartile + 1: 15000 # 14000 (for 3 level) + 2: 45000 # 67000 (for 3 level) + 3: 80000 # 120000 (for 3 level) + 4: 150000 + persons: + hhsize: + 1: 1 + 2: 2 + 3: 3 + hworkers: + num_workers: + 1: 1 + 2: 2 + 3: 3 + + PROTO_PERSONS: + index_col: proto_person_id + VARIABLES: + pnum: [1, 2] # Person number + military: 4 # Not military + pstudent: 3 # Not attending school + educ: 13 # Bachelor's + grade: 0 # Not attending + timeFactorWork: 1 # mean + timeFactorNonWork: 1 # mean + mapped_fields: + pnum: + age: + 1: 35 + 2: 55 + sex: # Female male + 1: 2 + 2: 1 + ptype: # Person type, full-time and non-working adult + 1: 1 + 2: 4 + pemploy: # Full-time and unemployed + 1: 1 + 2: 3 + weeks: # 50-52 weeks, none + 1: 1 + 2: 0 + hours: # Hours per week + 1: 35 + 2: 0 + DAP: # Mandatory, Non-mandatory + 1: "M" + 2: "N" + + PROTO_TOURS: + index_col: proto_tour_id + VARIABLES: + tour_num: 1 # Tour number, 1 tour per person + purpose: [1, 2, 3] + mapped_fields: + purpose: + person_num: # In this case it was easier to map the person number directly to the purposez + 1: 1 + 2: 2 + 3: 2 + tour_type: + 1: "work" + 2: "shopping" + 3: "othdiscr" + tour_category: # tour purpose category, mandatory/non-mandatory + 1: "mandatory" + 2: "non_mandatory" + 3: "non_mandatory" + filter_rows: # list any matching conditions as pandas expression + - ~((df.tour_type == "work") & (df.person_num == 1)) + JOIN_ON: + person_num: pnum # Specifies which person variable to join the tours on + +# Merge on variables +MERGE_ON: + by: # These should be categorical variables at the household level + - home_zone_id + - auto_ownership + - income_segment + +# Include any annotations for persons, households, land_use, or tours. +# The purpose of a separate annotation setup is that annotation expressions for the main model +# may require data that aren't in the proto population. +# This step enables users to annotate the proto-population by referencing custom annotation scripts. +# Of course, users can also just reference existing configs if they work, but they must be referenced here too. + +annotate_proto_tables: + - tablename: proto_persons + annotate: + SPEC: annotate_persons + DF: proto_persons + TABLES: + - proto_households + + - tablename: proto_households + annotate: + SPEC: annotate_proto_households + DF: proto_households + TABLES: + - proto_persons + - land_use + +# Annotate the proto_households table using the main model annotations files + - tablename: proto_households + annotate: + SPEC: annotate_households + DF: proto_households + TABLES: + - proto_persons + - land_use + +# Annotate the proto_persons table using the main model annotations files + - tablename: proto_persons + annotate: + SPEC: annotate_persons_after_hh + DF: proto_persons + TABLES: + - proto_households diff --git a/activitysim/examples/prototype_mtc_extended/configs/non_mandatory_tour_destination.yaml b/activitysim/examples/prototype_mtc_extended/configs/non_mandatory_tour_destination.yaml new file mode 100644 index 000000000..48d8ca8d9 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/non_mandatory_tour_destination.yaml @@ -0,0 +1,57 @@ +SAMPLE_SPEC: non_mandatory_tour_destination_sample.csv +SPEC: non_mandatory_tour_destination.csv +COEFFICIENTS: non_mandatory_tour_destination_coefficients.csv + +SAMPLE_SIZE: 30 + +SIZE_TERM_SELECTOR: non_mandatory + +# we can't use use household income_segment as this will also be set for non-workers +CHOOSER_SEGMENT_COLUMN_NAME: tour_type + +# optional (comment out if not desired) +DEST_CHOICE_LOGSUM_COLUMN_NAME: destination_logsum + +# comment out DEST_CHOICE_LOGSUM_COLUMN_NAME if saved alt logsum table +DEST_CHOICE_SAMPLE_TABLE_NAME: tour_destination_sample + + +SEGMENTS: + - shopping + - othmaint + - othdiscr + - eatout + - social + - escort + +SIMULATE_CHOOSER_COLUMNS: + - tour_type + - home_zone_id + - person_id + +LOGSUM_SETTINGS: tour_mode_choice.yaml + +annotate_tours: + SPEC: annotate_non_mandatory_destination + DF: df + TABLES: + - tours + - school_escort_tours + +# model-specific logsum-related settings +CHOOSER_ORIG_COL_NAME: home_zone_id +ALT_DEST_COL_NAME: alt_dest +IN_PERIOD: + shopping: 14 + othmaint: 14 + othdiscr: 14 + eatout: 14 + social: 14 + escort: 14 +OUT_PERIOD: + shopping: 14 + othmaint: 14 + othdiscr: 14 + eatout: 14 + social: 14 + escort: 14 \ No newline at end of file diff --git a/activitysim/examples/prototype_mtc_extended/configs/non_mandatory_tour_frequency_alternatives.csv b/activitysim/examples/prototype_mtc_extended/configs/non_mandatory_tour_frequency_alternatives.csv new file mode 100644 index 000000000..0bea47c6f --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/non_mandatory_tour_frequency_alternatives.csv @@ -0,0 +1,100 @@ +escort,shopping,othmaint,othdiscr,eatout,social +0,0,0,0,0,0 +0,0,0,1,0,0 +0,0,0,0,0,1 +0,0,0,1,0,1 +0,0,0,0,1,0 +0,0,0,1,1,0 +0,0,0,0,1,1 +0,0,0,1,1,1 +0,0,1,0,0,0 +0,0,1,1,0,0 +0,0,1,0,0,1 +0,0,1,1,0,1 +0,0,1,0,1,0 +0,0,1,1,1,0 +0,0,1,0,1,1 +0,0,1,1,1,1 +0,1,0,0,0,0 +0,1,0,1,0,0 +0,1,0,0,0,1 +0,1,0,1,0,1 +0,1,0,0,1,0 +0,1,0,1,1,0 +0,1,0,0,1,1 +0,1,0,1,1,1 +0,1,1,0,0,0 +0,1,1,1,0,0 +0,1,1,0,0,1 +0,1,1,1,0,1 +0,1,1,0,1,0 +0,1,1,1,1,0 +0,1,1,0,1,1 +0,1,1,1,1,1 +1,0,0,0,0,0 +1,0,0,1,0,0 +1,0,0,0,0,1 +1,0,0,1,0,1 +1,0,0,0,1,0 +1,0,0,1,1,0 +1,0,0,0,1,1 +1,0,0,1,1,1 +1,0,1,0,0,0 +1,0,1,1,0,0 +1,0,1,0,0,1 +1,0,1,1,0,1 +1,0,1,0,1,0 +1,0,1,1,1,0 +1,0,1,0,1,1 +1,0,1,1,1,1 +1,1,0,0,0,0 +1,1,0,1,0,0 +1,1,0,0,0,1 +1,1,0,1,0,1 +1,1,0,0,1,0 +1,1,0,1,1,0 +1,1,0,0,1,1 +1,1,0,1,1,1 +1,1,1,0,0,0 +1,1,1,1,0,0 +1,1,1,0,0,1 +1,1,1,1,0,1 +1,1,1,0,1,0 +1,1,1,1,1,0 +1,1,1,0,1,1 +1,1,1,1,1,1 +2,0,0,0,0,0 +2,0,0,1,0,0 +2,0,0,0,0,1 +2,0,0,1,0,1 +2,0,0,0,1,0 +2,0,0,1,1,0 +2,0,0,0,1,1 +2,0,0,1,1,1 +2,0,1,0,0,0 +2,0,1,1,0,0 +2,0,1,0,0,1 +2,0,1,1,0,1 +2,0,1,0,1,0 +2,0,1,1,1,0 +2,0,1,0,1,1 +2,0,1,1,1,1 +2,1,0,0,0,0 +2,1,0,1,0,0 +2,1,0,0,0,1 +2,1,0,1,0,1 +2,1,0,0,1,0 +2,1,0,1,1,0 +2,1,0,0,1,1 +2,1,0,1,1,1 +2,1,1,0,0,0 +2,1,1,1,0,0 +2,1,1,0,0,1 +2,1,1,1,0,1 +2,1,1,0,1,0 +2,1,1,1,1,0 +2,1,1,0,1,1 +2,1,1,1,1,1 +# extension for flexible ids demonstration,,,,, +# should be removed for actual model run,,,,, +0,0,0,2,0,0 diff --git a/activitysim/examples/prototype_mtc_extended/configs/non_mandatory_tour_scheduling.yaml b/activitysim/examples/prototype_mtc_extended/configs/non_mandatory_tour_scheduling.yaml new file mode 100644 index 000000000..488ba6b82 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/non_mandatory_tour_scheduling.yaml @@ -0,0 +1,22 @@ + +SPEC: tour_scheduling_nonmandatory.csv +COEFFICIENTS: tour_scheduling_nonmandatory_coefficients.csv + +LOGIT_TYPE: MNL + +preprocessor: + SPEC: non_mandatory_tour_scheduling_annotate_tours_preprocessor + DF: non_mandatory_tours + TABLES: + - land_use + - joint_tour_participants + - school_escort_tours + +SIMULATE_CHOOSER_COLUMNS: + - ptype + - num_children + - roundtrip_auto_time_to_work + - num_mand + - num_escort_tours + - num_non_escort_tours + - adult diff --git a/activitysim/examples/prototype_mtc_extended/configs/non_mandatory_tour_scheduling_annotate_tours_preprocessor.csv b/activitysim/examples/prototype_mtc_extended/configs/non_mandatory_tour_scheduling_annotate_tours_preprocessor.csv new file mode 100644 index 000000000..c0281468f --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/non_mandatory_tour_scheduling_annotate_tours_preprocessor.csv @@ -0,0 +1,11 @@ +Description,Target,Expression +destination in central business district,destination_in_cbd,"(reindex(land_use.area_type, non_mandatory_tours.destination) < setting('cbd_threshold')) * 1" +#,, +,num_person_joint_tours,"reindex_i(joint_tour_participants.groupby('person_id').size(), non_mandatory_tours.person_id)" +# included for school escorting model,, +flag to denote outbound school escort tours,is_outbound_school_escort_tour,"non_mandatory_tours.index.isin(school_escort_tours[school_escort_tours['school_escort_direction'] == 'outbound'].index)" +flag to denote inbound school escort tours,is_inbound_school_escort_tour,"non_mandatory_tours.index.isin(school_escort_tours[school_escort_tours['school_escort_direction'] == 'inbound'].index)" +school escort tour start time,school_escort_tour_start,"reindex(school_escort_tours.start, non_mandatory_tours.index)" +school escort tour next start time,school_escort_tour_next_start,"reindex(school_escort_tours.next_pure_escort_start, non_mandatory_tours.index)" +school escort tour end time,school_escort_tour_end,"reindex(school_escort_tours.end, non_mandatory_tours.index)" + diff --git a/activitysim/examples/prototype_mtc_extended/configs/school_escorting.yaml b/activitysim/examples/prototype_mtc_extended/configs/school_escorting.yaml new file mode 100644 index 000000000..a4daba88d --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/school_escorting.yaml @@ -0,0 +1,47 @@ + +OUTBOUND_SPEC: school_escorting_outbound.csv +OUTBOUND_COEFFICIENTS: school_escorting_coefficients_outbound.csv + +INBOUND_SPEC: school_escorting_inbound.csv +INBOUND_COEFFICIENTS: school_escorting_coefficients_inbound.csv + +OUTBOUND_COND_SPEC: school_escorting_outbound_cond.csv +OUTBOUND_COND_COEFFICIENTS: school_escorting_coefficients_outbound_cond.csv + +ALTS: school_escorting_alts.csv + +LOGIT_TYPE: MNL + +NUM_ESCORTEES: 3 +NUM_CHAPERONES: 2 + +preprocessor_outbound: + SPEC: school_escorting_preprocessor_outbound + DF: df + TABLES: + - persons + - tours + +preprocessor_inbound: + SPEC: school_escorting_preprocessor_inbound + DF: df + TABLES: + - persons + - tours + +preprocessor_outbound_cond: + SPEC: school_escorting_preprocessor_outbound + DF: df + TABLES: + - persons + - tours + +SIMULATE_CHOOSER_COLUMNS: + - home_zone_id + - income + - auto_ownership + - num_workers + +CONSTANTS: + max_bin_difference_between_departure_times: 1 + mins_per_time_bin: 60 diff --git a/activitysim/examples/prototype_mtc_extended/configs/school_escorting_alts.csv b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_alts.csv new file mode 100644 index 000000000..eca661755 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_alts.csv @@ -0,0 +1,158 @@ +Alt,bundle1,bundle2,bundle3,chauf1,chauf2,chauf3,nbund1,nbund2,nbundles,nrs1,npe1,nrs2,npe2,Description +1,0,0,0,0,0,0,0,0,0,0,0,0,0,no one is escorted +2,1,0,0,1,0,0,1,0,1,1,0,0,0,child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing +3,1,0,0,2,0,0,1,0,1,0,1,0,0,child 1 is escorted in bundle 1 by chauffeur 1 as pure escort +4,1,0,0,3,0,0,0,1,1,0,0,1,0,child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing +5,1,0,0,4,0,0,0,1,1,0,0,0,1,child 1 is escorted in bundle 1 by chauffeur 2 as pure escort +6,0,1,0,0,1,0,1,0,1,1,0,0,0,child 2 is escorted in bundle 1 by chauffeur 1 as ride sharing +7,0,1,0,0,2,0,1,0,1,0,1,0,0,child 2 is escorted in bundle 1 by chauffeur 1 as pure escort +8,0,1,0,0,3,0,0,1,1,0,0,1,0,child 2 is escorted in bundle 1 by chauffeur 2 as ride sharing +9,0,1,0,0,4,0,0,1,1,0,0,0,1,child 2 is escorted in bundle 1 by chauffeur 2 as pure escort +10,0,0,1,0,0,1,1,0,1,1,0,0,0,child 3 is escorted in bundle 1 by chauffeur 1 as ride sharing +11,0,0,1,0,0,2,1,0,1,0,1,0,0,child 3 is escorted in bundle 1 by chauffeur 1 as pure escort +12,0,0,1,0,0,3,0,1,1,0,0,1,0,child 3 is escorted in bundle 1 by chauffeur 2 as ride sharing +13,0,0,1,0,0,4,0,1,1,0,0,0,1,child 3 is escorted in bundle 1 by chauffeur 2 as pure escort +14,1,1,0,1,1,0,1,0,1,1,0,0,0,child 1 and 2 are escorted in bundle 1 by chauffeur 1 as ride sharing +15,1,1,0,2,2,0,1,0,1,0,1,0,0,child 1 and 2 are escorted in bundle 1 by chauffeur 1 as pure escort +16,1,1,0,3,3,0,0,1,1,0,0,1,0,child 1 and 2 are escorted in bundle 1 by chauffeur 2 as ride sharing +17,1,1,0,4,4,0,0,1,1,0,0,0,1,child 1 and 2 are escorted in bundle 1 by chauffeur 2 as pure escort +18,1,0,1,1,0,1,1,0,1,1,0,0,0,child 1 and 3 are escorted in bundle 1 by chauffeur 1 as ride sharing +19,1,0,1,2,0,2,1,0,1,0,1,0,0,child 1 and 3 are escorted in bundle 1 by chauffeur 1 as pure escort +20,1,0,1,3,0,3,0,1,1,0,0,1,0,child 1 and 3 are escorted in bundle 1 by chauffeur 2 as ride sharing +21,1,0,1,4,0,4,0,1,1,0,0,0,1,child 1 and 3 are escorted in bundle 1 by chauffeur 2 as pure escort +22,0,1,1,0,1,1,1,0,1,1,0,0,0,child 2 and 3 are escorted in bundle 1 by chauffeur 1 as ride sharing +23,0,1,1,0,2,2,1,0,1,0,1,0,0,child 2 and 3 are escorted in bundle 1 by chauffeur 1 as pure escort +24,0,1,1,0,3,3,0,1,1,0,0,1,0,child 2 and 3 are escorted in bundle 1 by chauffeur 2 as ride sharing +25,0,1,1,0,4,4,0,1,1,0,0,0,1,child 2 and 3 are escorted in bundle 1 by chauffeur 2 as pure escort +26,1,2,0,1,2,0,2,0,2,1,1,0,0,child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing and child 2 is escorted in bundle 2 by chauffeur 1 as pure escort +27,1,2,0,1,3,0,1,1,2,1,0,1,0,child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing and child 2 is escorted in bundle 2 by chauffeur 2 as ride sharing +28,1,2,0,1,4,0,1,1,2,1,0,0,1,child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing and child 2 is escorted in bundle 2 by chauffeur 2 as pure escort +29,1,2,0,2,1,0,2,0,2,1,1,0,0,child 1 is escorted in bundle 1 by chauffeur 1 as pure escort and child 2 is escorted in bundle 2 by chauffeur 1 as ride sharing +30,1,2,0,2,2,0,2,0,2,0,2,0,0,child 1 is escorted in bundle 1 by chauffeur 1 as pure escort and child 2 is escorted in bundle 2 by chauffeur 1 as pure escort +31,1,2,0,2,3,0,1,1,2,0,1,1,0,child 1 is escorted in bundle 1 by chauffeur 1 as pure escort and child 2 is escorted in bundle 2 by chauffeur 2 as ride sharing +32,1,2,0,2,4,0,1,1,2,0,1,0,1,child 1 is escorted in bundle 1 by chauffeur 1 as pure escort and child 2 is escorted in bundle 2 by chauffeur 2 as pure escort +33,1,2,0,3,1,0,1,1,2,1,0,1,0,child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing and child 2 is escorted in bundle 2 by chauffeur 1 as ride sharing +34,1,2,0,3,2,0,1,1,2,0,1,1,0,child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing and child 2 is escorted in bundle 2 by chauffeur 1 as pure escort +35,1,2,0,3,4,0,0,2,2,0,0,1,1,child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing and child 2 is escorted in bundle 2 by chauffeur 2 as pure escort +36,1,2,0,4,1,0,1,1,2,1,0,0,1,child 1 is escorted in bundle 1 by chauffeur 2 as pure escort and child 2 is escorted in bundle 2 by chauffeur 1 as ride sharing +37,1,2,0,4,2,0,1,1,2,0,1,0,1,child 1 is escorted in bundle 1 by chauffeur 2 as pure escort and child 2 is escorted in bundle 2 by chauffeur 1 as pure escort +38,1,2,0,4,3,0,0,2,2,0,0,1,1,child 1 is escorted in bundle 1 by chauffeur 2 as pure escort and child 2 is escorted in bundle 2 by chauffeur 2 as ride sharing +39,1,2,0,4,4,0,0,2,2,0,0,0,2,child 1 is escorted in bundle 1 by chauffeur 2 as pure escort and child 2 is escorted in bundle 2 by chauffeur 2 as pure escort +40,1,0,2,1,0,2,2,0,2,1,1,0,0,child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 1 as pure escorting +41,1,0,2,1,0,3,1,1,2,1,0,1,0,child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 2 as ride sharing +42,1,0,2,1,0,4,1,1,2,1,0,0,1,child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 2 as pure escorting +43,1,0,2,2,0,1,2,0,2,1,1,0,0,child 1 is escorted in bundle 1 by chauffeur 1 as pure escort and child 3 is escorted in bundle 2 by chauffeur 1 as ride sharing +44,1,0,2,2,0,2,2,0,2,0,2,0,0,child 1 is escorted in bundle 1 by chauffeur 1 as pure escort and child 3 is escorted in bundle 2 by chauffeur 1 as pure escorting +45,1,0,2,2,0,3,1,1,2,0,1,1,0,child 1 is escorted in bundle 1 by chauffeur 1 as pure escort and child 3 is escorted in bundle 2 by chauffeur 2 as ride sharing +46,1,0,2,2,0,4,1,1,2,0,1,0,1,child 1 is escorted in bundle 1 by chauffeur 1 as pure escort and child 3 is escorted in bundle 2 by chauffeur 2 as pure escorting +47,1,0,2,3,0,1,1,1,2,1,0,1,0,child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 1 as ride sharing +48,1,0,2,3,0,2,1,1,2,0,1,1,0,child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 1 as pure escorting +49,1,0,2,3,0,4,0,2,2,0,0,1,1,child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 2 as pure escorting +50,1,0,2,4,0,1,1,1,2,1,0,0,1,child 1 is escorted in bundle 1 by chauffeur 2 as pure escort and child 3 is escorted in bundle 2 by chauffeur 1 as ride sharing +51,1,0,2,4,0,2,1,1,2,0,1,0,1,child 1 is escorted in bundle 1 by chauffeur 2 as pure escort and child 3 is escorted in bundle 2 by chauffeur 1 as pure escorting +52,1,0,2,4,0,3,0,2,2,0,0,1,1,child 1 is escorted in bundle 1 by chauffeur 2 as pure escort and child 3 is escorted in bundle 2 by chauffeur 2 as ride sharing +53,1,0,2,4,0,4,0,2,2,0,0,0,2,child 1 is escorted in bundle 1 by chauffeur 2 as pure escort and child 3 is escorted in bundle 2 by chauffeur 2 as pure escorting +54,0,1,2,0,1,2,2,0,2,1,1,0,0,child 2 is escorted in bundle 1 by chauffeur 1 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 1 as pure escorting +55,0,1,2,0,1,3,1,1,2,1,0,1,0,child 2 is escorted in bundle 1 by chauffeur 1 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 2 as ride sharing +56,0,1,2,0,1,4,1,1,2,1,0,0,1,child 2 is escorted in bundle 1 by chauffeur 1 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 2 as pure escorting +57,0,1,2,0,2,1,2,0,2,1,1,0,0,child 2 is escorted in bundle 1 by chauffeur 1 as pure escort and child 3 is escorted in bundle 2 by chauffeur 1 as ride sharing +58,0,1,2,0,2,2,2,0,2,0,2,0,0,child 2 is escorted in bundle 1 by chauffeur 1 as pure escort and child 3 is escorted in bundle 2 by chauffeur 1 as pure escorting +59,0,1,2,0,2,3,1,1,2,0,1,1,0,child 2 is escorted in bundle 1 by chauffeur 1 as pure escort and child 3 is escorted in bundle 2 by chauffeur 2 as ride sharing +60,0,1,2,0,2,4,1,1,2,0,1,0,1,child 2 is escorted in bundle 1 by chauffeur 1 as pure escort and child 3 is escorted in bundle 2 by chauffeur 2 as pure escorting +61,0,1,2,0,3,1,1,1,2,1,0,1,0,child 2 is escorted in bundle 1 by chauffeur 2 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 1 as ride sharing +62,0,1,2,0,3,2,1,1,2,0,1,1,0,child 2 is escorted in bundle 1 by chauffeur 2 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 1 as pure escorting +63,0,1,2,0,3,4,0,2,2,0,0,1,1,child 2 is escorted in bundle 1 by chauffeur 2 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 2 as pure escorting +64,0,1,2,0,4,1,1,1,2,1,0,0,1,child 2 is escorted in bundle 1 by chauffeur 2 as pure escort and child 3 is escorted in bundle 2 by chauffeur 1 as ride sharing +65,0,1,2,0,4,2,1,1,2,0,1,0,1,child 2 is escorted in bundle 1 by chauffeur 2 as pure escort and child 3 is escorted in bundle 2 by chauffeur 1 as pure escorting +66,0,1,2,0,4,3,0,2,2,0,0,1,1,child 2 is escorted in bundle 1 by chauffeur 2 as pure escort and child 3 is escorted in bundle 2 by chauffeur 2 as ride sharing +67,0,1,2,0,4,4,0,2,2,0,0,0,2,child 2 is escorted in bundle 1 by chauffeur 2 as pure escort and child 3 is escorted in bundle 2 by chauffeur 2 as pure escorting +68,1,1,1,1,1,1,1,0,1,1,0,0,0,"child 1, 2 and 3 are escorted in bundle 1 by chauffeur 1 as ride sharing" +69,1,1,1,2,2,2,1,0,1,0,1,0,0,"child 1, 2 and 3 are escorted in bundle 1 by chauffeur 1 as pure escort" +70,1,1,1,3,3,3,0,1,1,0,0,1,0,"child 1, 2 and 3 are escorted in bundle 1 by chauffeur 2 as ride sharing" +71,1,1,1,4,4,4,0,1,1,0,0,0,1,"child 1, 2 and 3 are escorted in bundle 1 by chauffeur 2 as pure escort" +72,1,2,3,1,2,2,3,0,3,1,2,0,0,"child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing, child 2 is escorted in bundle 2 by chauffeur 1 as pure escort and child 3 is escorted in bundle 3 by chauffeur 1 as pure escort" +73,1,2,3,1,2,3,2,1,3,1,1,1,0,"child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing, child 2 is escorted in bundle 2 by chauffeur 1 as pure escort and child 3 is escorted in bundle 3 by chauffeur 2 as ride sharing" +74,1,2,3,1,2,4,2,1,3,1,1,0,1,"child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing, child 2 is escorted in bundle 2 by chauffeur 1 as pure escort and child 3 is escorted in bundle 3 by chauffeur 2 as pure escort" +75,1,2,3,1,3,2,2,1,3,1,1,1,0,"child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing, child 2 is escorted in bundle 2 by chauffeur 2 as ride sharing, and child 3 is escorted in bundle 3 by chauffeur 1 as pure escort" +76,1,2,3,1,3,4,1,2,3,1,0,1,1,"child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing, child 2 is escorted in bundle 2 by chauffeur 2 as ride sharing, and child 3 is escorted in bundle 3 by chauffeur 2 as pure escort" +77,1,2,3,1,4,2,2,1,3,1,1,0,1,"child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing, child 2 is escorted in bundle 2 by chauffeur 2 as pure escort and child 3 is escorted in bundle 3 by chauffeur 1 as pure escort" +78,1,2,3,1,4,3,1,2,3,1,0,1,1,"child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing, child 2 is escorted in bundle 2 by chauffeur 2 as pure escort and child 3 is escorted in bundle 3 by chauffeur 2 as ride sharing" +79,1,2,3,1,4,4,1,2,3,1,0,0,2,"child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing, child 2 is escorted in bundle 2 by chauffeur 2 as pure escort and child 3 is escorted in bundle 3 by chauffeur 2 as pure escort" +80,1,2,3,2,1,2,3,0,3,1,2,0,0,"child 1 is escorted in bundle 1 by chauffeur 1 as pure escort, child 2 is escorted in bundle 2 by chauffeur 1 as ride sharing, and child 3 is escorted in bundle 3 by chauffeur 1 as pure escort" +81,1,2,3,2,1,3,2,1,3,1,1,1,0,"child 1 is escorted in bundle 1 by chauffeur 1 as pure escort, child 2 is escorted in bundle 2 by chauffeur 1 as ride sharing, and child 3 is escorted in bundle 3 by chauffeur 2 as ride sharing" +82,1,2,3,2,1,4,2,1,3,1,1,0,1,"child 1 is escorted in bundle 1 by chauffeur 1 as pure escort, child 2 is escorted in bundle 2 by chauffeur 1 as ride sharing, and child 3 is escorted in bundle 3 by chauffeur 2 as pure escort" +83,1,2,3,2,2,1,3,0,3,1,2,0,0,"child 1 is escorted in bundle 1 by chauffeur 1 as pure escort, child 2 is escorted in bundle 2 by chauffeur 1 as pure escort and child 3 is escorted in bundle 3 by chauffeur 1 as ride sharing" +84,1,2,3,2,2,2,3,0,3,0,3,0,0,"child 1 is escorted in bundle 1 by chauffeur 1 as pure escort, child 2 is escorted in bundle 2 by chauffeur 1 as pure escort and child 3 is escorted in bundle 3 by chauffeur 1 as pure escort" +85,1,2,3,2,2,3,2,1,3,0,2,1,0,"child 1 is escorted in bundle 1 by chauffeur 1 as pure escort, child 2 is escorted in bundle 2 by chauffeur 1 as pure escort and child 3 is escorted in bundle 3 by chauffeur 2 as ride sharing" +86,1,2,3,2,2,4,2,1,3,0,2,0,1,"child 1 is escorted in bundle 1 by chauffeur 1 as pure escort, child 2 is escorted in bundle 2 by chauffeur 1 as pure escort and child 3 is escorted in bundle 3 by chauffeur 2 as pure escort" +87,1,2,3,2,3,1,2,1,3,1,1,1,0,"child 1 is escorted in bundle 1 by chauffeur 1 as pure escort, child 2 is escorted in bundle 2 by chauffeur 2 as ride sharing, and child 3 is escorted in bundle 3 by chauffeur 1 as ride sharing" +88,1,2,3,2,3,2,2,1,3,0,2,1,0,"child 1 is escorted in bundle 1 by chauffeur 1 as pure escort, child 2 is escorted in bundle 2 by chauffeur 2 as ride sharing, and child 3 is escorted in bundle 3 by chauffeur 1 as pure escort" +89,1,2,3,2,3,4,1,2,3,0,1,1,1,"child 1 is escorted in bundle 1 by chauffeur 1 as pure escort, child 2 is escorted in bundle 2 by chauffeur 2 as ride sharing, and child 3 is escorted in bundle 3 by chauffeur 2 as pure escort" +90,1,2,3,2,4,1,2,1,3,1,1,0,1,"child 1 is escorted in bundle 1 by chauffeur 1 as pure escort, child 2 is escorted in bundle 2 by chauffeur 2 as pure escort and child 3 is escorted in bundle 3 by chauffeur 1 as ride sharing" +91,1,2,3,2,4,2,2,1,3,0,2,0,1,"child 1 is escorted in bundle 1 by chauffeur 1 as pure escort, child 2 is escorted in bundle 2 by chauffeur 2 as pure escort and child 3 is escorted in bundle 3 by chauffeur 1 as pure escort" +92,1,2,3,2,4,3,1,2,3,0,1,1,1,"child 1 is escorted in bundle 1 by chauffeur 1 as pure escort, child 2 is escorted in bundle 2 by chauffeur 2 as pure escort and child 3 is escorted in bundle 3 by chauffeur 2 as ride sharing" +93,1,2,3,2,4,4,1,2,3,0,1,0,2,"child 1 is escorted in bundle 1 by chauffeur 1 as pure escort, child 2 is escorted in bundle 2 by chauffeur 2 as pure escort and child 3 is escorted in bundle 3 by chauffeur 2 as pure escort" +94,1,2,3,3,1,2,2,1,3,1,1,1,0,"child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing, child 2 is escorted in bundle 2 by chauffeur 1 as ride sharing, and child 3 is escorted in bundle 3 by chauffeur 1 as pure escort" +95,1,2,3,3,1,4,1,2,3,1,0,1,1,"child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing, child 2 is escorted in bundle 2 by chauffeur 1 as ride sharing, and child 3 is escorted in bundle 3 by chauffeur 2 as pure escort" +96,1,2,3,3,2,1,2,1,3,1,1,1,0,"child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing, child 2 is escorted in bundle 2 by chauffeur 1 as pure escort and child 3 is escorted in bundle 3 by chauffeur 1 as ride sharing" +97,1,2,3,3,2,2,2,1,3,0,2,1,0,"child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing, child 2 is escorted in bundle 2 by chauffeur 1 as pure escort and child 3 is escorted in bundle 3 by chauffeur 1 as pure escort" +98,1,2,3,3,2,4,1,2,3,0,1,1,1,"child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing, child 2 is escorted in bundle 2 by chauffeur 1 as pure escort and child 3 is escorted in bundle 3 by chauffeur 2 as pure escort" +99,1,2,3,3,4,1,1,2,3,1,0,1,1,"child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing, child 2 is escorted in bundle 2 by chauffeur 2 as pure escort and child 3 is escorted in bundle 3 by chauffeur 1 as ride sharing" +100,1,2,3,3,4,2,1,2,3,0,1,1,1,"child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing, child 2 is escorted in bundle 2 by chauffeur 2 as pure escort and child 3 is escorted in bundle 3 by chauffeur 1 as pure escort" +101,1,2,3,3,4,4,0,3,3,0,0,1,2,"child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing, child 2 is escorted in bundle 2 by chauffeur 2 as pure escort and child 3 is escorted in bundle 3 by chauffeur 2 as pure escort" +102,1,2,3,4,1,2,2,1,3,1,1,0,1,"child 1 is escorted in bundle 1 by chauffeur 2 as pure escort, child 2 is escorted in bundle 2 by chauffeur 1 as ride sharing, and child 3 is escorted in bundle 3 by chauffeur 1 as pure escort" +103,1,2,3,4,1,3,1,2,3,1,0,1,1,"child 1 is escorted in bundle 1 by chauffeur 2 as pure escort, child 2 is escorted in bundle 2 by chauffeur 1 as ride sharing, and child 3 is escorted in bundle 3 by chauffeur 2 as ride sharing" +104,1,2,3,4,1,4,1,2,3,1,0,0,2,"child 1 is escorted in bundle 1 by chauffeur 2 as pure escort, child 2 is escorted in bundle 2 by chauffeur 1 as ride sharing, and child 3 is escorted in bundle 3 by chauffeur 2 as pure escort" +105,1,2,3,4,2,1,2,1,3,1,1,0,1,"child 1 is escorted in bundle 1 by chauffeur 2 as pure escort, child 2 is escorted in bundle 2 by chauffeur 1 as pure escort and child 3 is escorted in bundle 3 by chauffeur 1 as ride sharing" +106,1,2,3,4,2,2,2,1,3,0,2,0,1,"child 1 is escorted in bundle 1 by chauffeur 2 as pure escort, child 2 is escorted in bundle 2 by chauffeur 1 as pure escort and child 3 is escorted in bundle 3 by chauffeur 1 as pure escort" +107,1,2,3,4,2,3,1,2,3,0,1,1,1,"child 1 is escorted in bundle 1 by chauffeur 2 as pure escort, child 2 is escorted in bundle 2 by chauffeur 1 as pure escort and child 3 is escorted in bundle 3 by chauffeur 2 as ride sharing" +108,1,2,3,4,2,4,1,2,3,0,1,0,2,"child 1 is escorted in bundle 1 by chauffeur 2 as pure escort, child 2 is escorted in bundle 2 by chauffeur 1 as pure escort and child 3 is escorted in bundle 3 by chauffeur 2 as pure escort" +109,1,2,3,4,3,1,1,2,3,1,0,1,1,"child 1 is escorted in bundle 1 by chauffeur 2 as pure escort, child 2 is escorted in bundle 2 by chauffeur 2 as ride sharing, and child 3 is escorted in bundle 3 by chauffeur 1 as ride sharing" +110,1,2,3,4,3,2,1,2,3,0,1,1,1,"child 1 is escorted in bundle 1 by chauffeur 2 as pure escort, child 2 is escorted in bundle 2 by chauffeur 2 as ride sharing, and child 3 is escorted in bundle 3 by chauffeur 1 as pure escort" +111,1,2,3,4,3,4,0,3,3,0,0,1,2,"child 1 is escorted in bundle 1 by chauffeur 2 as pure escort, child 2 is escorted in bundle 2 by chauffeur 2 as ride sharing, and child 3 is escorted in bundle 3 by chauffeur 2 as pure escort" +112,1,2,3,4,4,1,1,2,3,1,0,0,2,"child 1 is escorted in bundle 1 by chauffeur 2 as pure escort, child 2 is escorted in bundle 2 by chauffeur 2 as pure escort and child 3 is escorted in bundle 3 by chauffeur 1 as ride sharing" +113,1,2,3,4,4,2,1,2,3,0,1,0,2,"child 1 is escorted in bundle 1 by chauffeur 2 as pure escort, child 2 is escorted in bundle 2 by chauffeur 2 as pure escort and child 3 is escorted in bundle 3 by chauffeur 1 as pure escort" +114,1,2,3,4,4,3,0,3,3,0,0,1,2,"child 1 is escorted in bundle 1 by chauffeur 2 as pure escort, child 2 is escorted in bundle 2 by chauffeur 2 as pure escort and child 3 is escorted in bundle 3 by chauffeur 2 as ride sharing" +115,1,2,3,4,4,4,0,3,3,0,0,0,3,"child 1 is escorted in bundle 1 by chauffeur 2 as pure escort, child 2 is escorted in bundle 2 by chauffeur 2 as pure escort and child 3 is escorted in bundle 3 by chauffeur 2 as pure escort" +116,1,1,2,1,1,2,2,0,2,1,1,0,0,child 1 and 2 are escorted in bundle 1 by chauffeur 1 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 1 as pure escort +117,1,1,2,1,1,3,1,1,2,1,0,1,0,child 1 and 2 are escorted in bundle 1 by chauffeur 1 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 2 as ride sharing +118,1,1,2,1,1,4,1,1,2,1,0,0,1,child 1 and 2 are escorted in bundle 1 by chauffeur 1 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 2 as pure escort +119,1,1,2,2,2,1,2,0,2,1,1,0,0,child 1 and 2 are escorted in bundle 1 by chauffeur 1 as pure escort and child 3 is escorted in bundle 2 by chauffeur 1 as ride sharing +120,1,1,2,2,2,2,2,0,2,0,2,0,0,child 1 and 2 are escorted in bundle 1 by chauffeur 1 as pure escort and child 3 is escorted in bundle 2 by chauffeur 1 as pure escort +121,1,1,2,2,2,3,1,1,2,0,1,1,0,child 1 and 2 are escorted in bundle 1 by chauffeur 1 as pure escort and child 3 is escorted in bundle 2 by chauffeur 2 as ride sharing +122,1,1,2,2,2,4,1,1,2,0,1,0,1,child 1 and 2 are escorted in bundle 1 by chauffeur 1 as pure escort and child 3 is escorted in bundle 2 by chauffeur 2 as pure escort +123,1,1,2,3,3,1,1,1,2,1,0,1,0,child 1 and 2 are escorted in bundle 1 by chauffeur 2 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 1 as ride sharing +124,1,1,2,3,3,2,1,1,2,0,1,1,0,child 1 and 2 are escorted in bundle 1 by chauffeur 2 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 1 as pure escort +125,1,1,2,3,3,4,0,2,2,0,0,1,1,child 1 and 2 are escorted in bundle 1 by chauffeur 2 as ride sharing and child 3 is escorted in bundle 2 by chauffeur 2 as pure escort +126,1,1,2,4,4,1,1,1,2,1,0,0,1,child 1 and 2 are escorted in bundle 1 by chauffeur 2 as pure escort and child 3 is escorted in bundle 2 by chauffeur 1 as ride sharing +127,1,1,2,4,4,2,1,1,2,0,1,0,1,child 1 and 2 are escorted in bundle 1 by chauffeur 2 as pure escort and child 3 is escorted in bundle 2 by chauffeur 1 as pure escort +128,1,1,2,4,4,3,0,2,2,0,0,1,1,child 1 and 2 are escorted in bundle 1 by chauffeur 2 as pure escort and child 3 is escorted in bundle 2 by chauffeur 2 as ride sharing +129,1,1,2,4,4,4,0,2,2,0,0,0,2,child 1 and 2 are escorted in bundle 1 by chauffeur 2 as pure escort and child 3 is escorted in bundle 2 by chauffeur 2 as pure escort +130,1,2,1,1,2,1,2,0,2,1,1,0,0,child 1 and 3 are escorted in bundle 1 by chauffeur 1 as ride sharing and child 2 is escorted in bundle 2 by chauffeur 1 as pure escort +131,1,2,1,1,3,1,1,1,2,1,0,1,0,child 1 and 3 are escorted in bundle 1 by chauffeur 1 as ride sharing and child 2 is escorted in bundle 2 by chauffeur 2 as ride sharing +132,1,2,1,1,4,1,1,1,2,1,0,0,1,child 1 and 3 are escorted in bundle 1 by chauffeur 1 as ride sharing and child 2 is escorted in bundle 2 by chauffeur 2 as pure escort +133,1,2,1,2,1,2,2,0,2,1,1,0,0,child 1 and 3 are escorted in bundle 1 by chauffeur 1 as pure escort and child 2 is escorted in bundle 2 by chauffeur 1 as ride sharing +134,1,2,1,2,2,2,2,0,2,0,2,0,0,child 1 and 3 are escorted in bundle 1 by chauffeur 1 as pure escort and child 2 is escorted in bundle 2 by chauffeur 1 as pure escort +135,1,2,1,2,3,2,1,1,2,0,1,1,0,child 1 and 3 are escorted in bundle 1 by chauffeur 1 as pure escort and child 2 is escorted in bundle 2 by chauffeur 2 as ride sharing +136,1,2,1,2,4,2,1,1,2,0,1,0,1,child 1 and 3 are escorted in bundle 1 by chauffeur 1 as pure escort and child 2 is escorted in bundle 2 by chauffeur 2 as pure escort +137,1,2,1,3,1,3,1,1,2,1,0,1,0,child 1 and 3 are escorted in bundle 1 by chauffeur 2 as ride sharing and child 2 is escorted in bundle 2 by chauffeur 1 as ride sharing +138,1,2,1,3,2,3,1,1,2,0,1,1,0,child 1 and 3 are escorted in bundle 1 by chauffeur 2 as ride sharing and child 2 is escorted in bundle 2 by chauffeur 1 as pure escort +139,1,2,1,3,4,3,0,2,2,0,0,1,1,child 1 and 3 are escorted in bundle 1 by chauffeur 2 as ride sharing and child 2 is escorted in bundle 2 by chauffeur 2 as pure escort +140,1,2,1,4,1,4,1,1,2,1,0,0,1,child 1 and 3 are escorted in bundle 1 by chauffeur 2 as pure escort and child 2 is escorted in bundle 2 by chauffeur 1 as ride sharing +141,1,2,1,4,2,4,1,1,2,0,1,0,1,child 1 and 3 are escorted in bundle 1 by chauffeur 2 as pure escort and child 2 is escorted in bundle 2 by chauffeur 1 as pure escort +142,1,2,1,4,3,4,0,2,2,0,0,1,1,child 1 and 3 are escorted in bundle 1 by chauffeur 2 as pure escort and child 2 is escorted in bundle 2 by chauffeur 2 as ride sharing +143,1,2,1,4,4,4,0,2,2,0,0,0,2,child 1 and 3 are escorted in bundle 1 by chauffeur 2 as pure escort and child 2 is escorted in bundle 2 by chauffeur 2 as pure escort +144,1,2,2,1,2,2,2,0,2,1,1,0,0,child 2 and 3 are escorted in bundle 2 by chauffeur 1 as ride sharing and child 1 is escorted in bundle 1 by chauffeur 1 as pure escort +145,1,2,2,1,3,3,1,1,2,1,0,1,0,child 2 and 3 are escorted in bundle 2 by chauffeur 1 as ride sharing and child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing +146,1,2,2,1,4,4,1,1,2,1,0,0,1,child 2 and 3 are escorted in bundle 2 by chauffeur 1 as ride sharing and child 1 is escorted in bundle 1 by chauffeur 2 as pure escort +147,1,2,2,2,1,1,2,0,2,1,1,0,0,child 2 and 3 are escorted in bundle 2 by chauffeur 1 as pure escort and child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing +148,1,2,2,2,2,2,2,0,2,0,2,0,0,child 2 and 3 are escorted in bundle 2 by chauffeur 1 as pure escort and child 1 is escorted in bundle 1 by chauffeur 1 as pure escort +149,1,2,2,2,3,3,1,1,2,0,1,1,0,child 2 and 3 are escorted in bundle 2 by chauffeur 1 as pure escort and child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing +150,1,2,2,2,4,4,1,1,2,0,1,0,1,child 2 and 3 are escorted in bundle 2 by chauffeur 1 as pure escort and child 1 is escorted in bundle 1 by chauffeur 2 as pure escort +151,1,2,2,3,1,1,1,1,2,1,0,1,0,child 2 and 3 are escorted in bundle 2 by chauffeur 2 as ride sharing and child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing +152,1,2,2,3,2,2,1,1,2,0,1,1,0,child 2 and 3 are escorted in bundle 2 by chauffeur 2 as ride sharing and child 1 is escorted in bundle 1 by chauffeur 1 as pure escort +153,1,2,2,3,4,4,0,2,2,0,0,1,1,child 2 and 3 are escorted in bundle 2 by chauffeur 2 as ride sharing and child 1 is escorted in bundle 1 by chauffeur 2 as pure escort +154,1,2,2,4,1,1,1,1,2,1,0,0,1,child 2 and 3 are escorted in bundle 2 by chauffeur 2 as pure escort and child 1 is escorted in bundle 1 by chauffeur 1 as ride sharing +155,1,2,2,4,2,2,1,1,2,0,1,0,1,child 2 and 3 are escorted in bundle 2 by chauffeur 2 as pure escort and child 1 is escorted in bundle 1 by chauffeur 1 as pure escort +156,1,2,2,4,3,3,0,2,2,0,0,1,1,child 2 and 3 are escorted in bundle 2 by chauffeur 2 as pure escort and child 1 is escorted in bundle 1 by chauffeur 2 as ride sharing +157,1,2,2,4,4,4,0,2,2,0,0,0,2,child 2 and 3 are escorted in bundle 2 by chauffeur 2 as pure escort and child 1 is escorted in bundle 1 by chauffeur 2 as pure escort diff --git a/activitysim/examples/prototype_mtc_extended/configs/school_escorting_coefficients_inbound.csv b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_coefficients_inbound.csv new file mode 100644 index 000000000..d6bc1947f --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_coefficients_inbound.csv @@ -0,0 +1,41 @@ +coefficient_name,value,constrain +coef_unavail,-999,T +coef_child_age_16p_noes,0.17488,F +coef_child_age_6_to_15_noes,-0.41751,F +coef_child_age_u5_noes,-1.36718,F +coef_ln_dist_from_school_noes,-0.01787,F +coef_ln_dist_from_school_u6_noes,-0.23304,F +coef_ln_dist_from_school_6to9_noes,-0.07286,F +coef_child_age_16p_rs,1.97184 +coef_child_age_10to15_rs,1.73544 +coef_child_age_6to9_rs,1.73544 +coef_child_age_u6_rs,1.34996 +coef_hh_inc_u25k_noes,0.0,F +coef_hh_inc_25to50k_noes,0.0,F +coef_zero_auto_hh_noes,0.13165,F +coef_cars_lt_workers_rs,-3.35586,F +coef_cars_lt_workers_pe,-1.59062,F +coef_chauf_female_rs,-0.44827,F +coef_chauf_male_rs,-0.90832,F +coef_chauf_female_pe,-0.68399,F +coef_chauf_male_pe,-1.01783,F +coef_chauf_pt_worker_rs,0.51244,F +coef_chauf_pt_worker_pe,0.23496,F +coef_chauf_non_worker_pe,0.69245,F +coef_chauf_univ_stud_re,0.47395,F +coef_chauf_age_u35_pe,0.00000,F +coef_chauf_time_to_work_or_univ_rs,-0.01974,F +coef_chauf_walk_dist_to_work_or_univ_rs,-0.73155,F +coef_chauf_walk_dist_to_work_or_univ_pe,0.00000,F +coef_abs_dev_distance,-0.08011,F +coef_rel_dev_distance,0.0,F +coef_same_taz_escort,1.44053,F +coef_same_taz_no_escort,1.96760,F +coef_no_escort_outbound,2.04553,F +coef_outbound_rs,0.0,F +coef_same_chauf,1.14533,F +coef_calib_child_age_u6_rs,8.75011,F +coef_calib_child_age_16p_rs,-0.20,F +coef_calib_child_age_6to15_noes,-3.46362,F +coef_calib_child_age_u6_noes,-0.36565,F +coef_calib_child_age_6to15_rs,-1.45344,F diff --git a/activitysim/examples/prototype_mtc_extended/configs/school_escorting_coefficients_outbound.csv b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_coefficients_outbound.csv new file mode 100644 index 000000000..14f1e7d5f --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_coefficients_outbound.csv @@ -0,0 +1,40 @@ +coefficient_name,value,constrain +coef_unavail,-999,T +coef_child_age_16p_noes,1.07391,F +coef_child_age_10_to_15_noes,0.46127,F +coef_child_age_u9_noes,0.13590,F +coef_ln_dist_to_school_noes,-0.33583,F +coef_ln_dist_to_school_u6_noes,-1.00920,F +coef_ln_dist_to_school_6to9_noes,-0.11156,F +coef_child_age_16p_rs,0.34244,F +coef_child_age_10to15_rs,.27494,F +coef_child_age_6to9_rs,0.20757,F +coef_child_age_u6_rs,0.33051,F +coef_child_dist_pe,-0.04593,F +coef_hh_inc_u25k_noes,0.18901,F +coef_hh_inc_25to50k_noes,0.12172,F +coef_zero_auto_hh_noes,9.0,F +coef_cars_lt_workers_rs,-0.88274,F +coef_cars_lt_workers_pe,-0.55291,F +coef_chauf_female_rs,-0.27828,F +coef_chauf_male_rs,-0.67320,F +coef_chauf_female_pe,-0.84859,F +coef_chauf_male_pe,-0.80965,F +coef_chauf_pt_worker_rs,-0.11422,F +coef_chauf_pt_worker_pe,0.51792,F +coef_chauf_non_worker_pe,0.51577,F +coef_chauf_univ_stud_re,0.0,F +coef_chauf_age_u35_pe,-0.33715,F +coef_chauf_time_to_work_or_univ_rs,0.0,F +coef_chauf_walk_dist_to_work_or_univ_rs,0.77326,F +coef_chauf_walk_dist_to_work_or_univ_pe,0.0,F +coef_abs_dev_distance,-0.07136,F +coef_rel_dev_distance,-0.09951,F +coef_same_taz_escort,2.77591,F +coef_same_taz_no_escort,2.62969,F +coef_same_taz_no_escort_23,2.21201,F +coef_calib_child_age_u6_rs,8.55400,F +coef_calib_child_age_16p_rs,-0.2000,F +coef_calib_child_age_6to15_noes,-4.53067,F +coef_calib_child_age_6to15_rs,-2.41923,F +coef_calib_child_age_u6_noes,-0.67902,F diff --git a/activitysim/examples/prototype_mtc_extended/configs/school_escorting_coefficients_outbound_cond.csv b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_coefficients_outbound_cond.csv new file mode 100644 index 000000000..079d1e845 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_coefficients_outbound_cond.csv @@ -0,0 +1,41 @@ +coefficient_name,value,constrain +coef_unavail,-999,T +coef_child_age_16p_noes,-0.33924,F +coef_child_age_10_to_15_noes,-0.78691,F +coef_child_age_u9_noes,-0.97142,F +coef_ln_dist_to_school_noes,-0.02112,F +coef_ln_dist_to_school_u6_noes,-0.81356,F +coef_ln_dist_to_school_6to9_noes,-0.12910,F +coef_child_age_16p_rs,0.93518,F +coef_child_age_10to15_rs,0.58009,F +coef_child_age_6to9_rs,0.36698,F +coef_child_age_u6_rs,0.29043,F +coef_child_dist_pe,-0.03624,F +coef_hh_inc_u25k_noes,0.33839,F +coef_hh_inc_25to50k_noes,0.05888,F +coef_zero_auto_hh_noes,9.00000,F +coef_cars_lt_workers_rs,-0.38588,F +coef_cars_lt_workers_pe,-0.01213,F +coef_chauf_female_rs,-0.49717,F +coef_chauf_male_rs,-0.94654,F +coef_chauf_female_pe,-0.98546,F +coef_chauf_male_pe,-1.05266,F +coef_chauf_pt_worker_rs,-0.74807,F +coef_chauf_pt_worker_pe,0.31729,F +coef_chauf_non_worker_pe,0.19211,F +coef_chauf_univ_stud_re,0.0,F +coef_chauf_age_u35_pe,-0.41194,F +coef_chauf_time_to_work_or_univ_rs,0.0,F +coef_chauf_walk_dist_to_work_or_univ_rs,0.38819,F +coef_chauf_walk_dist_to_work_or_univ_pe,0.0,F +coef_abs_dev_distance,-0.04497,F +coef_rel_dev_distance,-0.09067,F +coef_same_taz_escort,2.56855,F +coef_same_taz_no_escort,2.21201,F +coef_no_escort_inbound,1.72902,F +coef_same_chauf,0.99276,F +coef_calib_child_age_u6_rs,8.55400,F +coef_calib_child_age_16p_rs,-0.2000,F +coef_calib_child_age_6to15_noes,-4.53067,F +coef_calib_child_age_6to15_rs,-2.41923,F +coef_calib_child_age_u6_noes,-0.67902,F diff --git a/activitysim/examples/prototype_mtc_extended/configs/school_escorting_inbound.csv b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_inbound.csv new file mode 100644 index 000000000..559fffd58 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_inbound.csv @@ -0,0 +1,175 @@ +Label,Description,Expression,Coefficient +# ,Availability Conditions,, +util_one_child_to_school,Availability based on number of eligible children,((bundle2 + bundle3) > 0) & (num_children_going_to_school==1),coef_unavail +util_two_children_to_school,Availability based on number of eligible children,(bundle3 > 0) & (num_children_going_to_school == 2),coef_unavail +util_one_potential_chauffeur,Availability based on number of eligible chauffeurs,((bundle1 + bundle2 + bundle3) > 0) & (num_potential_chauffeurs == 0),coef_unavail +util_two_potential_chauffeurs,Availability based on number of eligible chauffeurs,((chauf1 > 2) | (chauf2 > 2) | (chauf3 > 2)) & (num_potential_chauffeurs == 1),coef_unavail +util_avail_rs_cdap_child1_chauf1,Availability for RideSharing by daily pattern - Child 1 and Chauffeur 1,(bundle1 > 0) & (chauf1 == 1) & (cdap_chauf1 != 'M'),coef_unavail +util_avail_rs_cdap_child1_chauf2,Availability for RideSharing by daily pattern - Child 1 and Chauffeur 2,(bundle1 > 0) & (chauf1 == 3) & (cdap_chauf2 != 'M'),coef_unavail +util_avail_rs_cdap_child2_chauf1,Availability for RideSharing by daily pattern - Child 2 and Chauffeur 1,(bundle2 > 0) & (chauf2 == 1) & (cdap_chauf1 != 'M'),coef_unavail +util_avail_rs_cdap_child2_chauf2,Availability for RideSharing by daily pattern - Child 2 and Chauffeur 2,(bundle2 > 0) & (chauf2 == 3) & (cdap_chauf2 != 'M'),coef_unavail +util_avail_rs_cdap_child3_chauf1,Availability for RideSharing by daily pattern - Child 3 and Chauffeur 1,(bundle3 > 0) & (chauf3 == 1) & (cdap_chauf1 != 'M'),coef_unavail +util_avail_rs_cdap_child3_chauf2,Availability for RideSharing by daily pattern - Child 3 and Chauffeur 2,(bundle3 > 0) & (chauf3 == 3) & (cdap_chauf2 != 'M'),coef_unavail +util_avail_rs_sync_child1_chauf1,Availability for RideSharing by synchronization - Child 1 and Chauffeur 1,@(df.bundle1 > 0) & (df.chauf1 == 1) & (np.abs(df.pref_depart_time_chauf1 + (df.time_mand1_to_school1 / mins_per_time_bin) - df.pref_depart_time_school1) > max_bin_difference_between_departure_times),coef_unavail +util_avail_rs_sync_child1_chauf2,Availability for RideSharing by synchronization - Child 1 and Chauffeur 2,@(df.bundle1 > 0) & (df.chauf1 == 3) & (np.abs(df.pref_depart_time_chauf2 + (df.time_mand2_to_school1 / mins_per_time_bin) - df.pref_depart_time_school1) > max_bin_difference_between_departure_times),coef_unavail +util_avail_rs_sync_child2_chauf1,Availability for RideSharing by synchronization - Child 2 and Chauffeur 1,@(df.bundle2 > 0) & (df.chauf2 == 1) & (np.abs(df.pref_depart_time_chauf1 + (df.time_mand1_to_school2 / mins_per_time_bin) - df.pref_depart_time_school2) > max_bin_difference_between_departure_times),coef_unavail +util_avail_rs_sync_child2_chauf2,Availability for RideSharing by synchronization - Child 2 and Chauffeur 2,@(df.bundle2 > 0) & (df.chauf2 == 3) & (np.abs(df.pref_depart_time_chauf2 + (df.time_mand2_to_school2 / mins_per_time_bin) - df.pref_depart_time_school2) > max_bin_difference_between_departure_times),coef_unavail +util_avail_rs_sync_child3_chauf1,Availability for RideSharing by synchronization - Child 3 and Chauffeur 1,@(df.bundle3 > 0) & (df.chauf3 == 1) & (np.abs(df.pref_depart_time_chauf1 + (df.time_mand1_to_school3 / mins_per_time_bin) - df.pref_depart_time_school3) > max_bin_difference_between_departure_times),coef_unavail +util_avail_rs_sync_child3_chauf2,Availability for RideSharing by synchronization - Child 3 and Chauffeur 2,@(df.bundle3 > 0) & (df.chauf3 == 3) & (np.abs(df.pref_depart_time_chauf2 + (df.time_mand2_to_school3 / mins_per_time_bin) - df.pref_depart_time_school3) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_cdap_child1_chauf1,Availability for Pure-Escorting by daily pattern - Child 1 and Chauffeur 1,(bundle1 > 0) & (chauf1 == 2) & (ptype_chauf1 < 6) & (cdap_chauf1 == 'H'),coef_unavail +util_avail_pe_cdap_child1_chauf2,Availability for Pure-Escorting by daily pattern - Child 1 and Chauffeur 2,(bundle1 > 0) & (chauf1 == 4) & (ptype_chauf2 < 6) & (cdap_chauf2 == 'H'),coef_unavail +util_avail_pe_cdap_child2_chauf1,Availability for Pure-Escorting by daily pattern - Child 2 and Chauffeur 1,(bundle2 > 0) & (chauf2 == 2) & (ptype_chauf1 < 6) & (cdap_chauf1 == 'H'),coef_unavail +util_avail_pe_cdap_child2_chauf2,Availability for Pure-Escorting by daily pattern - Child 2 and Chauffeur 2,(bundle2 > 0) & (chauf2 == 4) & (ptype_chauf2 < 6) & (cdap_chauf2 == 'H'),coef_unavail +util_avail_pe_cdap_child3_chauf1,Availability for Pure-Escorting by daily pattern - Child 3 and Chauffeur 1,(bundle3 > 0) & (chauf3 == 2) & (ptype_chauf1 < 6) & (cdap_chauf1 == 'H'),coef_unavail +util_avail_pe_cdap_child3_chauf2,Availability for Pure-Escorting by daily pattern - Child 3 and Chauffeur 2,(bundle3 > 0) & (chauf3 == 4) & (ptype_chauf2 < 6) & (cdap_chauf2 == 'H'),coef_unavail +util_avail_pe_sync_child1_chauf1,Availability for Pure-Escorting by synchronization - Child 1 and Chauffeur 1,@(df.bundle1 > 0) & (df.chauf1 == 2) & (df.cdap_chauf1 == 'H') & (((df.pref_depart_time_chauf1 + (df.time_mand_to_home1 / mins_per_time_bin)) - (df.pref_depart_time_school1 - (df.time_home_to_school1 / mins_per_time_bin))) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_sync_child1_chauf2,Availability for Pure-Escorting by synchronization - Child 1 and Chauffeur 2,@(df.bundle1 > 0) & (df.chauf1 == 4) & (df.cdap_chauf2 == 'H') & (((df.pref_depart_time_chauf2 + (df.time_mand_to_home2 / mins_per_time_bin)) - (df.pref_depart_time_school1 - (df.time_home_to_school1 / mins_per_time_bin))) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_sync_child2_chauf1,Availability for Pure-Escorting by synchronization - Child 2 and Chauffeur 1,@(df.bundle2 > 0) & (df.chauf2 == 2) & (df.cdap_chauf1 == 'H') & (((df.pref_depart_time_chauf1 + (df.time_mand_to_home1 / mins_per_time_bin)) - (df.pref_depart_time_school2 - (df.time_home_to_school2 / mins_per_time_bin))) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_sync_child2_chauf2,Availability for Pure-Escorting by synchronization - Child 2 and Chauffeur 2,@(df.bundle2 > 0) & (df.chauf2 == 4) & (df.cdap_chauf2 == 'H') & (((df.pref_depart_time_chauf2 + (df.time_mand_to_home2 / mins_per_time_bin)) - (df.pref_depart_time_school2 - (df.time_home_to_school2 / mins_per_time_bin))) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_sync_child3_chauf1,Availability for Pure-Escorting by synchronization - Child 3 and Chauffeur 1,@(df.bundle3 > 0) & (df.chauf3 == 2) & (df.cdap_chauf1 == 'H') & (((df.pref_depart_time_chauf1 + (df.time_mand_to_home1 / mins_per_time_bin)) - (df.pref_depart_time_school3 - (df.time_home_to_school3 / mins_per_time_bin))) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_sync_child3_chauf2,Availability for Pure-Escorting by synchronization - Child 3 and Chauffeur 2,@(df.bundle3 > 0) & (df.chauf3 == 4) & (df.cdap_chauf2 == 'H') & (((df.pref_depart_time_chauf2 + (df.time_mand_to_home2 / mins_per_time_bin)) - (df.pref_depart_time_school3 - (df.time_home_to_school3 / mins_per_time_bin))) > max_bin_difference_between_departure_times),coef_unavail +util_avail_bundle_child_1and2,Availability for bundling child 1 and child 2,@(df.bundle1 == df.bundle2) & (df.bundle1 > 0) & (np.abs(df.pref_depart_time_school1 - df.pref_depart_time_school2) > max_bin_difference_between_departure_times),coef_unavail +util_avail_bundle_child_1and3,Availability for bundling child 1 and child 3,@(df.bundle1 == df.bundle3) & (df.bundle1 > 0) & (np.abs(df.pref_depart_time_school1 - df.pref_depart_time_school3) > max_bin_difference_between_departure_times),coef_unavail +util_avail_bundle_child_2and3,Availability for bundling child 2 and child 3,@(df.bundle2 == df.bundle3) & (df.bundle2 > 0) & (np.abs(df.pref_depart_time_school2 - df.pref_depart_time_school3) > max_bin_difference_between_departure_times),coef_unavail +util_avail_mult_bundles_outbound1,Availability Chauffeur 1 - Expected arrival from previous pure escort must be before departure for subsequent escort,((nrs1 + npe1) > 1) & ~avail_multiple_bundles,coef_unavail +util_avail_mult_bundles_outbound2,Availability Chauffeur 2 - Expected arrival from previous pure escort must be before departure for subsequent escort,((nrs2 + npe2) > 1) & ~avail_multiple_bundles,coef_unavail +util_time_span11,Chauffeur 1 and Child 1 - time span for this alternative must not overlap time span reserved from outbound conditional,(bundle1 > 0) & ((chauf1 == 1) | (chauf1 == 2)) & (return_bin_outbound_school_escorting1 > pref_depart_time_school1),coef_unavail +util_time_span12,Chauffeur 1 and Child 2 - time span for this alternative must not overlap time span reserved from outbound conditional,(bundle1 > 0) & ((chauf2 == 1) | (chauf2 == 2)) & (return_bin_outbound_school_escorting1 > pref_depart_time_school2),coef_unavail +util_time_span13,Chauffeur 1 and Child 3 - time span for this alternative must not overlap time span reserved from outbound conditional,(bundle1 > 0) & ((chauf3 == 1) | (chauf3 == 2)) & (return_bin_outbound_school_escorting1 > pref_depart_time_school3),coef_unavail +util_time_span21,Chauffeur 2 and Child 1 - time span for this alternative must not overlap time span reserved from outbound conditional,(bundle1 > 0) & ((chauf1 == 3) | (chauf1 == 4)) & (return_bin_outbound_school_escorting2 > pref_depart_time_school1),coef_unavail +util_time_span22,Chauffeur 2 and Child 2 - time span for this alternative must not overlap time span reserved from outbound conditional,(bundle1 > 0) & ((chauf2 == 3) | (chauf2 == 4)) & (return_bin_outbound_school_escorting2 > pref_depart_time_school2),coef_unavail +util_time_span23,Chauffeur 2 and Child 3 - time span for this alternative must not overlap time span reserved from outbound conditional,(bundle1 > 0) & ((chauf3 == 3) | (chauf3 == 4)) & (return_bin_outbound_school_escorting2 > pref_depart_time_school3),coef_unavail +util_avail_pe_during_mand_child1_chauf1,Availability pure escort tour must take place before mandatory tour - Child 1 and Chauffeur 1,@(df.bundle1 > 0) & (df.chauf1 == 2) & (df.cdap_chauf1 == 'M') & ((df.pref_depart_time_chauf1 + max_bin_difference_between_departure_times) >= df.pref_depart_time_school1),coef_unavail +util_avail_pe_during_mand_child1_chauf2,Availability pure escort tour must take place before mandatory tour - Child 1 and Chauffeur 2,@(df.bundle1 > 0) & (df.chauf1 == 4) & (df.cdap_chauf2 == 'M') & ((df.pref_depart_time_chauf2 + max_bin_difference_between_departure_times) >= df.pref_depart_time_school1),coef_unavail +util_avail_pe_during_mand_child2_chauf1,Availability pure escort tour must take place before mandatory tour - Child 2 and Chauffeur 1,@(df.bundle2 > 0) & (df.chauf2 == 2) & (df.cdap_chauf1 == 'M') & ((df.pref_depart_time_chauf1 + max_bin_difference_between_departure_times) >= df.pref_depart_time_school2),coef_unavail +util_avail_pe_during_mand_child2_chauf2,Availability pure escort tour must take place before mandatory tour - Child 2 and Chauffeur 2,@(df.bundle2 > 0) & (df.chauf2 == 4) & (df.cdap_chauf2 == 'M') & ((df.pref_depart_time_chauf2 + max_bin_difference_between_departure_times) >= df.pref_depart_time_school2),coef_unavail +util_avail_pe_during_mand_child3_chauf1,Availability pure escort tour must take place before mandatory tour - Child 3 and Chauffeur 1,@(df.bundle3 > 0) & (df.chauf3 == 2) & (df.cdap_chauf1 == 'M') & ((df.pref_depart_time_chauf1 + max_bin_difference_between_departure_times) >= df.pref_depart_time_school3),coef_unavail +util_avail_pe_during_mand_child3_chauf2,Availability pure escort tour must take place before mandatory tour - Child 3 and Chauffeur 2,@(df.bundle3 > 0) & (df.chauf3 == 4) & (df.cdap_chauf2 == 'M') & ((df.pref_depart_time_chauf2 + max_bin_difference_between_departure_times) >= df.pref_depart_time_school3),coef_unavail +# ,No escorting,, +util_child1_age_16p_noes,Child 1 age 16 years or older - No escort,(bundle1 == 0) & (child_id1 > 0) & (age_child1 > 15),coef_child_age_16p_noes +util_child2_age_16p_noes,Child 2 age 16 years or older - No escort,(bundle2 == 0) & (child_id2 > 0) & (age_child2 > 15),coef_child_age_16p_noes +util_child3_age_16p_noes,Child 3 age 16 years or older - No escort,(bundle3 == 0) & (child_id3 > 0) & (age_child3 > 15),coef_child_age_16p_noes +util_child1_age_6_to_15_noes,Child 1 age 6 to 15 years - No escort,(bundle1 == 0) & (child_id1 > 0) & (age_child1 > 5) & (age_child1 < 16),coef_child_age_6_to_15_noes +util_child2_age_6_to_15_noes,Child 2 age 6 to 15 years - No escort,(bundle2 == 0) & (child_id2 > 0) & (age_child2 > 5) & (age_child2 < 16),coef_child_age_6_to_15_noes +util_child3_age_6_to_15_noes,Child 3 age 6 to 15 years - No escort,(bundle3 == 0) & (child_id3 > 0) & (age_child3 > 5) & (age_child3 < 16),coef_child_age_6_to_15_noes +util_child1_age_u5_noes,Child 1 age 5 years or younger - No escort,(bundle1 == 0) & (child_id1 > 0) & (age_child1 < 6),coef_child_age_u5_noes +util_child2_age_u5_noes,Child 2 age 5 years or younger - No escort,(bundle2 == 0) & (child_id2 > 0) & (age_child2 < 6),coef_child_age_u5_noes +util_child3_age_u5_noes,Child 3 age 5 years or younger - No escort,(bundle3 == 0) & (child_id3 > 0) & (age_child3 < 6),coef_child_age_u5_noes +util_ln_dist_from_school_child1_noes,Logged distance to school for Child 1 - No escort,@(df.bundle1 == 0) * (df.child_id1 > 0) * np.log(1 + df.dist_school_to_home1),coef_ln_dist_from_school_noes +util_ln_dist_from_school_child2_noes,Logged distance to school for Child 2 - No escort,@(df.bundle2 == 0) * (df.child_id2 > 0) * np.log(1 + df.dist_school_to_home2),coef_ln_dist_from_school_noes +util_ln_dist_from_school_child3_noes,Logged distance to school for Child 3 - No escort,@(df.bundle3 == 0) * (df.child_id3 > 0) * np.log(1 + df.dist_school_to_home3),coef_ln_dist_from_school_noes +util_ln_dist_from_school_child1_u6_noes,Logged distance to school for Child 1 under 6 years old - No escort,@(df.bundle1 == 0) * (df.child_id1 > 0) * (df.age_child1 < 6) * np.log(1 + df.dist_school_to_home1),coef_ln_dist_from_school_u6_noes +util_ln_dist_from_school_child2_u6_noes,Logged distance to school for Child 2 under 6 years old - No escort,@(df.bundle2 == 0) * (df.child_id2 > 0) * (df.age_child2 < 6) * np.log(1 + df.dist_school_to_home2),coef_ln_dist_from_school_u6_noes +util_ln_dist_from_school_child3_u6_noes,Logged distance to school for Child 3 under 6 years old - No escort,@(df.bundle3 == 0) * (df.child_id3 > 0) * (df.age_child3 < 6) * np.log(1 + df.dist_school_to_home3),coef_ln_dist_from_school_u6_noes +util_ln_dist_from_school_child1_6to9_noes,Logged distance to school for Child 1 6 to 9 years old - No escort,@(df.bundle1 == 0) * (df.child_id1 > 0) * (df.age_child1 > 5) * (df.age_child1 < 10) * np.log(1 + df.dist_school_to_home1),coef_ln_dist_from_school_6to9_noes +util_ln_dist_from_school_child2_6to9_noes,Logged distance to school for Child 2 6 to 9 years old - No escort,@(df.bundle2 == 0) * (df.child_id2 > 0) * (df.age_child2 > 5) * (df.age_child2 < 10) * np.log(1 + df.dist_school_to_home2),coef_ln_dist_from_school_6to9_noes +util_ln_dist_from_school_child3_6to9_noes,Logged distance to school for Child 3 6 to 9 years old - No escort,@(df.bundle3 == 0) * (df.child_id3 > 0) * (df.age_child3 > 5) * (df.age_child3 < 10) * np.log(1 + df.dist_school_to_home3),coef_ln_dist_from_school_6to9_noes +# ,Ride Sharing,, +util_child1_age_16p_rs,Child 1 age 16 years or older - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 > 15),coef_child_age_16p_rs +util_child2_age_16p_rs,Child 2 age 16 years or older - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 > 15),coef_child_age_16p_rs +util_child3_age_16p_rs,Child 3 age 16 years or older - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 > 15),coef_child_age_16p_rs +util_child1_age_10to15_rs,Child 1 age 10 to 15 years - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 > 9) & (age_child1 < 16),coef_child_age_10to15_rs +util_child2_age_10to15_rs,Child 2 age 10 to 15 years - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 > 9) & (age_child2 < 16),coef_child_age_10to15_rs +util_child3_age_10to15_rs,Child 3 age 10 to 15 years - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 > 9) & (age_child3 < 16),coef_child_age_10to15_rs +util_child1_age_6to9_rs,Child 1 age 6 to 9 years - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 > 5) & (age_child1 < 10),coef_child_age_6to9_rs +util_child2_age_6to9_rs,Child 2 age 6 to 9 years - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 > 5) & (age_child2 < 10),coef_child_age_6to9_rs +util_child3_age_6to9_rs,Child 3 age 6 to 9 years - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 > 5) & (age_child3 < 10),coef_child_age_6to9_rs +util_child1_age_u6_rs,Child 1 age under 6 years old - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 < 6),coef_child_age_u6_rs +util_child2_age_u6_rs,Child 2 age under 6 years old - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 < 6),coef_child_age_u6_rs +util_child3_age_u6_rs,Child 3 age under 6 years old - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 < 6),coef_child_age_u6_rs +# ,Pure Escort Distance,, +util_child1_dist_pe,Child 1 Pure escorting not allowed if over 30 miles,((chauf1 == 2) | (chauf1 == 4)) & (dist_school_to_home1 > 30),coef_unavail +util_child2_dist_pe,Child 2 Pure escorting not allowed if over 30 miles,((chauf2 == 2) | (chauf2 == 4)) & (dist_school_to_home2 > 30),coef_unavail +util_child3_dist_pe,Child 3 Pure escorting not allowed if over 30 miles,((chauf3 == 2) | (chauf3 == 4)) & (dist_school_to_home3 > 30),coef_unavail +# ,Household Interactions,, +util_hh_inc_u25k_noes,Household income less than 25k - No Escorting,(income <= 25000) & ((bundle1 == 0) | ((bundle2 == 0) & (num_children_going_to_school > 1)) | ((bundle3 == 0) & (num_children_going_to_school > 2))),coef_hh_inc_u25k_noes +util_hh_inc_25to50k_noes,Household income between 25 and 50k - No Escorting,((income > 25000) & (income <= 50000)) & ((bundle1 == 0) | ((bundle2 == 0) & (num_children_going_to_school > 1)) | ((bundle3 == 0) & (num_children_going_to_school > 2))),coef_hh_inc_25to50k_noes +util_zero_auto_hh_noes,Zero cars in the household - No Escorting,(auto_ownership == 0) & ((bundle1 == 0) | ((bundle2 == 0) & (num_children_going_to_school > 1)) | ((bundle3 == 0) & (num_children_going_to_school > 2))),coef_zero_auto_hh_noes +util_cars_lt_workers_rs,Cars fewer than household workers - Ride Share,(auto_ownership < num_workers) & ((chauf1 % 2 == 1) | (chauf2 % 2 == 1) | (chauf3 % 2 == 1)),coef_cars_lt_workers_rs +util_cars_lt_workers_pe,Cars fewer than household workers - Pure escort,(auto_ownership < num_workers) & ((chauf1 % 2 == 0) | (chauf2 % 2 == 0) | (chauf3 % 2 == 0)),coef_cars_lt_workers_pe +# ,Chauffer Interactions,, +util_chauf1_female_rs,Chauffeur 1 Female - Ride share,(gender_chauf1 == 2) & ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_female_rs +util_chauf1_male_rs,Chauffeur 1 Male - Ride share,(gender_chauf1 == 1) & ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_male_rs +util_chauf1_female_pe,Chauffeur 1 Female - Pure Escort,(gender_chauf1 == 2) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_female_pe +util_chauf1_male_pe,Chauffeur 1 Male - Pure Escort,(gender_chauf1 == 1) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_male_pe +util_chauf2_female_rs,Chauffeur 2 Female - Ride share,(gender_chauf2 == 2) & ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_female_rs +util_chauf2_male_rs,Chauffeur 2 Male - Ride share,(gender_chauf2 == 1) & ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_male_rs +util_chauf2_female_pe,Chauffeur 2 Female - Pure Escort,(gender_chauf2 == 2) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_female_pe +util_chauf2_male_pe,Chauffeur 2 Male - Pure Escort,(gender_chauf2 == 1) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_male_pe +util_chauf1_pt_worker_rs,Chauffer 1 part time worker - Ride share,(ptype_chauf1 == 2) & ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_pt_worker_rs +util_chauf1_pt_worker_pe,Chauffer 1 part time worker - Pure escort,(ptype_chauf1 == 2) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_pt_worker_pe +util_chauf2_pt_worker_rs,Chauffer 2 part time worker - Ride share,(ptype_chauf2 == 2) & ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_pt_worker_rs +util_chauf2_pt_worker_pe,Chauffer 2 part time worker - Pure escort,(ptype_chauf2 == 2) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_pt_worker_pe +util_chauf1_non_worker_pe,Chauffer 1 non worker - Pure escort,(ptype_chauf1 == 4) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_non_worker_pe +util_chauf2_non_worker_pe,Chauffer 2 non worker - Pure escort,(ptype_chauf2 == 4) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_non_worker_pe +util_chauf1_univ_stud_re,Chauffer 1 university student - Ride Share,(ptype_chauf1 == 3) & ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_univ_stud_re +util_chauf2_univ_stud_re,Chauffer 2 university student - Ride Share,(ptype_chauf2 == 3) & ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_univ_stud_re +util_chauf1_age_u35_pe,Chauffer 1 Age 35 years or younger - Pure escort,(ptype_chauf1 == 4) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_age_u35_pe +util_chauf2_age_u35_pe,Chauffer 2 Age 35 years or younger - Pure escort,(ptype_chauf2 == 4) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_age_u35_pe +util_chauf1_time_to_work_or_univ_rs,Chauffer 1 Auto time to work or university - Ride Share,time_mand_to_home1 * ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_time_to_work_or_univ_rs +util_chauf2_time_to_work_or_univ_rs,Chauffer 2 Auto time to work or university - Ride Share,time_mand_to_home2 * ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_time_to_work_or_univ_rs +util_chauf1_walk_dist_to_work_or_univ_rs,Chauffer 1 Walk dist to work or university - Ride Share,(dist_mand1_to_home < 3) & ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_walk_dist_to_work_or_univ_rs +util_chauf2_walk_dist_to_work_or_univ_rs,Chauffer 2 Walk dist to work or university - Ride Share,(dist_mand2_to_home < 3) & ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_walk_dist_to_work_or_univ_rs +util_chauf1_walk_dist_to_work_or_univ_pe,Chauffer 1 Walk dist to work or university - Pure Escort,(dist_home1_to_mand < 3) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_walk_dist_to_work_or_univ_pe +util_chauf2_walk_dist_to_work_or_univ_pe,Chauffer 2 Walk dist to work or university - Pure Escort,(dist_home2_to_mand < 3) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_walk_dist_to_work_or_univ_pe +# ,Chauffer deviation,, +util_chauf1_abs_dev_rs_child1only,Chauffer 1 Absolute deviation ride share - child 1 only,((bundle1 != bundle2) & (bundle1 != bundle3) & (chauf1 == 1)) * abs_dev_dist_in_child1_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child1only,Chauffer 2 Absolute deviation ride share - child 1 only,((bundle1 != bundle2) & (bundle1 != bundle3) & (chauf1 == 3)) * abs_dev_dist_in_child1_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child2only,Chauffer 1 Absolute deviation ride share - child 2 only,((bundle1 != bundle2) & (bundle2 != bundle3) & (chauf2 == 1)) * abs_dev_dist_in_child2_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child2only,Chauffer 2 Absolute deviation ride share - child 2 only,((bundle1 != bundle2) & (bundle2 != bundle3) & (chauf2 == 3)) * abs_dev_dist_in_child2_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child3only,Chauffer 1 Absolute deviation ride share - child 3 only,((bundle1 != bundle3) & (bundle2 != bundle3) & (chauf3 == 1)) * abs_dev_dist_in_child3_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child3only,Chauffer 2 Absolute deviation ride share - child 3 only,((bundle1 != bundle3) & (bundle2 != bundle3) & (chauf3 == 3)) * abs_dev_dist_in_child3_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child12,Chauffer 1 Absolute deviation ride share - child 1 & 2,((bundle1 == bundle2) & (bundle1 != bundle3) & (chauf1 == 1)) * abs_dev_dist_in_child12_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child12,Chauffer 2 Absolute deviation ride share - child 1 & 2,((bundle1 == bundle2) & (bundle1 != bundle3) & (chauf1 == 3)) * abs_dev_dist_in_child12_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child13,Chauffer 1 Absolute deviation ride share - child 1 & 3,((bundle1 != bundle2) & (bundle1 == bundle3) & (chauf1 == 1)) * abs_dev_dist_in_child13_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child13,Chauffer 2 Absolute deviation ride share - child 1 & 3,((bundle1 != bundle2) & (bundle1 == bundle3) & (chauf1 == 3)) * abs_dev_dist_in_child13_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child23,Chauffer 1 Absolute deviation ride share - child 2 & 3,((bundle1 != bundle2) & (bundle2 == bundle3) & (chauf2 == 1)) * abs_dev_dist_in_child23_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child23,Chauffer 2 Absolute deviation ride share - child 2 & 3,((bundle1 != bundle2) & (bundle2 == bundle3) & (chauf2 == 3)) * abs_dev_dist_in_child23_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child123,Chauffer 1 Absolute deviation ride share - child 1 & 2 & 3,((bundle1 == bundle2) & (bundle2 == bundle3) & (chauf1 == 1)) * abs_dev_dist_in_child123_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child123,Chauffer 2 Absolute deviation ride share - child 1 & 2 & 3,((bundle1 == bundle2) & (bundle2 == bundle3) & (chauf1 == 3)) * abs_dev_dist_in_child123_chauf2,coef_abs_dev_distance +util_chauf1_rel_dev_rs_child1only,Chauffer 1 Relative deviation ride share - child 1 only,((bundle1 != bundle2) & (bundle1 != bundle3) & (chauf1 == 1)) * abs_dev_dist_in_child1_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child1only,Chauffer 2 Relative deviation ride share - child 1 only,((bundle1 != bundle2) & (bundle1 != bundle3) & (chauf1 == 3)) * abs_dev_dist_in_child1_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child2only,Chauffer 1 Relative deviation ride share - child 2 only,((bundle1 != bundle2) & (bundle2 != bundle3) & (chauf2 == 1)) * abs_dev_dist_in_child2_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child2only,Chauffer 2 Relative deviation ride share - child 2 only,((bundle1 != bundle2) & (bundle2 != bundle3) & (chauf2 == 3)) * abs_dev_dist_in_child2_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child3only,Chauffer 1 Relative deviation ride share - child 3 only,((bundle1 != bundle3) & (bundle2 != bundle3) & (chauf3 == 1)) * abs_dev_dist_in_child3_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child3only,Chauffer 2 Relative deviation ride share - child 3 only,((bundle1 != bundle3) & (bundle2 != bundle3) & (chauf3 == 3)) * abs_dev_dist_in_child3_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child12,Chauffer 1 Relative deviation ride share - child 1 & 2,((bundle1 == bundle2) & (bundle1 != bundle3) & (chauf1 == 1)) * abs_dev_dist_in_child12_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child12,Chauffer 2 Relative deviation ride share - child 1 & 2,((bundle1 == bundle2) & (bundle1 != bundle3) & (chauf1 == 3)) * abs_dev_dist_in_child12_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child13,Chauffer 1 Relative deviation ride share - child 1 & 3,((bundle1 != bundle2) & (bundle1 == bundle3) & (chauf1 == 1)) * abs_dev_dist_in_child13_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child13,Chauffer 2 Relative deviation ride share - child 1 & 3,((bundle1 != bundle2) & (bundle1 == bundle3) & (chauf1 == 3)) * abs_dev_dist_in_child13_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child23,Chauffer 1 Relative deviation ride share - child 2 & 3,((bundle1 != bundle2) & (bundle2 == bundle3) & (chauf2 == 1)) * abs_dev_dist_in_child23_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child23,Chauffer 2 Relative deviation ride share - child 2 & 3,((bundle1 != bundle2) & (bundle2 == bundle3) & (chauf2 == 3)) * abs_dev_dist_in_child23_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child123,Chauffer 1 Relative deviation ride share - child 1 & 2 & 3,((bundle1 == bundle2) & (bundle2 == bundle3) & (chauf1 == 1)) * abs_dev_dist_in_child123_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child123,Chauffer 2 Relative deviation ride share - child 1 & 2 & 3,((bundle1 == bundle2) & (bundle2 == bundle3) & (chauf1 == 3)) * abs_dev_dist_in_child123_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +# ,Same TAZ,, +util_same_taz_child12_escort,Same school TAZ for child 1 and 2 - Escorting,(bundle1 == bundle2) & (bundle1 > 0) & (school_location_child1 == school_location_child2) & (school_location_child1 > 0),coef_same_taz_escort +util_same_taz_child13_escort,Same school TAZ for child 1 and 3 - Escorting,(bundle1 == bundle3) & (bundle1 > 0) & (school_location_child1 == school_location_child3) & (school_location_child1 > 0),coef_same_taz_escort +util_same_taz_child32_escort,Same school TAZ for child 3 and 2 - Escorting,(bundle3 == bundle2) & (bundle2 > 0) & (school_location_child3 == school_location_child2) & (school_location_child2 > 0),coef_same_taz_escort +util_same_taz_child12_no_escort,Same school TAZ for child 1 and 2 - No Escorting,(bundle1 == 0) & (bundle2 == 0) & (child_id1 > 0) & (child_id2 > 0) & (school_location_child1 == school_location_child2) & (school_location_child1 > 0),coef_same_taz_no_escort +util_same_taz_child13_no_escort,Same school TAZ for child 1 and 3 - No Escorting,(bundle1 == 0) & (bundle3 == 0) & (child_id1 > 0) & (child_id3 > 0) & (school_location_child1 == school_location_child3) & (school_location_child1 > 0),coef_same_taz_no_escort +util_same_taz_child32_no_escort,Same school TAZ for child 3 and 2 - No Escorting,(bundle3 == 0) & (bundle2 == 0) & (child_id3 > 0) & (child_id2 > 0) & (school_location_child3 == school_location_child2) & (school_location_child2 > 0),coef_same_taz_no_escort +# ,Outbound Terms,, +util_no_escort_outbound_child1,No escorting in outbound direction - Child 1,(bundle1 == 0) & (child_id1 > 0) & (bundle1_outbound == 0),coef_no_escort_outbound +util_no_escort_outbound_child2,No escorting in outbound direction - Child 2,(bundle2 == 0) & (child_id2 > 0) & (bundle2_outbound == 0),coef_no_escort_outbound +util_no_escort_outbound_child3,No escorting in outbound direction - Child 3,(bundle3 == 0) & (child_id3 > 0) & (bundle3_outbound == 0),coef_no_escort_outbound +util_outbound_rs_child1,Ride sharing in the outbound direction - Child 1,((chauf1 == 1) | (chauf1 == 3)) & ((chauf1_outbound == 1) | (chauf1_outbound == 3)),coef_outbound_rs +util_outbound_rs_child1,Ride sharing in the outbound direction - Child 2,((chauf2 == 1) | (chauf2 == 3)) & ((chauf2_outbound == 1) | (chauf2_outbound == 3)),coef_outbound_rs +util_outbound_rs_child1,Ride sharing in the outbound direction - Child 3,((chauf3 == 1) | (chauf3 == 3)) & ((chauf3_outbound == 1) | (chauf3_outbound == 3)),coef_outbound_rs +util_same_chauf,Same chauffeur in both directions (not child specific) - chauf 1 inbound & outbound,((chauf1 == 1) | (chauf1 == 2) | (chauf2 == 1) | (chauf2 == 2) | (chauf3 == 1) | (chauf3 == 2)) & ((nbund1_outbound > 0)),coef_same_chauf +util_same_chauf,Same chauffeur in both directions (not child specific) - chauf 2 inbound & outbound,((chauf1 == 3) | (chauf1 == 4) | (chauf2 == 3) | (chauf2 == 4) | (chauf3 == 3) | (chauf3 == 4)) & ((nbund2_outbound > 0)),coef_same_chauf +# ,Calibration Constants,, +util_calib_child1_age_u6_rs,Child 1 age under 6 - Calibration constant - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 < 6),coef_calib_child_age_u6_rs +util_calib_child2_age_u6_rs,Child 2 age under 6 - Calibration constant - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 < 6),coef_calib_child_age_u6_rs +util_calib_child3_age_u6_rs,Child 3 age under 6 - Calibration constant - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 < 6),coef_calib_child_age_u6_rs +util_calib_child1_age_16p_rs,Child 1 age 16 years or older - Calibration constant - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 > 15),coef_calib_child_age_16p_rs +util_calib_child2_age_16p_rs,Child 2 age 16 years or older - Calibration constant - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 > 15),coef_calib_child_age_16p_rs +util_calib_child3_age_16p_rs,Child 3 age 16 years or older - Calibration constant - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 > 15),coef_calib_child_age_16p_rs +util_calib_child1_age_6to15_noes,Child 1 age 6 to 15 years - Calibration constant - No Escort,(bundle1 == 0) & (child_id1 > 0) & (age_child1 > 5) & (age_child1 < 16),coef_calib_child_age_6to15_noes +util_calib_child2_age_6to15_noes,Child 2 age 6 to 15 years - Calibration constant - No Escort,(bundle2 == 0) & (child_id2 > 0) & (age_child2 > 5) & (age_child2 < 16),coef_calib_child_age_6to15_noes +util_calib_child3_age_6to15_noes,Child 3 age 6 to 15 years - Calibration constant - No Escort,(bundle3 == 0) & (child_id3 > 0) & (age_child3 > 5) & (age_child3 < 16),coef_calib_child_age_6to15_noes +util_calib_child1_age_u6_noes,Child 1 age 5 years or younger - Calibration constant - No escort,(bundle1 == 0) & (child_id1 > 0) & (age_child1 < 6),coef_calib_child_age_u6_noes +util_calib_child2_age_u6_noes,Child 2 age 5 years or younger - Calibration constant - No escort,(bundle2 == 0) & (child_id2 > 0) & (age_child2 < 6),coef_calib_child_age_u6_noes +util_calib_child3_age_u6_noes,Child 3 age 5 years or younger - Calibration constant - No escort,(bundle3 == 0) & (child_id3 > 0) & (age_child3 < 6),coef_calib_child_age_u6_noes +util_calib_child1_age_6to15_rs,Child 1 age 6 to 15 years - Calibration constant - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 > 5) & (age_child1 < 16),coef_calib_child_age_6to15_rs +util_calib_child2_age_6to15_rs,Child 2 age 6 to 15 years - Calibration constant - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 > 5) & (age_child2 < 16),coef_calib_child_age_6to15_rs +util_calib_child3_age_6to15_rs,Child 3 age 6 to 15 years - Calibration constant - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 > 5) & (age_child3 < 16),coef_calib_child_age_6to15_rs diff --git a/activitysim/examples/prototype_mtc_extended/configs/school_escorting_outbound.csv b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_outbound.csv new file mode 100644 index 000000000..53f5f4ccb --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_outbound.csv @@ -0,0 +1,163 @@ +Label,Description,Expression,Coefficient +# ,Availability Conditions,, +util_one_child_to_school,Availability based on number of eligible children,((bundle2 + bundle3) > 0) & (num_children_going_to_school==1),coef_unavail +util_two_children_to_school,Availability based on number of eligible children,(bundle3 > 0) & (num_children_going_to_school == 2),coef_unavail +util_one_potential_chauffeur,Availability based on number of eligible chauffeurs,((bundle1 + bundle2 + bundle3) > 0) & (num_potential_chauffeurs == 0),coef_unavail +util_two_potential_chauffeurs,Availability based on number of eligible chauffeurs,((chauf1 > 2) | (chauf2 > 2) | (chauf3 > 2)) & (num_potential_chauffeurs == 1),coef_unavail +util_avail_rs_cdap_child1_chauf1,Availability for RideSharing by daily pattern - Child 1 and Chauffeur 1,(bundle1 > 0) & (chauf1 == 1) & (cdap_chauf1 != 'M'),coef_unavail +util_avail_rs_cdap_child1_chauf2,Availability for RideSharing by daily pattern - Child 1 and Chauffeur 2,(bundle1 > 0) & (chauf1 == 3) & (cdap_chauf2 != 'M'),coef_unavail +util_avail_rs_cdap_child2_chauf1,Availability for RideSharing by daily pattern - Child 2 and Chauffeur 1,(bundle2 > 0) & (chauf2 == 1) & (cdap_chauf1 != 'M'),coef_unavail +util_avail_rs_cdap_child2_chauf2,Availability for RideSharing by daily pattern - Child 2 and Chauffeur 2,(bundle2 > 0) & (chauf2 == 3) & (cdap_chauf2 != 'M'),coef_unavail +util_avail_rs_cdap_child3_chauf1,Availability for RideSharing by daily pattern - Child 3 and Chauffeur 1,(bundle3 > 0) & (chauf3 == 1) & (cdap_chauf1 != 'M'),coef_unavail +util_avail_rs_cdap_child3_chauf2,Availability for RideSharing by daily pattern - Child 3 and Chauffeur 2,(bundle3 > 0) & (chauf3 == 3) & (cdap_chauf2 != 'M'),coef_unavail +util_avail_rs_sync_child1_chauf1,Availability for RideSharing by synchronization - Child 1 and Chauffeur 1,@(df.bundle1 > 0) & (df.chauf1 == 1) & (df.pref_depart_time_chauf1 > 0) & (np.abs(df.pref_depart_time_chauf1 - df.pref_depart_time_school1) > max_bin_difference_between_departure_times),coef_unavail +util_avail_rs_sync_child1_chauf2,Availability for RideSharing by synchronization - Child 1 and Chauffeur 2,@(df.bundle1 > 0) & (df.chauf1 == 3) & (df.pref_depart_time_chauf2 > 0) & (np.abs(df.pref_depart_time_chauf2 - df.pref_depart_time_school1) > max_bin_difference_between_departure_times),coef_unavail +util_avail_rs_sync_child2_chauf1,Availability for RideSharing by synchronization - Child 2 and Chauffeur 1,@(df.bundle2 > 0) & (df.chauf2 == 1) & (df.pref_depart_time_chauf1 > 0) & (np.abs(df.pref_depart_time_chauf1 - df.pref_depart_time_school2) > max_bin_difference_between_departure_times),coef_unavail +util_avail_rs_sync_child2_chauf2,Availability for RideSharing by synchronization - Child 2 and Chauffeur 2,@(df.bundle2 > 0) & (df.chauf2 == 3) & (df.pref_depart_time_chauf2 > 0) & (np.abs(df.pref_depart_time_chauf2 - df.pref_depart_time_school2) > max_bin_difference_between_departure_times),coef_unavail +util_avail_rs_sync_child3_chauf1,Availability for RideSharing by synchronization - Child 3 and Chauffeur 1,@(df.bundle3 > 0) & (df.chauf3 == 1) & (df.pref_depart_time_chauf1 > 0) & (np.abs(df.pref_depart_time_chauf1 - df.pref_depart_time_school3) > max_bin_difference_between_departure_times),coef_unavail +util_avail_rs_sync_child3_chauf2,Availability for RideSharing by synchronization - Child 3 and Chauffeur 2,@(df.bundle3 > 0) & (df.chauf3 == 3) & (df.pref_depart_time_chauf2 > 0) & (np.abs(df.pref_depart_time_chauf2 - df.pref_depart_time_school3) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_cdap_child1_chauf1,Availability for Pure-Escorting by daily pattern - Child 1 and Chauffeur 1,(bundle1 > 0) & (chauf1 == 2) & (ptype_chauf1 < 6) & (cdap_chauf1 == 'H'),coef_unavail +util_avail_pe_cdap_child1_chauf2,Availability for Pure-Escorting by daily pattern - Child 1 and Chauffeur 2,(bundle1 > 0) & (chauf1 == 4) & (ptype_chauf2 < 6) & (cdap_chauf2 == 'H'),coef_unavail +util_avail_pe_cdap_child2_chauf1,Availability for Pure-Escorting by daily pattern - Child 2 and Chauffeur 1,(bundle2 > 0) & (chauf2 == 2) & (ptype_chauf1 < 6) & (cdap_chauf1 == 'H'),coef_unavail +util_avail_pe_cdap_child2_chauf2,Availability for Pure-Escorting by daily pattern - Child 2 and Chauffeur 2,(bundle2 > 0) & (chauf2 == 4) & (ptype_chauf2 < 6) & (cdap_chauf2 == 'H'),coef_unavail +util_avail_pe_cdap_child3_chauf1,Availability for Pure-Escorting by daily pattern - Child 3 and Chauffeur 1,(bundle3 > 0) & (chauf3 == 2) & (ptype_chauf1 < 6) & (cdap_chauf1 == 'H'),coef_unavail +util_avail_pe_cdap_child3_chauf2,Availability for Pure-Escorting by daily pattern - Child 3 and Chauffeur 2,(bundle3 > 0) & (chauf3 == 4) & (ptype_chauf2 < 6) & (cdap_chauf2 == 'H'),coef_unavail +util_avail_pe_sync_child1_chauf1,Availability for Pure-Escorting by synchronization - Child 1 and Chauffeur 1,@(df.bundle1 > 0) & (df.chauf1 == 2) & (df.ptype_chauf1 < 4) & (df.cdap_chauf1 == 'H') & (np.abs(df.pref_depart_time_school1 + ((df.time_home_to_school1 + df.time_school_to_home1) / mins_per_time_bin) - df.pref_depart_time_chauf1) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_sync_child1_chauf2,Availability for Pure-Escorting by synchronization - Child 1 and Chauffeur 2,@(df.bundle1 > 0) & (df.chauf1 == 4) & (df.ptype_chauf2 < 4) & (df.cdap_chauf2 == 'H') & (np.abs(df.pref_depart_time_school1 + ((df.time_home_to_school1 + df.time_school_to_home1) / mins_per_time_bin) - df.pref_depart_time_chauf2) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_sync_child2_chauf1,Availability for Pure-Escorting by synchronization - Child 2 and Chauffeur 1,@(df.bundle2 > 0) & (df.chauf2 == 2) & (df.ptype_chauf1 < 4) & (df.cdap_chauf1 == 'H') & (np.abs(df.pref_depart_time_school2 + ((df.time_home_to_school2 + df.time_school_to_home2) / mins_per_time_bin) - df.pref_depart_time_chauf1) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_sync_child2_chauf2,Availability for Pure-Escorting by synchronization - Child 2 and Chauffeur 2,@(df.bundle2 > 0) & (df.chauf2 == 4) & (df.ptype_chauf2 < 4) & (df.cdap_chauf2 == 'H') & (np.abs(df.pref_depart_time_school2 + ((df.time_home_to_school2 + df.time_school_to_home2) / mins_per_time_bin) - df.pref_depart_time_chauf2) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_sync_child3_chauf1,Availability for Pure-Escorting by synchronization - Child 3 and Chauffeur 1,@(df.bundle3 > 0) & (df.chauf3 == 2) & (df.ptype_chauf1 < 4) & (df.cdap_chauf1 == 'H') & (np.abs(df.pref_depart_time_school3 + ((df.time_home_to_school3 + df.time_school_to_home3) / mins_per_time_bin) - df.pref_depart_time_chauf1) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_sync_child3_chauf2,Availability for Pure-Escorting by synchronization - Child 3 and Chauffeur 2,@(df.bundle3 > 0) & (df.chauf3 == 4) & (df.ptype_chauf2 < 4) & (df.cdap_chauf2 == 'H') & (np.abs(df.pref_depart_time_school3 + ((df.time_home_to_school3 + df.time_school_to_home3) / mins_per_time_bin) - df.pref_depart_time_chauf2) > max_bin_difference_between_departure_times),coef_unavail +util_avail_bundle_child_1and2,Availability for bundling child 1 and child 2,@(df.bundle1 == df.bundle2) & (df.bundle1 > 0) & (np.abs(df.pref_depart_time_school1 - df.pref_depart_time_school2) > max_bin_difference_between_departure_times),coef_unavail +util_avail_bundle_child_1and3,Availability for bundling child 1 and child 3,@(df.bundle1 == df.bundle3) & (df.bundle1 > 0) & (np.abs(df.pref_depart_time_school1 - df.pref_depart_time_school3) > max_bin_difference_between_departure_times),coef_unavail +util_avail_bundle_child_2and3,Availability for bundling child 2 and child 3,@(df.bundle2 == df.bundle3) & (df.bundle2 > 0) & (np.abs(df.pref_depart_time_school2 - df.pref_depart_time_school3) > max_bin_difference_between_departure_times),coef_unavail +util_avail_mult_bundles_outbound1,Availability Chauffeur 1 - Expected arrival from previous pure escort must be before departure for subsequent escort,((nrs1 + npe1) > 1) & ~avail_multiple_bundles,coef_unavail +util_avail_mult_bundles_outbound2,Availability Chauffeur 2 - Expected arrival from previous pure escort must be before departure for subsequent escort,((nrs2 + npe2) > 1) & ~avail_multiple_bundles,coef_unavail +util_avail_pe_during_mand_child1_chauf1,Availability pure escort tour must take place before mandatory tour - Child 1 and Chauffeur 1,@(df.bundle1 > 0) & (df.chauf1 == 2) & (df.cdap_chauf1 == 'M') & ((df.pref_depart_time_chauf1 - max_bin_difference_between_departure_times) <= df.pref_depart_time_school1),coef_unavail +util_avail_pe_during_mand_child1_chauf2,Availability pure escort tour must take place before mandatory tour - Child 1 and Chauffeur 2,@(df.bundle1 > 0) & (df.chauf1 == 4) & (df.cdap_chauf2 == 'M') & ((df.pref_depart_time_chauf2 - max_bin_difference_between_departure_times) <= df.pref_depart_time_school1),coef_unavail +util_avail_pe_during_mand_child2_chauf1,Availability pure escort tour must take place before mandatory tour - Child 2 and Chauffeur 1,@(df.bundle2 > 0) & (df.chauf2 == 2) & (df.cdap_chauf1 == 'M') & ((df.pref_depart_time_chauf1 - max_bin_difference_between_departure_times) <= df.pref_depart_time_school2),coef_unavail +util_avail_pe_during_mand_child2_chauf2,Availability pure escort tour must take place before mandatory tour - Child 2 and Chauffeur 2,@(df.bundle2 > 0) & (df.chauf2 == 4) & (df.cdap_chauf2 == 'M') & ((df.pref_depart_time_chauf2 - max_bin_difference_between_departure_times) <= df.pref_depart_time_school2),coef_unavail +util_avail_pe_during_mand_child3_chauf1,Availability pure escort tour must take place before mandatory tour - Child 3 and Chauffeur 1,@(df.bundle3 > 0) & (df.chauf3 == 2) & (df.cdap_chauf1 == 'M') & ((df.pref_depart_time_chauf1 - max_bin_difference_between_departure_times) <= df.pref_depart_time_school3),coef_unavail +util_avail_pe_during_mand_child3_chauf2,Availability pure escort tour must take place before mandatory tour - Child 3 and Chauffeur 2,@(df.bundle3 > 0) & (df.chauf3 == 4) & (df.cdap_chauf2 == 'M') & ((df.pref_depart_time_chauf2 - max_bin_difference_between_departure_times) <= df.pref_depart_time_school3),coef_unavail +# ,No escorting,, +util_child1_age_16p_noes,Child 1 age 16 years or older - No escort,(bundle1 == 0) & (child_id1 > 0) & (age_child1 > 15),coef_child_age_16p_noes +util_child2_age_16p_noes,Child 2 age 16 years or older - No escort,(bundle2 == 0) & (child_id2 > 0) & (age_child2 > 15),coef_child_age_16p_noes +util_child3_age_16p_noes,Child 3 age 16 years or older - No escort,(bundle3 == 0) & (child_id3 > 0) & (age_child3 > 15),coef_child_age_16p_noes +util_child1_age_10_to_15_noes,Child 1 age 10 to 15 years - No escort,(bundle1 == 0) & (child_id1 > 0) & (age_child1 > 9) & (age_child1 < 16),coef_child_age_10_to_15_noes +util_child2_age_10_to_15_noes,Child 2 age 10 to 15 years - No escort,(bundle2 == 0) & (child_id2 > 0) & (age_child2 > 9) & (age_child2 < 16),coef_child_age_10_to_15_noes +util_child3_age_10_to_15_noes,Child 3 age 10 to 15 years - No escort,(bundle3 == 0) & (child_id3 > 0) & (age_child3 > 9) & (age_child3 < 16),coef_child_age_10_to_15_noes +util_child1_age_u9_noes,Child 1 age 9 years or younger - No escort,(bundle1 == 0) & (child_id1 > 0) & (age_child1 < 10),coef_child_age_u9_noes +util_child2_age_u9_noes,Child 2 age 9 years or younger - No escort,(bundle2 == 0) & (child_id2 > 0) & (age_child2 < 10),coef_child_age_u9_noes +util_child3_age_u9_noes,Child 3 age 9 years or younger - No escort,(bundle3 == 0) & (child_id3 > 0) & (age_child3 < 10),coef_child_age_u9_noes +util_ln_dist_to_school_child1_noes,Logged distance to school for Child 1 - No escort,@(df.bundle1 == 0) * (df.child_id1 > 0) * np.log(1 + df.dist_home_to_school1),coef_ln_dist_to_school_noes +util_ln_dist_to_school_child2_noes,Logged distance to school for Child 2 - No escort,@(df.bundle2 == 0) * (df.child_id2 > 0) * np.log(1 + df.dist_home_to_school2),coef_ln_dist_to_school_noes +util_ln_dist_to_school_child3_noes,Logged distance to school for Child 3 - No escort,@(df.bundle3 == 0) * (df.child_id3 > 0) * np.log(1 + df.dist_home_to_school3),coef_ln_dist_to_school_noes +util_ln_dist_to_school_child1_u6_noes,Logged distance to school for Child 1 under 6 years old - No escort,@(df.bundle1 == 0) * (df.child_id1 > 0) * (df.age_child1 < 6) * np.log(1 + df.dist_home_to_school1),coef_ln_dist_to_school_u6_noes +util_ln_dist_to_school_child2_u6_noes,Logged distance to school for Child 2 under 6 years old - No escort,@(df.bundle2 == 0) * (df.child_id2 > 0) * (df.age_child2 < 6) * np.log(1 + df.dist_home_to_school2),coef_ln_dist_to_school_u6_noes +util_ln_dist_to_school_child3_u6_noes,Logged distance to school for Child 3 under 6 years old - No escort,@(df.bundle3 == 0) * (df.child_id3 > 0) * (df.age_child3 < 6) * np.log(1 + df.dist_home_to_school3),coef_ln_dist_to_school_u6_noes +util_ln_dist_to_school_child1_6to9_noes,Logged distance to school for Child 1 6 to 9 years old - No escort,@(df.bundle1 == 0) * (df.child_id1 > 0) * (df.age_child1 > 5) * (df.age_child1 < 10) * np.log(1 + df.dist_home_to_school1),coef_ln_dist_to_school_6to9_noes +util_ln_dist_to_school_child2_6to9_noes,Logged distance to school for Child 2 6 to 9 years old - No escort,@(df.bundle2 == 0) * (df.child_id2 > 0) * (df.age_child2 > 5) * (df.age_child2 < 10) * np.log(1 + df.dist_home_to_school2),coef_ln_dist_to_school_6to9_noes +util_ln_dist_to_school_child3_6to9_noes,Logged distance to school for Child 3 6 to 9 years old - No escort,@(df.bundle3 == 0) * (df.child_id3 > 0) * (df.age_child3 > 5) * (df.age_child3 < 10) * np.log(1 + df.dist_home_to_school3),coef_ln_dist_to_school_6to9_noes +# ,Ride Sharing,, +util_child1_age_16p_rs,Child 1 age 16 years or older - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 > 15),coef_child_age_16p_rs +util_child2_age_16p_rs,Child 2 age 16 years or older - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 > 15),coef_child_age_16p_rs +util_child3_age_16p_rs,Child 3 age 16 years or older - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 > 15),coef_child_age_16p_rs +util_child1_age_10to15_rs,Child 1 age 10 to 15 years - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 > 9) & (age_child1 < 16),coef_child_age_10to15_rs +util_child2_age_10to15_rs,Child 2 age 10 to 15 years - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 > 9) & (age_child2 < 16),coef_child_age_10to15_rs +util_child3_age_10to15_rs,Child 3 age 10 to 15 years - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 > 9) & (age_child3 < 16),coef_child_age_10to15_rs +util_child1_age_6to9_rs,Child 1 age 6 to 9 years - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 > 5) & (age_child1 < 10),coef_child_age_6to9_rs +util_child2_age_6to9_rs,Child 2 age 6 to 9 years - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 > 5) & (age_child2 < 10),coef_child_age_6to9_rs +util_child3_age_6to9_rs,Child 3 age 6 to 9 years - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 > 5) & (age_child3 < 10),coef_child_age_6to9_rs +util_child1_age_u6_rs,Child 1 age under 6 years old - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 < 6),coef_child_age_u6_rs +util_child2_age_u6_rs,Child 2 age under 6 years old - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 < 6),coef_child_age_u6_rs +util_child3_age_u6_rs,Child 3 age under 6 years old - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 < 6),coef_child_age_u6_rs +# ,Pure Escort Distance,, +util_child1_dist_pe,Child 1 distance to school - Pure escorting,((chauf1 == 2) | (chauf1 == 4)) * dist_home_to_school1,coef_child_dist_pe +util_child2_dist_pe,Child 2 distance to school - Pure escorting,((chauf2 == 2) | (chauf2 == 4)) * dist_home_to_school2,coef_child_dist_pe +util_child3_dist_pe,Child 3 distance to school - Pure escorting,((chauf3 == 2) | (chauf3 == 4)) * dist_home_to_school3,coef_child_dist_pe +util_child1_dist_pe,Child 1 Pure escorting not allowed if over 30 miles,((chauf1 == 2) | (chauf1 == 4)) & (dist_home_to_school1 > 30),coef_unavail +util_child2_dist_pe,Child 2 Pure escorting not allowed if over 30 miles,((chauf2 == 2) | (chauf2 == 4)) & (dist_home_to_school2 > 30),coef_unavail +util_child3_dist_pe,Child 3 Pure escorting not allowed if over 30 miles,((chauf3 == 2) | (chauf3 == 4)) & (dist_home_to_school3 > 30),coef_unavail +# ,Household Interactions,, +util_hh_inc_u25k_noes,Household income less than 25k - No Escorting,(income <= 25000) & ((bundle1 == 0) | ((bundle2 == 0) & (num_children_going_to_school > 1)) | ((bundle3 == 0) & (num_children_going_to_school > 2))),coef_hh_inc_u25k_noes +util_hh_inc_25to50k_noes,Household income between 25 and 50k - No Escorting,((income > 25000) & (income <= 50000)) & ((bundle1 == 0) | ((bundle2 == 0) & (num_children_going_to_school > 1)) | ((bundle3 == 0) & (num_children_going_to_school > 2))),coef_hh_inc_25to50k_noes +util_zero_auto_hh_noes,Zero cars in the household - No Escorting,(auto_ownership == 0) & ((bundle1 == 0) | ((bundle2 == 0) & (num_children_going_to_school > 1)) | ((bundle3 == 0) & (num_children_going_to_school > 2))),coef_zero_auto_hh_noes +util_cars_lt_workers_rs,Cars fewer than household workers - Ride Share,(auto_ownership < num_workers) & ((chauf1 % 2 == 1) | (chauf2 % 2 == 1) | (chauf3 % 2 == 1)),coef_cars_lt_workers_rs +util_cars_lt_workers_pe,Cars fewer than household workers - Pure escort,(auto_ownership < num_workers) & ((chauf1 % 2 == 0) | (chauf2 % 2 == 0) | (chauf3 % 2 == 0)),coef_cars_lt_workers_pe +# ,Chauffer Interactions,, +util_chauf1_female_rs,Chauffeur 1 Female - Ride share,(gender_chauf1 == 2) & ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_female_rs +util_chauf1_male_rs,Chauffeur 1 Male - Ride share,(gender_chauf1 == 1) & ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_male_rs +util_chauf1_female_pe,Chauffeur 1 Female - Pure Escort,(gender_chauf1 == 2) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_female_pe +util_chauf1_male_pe,Chauffeur 1 Male - Pure Escort,(gender_chauf1 == 1) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_male_pe +util_chauf2_female_rs,Chauffeur 2 Female - Ride share,(gender_chauf2 == 2) & ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_female_rs +util_chauf2_male_rs,Chauffeur 2 Male - Ride share,(gender_chauf2 == 1) & ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_male_rs +util_chauf2_female_pe,Chauffeur 2 Female - Pure Escort,(gender_chauf2 == 2) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_female_pe +util_chauf2_male_pe,Chauffeur 2 Male - Pure Escort,(gender_chauf2 == 1) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_male_pe +util_chauf1_pt_worker_rs,Chauffer 1 part time worker - Ride share,(ptype_chauf1 == 2) & ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_pt_worker_rs +util_chauf1_pt_worker_pe,Chauffer 1 part time worker - Pure escort,(ptype_chauf1 == 2) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_pt_worker_pe +util_chauf2_pt_worker_rs,Chauffer 2 part time worker - Ride share,(ptype_chauf2 == 2) & ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_pt_worker_rs +util_chauf2_pt_worker_pe,Chauffer 2 part time worker - Pure escort,(ptype_chauf2 == 2) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_pt_worker_pe +util_chauf1_non_worker_pe,Chauffer 1 non worker - Pure escort,(ptype_chauf1 == 4) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_non_worker_pe +util_chauf2_non_worker_pe,Chauffer 2 non worker - Pure escort,(ptype_chauf2 == 4) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_non_worker_pe +util_chauf1_univ_stud_re,Chauffer 1 university student - Ride Share,(ptype_chauf1 == 3) & ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_univ_stud_re +util_chauf2_univ_stud_re,Chauffer 2 university student - Ride Share,(ptype_chauf2 == 3) & ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_univ_stud_re +util_chauf1_age_u35_pe,Chauffer 1 Age 35 years or younger - Pure escort,(ptype_chauf1 == 4) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_age_u35_pe +util_chauf2_age_u35_pe,Chauffer 2 Age 35 years or younger - Pure escort,(ptype_chauf2 == 4) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_age_u35_pe +util_chauf1_time_to_work_or_univ_rs,Chauffer 1 Auto time to work or university - Ride Share,time_home_to_mand1 * ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_time_to_work_or_univ_rs +util_chauf2_time_to_work_or_univ_rs,Chauffer 2 Auto time to work or university - Ride Share,time_home_to_mand2 * ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_time_to_work_or_univ_rs +util_chauf1_walk_dist_to_work_or_univ_rs,Chauffer 1 Walk dist to work or university - Ride Share,(dist_home_to_mand1 < 3) & ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_walk_dist_to_work_or_univ_rs +util_chauf2_walk_dist_to_work_or_univ_rs,Chauffer 2 Walk dist to work or university - Ride Share,(dist_home_to_mand2 < 3) & ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_walk_dist_to_work_or_univ_rs +util_chauf1_walk_dist_to_work_or_univ_pe,Chauffer 1 Walk dist to work or university - Pure Escort,(dist_home_to_mand1 < 3) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_walk_dist_to_work_or_univ_pe +util_chauf2_walk_dist_to_work_or_univ_pe,Chauffer 2 Walk dist to work or university - Pure Escort,(dist_home_to_mand2 < 3) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_walk_dist_to_work_or_univ_pe +# ,Chauffer deviation,, +util_chauf1_abs_dev_rs_child1only,Chauffer 1 Absolute deviation ride share - child 1 only,((bundle1 != bundle2) & (bundle1 != bundle3) & (chauf1 == 1)) * abs_dev_dist_out_child1_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child1only,Chauffer 2 Absolute deviation ride share - child 1 only,((bundle1 != bundle2) & (bundle1 != bundle3) & (chauf1 == 3)) * abs_dev_dist_out_child1_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child2only,Chauffer 1 Absolute deviation ride share - child 2 only,((bundle1 != bundle2) & (bundle2 != bundle3) & (chauf2 == 1)) * abs_dev_dist_out_child2_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child2only,Chauffer 2 Absolute deviation ride share - child 2 only,((bundle1 != bundle2) & (bundle2 != bundle3) & (chauf2 == 3)) * abs_dev_dist_out_child2_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child3only,Chauffer 1 Absolute deviation ride share - child 3 only,((bundle1 != bundle3) & (bundle2 != bundle3) & (chauf3 == 1)) * abs_dev_dist_out_child3_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child3only,Chauffer 2 Absolute deviation ride share - child 3 only,((bundle1 != bundle3) & (bundle2 != bundle3) & (chauf3 == 3)) * abs_dev_dist_out_child3_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child12,Chauffer 1 Absolute deviation ride share - child 1 & 2,((bundle1 == bundle2) & (bundle1 != bundle3) & (chauf1 == 1)) * abs_dev_dist_out_child12_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child12,Chauffer 2 Absolute deviation ride share - child 1 & 2,((bundle1 == bundle2) & (bundle1 != bundle3) & (chauf1 == 3)) * abs_dev_dist_out_child12_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child13,Chauffer 1 Absolute deviation ride share - child 1 & 3,((bundle1 != bundle2) & (bundle1 == bundle3) & (chauf1 == 1)) * abs_dev_dist_out_child13_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child13,Chauffer 2 Absolute deviation ride share - child 1 & 3,((bundle1 != bundle2) & (bundle1 == bundle3) & (chauf1 == 3)) * abs_dev_dist_out_child13_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child23,Chauffer 1 Absolute deviation ride share - child 2 & 3,((bundle1 != bundle2) & (bundle2 == bundle3) & (chauf2 == 1)) * abs_dev_dist_out_child23_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child23,Chauffer 2 Absolute deviation ride share - child 2 & 3,((bundle1 != bundle2) & (bundle2 == bundle3) & (chauf2 == 3)) * abs_dev_dist_out_child23_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child123,Chauffer 1 Absolute deviation ride share - child 1 & 2 & 3,((bundle1 == bundle2) & (bundle2 == bundle3) & (chauf1 == 1)) * abs_dev_dist_out_child123_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child123,Chauffer 2 Absolute deviation ride share - child 1 & 2 & 3,((bundle1 == bundle2) & (bundle2 == bundle3) & (chauf1 == 3)) * abs_dev_dist_out_child123_chauf2,coef_abs_dev_distance +util_chauf1_rel_dev_rs_child1only,Chauffer 1 Relative deviation ride share - child 1 only,((bundle1 != bundle2) & (bundle1 != bundle3) & (chauf1 == 1)) * abs_dev_dist_out_child1_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child1only,Chauffer 2 Relative deviation ride share - child 1 only,((bundle1 != bundle2) & (bundle1 != bundle3) & (chauf1 == 3)) * abs_dev_dist_out_child1_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child2only,Chauffer 1 Relative deviation ride share - child 2 only,((bundle1 != bundle2) & (bundle2 != bundle3) & (chauf2 == 1)) * abs_dev_dist_out_child2_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child2only,Chauffer 2 Relative deviation ride share - child 2 only,((bundle1 != bundle2) & (bundle2 != bundle3) & (chauf2 == 3)) * abs_dev_dist_out_child2_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child3only,Chauffer 1 Relative deviation ride share - child 3 only,((bundle1 != bundle3) & (bundle2 != bundle3) & (chauf3 == 1)) * abs_dev_dist_out_child3_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child3only,Chauffer 2 Relative deviation ride share - child 3 only,((bundle1 != bundle3) & (bundle2 != bundle3) & (chauf3 == 3)) * abs_dev_dist_out_child3_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child12,Chauffer 1 Relative deviation ride share - child 1 & 2,((bundle1 == bundle2) & (bundle1 != bundle3) & (chauf1 == 1)) * abs_dev_dist_out_child12_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child12,Chauffer 2 Relative deviation ride share - child 1 & 2,((bundle1 == bundle2) & (bundle1 != bundle3) & (chauf1 == 3)) * abs_dev_dist_out_child12_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child13,Chauffer 1 Relative deviation ride share - child 1 & 3,((bundle1 != bundle2) & (bundle1 == bundle3) & (chauf1 == 1)) * abs_dev_dist_out_child13_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child13,Chauffer 2 Relative deviation ride share - child 1 & 3,((bundle1 != bundle2) & (bundle1 == bundle3) & (chauf1 == 3)) * abs_dev_dist_out_child13_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child23,Chauffer 1 Relative deviation ride share - child 2 & 3,((bundle1 != bundle2) & (bundle2 == bundle3) & (chauf2 == 1)) * abs_dev_dist_out_child23_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child23,Chauffer 2 Relative deviation ride share - child 2 & 3,((bundle1 != bundle2) & (bundle2 == bundle3) & (chauf2 == 3)) * abs_dev_dist_out_child23_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child123,Chauffer 1 Relative deviation ride share - child 1 & 2 & 3,((bundle1 == bundle2) & (bundle2 == bundle3) & (chauf1 == 1)) * abs_dev_dist_out_child123_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child123,Chauffer 2 Relative deviation ride share - child 1 & 2 & 3,((bundle1 == bundle2) & (bundle2 == bundle3) & (chauf1 == 3)) * abs_dev_dist_out_child123_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +# ,Same TAZ,, +util_same_taz_child12_escort,Same school TAZ for child 1 and 2 - Escorting,(bundle1 == bundle2) & (bundle1 > 0) & (school_location_child1 == school_location_child2) & (school_location_child1 > 0),coef_same_taz_escort +util_same_taz_child13_escort,Same school TAZ for child 1 and 3 - Escorting,(bundle1 == bundle3) & (bundle1 > 0) & (school_location_child1 == school_location_child3) & (school_location_child1 > 0),coef_same_taz_escort +util_same_taz_child32_escort,Same school TAZ for child 3 and 2 - Escorting,(bundle3 == bundle2) & (bundle2 > 0) & (school_location_child3 == school_location_child2) & (school_location_child2 > 0),coef_same_taz_escort +util_same_taz_child12_no_escort,Same school TAZ for child 1 and 2 - No Escorting,(bundle1 == 0) & (bundle2 == 0) & (child_id1 > 0) & (child_id2 > 0) & (school_location_child1 == school_location_child2) & (school_location_child1 > 0),coef_same_taz_no_escort +util_same_taz_child13_no_escort,Same school TAZ for child 1 and 3 - No Escorting,(bundle1 == 0) & (bundle3 == 0) & (child_id1 > 0) & (child_id3 > 0) & (school_location_child1 == school_location_child3) & (school_location_child1 > 0),coef_same_taz_no_escort +util_same_taz_child32_no_escort,Same school TAZ for child 3 and 2 - No Escorting,(bundle3 == 0) & (bundle2 == 0) & (child_id3 > 0) & (child_id2 > 0) & (school_location_child3 == school_location_child2) & (school_location_child2 > 0),coef_same_taz_no_escort_23 +# ,Calibration constants,, +util_calib_child1_age_u6_rs,Child 1 age under 6 - Calibration constant - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 < 6),coef_calib_child_age_u6_rs +util_calib_child2_age_u6_rs,Child 2 age under 6 - Calibration constant - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 < 6),coef_calib_child_age_u6_rs +util_calib_child3_age_u6_rs,Child 3 age under 6 - Calibration constant - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 < 6),coef_calib_child_age_u6_rs +util_calib_child1_age_16p_rs,Child 1 age 16 years or older - Calibration constant - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 > 15),coef_calib_child_age_16p_rs +util_calib_child2_age_16p_rs,Child 2 age 16 years or older - Calibration constant - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 > 15),coef_calib_child_age_16p_rs +util_calib_child3_age_16p_rs,Child 3 age 16 years or older - Calibration constant - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 > 15),coef_calib_child_age_16p_rs +util_calib_child1_age_6to15_noes,Child 1 age 6 to 15 years - Calibration constant - No Escort,(bundle1 == 0) & (child_id1 > 0) & (age_child1 > 5) & (age_child1 < 16),coef_calib_child_age_6to15_noes +util_calib_child2_age_6to15_noes,Child 2 age 6 to 15 years - Calibration constant - No Escort,(bundle2 == 0) & (child_id2 > 0) & (age_child2 > 5) & (age_child2 < 16),coef_calib_child_age_6to15_noes +util_calib_child3_age_6to15_noes,Child 3 age 6 to 15 years - Calibration constant - No Escort,(bundle3 == 0) & (child_id3 > 0) & (age_child3 > 5) & (age_child3 < 16),coef_calib_child_age_6to15_noes +util_calib_child1_age_6to15_rs,Child 1 age 6 to 15 years - Calibration constant - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 > 5) & (age_child1 < 16),coef_calib_child_age_6to15_rs +util_calib_child2_age_6to15_rs,Child 2 age 6 to 15 years - Calibration constant - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 > 5) & (age_child2 < 16),coef_calib_child_age_6to15_rs +util_calib_child3_age_6to15_rs,Child 3 age 6 to 15 years - Calibration constant - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 > 5) & (age_child3 < 16),coef_calib_child_age_6to15_rs +util_calib_child1_age_u6_noes,Child 1 age 6 years or younger - Calibration constant - No escort,(bundle1 == 0) & (child_id1 > 0) & (age_child1 < 6),coef_calib_child_age_u6_noes +util_calib_child2_age_u6_noes,Child 2 age 6 years or younger - Calibration constant - No escort,(bundle2 == 0) & (child_id2 > 0) & (age_child2 < 6),coef_calib_child_age_u6_noes +util_calib_child3_age_u6_noes,Child 3 age 6 years or younger - Calibration constant - No escort,(bundle3 == 0) & (child_id3 > 0) & (age_child3 < 6),coef_calib_child_age_u6_noes diff --git a/activitysim/examples/prototype_mtc_extended/configs/school_escorting_outbound_cond.csv b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_outbound_cond.csv new file mode 100644 index 000000000..00527edc3 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_outbound_cond.csv @@ -0,0 +1,169 @@ +Label,Description,Expression,Coefficient +# ,Availability Conditions,, +util_one_child_to_school,Availability based on number of eligible children,((bundle2 + bundle3) > 0) & (num_children_going_to_school==1),coef_unavail +util_two_children_to_school,Availability based on number of eligible children,(bundle3 > 0) & (num_children_going_to_school == 2),coef_unavail +util_one_potential_chauffeur,Availability based on number of eligible chauffeurs,((bundle1 + bundle2 + bundle3) > 0) & (num_potential_chauffeurs == 0),coef_unavail +util_two_potential_chauffeurs,Availability based on number of eligible chauffeurs,((chauf1 > 2) | (chauf2 > 2) | (chauf3 > 2)) & (num_potential_chauffeurs == 1),coef_unavail +util_avail_rs_cdap_child1_chauf1,Availability for RideSharing by daily pattern - Child 1 and Chauffeur 1,(bundle1 > 0) & (chauf1 == 1) & (cdap_chauf1 != 'M'),coef_unavail +util_avail_rs_cdap_child1_chauf2,Availability for RideSharing by daily pattern - Child 1 and Chauffeur 2,(bundle1 > 0) & (chauf1 == 3) & (cdap_chauf2 != 'M'),coef_unavail +util_avail_rs_cdap_child2_chauf1,Availability for RideSharing by daily pattern - Child 2 and Chauffeur 1,(bundle2 > 0) & (chauf2 == 1) & (cdap_chauf1 != 'M'),coef_unavail +util_avail_rs_cdap_child2_chauf2,Availability for RideSharing by daily pattern - Child 2 and Chauffeur 2,(bundle2 > 0) & (chauf2 == 3) & (cdap_chauf2 != 'M'),coef_unavail +util_avail_rs_cdap_child3_chauf1,Availability for RideSharing by daily pattern - Child 3 and Chauffeur 1,(bundle3 > 0) & (chauf3 == 1) & (cdap_chauf1 != 'M'),coef_unavail +util_avail_rs_cdap_child3_chauf2,Availability for RideSharing by daily pattern - Child 3 and Chauffeur 2,(bundle3 > 0) & (chauf3 == 3) & (cdap_chauf2 != 'M'),coef_unavail +util_avail_rs_sync_child1_chauf1,Availability for RideSharing by synchronization - Child 1 and Chauffeur 1,@(df.bundle1 > 0) & (df.chauf1 == 1) & (np.abs(df.pref_depart_time_chauf1 - df.pref_depart_time_school1) > max_bin_difference_between_departure_times),coef_unavail +util_avail_rs_sync_child1_chauf2,Availability for RideSharing by synchronization - Child 1 and Chauffeur 2,@(df.bundle1 > 0) & (df.chauf1 == 3) & (np.abs(df.pref_depart_time_chauf2 - df.pref_depart_time_school1) > max_bin_difference_between_departure_times),coef_unavail +util_avail_rs_sync_child2_chauf1,Availability for RideSharing by synchronization - Child 2 and Chauffeur 1,@(df.bundle2 > 0) & (df.chauf2 == 1) & (np.abs(df.pref_depart_time_chauf1 - df.pref_depart_time_school2) > max_bin_difference_between_departure_times),coef_unavail +util_avail_rs_sync_child2_chauf2,Availability for RideSharing by synchronization - Child 2 and Chauffeur 2,@(df.bundle2 > 0) & (df.chauf2 == 3) & (np.abs(df.pref_depart_time_chauf2 - df.pref_depart_time_school2) > max_bin_difference_between_departure_times),coef_unavail +util_avail_rs_sync_child3_chauf1,Availability for RideSharing by synchronization - Child 3 and Chauffeur 1,@(df.bundle3 > 0) & (df.chauf3 == 1) & (np.abs(df.pref_depart_time_chauf1 - df.pref_depart_time_school3) > max_bin_difference_between_departure_times),coef_unavail +util_avail_rs_sync_child3_chauf2,Availability for RideSharing by synchronization - Child 3 and Chauffeur 2,@(df.bundle3 > 0) & (df.chauf3 == 3) & (np.abs(df.pref_depart_time_chauf2 - df.pref_depart_time_school3) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_cdap_child1_chauf1,Availability for Pure-Escorting by daily pattern - Child 1 and Chauffeur 1,(bundle1 > 0) & (chauf1 == 2) & (ptype_chauf1 < 6) & (cdap_chauf1 == 'H'),coef_unavail +util_avail_pe_cdap_child1_chauf2,Availability for Pure-Escorting by daily pattern - Child 1 and Chauffeur 2,(bundle1 > 0) & (chauf1 == 4) & (ptype_chauf2 < 6) & (cdap_chauf2 == 'H'),coef_unavail +util_avail_pe_cdap_child2_chauf1,Availability for Pure-Escorting by daily pattern - Child 2 and Chauffeur 1,(bundle2 > 0) & (chauf2 == 2) & (ptype_chauf1 < 6) & (cdap_chauf1 == 'H'),coef_unavail +util_avail_pe_cdap_child2_chauf2,Availability for Pure-Escorting by daily pattern - Child 2 and Chauffeur 2,(bundle2 > 0) & (chauf2 == 4) & (ptype_chauf2 < 6) & (cdap_chauf2 == 'H'),coef_unavail +util_avail_pe_cdap_child3_chauf1,Availability for Pure-Escorting by daily pattern - Child 3 and Chauffeur 1,(bundle3 > 0) & (chauf3 == 2) & (ptype_chauf1 < 6) & (cdap_chauf1 == 'H'),coef_unavail +util_avail_pe_cdap_child3_chauf2,Availability for Pure-Escorting by daily pattern - Child 3 and Chauffeur 2,(bundle3 > 0) & (chauf3 == 4) & (ptype_chauf2 < 6) & (cdap_chauf2 == 'H'),coef_unavail +util_avail_pe_sync_child1_chauf1,Availability for Pure-Escorting by synchronization - Child 1 and Chauffeur 1,@(df.bundle1 > 0) & (df.chauf1 == 2) & (df.ptype_chauf1 < 4) & (df.cdap_chauf1 == 'H') & (np.abs(df.pref_depart_time_school1 + ((df.time_home_to_school1 + df.time_school_to_home1) / mins_per_time_bin) - df.pref_depart_time_chauf1) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_sync_child1_chauf2,Availability for Pure-Escorting by synchronization - Child 1 and Chauffeur 2,@(df.bundle1 > 0) & (df.chauf1 == 4) & (df.ptype_chauf2 < 4) & (df.cdap_chauf2 == 'H') & (np.abs(df.pref_depart_time_school1 + ((df.time_home_to_school1 + df.time_school_to_home1) / mins_per_time_bin) - df.pref_depart_time_chauf2) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_sync_child2_chauf1,Availability for Pure-Escorting by synchronization - Child 2 and Chauffeur 1,@(df.bundle2 > 0) & (df.chauf2 == 2) & (df.ptype_chauf1 < 4) & (df.cdap_chauf1 == 'H') & (np.abs(df.pref_depart_time_school2 + ((df.time_home_to_school2 + df.time_school_to_home2) / mins_per_time_bin) - df.pref_depart_time_chauf1) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_sync_child2_chauf2,Availability for Pure-Escorting by synchronization - Child 2 and Chauffeur 2,@(df.bundle2 > 0) & (df.chauf2 == 4) & (df.ptype_chauf2 < 4) & (df.cdap_chauf2 == 'H') & (np.abs(df.pref_depart_time_school2 + ((df.time_home_to_school2 + df.time_school_to_home2) / mins_per_time_bin) - df.pref_depart_time_chauf2) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_sync_child3_chauf1,Availability for Pure-Escorting by synchronization - Child 3 and Chauffeur 1,@(df.bundle3 > 0) & (df.chauf3 == 2) & (df.ptype_chauf1 < 4) & (df.cdap_chauf1 == 'H') & (np.abs(df.pref_depart_time_school3 + ((df.time_home_to_school3 + df.time_school_to_home3) / mins_per_time_bin) - df.pref_depart_time_chauf1) > max_bin_difference_between_departure_times),coef_unavail +util_avail_pe_sync_child3_chauf2,Availability for Pure-Escorting by synchronization - Child 3 and Chauffeur 2,@(df.bundle3 > 0) & (df.chauf3 == 4) & (df.ptype_chauf2 < 4) & (df.cdap_chauf2 == 'H') & (np.abs(df.pref_depart_time_school3 + ((df.time_home_to_school3 + df.time_school_to_home3) / mins_per_time_bin) - df.pref_depart_time_chauf2) > max_bin_difference_between_departure_times),coef_unavail +util_avail_bundle_child_1and2,Availability for bundling child 1 and child 2,@(df.bundle1 == df.bundle2) & (df.bundle1 > 0) & (np.abs(df.pref_depart_time_school1 - df.pref_depart_time_school2) > max_bin_difference_between_departure_times),coef_unavail +util_avail_bundle_child_1and3,Availability for bundling child 1 and child 3,@(df.bundle1 == df.bundle3) & (df.bundle1 > 0) & (np.abs(df.pref_depart_time_school1 - df.pref_depart_time_school3) > max_bin_difference_between_departure_times),coef_unavail +util_avail_bundle_child_2and3,Availability for bundling child 2 and child 3,@(df.bundle2 == df.bundle3) & (df.bundle2 > 0) & (np.abs(df.pref_depart_time_school2 - df.pref_depart_time_school3) > max_bin_difference_between_departure_times),coef_unavail +util_avail_mult_bundles_outbound1,Availability Chauffeur 1 - Expected arrival from previous pure escort must be before departure for subsequent escort,((nrs1 + npe1) > 1) & ~avail_multiple_bundles,coef_unavail +util_avail_mult_bundles_outbound2,Availability Chauffeur 2 - Expected arrival from previous pure escort must be before departure for subsequent escort,((nrs2 + npe2) > 1) & ~avail_multiple_bundles,coef_unavail +util_avail_pe_during_mand_child1_chauf1,Availability pure escort tour must take place before mandatory tour - Child 1 and Chauffeur 1,@(df.bundle1 > 0) & (df.chauf1 == 2) & (df.cdap_chauf1 == 'M') & ((df.pref_depart_time_chauf1 - max_bin_difference_between_departure_times) <= df.pref_depart_time_school1),coef_unavail +util_avail_pe_during_mand_child1_chauf2,Availability pure escort tour must take place before mandatory tour - Child 1 and Chauffeur 2,@(df.bundle1 > 0) & (df.chauf1 == 4) & (df.cdap_chauf2 == 'M') & ((df.pref_depart_time_chauf2 - max_bin_difference_between_departure_times) <= df.pref_depart_time_school1),coef_unavail +util_avail_pe_during_mand_child2_chauf1,Availability pure escort tour must take place before mandatory tour - Child 2 and Chauffeur 1,@(df.bundle2 > 0) & (df.chauf2 == 2) & (df.cdap_chauf1 == 'M') & ((df.pref_depart_time_chauf1 - max_bin_difference_between_departure_times) <= df.pref_depart_time_school2),coef_unavail +util_avail_pe_during_mand_child2_chauf2,Availability pure escort tour must take place before mandatory tour - Child 2 and Chauffeur 2,@(df.bundle2 > 0) & (df.chauf2 == 4) & (df.cdap_chauf2 == 'M') & ((df.pref_depart_time_chauf2 - max_bin_difference_between_departure_times) <= df.pref_depart_time_school2),coef_unavail +util_avail_pe_during_mand_child3_chauf1,Availability pure escort tour must take place before mandatory tour - Child 3 and Chauffeur 1,@(df.bundle3 > 0) & (df.chauf3 == 2) & (df.cdap_chauf1 == 'M') & ((df.pref_depart_time_chauf1 - max_bin_difference_between_departure_times) <= df.pref_depart_time_school3),coef_unavail +util_avail_pe_during_mand_child3_chauf2,Availability pure escort tour must take place before mandatory tour - Child 3 and Chauffeur 2,@(df.bundle3 > 0) & (df.chauf3 == 4) & (df.cdap_chauf2 == 'M') & ((df.pref_depart_time_chauf2 - max_bin_difference_between_departure_times) <= df.pref_depart_time_school3),coef_unavail +# ,No escorting,, +util_child1_age_16p_noes,Child 1 age 16 years or older - No escort,(bundle1 == 0) & (child_id1 > 0) & (age_child1 > 15),coef_child_age_16p_noes +util_child2_age_16p_noes,Child 2 age 16 years or older - No escort,(bundle2 == 0) & (child_id2 > 0) & (age_child2 > 15),coef_child_age_16p_noes +util_child3_age_16p_noes,Child 3 age 16 years or older - No escort,(bundle3 == 0) & (child_id3 > 0) & (age_child3 > 15),coef_child_age_16p_noes +util_child1_age_10_to_15_noes,Child 1 age 10 to 15 years - No escort,(bundle1 == 0) & (child_id1 > 0) & (age_child1 > 9) & (age_child1 < 16),coef_child_age_10_to_15_noes +util_child2_age_10_to_15_noes,Child 2 age 10 to 15 years - No escort,(bundle2 == 0) & (child_id2 > 0) & (age_child2 > 9) & (age_child2 < 16),coef_child_age_10_to_15_noes +util_child3_age_10_to_15_noes,Child 3 age 10 to 15 years - No escort,(bundle3 == 0) & (child_id3 > 0) & (age_child3 > 9) & (age_child3 < 16),coef_child_age_10_to_15_noes +util_child1_age_u9_noes,Child 1 age 9 years or younger - No escort,(bundle1 == 0) & (child_id1 > 0) & (age_child1 < 10),coef_child_age_u9_noes +util_child2_age_u9_noes,Child 2 age 9 years or younger - No escort,(bundle2 == 0) & (child_id2 > 0) & (age_child2 < 10),coef_child_age_u9_noes +util_child3_age_u9_noes,Child 3 age 9 years or younger - No escort,(bundle3 == 0) & (child_id3 > 0) & (age_child3 < 10),coef_child_age_u9_noes +util_ln_dist_to_school_child1_noes,Logged distance to school for Child 1 - No escort,@(df.bundle1 == 0) * (df.child_id1 > 0) * np.log(1 + df.dist_home_to_school1),coef_ln_dist_to_school_noes +util_ln_dist_to_school_child2_noes,Logged distance to school for Child 2 - No escort,@(df.bundle2 == 0) * (df.child_id2 > 0) * np.log(1 + df.dist_home_to_school2),coef_ln_dist_to_school_noes +util_ln_dist_to_school_child3_noes,Logged distance to school for Child 3 - No escort,@(df.bundle3 == 0) * (df.child_id3 > 0) * np.log(1 + df.dist_home_to_school3),coef_ln_dist_to_school_noes +util_ln_dist_to_school_child1_u6_noes,Logged distance to school for Child 1 under 6 years old - No escort,@(df.bundle1 == 0) * (df.child_id1 > 0) * (df.age_child1 < 6) * np.log(1 + df.dist_home_to_school1),coef_ln_dist_to_school_u6_noes +util_ln_dist_to_school_child2_u6_noes,Logged distance to school for Child 2 under 6 years old - No escort,@(df.bundle2 == 0) * (df.child_id2 > 0) * (df.age_child2 < 6) * np.log(1 + df.dist_home_to_school2),coef_ln_dist_to_school_u6_noes +util_ln_dist_to_school_child3_u6_noes,Logged distance to school for Child 3 under 6 years old - No escort,@(df.bundle3 == 0) * (df.child_id3 > 0) * (df.age_child3 < 6) * np.log(1 + df.dist_home_to_school3),coef_ln_dist_to_school_u6_noes +util_ln_dist_to_school_child1_6to9_noes,Logged distance to school for Child 1 6 to 9 years old - No escort,@(df.bundle1 == 0) * (df.child_id1 > 0) * (df.age_child1 > 5) * (df.age_child1 < 10) * np.log(1 + df.dist_home_to_school1),coef_ln_dist_to_school_6to9_noes +util_ln_dist_to_school_child2_6to9_noes,Logged distance to school for Child 2 6 to 9 years old - No escort,@(df.bundle2 == 0) * (df.child_id2 > 0) * (df.age_child2 > 5) * (df.age_child2 < 10) * np.log(1 + df.dist_home_to_school2),coef_ln_dist_to_school_6to9_noes +util_ln_dist_to_school_child3_6to9_noes,Logged distance to school for Child 3 6 to 9 years old - No escort,@(df.bundle3 == 0) * (df.child_id3 > 0) * (df.age_child3 > 5) * (df.age_child3 < 10) * np.log(1 + df.dist_home_to_school3),coef_ln_dist_to_school_6to9_noes +# ,Ride Sharing,, +util_child1_age_16p_rs,Child 1 age 16 years or older - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 > 15),coef_child_age_16p_rs +util_child2_age_16p_rs,Child 2 age 16 years or older - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 > 15),coef_child_age_16p_rs +util_child3_age_16p_rs,Child 3 age 16 years or older - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 > 15),coef_child_age_16p_rs +util_child1_age_10to15_rs,Child 1 age 10 to 15 years - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 > 9) & (age_child1 < 16),coef_child_age_10to15_rs +util_child2_age_10to15_rs,Child 2 age 10 to 15 years - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 > 9) & (age_child2 < 16),coef_child_age_10to15_rs +util_child3_age_10to15_rs,Child 3 age 10 to 15 years - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 > 9) & (age_child3 < 16),coef_child_age_10to15_rs +util_child1_age_6to9_rs,Child 1 age 6 to 9 years - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 > 5) & (age_child1 < 10),coef_child_age_6to9_rs +util_child2_age_6to9_rs,Child 2 age 6 to 9 years - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 > 5) & (age_child2 < 10),coef_child_age_6to9_rs +util_child3_age_6to9_rs,Child 3 age 6 to 9 years - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 > 5) & (age_child3 < 10),coef_child_age_6to9_rs +util_child1_age_u6_rs,Child 1 age under 6 years old - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 < 6),coef_child_age_u6_rs +util_child2_age_u6_rs,Child 2 age under 6 years old - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 < 6),coef_child_age_u6_rs +util_child3_age_u6_rs,Child 3 age under 6 years old - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 < 6),coef_child_age_u6_rs +# ,Pure Escort Distance,, +util_child1_dist_pe,Child 1 distance to school - Pure escorting,((chauf1 == 2) | (chauf1 == 4)) * dist_home_to_school1,coef_child_dist_pe +util_child2_dist_pe,Child 2 distance to school - Pure escorting,((chauf2 == 2) | (chauf2 == 4)) * dist_home_to_school2,coef_child_dist_pe +util_child3_dist_pe,Child 3 distance to school - Pure escorting,((chauf3 == 2) | (chauf3 == 4)) * dist_home_to_school3,coef_child_dist_pe +util_child1_dist_pe,Child 1 Pure escorting not allowed if over 30 miles,((chauf1 == 2) | (chauf1 == 4)) & (dist_home_to_school1 > 30),coef_unavail +util_child2_dist_pe,Child 2 Pure escorting not allowed if over 30 miles,((chauf2 == 2) | (chauf2 == 4)) & (dist_home_to_school2 > 30),coef_unavail +util_child3_dist_pe,Child 3 Pure escorting not allowed if over 30 miles,((chauf3 == 2) | (chauf3 == 4)) & (dist_home_to_school3 > 30),coef_unavail +# ,Household Interactions,, +util_hh_inc_u25k_noes,Household income less than 25k - No Escorting,(income <= 25000) & ((bundle1 == 0) | ((bundle2 == 0) & (num_children_going_to_school > 1)) | ((bundle3 == 0) & (num_children_going_to_school > 2))),coef_hh_inc_u25k_noes +util_hh_inc_25to50k_noes,Household income between 25 and 50k - No Escorting,((income > 25000) & (income <= 50000)) & ((bundle1 == 0) | ((bundle2 == 0) & (num_children_going_to_school > 1)) | ((bundle3 == 0) & (num_children_going_to_school > 2))),coef_hh_inc_25to50k_noes +util_zero_auto_hh_noes,Zero cars in the household - No Escorting,(auto_ownership == 0) & ((bundle1 == 0) | ((bundle2 == 0) & (num_children_going_to_school > 1)) | ((bundle3 == 0) & (num_children_going_to_school > 2))),coef_zero_auto_hh_noes +util_cars_lt_workers_rs,Cars fewer than household workers - Ride Share,(auto_ownership < num_workers) & ((chauf1 % 2 == 1) | (chauf2 % 2 == 1) | (chauf3 % 2 == 1)),coef_cars_lt_workers_rs +util_cars_lt_workers_pe,Cars fewer than household workers - Pure escort,(auto_ownership < num_workers) & ((chauf1 % 2 == 0) | (chauf2 % 2 == 0) | (chauf3 % 2 == 0)),coef_cars_lt_workers_pe +# ,Chauffer Interactions,, +util_chauf1_female_rs,Chauffeur 1 Female - Ride share,(gender_chauf1 == 2) & ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_female_rs +util_chauf1_male_rs,Chauffeur 1 Male - Ride share,(gender_chauf1 == 1) & ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_male_rs +util_chauf1_female_pe,Chauffeur 1 Female - Pure Escort,(gender_chauf1 == 2) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_female_pe +util_chauf1_male_pe,Chauffeur 1 Male - Pure Escort,(gender_chauf1 == 1) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_male_pe +util_chauf2_female_rs,Chauffeur 2 Female - Ride share,(gender_chauf2 == 2) & ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_female_rs +util_chauf2_male_rs,Chauffeur 2 Male - Ride share,(gender_chauf2 == 1) & ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_male_rs +util_chauf2_female_pe,Chauffeur 2 Female - Pure Escort,(gender_chauf2 == 2) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_female_pe +util_chauf2_male_pe,Chauffeur 2 Male - Pure Escort,(gender_chauf2 == 1) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_male_pe +util_chauf1_pt_worker_rs,Chauffer 1 part time worker - Ride share,(ptype_chauf1 == 2) & ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_pt_worker_rs +util_chauf1_pt_worker_pe,Chauffer 1 part time worker - Pure escort,(ptype_chauf1 == 2) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_pt_worker_pe +util_chauf2_pt_worker_rs,Chauffer 2 part time worker - Ride share,(ptype_chauf2 == 2) & ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_pt_worker_rs +util_chauf2_pt_worker_pe,Chauffer 2 part time worker - Pure escort,(ptype_chauf2 == 2) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_pt_worker_pe +util_chauf1_non_worker_pe,Chauffer 1 non worker - Pure escort,(ptype_chauf1 == 4) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_non_worker_pe +util_chauf2_non_worker_pe,Chauffer 2 non worker - Pure escort,(ptype_chauf2 == 4) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_non_worker_pe +util_chauf1_univ_stud_re,Chauffer 1 university student - Ride Share,(ptype_chauf1 == 3) & ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_univ_stud_re +util_chauf2_univ_stud_re,Chauffer 2 university student - Ride Share,(ptype_chauf2 == 3) & ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_univ_stud_re +util_chauf1_age_u35_pe,Chauffer 1 Age 35 years or younger - Pure escort,(ptype_chauf1 == 4) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_age_u35_pe +util_chauf2_age_u35_pe,Chauffer 2 Age 35 years or younger - Pure escort,(ptype_chauf2 == 4) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_age_u35_pe +util_chauf1_time_to_work_or_univ_rs,Chauffer 1 Auto time to work or university - Ride Share,time_home_to_mand1 * ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_time_to_work_or_univ_rs +util_chauf2_time_to_work_or_univ_rs,Chauffer 2 Auto time to work or university - Ride Share,time_home_to_mand2 * ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_time_to_work_or_univ_rs +util_chauf1_walk_dist_to_work_or_univ_rs,Chauffer 1 Walk dist to work or university - Ride Share,(dist_home_to_mand1 < 3) & ((chauf1 == 1) | (chauf2 == 1) | (chauf3 == 1)),coef_chauf_walk_dist_to_work_or_univ_rs +util_chauf2_walk_dist_to_work_or_univ_rs,Chauffer 2 Walk dist to work or university - Ride Share,(dist_home_to_mand2 < 3) & ((chauf1 == 3) | (chauf2 == 3) | (chauf3 == 3)),coef_chauf_walk_dist_to_work_or_univ_rs +util_chauf1_walk_dist_to_work_or_univ_pe,Chauffer 1 Walk dist to work or university - Pure Escort,(dist_home_to_mand1 < 3) & ((chauf1 == 2) | (chauf2 == 2) | (chauf3 == 2)),coef_chauf_walk_dist_to_work_or_univ_pe +util_chauf2_walk_dist_to_work_or_univ_pe,Chauffer 2 Walk dist to work or university - Pure Escort,(dist_home_to_mand2 < 3) & ((chauf1 == 4) | (chauf2 == 4) | (chauf3 == 4)),coef_chauf_walk_dist_to_work_or_univ_pe +# ,Chauffer deviation,, +util_chauf1_abs_dev_rs_child1only,Chauffer 1 Absolute deviation ride share - child 1 only,((bundle1 != bundle2) & (bundle1 != bundle3) & (chauf1 == 1)) * abs_dev_dist_out_child1_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child1only,Chauffer 2 Absolute deviation ride share - child 1 only,((bundle1 != bundle2) & (bundle1 != bundle3) & (chauf1 == 3)) * abs_dev_dist_out_child1_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child2only,Chauffer 1 Absolute deviation ride share - child 2 only,((bundle1 != bundle2) & (bundle2 != bundle3) & (chauf2 == 1)) * abs_dev_dist_out_child2_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child2only,Chauffer 2 Absolute deviation ride share - child 2 only,((bundle1 != bundle2) & (bundle2 != bundle3) & (chauf2 == 3)) * abs_dev_dist_out_child2_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child3only,Chauffer 1 Absolute deviation ride share - child 3 only,((bundle1 != bundle3) & (bundle2 != bundle3) & (chauf3 == 1)) * abs_dev_dist_out_child3_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child3only,Chauffer 2 Absolute deviation ride share - child 3 only,((bundle1 != bundle3) & (bundle2 != bundle3) & (chauf3 == 3)) * abs_dev_dist_out_child3_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child12,Chauffer 1 Absolute deviation ride share - child 1 & 2,((bundle1 == bundle2) & (bundle1 != bundle3) & (chauf1 == 1)) * abs_dev_dist_out_child12_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child12,Chauffer 2 Absolute deviation ride share - child 1 & 2,((bundle1 == bundle2) & (bundle1 != bundle3) & (chauf1 == 3)) * abs_dev_dist_out_child12_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child13,Chauffer 1 Absolute deviation ride share - child 1 & 3,((bundle1 != bundle2) & (bundle1 == bundle3) & (chauf1 == 1)) * abs_dev_dist_out_child13_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child13,Chauffer 2 Absolute deviation ride share - child 1 & 3,((bundle1 != bundle2) & (bundle1 == bundle3) & (chauf1 == 3)) * abs_dev_dist_out_child13_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child23,Chauffer 1 Absolute deviation ride share - child 2 & 3,((bundle1 != bundle2) & (bundle2 == bundle3) & (chauf2 == 1)) * abs_dev_dist_out_child23_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child23,Chauffer 2 Absolute deviation ride share - child 2 & 3,((bundle1 != bundle2) & (bundle2 == bundle3) & (chauf2 == 3)) * abs_dev_dist_out_child23_chauf2,coef_abs_dev_distance +util_chauf1_abs_dev_rs_child123,Chauffer 1 Absolute deviation ride share - child 1 & 2 & 3,((bundle1 == bundle2) & (bundle2 == bundle3) & (chauf1 == 1)) * abs_dev_dist_out_child123_chauf1,coef_abs_dev_distance +util_chauf2_abs_dev_rs_child123,Chauffer 2 Absolute deviation ride share - child 1 & 2 & 3,((bundle1 == bundle2) & (bundle2 == bundle3) & (chauf1 == 3)) * abs_dev_dist_out_child123_chauf2,coef_abs_dev_distance +util_chauf1_rel_dev_rs_child1only,Chauffer 1 Relative deviation ride share - child 1 only,((bundle1 != bundle2) & (bundle1 != bundle3) & (chauf1 == 1)) * abs_dev_dist_out_child1_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child1only,Chauffer 2 Relative deviation ride share - child 1 only,((bundle1 != bundle2) & (bundle1 != bundle3) & (chauf1 == 3)) * abs_dev_dist_out_child1_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child2only,Chauffer 1 Relative deviation ride share - child 2 only,((bundle1 != bundle2) & (bundle2 != bundle3) & (chauf2 == 1)) * abs_dev_dist_out_child2_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child2only,Chauffer 2 Relative deviation ride share - child 2 only,((bundle1 != bundle2) & (bundle2 != bundle3) & (chauf2 == 3)) * abs_dev_dist_out_child2_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child3only,Chauffer 1 Relative deviation ride share - child 3 only,((bundle1 != bundle3) & (bundle2 != bundle3) & (chauf3 == 1)) * abs_dev_dist_out_child3_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child3only,Chauffer 2 Relative deviation ride share - child 3 only,((bundle1 != bundle3) & (bundle2 != bundle3) & (chauf3 == 3)) * abs_dev_dist_out_child3_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child12,Chauffer 1 Relative deviation ride share - child 1 & 2,((bundle1 == bundle2) & (bundle1 != bundle3) & (chauf1 == 1)) * abs_dev_dist_out_child12_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child12,Chauffer 2 Relative deviation ride share - child 1 & 2,((bundle1 == bundle2) & (bundle1 != bundle3) & (chauf1 == 3)) * abs_dev_dist_out_child12_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child13,Chauffer 1 Relative deviation ride share - child 1 & 3,((bundle1 != bundle2) & (bundle1 == bundle3) & (chauf1 == 1)) * abs_dev_dist_out_child13_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child13,Chauffer 2 Relative deviation ride share - child 1 & 3,((bundle1 != bundle2) & (bundle1 == bundle3) & (chauf1 == 3)) * abs_dev_dist_out_child13_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child23,Chauffer 1 Relative deviation ride share - child 2 & 3,((bundle1 != bundle2) & (bundle2 == bundle3) & (chauf2 == 1)) * abs_dev_dist_out_child23_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child23,Chauffer 2 Relative deviation ride share - child 2 & 3,((bundle1 != bundle2) & (bundle2 == bundle3) & (chauf2 == 3)) * abs_dev_dist_out_child23_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +util_chauf1_rel_dev_rs_child123,Chauffer 1 Relative deviation ride share - child 1 & 2 & 3,((bundle1 == bundle2) & (bundle2 == bundle3) & (chauf1 == 1)) * abs_dev_dist_out_child123_chauf1 / (dist_home_to_mand1 + 0.001),coef_rel_dev_distance +util_chauf2_rel_dev_rs_child123,Chauffer 2 Relative deviation ride share - child 1 & 2 & 3,((bundle1 == bundle2) & (bundle2 == bundle3) & (chauf1 == 3)) * abs_dev_dist_out_child123_chauf2 / (dist_home_to_mand2 + 0.001),coef_rel_dev_distance +# ,Same TAZ,, +util_same_taz_child12_escort,Same school TAZ for child 1 and 2 - Escorting,(bundle1 == bundle2) & (bundle1 > 0) & (school_location_child1 == school_location_child2) & (school_location_child1 > 0),coef_same_taz_escort +util_same_taz_child13_escort,Same school TAZ for child 1 and 3 - Escorting,(bundle1 == bundle3) & (bundle1 > 0) & (school_location_child1 == school_location_child3) & (school_location_child1 > 0),coef_same_taz_escort +util_same_taz_child32_escort,Same school TAZ for child 3 and 2 - Escorting,(bundle3 == bundle2) & (bundle2 > 0) & (school_location_child3 == school_location_child2) & (school_location_child2 > 0),coef_same_taz_escort +util_same_taz_child12_no_escort,Same school TAZ for child 1 and 2 - No Escorting,(bundle1 == 0) & (bundle2 == 0) & (child_id1 > 0) & (child_id2 > 0) & (school_location_child1 == school_location_child2) & (school_location_child1 > 0),coef_same_taz_no_escort +util_same_taz_child13_no_escort,Same school TAZ for child 1 and 3 - No Escorting,(bundle1 == 0) & (bundle3 == 0) & (child_id1 > 0) & (child_id3 > 0) & (school_location_child1 == school_location_child3) & (school_location_child1 > 0),coef_same_taz_no_escort +util_same_taz_child32_no_escort,Same school TAZ for child 3 and 2 - No Escorting,(bundle3 == 0) & (bundle2 == 0) & (child_id3 > 0) & (child_id2 > 0) & (school_location_child3 == school_location_child2) & (school_location_child2 > 0),coef_same_taz_no_escort +# ,Constants related to inbound choice,, +util_no_escort_inbound_child1,No escorting in inbound direction - Child 1,(bundle1 == 0) & (child_id1 > 0) & (bundle1_inbound == 0),coef_no_escort_inbound +util_no_escort_inbound_child2,No escorting in inbound direction - Child 2,(bundle2 == 0) & (child_id2 > 0) & (bundle2_inbound == 0),coef_no_escort_inbound +util_no_escort_inbound_child3,No escorting in inbound direction - Child 3,(bundle3 == 0) & (child_id3 > 0) & (bundle3_inbound == 0),coef_no_escort_inbound +util_same_chauf,Same chauffeur in both directions (not child specific) - chauf 1 inbound & inbound,((chauf1 == 1) | (chauf1 == 2) | (chauf2 == 1) | (chauf2 == 2) | (chauf3 == 1) | (chauf3 == 2)) & ((nbund1_inbound > 0)),coef_same_chauf +util_same_chauf,Same chauffeur in both directions (not child specific) - chauf 2 inbound & inbound,((chauf1 == 3) | (chauf1 == 4) | (chauf2 == 3) | (chauf2 == 4) | (chauf3 == 3) | (chauf3 == 4)) & ((nbund2_inbound > 0)),coef_same_chauf +# ,Calibration constants,, +util_calib_child1_age_u6_rs,Child 1 age under 6 - Calibration constant - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 < 6),coef_calib_child_age_u6_rs +util_calib_child2_age_u6_rs,Child 2 age under 6 - Calibration constant - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 < 6),coef_calib_child_age_u6_rs +util_calib_child3_age_u6_rs,Child 3 age under 6 - Calibration constant - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 < 6),coef_calib_child_age_u6_rs +util_calib_child1_age_16p_rs,Child 1 age 16 years or older - Calibration constant - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 > 15),coef_calib_child_age_16p_rs +util_calib_child2_age_16p_rs,Child 2 age 16 years or older - Calibration constant - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 > 15),coef_calib_child_age_16p_rs +util_calib_child3_age_16p_rs,Child 3 age 16 years or older - Calibration constant - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 > 15),coef_calib_child_age_16p_rs +util_calib_child1_age_6to15_noes,Child 1 age 6 to 15 years - Calibration constant - No Escort,(bundle1 == 0) & (child_id1 > 0) & (age_child1 > 5) & (age_child1 < 16),coef_calib_child_age_6to15_noes +util_calib_child2_age_6to15_noes,Child 2 age 6 to 15 years - Calibration constant - No Escort,(bundle2 == 0) & (child_id2 > 0) & (age_child2 > 5) & (age_child2 < 16),coef_calib_child_age_6to15_noes +util_calib_child3_age_6to15_noes,Child 3 age 6 to 15 years - Calibration constant - No Escort,(bundle3 == 0) & (child_id3 > 0) & (age_child3 > 5) & (age_child3 < 16),coef_calib_child_age_6to15_noes +util_calib_child1_age_6to15_rs,Child 1 age 6 to 15 years - Calibration constant - Ride Share,((chauf1 == 1) | (chauf1 == 3)) & (age_child1 > 5) & (age_child1 < 16),coef_calib_child_age_6to15_rs +util_calib_child2_age_6to15_rs,Child 2 age 6 to 15 years - Calibration constant - Ride Share,((chauf2 == 1) | (chauf2 == 3)) & (age_child2 > 5) & (age_child2 < 16),coef_calib_child_age_6to15_rs +util_calib_child3_age_6to15_rs,Child 3 age 6 to 15 years - Calibration constant - Ride Share,((chauf3 == 1) | (chauf3 == 3)) & (age_child3 > 5) & (age_child3 < 16),coef_calib_child_age_6to15_rs +util_calib_child1_age_u6_noes,Child 1 age 6 years or younger - Calibration constant - No escort,(bundle1 == 0) & (child_id1 > 0) & (age_child1 < 6),coef_calib_child_age_u6_noes +util_calib_child2_age_u6_noes,Child 2 age 6 years or younger - Calibration constant - No escort,(bundle2 == 0) & (child_id2 > 0) & (age_child2 < 6),coef_calib_child_age_u6_noes +util_calib_child3_age_u6_noes,Child 3 age 6 years or younger - Calibration constant - No escort,(bundle3 == 0) & (child_id3 > 0) & (age_child3 < 6),coef_calib_child_age_u6_noes diff --git a/activitysim/examples/prototype_mtc_extended/configs/school_escorting_preprocessor_inbound.csv b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_preprocessor_inbound.csv new file mode 100644 index 000000000..5efc87882 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_preprocessor_inbound.csv @@ -0,0 +1,148 @@ +Description,Target,Expression +Number of children going to school,num_children_going_to_school,"np.where(df['child_id1'] > 0, 1, 0) + np.where(df['child_id2'] > 0, 1, 0) + np.where(df['child_id3'] > 0,1,0)" +Number of potential chauffeurs,num_potential_chauffeurs,"np.where(df['chauf_id1'] > 0, 1, 0) + np.where(df['chauf_id2'] > 0, 1, 0)" +Person Type - chauffer 1,ptype_chauf1,"reindex(persons.ptype, df.chauf_id1)" +Person Type - chauffer 2,ptype_chauf2,"reindex(persons.ptype, df.chauf_id2)" +Gender - chauffer 1,gender_chauf1,"reindex(persons.sex, df.chauf_id1)" +Gender - chauffer 2,gender_chauf2,"reindex(persons.sex, df.chauf_id2)" +Age - chauffer 1,age_chauf1,"reindex(persons.age, df.chauf_id1)" +Age - chauffer 2,age_chauf2,"reindex(persons.age, df.chauf_id2)" +Daily activity pattern - chauffer 1,cdap_chauf1,"reindex(persons.cdap_activity, df.chauf_id1)" +Daily activity pattern - chauffer 2,cdap_chauf2,"reindex(persons.cdap_activity, df.chauf_id2)" +Age - child 1,age_child1,"reindex(persons.age, df.child_id1)" +Age - child 2,age_child2,"reindex(persons.age, df.child_id2)" +Age - child 3,age_child3,"reindex(persons.age, df.child_id3)" +# Departure times from school and work ,, +Preferred departure time from school - child 1,pref_depart_time_school1,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').end, df.child_id1)" +Preferred departure time from school - child 2,pref_depart_time_school2,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').end, df.child_id2)" +Preferred departure time from school - child 3,pref_depart_time_school3,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').end, df.child_id3)" +# setting preffered departure time for chauffer to the last mandatory tour of the day for inbound escorting ,, +Preferred departure time from work / univ - chauffer 1 - tour 1,pref_depart_time_chauf1_tour1,"reindex(tours[(tours.tour_category == 'mandatory') & (tours.tour_num == 1)].set_index('person_id').end, df.chauf_id1)" +Preferred departure time from work / univ - chauffer 2 - tour 1,pref_depart_time_chauf2_tour1,"reindex(tours[(tours.tour_category == 'mandatory') & (tours.tour_num == 1)].set_index('person_id').end, df.chauf_id2)" +Preferred departure time from work / univ - chauffer 1 - tour 2,pref_depart_time_chauf1_tour2,"reindex(tours[(tours.tour_category == 'mandatory') & (tours.tour_num == 2)].set_index('person_id').end, df.chauf_id1)" +Preferred departure time from work / univ - chauffer 2 - tour 2,pref_depart_time_chauf2_tour2,"reindex(tours[(tours.tour_category == 'mandatory') & (tours.tour_num == 2)].set_index('person_id').end, df.chauf_id2)" +Preferred departure time from work / univ - chauffer 1,pref_depart_time_chauf1,"np.where(pref_depart_time_chauf1_tour2 > pref_depart_time_chauf1_tour1, pref_depart_time_chauf1_tour2, pref_depart_time_chauf1_tour1)" +Preferred departure time from work / univ - chauffer 1,pref_depart_time_chauf2,"np.where(pref_depart_time_chauf2_tour2 > pref_depart_time_chauf2_tour1, pref_depart_time_chauf2_tour2, pref_depart_time_chauf2_tour1)" +# Distances and times to school and work ,, +School location - child 1,school_location_child1,"reindex(persons.school_zone_id, df.child_id1)" +School location - child 2,school_location_child2,"reindex(persons.school_zone_id, df.child_id2)" +School location - child 3,school_location_child3,"reindex(persons.school_zone_id, df.child_id3)" +School location - chauffer 1,_school_location_chauf1,"reindex(persons.workplace_zone_id, df.chauf_id1)" +School location - chauffer 2,_school_location_chauf2,"reindex(persons.workplace_zone_id, df.chauf_id2)" +Work location - chauffer 1,_work_location_chauf1,"reindex(persons.workplace_zone_id, df.chauf_id1)" +Work location - chauffer 2,_work_location_chauf2,"reindex(persons.workplace_zone_id, df.chauf_id2)" +Mandatory tour location - chauffer 1,_mandatory_location_chauf1,"_school_location_chauf1.where(ptype_chauf1 == 3, _work_location_chauf1)" +Mandatory tour location - chauffer 2,_mandatory_location_chauf2,"_school_location_chauf1.where(ptype_chauf2 == 3, _work_location_chauf2)" +# creating valid school locations to pass to skim_dict,, +,_valid_school_location_child1,school_location_child1.fillna(persons[persons.school_zone_id > 0].school_zone_id.mode()[0]) +,_valid_school_location_child2,school_location_child2.fillna(persons[persons.school_zone_id > 0].school_zone_id.mode()[0]) +,_valid_school_location_child3,school_location_child3.fillna(persons[persons.school_zone_id > 0].school_zone_id.mode()[0]) +,_valid_mandatory_location_chauf1,_mandatory_location_chauf1.fillna(persons[persons.workplace_zone_id > 0].workplace_zone_id.mode()[0]) +,_valid_mandatory_location_chauf2,_mandatory_location_chauf2.fillna(persons[persons.workplace_zone_id > 0].workplace_zone_id.mode()[0]) +Auto time home to school - child 1,time_home_to_school1,"np.where(school_location_child1 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child1, ('SOV_TIME', 'PM')), 0)" +Auto time home to school - child 2,time_home_to_school2,"np.where(school_location_child2 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child2, ('SOV_TIME', 'PM')), 0)" +Auto time home to school - child 3,time_home_to_school3,"np.where(school_location_child3 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child3, ('SOV_TIME', 'PM')), 0)" +Auto time school to home - child 1,time_school_to_home1,"np.where(school_location_child1 > 0, skim_dict.lookup(_valid_school_location_child1, df.home_zone_id, ('SOV_TIME', 'PM')), 0)" +Auto time school to home - child 2,time_school_to_home2,"np.where(school_location_child2 > 0, skim_dict.lookup(_valid_school_location_child2, df.home_zone_id, ('SOV_TIME', 'PM')), 0)" +Auto time school to home - child 3,time_school_to_home3,"np.where(school_location_child3 > 0, skim_dict.lookup(_valid_school_location_child3, df.home_zone_id, ('SOV_TIME', 'PM')), 0)" +Auto dist home to school - child 1,dist_school_to_home1,"np.where(school_location_child1 > 0, skim_dict.lookup(_valid_school_location_child1, df.home_zone_id, ('SOV_DIST', 'PM')), 0)" +Auto dist home to school - child 2,dist_school_to_home2,"np.where(school_location_child2 > 0, skim_dict.lookup(_valid_school_location_child2, df.home_zone_id, ('SOV_DIST', 'PM')), 0)" +Auto dist home to school - child 3,dist_school_to_home3,"np.where(school_location_child3 > 0, skim_dict.lookup(_valid_school_location_child3, df.home_zone_id, ('SOV_DIST', 'PM')), 0)" +Auto dist intra school taz - child 1,dist_intra_school1,"np.where(school_location_child1 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child1, ('SOV_DIST', 'PM')), 0)" +Auto dist intra school taz - child 2,dist_intra_school2,"np.where(school_location_child2 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child2, ('SOV_DIST', 'PM')), 0)" +Auto dist intra school taz - child 3,dist_intra_school3,"np.where(school_location_child3 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child3, ('SOV_DIST', 'PM')), 0)" +Auto time home to work or university - chauffer 1,time_home_to_mand1,"np.where(_mandatory_location_chauf1 > 0, skim_dict.lookup(df.home_zone_id, _valid_mandatory_location_chauf1, ('SOV_TIME', 'PM')), 0)" +Auto time home to work or university - chauffer 2,time_home_to_mand2,"np.where(_mandatory_location_chauf2 > 0, skim_dict.lookup(df.home_zone_id, _valid_mandatory_location_chauf2, ('SOV_TIME', 'PM')), 0)" +Auto time work or university to home - chauffer 1,time_mand_to_home1,"np.where(_mandatory_location_chauf1 > 0, skim_dict.lookup(_valid_mandatory_location_chauf1, df.home_zone_id, ('SOV_TIME', 'PM')), 0)" +Auto time work or university to home - chauffer 2,time_mand_to_home2,"np.where(_mandatory_location_chauf2 > 0, skim_dict.lookup(_valid_mandatory_location_chauf2, df.home_zone_id, ('SOV_TIME', 'PM')), 0)" +Auto dist home to work or university - chauffer 1,dist_home_to_mand1,"np.where(_mandatory_location_chauf1 > 0, skim_dict.lookup(df.home_zone_id, _valid_mandatory_location_chauf1, ('SOV_DIST', 'PM')), 0)" +Auto dist home to work or university - chauffer 2,dist_home_to_mand2,"np.where(_mandatory_location_chauf2 > 0, skim_dict.lookup(df.home_zone_id, _valid_mandatory_location_chauf2, ('SOV_DIST', 'PM')), 0)" +Auto dist work or university to home - chauffer 1,dist_mand1_to_home,"np.where(_mandatory_location_chauf1 > 0, skim_dict.lookup(_valid_mandatory_location_chauf1, df.home_zone_id, ('SOV_DIST', 'PM')), 0)" +Auto dist work or university to home - chauffer 2,dist_mand2_to_home,"np.where(_mandatory_location_chauf2 > 0, skim_dict.lookup(_valid_mandatory_location_chauf2, df.home_zone_id, ('SOV_DIST', 'PM')), 0)" +# inbound distance combinations between chauffeurs and children,, +Distance from chauffeur 1 mandatory location to child 1 school,time_mand1_to_school1,"np.where((school_location_child1 > 0) & (_mandatory_location_chauf1 > 0), skim_dict.lookup(_valid_school_location_child1, _valid_mandatory_location_chauf1, ('SOV_TIME', 'PM')), 0)" +Distance from chauffeur 1 mandatory location to child 2 school,time_mand1_to_school2,"np.where((school_location_child2 > 0) & (_mandatory_location_chauf1 > 0), skim_dict.lookup(_valid_school_location_child2, _valid_mandatory_location_chauf1, ('SOV_TIME', 'PM')), 0)" +Distance from chauffeur 1 mandatory location to child 3 school,time_mand1_to_school3,"np.where((school_location_child3 > 0) & (_mandatory_location_chauf1 > 0), skim_dict.lookup(_valid_school_location_child3, _valid_mandatory_location_chauf1, ('SOV_TIME', 'PM')), 0)" +Distance from chauffeur 2 mandatory location to child 1 school,time_mand2_to_school1,"np.where((school_location_child1 > 0) & (_mandatory_location_chauf2 > 0), skim_dict.lookup(_valid_school_location_child1, _valid_mandatory_location_chauf2, ('SOV_TIME', 'PM')), 0)" +Distance from chauffeur 2 mandatory location to child 2 school,time_mand2_to_school2,"np.where((school_location_child2 > 0) & (_mandatory_location_chauf2 > 0), skim_dict.lookup(_valid_school_location_child2, _valid_mandatory_location_chauf2, ('SOV_TIME', 'PM')), 0)" +Distance from chauffeur 2 mandatory location to child 3 school,time_mand2_to_school3,"np.where((school_location_child3 > 0) & (_mandatory_location_chauf2 > 0), skim_dict.lookup(_valid_school_location_child3, _valid_mandatory_location_chauf2, ('SOV_TIME', 'PM')), 0)" +Distance from chauffeur 1 mandatory location to child 1 school,_dist_mand1_to_school1,"np.where((school_location_child1 > 0) & (_mandatory_location_chauf1 > 0), skim_dict.lookup(_valid_mandatory_location_chauf1, _valid_school_location_child1, ('SOV_TIME', 'PM')), 0)" +Distance from chauffeur 2 mandatory location to child 1 school,_dist_mand2_to_school1,"np.where((school_location_child1 > 0) & (_mandatory_location_chauf2 > 0), skim_dict.lookup(_valid_mandatory_location_chauf2, _valid_school_location_child1, ('SOV_TIME', 'PM')), 0)" +Distance from chauffeur 1 mandatory location to child 2 school,_dist_mand1_to_school2,"np.where((school_location_child2 > 0) & (_mandatory_location_chauf1 > 0), skim_dict.lookup(_valid_mandatory_location_chauf1, _valid_school_location_child2, ('SOV_TIME', 'PM')), 0)" +Distance from chauffeur 2 mandatory location to child 2 school,_dist_mand2_to_school2,"np.where((school_location_child2 > 0) & (_mandatory_location_chauf2 > 0), skim_dict.lookup(_valid_mandatory_location_chauf2, _valid_school_location_child2, ('SOV_TIME', 'PM')), 0)" +Distance from chauffeur 1 mandatory location to child 3 school,_dist_mand1_to_school3,"np.where((school_location_child3 > 0) & (_mandatory_location_chauf1 > 0), skim_dict.lookup(_valid_mandatory_location_chauf1, _valid_school_location_child3, ('SOV_TIME', 'PM')), 0)" +Distance from chauffeur 2 mandatory location to child 3 school,_dist_mand2_to_school3,"np.where((school_location_child3 > 0) & (_mandatory_location_chauf2 > 0), skim_dict.lookup(_valid_mandatory_location_chauf2, _valid_school_location_child3, ('SOV_TIME', 'PM')), 0)" +Distance from child 1 school to child 2 school,_dist_school1_to_school2,"np.where((school_location_child1 > 0) & (school_location_child2 > 0), skim_dict.lookup(_valid_school_location_child1, _valid_school_location_child2, ('SOV_TIME', 'PM')), 0)" +Distance from child 1 school to child 3 school,_dist_school1_to_school3,"np.where((school_location_child1 > 0) & (school_location_child3 > 0), skim_dict.lookup(_valid_school_location_child1, _valid_school_location_child3, ('SOV_TIME', 'PM')), 0)" +Distance from child 2 school to child 3 school,_dist_school2_to_school3,"np.where((school_location_child2 > 0) & (school_location_child3 > 0), skim_dict.lookup(_valid_school_location_child2, _valid_school_location_child3, ('SOV_TIME', 'PM')), 0)" +Distance from child 2 school to child 1 school,_dist_school2_to_school1,"np.where((school_location_child2 > 0) & (school_location_child1 > 0), skim_dict.lookup(_valid_school_location_child2, _valid_school_location_child1, ('SOV_TIME', 'PM')), 0)" +Distance from child 3 school to child 1 school,_dist_school3_to_school1,"np.where((school_location_child3 > 0) & (school_location_child1 > 0), skim_dict.lookup(_valid_school_location_child3, _valid_school_location_child1, ('SOV_TIME', 'PM')), 0)" +Distance from child 3 school to child 2 school,_dist_school3_to_school2,"np.where((school_location_child3 > 0) & (school_location_child2 > 0), skim_dict.lookup(_valid_school_location_child3, _valid_school_location_child2, ('SOV_TIME', 'PM')), 0)" +,_return_min_taking_child1,"(pref_depart_time_school1 * mins_per_time_bin) + time_home_to_school1 + time_school_to_home1" +,_return_min_taking_child2,"(pref_depart_time_school2 * mins_per_time_bin) + time_home_to_school2 + time_school_to_home2" +,_return_min_taking_child3,"(pref_depart_time_school3 * mins_per_time_bin) + time_home_to_school3 + time_school_to_home3" +Availability of taking child 1 and then 2,_avail_child1_then_child2,"(_return_min_taking_child1 < (pref_depart_time_school2 * mins_per_time_bin))" +Availability of taking child 2 and then 1,_avail_child2_then_child1,"(_return_min_taking_child2 < (pref_depart_time_school1 * mins_per_time_bin))" +Availability of taking child 1 and then 3,_avail_child1_then_child3,"(_return_min_taking_child1 < (pref_depart_time_school3 * mins_per_time_bin))" +Availability of taking child 3 and then 1,_avail_child3_then_child1,"(_return_min_taking_child3 < (pref_depart_time_school1 * mins_per_time_bin))" +Availability of taking child 2 and then 3,_avail_child2_then_child3,"(_return_min_taking_child2 < (pref_depart_time_school3 * mins_per_time_bin))" +Availability of taking child 3 and then 2,_avail_child3_then_child2,"(_return_min_taking_child3 < (pref_depart_time_school2 * mins_per_time_bin))" +multiple_bundle_availability,avail_multiple_bundles,(_avail_child1_then_child2 | _avail_child2_then_child1 | _avail_child1_then_child3 | _avail_child3_then_child1 | _avail_child2_then_child3 | _avail_child3_then_child2) +# absolute deviation distance inbound,, +Absolute deviation inbound distance Child 1 Chauffer 1,abs_dev_dist_in_child1_chauf1,"np.maximum(_dist_mand1_to_school1 + dist_school_to_home1 - dist_mand1_to_home,0)" +Absolute deviation inbound distance Child 1 Chauffer 2,abs_dev_dist_in_child1_chauf2,"np.maximum(_dist_mand2_to_school1 + dist_school_to_home1 - dist_mand2_to_home,0)" +Absolute deviation inbound distance Child 2 Chauffer 1,abs_dev_dist_in_child2_chauf1,"np.maximum(_dist_mand1_to_school2 + dist_school_to_home2 - dist_mand1_to_home,0)" +Absolute deviation inbound distance Child 2 Chauffer 2,abs_dev_dist_in_child2_chauf2,"np.maximum(_dist_mand2_to_school2 + dist_school_to_home2 - dist_mand2_to_home,0)" +Absolute deviation inbound distance Child 3 Chauffer 1,abs_dev_dist_in_child3_chauf1,"np.maximum(_dist_mand1_to_school3 + dist_school_to_home3 - dist_mand1_to_home,0)" +Absolute deviation inbound distance Child 3 Chauffer 2,abs_dev_dist_in_child3_chauf2,"np.maximum(_dist_mand2_to_school3 + dist_school_to_home3 - dist_mand2_to_home,0)" +Absolute deviation inbound distance child12 Chauffer 1,abs_dev_dist_in_child12_chauf1,"np.maximum(np.minimum(_dist_mand1_to_school1 + _dist_school1_to_school2 + dist_school_to_home2, _dist_mand1_to_school2 + _dist_school2_to_school1 + dist_school_to_home1) - dist_mand1_to_home, 0)" +Absolute deviation inbound distance child12 Chauffer 2,abs_dev_dist_in_child12_chauf2,"np.maximum(np.minimum(_dist_mand2_to_school1 + _dist_school1_to_school2 + dist_school_to_home2, _dist_mand2_to_school2 + _dist_school2_to_school1 + dist_school_to_home1) - dist_mand2_to_home, 0)" +Absolute deviation inbound distance child13 Chauffer 1,abs_dev_dist_in_child13_chauf1,"np.maximum(np.minimum(_dist_mand1_to_school1 + _dist_school1_to_school3 + dist_school_to_home2, _dist_mand1_to_school3 + _dist_school3_to_school1 + dist_school_to_home3) - dist_mand1_to_home, 0)" +Absolute deviation inbound distance child13 Chauffer 2,abs_dev_dist_in_child13_chauf2,"np.maximum(np.minimum(_dist_mand2_to_school1 + _dist_school1_to_school3 + dist_school_to_home2, _dist_mand2_to_school3 + _dist_school3_to_school1 + dist_school_to_home3) - dist_mand2_to_home, 0)" +Absolute deviation inbound distance child23 Chauffer 1,abs_dev_dist_in_child23_chauf1,"np.maximum(np.minimum(_dist_mand1_to_school1 + _dist_school2_to_school3 + dist_school_to_home3, _dist_mand1_to_school3 + _dist_school3_to_school2 + dist_school_to_home2) - dist_mand1_to_home, 0)" +Absolute deviation inbound distance child23 Chauffer 2,abs_dev_dist_in_child23_chauf2,"np.maximum(np.minimum(_dist_mand2_to_school1 + _dist_school2_to_school3 + dist_school_to_home3, _dist_mand2_to_school3 + _dist_school3_to_school2 + dist_school_to_home2) - dist_mand2_to_home, 0)" +,_dist_mand1_school1_school2_school3,"_dist_mand1_to_school1 + _dist_school1_to_school2 + _dist_school2_to_school3 + dist_school_to_home1" +,_dist_mand1_school1_school3_school2,"_dist_mand1_to_school1 + _dist_school1_to_school3 + _dist_school3_to_school2 + dist_school_to_home1" +,_dist_mand1_school2_school1_school3,"_dist_mand1_to_school2 + _dist_school2_to_school1 + _dist_school1_to_school3 + dist_school_to_home2" +,_dist_mand1_school2_school3_school1,"_dist_mand1_to_school2 + _dist_school2_to_school3 + _dist_school3_to_school1 + dist_school_to_home2" +,_dist_mand1_school3_school1_school2,"_dist_mand1_to_school3 + _dist_school3_to_school1 + _dist_school1_to_school2 + dist_school_to_home3" +,_dist_mand1_school3_school2_school1,"_dist_mand1_to_school3 + _dist_school3_to_school2 + _dist_school2_to_school1 + dist_school_to_home3" +,_min_dist_dropoff_order_in_child123_chauf1,_dist_mand1_school1_school2_school3 +,_min_dist_dropoff_order_in_child123_chauf1,"np.where((_dist_mand1_school1_school3_school2 > 0) & (_dist_mand1_school1_school3_school2 < _min_dist_dropoff_order_in_child123_chauf1), _dist_mand1_school1_school3_school2, _min_dist_dropoff_order_in_child123_chauf1)" +,_min_dist_dropoff_order_in_child123_chauf1,"np.where((_dist_mand1_school2_school1_school3 > 0) & (_dist_mand1_school2_school1_school3 < _min_dist_dropoff_order_in_child123_chauf1), _dist_mand1_school2_school1_school3, _min_dist_dropoff_order_in_child123_chauf1)" +,_min_dist_dropoff_order_in_child123_chauf1,"np.where((_dist_mand1_school2_school3_school1 > 0) & (_dist_mand1_school2_school3_school1 < _min_dist_dropoff_order_in_child123_chauf1), _dist_mand1_school2_school3_school1, _min_dist_dropoff_order_in_child123_chauf1)" +,_min_dist_dropoff_order_in_child123_chauf1,"np.where((_dist_mand1_school3_school1_school2 > 0) & (_dist_mand1_school3_school1_school2 < _min_dist_dropoff_order_in_child123_chauf1), _dist_mand1_school3_school1_school2, _min_dist_dropoff_order_in_child123_chauf1)" +,_min_dist_dropoff_order_in_child123_chauf1,"np.where((_dist_mand1_school3_school2_school1 > 0) & (_dist_mand1_school3_school2_school1 < _min_dist_dropoff_order_in_child123_chauf1), _dist_mand1_school3_school2_school1, _min_dist_dropoff_order_in_child123_chauf1)" +Absolute deviation inbound distance child123 Chauffer 1,abs_dev_dist_in_child123_chauf1,"np.maximum(_min_dist_dropoff_order_in_child123_chauf1 - dist_home_to_mand1, 0)" +,_dist_mand2_school1_school2_school3,"_dist_mand2_to_school1 + _dist_school1_to_school2 + _dist_school2_to_school3 + dist_school_to_home1" +,_dist_mand2_school1_school3_school2,"_dist_mand2_to_school1 + _dist_school1_to_school3 + _dist_school3_to_school2 + dist_school_to_home1" +,_dist_mand2_school2_school1_school3,"_dist_mand2_to_school2 + _dist_school2_to_school1 + _dist_school1_to_school3 + dist_school_to_home2" +,_dist_mand2_school2_school3_school1,"_dist_mand2_to_school2 + _dist_school2_to_school3 + _dist_school3_to_school1 + dist_school_to_home2" +,_dist_mand2_school3_school1_school2,"_dist_mand2_to_school3 + _dist_school3_to_school1 + _dist_school1_to_school2 + dist_school_to_home3" +,_dist_mand2_school3_school2_school1,"_dist_mand2_to_school3 + _dist_school3_to_school2 + _dist_school2_to_school1 + dist_school_to_home3" +,_min_dist_dropoff_order_in_child123_chauf2,_dist_mand2_school1_school2_school3 +,_min_dist_dropoff_order_in_child123_chauf2,"np.where((_dist_mand2_school1_school3_school2 > 0) & (_dist_mand2_school1_school3_school2 < _min_dist_dropoff_order_in_child123_chauf2), _dist_mand2_school1_school3_school2, _min_dist_dropoff_order_in_child123_chauf2)" +,_min_dist_dropoff_order_in_child123_chauf2,"np.where((_dist_mand2_school2_school1_school3 > 0) & (_dist_mand2_school2_school1_school3 < _min_dist_dropoff_order_in_child123_chauf2), _dist_mand2_school2_school1_school3, _min_dist_dropoff_order_in_child123_chauf2)" +,_min_dist_dropoff_order_in_child123_chauf2,"np.where((_dist_mand2_school2_school3_school1 > 0) & (_dist_mand2_school2_school3_school1 < _min_dist_dropoff_order_in_child123_chauf2), _dist_mand2_school2_school3_school1, _min_dist_dropoff_order_in_child123_chauf2)" +,_min_dist_dropoff_order_in_child123_chauf2,"np.where((_dist_mand2_school3_school1_school2 > 0) & (_dist_mand2_school3_school1_school2 < _min_dist_dropoff_order_in_child123_chauf2), _dist_mand2_school3_school1_school2, _min_dist_dropoff_order_in_child123_chauf2)" +,_min_dist_dropoff_order_in_child123_chauf2,"np.where((_dist_mand2_school3_school2_school1 > 0) & (_dist_mand2_school3_school2_school1 < _min_dist_dropoff_order_in_child123_chauf2), _dist_mand2_school3_school2_school1, _min_dist_dropoff_order_in_child123_chauf2)" +Absolute deviation inbound distance child123 Chauffer 2,abs_dev_dist_in_child123_chauf2,"np.maximum(_min_dist_dropoff_order_in_child123_chauf2 - dist_home_to_mand1, 0)" +# overlapping time windows from outbound escorting,, +Preferred departure time to school - child 1,_pref_depart_time_to_school1,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').start, df.child_id1)" +Preferred departure time to school - child 2,_pref_depart_time_to_school2,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').start, df.child_id2)" +Preferred departure time to school - child 3,_pref_depart_time_to_school3,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').start, df.child_id3)" +,return_min_taking_outbound_child1_pe,"(_pref_depart_time_to_school1 * mins_per_time_bin) + time_home_to_school1 + time_school_to_home1" +,return_min_taking_outbound_child2_pe,"(_pref_depart_time_to_school2 * mins_per_time_bin) + time_home_to_school2 + time_school_to_home2" +,return_min_taking_outbound_child3_pe,"(_pref_depart_time_to_school3 * mins_per_time_bin) + time_home_to_school3 + time_school_to_home3" +finding latest time chauffer 1 returns from outbound pure escort tour,outbound_pe_return_time_home_chauf1,-1 +,outbound_pe_return_time_home_chauf1,"np.where((df.chauf1_outbound == 2) & (return_min_taking_outbound_child1_pe > outbound_pe_return_time_home_chauf1), return_min_taking_outbound_child1_pe, outbound_pe_return_time_home_chauf1)" +,outbound_pe_return_time_home_chauf1,"np.where((df.chauf2_outbound == 2) & (return_min_taking_outbound_child2_pe > outbound_pe_return_time_home_chauf1), return_min_taking_outbound_child2_pe, outbound_pe_return_time_home_chauf1)" +,outbound_pe_return_time_home_chauf1,"np.where((df.chauf3_outbound == 2) & (return_min_taking_outbound_child3_pe > outbound_pe_return_time_home_chauf1), return_min_taking_outbound_child3_pe, outbound_pe_return_time_home_chauf1)" +finding latest time chauffer 2 returns from outbound pure escort tour,outbound_pe_return_time_home_chauf2,-1 +,outbound_pe_return_time_home_chauf2,"np.where((df.chauf1_outbound == 4) & (return_min_taking_outbound_child1_pe > outbound_pe_return_time_home_chauf2), return_min_taking_outbound_child1_pe, outbound_pe_return_time_home_chauf2)" +,outbound_pe_return_time_home_chauf2,"np.where((df.chauf2_outbound == 4) & (return_min_taking_outbound_child2_pe > outbound_pe_return_time_home_chauf2), return_min_taking_outbound_child2_pe, outbound_pe_return_time_home_chauf2)" +,outbound_pe_return_time_home_chauf2,"np.where((df.chauf3_outbound == 4) & (return_min_taking_outbound_child3_pe > outbound_pe_return_time_home_chauf2), return_min_taking_outbound_child3_pe, outbound_pe_return_time_home_chauf2)" +finding latest time chauffer 1 returns from outbound ride share tour,outbound_rs_return_time_home_chauf1,pref_depart_time_chauf1 +finding latest time chauffer 2 returns from outbound ride share tour,outbound_rs_return_time_home_chauf2,pref_depart_time_chauf2 +return time of outbound school escoring tour - chauffeur 1,return_bin_outbound_school_escorting1,"np.where(df.nrs1_outbound > 0, pref_depart_time_chauf1, outbound_pe_return_time_home_chauf1 / mins_per_time_bin)" +return time of outbound school escoring tour - chauffeur 2,return_bin_outbound_school_escorting2,"np.where(df.nrs2_outbound > 0, pref_depart_time_chauf2, outbound_pe_return_time_home_chauf2 / mins_per_time_bin)" diff --git a/activitysim/examples/prototype_mtc_extended/configs/school_escorting_preprocessor_outbound.csv b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_preprocessor_outbound.csv new file mode 100644 index 000000000..78b7f2578 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_preprocessor_outbound.csv @@ -0,0 +1,122 @@ +Description,Target,Expression +Number of children going to school,num_children_going_to_school,"np.where(df['child_id1'] > 0, 1, 0) + np.where(df['child_id2'] > 0, 1, 0) + np.where(df['child_id3'] > 0,1,0)" +Number of potential chauffeurs,num_potential_chauffeurs,"np.where(df['chauf_id1'] > 0, 1, 0) + np.where(df['chauf_id2'] > 0, 1, 0)" +Person Type - chauffer 1,ptype_chauf1,"reindex(persons.ptype, df.chauf_id1)" +Person Type - chauffer 2,ptype_chauf2,"reindex(persons.ptype, df.chauf_id2)" +Gender - chauffer 1,gender_chauf1,"reindex(persons.sex, df.chauf_id1)" +Gender - chauffer 2,gender_chauf2,"reindex(persons.sex, df.chauf_id2)" +Age - chauffer 1,age_chauf1,"reindex(persons.age, df.chauf_id1)" +Age - chauffer 2,age_chauf2,"reindex(persons.age, df.chauf_id2)" +Daily activity pattern - chauffer 1,cdap_chauf1,"reindex(persons.cdap_activity, df.chauf_id1)" +Daily activity pattern - chauffer 2,cdap_chauf2,"reindex(persons.cdap_activity, df.chauf_id2)" +Age - child 1,age_child1,"reindex(persons.age, df.child_id1)" +Age - child 2,age_child2,"reindex(persons.age, df.child_id2)" +Age - child 3,age_child3,"reindex(persons.age, df.child_id3)" +# Departure times to school and work +Preferred departure time to school - child 1,pref_depart_time_school1,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').start, df.child_id1)" +Preferred departure time to school - child 2,pref_depart_time_school2,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').start, df.child_id2)" +Preferred departure time to school - child 3,pref_depart_time_school3,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').start, df.child_id3)" +Preferred departure time to work / univ - chauffer 1,pref_depart_time_chauf1,"reindex(tours[(tours.tour_category == 'mandatory') & (tours.tour_num == 1)].set_index('person_id').start, df.chauf_id1)" +Preferred departure time to work / univ - chauffer 2,pref_depart_time_chauf2,"reindex(tours[(tours.tour_category == 'mandatory') & (tours.tour_num == 1)].set_index('person_id').start, df.chauf_id2)" +# Distances and times to school and work +School location - child 1,school_location_child1,"reindex(persons.school_zone_id, df.child_id1)" +School location - child 2,school_location_child2,"reindex(persons.school_zone_id, df.child_id2)" +School location - child 3,school_location_child3,"reindex(persons.school_zone_id, df.child_id3)" +School location - chauffer 1,_school_location_chauf1,"reindex(persons.workplace_zone_id, df.chauf_id1)" +School location - chauffer 2,_school_location_chauf2,"reindex(persons.workplace_zone_id, df.chauf_id2)" +Work location - chauffer 1,_work_location_chauf1,"reindex(persons.workplace_zone_id, df.chauf_id1)" +Work location - chauffer 2,_work_location_chauf2,"reindex(persons.workplace_zone_id, df.chauf_id2)" +Mandatory tour location - chauffer 1,_mandatory_location_chauf1,"_school_location_chauf1.where(ptype_chauf1 == 3, _work_location_chauf1)" +Mandatory tour location - chauffer 2,_mandatory_location_chauf2,"_school_location_chauf1.where(ptype_chauf2 == 3, _work_location_chauf2)" +# creating valid school locations to pass to skim_dict,, +,_valid_school_location_child1,school_location_child1.fillna(persons[persons.school_zone_id > 0].school_zone_id.mode()[0]) +,_valid_school_location_child2,school_location_child2.fillna(persons[persons.school_zone_id > 0].school_zone_id.mode()[0]) +,_valid_school_location_child3,school_location_child3.fillna(persons[persons.school_zone_id > 0].school_zone_id.mode()[0]) +,_valid_mandatory_location_chauf1,_mandatory_location_chauf1.fillna(persons[persons.workplace_zone_id > 0].workplace_zone_id.mode()[0]) +,_valid_mandatory_location_chauf2,_mandatory_location_chauf2.fillna(persons[persons.workplace_zone_id > 0].workplace_zone_id.mode()[0]) +Auto time home to school - child 1,time_home_to_school1,"np.where(school_location_child1 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child1, ('SOV_TIME', 'AM')), 0)" +Auto time home to school - child 2,time_home_to_school2,"np.where(school_location_child2 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child2, ('SOV_TIME', 'AM')), 0)" +Auto time home to school - child 3,time_home_to_school3,"np.where(school_location_child3 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child3, ('SOV_TIME', 'AM')), 0)" +Auto time school to home - child 1,time_school_to_home1,"np.where(school_location_child1 > 0, skim_dict.lookup(_valid_school_location_child1, df.home_zone_id, ('SOV_TIME', 'AM')), 0)" +Auto time school to home - child 2,time_school_to_home2,"np.where(school_location_child2 > 0, skim_dict.lookup(_valid_school_location_child2, df.home_zone_id, ('SOV_TIME', 'AM')), 0)" +Auto time school to home - child 3,time_school_to_home3,"np.where(school_location_child3 > 0, skim_dict.lookup(_valid_school_location_child3, df.home_zone_id, ('SOV_TIME', 'AM')), 0)" +Auto dist home to school - child 1,dist_home_to_school1,"np.where(school_location_child1 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child1, ('SOV_DIST', 'AM')), 0)" +Auto dist home to school - child 2,dist_home_to_school2,"np.where(school_location_child2 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child2, ('SOV_DIST', 'AM')), 0)" +Auto dist home to school - child 3,dist_home_to_school3,"np.where(school_location_child3 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child3, ('SOV_DIST', 'AM')), 0)" +Auto dist intra school taz - child 1,dist_intra_school1,"np.where(school_location_child1 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child1, ('SOV_DIST', 'AM')), 0)" +Auto dist intra school taz - child 2,dist_intra_school2,"np.where(school_location_child2 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child2, ('SOV_DIST', 'AM')), 0)" +Auto dist intra school taz - child 3,dist_intra_school3,"np.where(school_location_child3 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child3, ('SOV_DIST', 'AM')), 0)" +Auto time home to work or university - chauffer 1,time_home_to_mand1,"np.where(_mandatory_location_chauf1 > 0, skim_dict.lookup(df.home_zone_id, _valid_mandatory_location_chauf1, ('SOV_TIME', 'AM')), 0)" +Auto time home to work or university - chauffer 2,time_home_to_mand2,"np.where(_mandatory_location_chauf2 > 0, skim_dict.lookup(df.home_zone_id, _valid_mandatory_location_chauf2, ('SOV_TIME', 'AM')), 0)" +Auto dist home to work or university - chauffer 1,dist_home_to_mand1,"np.where(_mandatory_location_chauf1 > 0, skim_dict.lookup(df.home_zone_id, _valid_mandatory_location_chauf1, ('SOV_DIST', 'AM')), 0)" +Auto dist home to work or university - chauffer 2,dist_home_to_mand2,"np.where(_mandatory_location_chauf2 > 0, skim_dict.lookup(df.home_zone_id, _valid_mandatory_location_chauf2, ('SOV_DIST', 'AM')), 0)" +# outbound distance combinations between chauffeurs and children,, +Distance from child 1 school to chauffeur 1 mandatory location,_dist_school1_to_mand1,"np.where((school_location_child1 > 0) & (_mandatory_location_chauf1 > 0), skim_dict.lookup(_valid_school_location_child1, _valid_mandatory_location_chauf1, ('SOV_TIME', 'AM')), 0)" +Distance from child 1 school to chauffeur 2 mandatory location,_dist_school1_to_mand2,"np.where((school_location_child1 > 0) & (_mandatory_location_chauf2 > 0), skim_dict.lookup(_valid_school_location_child1, _valid_mandatory_location_chauf2, ('SOV_TIME', 'AM')), 0)" +Distance from child 2 school to chauffeur 1 mandatory location,_dist_school2_to_mand1,"np.where((school_location_child2 > 0) & (_mandatory_location_chauf1 > 0), skim_dict.lookup(_valid_school_location_child2, _valid_mandatory_location_chauf1, ('SOV_TIME', 'AM')), 0)" +Distance from child 2 school to chauffeur 2 mandatory location,_dist_school2_to_mand2,"np.where((school_location_child2 > 0) & (_mandatory_location_chauf2 > 0), skim_dict.lookup(_valid_school_location_child2, _valid_mandatory_location_chauf2, ('SOV_TIME', 'AM')), 0)" +Distance from child 3 school to chauffeur 1 mandatory location,_dist_school3_to_mand1,"np.where((school_location_child3 > 0) & (_mandatory_location_chauf1 > 0), skim_dict.lookup(_valid_school_location_child3, _valid_mandatory_location_chauf1, ('SOV_TIME', 'AM')), 0)" +Distance from child 3 school to chauffeur 2 mandatory location,_dist_school3_to_mand2,"np.where((school_location_child3 > 0) & (_mandatory_location_chauf2 > 0), skim_dict.lookup(_valid_school_location_child3, _valid_mandatory_location_chauf2, ('SOV_TIME', 'AM')), 0)" +Distance from child 1 school to child 2 school,_dist_school1_to_school2,"np.where((school_location_child1 > 0) & (school_location_child2 > 0), skim_dict.lookup(_valid_school_location_child1, _valid_school_location_child2, ('SOV_TIME', 'AM')), 0)" +Distance from child 1 school to child 3 school,_dist_school1_to_school3,"np.where((school_location_child1 > 0) & (school_location_child3 > 0), skim_dict.lookup(_valid_school_location_child1, _valid_school_location_child3, ('SOV_TIME', 'AM')), 0)" +Distance from child 2 school to child 3 school,_dist_school2_to_school3,"np.where((school_location_child2 > 0) & (school_location_child3 > 0), skim_dict.lookup(_valid_school_location_child2, _valid_school_location_child3, ('SOV_TIME', 'AM')), 0)" +Distance from child 2 school to child 1 school,_dist_school2_to_school1,"np.where((school_location_child2 > 0) & (school_location_child1 > 0), skim_dict.lookup(_valid_school_location_child2, _valid_school_location_child1, ('SOV_TIME', 'AM')), 0)" +Distance from child 3 school to child 1 school,_dist_school3_to_school1,"np.where((school_location_child3 > 0) & (school_location_child1 > 0), skim_dict.lookup(_valid_school_location_child3, _valid_school_location_child1, ('SOV_TIME', 'AM')), 0)" +Distance from child 3 school to child 2 school,_dist_school3_to_school2,"np.where((school_location_child3 > 0) & (school_location_child2 > 0), skim_dict.lookup(_valid_school_location_child3, _valid_school_location_child2, ('SOV_TIME', 'AM')), 0)" +# absolute deviation distance outbound,, +Absolute deviation outbound distance Child 1 Chauffer 1,abs_dev_dist_out_child1_chauf1,"np.maximum(dist_home_to_school1 + _dist_school1_to_mand1 - dist_home_to_mand1,0)" +Absolute deviation outbound distance Child 1 Chauffer 2,abs_dev_dist_out_child1_chauf2,"np.maximum(dist_home_to_school1 + _dist_school1_to_mand2 - dist_home_to_mand2,0)" +Absolute deviation outbound distance Child 2 Chauffer 1,abs_dev_dist_out_child2_chauf1,"np.maximum(dist_home_to_school2 + _dist_school2_to_mand1 - dist_home_to_mand1,0)" +Absolute deviation outbound distance Child 2 Chauffer 2,abs_dev_dist_out_child2_chauf2,"np.maximum(dist_home_to_school2 + _dist_school2_to_mand2 - dist_home_to_mand2,0)" +Absolute deviation outbound distance Child 3 Chauffer 1,abs_dev_dist_out_child3_chauf1,"np.maximum(dist_home_to_school3 + _dist_school3_to_mand1 - dist_home_to_mand1,0)" +Absolute deviation outbound distance Child 3 Chauffer 2,abs_dev_dist_out_child3_chauf2,"np.maximum(dist_home_to_school3 + _dist_school3_to_mand2 - dist_home_to_mand2,0)" +Absolute deviation outbound distance child12 Chauffer 1,abs_dev_dist_out_child12_chauf1,"np.maximum(np.minimum(dist_home_to_school1 + _dist_school1_to_school2 + _dist_school2_to_mand1, dist_home_to_school2 + _dist_school2_to_school1 + _dist_school1_to_mand1) - dist_home_to_mand1, 0)" +Absolute deviation outbound distance child12 Chauffer 2,abs_dev_dist_out_child12_chauf2,"np.maximum(np.minimum(dist_home_to_school1 + _dist_school1_to_school2 + _dist_school2_to_mand2, dist_home_to_school2 + _dist_school2_to_school1 + _dist_school1_to_mand2) - dist_home_to_mand2, 0)" +Absolute deviation outbound distance child13 Chauffer 1,abs_dev_dist_out_child13_chauf1,"np.maximum(np.minimum(dist_home_to_school1 + _dist_school1_to_school3 + _dist_school3_to_mand1, dist_home_to_school3 + _dist_school3_to_school1 + _dist_school1_to_mand1) - dist_home_to_mand1, 0)" +Absolute deviation outbound distance child13 Chauffer 2,abs_dev_dist_out_child13_chauf2,"np.maximum(np.minimum(dist_home_to_school1 + _dist_school1_to_school3 + _dist_school3_to_mand2, dist_home_to_school3 + _dist_school3_to_school1 + _dist_school1_to_mand2) - dist_home_to_mand2, 0)" +Absolute deviation outbound distance child23 Chauffer 1,abs_dev_dist_out_child23_chauf1,"np.maximum(np.minimum(dist_home_to_school2 + _dist_school2_to_school3 + _dist_school3_to_mand1, dist_home_to_school3 + _dist_school3_to_school2 + _dist_school2_to_mand1) - dist_home_to_mand1, 0)" +Absolute deviation outbound distance child23 Chauffer 2,abs_dev_dist_out_child23_chauf2,"np.maximum(np.minimum(dist_home_to_school2 + _dist_school2_to_school3 + _dist_school3_to_mand2, dist_home_to_school3 + _dist_school3_to_school2 + _dist_school2_to_mand2) - dist_home_to_mand2, 0)" +,_dist_school1_school2_school3_mand1,"dist_home_to_school1 + _dist_school1_to_school2 + _dist_school2_to_school3 + _dist_school3_to_mand1" +,_dist_school1_school3_school2_mand1,"dist_home_to_school1 + _dist_school1_to_school3 + _dist_school3_to_school2 + _dist_school2_to_mand1" +,_dist_school2_school1_school3_mand1,"dist_home_to_school2 + _dist_school2_to_school1 + _dist_school1_to_school3 + _dist_school3_to_mand1" +,_dist_school2_school3_school1_mand1,"dist_home_to_school2 + _dist_school2_to_school3 + _dist_school3_to_school1 + _dist_school1_to_mand1" +,_dist_school3_school1_school2_mand1,"dist_home_to_school3 + _dist_school3_to_school1 + _dist_school1_to_school2 + _dist_school2_to_mand1" +,_dist_school3_school2_school1_mand1,"dist_home_to_school3 + _dist_school3_to_school2 + _dist_school2_to_school1 + _dist_school1_to_mand1" +,_min_dist_dropoff_order_out_child123_chauf1,_dist_school1_school2_school3_mand1 +,_min_dist_dropoff_order_out_child123_chauf1,"np.where((_dist_school1_school3_school2_mand1 > 0) & (_dist_school1_school3_school2_mand1 < _min_dist_dropoff_order_out_child123_chauf1), _dist_school1_school3_school2_mand1, _min_dist_dropoff_order_out_child123_chauf1)" +,_min_dist_dropoff_order_out_child123_chauf1,"np.where((_dist_school2_school1_school3_mand1 > 0) & (_dist_school2_school1_school3_mand1 < _min_dist_dropoff_order_out_child123_chauf1), _dist_school2_school1_school3_mand1, _min_dist_dropoff_order_out_child123_chauf1)" +,_min_dist_dropoff_order_out_child123_chauf1,"np.where((_dist_school2_school3_school1_mand1 > 0) & (_dist_school2_school3_school1_mand1 < _min_dist_dropoff_order_out_child123_chauf1), _dist_school2_school3_school1_mand1, _min_dist_dropoff_order_out_child123_chauf1)" +,_min_dist_dropoff_order_out_child123_chauf1,"np.where((_dist_school3_school1_school2_mand1 > 0) & (_dist_school3_school1_school2_mand1 < _min_dist_dropoff_order_out_child123_chauf1), _dist_school3_school1_school2_mand1, _min_dist_dropoff_order_out_child123_chauf1)" +,_min_dist_dropoff_order_out_child123_chauf1,"np.where((_dist_school3_school2_school1_mand1 > 0) & (_dist_school3_school2_school1_mand1 < _min_dist_dropoff_order_out_child123_chauf1), _dist_school3_school2_school1_mand1, _min_dist_dropoff_order_out_child123_chauf1)" +Absolute deviation outbound distance child123 Chauffer 1,abs_dev_dist_out_child123_chauf1,"np.maximum(_min_dist_dropoff_order_out_child123_chauf1 - dist_home_to_mand1, 0)" +,_dist_school1_school2_school3_mand2,"dist_home_to_school1 + _dist_school1_to_school2 + _dist_school2_to_school3 + _dist_school3_to_mand2" +,_dist_school1_school3_school2_mand2,"dist_home_to_school1 + _dist_school1_to_school3 + _dist_school3_to_school2 + _dist_school2_to_mand2" +,_dist_school2_school1_school3_mand2,"dist_home_to_school2 + _dist_school2_to_school1 + _dist_school1_to_school3 + _dist_school3_to_mand2" +,_dist_school2_school3_school1_mand2,"dist_home_to_school2 + _dist_school2_to_school3 + _dist_school3_to_school1 + _dist_school1_to_mand2" +,_dist_school3_school1_school2_mand2,"dist_home_to_school3 + _dist_school3_to_school1 + _dist_school1_to_school2 + _dist_school2_to_mand2" +,_dist_school3_school2_school1_mand2,"dist_home_to_school3 + _dist_school3_to_school2 + _dist_school2_to_school1 + _dist_school1_to_mand2" +,_min_dist_dropoff_order_out_child123_chauf2,_dist_school1_school2_school3_mand2 +,_min_dist_dropoff_order_out_child123_chauf2,"np.where((_dist_school1_school3_school2_mand2 > 0) & (_dist_school1_school3_school2_mand2 < _min_dist_dropoff_order_out_child123_chauf2), _dist_school1_school3_school2_mand2, _min_dist_dropoff_order_out_child123_chauf2)" +,_min_dist_dropoff_order_out_child123_chauf2,"np.where((_dist_school2_school1_school3_mand2 > 0) & (_dist_school2_school1_school3_mand2 < _min_dist_dropoff_order_out_child123_chauf2), _dist_school2_school1_school3_mand2, _min_dist_dropoff_order_out_child123_chauf2)" +,_min_dist_dropoff_order_out_child123_chauf2,"np.where((_dist_school2_school3_school1_mand2 > 0) & (_dist_school2_school3_school1_mand2 < _min_dist_dropoff_order_out_child123_chauf2), _dist_school2_school3_school1_mand2, _min_dist_dropoff_order_out_child123_chauf2)" +,_min_dist_dropoff_order_out_child123_chauf2,"np.where((_dist_school3_school1_school2_mand2 > 0) & (_dist_school3_school1_school2_mand2 < _min_dist_dropoff_order_out_child123_chauf2), _dist_school3_school1_school2_mand2, _min_dist_dropoff_order_out_child123_chauf2)" +,_min_dist_dropoff_order_out_child123_chauf2,"np.where((_dist_school3_school2_school1_mand2 > 0) & (_dist_school3_school2_school1_mand2 < _min_dist_dropoff_order_out_child123_chauf2), _dist_school3_school2_school1_mand2, _min_dist_dropoff_order_out_child123_chauf2)" +Absolute deviation outbound distance child123 Chauffer 1,abs_dev_dist_out_child123_chauf2,"np.maximum(_min_dist_dropoff_order_out_child123_chauf2 - dist_home_to_mand2, 0)" +# Availability for multiple bundles,, +,_return_min_taking_child1,"(pref_depart_time_school1 * mins_per_time_bin) + time_home_to_school1 + time_school_to_home1" +,_return_min_taking_child2,"(pref_depart_time_school2 * mins_per_time_bin) + time_home_to_school2 + time_school_to_home2" +,_return_min_taking_child3,"(pref_depart_time_school3 * mins_per_time_bin) + time_home_to_school3 + time_school_to_home3" +Availability of taking child 1 and then 2,_avail_child1_then_child2,"(_return_min_taking_child1 < (pref_depart_time_school2 * mins_per_time_bin))" +Availability of taking child 2 and then 1,_avail_child2_then_child1,"(_return_min_taking_child2 < (pref_depart_time_school1 * mins_per_time_bin))" +Availability of taking child 1 and then 3,_avail_child1_then_child3,"(_return_min_taking_child1 < (pref_depart_time_school3 * mins_per_time_bin))" +Availability of taking child 3 and then 1,_avail_child3_then_child1,"(_return_min_taking_child3 < (pref_depart_time_school1 * mins_per_time_bin))" +Availability of taking child 2 and then 3,_avail_child2_then_child3,"(_return_min_taking_child2 < (pref_depart_time_school3 * mins_per_time_bin))" +Availability of taking child 3 and then 2,_avail_child3_then_child2,"(_return_min_taking_child3 < (pref_depart_time_school2 * mins_per_time_bin))" +multiple_bundle_availability,avail_multiple_bundles,(_avail_child1_then_child2 | _avail_child2_then_child1 | _avail_child1_then_child3 | _avail_child3_then_child1 | _avail_child2_then_child3 | _avail_child3_then_child2) +# ,, +# Inbound specific terms ,, +Preferred return time from school - child 1,pref_return_time_school1,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').end, df.child_id1)" +Preferred return time from school - child 2,pref_return_time_school2,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').end, df.child_id2)" +Preferred return time from school - child 3,pref_return_time_school3,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').end, df.child_id3)" +Preferred return time from work / univ - chauffer 1,pref_return_time_chauf1,"reindex(tours[(tours.tour_category == 'mandatory') & (tours.tour_num == 1)].set_index('person_id').end, df.chauf_id1)" +Preferred return time from work / univ - chauffer 2,pref_return_time_chauf2,"reindex(tours[(tours.tour_category == 'mandatory') & (tours.tour_num == 1)].set_index('person_id').end, df.chauf_id2)" diff --git a/activitysim/examples/prototype_mtc_extended/configs/school_escorting_preprocessor_outbound_cond.csv b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_preprocessor_outbound_cond.csv new file mode 100644 index 000000000..ede805b09 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/school_escorting_preprocessor_outbound_cond.csv @@ -0,0 +1,138 @@ +Description,Target,Expression +Number of children going to school,num_children_going_to_school,"np.where(df['child_id1'] > 0, 1, 0) + np.where(df['child_id2'] > 0, 1, 0) + np.where(df['child_id3'] > 0,1,0)" +Number of potential chauffeurs,num_potential_chauffeurs,"np.where(df['chauf_id1'] > 0, 1, 0) + np.where(df['chauf_id2'] > 0, 1, 0)" +Person Type - chauffer 1,ptype_chauf1,"reindex(persons.ptype, df.chauf_id1)" +Person Type - chauffer 2,ptype_chauf2,"reindex(persons.ptype, df.chauf_id2)" +Gender - chauffer 1,gender_chauf1,"reindex(persons.sex, df.chauf_id1)" +Gender - chauffer 2,gender_chauf2,"reindex(persons.sex, df.chauf_id2)" +Age - chauffer 1,age_chauf1,"reindex(persons.age, df.chauf_id1)" +Age - chauffer 2,age_chauf2,"reindex(persons.age, df.chauf_id2)" +Daily activity pattern - chauffer 1,cdap_chauf1,"reindex(persons.cdap_activity, df.chauf_id1)" +Daily activity pattern - chauffer 2,cdap_chauf2,"reindex(persons.cdap_activity, df.chauf_id2)" +Age - child 1,age_child1,"reindex(persons.age, df.child_id1)" +Age - child 2,age_child2,"reindex(persons.age, df.child_id2)" +Age - child 3,age_child3,"reindex(persons.age, df.child_id3)" +# Departure times to school and work +Preferred departure time to school - child 1,pref_depart_time_school1,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').start, df.child_id1)" +Preferred departure time to school - child 2,pref_depart_time_school2,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').start, df.child_id2)" +Preferred departure time to school - child 3,pref_depart_time_school3,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').start, df.child_id3)" +Preferred departure time to work / univ - chauffer 1,pref_depart_time_chauf1,"reindex(tours[(tours.tour_category == 'mandatory') & (tours.tour_num == 1)].set_index('person_id').start, df.chauf_id1)" +Preferred departure time to work / univ - chauffer 2,pref_depart_time_chauf2,"reindex(tours[(tours.tour_category == 'mandatory') & (tours.tour_num == 1)].set_index('person_id').start, df.chauf_id2)" +# Distances and times to school and work +School location - child 1,school_location_child1,"reindex(persons.school_zone_id, df.child_id1)" +School location - child 2,school_location_child2,"reindex(persons.school_zone_id, df.child_id2)" +School location - child 3,school_location_child3,"reindex(persons.school_zone_id, df.child_id3)" +School location - chauffer 1,_school_location_chauf1,"reindex(persons.workplace_zone_id, df.chauf_id1)" +School location - chauffer 2,_school_location_chauf2,"reindex(persons.workplace_zone_id, df.chauf_id2)" +Work location - chauffer 1,_work_location_chauf1,"reindex(persons.workplace_zone_id, df.chauf_id1)" +Work location - chauffer 2,_work_location_chauf2,"reindex(persons.workplace_zone_id, df.chauf_id2)" +Mandatory tour location - chauffer 1,_mandatory_location_chauf1,"_school_location_chauf1.where(ptype_chauf1 == 3, _work_location_chauf1)" +Mandatory tour location - chauffer 2,_mandatory_location_chauf2,"_school_location_chauf1.where(ptype_chauf2 == 3, _work_location_chauf2)" +# creating valid school locations to pass to skim_dict,, +,_valid_school_location_child1,school_location_child1.fillna(persons[persons.school_zone_id > 0].school_zone_id.mode()[0]) +,_valid_school_location_child2,school_location_child2.fillna(persons[persons.school_zone_id > 0].school_zone_id.mode()[0]) +,_valid_school_location_child3,school_location_child3.fillna(persons[persons.school_zone_id > 0].school_zone_id.mode()[0]) +,_valid_mandatory_location_chauf1,_mandatory_location_chauf1.fillna(persons[persons.workplace_zone_id > 0].workplace_zone_id.mode()[0]) +,_valid_mandatory_location_chauf2,_mandatory_location_chauf2.fillna(persons[persons.workplace_zone_id > 0].workplace_zone_id.mode()[0]) +Auto time home to school - child 1,time_home_to_school1,"np.where(school_location_child1 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child1, ('SOV_TIME', 'AM')), 0)" +Auto time home to school - child 2,time_home_to_school2,"np.where(school_location_child2 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child2, ('SOV_TIME', 'AM')), 0)" +Auto time home to school - child 3,time_home_to_school3,"np.where(school_location_child3 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child3, ('SOV_TIME', 'AM')), 0)" +Auto time school to home - child 1,time_school_to_home1,"np.where(school_location_child1 > 0, skim_dict.lookup(_valid_school_location_child1, df.home_zone_id, ('SOV_TIME', 'AM')), 0)" +Auto time school to home - child 2,time_school_to_home2,"np.where(school_location_child2 > 0, skim_dict.lookup(_valid_school_location_child2, df.home_zone_id, ('SOV_TIME', 'AM')), 0)" +Auto time school to home - child 3,time_school_to_home3,"np.where(school_location_child3 > 0, skim_dict.lookup(_valid_school_location_child3, df.home_zone_id, ('SOV_TIME', 'AM')), 0)" +Auto dist home to school - child 1,dist_home_to_school1,"np.where(school_location_child1 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child1, ('SOV_DIST', 'AM')), 0)" +Auto dist home to school - child 2,dist_home_to_school2,"np.where(school_location_child2 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child2, ('SOV_DIST', 'AM')), 0)" +Auto dist home to school - child 3,dist_home_to_school3,"np.where(school_location_child3 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child3, ('SOV_DIST', 'AM')), 0)" +Auto dist intra school taz - child 1,dist_intra_school1,"np.where(school_location_child1 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child1, ('SOV_DIST', 'AM')), 0)" +Auto dist intra school taz - child 2,dist_intra_school2,"np.where(school_location_child2 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child2, ('SOV_DIST', 'AM')), 0)" +Auto dist intra school taz - child 3,dist_intra_school3,"np.where(school_location_child3 > 0, skim_dict.lookup(df.home_zone_id, _valid_school_location_child3, ('SOV_DIST', 'AM')), 0)" +Auto time home to work or university - chauffer 1,time_home_to_mand1,"np.where(_mandatory_location_chauf1 > 0, skim_dict.lookup(df.home_zone_id, _valid_mandatory_location_chauf1, ('SOV_TIME', 'AM')), 0)" +Auto time home to work or university - chauffer 2,time_home_to_mand2,"np.where(_mandatory_location_chauf2 > 0, skim_dict.lookup(df.home_zone_id, _valid_mandatory_location_chauf2, ('SOV_TIME', 'AM')), 0)" +Auto dist home to work or university - chauffer 1,dist_home_to_mand1,"np.where(_mandatory_location_chauf1 > 0, skim_dict.lookup(df.home_zone_id, _valid_mandatory_location_chauf1, ('SOV_DIST', 'AM')), 0)" +Auto dist home to work or university - chauffer 2,dist_home_to_mand2,"np.where(_mandatory_location_chauf2 > 0, skim_dict.lookup(df.home_zone_id, _valid_mandatory_location_chauf2, ('SOV_DIST', 'AM')), 0)" +# outbound distance combinations between chauffeurs and children,, +Distance from child 1 school to chauffeur 1 mandatory location,_dist_school1_to_mand1,"np.where((school_location_child1 > 0) & (_mandatory_location_chauf1 > 0), skim_dict.lookup(_valid_school_location_child1, _valid_mandatory_location_chauf1, ('SOV_TIME', 'AM')), 0)" +Distance from child 1 school to chauffeur 2 mandatory location,_dist_school1_to_mand2,"np.where((school_location_child1 > 0) & (_mandatory_location_chauf2 > 0), skim_dict.lookup(_valid_school_location_child1, _valid_mandatory_location_chauf2, ('SOV_TIME', 'AM')), 0)" +Distance from child 2 school to chauffeur 1 mandatory location,_dist_school2_to_mand1,"np.where((school_location_child2 > 0) & (_mandatory_location_chauf1 > 0), skim_dict.lookup(_valid_school_location_child2, _valid_mandatory_location_chauf1, ('SOV_TIME', 'AM')), 0)" +Distance from child 2 school to chauffeur 2 mandatory location,_dist_school2_to_mand2,"np.where((school_location_child2 > 0) & (_mandatory_location_chauf2 > 0), skim_dict.lookup(_valid_school_location_child2, _valid_mandatory_location_chauf2, ('SOV_TIME', 'AM')), 0)" +Distance from child 3 school to chauffeur 1 mandatory location,_dist_school3_to_mand1,"np.where((school_location_child3 > 0) & (_mandatory_location_chauf1 > 0), skim_dict.lookup(_valid_school_location_child3, _valid_mandatory_location_chauf1, ('SOV_TIME', 'AM')), 0)" +Distance from child 3 school to chauffeur 2 mandatory location,_dist_school3_to_mand2,"np.where((school_location_child3 > 0) & (_mandatory_location_chauf2 > 0), skim_dict.lookup(_valid_school_location_child3, _valid_mandatory_location_chauf2, ('SOV_TIME', 'AM')), 0)" +Distance from child 1 school to child 2 school,_dist_school1_to_school2,"np.where((school_location_child1 > 0) & (school_location_child2 > 0), skim_dict.lookup(_valid_school_location_child1, _valid_school_location_child2, ('SOV_TIME', 'AM')), 0)" +Distance from child 1 school to child 3 school,_dist_school1_to_school3,"np.where((school_location_child1 > 0) & (school_location_child3 > 0), skim_dict.lookup(_valid_school_location_child1, _valid_school_location_child3, ('SOV_TIME', 'AM')), 0)" +Distance from child 2 school to child 3 school,_dist_school2_to_school3,"np.where((school_location_child2 > 0) & (school_location_child3 > 0), skim_dict.lookup(_valid_school_location_child2, _valid_school_location_child3, ('SOV_TIME', 'AM')), 0)" +Distance from child 2 school to child 1 school,_dist_school2_to_school1,"np.where((school_location_child2 > 0) & (school_location_child1 > 0), skim_dict.lookup(_valid_school_location_child2, _valid_school_location_child1, ('SOV_TIME', 'AM')), 0)" +Distance from child 3 school to child 1 school,_dist_school3_to_school1,"np.where((school_location_child3 > 0) & (school_location_child1 > 0), skim_dict.lookup(_valid_school_location_child3, _valid_school_location_child1, ('SOV_TIME', 'AM')), 0)" +Distance from child 3 school to child 2 school,_dist_school3_to_school2,"np.where((school_location_child3 > 0) & (school_location_child2 > 0), skim_dict.lookup(_valid_school_location_child3, _valid_school_location_child2, ('SOV_TIME', 'AM')), 0)" +# absolute deviation distance outbound,, +Absolute deviation outbound distance Child 1 Chauffer 1,abs_dev_dist_out_child1_chauf1,"np.maximum(dist_home_to_school1 + _dist_school1_to_mand1 - dist_home_to_mand1,0)" +Absolute deviation outbound distance Child 1 Chauffer 2,abs_dev_dist_out_child1_chauf2,"np.maximum(dist_home_to_school1 + _dist_school1_to_mand2 - dist_home_to_mand2,0)" +Absolute deviation outbound distance Child 2 Chauffer 1,abs_dev_dist_out_child2_chauf1,"np.maximum(dist_home_to_school2 + _dist_school2_to_mand1 - dist_home_to_mand1,0)" +Absolute deviation outbound distance Child 2 Chauffer 2,abs_dev_dist_out_child2_chauf2,"np.maximum(dist_home_to_school2 + _dist_school2_to_mand2 - dist_home_to_mand2,0)" +Absolute deviation outbound distance Child 3 Chauffer 1,abs_dev_dist_out_child3_chauf1,"np.maximum(dist_home_to_school3 + _dist_school3_to_mand1 - dist_home_to_mand1,0)" +Absolute deviation outbound distance Child 3 Chauffer 2,abs_dev_dist_out_child3_chauf2,"np.maximum(dist_home_to_school3 + _dist_school3_to_mand2 - dist_home_to_mand2,0)" +Absolute deviation outbound distance child12 Chauffer 1,abs_dev_dist_out_child12_chauf1,"np.maximum(np.minimum(dist_home_to_school1 + _dist_school1_to_school2 + _dist_school2_to_mand1, dist_home_to_school2 + _dist_school2_to_school1 + _dist_school1_to_mand1) - dist_home_to_mand1, 0)" +Absolute deviation outbound distance child12 Chauffer 2,abs_dev_dist_out_child12_chauf2,"np.maximum(np.minimum(dist_home_to_school1 + _dist_school1_to_school2 + _dist_school2_to_mand2, dist_home_to_school2 + _dist_school2_to_school1 + _dist_school1_to_mand2) - dist_home_to_mand2, 0)" +Absolute deviation outbound distance child13 Chauffer 1,abs_dev_dist_out_child13_chauf1,"np.maximum(np.minimum(dist_home_to_school1 + _dist_school1_to_school3 + _dist_school3_to_mand1, dist_home_to_school3 + _dist_school3_to_school1 + _dist_school1_to_mand1) - dist_home_to_mand1, 0)" +Absolute deviation outbound distance child13 Chauffer 2,abs_dev_dist_out_child13_chauf2,"np.maximum(np.minimum(dist_home_to_school1 + _dist_school1_to_school3 + _dist_school3_to_mand2, dist_home_to_school3 + _dist_school3_to_school1 + _dist_school1_to_mand2) - dist_home_to_mand2, 0)" +Absolute deviation outbound distance child23 Chauffer 1,abs_dev_dist_out_child23_chauf1,"np.maximum(np.minimum(dist_home_to_school2 + _dist_school2_to_school3 + _dist_school3_to_mand1, dist_home_to_school3 + _dist_school3_to_school2 + _dist_school2_to_mand1) - dist_home_to_mand1, 0)" +Absolute deviation outbound distance child23 Chauffer 2,abs_dev_dist_out_child23_chauf2,"np.maximum(np.minimum(dist_home_to_school2 + _dist_school2_to_school3 + _dist_school3_to_mand2, dist_home_to_school3 + _dist_school3_to_school2 + _dist_school2_to_mand2) - dist_home_to_mand2, 0)" +,_dist_school1_school2_school3_mand1,"dist_home_to_school1 + _dist_school1_to_school2 + _dist_school2_to_school3 + _dist_school3_to_mand1" +,_dist_school1_school3_school2_mand1,"dist_home_to_school1 + _dist_school1_to_school3 + _dist_school3_to_school2 + _dist_school2_to_mand1" +,_dist_school2_school1_school3_mand1,"dist_home_to_school2 + _dist_school2_to_school1 + _dist_school1_to_school3 + _dist_school3_to_mand1" +,_dist_school2_school3_school1_mand1,"dist_home_to_school2 + _dist_school2_to_school3 + _dist_school3_to_school1 + _dist_school1_to_mand1" +,_dist_school3_school1_school2_mand1,"dist_home_to_school3 + _dist_school3_to_school1 + _dist_school1_to_school2 + _dist_school2_to_mand1" +,_dist_school3_school2_school1_mand1,"dist_home_to_school3 + _dist_school3_to_school2 + _dist_school2_to_school1 + _dist_school1_to_mand1" +,_min_dist_dropoff_order_out_child123_chauf1,_dist_school1_school2_school3_mand1 +,_min_dist_dropoff_order_out_child123_chauf1,"np.where((_dist_school1_school3_school2_mand1 > 0) & (_dist_school1_school3_school2_mand1 < _min_dist_dropoff_order_out_child123_chauf1), _dist_school1_school3_school2_mand1, _min_dist_dropoff_order_out_child123_chauf1)" +,_min_dist_dropoff_order_out_child123_chauf1,"np.where((_dist_school2_school1_school3_mand1 > 0) & (_dist_school2_school1_school3_mand1 < _min_dist_dropoff_order_out_child123_chauf1), _dist_school2_school1_school3_mand1, _min_dist_dropoff_order_out_child123_chauf1)" +,_min_dist_dropoff_order_out_child123_chauf1,"np.where((_dist_school2_school3_school1_mand1 > 0) & (_dist_school2_school3_school1_mand1 < _min_dist_dropoff_order_out_child123_chauf1), _dist_school2_school3_school1_mand1, _min_dist_dropoff_order_out_child123_chauf1)" +,_min_dist_dropoff_order_out_child123_chauf1,"np.where((_dist_school3_school1_school2_mand1 > 0) & (_dist_school3_school1_school2_mand1 < _min_dist_dropoff_order_out_child123_chauf1), _dist_school3_school1_school2_mand1, _min_dist_dropoff_order_out_child123_chauf1)" +,_min_dist_dropoff_order_out_child123_chauf1,"np.where((_dist_school3_school2_school1_mand1 > 0) & (_dist_school3_school2_school1_mand1 < _min_dist_dropoff_order_out_child123_chauf1), _dist_school3_school2_school1_mand1, _min_dist_dropoff_order_out_child123_chauf1)" +Absolute deviation outbound distance child123 Chauffer 1,abs_dev_dist_out_child123_chauf1,"np.maximum(_min_dist_dropoff_order_out_child123_chauf1 - dist_home_to_mand1, 0)" +,_dist_school1_school2_school3_mand2,"dist_home_to_school1 + _dist_school1_to_school2 + _dist_school2_to_school3 + _dist_school3_to_mand2" +,_dist_school1_school3_school2_mand2,"dist_home_to_school1 + _dist_school1_to_school3 + _dist_school3_to_school2 + _dist_school2_to_mand2" +,_dist_school2_school1_school3_mand2,"dist_home_to_school2 + _dist_school2_to_school1 + _dist_school1_to_school3 + _dist_school3_to_mand2" +,_dist_school2_school3_school1_mand2,"dist_home_to_school2 + _dist_school2_to_school3 + _dist_school3_to_school1 + _dist_school1_to_mand2" +,_dist_school3_school1_school2_mand2,"dist_home_to_school3 + _dist_school3_to_school1 + _dist_school1_to_school2 + _dist_school2_to_mand2" +,_dist_school3_school2_school1_mand2,"dist_home_to_school3 + _dist_school3_to_school2 + _dist_school2_to_school1 + _dist_school1_to_mand2" +,_min_dist_dropoff_order_out_child123_chauf2,_dist_school1_school2_school3_mand2 +,_min_dist_dropoff_order_out_child123_chauf2,"np.where((_dist_school1_school3_school2_mand2 > 0) & (_dist_school1_school3_school2_mand2 < _min_dist_dropoff_order_out_child123_chauf2), _dist_school1_school3_school2_mand2, _min_dist_dropoff_order_out_child123_chauf2)" +,_min_dist_dropoff_order_out_child123_chauf2,"np.where((_dist_school2_school1_school3_mand2 > 0) & (_dist_school2_school1_school3_mand2 < _min_dist_dropoff_order_out_child123_chauf2), _dist_school2_school1_school3_mand2, _min_dist_dropoff_order_out_child123_chauf2)" +,_min_dist_dropoff_order_out_child123_chauf2,"np.where((_dist_school2_school3_school1_mand2 > 0) & (_dist_school2_school3_school1_mand2 < _min_dist_dropoff_order_out_child123_chauf2), _dist_school2_school3_school1_mand2, _min_dist_dropoff_order_out_child123_chauf2)" +,_min_dist_dropoff_order_out_child123_chauf2,"np.where((_dist_school3_school1_school2_mand2 > 0) & (_dist_school3_school1_school2_mand2 < _min_dist_dropoff_order_out_child123_chauf2), _dist_school3_school1_school2_mand2, _min_dist_dropoff_order_out_child123_chauf2)" +,_min_dist_dropoff_order_out_child123_chauf2,"np.where((_dist_school3_school2_school1_mand2 > 0) & (_dist_school3_school2_school1_mand2 < _min_dist_dropoff_order_out_child123_chauf2), _dist_school3_school2_school1_mand2, _min_dist_dropoff_order_out_child123_chauf2)" +Absolute deviation outbound distance child123 Chauffer 1,abs_dev_dist_out_child123_chauf2,"np.maximum(_min_dist_dropoff_order_out_child123_chauf2 - dist_home_to_mand2, 0)" +# Availability for multiple bundles,, +,_return_min_taking_child1,"(pref_depart_time_school1 * mins_per_time_bin) + time_home_to_school1 + time_school_to_home1" +,_return_min_taking_child2,"(pref_depart_time_school2 * mins_per_time_bin) + time_home_to_school2 + time_school_to_home2" +,_return_min_taking_child3,"(pref_depart_time_school3 * mins_per_time_bin) + time_home_to_school3 + time_school_to_home3" +Availability of taking child 1 and then 2,_avail_child1_then_child2,"(_return_min_taking_child1 < (pref_depart_time_school2 * mins_per_time_bin))" +Availability of taking child 2 and then 1,_avail_child2_then_child1,"(_return_min_taking_child2 < (pref_depart_time_school1 * mins_per_time_bin))" +Availability of taking child 1 and then 3,_avail_child1_then_child3,"(_return_min_taking_child1 < (pref_depart_time_school3 * mins_per_time_bin))" +Availability of taking child 3 and then 1,_avail_child3_then_child1,"(_return_min_taking_child3 < (pref_depart_time_school1 * mins_per_time_bin))" +Availability of taking child 2 and then 3,_avail_child2_then_child3,"(_return_min_taking_child2 < (pref_depart_time_school3 * mins_per_time_bin))" +Availability of taking child 3 and then 2,_avail_child3_then_child2,"(_return_min_taking_child3 < (pref_depart_time_school2 * mins_per_time_bin))" +multiple_bundle_availability,avail_multiple_bundles,(_avail_child1_then_child2 | _avail_child2_then_child1 | _avail_child1_then_child3 | _avail_child3_then_child1 | _avail_child2_then_child3 | _avail_child3_then_child2) +# ,, +# Inbound specific terms ,, +Preferred return time from school - child 1,pref_return_time_school1,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').end, df.child_id1)" +Preferred return time from school - child 2,pref_return_time_school2,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').end, df.child_id2)" +Preferred return time from school - child 3,pref_return_time_school3,"reindex(tours[(tours.tour_type == 'school') & (tours.tour_num == 1)].set_index('person_id').end, df.child_id3)" +Preferred return time from work / univ - chauffer 1,pref_return_time_chauf1,"reindex(tours[(tours.tour_category == 'mandatory') & (tours.tour_num == 1)].set_index('person_id').end, df.chauf_id1)" +Preferred return time from work / univ - chauffer 2,pref_return_time_chauf2,"reindex(tours[(tours.tour_category == 'mandatory') & (tours.tour_num == 1)].set_index('person_id').end, df.chauf_id2)" +# overlapping time windows from inbound escorting,, +# ,_return_min_taking_inbound_child1_pe,"(_pref_depart_time_to_school1 * mins_per_time_bin) + time_home_to_school1 + time_school_to_home1" +# ,_return_min_taking_inbound_child2_pe,"(_pref_depart_time_to_school2 * mins_per_time_bin) + time_home_to_school2 + time_school_to_home2" +# ,_return_min_taking_inbound_child3_pe,"(_pref_depart_time_to_school3 * mins_per_time_bin) + time_home_to_school3 + time_school_to_home3" +# finding earliest time chauffer 1 returns from inbound pure escort tour,inbound_pe_return_time_home_chauf1,-1 +# ,inbound_pe_return_time_home_chauf1,"np.where((df.chauf1_inbound == 2) & (_return_min_taking_inbound_child1_pe > inbound_pe_return_time_home_chauf1), _return_min_taking_inbound_child1_pe, inbound_pe_return_time_home_chauf1)" +# ,inbound_pe_return_time_home_chauf1,"np.where((df.chauf2_inbound == 2) & (_return_min_taking_inbound_child2_pe > inbound_pe_return_time_home_chauf1), _return_min_taking_inbound_child2_pe, inbound_pe_return_time_home_chauf1)" +# ,inbound_pe_return_time_home_chauf1,"np.where((df.chauf3_inbound == 2) & (_return_min_taking_inbound_child3_pe > inbound_pe_return_time_home_chauf1), _return_min_taking_inbound_child3_pe, inbound_pe_return_time_home_chauf1)" +# finding earliest time chauffer 2 returns from inbound pure escort tour,inbound_pe_return_time_home_chauf2,-1 +# ,inbound_pe_return_time_home_chauf2,"np.where((df.chauf1_inbound == 2) & (_return_min_taking_inbound_child1_pe > inbound_pe_return_time_home_chauf2), _return_min_taking_inbound_child1_pe, inbound_pe_return_time_home_chauf2)" +# ,inbound_pe_return_time_home_chauf2,"np.where((df.chauf2_inbound == 2) & (_return_min_taking_inbound_child2_pe > inbound_pe_return_time_home_chauf2), _return_min_taking_inbound_child2_pe, inbound_pe_return_time_home_chauf2)" +# ,inbound_pe_return_time_home_chauf2,"np.where((df.chauf3_inbound == 2) & (_return_min_taking_inbound_child3_pe > inbound_pe_return_time_home_chauf2), _return_min_taking_inbound_child3_pe, inbound_pe_return_time_home_chauf2)" +# finding latest time chauffer 1 returns from inbound ride share tour,inbound_rs_return_time_home_chauf1,pref_depart_time_chauf1 +# finding latest time chauffer 2 returns from inbound ride share tour,inbound_rs_return_time_home_chauf2,pref_depart_time_chauf2 +# return time of inbound school escoring tour - chauffeur 1,return_bin_inbound_school_escorting1,"np.where(df.nrs1_inbound > 0, pref_depart_time_chauf1, inbound_pe_return_time_home_chauf1)" +# return time of inbound school escoring tour - chauffeur 2,return_bin_inbound_school_escorting2,"np.where(df.nrs2_inbound > 0, pref_depart_time_chauf2, inbound_pe_return_time_home_chauf2)" diff --git a/activitysim/examples/prototype_mtc_extended/configs/settings.yaml b/activitysim/examples/prototype_mtc_extended/configs/settings.yaml index b1faa5c25..fd4b0ee39 100644 --- a/activitysim/examples/prototype_mtc_extended/configs/settings.yaml +++ b/activitysim/examples/prototype_mtc_extended/configs/settings.yaml @@ -102,7 +102,7 @@ check_for_variability: False # turn shadow_pricing on and off for all models (e.g. school and work) # shadow pricing is deprecated for less than full samples # see shadow_pricing.yaml for additional settings -use_shadow_pricing: False +use_shadow_pricing: True # turn writing of sample_tables on and off for all models # (if True, tables will be written if DEST_CHOICE_SAMPLE_TABLE_NAME is specified in individual model settings) @@ -155,7 +155,7 @@ keep_mem_logs: True # trace household id; comment out or leave empty for no trace # households with all tour types # [ 728370 1234067 1402924 1594625 1595333 1747572 1896849 1931818 2222690 2344951 2677154] -trace_hh_id: 982875 +trace_hh_id: # trace origin, destination in accessibility calculation; comment out or leave empty for no trace # trace_od: [5, 11] @@ -165,7 +165,6 @@ trace_od: # to resume after last successful checkpoint, specify resume_after: _ #resume_after: trip_destination -resume_after: checkpoints: True # if checkpoints is False, no intermediate checkpoints will be written before the end of run @@ -179,6 +178,10 @@ checkpoints: True models: + ## Disaggregate Accessibility steps + - initialize_proto_population # Separate step so proto tables can be split for multiprocess. + - compute_disaggregate_accessibility + ## Main model steps - initialize_landuse - initialize_households - compute_accessibility @@ -190,6 +193,7 @@ models: - cdap_simulate - mandatory_tour_frequency - mandatory_tour_scheduling + - school_escorting - joint_tour_frequency - joint_tour_composition - joint_tour_participation @@ -222,6 +226,7 @@ output_tables: tables: - checkpoints - accessibility + - proto_disaggregate_accessibility - land_use - households - persons diff --git a/activitysim/examples/prototype_mtc_extended/configs/shadow_pricing.yaml b/activitysim/examples/prototype_mtc_extended/configs/shadow_pricing.yaml new file mode 100644 index 000000000..593a36478 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/shadow_pricing.yaml @@ -0,0 +1,54 @@ +shadow_pricing_models: + school: school_location + workplace: workplace_location + +# global switch to enable/disable loading of saved shadow prices +# (ignored if global use_shadow_pricing switch is False) +LOAD_SAVED_SHADOW_PRICES: False + +# write out choices by iteration to trace folder +WRITE_ITERATION_CHOICES: True + +# number of shadow price iterations for cold start +MAX_ITERATIONS: 10 + +# number of shadow price iterations for warm start (after loading saved shadow_prices) +MAX_ITERATIONS_SAVED: 1 + +## Shadow pricing method +# SHADOW_PRICE_METHOD: ctramp +# SHADOW_PRICE_METHOD: daysim +SHADOW_PRICE_METHOD: simulation + +# --- simulation method settings +# ignore criteria for zones smaller than size_threshold +SIZE_THRESHOLD: 10 +# ignore criteria for zones smaller than target_threshold (total employmnet or enrollment) +TARGET_THRESHOLD: 20 +# zone passes if modeled is within percent_tolerance of predicted_size +PERCENT_TOLERANCE: 5 +# max percentage of zones allowed to fail +FAIL_THRESHOLD: 1 +# apply different targets for each segment specified in destination_size_terms.csv +school_segmentation_targets: + # format is segment: land_use_column + university: TOTENR_univ + highschool: HSENROLL + gradeschool: AGE0519 + +# if target names are the same, they will be combined together +workplace_segmentation_targets: + # using total employment scaled to remove external workers. see annotate_landuse.csv + work_low: TOTEMP_scaled + work_med: TOTEMP_scaled + work_high: TOTEMP_scaled + work_veryhigh: TOTEMP_scaled + +# --- ctramp method settings +DAMPING_FACTOR: 1 + +# --- daysim method settings +# FIXME should these be the same as PERCENT_TOLERANCE and FAIL_THRESHOLD above? +DAYSIM_ABSOLUTE_TOLERANCE: 50 +DAYSIM_PERCENT_TOLERANCE: 10 + diff --git a/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_alternatives.csv b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_alternatives.csv new file mode 100644 index 000000000..04a03d64f --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_alternatives.csv @@ -0,0 +1,21 @@ +#,,alt file for building tours even though simulation is simple_simulate not interaction_simulate +alt,out,in +0out_0in,0,0 +0out_1in,0,1 +0out_2in,0,2 +0out_3in,0,3 +1out_0in,1,0 +1out_1in,1,1 +1out_2in,1,2 +1out_3in,1,3 +2out_0in,2,0 +2out_1in,2,1 +2out_2in,2,2 +2out_3in,2,3 +3out_0in,3,0 +3out_1in,3,1 +3out_2in,3,2 +3out_3in,3,3 +# extension for flexible ids demonstration,, +# should be removed for actual model run,, +4out_3in,4,3 \ No newline at end of file diff --git a/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_coefficients_escort.csv b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_coefficients_escort.csv new file mode 100644 index 000000000..40e0f4145 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_coefficients_escort.csv @@ -0,0 +1,29 @@ +Description,value,coefficient_name +Number of HH Persons,-0.24,coef_number_of_hh_persons +Number of Students in HH,0.19,coef_number_of_students_in_hh +Dummy for all stops made by transit,-0.7,coef_dummy_for_all_stops_made_by_transit +Dummy for walking to all stops,-1.91,coef_dummy_for_walking_to_all_stops +Number of work tours undertaken by the person,-0.29,coef_number_of_work_tours_undertaken_by_the_person +Number of escort tours tours undertaken by the person,-0.15,coef_number_of_escort_tours_tours_undertaken_by_the_person +Dummy for the duration of the tour being equal or greater than or equal to 9 hours ,0.59,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_ +dummy for distance less than 5 Miles,0.32,coef_dummy_for_distance_less_than_5_miles +dummy for distance in miles,0.01,coef_dummy_for_distance_in_miles +No stops if tour mode is driveTransit,-999,coef_no_stops_if_tour_mode_is_drivetransit +Alternative specific constant for return stops,-0.968,coef_alternative_specific_constant_for_return_stops_0out_1in +Alternative specific constant for return stops on joint tours,-1.329,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_1in +Alternative specific constant for return stops,-2.41,coef_alternative_specific_constant_for_return_stops_0out_2in +Alternative specific constant for the total number of stops,0,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in +Alternative specific constant for return stops on joint tours,-2.796,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_2in +Alternative specific constant for the total number of stops on joint tours,0,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_0out_2in +Alternative specific constant for return stops,-3.024,coef_alternative_specific_constant_for_return_stops_0out_3in +Alternative specific constant for return stops on joint tours,-3.379,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_3in +Alternative specific constant for outbound stops,-2.173,coef_alternative_specific_constant_for_outbound_stops_1out_0in +Alternative specific constant for outbound stops on joint tours,-1.783,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_1out_0in +Alternative specific constant for the total number of stops on joint tours,0.518,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_1out_3in +Alternative specific constant for outbound stops,-4.294,coef_alternative_specific_constant_for_outbound_stops_2out_0in +Alternative specific constant for outbound stops on joint tours,-4.067,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_2out_0in +Alternative specific constant for the total number of stops,-1.807,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in +Alternative specific constant for the total number of stops on joint tours,1.497,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_2out_3in +Alternative specific constant for outbound stops,-4.758,coef_alternative_specific_constant_for_outbound_stops_3out_0in +Alternative specific constant for outbound stops on joint tours,-4.998,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_3out_0in +Unavailable,-999,coef_unavail diff --git a/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_coefficients_school.csv b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_coefficients_school.csv new file mode 100644 index 000000000..8efa5941f --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_coefficients_school.csv @@ -0,0 +1,22 @@ +Description,value,coefficient_name +Number of HH Persons,-0.506,coef_number_of_hh_persons +Presence of kids between 5 and 15 (including) years old,0.3299,coef_presence_of_kids_between_5_and_15_including_years_old +Number of Cars > Number of Workers,0.5331,coef_number_of_cars_number_of_workers +Dummy for female,0.4099,coef_dummy_for_female +Dummy for all stops made by transit,-0.7,coef_dummy_for_all_stops_made_by_transit +Dummy for walking to all stops,-1.8163,coef_dummy_for_walking_to_all_stops +Number of escort tours tours undertaken by the person,1.2365,coef_number_of_escort_tours_tours_undertaken_by_the_person +Arrival later than 17:00.,1.8377,coef_arrival_later_than_17_00_ +Dummy for the duration of the tour being equal or greater than or equal to 9 hours ,0.9549,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_ +dummy for distance in miles,0.0438,coef_dummy_for_distance_in_miles +No stops if tour mode is driveTransit,-999.0,coef_no_stops_if_tour_mode_is_drivetransit +Alternative specific constant for return stops,-1.206,coef_alternative_specific_constant_for_return_stops_0out_1in +Alternative specific constant for return stops,-2.6719999999999997,coef_alternative_specific_constant_for_return_stops_0out_2in +Alternative specific constant for the total number of stops,0.0,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in +Alternative specific constant for return stops,-3.364,coef_alternative_specific_constant_for_return_stops_0out_3in +Alternative specific constant for outbound stops,-2.123,coef_alternative_specific_constant_for_outbound_stops_1out_0in +Alternative specific constant for the total number of stops,0.701,coef_alternative_specific_constant_for_the_total_number_of_stops_1out_3in +Alternative specific constant for outbound stops,-3.798,coef_alternative_specific_constant_for_outbound_stops_2out_0in +Alternative specific constant for the total number of stops,1.135,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in +Alternative specific constant for outbound stops,-5.85,coef_alternative_specific_constant_for_outbound_stops_3out_0in +Coefficient for unavailable alternatives,-999,coef_unavail \ No newline at end of file diff --git a/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_coefficients_univ.csv b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_coefficients_univ.csv new file mode 100644 index 000000000..b074f4087 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_coefficients_univ.csv @@ -0,0 +1,21 @@ +Description,value,coefficient_name +Number of HH Persons,-0.2827,coef_number_of_hh_persons +Presence of kids between 5 and 15 (including) years old,0.6823,coef_presence_of_kids_between_5_and_15_including_years_old +Number of Vehicles,0.1703,coef_number_of_vehicles +Dummy for female,0.7349,coef_dummy_for_female +Dummy for all stops made by transit,-0.7,coef_dummy_for_all_stops_made_by_transit +Number of escort tours tours undertaken by the person,0.9018,coef_number_of_escort_tours_tours_undertaken_by_the_person +Arrival later than 17:00.,0.389,coef_arrival_later_than_17_00_ +Dummy for the duration of the tour being equal or greater than or equal to 9 hours ,0.8434,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_ +HH accesibility for inbound tours. Interaction,0.2481,coef_hh_accesibility_for_inbound_tours_interaction +No stops if tour mode is driveTransit,-999.0,coef_no_stops_if_tour_mode_is_drivetransit +Alternative specific constant for return stops,-2.003,coef_alternative_specific_constant_for_return_stops_0out_1in +Alternative specific constant for return stops,-3.51,coef_alternative_specific_constant_for_return_stops_0out_2in +Alternative specific constant for the total number of stops,0.0,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in +Alternative specific constant for return stops,-3.677,coef_alternative_specific_constant_for_return_stops_0out_3in +Alternative specific constant for outbound stops,-2.628,coef_alternative_specific_constant_for_outbound_stops_1out_0in +Alternative specific constant for the total number of stops,1.272,coef_alternative_specific_constant_for_the_total_number_of_stops_1out_3in +Alternative specific constant for outbound stops,-3.741,coef_alternative_specific_constant_for_outbound_stops_2out_0in +Alternative specific constant for the total number of stops,1.871,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in +Alternative specific constant for outbound stops,-4.981,coef_alternative_specific_constant_for_outbound_stops_3out_0in +Coefficient for unavailable alternatives,-999,coef_unavail \ No newline at end of file diff --git a/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_coefficients_work.csv b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_coefficients_work.csv new file mode 100644 index 000000000..61008890f --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_coefficients_work.csv @@ -0,0 +1,35 @@ +Description,value,coefficient_name +Middle to Low Income HH,0.17,coef_middle_to_low_income_hh +Mid to High Income HH,0.23,coef_mid_to_high_income_hh +High Income HH,0.24,coef_high_income_hh +Number of HH Persons,-0.31,coef_number_of_hh_persons +Number of Students in HH,0.21,coef_number_of_students_in_hh +Presence of Kids between 0 and 4 (including) years old,0.74,coef_presence_of_kids_between_0_and_4_including_years_old +Num kids between 5 and 15 (including) years old,0.08,coef_num_kids_between_5_and_15_including_years_old +Presence of kids between 5 and 15 (including) years old,0.26,coef_presence_of_kids_between_5_and_15_including_years_old +Number of Adults (>= 16 years old),0.03,coef_number_of_adults_16_years_old_ +Number of Cars > Number of Workers,0.16,coef_number_of_cars_number_of_workers +Dummy for female,0.22,coef_dummy_for_female +Dummy for all stops made by transit,-0.7,coef_dummy_for_all_stops_made_by_transit +Dummy for walking to all stops,-1.54,coef_dummy_for_walking_to_all_stops +Number of work tours undertaken by the person,-0.15,coef_number_of_work_tours_undertaken_by_the_person +Number of university tours tours undertaken by the person,-0.48,coef_number_of_university_tours_tours_undertaken_by_the_person +Number of school tours tours undertaken by the person,-1.55,coef_number_of_school_tours_tours_undertaken_by_the_person +Number of escort tours tours undertaken by the person,0.2,coef_number_of_escort_tours_tours_undertaken_by_the_person +Number of shop tours undertaken by the houshold,-0.05,coef_number_of_shop_tours_undertaken_by_the_houshold +AM Peak departure between 6AM and 7 AM (including) Interacted with outbound tours,-1.93,coef_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours +Evening Arrival (>=19:00) Interacted with return tours,0.31,coef_evening_arrival_19_00_interacted_with_return_tours +Dummy for the duration of the tour being equal or greater than or equal to 11 hours,0.6,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours +dummy for distance less than 20 Miles,-0.22,coef_dummy_for_distance_less_than_20_miles +dummy for distance in miles,0.01,coef_dummy_for_distance_in_miles +No stops if tour mode is driveTransit,-999.0,coef_no_stops_if_tour_mode_is_drivetransit +Alternative specific constant for return stops,-0.445,coef_alternative_specific_constant_for_return_stops_0out_1in +Number of subtours in the tour,0.19,coef_number_of_subtours_in_the_tour +Alternative specific constant for return stops,-1.775,coef_alternative_specific_constant_for_return_stops_0out_2in +Alternative specific constant for the total number of stops,0.0,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in +Alternative specific constant for return stops,-2.1390000000000002,coef_alternative_specific_constant_for_return_stops_0out_3in +Alternative specific constant for outbound stops,-0.833,coef_alternative_specific_constant_for_outbound_stops_1out_0in +Alternative specific constant for outbound stops,-2.613,coef_alternative_specific_constant_for_outbound_stops_2out_0in +Alternative specific constant for the total number of stops,0.695,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in +Alternative specific constant for outbound stops,-3.9339999999999997,coef_alternative_specific_constant_for_outbound_stops_3out_0in +Coefficient for unavailable alternatives,-999,coef_unavail \ No newline at end of file diff --git a/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_escort.csv b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_escort.csv new file mode 100644 index 000000000..e522097e5 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_escort.csv @@ -0,0 +1,49 @@ +Label,Description,Expression,0out_0in,0out_1in,0out_2in,0out_3in,1out_0in,1out_1in,1out_2in,1out_3in,2out_0in,2out_1in,2out_2in,2out_3in,3out_0in,3out_1in,3out_2in,3out_3in +util_middle_to_low_income_hh,Middle to Low Income HH,(income_in_thousands>19999) & (income_in_thousands<50000),,,,,,,,,,,,,,,, +util_mid_to_high_income_hh,Mid to High Income HH,(income_in_thousands>=50000) & (income_in_thousands<100000),,,,,,,,,,,,,,,, +util_high_income_hh,High Income HH,(income_in_thousands>=100000),,,,,,,,,,,,,,,, +util_number_of_hh_persons,Number of HH Persons,hhsize,,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons +util_number_of_full_time_workers_in_hh,Number of full time workers in HH,num_full,,,,,,,,,,,,,,,, +util_number_of_students_in_hh,Number of Students in HH,num_student,,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh +util_num_kids_between_0_and_4_including_years_old,Num Kids between 0 and 4 (including) years old,num_age_0_4,,,,,,,,,,,,,,,, +util_presence_of_kids_between_0_and_4_including_years_old,Presence of Kids between 0 and 4 (including) years old,(num_age_0_4 > 0),,,,,,,,,,,,,,,, +util_num_kids_between_5_and_15_including_years_old,Num kids between 5 and 15 (including) years old,num_age_5_15,,,,,,,,,,,,,,,, +util_presence_of_kids_between_5_and_15_including_years_old,Presence of kids between 5 and 15 (including) years old,(num_age_5_15 > 0),,,,,,,,,,,,,,,, +util_number_of_adults_16_years_old_,Number of Adults (>= 16 years old),num_adult,,,,,,,,,,,,,,,, +util_dummy_for_single_parent_household,Dummy for single parent household,(num_adult == 1) & (num_age_0_4 + num_age_5_15 > 0),,,,,,,,,,,,,,,, +util_number_of_cars_number_of_workers,Number of Cars > Number of Workers,more_cars_than_workers,,,,,,,,,,,,,,,, +util_number_of_vehicles,Number of Vehicles,auto_ownership,,,,,,,,,,,,,,,, +util_dummy_for_female,Dummy for female,female,,,,,,,,,,,,,,,, +util_dummy_for_all_stops_made_by_transit,Dummy for all stops made by transit,tour_mode_is_transit,,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit +util_dummy_for_walking_to_all_stops,Dummy for walking to all stops,tour_mode_is_non_motorized,,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops +util_number_of_work_tours_undertaken_by_the_person,Number of work tours undertaken by the person,num_work_tours,,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person +util_number_of_university_tours_tours_undertaken_by_the_person,Number of university tours tours undertaken by the person,num_univ_tours,,,,,,,,,,,,,,,, +util_number_of_school_tours_tours_undertaken_by_the_person,Number of school tours tours undertaken by the person,num_school_tours,,,,,,,,,,,,,,,, +util_number_of_escort_tours_tours_undertaken_by_the_person,Number of escort tours tours undertaken by the person,num_escort_tours,,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person +util_number_of_shop_tours_undertaken_by_the_person,Number of shop tours undertaken by the person,num_shop_tours,,,,,,,,,,,,,,,, +util_number_of_maintenace_tours_tours_undertaken_by_the_person,Number of maintenace tours tours undertaken by the person,num_maint_tours,,,,,,,,,,,,,,,, +util_number_of_eating_tours_tours_undertaken_by_the_person,Number of eating tours tours undertaken by the person,num_eatout_tours,,,,,,,,,,,,,,,, +util_number_of_visit_tours_tours_undertaken_by_the_person,Number of visit tours tours undertaken by the person,num_social_tours,,,,,,,,,,,,,,,, +util_number_of_shop_tours_undertaken_by_the_houshold,Number of shop tours undertaken by the houshold,num_hh_shop_tours,,,,,,,,,,,,,,,, +util_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,AM Peak departure between 6AM and 7 AM (including) Interacted with outbound tours,(start>5) & (start<8),,,,,,,,,,,,,,,, +util_arrival_later_than_17_00_,Arrival later than 17:00.,(end > 16),,,,,,,,,,,,,,,, +util_evening_arrival_19_00_interacted_with_return_tours,Evening Arrival (>=19:00) Interacted with return tours,(end > 18),,,,,,,,,,,,,,,, +util_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,Dummy for the duration of the tour being equal or greater than or equal to 11 hours,(duration > 10),,,,,,,,,,,,,,,, +util_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,Dummy for the duration of the tour being equal or greater than or equal to 9 hours ,(duration > 8),,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_ +util_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_3_hours_,Dummy for the duration of the tour being equal or greater than or equal to 3 hours ,(duration > 2),,,,,,,,,,,,,,,, +util_hh_accesibility_for_outbound_tours_interaction,HH accesibility for outbound tours. Interaction,hhacc,,,,,,,,,,,,,,,, +util_hh_accesibility_for_inbound_tours_interaction,HH accesibility for inbound tours. Interaction,hhacc,,,,,,,,,,,,,,,, +util_primary_destination_accessibility_for_outbound_tours_interaction,Primary Destination Accessibility for outbound tours. Interaction,pracc,,,,,,,,,,,,,,,, +util_primary_destination_accessibility_for_return_tours_interaction,Primary Destination Accessibility for return tours. Interaction,pracc,,,,,,,,,,,,,,,, +util_dummy_for_distance_less_than_5_miles,dummy for distance less than 5 Miles,(distance_in_miles < 5),,coef_dummy_for_distance_less_than_5_miles,coef_dummy_for_distance_less_than_5_miles,coef_dummy_for_distance_less_than_5_miles,coef_dummy_for_distance_less_than_5_miles,coef_dummy_for_distance_less_than_5_miles,coef_dummy_for_distance_less_than_5_miles,coef_dummy_for_distance_less_than_5_miles,coef_dummy_for_distance_less_than_5_miles,coef_dummy_for_distance_less_than_5_miles,coef_dummy_for_distance_less_than_5_miles,coef_dummy_for_distance_less_than_5_miles,coef_dummy_for_distance_less_than_5_miles,coef_dummy_for_distance_less_than_5_miles,coef_dummy_for_distance_less_than_5_miles,coef_dummy_for_distance_less_than_5_miles +util_dummy_for_distance_in_miles,dummy for distance in miles,distance_in_miles,,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles +util_no_stops_if_tour_mode_is_drivetransit,No stops if tour mode is driveTransit,tour_mode_is_drive_transit,,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit +util_alternative_specific_constant_for_outbound_stops,Alternative specific constant for outbound stops,~is_joint,,,,,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in +util_alternative_specific_constant_for_return_stops,Alternative specific constant for return stops,~is_joint,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in +util_alternative_specific_constant_for_the_total_number_of_stops,Alternative specific constant for the total number of stops,~is_joint,,,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in +util_alternative_specific_constant_for_outbound_stops_on_joint_tours,Alternative specific constant for outbound stops on joint tours,is_joint,,,,,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_1out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_1out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_1out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_1out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_2out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_2out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_2out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_2out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_3out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_3out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_3out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_3out_0in +util_alternative_specific_constant_for_return_stops_on_joint_tours,Alternative specific constant for return stops on joint tours,is_joint,,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_1in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_3in,,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_1in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_3in,,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_1in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_3in,,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_1in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_3in +util_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours,Alternative specific constant for the total number of stops on joint tours,is_joint,,,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_0out_2in,,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_1out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_1out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_2out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_1out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_2out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_2out_3in +# added for school escorting,,,,,,,,,,,,,,,,,, +util_no_stops_to_school_escorting,Do not allow stops for school escort half-tour -- outbound,"(school_esc_outbound.isin(['ride_share', 'pure_escort']))",,,,,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail +util_no_stops_from_school_escorting,Do not allow stops for school escort half-tour -- inbound,"(school_esc_inbound.isin(['ride_share', 'pure_escort']))",,coef_unavail,coef_unavail,coef_unavail,,coef_unavail,coef_unavail,coef_unavail,,coef_unavail,coef_unavail,coef_unavail,,coef_unavail,coef_unavail,coef_unavail diff --git a/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_othdiscr.csv b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_othdiscr.csv new file mode 100644 index 000000000..ef0a49437 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_othdiscr.csv @@ -0,0 +1,50 @@ +Label,Description,Expression,0out_0in,0out_1in,0out_2in,0out_3in,1out_0in,1out_1in,1out_2in,1out_3in,2out_0in,2out_1in,2out_2in,2out_3in,3out_0in,3out_1in,3out_2in,3out_3in,4out_3in +util_middle_to_low_income_hh_,Middle to Low Income HH ,(income_in_thousands>19999) & (income_in_thousands<50000),,,,,,,,,,,,,,,,, +util_mid_to_high_income_hh,Mid to High Income HH,(income_in_thousands>=50000) & (income_in_thousands<100000),,,,,,,,,,,,,,,,, +util_high_income_hh,High Income HH,(income_in_thousands>=100000),,,,,,,,,,,,,,,,, +util_number_of_hh_persons,Number of HH Persons,hhsize,,,,,,,,,,,,,,,,, +util_number_of_full_time_workes_in_hh,Number of full time workes in HH,num_full,,,,,,,,,,,,,,,,, +util_number_of_students_in_hh,Number of Students in HH,num_student,,,,,,,,,,,,,,,,, +util_num_kids_between_0_and_4_including_years_old,Num Kids between 0 and 4 (including) years old,num_age_0_4,,,,,,,,,,,,,,,,, +util_presence_of_kids_between_0_and_4_including_years_old,Presence of Kids between 0 and 4 (including) years old,(num_age_0_4 > 0),,,,,,,,,,,,,,,,, +util_num_kids_between_4_and_15_including_years_old,Num kids between 4 and 15 (including) years old,num_age_5_15,,,,,,,,,,,,,,,,, +util_presence_of_kids_between_5_and_15_including_years_old,Presence of kids between 5 and 15 (including) years old,(num_age_5_15 > 0),,,,,,,,,,,,,,,,, +util_number_of_adults_16_years_old_,Number of Adults (>= 16 years old),num_adult,,,,,,,,,,,,,,,,, +util_dummy_for_single_parent_household,Dummy for single parent household,(num_adult == 1) & (num_age_0_4 + num_age_5_15 > 0),,,,,,,,,,,,,,,,, +util_number_of_cars_number_of_workers,Number of Cars > Number of Workers,more_cars_than_workers,,,,,,,,,,,,,,,,, +util_number_of_vehicles,Number of Vehicles,auto_ownership,,,,,,,,,,,,,,,,, +util_dummy_for_female,Dummy for female,~is_joint & female,,,,,,,,,,,,,,,,, +util_dummy_for_all_stops_made_by_transit,Dummy for all stops made by transit,tour_mode_is_transit,,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit +util_dummy_for_walking_to_all_stops,Dummy for walking to all stops,tour_mode_is_non_motorized,,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops +util_number_of_work_tours_undertaken_by_the_person,Number of work tours undertaken by the person,~is_joint * num_work_tours,,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person +util_number_of_university_tours_tours_undertaken_by_the_person,Number of university tours tours undertaken by the person,~is_joint * num_univ_tours,,,,,,,,,,,,,,,,, +util_number_of_shool_tours_tours_undertaken_by_the_person,Number of shool tours tours undertaken by the person,~is_joint * num_school_tours,,coef_number_of_shool_tours_tours_undertaken_by_the_person,coef_number_of_shool_tours_tours_undertaken_by_the_person,coef_number_of_shool_tours_tours_undertaken_by_the_person,coef_number_of_shool_tours_tours_undertaken_by_the_person,coef_number_of_shool_tours_tours_undertaken_by_the_person,coef_number_of_shool_tours_tours_undertaken_by_the_person,coef_number_of_shool_tours_tours_undertaken_by_the_person,coef_number_of_shool_tours_tours_undertaken_by_the_person,coef_number_of_shool_tours_tours_undertaken_by_the_person,coef_number_of_shool_tours_tours_undertaken_by_the_person,coef_number_of_shool_tours_tours_undertaken_by_the_person,coef_number_of_shool_tours_tours_undertaken_by_the_person,coef_number_of_shool_tours_tours_undertaken_by_the_person,coef_number_of_shool_tours_tours_undertaken_by_the_person,coef_number_of_shool_tours_tours_undertaken_by_the_person,coef_number_of_shool_tours_tours_undertaken_by_the_person +util_number_of_escort_tours_tours_undertaken_by_the_person,Number of escort tours tours undertaken by the person,~is_joint * num_escort_tours,,,,,,,,,,,,,,,,, +util_number_of_shop_tours_undertaken_by_the_person,Number of shop tours undertaken by the person,~is_joint * num_shop_tours,,coef_number_of_shop_tours_undertaken_by_the_person,coef_number_of_shop_tours_undertaken_by_the_person,coef_number_of_shop_tours_undertaken_by_the_person,coef_number_of_shop_tours_undertaken_by_the_person,coef_number_of_shop_tours_undertaken_by_the_person,coef_number_of_shop_tours_undertaken_by_the_person,coef_number_of_shop_tours_undertaken_by_the_person,coef_number_of_shop_tours_undertaken_by_the_person,coef_number_of_shop_tours_undertaken_by_the_person,coef_number_of_shop_tours_undertaken_by_the_person,coef_number_of_shop_tours_undertaken_by_the_person,coef_number_of_shop_tours_undertaken_by_the_person,coef_number_of_shop_tours_undertaken_by_the_person,coef_number_of_shop_tours_undertaken_by_the_person,coef_number_of_shop_tours_undertaken_by_the_person,coef_number_of_shop_tours_undertaken_by_the_person +util_number_of_maintenace_tours_tours_undertaken_by_the_person,Number of maintenace tours tours undertaken by the person,~is_joint * num_maint_tours,,coef_number_of_maintenace_tours_tours_undertaken_by_the_person,coef_number_of_maintenace_tours_tours_undertaken_by_the_person,coef_number_of_maintenace_tours_tours_undertaken_by_the_person,coef_number_of_maintenace_tours_tours_undertaken_by_the_person,coef_number_of_maintenace_tours_tours_undertaken_by_the_person,coef_number_of_maintenace_tours_tours_undertaken_by_the_person,coef_number_of_maintenace_tours_tours_undertaken_by_the_person,coef_number_of_maintenace_tours_tours_undertaken_by_the_person,coef_number_of_maintenace_tours_tours_undertaken_by_the_person,coef_number_of_maintenace_tours_tours_undertaken_by_the_person,coef_number_of_maintenace_tours_tours_undertaken_by_the_person,coef_number_of_maintenace_tours_tours_undertaken_by_the_person,coef_number_of_maintenace_tours_tours_undertaken_by_the_person,coef_number_of_maintenace_tours_tours_undertaken_by_the_person,coef_number_of_maintenace_tours_tours_undertaken_by_the_person,coef_number_of_maintenace_tours_tours_undertaken_by_the_person +util_number_of_eating_tours_tours_undertaken_by_the_person,Number of eating tours tours undertaken by the person,~is_joint * num_eatout_tours,,,,,,,,,,,,,,,,, +util_number_of_visit_tours_tours_undertaken_by_the_person,Number of visit tours tours undertaken by the person,~is_joint * num_social_tours,,,,,,,,,,,,,,,,, +util_number_of_shop_tours_undertaken_by_the_houshold,Number of shop tours undertaken by the houshold,num_hh_shop_tours,,,,,,,,,,,,,,,,, +util_number_of_persons_participating_in_the_tour_outgoing_stops_interaction,Number of persons participating in the tour.Outgoing stops interaction,is_joint * number_of_participants,,,,,,,,,,,,,,,,, +util_number_of_persons_participating_in_the_tour_return_stops_interaction,Number of persons participating in the tour.Return stops interaction,is_joint * number_of_participants,,,,,,,,,,,,,,,,, +util_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,AM Peak departure between 6AM and 7 AM (including) Interacted with outbound tours,(start>5) & (start<8),,,,,,,,,,,,,,,,, +util_arrival_later_than_17_00_,Arrival later than 17:00.,(end > 16),,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_ +util_evening_arrival_19_00_interacted_with_return_tours,Evening Arrival (>=19:00) Interacted with return tours,(end > 18),,,,,,,,,,,,,,,,, +util_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,Dummy for the duration of the tour being equal or greater than or equal to 11 hours,(duration > 10),,,,,,,,,,,,,,,,, +util_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,Dummy for the duration of the tour being equal or greater than or equal to 9 hours ,(duration > 8),,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_ +util_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_3_hours_,Dummy for the duration of the tour being equal or greater than or equal to 3 hours ,(duration > 2),,,,,,,,,,,,,,,,, +util_hh_accesibility_for_outbound_tours_interaction,HH accesibility for outbound tours. Interaction,hhacc,,,,,,,,,,,,,,,,, +util_hh_accesibility_for_inbound_tours_interaction,HH accesibility for inbound tours. Interaction,hhacc,,,,,,,,,,,,,,,,, +util_primary_destination_accessibility_for_outbound_tours_interaction,Primary Destination Accessibility for outbound tours. Interaction,pracc,,,,,,,,,,,,,,,,, +util_primary_destination_accessibility_for_return_tours_interaction,Primary Destination Accessibility for return tours. Interaction,pracc,,,,,,,,,,,,,,,,, +util_dummy_for_distance_less_than_10_miles_,dummy for distance less than 10 Miles ,(distance_in_miles < 10),,coef_dummy_for_distance_less_than_10_miles_,coef_dummy_for_distance_less_than_10_miles_,coef_dummy_for_distance_less_than_10_miles_,coef_dummy_for_distance_less_than_10_miles_,coef_dummy_for_distance_less_than_10_miles_,coef_dummy_for_distance_less_than_10_miles_,coef_dummy_for_distance_less_than_10_miles_,coef_dummy_for_distance_less_than_10_miles_,coef_dummy_for_distance_less_than_10_miles_,coef_dummy_for_distance_less_than_10_miles_,coef_dummy_for_distance_less_than_10_miles_,coef_dummy_for_distance_less_than_10_miles_,coef_dummy_for_distance_less_than_10_miles_,coef_dummy_for_distance_less_than_10_miles_,coef_dummy_for_distance_less_than_10_miles_,coef_dummy_for_distance_less_than_10_miles_ +util_dummy_for_distance_in_miles,dummy for distance in miles,distance_in_miles,,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles +util_no_stops_if_tour_mode_is_drivetransit,No stops if tour mode is driveTransit,tour_mode_is_drive_transit,,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit +util_alternative_specific_constant_for_outbound_stops,Alternative specific constant for outbound stops,~is_joint,,,,,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in +util_alternative_specific_constant_for_return_stops,Alternative specific constant for return stops,~is_joint,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in,coef_alternative_specific_constant_for_return_stops_0out_3in +util_alternative_specific_constant_for_the_total_number_of_stops,Alternative specific constant for the total number of stops,~is_joint,,,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_1out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_1out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_1out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in +util_alternative_specific_constant_for_outbound_stops_on_joint_tours,Alternative specific constant for outbound stops on joint tours,is_joint,,,,,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_1out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_1out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_1out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_1out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_2out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_2out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_2out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_2out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_3out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_3out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_3out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_3out_0in,coef_alternative_specific_constant_for_outbound_stops_on_joint_tours_3out_0in +util_alternative_specific_constant_for_return_stops_on_joint_tours,Alternative specific constant for return stops on joint tours,is_joint,,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_1in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_3in,,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_1in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_3in,,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_1in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_3in,,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_1in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_3in,coef_alternative_specific_constant_for_return_stops_on_joint_tours_0out_3in +util_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours,Alternative specific constant for the total number of stops on joint tours,is_joint,,,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_0out_2in,,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_1out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_1out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_2out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_1out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_2out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_2out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_on_joint_tours_2out_3in +# last column and below constant was added to demonstrate flexible id extension,,,,,,,,,,,,,,,,,,, +util_flexible_id_ext_constant,Constant to control addex example extension,True,,,,,,,,,,,,,,,,,8 diff --git a/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_school.csv b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_school.csv new file mode 100644 index 000000000..9aa97f549 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_school.csv @@ -0,0 +1,46 @@ +Label,Description,Expression,0out_0in,0out_1in,0out_2in,0out_3in,1out_0in,1out_1in,1out_2in,1out_3in,2out_0in,2out_1in,2out_2in,2out_3in,3out_0in,3out_1in,3out_2in,3out_3in +util_middle_to_low_income_hh,Middle to Low Income HH,(income_in_thousands>19999) & (income_in_thousands<50000),,,,,,,,,,,,,,,, +util_mid_to_high_income_hh,Mid to High Income HH,(income_in_thousands>=50000) & (income_in_thousands<100000),,,,,,,,,,,,,,,, +util_high_income_hh,High Income HH,(income_in_thousands>=100000),,,,,,,,,,,,,,,, +util_number_of_hh_persons,Number of HH Persons,hhsize,,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons +util_number_of_full_time_workers_in_hh,Number of full time workers in HH,num_full,,,,,,,,,,,,,,,, +util_number_of_students_in_hh,Number of Students in HH,num_student,,,,,,,,,,,,,,,, +util_num_kids_between_0_and_4_including_years_old,Num Kids between 0 and 4 (including) years old,num_age_0_4,,,,,,,,,,,,,,,, +util_presence_of_kids_between_0_and_4_including_years_old,Presence of Kids between 0 and 4 (including) years old,(num_age_0_4 > 0),,,,,,,,,,,,,,,, +util_num_kids_between_5_and_15_including_years_old,Num kids between 5 and 15 (including) years old,num_age_5_15,,,,,,,,,,,,,,,, +util_presence_of_kids_between_5_and_15_including_years_old,Presence of kids between 5 and 15 (including) years old,(num_age_5_15 > 0),,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old +util_number_of_adults_16_years_old_,Number of Adults (>= 16 years old),num_adult,,,,,,,,,,,,,,,, +util_dummy_for_single_parent_household,Dummy for single parent household,(num_adult == 1) & (num_age_0_4 + num_age_5_15 > 0),,,,,,,,,,,,,,,, +util_number_of_cars_number_of_workers,Number of Cars > Number of Workers,more_cars_than_workers,,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers +util_number_of_vehicles,Number of Vehicles,auto_ownership,,,,,,,,,,,,,,,, +util_dummy_for_female,Dummy for female,female,,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female +util_dummy_for_all_stops_made_by_transit,Dummy for all stops made by transit,tour_mode_is_transit,,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit +util_dummy_for_walking_to_all_stops,Dummy for walking to all stops,tour_mode_is_non_motorized,,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops +util_number_of_work_tours_undertaken_by_the_person,Number of work tours undertaken by the person,num_work_tours,,,,,,,,,,,,,,,, +util_number_of_university_tours_tours_undertaken_by_the_person,Number of university tours tours undertaken by the person,num_univ_tours,,,,,,,,,,,,,,,, +util_number_of_school_tours_tours_undertaken_by_the_person,Number of school tours tours undertaken by the person,num_school_tours,,,,,,,,,,,,,,,, +util_number_of_escort_tours_tours_undertaken_by_the_person,Number of escort tours tours undertaken by the person,num_escort_tours,,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person +util_number_of_shop_tours_undertaken_by_the_person,Number of shop tours undertaken by the person,num_shop_tours,,,,,,,,,,,,,,,, +util_number_of_maintenace_tours_tours_undertaken_by_the_person,Number of maintenace tours tours undertaken by the person,num_maint_tours,,,,,,,,,,,,,,,, +util_number_of_eating_tours_tours_undertaken_by_the_person,Number of eating tours tours undertaken by the person,num_eatout_tours,,,,,,,,,,,,,,,, +util_number_of_visit_tours_tours_undertaken_by_the_person,Number of visit tours tours undertaken by the person,num_social_tours,,,,,,,,,,,,,,,, +util_number_of_shop_tours_undertaken_by_the_houshold,Number of shop tours undertaken by the houshold,num_hh_shop_tours,,,,,,,,,,,,,,,, +util_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,AM Peak departure between 6AM and 7 AM (including) Interacted with outbound tours,(start>5) & (start<8),,,,,,,,,,,,,,,, +util_arrival_later_than_17_00_,Arrival later than 17:00.,(end > 16),,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_ +util_evening_arrival_19_00_interacted_with_return_tours,Evening Arrival (>=19:00) Interacted with return tours,(end > 18),,,,,,,,,,,,,,,, +util_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,Dummy for the duration of the tour being equal or greater than or equal to 11 hours,(duration > 10),,,,,,,,,,,,,,,, +util_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,Dummy for the duration of the tour being equal or greater than or equal to 9 hours ,(duration > 8),,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_ +util_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_3_hours_,Dummy for the duration of the tour being equal or greater than or equal to 3 hours ,(duration > 2),,,,,,,,,,,,,,,, +util_hh_accesibility_for_outbound_tours_interaction,HH accesibility for outbound tours. Interaction,hhacc,,,,,,,,,,,,,,,, +util_hh_accesibility_for_inbound_tours_interaction,HH accesibility for inbound tours. Interaction,hhacc,,,,,,,,,,,,,,,, +util_primary_destination_accessibility_for_outbound_tours_interaction,Primary Destination Accessibility for outbound tours. Interaction,pracc,,,,,,,,,,,,,,,, +util_primary_destination_accessibility_for_return_tours_interaction,Primary Destination Accessibility for return tours. Interaction,pracc,,,,,,,,,,,,,,,, +util_dummy_for_distance_less_than_15_miles,dummy for distance less than 15 Miles,(distance_in_miles < 15),,,,,,,,,,,,,,,, +util_dummy_for_distance_in_miles,dummy for distance in miles,distance_in_miles,,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles +util_no_stops_if_tour_mode_is_drivetransit,No stops if tour mode is driveTransit,tour_mode_is_drive_transit,,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit +util_alternative_specific_constant_for_outbound_stops,Alternative specific constant for outbound stops,1,,,,,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in +util_alternative_specific_constant_for_return_stops,Alternative specific constant for return stops,1,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in +util_alternative_specific_constant_for_the_total_number_of_stops,Alternative specific constant for the total number of stops,1,,,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_1out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_1out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_1out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in +# No stops for half tour that includes school escorting,,,,,,,,,,,,,,,,,, +util_no_stops_to_school_escorting,Do not allow stops for school escort half-tour -- outbound,"(school_esc_outbound.isin(['ride_share', 'pure_escort']))",,,,,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail +util_no_stops_from_school_escorting,Do not allow stops for school escort half-tour -- inbound,"(school_esc_inbound.isin(['ride_share', 'pure_escort']))",,coef_unavail,coef_unavail,coef_unavail,,coef_unavail,coef_unavail,coef_unavail,,coef_unavail,coef_unavail,coef_unavail,,coef_unavail,coef_unavail,coef_unavail diff --git a/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_univ.csv b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_univ.csv new file mode 100644 index 000000000..8b4b53031 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_univ.csv @@ -0,0 +1,46 @@ +Label,Description,Expression,0out_0in,0out_1in,0out_2in,0out_3in,1out_0in,1out_1in,1out_2in,1out_3in,2out_0in,2out_1in,2out_2in,2out_3in,3out_0in,3out_1in,3out_2in,3out_3in +util_middle_to_low_income_hh,Middle to Low Income HH,(income_in_thousands>19999) & (income_in_thousands<50000),,,,,,,,,,,,,,,, +util_mid_to_high_income_hh,Mid to High Income HH,(income_in_thousands>=50000) & (income_in_thousands<100000),,,,,,,,,,,,,,,, +util_high_income_hh,High Income HH,(income_in_thousands>=100000),,,,,,,,,,,,,,,, +util_number_of_hh_persons,Number of HH Persons,hhsize,,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons +util_number_of_full_time_workers_in_hh,Number of full time workers in HH,num_full,,,,,,,,,,,,,,,, +util_number_of_students_in_hh,Number of Students in HH,num_student,,,,,,,,,,,,,,,, +util_num_kids_between_0_and_4_including_years_old,Num Kids between 0 and 4 (including) years old,num_age_0_4,,,,,,,,,,,,,,,, +util_presence_of_kids_between_0_and_4_including_years_old,Presence of Kids between 0 and 4 (including) years old,(num_age_0_4 > 0),,,,,,,,,,,,,,,, +util_num_kids_between_5_and_15_including_years_old,Num kids between 5 and 15 (including) years old,num_age_5_15,,,,,,,,,,,,,,,, +util_presence_of_kids_between_5_and_15_including_years_old,Presence of kids between 5 and 15 (including) years old,(num_age_5_15 > 0),,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old +util_number_of_adults_16_years_old_,Number of Adults (>= 16 years old),num_adult,,,,,,,,,,,,,,,, +util_dummy_for_single_parent_household,Dummy for single parent household,(num_adult == 1) & (num_age_0_4 + num_age_5_15 > 0),,,,,,,,,,,,,,,, +util_number_of_cars_number_of_workers,Number of Cars > Number of Workers,more_cars_than_workers,,,,,,,,,,,,,,,, +util_number_of_vehicles,Number of Vehicles,auto_ownership,,coef_number_of_vehicles,coef_number_of_vehicles,coef_number_of_vehicles,coef_number_of_vehicles,coef_number_of_vehicles,coef_number_of_vehicles,coef_number_of_vehicles,coef_number_of_vehicles,coef_number_of_vehicles,coef_number_of_vehicles,coef_number_of_vehicles,coef_number_of_vehicles,coef_number_of_vehicles,coef_number_of_vehicles,coef_number_of_vehicles +util_dummy_for_female,Dummy for female,female,,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female +util_dummy_for_all_stops_made_by_transit,Dummy for all stops made by transit,tour_mode_is_transit,,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit +util_dummy_for_walking_to_all_stops,Dummy for walking to all stops,tour_mode_is_non_motorized,,,,,,,,,,,,,,,, +util_number_of_work_tours_undertaken_by_the_person,Number of work tours undertaken by the person,num_work_tours,,,,,,,,,,,,,,,, +util_number_of_university_tours_tours_undertaken_by_the_person,Number of university tours tours undertaken by the person,num_univ_tours,,,,,,,,,,,,,,,, +util_number_of_school_tours_tours_undertaken_by_the_person,Number of school tours tours undertaken by the person,num_school_tours,,,,,,,,,,,,,,,, +util_number_of_escort_tours_tours_undertaken_by_the_person,Number of escort tours tours undertaken by the person,num_escort_tours,,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person +util_number_of_shop_tours_undertaken_by_the_person,Number of shop tours undertaken by the person,num_shop_tours,,,,,,,,,,,,,,,, +util_number_of_maintenace_tours_tours_undertaken_by_the_person,Number of maintenace tours tours undertaken by the person,num_maint_tours,,,,,,,,,,,,,,,, +util_number_of_eating_tours_tours_undertaken_by_the_person,Number of eating tours tours undertaken by the person,num_eatout_tours,,,,,,,,,,,,,,,, +util_number_of_visit_tours_tours_undertaken_by_the_person,Number of visit tours tours undertaken by the person,num_social_tours,,,,,,,,,,,,,,,, +util_number_of_shop_tours_undertaken_by_the_houshold,Number of shop tours undertaken by the houshold,num_hh_shop_tours,,,,,,,,,,,,,,,, +util_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,AM Peak departure between 6AM and 7 AM (including) Interacted with outbound tours,(start>5) & (start<8),,,,,,,,,,,,,,,, +util_arrival_later_than_17_00_,Arrival later than 17:00.,(end > 16),,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_,coef_arrival_later_than_17_00_ +util_evening_arrival_19_00_interacted_with_return_tours,Evening Arrival (>=19:00) Interacted with return tours,(end > 18),,,,,,,,,,,,,,,, +util_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,Dummy for the duration of the tour being equal or greater than or equal to 11 hours,(duration > 10),,,,,,,,,,,,,,,, +util_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,Dummy for the duration of the tour being equal or greater than or equal to 9 hours ,(duration > 8),,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_ +util_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_3_hours_,Dummy for the duration of the tour being equal or greater than or equal to 3 hours ,(duration > 2),,,,,,,,,,,,,,,, +util_hh_accesibility_for_outbound_tours_interaction,HH accesibility for outbound tours. Interaction,hhacc,,,,,,,,,,,,,,,, +util_hh_accesibility_for_inbound_tours_interaction,HH accesibility for inbound tours. Interaction,hhacc,,coef_hh_accesibility_for_inbound_tours_interaction,coef_hh_accesibility_for_inbound_tours_interaction,coef_hh_accesibility_for_inbound_tours_interaction,coef_hh_accesibility_for_inbound_tours_interaction,coef_hh_accesibility_for_inbound_tours_interaction,coef_hh_accesibility_for_inbound_tours_interaction,coef_hh_accesibility_for_inbound_tours_interaction,coef_hh_accesibility_for_inbound_tours_interaction,coef_hh_accesibility_for_inbound_tours_interaction,coef_hh_accesibility_for_inbound_tours_interaction,coef_hh_accesibility_for_inbound_tours_interaction,coef_hh_accesibility_for_inbound_tours_interaction,coef_hh_accesibility_for_inbound_tours_interaction,coef_hh_accesibility_for_inbound_tours_interaction,coef_hh_accesibility_for_inbound_tours_interaction +util_primary_destination_accessibility_for_outbound_tours_interaction,Primary Destination Accessibility for outbound tours. Interaction,pracc,,,,,,,,,,,,,,,, +util_primary_destination_accessibility_for_return_tours_interaction,Primary Destination Accessibility for return tours. Interaction,pracc,,,,,,,,,,,,,,,, +util_dummy_for_distance_less_than_20_miles,dummy for distance less than 20 Miles,(distance_in_miles < 20),,,,,,,,,,,,,,,, +util_dummy_for_distance_in_miles,dummy for distance in miles,distance_in_miles,,,,,,,,,,,,,,,, +util_no_stops_if_tour_mode_is_drivetransit,No stops if tour mode is driveTransit,tour_mode_is_drive_transit,,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit +util_alternative_specific_constant_for_outbound_stops,Alternative specific constant for outbound stops,1,,,,,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in +util_alternative_specific_constant_for_return_stops,Alternative specific constant for return stops,1,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in +util_alternative_specific_constant_for_the_total_number_of_stops,Alternative specific constant for the total number of stops,1,,,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_1out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_1out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_1out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in +# No stops for half tour that includes school escorting,,,,,,,,,,,,,,,,,, +util_no_stops_to_school_escorting,Do not allow stops for school escort half-tour -- outbound,"(school_esc_outbound.isin(['ride_share', 'pure_escort']))",,,,,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail +util_no_stops_from_school_escorting,Do not allow stops for school escort half-tour -- inbound,"(school_esc_inbound.isin(['ride_share', 'pure_escort']))",,coef_unavail,coef_unavail,coef_unavail,,coef_unavail,coef_unavail,coef_unavail,,coef_unavail,coef_unavail,coef_unavail,,coef_unavail,coef_unavail,coef_unavail diff --git a/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_work.csv b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_work.csv new file mode 100644 index 000000000..764064c83 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/stop_frequency_work.csv @@ -0,0 +1,47 @@ +Label,Description,Expression,0out_0in,0out_1in,0out_2in,0out_3in,1out_0in,1out_1in,1out_2in,1out_3in,2out_0in,2out_1in,2out_2in,2out_3in,3out_0in,3out_1in,3out_2in,3out_3in +util_middle_to_low_income_hh,Middle to Low Income HH,(income_in_thousands>19999) & (income_in_thousands<50000),,coef_middle_to_low_income_hh,coef_middle_to_low_income_hh,coef_middle_to_low_income_hh,coef_middle_to_low_income_hh,coef_middle_to_low_income_hh,coef_middle_to_low_income_hh,coef_middle_to_low_income_hh,coef_middle_to_low_income_hh,coef_middle_to_low_income_hh,coef_middle_to_low_income_hh,coef_middle_to_low_income_hh,coef_middle_to_low_income_hh,coef_middle_to_low_income_hh,coef_middle_to_low_income_hh,coef_middle_to_low_income_hh +util_mid_to_high_income_hh,Mid to High Income HH,(income_in_thousands>=50000) & (income_in_thousands<100000),,coef_mid_to_high_income_hh,coef_mid_to_high_income_hh,coef_mid_to_high_income_hh,coef_mid_to_high_income_hh,coef_mid_to_high_income_hh,coef_mid_to_high_income_hh,coef_mid_to_high_income_hh,coef_mid_to_high_income_hh,coef_mid_to_high_income_hh,coef_mid_to_high_income_hh,coef_mid_to_high_income_hh,coef_mid_to_high_income_hh,coef_mid_to_high_income_hh,coef_mid_to_high_income_hh,coef_mid_to_high_income_hh +util_high_income_hh,High Income HH,(income_in_thousands>=100000),,coef_high_income_hh,coef_high_income_hh,coef_high_income_hh,coef_high_income_hh,coef_high_income_hh,coef_high_income_hh,coef_high_income_hh,coef_high_income_hh,coef_high_income_hh,coef_high_income_hh,coef_high_income_hh,coef_high_income_hh,coef_high_income_hh,coef_high_income_hh,coef_high_income_hh +util_number_of_hh_persons,Number of HH Persons,hhsize,,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons,coef_number_of_hh_persons +util_number_of_full_time_workers_in_hh,Number of full time workers in HH,num_full,,,,,,,,,,,,,,,, +util_number_of_students_in_hh,Number of Students in HH,num_student,,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh,coef_number_of_students_in_hh +util_num_kids_between_0_and_4_including_years_old,Num Kids between 0 and 4 (including) years old,num_age_0_4,,,,,,,,,,,,,,,, +util_presence_of_kids_between_0_and_4_including_years_old,Presence of Kids between 0 and 4 (including) years old,(num_age_0_4 > 0),,coef_presence_of_kids_between_0_and_4_including_years_old,coef_presence_of_kids_between_0_and_4_including_years_old,coef_presence_of_kids_between_0_and_4_including_years_old,coef_presence_of_kids_between_0_and_4_including_years_old,coef_presence_of_kids_between_0_and_4_including_years_old,coef_presence_of_kids_between_0_and_4_including_years_old,coef_presence_of_kids_between_0_and_4_including_years_old,coef_presence_of_kids_between_0_and_4_including_years_old,coef_presence_of_kids_between_0_and_4_including_years_old,coef_presence_of_kids_between_0_and_4_including_years_old,coef_presence_of_kids_between_0_and_4_including_years_old,coef_presence_of_kids_between_0_and_4_including_years_old,coef_presence_of_kids_between_0_and_4_including_years_old,coef_presence_of_kids_between_0_and_4_including_years_old,coef_presence_of_kids_between_0_and_4_including_years_old +util_num_kids_between_5_and_15_including_years_old,Num kids between 5 and 15 (including) years old,num_age_5_15,,coef_num_kids_between_5_and_15_including_years_old,coef_num_kids_between_5_and_15_including_years_old,coef_num_kids_between_5_and_15_including_years_old,coef_num_kids_between_5_and_15_including_years_old,coef_num_kids_between_5_and_15_including_years_old,coef_num_kids_between_5_and_15_including_years_old,coef_num_kids_between_5_and_15_including_years_old,coef_num_kids_between_5_and_15_including_years_old,coef_num_kids_between_5_and_15_including_years_old,coef_num_kids_between_5_and_15_including_years_old,coef_num_kids_between_5_and_15_including_years_old,coef_num_kids_between_5_and_15_including_years_old,coef_num_kids_between_5_and_15_including_years_old,coef_num_kids_between_5_and_15_including_years_old,coef_num_kids_between_5_and_15_including_years_old +util_presence_of_kids_between_5_and_15_including_years_old,Presence of kids between 5 and 15 (including) years old,(num_age_5_15 > 0),,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old,coef_presence_of_kids_between_5_and_15_including_years_old +util_number_of_adults_16_years_old_,Number of Adults (>= 16 years old),num_adult,,coef_number_of_adults_16_years_old_,coef_number_of_adults_16_years_old_,coef_number_of_adults_16_years_old_,coef_number_of_adults_16_years_old_,coef_number_of_adults_16_years_old_,coef_number_of_adults_16_years_old_,coef_number_of_adults_16_years_old_,coef_number_of_adults_16_years_old_,coef_number_of_adults_16_years_old_,coef_number_of_adults_16_years_old_,coef_number_of_adults_16_years_old_,coef_number_of_adults_16_years_old_,coef_number_of_adults_16_years_old_,coef_number_of_adults_16_years_old_,coef_number_of_adults_16_years_old_ +util_dummy_for_single_parent_household,Dummy for single parent household,(num_adult == 1) & (num_age_0_4 + num_age_5_15 > 0),,,,,,,,,,,,,,,, +util_number_of_cars_number_of_workers,Number of Cars > Number of Workers,more_cars_than_workers,,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers,coef_number_of_cars_number_of_workers +util_number_of_vehicles,Number of Vehicles,auto_ownership,,,,,,,,,,,,,,,, +util_dummy_for_female,Dummy for female,female,,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female,coef_dummy_for_female +util_dummy_for_all_stops_made_by_transit,Dummy for all stops made by transit,tour_mode_is_transit,,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit,coef_dummy_for_all_stops_made_by_transit +util_dummy_for_walking_to_all_stops,Dummy for walking to all stops,tour_mode_is_non_motorized,,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops,coef_dummy_for_walking_to_all_stops +util_number_of_work_tours_undertaken_by_the_person,Number of work tours undertaken by the person,num_work_tours,,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person,coef_number_of_work_tours_undertaken_by_the_person +util_number_of_university_tours_tours_undertaken_by_the_person,Number of university tours tours undertaken by the person,num_univ_tours,,coef_number_of_university_tours_tours_undertaken_by_the_person,coef_number_of_university_tours_tours_undertaken_by_the_person,coef_number_of_university_tours_tours_undertaken_by_the_person,coef_number_of_university_tours_tours_undertaken_by_the_person,coef_number_of_university_tours_tours_undertaken_by_the_person,coef_number_of_university_tours_tours_undertaken_by_the_person,coef_number_of_university_tours_tours_undertaken_by_the_person,coef_number_of_university_tours_tours_undertaken_by_the_person,coef_number_of_university_tours_tours_undertaken_by_the_person,coef_number_of_university_tours_tours_undertaken_by_the_person,coef_number_of_university_tours_tours_undertaken_by_the_person,coef_number_of_university_tours_tours_undertaken_by_the_person,coef_number_of_university_tours_tours_undertaken_by_the_person,coef_number_of_university_tours_tours_undertaken_by_the_person,coef_number_of_university_tours_tours_undertaken_by_the_person +util_number_of_school_tours_tours_undertaken_by_the_person,Number of school tours tours undertaken by the person,num_school_tours,,coef_number_of_school_tours_tours_undertaken_by_the_person,coef_number_of_school_tours_tours_undertaken_by_the_person,coef_number_of_school_tours_tours_undertaken_by_the_person,coef_number_of_school_tours_tours_undertaken_by_the_person,coef_number_of_school_tours_tours_undertaken_by_the_person,coef_number_of_school_tours_tours_undertaken_by_the_person,coef_number_of_school_tours_tours_undertaken_by_the_person,coef_number_of_school_tours_tours_undertaken_by_the_person,coef_number_of_school_tours_tours_undertaken_by_the_person,coef_number_of_school_tours_tours_undertaken_by_the_person,coef_number_of_school_tours_tours_undertaken_by_the_person,coef_number_of_school_tours_tours_undertaken_by_the_person,coef_number_of_school_tours_tours_undertaken_by_the_person,coef_number_of_school_tours_tours_undertaken_by_the_person,coef_number_of_school_tours_tours_undertaken_by_the_person +util_number_of_escort_tours_tours_undertaken_by_the_person,Number of escort tours tours undertaken by the person,num_escort_tours,,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person,coef_number_of_escort_tours_tours_undertaken_by_the_person +util_number_of_shop_tours_undertaken_by_the_person,Number of shop tours undertaken by the person,num_shop_tours,,,,,,,,,,,,,,,, +util_number_of_maintenace_tours_tours_undertaken_by_the_person,Number of maintenace tours tours undertaken by the person,num_maint_tours,,,,,,,,,,,,,,,, +util_number_of_eating_tours_tours_undertaken_by_the_person,Number of eating tours tours undertaken by the person,num_eatout_tours,,,,,,,,,,,,,,,, +util_number_of_visit_tours_tours_undertaken_by_the_person,Number of visit tours tours undertaken by the person,num_social_tours,,,,,,,,,,,,,,,, +util_number_of_shop_tours_undertaken_by_the_houshold,Number of shop tours undertaken by the houshold,num_hh_shop_tours,,coef_number_of_shop_tours_undertaken_by_the_houshold,coef_number_of_shop_tours_undertaken_by_the_houshold,coef_number_of_shop_tours_undertaken_by_the_houshold,coef_number_of_shop_tours_undertaken_by_the_houshold,coef_number_of_shop_tours_undertaken_by_the_houshold,coef_number_of_shop_tours_undertaken_by_the_houshold,coef_number_of_shop_tours_undertaken_by_the_houshold,coef_number_of_shop_tours_undertaken_by_the_houshold,coef_number_of_shop_tours_undertaken_by_the_houshold,coef_number_of_shop_tours_undertaken_by_the_houshold,coef_number_of_shop_tours_undertaken_by_the_houshold,coef_number_of_shop_tours_undertaken_by_the_houshold,coef_number_of_shop_tours_undertaken_by_the_houshold,coef_number_of_shop_tours_undertaken_by_the_houshold,coef_number_of_shop_tours_undertaken_by_the_houshold +util_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,AM Peak departure between 6AM and 7 AM (including) Interacted with outbound tours,(start>5) & (start<8),,coef_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,coef_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,coef_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,coef_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,coef_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,coef_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,coef_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,coef_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,coef_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,coef_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,coef_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,coef_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,coef_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,coef_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours,coef_am_peak_departure_between_6am_and_7_am_including_interacted_with_outbound_tours +util_arrival_later_than_17_00_,Arrival later than 17:00.,(end > 16),,,,,,,,,,,,,,,, +util_evening_arrival_19_00_interacted_with_return_tours,Evening Arrival (>=19:00) Interacted with return tours,(end > 18),,coef_evening_arrival_19_00_interacted_with_return_tours,coef_evening_arrival_19_00_interacted_with_return_tours,coef_evening_arrival_19_00_interacted_with_return_tours,coef_evening_arrival_19_00_interacted_with_return_tours,coef_evening_arrival_19_00_interacted_with_return_tours,coef_evening_arrival_19_00_interacted_with_return_tours,coef_evening_arrival_19_00_interacted_with_return_tours,coef_evening_arrival_19_00_interacted_with_return_tours,coef_evening_arrival_19_00_interacted_with_return_tours,coef_evening_arrival_19_00_interacted_with_return_tours,coef_evening_arrival_19_00_interacted_with_return_tours,coef_evening_arrival_19_00_interacted_with_return_tours,coef_evening_arrival_19_00_interacted_with_return_tours,coef_evening_arrival_19_00_interacted_with_return_tours,coef_evening_arrival_19_00_interacted_with_return_tours +util_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,Dummy for the duration of the tour being equal or greater than or equal to 11 hours,(duration > 10),,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours,coef_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_11_hours +util_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_9_hours_,Dummy for the duration of the tour being equal or greater than or equal to 9 hours ,(duration > 8),,,,,,,,,,,,,,,, +util_dummy_for_the_duration_of_the_tour_being_equal_or_greater_than_or_equal_to_3_hours_,Dummy for the duration of the tour being equal or greater than or equal to 3 hours ,(duration > 2),,,,,,,,,,,,,,,, +util_hh_accesibility_for_outbound_tours_interaction,HH accesibility for outbound tours. Interaction,hhacc,,,,,,,,,,,,,,,, +util_hh_accesibility_for_inbound_tours_interaction,HH accesibility for inbound tours. Interaction,hhacc,,,,,,,,,,,,,,,, +util_primary_destination_accessibility_for_outbound_tours_interaction,Primary Destination Accessibility for outbound tours. Interaction,pracc,,,,,,,,,,,,,,,, +util_primary_destination_accessibility_for_return_tours_interaction,Primary Destination Accessibility for return tours. Interaction,pracc,,,,,,,,,,,,,,,, +util_dummy_for_distance_less_than_20_miles,dummy for distance less than 20 Miles,(distance_in_miles < 20),,coef_dummy_for_distance_less_than_20_miles,coef_dummy_for_distance_less_than_20_miles,coef_dummy_for_distance_less_than_20_miles,coef_dummy_for_distance_less_than_20_miles,coef_dummy_for_distance_less_than_20_miles,coef_dummy_for_distance_less_than_20_miles,coef_dummy_for_distance_less_than_20_miles,coef_dummy_for_distance_less_than_20_miles,coef_dummy_for_distance_less_than_20_miles,coef_dummy_for_distance_less_than_20_miles,coef_dummy_for_distance_less_than_20_miles,coef_dummy_for_distance_less_than_20_miles,coef_dummy_for_distance_less_than_20_miles,coef_dummy_for_distance_less_than_20_miles,coef_dummy_for_distance_less_than_20_miles +util_dummy_for_distance_in_miles,dummy for distance in miles,distance_in_miles,,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles,coef_dummy_for_distance_in_miles +util_no_stops_if_tour_mode_is_drivetransit,No stops if tour mode is driveTransit,tour_mode_is_drive_transit,,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit,coef_no_stops_if_tour_mode_is_drivetransit +util_alternative_specific_constant_for_outbound_stops,Alternative specific constant for outbound stops,1,,,,,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_1out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_2out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in,coef_alternative_specific_constant_for_outbound_stops_3out_0in +util_alternative_specific_constant_for_return_stops,Alternative specific constant for return stops,1,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in,,coef_alternative_specific_constant_for_return_stops_0out_1in,coef_alternative_specific_constant_for_return_stops_0out_2in,coef_alternative_specific_constant_for_return_stops_0out_3in +util_alternative_specific_constant_for_the_total_number_of_stops,Alternative specific constant for the total number of stops,1,,,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_0out_2in,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in,coef_alternative_specific_constant_for_the_total_number_of_stops_2out_3in +util_number_of_subtours_in_the_tour,Number of subtours in the tour,num_atwork_subtours,,coef_number_of_subtours_in_the_tour,coef_number_of_subtours_in_the_tour,coef_number_of_subtours_in_the_tour,coef_number_of_subtours_in_the_tour,coef_number_of_subtours_in_the_tour,coef_number_of_subtours_in_the_tour,coef_number_of_subtours_in_the_tour,coef_number_of_subtours_in_the_tour,coef_number_of_subtours_in_the_tour,coef_number_of_subtours_in_the_tour,coef_number_of_subtours_in_the_tour,coef_number_of_subtours_in_the_tour,coef_number_of_subtours_in_the_tour,coef_number_of_subtours_in_the_tour,coef_number_of_subtours_in_the_tour +# No stops for half tour that includes school escorting,,,,,,,,,,,,,,,,,, +util_no_stops_to_school_escorting,Do not allow stops for school escort half-tour -- outbound,"(school_esc_outbound.isin(['ride_share', 'pure_escort']))",,,,,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail,coef_unavail +util_no_stops_from_school_escorting,Do not allow stops for school escort half-tour -- inbound,"(school_esc_inbound.isin(['ride_share', 'pure_escort']))",,coef_unavail,coef_unavail,coef_unavail,,coef_unavail,coef_unavail,coef_unavail,,coef_unavail,coef_unavail,coef_unavail,,coef_unavail,coef_unavail,coef_unavail diff --git a/activitysim/examples/prototype_mtc_extended/configs/tour_mode_choice.csv b/activitysim/examples/prototype_mtc_extended/configs/tour_mode_choice.csv index 2ba4c6d0d..56e920ac7 100644 --- a/activitysim/examples/prototype_mtc_extended/configs/tour_mode_choice.csv +++ b/activitysim/examples/prototype_mtc_extended/configs/tour_mode_choice.csv @@ -342,3 +342,6 @@ util_Walk_not_available_for_long_distances,Walk not available for long distances util_Bike_not_available_for_long_distances,Bike not available for long distances,@od_skims.max('DISTBIKE') > 8,,,,,,,,-999,,,,,,,,,,,,, util_Drive_alone_not_available_for_escort_tours,Drive alone not available for escort tours,is_escort,-999,-999,,,,,,,,,,,,,,,,,,, #, max(c_densityIndexOrigin*originDensityIndex,originDensityIndexMax),,,,,,,,,1,1,1,1,1,1,1,,,,,, +#, School Escorting eligibility,,,,,,,,,,,,,,,,,,,,,, +util_one_or_more_school_escort,No SOV if on school escort tour,"@(df.get('num_escortees', 0) >= 1)",-999,-999,,,,,,,,,,,,,,,,,,, +util_two_or_more_school_escort,Can't take HOV2 if taking two children and yourself,"@(df.get('num_escortees', 0) >= 2)",,,-999,-999,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/activitysim/examples/prototype_mtc_extended/configs/tour_scheduling_nonmandatory.csv b/activitysim/examples/prototype_mtc_extended/configs/tour_scheduling_nonmandatory.csv new file mode 100644 index 000000000..b1d200576 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/tour_scheduling_nonmandatory.csv @@ -0,0 +1,100 @@ +Label,Description,Expression,Coefficient +util_subsequent_tour_must_start_after_previous_tour_for_this_purpose_ends,Subsequent tour must start after previous tour for this purpose ends,(start < end_previous) & (tour_type_num > 1),coef_subsequent_tour_must_start_after_previous_tour_for_this_purpose_ends +util_free_flow_round_trip_auto_time_shift_effects_duration,Free-flow round trip auto time shift effects - duration,roundtrip_auto_time_to_work * duration,coef_free_flow_round_trip_auto_time_shift_effects_duration +util_shopping_tour_departure_shift_effects,Shopping tour - departure shift effects,(tour_type == 'shopping') * start,coef_shopping_tour_departure_shift_effects +util_shopping_tour_duration_shift_effects,Shopping tour - duration shift effects,(tour_type == 'shopping') * duration,coef_shopping_tour_duration_shift_effects +util_maintenance_tour_departure_shift_effects,Maintenance tour - departure shift effects,(tour_type == 'othmaint') * start,coef_maintenance_tour_departure_shift_effects +util_maintenance_tour_duration_shift_effects,Maintenance tour - departure shift effects,(tour_type == 'othmaint') * duration,coef_maintenance_tour_duration_shift_effects +util_visit_tour_departure_shift_effects_start,Visit tour - departure shift effects,(tour_type == 'social') * start,coef_visit_tour_departure_shift_effects +util_visit_tour_duration_shift_effects_duration,Visit tour - departure shift effects,(tour_type == 'social') * duration,coef_visit_tour_duration_shift_effects +util_eat_out_tour_departure_shift_effects,Eat Out tour - departure shift effects,(tour_type == 'eatout') * start,coef_eat_out_tour_departure_shift_effects +util_school_child_age_16_plus_departure_shift_effects,School child age 16+ - departure shift effects,(ptype == 6) * start,coef_school_child_age_16_plus_departure_shift_effects +util_school_child_age_16_plus_duration_shift_effects,School child age 16+ - duration shift effects,(ptype == 6) * duration,coef_school_child_age_16_plus_duration_shift_effects +util_school_child_age_under_16_departure_shift_effects,School child age under 16 - departure shift effects,(ptype == 7) * start,coef_school_child_age_under_16_departure_shift_effects +util_school_child_age_under_16_duration_shift_effects,School child age under 16 - duration shift effects,(ptype == 7) * duration,coef_school_child_age_under_16_duration_shift_effects +util_destination_in_cbd_duration_shift_effects,Destination in CBD - duration shift effects,destination_in_cbd * duration,coef_destination_in_cbd_duration_shift_effects +util_number_of_mandatory_tours_departure_shift_effects,Number of mandatory tours - departure shift effects,num_mand * start,coef_number_of_mandatory_tours_departure_shift_effects +util_number_of_joint_tours_departure_shift_effects,Number of joint tours - departure shift effects,num_person_joint_tours * start,coef_number_of_joint_tours_departure_shift_effects +util_number_of_escort_tours_departure_shift_effects,Number of escort tours - departure shift effects,num_escort_tours * start,coef_number_of_escort_tours_departure_shift_effects +util_number_of_individual_non_mandatory_tours_excluding_escort_departure_shift_effects,Number of idividual non-mandatory tours (excluding escort) - departure shift effects,num_non_escort_tours * start,coef_number_of_individual_non_mandatory_tours_excluding_escort_departure_shift_effects +util_first_of_2_plus_tours_for_same_purpose_departure_shift_effect,First of 2+ tours for same purpose - departure shift effect,((tour_type_count>1) & (tour_type_num == 1)) * start,coef_first_of_2_plus_tours_for_same_purpose_departure_shift_effect +util_subsequent_of_2_plus_tours_for_same_purpose_duration_shift_effect,subsequent of 2+ tours for same purpose - duration shift effect,(tour_type_num > 1) * duration,coef_subsequent_of_2_plus_tours_for_same_purpose_duration_shift_effect +util_maintenance_tour_depart_before_7,Maintenance tour - depart before 7,(tour_type == 'othmaint') & (start < 7),coef_maintenance_tour_depart_before_7 +util_shopping_tour_depart_before_8,Shopping tour - depart before 8,(tour_type == 'shopping') & (start < 8),coef_shopping_tour_depart_before_8 +util_shopping_tour_arrive_after_22,Shopping tour - arrive after 22,(tour_type == 'shopping') & (end > 22),coef_shopping_tour_arrive_after_22 +util_school_child_under_16_arrive_after_22,School child under 16 - arrive after 22,(ptype == 7) & (end > 22),coef_school_child_under_16_arrive_after_22 +util_university_student_arrive_after_22,University student - arrive after 22,(ptype == 3) & (end > 22),coef_university_student_arrive_after_22 +util_shopping_tour_duration_lt_2_hours,Shopping tour - duration < 2 hours,(tour_type == 'shopping') & (duration < 2),coef_shopping_tour_duration_lt_2_hours +util_discretionary_tour_duration_lt_2_hours,Discretionary tour - duration < 2 hours,(tour_type == 'othdiscr') & (duration < 2),coef_discretionary_tour_duration_lt_2_hours +util_adult_with_children_in_hh_arrive_19_21,Adult with children in HH - arrive 19 - 21,adult & (num_children > 0) & ( end > 18 ) & ( end < 22 ),coef_adult_with_children_in_hh_arrive_19_21 +#,,, +#,Mode Choice Logsum,mode_choice_logsum,#mode_choice_logsum +#,,,# +util_dummy_adjacent_before,,"_adjacent_window_before@tt.adjacent_window_before(df.person_id, df.start)",coef_dummy +util_dummy_adjacent_after,,"_adjacent_window_after@tt.adjacent_window_after(df.person_id, df.end)",coef_dummy +util_some_previously_scheduled_tour_ends_in_this_departure_hour,Some previously-scheduled tour ends in this departure hour,"@tt.previous_tour_ends(df.person_id, df.start)",coef_some_previously_scheduled_tour_ends_in_this_departure_hour +util_some_previously_scheduled_tour_begins_in_this_arrival_hour,Some previously-scheduled tour begins in this arrival hour,"@tt.previous_tour_begins(df.person_id, df.end)",coef_some_previously_scheduled_tour_begins_in_this_arrival_hour +util_adjacent_window_exists_before_this_departure_hour_first_tour_interaction,Adjacent window exists before this departure hour - first tour interaction,"@(df.tour_type_count>1) & (df.tour_type_num == 1) & _adjacent_window_before",coef_adjacent_window_exists_before_this_departure_hour_first_tour_interaction +util_adjacent_window_exists_after_this_arrival_hour_first_tour_interaction,Adjacent window exists after this arrival hour - first tour interaction,"@(df.tour_type_count>1) & (df.tour_type_num == 1) & _adjacent_window_after",coef_adjacent_window_exists_after_this_arrival_hour_first_tour_interaction +util_adjacent_window_exists_before_this_departure_hour_second_plus_tour_interaction,Adjacent window exists before this departure hour - second+ tour interaction,"@(df.tour_type_num > 1) & _adjacent_window_before",coef_adjacent_window_exists_before_this_departure_hour_second_plus_tour_interaction +util_adjacent_window_exists_after_this_arrival_hour_second_plus_tour_interaction,Adjacent window exists after this arrival hour - second+ tour interaction,"@(df.tour_type_num > 1) & _adjacent_window_after",coef_adjacent_window_exists_after_this_arrival_hour_second_plus_tour_interaction +util_ratio_of_individual_non_mandatory_tours_to_be_scheduled_to_number_of_unscheduled_hours,Remaining individual non-mandatory tours to be scheduled / number of unscheduled hours,"@((1.0 + df.tour_count - df.tour_num)) / tt.remaining_periods_available(df.person_id, df.start, df.end)",coef_ratio_of_individual_non_mandatory_tours_to_be_scheduled_to_number_of_unscheduled_hours +#,#,,# +util_departure_constants_early,Departure Constants -- Early (up to 5),(tour_type != 'escort') & (start < 6),coef_departure_constants_early +util_departure_constants_am_peak_1,Departure Constants -- AM peak 1 (6),(tour_type != 'escort') & (start == 6),coef_departure_constants_am_peak_1 +util_departure_constants_am_peak_2,Departure Constants -- AM peak 2 (7),(tour_type != 'escort') & (start == 7),coef_departure_constants_am_peak_2 +util_departure_constants_am_peak_3,Departure Constants -- AM peak 3 (8),(tour_type != 'escort') & (start == 8),coef_departure_constants_am_peak_3 +util_departure_constants_am_peak_4,Departure Constants -- AM peak 4 (9),(tour_type != 'escort') & (start == 9),coef_departure_constants_am_peak_4 +util_departure_constants_midday_1,Departure Constants -- Midday 1 (10 to 12),(tour_type != 'escort') & (start > 9) & (start < 13),coef_departure_constants_midday_1 +util_departure_constants_midday_2,Departure Constants -- Midday 2 (13 to 15),(tour_type != 'escort') & (start > 12) & (start < 16),coef_departure_constants_midday_2 +util_departure_constants_pm_peak,Departure Constants -- PM peak (16 to 18),(tour_type != 'escort') & (start > 15) & (start < 19),coef_departure_constants_pm_peak +util_departure_constants_evening,Departure Constants -- Evening (19 to 21),(tour_type != 'escort') & (start > 18) & (start < 22),coef_departure_constants_evening +util_departure_constants_late,Departure Constants -- Late (22 and later),(tour_type != 'escort') & (start > 21),coef_departure_constants_late +util_arrival_constants_early,Arrival Constants -- Early (up to 6),(tour_type != 'escort') & (end < 7),coef_arrival_constants_early +util_arrival_constants_am_peak,Arrival Constants -- AM peak (7 to 9),(tour_type != 'escort') & (end > 6) & (end < 10),coef_arrival_constants_am_peak +util_arrival_constants_midday_1,Arrival Constants -- Midday 1 (10 to 12),(tour_type != 'escort') & (end > 9) & (end < 13),coef_arrival_constants_midday_1 +util_arrival_constants_midday_2,Arrival Constants -- Midday 2 (13 to 14),(tour_type != 'escort') & (end > 12) & (end < 15),coef_arrival_constants_midday_2 +util_arrival_constants_pm_peak_1,Arrival Constants -- PM peak 1 (15),(tour_type != 'escort') & (end == 15),coef_arrival_constants_pm_peak_1 +util_arrival_constants_pm_peak_2,Arrival Constants -- PM peak 2 (16),(tour_type != 'escort') & (end == 16),coef_arrival_constants_pm_peak_2 +util_arrival_constants_pm_peak_3,Arrival Constants -- PM peak 3 (17),(tour_type != 'escort') & (end == 17),coef_arrival_constants_pm_peak_3 +util_arrival_constants_pm_peak_4,Arrival Constants -- PM peak 4 (18),(tour_type != 'escort') & (end == 18),coef_arrival_constants_pm_peak_4 +util_arrival_constants_evening,Arrival Constants -- Evening (19 to 21),(tour_type != 'escort') & (end > 18) & (end < 22),coef_arrival_constants_evening +util_arrival_constants_late,Arrival Constants -- Late (22 and later),(tour_type != 'escort') & (end > 21),coef_arrival_constants_late +util_duration_constants_0_to_1_hours,Duration Constants -- 0 to 1 hours,(tour_type != 'escort') & (duration < 2),coef_duration_constants_0_to_1_hours +util_duration_constants_2_to_3_hours,Duration Constants -- 2 to 3 hours,(tour_type != 'escort') & (duration > 1) & (duration < 4),coef_duration_constants_2_to_3_hours +util_duration_constants_4_to_5_hours,Duration Constants -- 4 to 5 hours,(tour_type != 'escort') & (duration > 3) & (duration < 6),coef_duration_constants_4_to_5_hours +util_duration_constants_6_to_7_hours,Duration Constants -- 6 to 7 hours,(tour_type != 'escort') & (duration > 5) & (duration < 8),coef_duration_constants_6_to_7_hours +util_duration_constants_8_to_10_hours,Duration Constants -- 8 to 10 hours,(tour_type != 'escort') & (duration > 7) & (duration < 11),coef_duration_constants_8_to_10_hours +util_duration_constants_11_to_13_hours,Duration Constants -- 11 to 13 hours,(tour_type != 'escort') & (duration > 10) & (duration < 14),coef_duration_constants_11_to_13_hours +util_duration_constants_14_to_18_hours,Duration Constants -- 14 to 18 hours,(tour_type != 'escort') & (duration > 13) & (duration < 19),coef_duration_constants_14_to_18_hours +util_escort_tour_departure_constants_early,Escort Tour Departure Constants -- Early (up to 5),(tour_type == 'escort') & (start < 6),coef_escort_tour_departure_constants_early +util_escort_tour_departure_constants_am_peak_1,Escort Tour Departure Constants -- AM peak 1 (6),(tour_type == 'escort') & (start == 6),coef_escort_tour_departure_constants_am_peak_1 +util_escort_tour_departure_constants_am_peak_2,Escort Tour Departure Constants -- AM peak 2 (7),(tour_type == 'escort') & (start == 7),coef_escort_tour_departure_constants_am_peak_2 +util_escort_tour_departure_constants_am_peak_3,Escort Tour Departure Constants -- AM peak 3 (8),(tour_type == 'escort') & (start == 8),coef_escort_tour_departure_constants_am_peak_3 +util_escort_tour_departure_constants_am_peak_4,Escort Tour Departure Constants -- AM peak 4 (9),(tour_type == 'escort') & (start == 9),coef_escort_tour_departure_constants_am_peak_4 +util_escort_tour_departure_constants_midday_1,Escort Tour Departure Constants -- Midday 1 (10 to 12),(tour_type == 'escort') & (start > 9) & (start < 13),coef_escort_tour_departure_constants_midday_1 +util_escort_tour_departure_constants_midday_2,Escort Tour Departure Constants -- Midday 2 (13 to 15),(tour_type == 'escort') & (start > 12) & (start < 16),coef_escort_tour_departure_constants_midday_2 +util_escort_tour_departure_constants_pm_peak,Escort Tour Departure Constants -- PM peak (16 to 18),(tour_type == 'escort') & (start > 15) & (start < 19),coef_escort_tour_departure_constants_pm_peak +util_escort_tour_departure_constants_evening,Escort Tour Departure Constants -- Evening (19 to 21),(tour_type == 'escort') & (start > 18) & (start < 22),coef_escort_tour_departure_constants_evening +util_escort_tour_departure_constants_late,Escort Tour Departure Constants -- Late (22 and later),(tour_type == 'escort') & (start > 21),coef_escort_tour_departure_constants_late +util_escort_tour_arrival_constants_early,Escort Tour Arrival Constants -- Early (up to 6),(tour_type == 'escort') & (end < 7),coef_escort_tour_arrival_constants_early +util_escort_tour_arrival_constants_am_peak,Escort Tour Arrival Constants -- AM peak (7 to 9),(tour_type == 'escort') & (end > 6) & (end < 10),coef_escort_tour_arrival_constants_am_peak +util_escort_tour_arrival_constants_midday_1,Escort Tour Arrival Constants -- Midday 1 (10 to 12),(tour_type == 'escort') & (end > 9) & (end < 13),coef_escort_tour_arrival_constants_midday_1 +util_escort_tour_arrival_constants_midday_2,Escort Tour Arrival Constants -- Midday 2 (13 to 14),(tour_type == 'escort') & (end > 12) & (end < 15),coef_escort_tour_arrival_constants_midday_2 +util_escort_tour_arrival_constants_pm_peak_1,Escort Tour Arrival Constants -- PM peak 1 (15),(tour_type == 'escort') & (end == 15),coef_escort_tour_arrival_constants_pm_peak_1 +util_escort_tour_arrival_constants_pm_peak_2,Escort Tour Arrival Constants -- PM peak 2 (16),(tour_type == 'escort') & (end == 16),coef_escort_tour_arrival_constants_pm_peak_2 +util_escort_tour_arrival_constants_pm_peak_3,Escort Tour Arrival Constants -- PM peak 3 (17),(tour_type == 'escort') & (end == 17),coef_escort_tour_arrival_constants_pm_peak_3 +util_escort_tour_arrival_constants_pm_peak_4,Escort Tour Arrival Constants -- PM peak 4 (18),(tour_type == 'escort') & (end == 18),coef_escort_tour_arrival_constants_pm_peak_4 +util_escort_tour_arrival_constants_evening,Escort Tour Arrival Constants -- Evening (19 to 21),(tour_type == 'escort') & (end > 18) & (end < 22),coef_escort_tour_arrival_constants_evening +util_escort_tour_arrival_constants_late,Escort Tour Arrival Constants -- Late (22 and later),(tour_type == 'escort') & (end > 21),coef_escort_tour_arrival_constants_late +util_escort_tour_duration_constants_0_to_1_hours,Escort Tour Duration Constants -- 0 to 1 hours,(tour_type == 'escort') & (duration < 2),coef_escort_tour_duration_constants_0_to_1_hours +util_escort_tour_duration_constants_2_to_3_hours,Escort Tour Duration Constants -- 2 to 3 hours,(tour_type == 'escort') & (duration > 1) & (duration < 4),coef_escort_tour_duration_constants_2_to_3_hours +util_escort_tour_duration_constants_4_to_5_hours,Escort Tour Duration Constants -- 4 to 5 hours,(tour_type == 'escort') & (duration > 3) & (duration < 6),coef_escort_tour_duration_constants_4_to_5_hours +util_escort_tour_duration_constants_6_to_7_hours,Escort Tour Duration Constants -- 6 to 7 hours,(tour_type == 'escort') & (duration > 5) & (duration < 8),coef_escort_tour_duration_constants_6_to_7_hours +util_escort_tour_duration_constants_8_to_10_hours,Escort Tour Duration Constants -- 8 to 10 hours,(tour_type == 'escort') & (duration > 7) & (duration < 11),coef_escort_tour_duration_constants_8_to_10_hours +util_escort_tour_duration_constants_11_to_13_hours,Escort Tour Duration Constants -- 11 to 13 hours,(tour_type == 'escort') & (duration > 10) & (duration < 14),coef_escort_tour_duration_constants_11_to_13_hours +util_escort_tour_duration_constants_14_to_18_hours,Escort Tour Duration Constants -- 14 to 18 hours,(tour_type == 'escort') & (duration > 13) & (duration < 19),coef_escort_tour_duration_constants_14_to_18_hours +# Including terms for school escorting,,, +util_outbound_school_escort_tour_start,Outbound school escort tours must match the start time of the escort tour,is_outbound_school_escort_tour & (start != school_escort_tour_start),coef_unavailable +util_outbound_school_escort_tour_next_start,Outbound school escort tours must end before next escort tour start,is_outbound_school_escort_tour & (end > school_escort_tour_next_start) & (school_escort_tour_next_start > 0),coef_unavailable +util_inbound_school_escort_tour_end,Inbound school escort tours must match the end time of the escort tour,is_inbound_school_escort_tour & (end != school_escort_tour_end),coef_unavailable \ No newline at end of file diff --git a/activitysim/examples/prototype_mtc_extended/configs/tour_scheduling_nonmandatory_coefficients.csv b/activitysim/examples/prototype_mtc_extended/configs/tour_scheduling_nonmandatory_coefficients.csv new file mode 100644 index 000000000..bbb01bb05 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/tour_scheduling_nonmandatory_coefficients.csv @@ -0,0 +1,97 @@ +coefficient_name,value,constrain +coef_dummy,1,T +coef_subsequent_tour_must_start_after_previous_tour_for_this_purpose_ends,-999,T +coef_free_flow_round_trip_auto_time_shift_effects_duration,0.004741,F +coef_shopping_tour_departure_shift_effects,-0.06015,F +coef_shopping_tour_duration_shift_effects,-0.1208,F +coef_maintenance_tour_departure_shift_effects,-0.1489,F +coef_maintenance_tour_duration_shift_effects,-0.08372,F +coef_visit_tour_departure_shift_effects,0.09688,F +coef_visit_tour_duration_shift_effects,0.1638,F +coef_eat_out_tour_departure_shift_effects,0.07549,F +coef_school_child_age_16_plus_departure_shift_effects,0.07266,F +coef_school_child_age_16_plus_duration_shift_effects,0.2095,F +coef_school_child_age_under_16_departure_shift_effects,0.04657,F +coef_school_child_age_under_16_duration_shift_effects,0.3272,F +coef_destination_in_cbd_duration_shift_effects,0.1067,F +coef_number_of_mandatory_tours_departure_shift_effects,0.04673,F +coef_number_of_joint_tours_departure_shift_effects,0.05208,F +coef_number_of_escort_tours_departure_shift_effects,0.02013,F +coef_number_of_individual_non_mandatory_tours_excluding_escort_departure_shift_effects,0.03896,F +coef_first_of_2_plus_tours_for_same_purpose_departure_shift_effect,-0.2364,F +coef_subsequent_of_2_plus_tours_for_same_purpose_duration_shift_effect,-0.1731,F +coef_maintenance_tour_depart_before_7,-0.8826,F +coef_shopping_tour_depart_before_8,-1.037,F +coef_shopping_tour_arrive_after_22,-0.6027,F +coef_school_child_under_16_arrive_after_22,-1.18,F +coef_university_student_arrive_after_22,0.5466,F +coef_shopping_tour_duration_lt_2_hours,0.5168,F +coef_discretionary_tour_duration_lt_2_hours,-0.6974,F +coef_adult_with_children_in_hh_arrive_19_21,0.336,F +#,, +#mode_choice_logsum,, +#,, +coef_some_previously_scheduled_tour_ends_in_this_departure_hour,-0.4562,F +coef_some_previously_scheduled_tour_begins_in_this_arrival_hour,-0.3992,F +coef_adjacent_window_exists_before_this_departure_hour_first_tour_interaction,0.008442,F +coef_adjacent_window_exists_after_this_arrival_hour_first_tour_interaction,-0.0257,F +coef_adjacent_window_exists_before_this_departure_hour_second_plus_tour_interaction,-0.0593,F +coef_adjacent_window_exists_after_this_arrival_hour_second_plus_tour_interaction,-0.02734,F +coef_ratio_of_individual_non_mandatory_tours_to_be_scheduled_to_number_of_unscheduled_hours,-13.63,F +#,,F +coef_departure_constants_early,-1.740135661,F +coef_departure_constants_am_peak_1,-0.654163573,F +coef_departure_constants_am_peak_2,0.554282571,F +coef_departure_constants_am_peak_3,1.050561087,F +coef_departure_constants_am_peak_4,0.971568228,F +coef_departure_constants_midday_1,0.881991986,F +coef_departure_constants_midday_2,0.411103634,F +coef_departure_constants_pm_peak,0,T +coef_departure_constants_evening,-1.856475096,F +coef_departure_constants_late,-8.228880141,F +coef_arrival_constants_early,-0.051990748,F +coef_arrival_constants_am_peak,-1.814822602,F +coef_arrival_constants_midday_1,0.000371501,F +coef_arrival_constants_midday_2,0.532116031,F +coef_arrival_constants_pm_peak_1,0.628481567,F +coef_arrival_constants_pm_peak_2,0.650521416,F +coef_arrival_constants_pm_peak_3,0.402894406,F +coef_arrival_constants_pm_peak_4,0.154213293,F +coef_arrival_constants_evening,0,T +coef_arrival_constants_late,-0.866671315,F +coef_duration_constants_0_to_1_hours,0,T +coef_duration_constants_2_to_3_hours,0.051385565,F +coef_duration_constants_4_to_5_hours,-0.593951321,F +coef_duration_constants_6_to_7_hours,-0.951155328,F +coef_duration_constants_8_to_10_hours,-0.828108399,F +coef_duration_constants_11_to_13_hours,-0.955635554,F +coef_duration_constants_14_to_18_hours,-1.042580879,F +coef_escort_tour_departure_constants_early,-1.740135661,F +coef_escort_tour_departure_constants_am_peak_1,-1.112357753,F +coef_escort_tour_departure_constants_am_peak_2,0.698788185,F +coef_escort_tour_departure_constants_am_peak_3,1.196268813,F +coef_escort_tour_departure_constants_am_peak_4,-0.225258221,F +coef_escort_tour_departure_constants_midday_1,0.028662017,F +coef_escort_tour_departure_constants_midday_2,0,T +coef_escort_tour_departure_constants_pm_peak,-1.180140161,F +coef_escort_tour_departure_constants_evening,-3.948732811,F +coef_escort_tour_departure_constants_late,-8.228880141,F +coef_escort_tour_arrival_constants_early,0,T +coef_escort_tour_arrival_constants_am_peak,0,T +coef_escort_tour_arrival_constants_midday_1,0,T +coef_escort_tour_arrival_constants_midday_2,0,T +coef_escort_tour_arrival_constants_pm_peak_1,0,T +coef_escort_tour_arrival_constants_pm_peak_2,0,T +coef_escort_tour_arrival_constants_pm_peak_3,0,T +coef_escort_tour_arrival_constants_pm_peak_4,0,T +coef_escort_tour_arrival_constants_evening,-0.536918728,F +coef_escort_tour_arrival_constants_late,-1.008290213,F +coef_escort_tour_duration_constants_0_to_1_hours,0,T +coef_escort_tour_duration_constants_2_to_3_hours,-2.042013897,F +coef_escort_tour_duration_constants_4_to_5_hours,-2.880293896,F +coef_escort_tour_duration_constants_6_to_7_hours,-2.973533731,F +coef_escort_tour_duration_constants_8_to_10_hours,-3.020213758,F +coef_escort_tour_duration_constants_11_to_13_hours,-2.974364976,F +coef_escort_tour_duration_constants_14_to_18_hours,-2.507447146,F +# Added for school escorting,, +coef_unavailable,-999,F \ No newline at end of file diff --git a/activitysim/examples/prototype_mtc_extended/configs/trip_mode_choice.csv b/activitysim/examples/prototype_mtc_extended/configs/trip_mode_choice.csv index 0253954db..e9318c206 100644 --- a/activitysim/examples/prototype_mtc_extended/configs/trip_mode_choice.csv +++ b/activitysim/examples/prototype_mtc_extended/configs/trip_mode_choice.csv @@ -403,3 +403,6 @@ util_Bike_not_available_for_long_distances,Bike not available for long distances util_origin_density_index,Origin density index,@origin_density_applied*(origin_density_index_multiplier*df.origin_density_index).clip(origin_density_index_max),,,,,,,coef_ivt,coef_ivt,coef_ivt,coef_ivt,coef_ivt,coef_ivt,coef_ivt,,,,,,,coef_ivt,coef_ivt util_walk_express_penalty,Walk-express penalty for intermediate stops,@walk_express_penalty * ~(df.first_trip | df.first_trip),,,,,,,,,,,coef_ivt,,,,,,,,,, util_adjust_tnc_shared,TNC shared adjustment,@adjust_tnc_shared,,,,,,,,,,,,,,,,,,,,,coef_ivt +#, School Escorting eligibility,,,,,,,,,,,,,,,,,,,,,, +util_one_or_more_school_escort,No SOV if on school escort tour,(num_escortees >= 1),-999,-999,,,,,,,,,,,,,,,,,,, +util_two_or_more_school_escort,Can't take HOV2 if taking two children and yourself,(num_escortees >= 2),,,-999,-999,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/activitysim/examples/prototype_mtc_extended/configs/trip_mode_choice_annotate_trips_preprocessor.csv b/activitysim/examples/prototype_mtc_extended/configs/trip_mode_choice_annotate_trips_preprocessor.csv index cc1f223d5..fefe54a13 100644 --- a/activitysim/examples/prototype_mtc_extended/configs/trip_mode_choice_annotate_trips_preprocessor.csv +++ b/activitysim/examples/prototype_mtc_extended/configs/trip_mode_choice_annotate_trips_preprocessor.csv @@ -91,3 +91,5 @@ dest terminal time not counted at home,_dest_terminal_time,"np.where(inbound & l #,max_dist_walk,od_skims.max('DISTWALK') #,dist_bike,od_skims['DISTBIKE'] #,dist_only,od_skims['DIST'] +# added for school escorting model,, +Number of school children in vehicle on trip,num_escortees,df.escort_participants.fillna('').apply(lambda x: len(x.split('_'))) \ No newline at end of file diff --git a/activitysim/examples/prototype_mtc_extended/configs/trip_scheduling.yaml b/activitysim/examples/prototype_mtc_extended/configs/trip_scheduling.yaml new file mode 100644 index 000000000..53b07924c --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/trip_scheduling.yaml @@ -0,0 +1,11 @@ +PROBS_SPEC: trip_scheduling_probs.csv +COEFFICIENTS: trip_scheduling_coefficients.csv + +# int to add to probs column index to get time period it represents. +# e.g. depart_alt_base = 5 means first column (column 0) represents 5 am +DEPART_ALT_BASE: 5 + +MAX_ITERATIONS: 100 + +# FAILFIX: drop_and_cleanup +FAILFIX: choose_most_initial diff --git a/activitysim/examples/prototype_mtc_extended/configs/trip_scheduling_probs.csv b/activitysim/examples/prototype_mtc_extended/configs/trip_scheduling_probs.csv new file mode 100644 index 000000000..00beef381 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/configs/trip_scheduling_probs.csv @@ -0,0 +1,1388 @@ +primary_purpose,outbound,tour_hour,trip_num,HR5,HR6,HR7,HR8,HR9,HR10,HR11,HR12,HR13,HR14,HR15,HR16,HR17,HR18,HR19,HR20,HR21,HR22,HR23 +work,TRUE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,TRUE,5,2,0.249730906,0.477180111,0.215788882,0.02257625,0.009653299,0.001272067,0.002559828,0.005345297,0.012868196,0.000858457,0,0.00130551,0,0.000861198,0,0,0,0,0 +work,TRUE,5,3,0.269166724,0.331378773,0.290398422,0.047428828,0.032211326,0.003681738,0,0.00648104,0.007547054,0.006178507,0,0.005527589,0,0,0,0,0,0,0 +work,TRUE,5,4,0.087782501,0.257488508,0.384088251,0.077346978,0.060562922,0,0,0.049138541,0,0.014538525,0,0,0,0.041701151,0.018235082,0,0.009117541,0,0 +work,TRUE,6,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,TRUE,6,2,0,0.218769369,0.568056029,0.16549898,0.028654735,0.007305391,0.002067083,0.003148838,0.000503641,0.003688829,0.002307106,0,0,0,0,0,0,0,0 +work,TRUE,6,3,0,0.130626273,0.577093506,0.214895882,0.051730954,0.003240613,0,0.004631429,0.00858571,0.005631893,0.001259632,0,0.002304109,0,0,0,0,0,0 +work,TRUE,6,4,0,0.003746877,0.546827469,0.29119719,0.043440135,0.021108582,0,0.041279538,0.022438337,0.019313618,0.003776433,0.006871821,0,0,0,0,0,0,0 +work,TRUE,7,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,TRUE,7,2,0,0,0.265300367,0.613559084,0.096014364,0.014396896,0.003048705,0.004403151,0,0.001139887,0.001411868,0.000725679,0,0,0,0,0,0,0 +work,TRUE,7,3,0,0,0.166352156,0.62367014,0.155705334,0.026659137,0.007295847,0.013673999,0.003582828,0.001111918,0.000525728,0.001422911,0,0,0,0,0,0,0 +work,TRUE,7,4,0,0,0.105022925,0.545651324,0.19699608,0.086647479,0.013272884,0.007863943,0.037841595,0.002284229,0.001876743,0,0.002542798,0,0,0,0,0,0 +work,TRUE,8,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,TRUE,8,2,0,0,0,0.456491659,0.443858962,0.071483886,0.007227768,0.011205848,0.004971546,0.003779089,0,0.000629094,0.000352148,0,0,0,0,0,0 +work,TRUE,8,3,0,0,0,0.297357445,0.518087382,0.132861058,0.006370619,0.007614307,0.009010749,0.012385163,0.002114995,0.01254835,0.001649933,0,0,0,0,0,0 +work,TRUE,8,4,0,0,0,0.219050051,0.313898882,0.316701629,0.097894922,0.024670968,0.007826425,0.014063117,0,0,0.001659846,0,0,0,0.00423416,0,0 +work,TRUE,9,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,TRUE,9,2,0,0,0,0,0.381802065,0.463610086,0.07833074,0.053350819,0.012379425,0.006984996,0.002188786,0.001353083,0,0,0,0,0,0,0 +work,TRUE,9,3,0,0,0,0,0.244359192,0.505051786,0.124730319,0.070740285,0.04380103,0.00393502,0.002381853,0,0.005000514,0,0,0,0,0,0 +work,TRUE,9,4,0,0,0,0,0.048177162,0.281924251,0.128648284,0.140849287,0.097452942,0.149279798,0.129250851,0.024417425,0,0,0,0,0,0,0 +work,TRUE,10,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,TRUE,10,2,0,0,0,0,0,0.287462748,0.478190637,0.154315841,0.0141405,0.047319629,0,0.005707897,0,0.004618797,0.008243951,0,0,0,0 +work,TRUE,10,3,0,0,0,0,0,0.224513864,0.313870996,0.279113796,0.089398426,0.044754472,0.034345645,0.014002803,0,0,0,0,0,0,0 +work,TRUE,10,4,0,0,0,0,0,0,0.181896949,0.267783358,0.317739276,0.088027455,0.086885637,0,0,0,0.057667324,0,0,0,0 +work,TRUE,11,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +work,TRUE,11,2,0,0,0,0,0,0,0.349521518,0.402347786,0.191514732,0.044397707,0.009105065,0,0.003113192,0,0,0,0,0,0 +work,TRUE,11,3,0,0,0,0,0,0,0.207587883,0.30769214,0.335712206,0.084378351,0.047431249,0.017198171,0,0,0,0,0,0,0 +work,TRUE,11,4,0,0,0,0,0,0,0,0.482525146,0.331491287,0.154741395,0,0,0.031242172,0,0,0,0,0,0 +work,TRUE,12,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +work,TRUE,12,2,0,0,0,0,0,0,0,0.228781907,0.52986365,0.185949096,0.016952622,0.0225574,0,0.015895326,0,0,0,0,0 +work,TRUE,12,3,0,0,0,0,0,0,0,0.048290452,0.527617032,0.260449945,0.038087283,0.125555288,0,0,0,0,0,0,0 +work,TRUE,12,4,0,0,0,0,0,0,0,0.055268088,0.55183696,0.308090511,0.022112333,0.026969361,0.035722748,0,0,0,0,0,0 +work,TRUE,13,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +work,TRUE,13,2,0,0,0,0,0,0,0,0,0.618115652,0.284403475,0.097480873,0,0,0,0,0,0,0,0 +work,TRUE,13,3,0,0,0,0,0,0,0,0,0.496549493,0.232797723,0.159946019,0,0.015308798,0.038007565,0.057390402,0,0,0,0 +work,TRUE,13,4,0,0,0,0,0,0,0,0,0.176762619,0,0,0,0.823237381,0,0,0,0,0,0 +work,TRUE,14,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +work,TRUE,14,2,0,0,0,0,0,0,0,0,0,0.574348416,0.354554927,0.071096656,0,0,0,0,0,0,0 +work,TRUE,14,3,0,0,0,0,0,0,0,0,0,0.502109794,0.21816867,0.279721536,0,0,0,0,0,0,0 +work,TRUE,14,4,0,0,0,0,0,0,0,0,0,0.133121347,0.633379229,0.134648916,0.049425254,0.049425254,0,0,0,0,0 +work,TRUE,15,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +work,TRUE,15,2,0,0,0,0,0,0,0,0,0,0,0.552840921,0.403380234,0.043778845,0,0,0,0,0,0 +work,TRUE,15,3,0,0,0,0,0,0,0,0,0,0,0.134176676,0.725445222,0.140378102,0,0,0,0,0,0 +work,TRUE,15,4,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +work,TRUE,16,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +work,TRUE,16,2,0,0,0,0,0,0,0,0,0,0,0,0.470117389,0.401307167,0.110787768,0.017787675,0,0,0,0 +work,TRUE,16,3,0,0,0,0,0,0,0,0,0,0,0,0.648121232,0.228392401,0.123486367,0,0,0,0,0 +work,TRUE,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +work,TRUE,17,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +work,TRUE,17,2,0,0,0,0,0,0,0,0,0,0,0,0,0.406105035,0.414979307,0.178915658,0,0,0,0 +work,TRUE,17,3,0,0,0,0,0,0,0,0,0,0,0,0,0.212373176,0.787626824,0,0,0,0,0 +work,TRUE,17,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.5,0.5,0,0,0 +work,TRUE,18,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +work,TRUE,18,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0.21625036,0.437860534,0.113269906,0.232619199,0,0 +work,TRUE,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +work,TRUE,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +work,TRUE,19,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +work,TRUE,19,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.81925165,0.07204277,0,0.10870558,0 +work,TRUE,19,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.492020395,0.507979605,0,0,0 +work,TRUE,19,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +work,TRUE,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +work,TRUE,20,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.388129509,0.611870491,0,0 +work,TRUE,20,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +work,TRUE,20,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +work,TRUE,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +work,TRUE,21,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.171581948,0.828418052,0 +work,TRUE,21,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.258374236,0.741625764,0 +work,TRUE,21,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +work,TRUE,22,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +work,TRUE,22,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +work,TRUE,22,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +work,TRUE,22,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +work,TRUE,23,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +work,TRUE,23,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +work,TRUE,23,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +work,TRUE,23,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +work,FALSE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,5,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,5,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,6,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,6,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,6,3,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,6,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,7,1,0,0.220793114,0.779206886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,7,2,0,0.425176732,0.574823268,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,7,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,7,4,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,8,1,0,0,0.107759005,0.892240995,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,8,2,0,0,0.690008913,0.309991087,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,8,3,0,0.337495318,0.662504682,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,8,4,0,0,0.569894206,0.430105794,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,9,1,0,0,0,0.314951457,0.685048543,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,9,2,0,0,0,0.079070075,0.920929925,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,9,3,0,0,0,0.226319471,0.773680529,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,9,4,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,10,1,0,0.046066203,0.007425743,0.028045042,0.233624929,0.684838083,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,10,2,0,0.126398434,0,0.0549729,0.096449389,0.722179277,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,10,3,0,0,0,0,0.36604282,0.63395718,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,10,4,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,11,1,0,0,0.017580881,0.034113366,0.04162677,0.286326641,0.620352342,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,11,2,0,0,0.02642438,0,0.033819936,0.199217971,0.740537713,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,11,3,0,0,0,0,0.005130668,0.277227788,0.717641544,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,11,4,0,0,0,0,0,0.036304716,0.963695284,0,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,12,1,0,0.002492115,0.001670698,0.012159512,0.014698251,0.029407418,0.152563565,0.787008442,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,12,2,0,0,0.006100837,0.011620455,0.013952709,0.036974376,0.310894404,0.620457219,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,12,3,0,0,0,0.009383356,0.042387756,0.006845546,0.29720543,0.644177912,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,12,4,0,0,0,0.008143494,0,0.049968848,0.124165248,0.81772241,0,0,0,0,0,0,0,0,0,0,0 +work,FALSE,13,1,0,0,0.004406789,0.016516638,0.008423145,0.030672879,0.043679722,0.31728407,0.579016757,0,0,0,0,0,0,0,0,0,0 +work,FALSE,13,2,0,0,0.003526988,0.003893522,0.007279925,0.014935643,0.080084093,0.245195123,0.645084705,0,0,0,0,0,0,0,0,0,0 +work,FALSE,13,3,0,0,0,0,0.01495651,0,0.040446175,0.214618414,0.729978901,0,0,0,0,0,0,0,0,0,0 +work,FALSE,13,4,0,0,0,0,0.01397645,0.006836511,0.025113874,0.15362871,0.800444454,0,0,0,0,0,0,0,0,0,0 +work,FALSE,14,1,0.002365799,0,0.003370061,0,0.004899447,0.008850097,0.035188808,0.07267661,0.207306035,0.665343143,0,0,0,0,0,0,0,0,0 +work,FALSE,14,2,0.007728364,0.003287077,0,0.006520962,0,0.032254466,0.052851387,0.133223369,0.229023292,0.535111082,0,0,0,0,0,0,0,0,0 +work,FALSE,14,3,0,0,0,0.003971419,0,0,0.008873008,0.119445331,0.269752545,0.597957698,0,0,0,0,0,0,0,0,0 +work,FALSE,14,4,0,0,0,0,0.056793918,0,0.011546821,0.042023265,0.23002226,0.659613737,0,0,0,0,0,0,0,0,0 +work,FALSE,15,1,0,0.005222802,0.000561863,0.003055031,0.006434507,0.007479814,0.009995919,0.013087333,0.058426024,0.310076404,0.585660301,0,0,0,0,0,0,0,0 +work,FALSE,15,2,0,0,0,0.001993619,0.008787212,0.008189747,0.015159942,0.009310176,0.054885948,0.253934613,0.647738743,0,0,0,0,0,0,0,0 +work,FALSE,15,3,0,0,0,0.001732532,0,0.00508097,0.029352724,0.030967014,0.039664292,0.202228781,0.690973688,0,0,0,0,0,0,0,0 +work,FALSE,15,4,0,0,0,0,0,0.004125776,0.011923745,0.030960101,0.061425266,0.239676364,0.651888748,0,0,0,0,0,0,0,0 +work,FALSE,16,1,0,0,0.001326173,0.005965432,0.005180374,0.004138931,0.011262579,0.01661091,0.012073334,0.03679347,0.347396478,0.559252319,0,0,0,0,0,0,0 +work,FALSE,16,2,0,0,0.001822625,0.003909533,0.002974064,0.004461131,0.032696294,0.017905122,0.043805267,0.040055335,0.31441461,0.537956019,0,0,0,0,0,0,0 +work,FALSE,16,3,0,0,0,0,0.006964674,0,0.007663971,0.011249685,0.051874804,0.083383231,0.266186632,0.572677003,0,0,0,0,0,0,0 +work,FALSE,16,4,0.002037834,0,0,0,0,0.005964919,0.002996052,0.010623137,0.018245507,0.068094063,0.195919724,0.696118764,0,0,0,0,0,0,0 +work,FALSE,17,1,0,0,0.001405366,0.004415995,0.00337412,0.003812259,0.014084324,0.008465853,0.012498337,0.015584379,0.06625893,0.34857546,0.521524978,0,0,0,0,0,0 +work,FALSE,17,2,0,0.000261415,0.003193506,0.003224601,0.01031862,0.003695936,0.005727058,0.024107723,0.01290257,0.024008033,0.090851226,0.28964028,0.532069032,0,0,0,0,0,0 +work,FALSE,17,3,0,0,0.000765903,0.001471397,0.008789257,0.002465017,0.005279632,0.009138832,0.01433563,0.026053515,0.045996258,0.222930968,0.662773591,0,0,0,0,0,0 +work,FALSE,17,4,0,0,0,0.000418211,0.002396043,0.007974979,0.014040235,0.00763931,0.007998749,0.020421036,0.047793315,0.160067858,0.731250266,0,0,0,0,0,0 +work,FALSE,18,1,0,0.001141884,0.000347251,0.005493278,0.0034212,0.004108535,0.018739263,0.013709509,0.003846669,0.010612585,0.030088047,0.076311695,0.459430143,0.372749941,0,0,0,0,0 +work,FALSE,18,2,0,0.000397247,0.000707705,0.005535515,0.005281963,0.006814578,0.015049985,0.03759067,0.008201571,0.014941596,0.020264402,0.096049656,0.37187676,0.417288351,0,0,0,0,0 +work,FALSE,18,3,0,0,0.000752403,0.001471647,0,0.003652225,0.011264642,0.015334427,0.024656138,0.012088375,0.011628494,0.081091511,0.38372424,0.454335898,0,0,0,0,0 +work,FALSE,18,4,0,0,0.00040169,0.000306609,0.0002567,0.000726244,0.002720367,0.010037344,0.005670103,0.015810978,0.039979813,0.053350178,0.223343181,0.647396793,0,0,0,0,0 +work,FALSE,19,1,0,0.001186239,0,0.002728595,0.007883348,0.008718809,0.009638123,0.011693247,0.012706395,0.005992436,0.024678769,0.039878395,0.101249301,0.453611585,0.320034756,0,0,0,0 +work,FALSE,19,2,0,0,0,0.004170607,0.002769083,0.008212126,0.01044298,0.034645644,0.024223099,0.015502992,0.044371325,0.03839639,0.101706769,0.292181702,0.423377281,0,0,0,0 +work,FALSE,19,3,0,0,0,0.003546437,0.001427168,0.004005704,0.004647363,0.014456394,0.026101366,0.008168106,0.016583656,0.063080785,0.175251264,0.316168107,0.366563651,0,0,0,0 +work,FALSE,19,4,0,0,0,0,0.002545816,0.001448115,0.001519341,0.006183074,0.015479082,0.010887569,0.013355331,0.023014309,0.098855008,0.198551692,0.628160662,0,0,0,0 +work,FALSE,20,1,0,0,0.002357347,0.003515438,0.003650989,0.004956981,0.005821696,0.03028673,0.010683018,0.006121216,0.039610208,0.067356772,0.074052002,0.107849619,0.362764994,0.280972989,0,0,0 +work,FALSE,20,2,0,0,0,0.003020632,0.000872671,0.009819915,0.004032092,0.033547265,0.012437164,0.023084614,0.029601855,0.030696598,0.08880218,0.150240348,0.244376765,0.3694679,0,0,0 +work,FALSE,20,3,0,0,0,0,0.004490786,0.000948296,0.00496082,0.008797541,0.038290701,0.03100745,0.01309721,0.070674268,0.104392115,0.094315975,0.284308763,0.344716076,0,0,0 +work,FALSE,20,4,0,0,0,0,0,0,0.003217512,0.008519707,0.01832166,0.021264988,0.034310024,0.032173455,0.100093463,0.115029817,0.197663659,0.469405714,0,0,0 +work,FALSE,21,1,0,0,0.00486935,0.004088274,0.009577732,0.013580516,0.019408543,0.027638575,0.028964986,0.013373832,0.01367219,0.088681299,0.105198543,0.066199405,0.05396423,0.186005224,0.3647773,0,0 +work,FALSE,21,2,0,0,0.005064281,0,0.005604807,0.001600494,0.02231608,0.036560998,0.023155074,0.011113847,0.021297782,0.024032721,0.15164875,0.095555611,0.130774865,0.152199827,0.319074864,0,0 +work,FALSE,21,3,0,0,0,0,0,0,0.008088371,0.016902755,0.023330301,0.010037114,0.04837863,0.047736466,0.100832492,0.115955331,0.150651228,0.252610972,0.225476339,0,0 +work,FALSE,21,4,0,0,0,0,0,0,0,0.009975719,0.00458937,0.004215296,0.014833666,0.013407482,0.096553857,0.131723579,0.099990132,0.155500861,0.469210038,0,0 +work,FALSE,22,1,0,0,0,0,0.002354463,0.001321627,0.001526638,0.003547564,0.007889584,0.00247877,0.061446315,0.077612309,0.104848995,0.087316793,0.063921354,0.040342969,0.155380603,0.390012018,0 +work,FALSE,22,2,0,0,0,0.001982423,0,0.007743127,0.011968403,0.008685093,0.003973347,0.012345869,0.016587124,0.040020235,0.072010749,0.098243002,0.073472113,0.096470733,0.242366696,0.314131085,0 +work,FALSE,22,3,0,0,0,0,0,0.00900164,0.001675422,0.021019519,0.008241362,0.012933333,0.01478469,0.047949921,0.119423115,0.119522763,0.080598154,0.04905538,0.20209014,0.313704562,0 +work,FALSE,22,4,0,0,0,0,0,0.00241091,0.006967046,0.024621244,0.004358134,0.006887033,0.008276343,0.047494465,0.086031065,0.153176335,0.061142075,0.031195643,0.205080104,0.362359603,0 +work,FALSE,23,1,0,0.001238847,0,0.002154573,0.003964601,0.001493218,0.012410725,0.019401965,0.016898905,0.02730294,0.011556986,0.034875148,0.041105748,0.083174793,0.018419684,0.005370325,0.063729247,0.109449086,0.54745321 +work,FALSE,23,2,0,0,0.001396549,0,0.003319033,0.005204887,0.025094008,0.033735384,0.008488109,0.01528189,0.022728985,0.031350219,0.058537975,0.074214158,0.022929206,0.042918793,0.007770177,0.170962188,0.476068439 +work,FALSE,23,3,0,0,0.001748893,0.001566752,0,0.007196939,0.011228416,0.021359669,0.028165721,0.008967715,0.028693265,0.056683172,0.078656022,0.063158735,0.099308392,0.039560138,0.024986978,0.098009336,0.43070986 +work,FALSE,23,4,0,0,0.000766782,0.004388369,0.002881109,0.004980974,0.024053963,0.026342685,0.029143148,0.024074445,0.020534932,0.036286202,0.115377511,0.062463348,0.051866458,0.057077696,0.052763369,0.108781076,0.378217933 +univ,TRUE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,TRUE,5,2,0,0.141462921,0.39086301,0,0.071786124,0.025897511,0,0,0,0.097305573,0,0.030851335,0.102890339,0.138943185,0,0,0,0,0 +univ,TRUE,5,3,0,0,0.873218626,0,0,0.057857072,0,0,0,0,0,0,0,0.068924303,0,0,0,0,0 +univ,TRUE,5,4,0,0,0,0,0,0,0.32303468,0,0.32303468,0.16151734,0,0,0,0.192413299,0,0,0,0,0 +univ,TRUE,6,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,TRUE,6,2,0,0.134677838,0.456787632,0.153282563,0.059662856,0.118242123,0.03689652,0.007431799,0.019186549,0,0,0.01383212,0,0,0,0,0,0,0 +univ,TRUE,6,3,0,0.09504007,0.597276077,0.241947175,0,0,0,0.065736678,0,0,0,0,0,0,0,0,0,0,0 +univ,TRUE,6,4,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,TRUE,7,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,TRUE,7,2,0,0,0.16008737,0.671458416,0.049774779,0.017812393,0.020633361,0.033501607,0,0.039093289,0.007638784,0,0,0,0,0,0,0,0 +univ,TRUE,7,3,0,0,0.052281409,0.806320518,0.030314369,0,0,0.012683969,0,0.051228214,0,0.047171521,0,0,0,0,0,0,0 +univ,TRUE,7,4,0,0,0,0.384291795,0.37997151,0.017486076,0.017486076,0,0.052458229,0.020717499,0.020717499,0.106871315,0,0,0,0,0,0,0 +univ,TRUE,8,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,TRUE,8,2,0,0,0,0.508028202,0.405046381,0.075475558,0.005588065,0,0.005861793,0,0,0,0,0,0,0,0,0,0 +univ,TRUE,8,3,0,0,0,0.353221848,0.426314578,0.180255321,0.025900769,0.014307484,0,0,0,0,0,0,0,0,0,0,0 +univ,TRUE,8,4,0,0,0,0.244322976,0.391323801,0.023592159,0.14547362,0.023592159,0,0.117960797,0,0.026867244,0.026867244,0,0,0,0,0,0 +univ,TRUE,9,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,TRUE,9,2,0,0,0,0,0.363140456,0.541860336,0.068377772,0.008522123,0,0,0.018099314,0,0,0,0,0,0,0,0 +univ,TRUE,9,3,0,0,0,0,0.088505041,0.64872571,0.084998604,0.177770645,0,0,0,0,0,0,0,0,0,0,0 +univ,TRUE,9,4,0,0,0,0,0.139725614,0.449854868,0.134189894,0,0.276229624,0,0,0,0,0,0,0,0,0,0 +univ,TRUE,10,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,TRUE,10,2,0,0,0,0,0,0.346861762,0.509611346,0.026290472,0.013109947,0.104126473,0,0,0,0,0,0,0,0,0 +univ,TRUE,10,3,0,0,0,0,0,0.302069617,0.428966039,0.192628694,0,0.07633565,0,0,0,0,0,0,0,0,0 +univ,TRUE,10,4,0,0,0,0,0,0,0.414612817,0,0.115720886,0.347162659,0.122503637,0,0,0,0,0,0,0,0 +univ,TRUE,11,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +univ,TRUE,11,2,0,0,0,0,0,0,0.237240285,0.707936221,0.02446143,0.00979796,0.020564104,0,0,0,0,0,0,0,0 +univ,TRUE,11,3,0,0,0,0,0,0,0.042322313,0.335051522,0.231238246,0.268514141,0.122873778,0,0,0,0,0,0,0,0 +univ,TRUE,11,4,0,0,0,0,0,0,0,0.563593836,0.248920946,0,0.058524887,0.128960331,0,0,0,0,0,0,0 +univ,TRUE,12,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +univ,TRUE,12,2,0,0,0,0,0,0,0,0,0.437771877,0.210261779,0,0,0.297139297,0.054827047,0,0,0,0,0 +univ,TRUE,12,3,0,0,0,0,0,0,0,0,0.43873352,0.141096056,0.130019758,0,0.219455556,0.070695109,0,0,0,0,0 +univ,TRUE,12,4,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +univ,TRUE,13,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +univ,TRUE,13,2,0,0,0,0,0,0,0,0,0.134867601,0.583447862,0.08911022,0.053636459,0.138937858,0,0,0,0,0,0 +univ,TRUE,13,3,0,0,0,0,0,0,0,0,0.150944969,0.333823157,0.107766156,0.168152845,0,0.239312872,0,0,0,0,0 +univ,TRUE,13,4,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +univ,TRUE,14,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +univ,TRUE,14,2,0,0,0,0,0,0,0,0,0,0.090285103,0.404418717,0.50529618,0,0,0,0,0,0,0 +univ,TRUE,14,3,0,0,0,0,0,0,0,0,0,0,0.309699276,0.690300724,0,0,0,0,0,0,0 +univ,TRUE,14,4,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +univ,TRUE,15,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +univ,TRUE,15,2,0,0,0,0,0,0,0,0,0,0,0.357567593,0.542130931,0.100301476,0,0,0,0,0,0 +univ,TRUE,15,3,0,0,0,0,0,0,0,0,0,0,0,0.628916949,0.371083051,0,0,0,0,0,0 +univ,TRUE,15,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +univ,TRUE,16,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +univ,TRUE,16,2,0,0,0,0,0,0,0,0,0,0,0,0.300048836,0.63299685,0.066954314,0,0,0,0,0 +univ,TRUE,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +univ,TRUE,16,4,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +univ,TRUE,17,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +univ,TRUE,17,2,0,0,0,0,0,0,0,0,0,0,0,0,0.14414362,0.85585638,0,0,0,0,0 +univ,TRUE,17,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +univ,TRUE,17,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0.696191337,0.303808663,0,0,0,0 +univ,TRUE,18,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +univ,TRUE,18,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0.403432532,0.596567468,0,0,0,0 +univ,TRUE,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0.450038651,0.549961349,0,0,0,0 +univ,TRUE,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +univ,TRUE,19,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +univ,TRUE,19,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +univ,TRUE,19,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +univ,TRUE,19,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +univ,TRUE,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +univ,TRUE,20,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +univ,TRUE,20,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +univ,TRUE,20,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +univ,TRUE,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +univ,TRUE,21,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +univ,TRUE,21,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +univ,TRUE,21,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +univ,TRUE,22,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +univ,TRUE,22,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +univ,TRUE,22,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +univ,TRUE,22,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +univ,TRUE,23,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +univ,TRUE,23,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +univ,TRUE,23,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +univ,TRUE,23,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +univ,FALSE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,5,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,5,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,6,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,6,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,6,3,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,6,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,7,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,7,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,7,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,7,4,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,8,1,0,0,0.016025515,0.983974485,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,8,2,0,0,0.262404641,0.737595359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,8,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,8,4,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,9,1,0,0,0,0.163327352,0.836672648,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,9,2,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,9,3,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,9,4,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,10,1,0,0,0,0.226661626,0.168940428,0.604397946,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,10,2,0,0,0,0,0.222726098,0.777273902,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,10,3,0,0,0,0,0.611879485,0.388120515,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,10,4,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,11,1,0,0,0,0.015316515,0.046862442,0.097177177,0.840643866,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,11,2,0,0,0,0.070258469,0,0.268634856,0.661106675,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,11,3,0,0,0,0.037689621,0,0.130353154,0.831957225,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,11,4,0,0,0,0,0,0.077208841,0.922791159,0,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,12,1,0,0,0.014945608,0,0.028129025,0.020638305,0.519341237,0.416945825,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,12,2,0,0,0.031201085,0.03237983,0.013231327,0.110325379,0.181858105,0.631004274,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,12,3,0,0,0,0.03549716,0.015053148,0,0.290392671,0.65905702,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,12,4,0,0,0,0,0.099318641,0.052098847,0.151713122,0.69686939,0,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,13,1,0,0,0,0,0,0,0.181017187,0.292661018,0.526321795,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,13,2,0,0,0,0,0,0,0.048301785,0.296950961,0.654747254,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,13,3,0,0,0,0,0,0,0,0.056113137,0.943886863,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,13,4,0,0,0,0,0,0.024635167,0,0,0.975364833,0,0,0,0,0,0,0,0,0,0 +univ,FALSE,14,1,0,0,0,0.022000764,0.008154518,0.013638554,0.034791419,0.065882427,0.246258385,0.609273932,0,0,0,0,0,0,0,0,0 +univ,FALSE,14,2,0,0,0,0,0,0,0.016168393,0.097081997,0.229754942,0.656994667,0,0,0,0,0,0,0,0,0 +univ,FALSE,14,3,0,0,0,0,0,0,0.043234918,0.20601367,0.431619379,0.319132034,0,0,0,0,0,0,0,0,0 +univ,FALSE,14,4,0,0,0,0,0,0,0.024961198,0.010062765,0.104416222,0.860559815,0,0,0,0,0,0,0,0,0 +univ,FALSE,15,1,0,0,0,0.016983489,0,0.013422718,0.023570396,0.004582712,0.053800861,0.202721356,0.684918469,0,0,0,0,0,0,0,0 +univ,FALSE,15,2,0,0,0,0,0.045151752,0,0.099380208,0.018712363,0.046279979,0.313502235,0.476973464,0,0,0,0,0,0,0,0 +univ,FALSE,15,3,0,0,0,0,0,0,0.025154904,0.093517604,0.102200685,0.131224361,0.647902447,0,0,0,0,0,0,0,0 +univ,FALSE,15,4,0,0,0,0,0,0,0.04795036,0.04795036,0.065158411,0.21500352,0.623937348,0,0,0,0,0,0,0,0 +univ,FALSE,16,1,0,0,0,0,0,0.003411195,0,0.013129003,0,0.154717961,0.529208805,0.299533037,0,0,0,0,0,0,0 +univ,FALSE,16,2,0,0,0,0.015451903,0.014978609,0,0.006115529,0.008472156,0,0.091244276,0.417492241,0.446245285,0,0,0,0,0,0,0 +univ,FALSE,16,3,0,0,0,0,0,0.016342188,0.018885054,0,0.036490672,0.062457119,0.082466854,0.783358113,0,0,0,0,0,0,0 +univ,FALSE,16,4,0,0,0,0,0,0,0,0.102624898,0.020338459,0.028320918,0.182111674,0.666604051,0,0,0,0,0,0,0 +univ,FALSE,17,1,0,0,0,0,0,0,0,0.060607217,0.015960535,0.027738146,0.138834813,0.177730039,0.579129249,0,0,0,0,0,0 +univ,FALSE,17,2,0,0,0,0,0,0,0.026878378,0,0.045587412,0.056703613,0.067767612,0.211772198,0.591290787,0,0,0,0,0,0 +univ,FALSE,17,3,0,0,0,0,0,0,0.035711491,0,0,0.030318877,0.065253534,0.105686003,0.763030094,0,0,0,0,0,0 +univ,FALSE,17,4,0,0,0,0,0,0,0.010287884,0.023408308,0.036977492,0.010287884,0.081294488,0.144862027,0.692881918,0,0,0,0,0,0 +univ,FALSE,18,1,0,0,0,0.003945375,0,0,0,0.017778798,0,0.094239059,0.126537664,0.04524658,0.521630843,0.190621681,0,0,0,0,0 +univ,FALSE,18,2,0,0,0,0.00721016,0,0,0.021117111,0.009952491,0.040163794,0.181306282,0.011084411,0,0.37585875,0.353307001,0,0,0,0,0 +univ,FALSE,18,3,0,0,0,0.006589215,0,0,0,0.019298488,0,0.057611182,0.140317157,0.028818423,0.227948944,0.51941659,0,0,0,0,0 +univ,FALSE,18,4,0,0,0,0,0,0,0.008076984,0,0.019904917,0.065674412,0.055168626,0.094050391,0.164547688,0.592576982,0,0,0,0,0 +univ,FALSE,19,1,0,0,0,0,0.009454567,0,0,0,0.04102499,0,0.023746099,0,0.135591003,0.220827281,0.56935606,0,0,0,0 +univ,FALSE,19,2,0,0,0,0,0,0,0,0,0,0.078006772,0,0.060317466,0.259929547,0.359118303,0.242627912,0,0,0,0 +univ,FALSE,19,3,0,0,0,0,0,0,0,0,0,0.021382414,0,0.021188936,0.081686174,0.348421579,0.527320897,0,0,0,0 +univ,FALSE,19,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0.189756837,0.810243163,0,0,0,0 +univ,FALSE,20,1,0,0,0,0,0,0,0,0.010016964,0,0,0,0.004718289,0.003266795,0,0.085231627,0.896766325,0,0,0 +univ,FALSE,20,2,0,0,0,0,0,0,0.11773307,0.039948419,0,0.039518498,0.05632597,0,0.267130581,0.046726624,0.026652785,0.405964054,0,0,0 +univ,FALSE,20,3,0,0,0,0,0,0,0,0.120183428,0,0.019425265,0,0.12981914,0.113130998,0,0.023452919,0.59398825,0,0,0 +univ,FALSE,20,4,0,0,0,0,0,0,0,0.120271055,0,0.038712543,0.069855242,0.27999729,0.089459377,0.067799861,0.14272972,0.191174912,0,0,0 +univ,FALSE,21,1,0,0,0,0,0,0,0,0,0.007338913,0.023203309,0.007350649,0.00472513,0.002978934,0,0.033142982,0.176639731,0.744620353,0,0 +univ,FALSE,21,2,0,0,0,0,0,0,0,0,0,0.057152164,0.184622922,0.047820405,0.014739649,0.00986257,0.02270102,0.078261413,0.584839857,0,0 +univ,FALSE,21,3,0,0,0,0,0,0,0,0.023488975,0,0.025096056,0,0,0.038339259,0,0.022191995,0.28095544,0.609928273,0,0 +univ,FALSE,21,4,0,0,0,0,0,0,0,0,0.029235831,0,0.09370831,0.034296673,0,0,0,0.045049879,0.797709307,0,0 +univ,FALSE,22,1,0,0,0,0,0,0,0,0,0,0.026178201,0.014643033,0,0.007467541,0,0.019259981,0,0.427134845,0.5053164,0 +univ,FALSE,22,2,0,0,0,0,0,0,0.034835821,0,0,0,0.140548783,0,0,0,0,0,0.1300249,0.694590496,0 +univ,FALSE,22,3,0,0,0,0,0,0,0,0.046323184,0,0,0,0.186895757,0,0,0,0,0.329771262,0.437009796,0 +univ,FALSE,22,4,0,0,0,0,0,0,0,0,0,0,0,0,0.156732984,0.024747713,0.166206674,0.137729625,0.24721205,0.267370954,0 +univ,FALSE,23,1,0,0,0,0,0,0,0,0,0,0.035836574,0,0.042066438,0.075012425,0.063439215,0,0,0.301680107,0.16901224,0.312953001 +univ,FALSE,23,2,0,0,0,0,0,0,0,0.022191189,0.04703489,0.224157456,0.038381448,0.045053715,0,0.164838447,0,0,0.125234584,0.144560801,0.188547469 +univ,FALSE,23,3,0,0,0,0,0,0,0,0,0,0,0,0.050535751,0,0.237653614,0.043051618,0,0.251962365,0.07621155,0.340585102 +univ,FALSE,23,4,0,0,0,0,0,0,0,0,0,0,0.012541125,0,0.020367286,0.065349217,0.103326665,0.070453894,0.108396964,0.135051697,0.484513153 +school,TRUE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,5,2,0,0.040189605,0.959810395,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,5,3,0,0.14676025,0.559777558,0.293462192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,5,4,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,6,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,6,2,0,0.090715709,0.600480587,0.301778371,0,0,0,0,0.007025333,0,0,0,0,0,0,0,0,0,0 +school,TRUE,6,3,0,0.189913473,0.435678549,0.345471524,0.028936455,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,6,4,0,0.276044088,0.461879351,0.26207656,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,7,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,7,2,0,0,0.358595289,0.543340426,0.080407454,0.00494145,0,0.003218472,0.001252217,0.00163666,0.005875668,0,0.000732365,0,0,0,0,0,0 +school,TRUE,7,3,0,0,0.305390104,0.552122437,0.119495284,0,0.012287658,0,0,0,0.010704517,0,0,0,0,0,0,0,0 +school,TRUE,7,4,0,0,0.244790257,0.688367336,0,0.043560183,0,0.023282223,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,8,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,8,2,0,0,0,0.750052982,0.197397697,0.003009328,0.015758235,0.00583123,0,0.002418098,0.003851683,0.011638797,0.01004195,0,0,0,0,0,0 +school,TRUE,8,3,0,0,0,0.372624607,0.42987891,0.03924466,0,0.102467106,0,0,0.055784717,0,0,0,0,0,0,0,0 +school,TRUE,8,4,0,0,0,0,0.141654355,0.129241521,0.273939898,0,0,0,0,0.31350987,0.141654355,0,0,0,0,0,0 +school,TRUE,9,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,9,2,0,0,0,0,0.090691548,0.482888016,0.426420437,0,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,9,3,0,0,0,0,0.091229458,0.353634961,0.555135582,0,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,9,4,0,0,0,0,0,0.30179716,0.69820284,0,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,10,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,10,2,0,0,0,0,0,0,0.489554594,0.510445406,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,10,3,0,0,0,0,0,0,0.489554594,0.510445406,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,10,4,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,11,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,11,2,0,0,0,0,0,0,0.02770017,0.902627425,0.038595346,0.031077059,0,0,0,0,0,0,0,0,0 +school,TRUE,11,3,0,0,0,0,0,0,0,0.797232896,0.076506636,0,0.126260468,0,0,0,0,0,0,0,0 +school,TRUE,11,4,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +school,TRUE,12,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,12,2,0,0,0,0,0,0,0,0,0.899748743,0,0,0.100251257,0,0,0,0,0,0,0 +school,TRUE,12,3,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +school,TRUE,12,4,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +school,TRUE,13,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +school,TRUE,13,2,0,0,0,0,0,0,0,0,0,0.451262789,0.191174572,0.357562639,0,0,0,0,0,0,0 +school,TRUE,13,3,0,0,0,0,0,0,0,0,0,0.068700765,0.443666092,0.487633143,0,0,0,0,0,0,0 +school,TRUE,13,4,0,0,0,0,0,0,0,0,0,0,0.11838799,0.88161201,0,0,0,0,0,0,0 +school,TRUE,14,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +school,TRUE,14,2,0,0,0,0,0,0,0,0,0,0.534557731,0.079614802,0,0,0.385827467,0,0,0,0,0 +school,TRUE,14,3,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +school,TRUE,14,4,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +school,TRUE,15,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +school,TRUE,15,2,0,0,0,0,0,0,0,0,0,0,0,0.868324906,0,0.131675094,0,0,0,0,0 +school,TRUE,15,3,0,0,0,0,0,0,0,0,0,0,0,0.900878137,0.099121863,0,0,0,0,0,0 +school,TRUE,15,4,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +school,TRUE,16,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +school,TRUE,16,2,0,0,0,0,0,0,0,0,0,0,0,0.173995865,0.826004135,0,0,0,0,0,0 +school,TRUE,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0.637190616,0.362809384,0,0,0,0,0 +school,TRUE,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0.74484742,0.25515258,0,0,0,0,0 +school,TRUE,17,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +school,TRUE,17,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +school,TRUE,17,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +school,TRUE,17,4,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +school,TRUE,18,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +school,TRUE,18,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0.173208977,0.826791023,0,0,0,0 +school,TRUE,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +school,TRUE,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +school,TRUE,19,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +school,TRUE,19,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +school,TRUE,19,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +school,TRUE,19,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +school,TRUE,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +school,TRUE,20,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +school,TRUE,20,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +school,TRUE,20,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +school,TRUE,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +school,TRUE,21,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +school,TRUE,21,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +school,TRUE,21,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +school,TRUE,22,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +school,TRUE,22,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +school,TRUE,22,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +school,TRUE,22,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +school,TRUE,23,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +school,TRUE,23,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +school,TRUE,23,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +school,TRUE,23,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +school,FALSE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,5,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,5,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,6,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,6,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,6,3,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,6,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,7,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,7,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,7,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,7,4,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,8,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,8,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,8,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,8,4,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,9,1,0,0,0,0.09946831,0.90053169,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,9,2,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,9,3,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,9,4,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,10,1,0,0,0,0,0.051889499,0.948110501,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,10,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,10,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,10,4,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,11,1,0,0,0,0,0.00854797,0.143038003,0.848414027,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,11,2,0,0,0,0,0,0.07758327,0.92241673,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,11,3,0,0,0,0,0,0.05138849,0.94861151,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,11,4,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,12,1,0,0,0,0,0.019446017,0.011496295,0.285657861,0.683399827,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,12,2,0,0,0,0,0.019954492,0,0.331728142,0.648317366,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,12,3,0,0,0,0,0.033967027,0,0.201586112,0.764446861,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,12,4,0,0,0,0,0.113939675,0,0.018400111,0.867660214,0,0,0,0,0,0,0,0,0,0,0 +school,FALSE,13,1,0,0,0,0.019248269,0,0.002680163,0.030761477,0.259256669,0.688053423,0,0,0,0,0,0,0,0,0,0 +school,FALSE,13,2,0,0,0,0,0,0,0,0.189323178,0.810676822,0,0,0,0,0,0,0,0,0,0 +school,FALSE,13,3,0,0,0,0,0,0,0,0.258031986,0.741968014,0,0,0,0,0,0,0,0,0,0 +school,FALSE,13,4,0,0,0,0,0,0,0,0.279494058,0.720505942,0,0,0,0,0,0,0,0,0,0 +school,FALSE,14,1,0,0.000831908,0.000979746,0,0.001601486,0.002226531,0.002192251,0.02470079,0.091632585,0.875834703,0,0,0,0,0,0,0,0,0 +school,FALSE,14,2,0,0,0,0,0,0,0.041609561,0.016064041,0.222703138,0.71962326,0,0,0,0,0,0,0,0,0 +school,FALSE,14,3,0,0,0,0,0,0,0,0.023937672,0.13413328,0.841929047,0,0,0,0,0,0,0,0,0 +school,FALSE,14,4,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +school,FALSE,15,1,0,0,0.006672723,0.001920517,0.000881135,0.000470656,0.007178881,0.003373865,0.007046025,0.435289669,0.537166529,0,0,0,0,0,0,0,0 +school,FALSE,15,2,0,0,0,0.003559393,0.005420446,0,0.01895427,0.006031842,0.009564559,0.299701581,0.656767909,0,0,0,0,0,0,0,0 +school,FALSE,15,3,0,0,0,0,0.014210731,0,0,0.009915361,0.013300231,0.238413075,0.724160602,0,0,0,0,0,0,0,0 +school,FALSE,15,4,0,0,0,0,0.013547957,0,0,0.003834839,0,0.141585883,0.841031322,0,0,0,0,0,0,0,0 +school,FALSE,16,1,0,0,0.003957494,0.007442128,0.002894311,0,0.018097734,0.013714786,0.017413316,0.113052385,0.49048648,0.332941366,0,0,0,0,0,0,0 +school,FALSE,16,2,0,0,0,0.001567759,0.006348016,0.004559163,0.009399428,0.015889281,0.021832495,0.089535591,0.363878359,0.486989907,0,0,0,0,0,0,0 +school,FALSE,16,3,0,0,0,0,0,0.008315162,0.022193918,0.007486006,0.004771945,0.02862127,0.176424988,0.75218671,0,0,0,0,0,0,0 +school,FALSE,16,4,0,0,0,0,0,0,0,0.028022669,0.01919336,0.027628588,0.156778381,0.768377001,0,0,0,0,0,0,0 +school,FALSE,17,1,0,0,0,0.00408238,0.006057147,0.001368873,0.003781947,0.013443846,0.020930042,0.105685888,0.191206812,0.133610245,0.51983282,0,0,0,0,0,0 +school,FALSE,17,2,0,0,0,0.004151198,0,0.00388225,0.00967742,0.013025325,0.027213825,0.07090836,0.082650841,0.202645832,0.585844949,0,0,0,0,0,0 +school,FALSE,17,3,0,0,0,0,0,0.003335544,0,0.003254012,0,0.075557182,0.182853928,0.23363666,0.501362673,0,0,0,0,0,0 +school,FALSE,17,4,0,0,0,0,0,0.006781644,0.00413291,0,0,0.007828685,0.092863122,0.424308729,0.46408491,0,0,0,0,0,0 +school,FALSE,18,1,0,0,0,0.004555021,0,0,0.006805278,0.040238758,0.025752449,0.139579581,0.145174267,0.082159935,0.330134952,0.225599759,0,0,0,0,0 +school,FALSE,18,2,0,0,0,0,0,0,0.002018633,0.017639777,0.011559497,0.035110168,0.084872767,0.077914013,0.273264514,0.497620631,0,0,0,0,0 +school,FALSE,18,3,0,0,0,0,0,0,0.002017331,0.006931595,0.009423374,0.041198595,0.078999404,0.039268257,0.366809487,0.455351956,0,0,0,0,0 +school,FALSE,18,4,0,0,0,0,0,0,0,0,0.018561399,0.043258965,0,0.032292792,0.225093524,0.680793321,0,0,0,0,0 +school,FALSE,19,1,0,0,0.012570056,0,0,0,0.016011468,0.016057604,0.07668851,0.134954753,0.226805131,0.045185104,0.119737059,0.1042095,0.247780814,0,0,0,0 +school,FALSE,19,2,0,0,0,0,0,0,0,0,0.035149661,0.079025772,0.252249169,0.074284557,0.168495532,0.132896247,0.257899061,0,0,0,0 +school,FALSE,19,3,0,0,0,0,0,0,0.005256704,0.005256704,0,0.009878056,0.069178911,0.139359082,0.209998751,0.300301838,0.260769954,0,0,0,0 +school,FALSE,19,4,0,0,0,0,0,0,0,0,0,0,0.022433763,0.009746389,0.043021361,0.243536894,0.681261593,0,0,0,0 +school,FALSE,20,1,0,0,0,0,0,0,0.036381208,0,0.005800614,0.031932891,0.149632504,0.044906251,0.163413396,0.076354612,0.020580741,0.470997783,0,0,0 +school,FALSE,20,2,0,0,0,0.036384497,0,0,0,0.015532617,0.011426107,0.027703676,0.076335086,0.040493411,0.142356662,0.132693585,0.187215615,0.329858743,0,0,0 +school,FALSE,20,3,0,0,0,0,0,0,0,0.03877589,0.045812113,0.065392635,0.101494701,0.055752291,0.061584445,0.034149257,0.28928825,0.307750418,0,0,0 +school,FALSE,20,4,0,0,0,0,0,0,0,0,0.036041044,0,0.141425909,0.042527443,0.019058777,0.102734314,0.237735178,0.420477334,0,0,0 +school,FALSE,21,1,0,0,0,0,0,0,0.029175445,0.047201664,0,0.059213923,0.186189825,0,0.015107113,0,0.014924261,0.246756883,0.401430887,0,0 +school,FALSE,21,2,0,0,0,0,0,0,0.018242295,0,0.051393732,0.017166791,0.159810093,0.01466897,0.065248355,0.019698184,0.082686594,0.128131407,0.442953578,0,0 +school,FALSE,21,3,0,0,0,0,0,0,0,0,0,0.044964736,0,0.026693251,0.075177802,0.03517993,0.025975511,0.337402271,0.4546065,0,0 +school,FALSE,21,4,0,0,0,0,0,0,0,0,0,0,0.058839649,0.052164792,0.030967554,0.061935107,0.029419825,0.145827525,0.620845548,0,0 +school,FALSE,22,1,0.023037375,0,0,0,0,0,0,0,0,0.080648327,0.361587215,0.039998637,0.119661147,0.145124395,0.025588201,0,0.115793964,0.088560738,0 +school,FALSE,22,2,0,0,0,0,0,0,0,0,0,0.066321013,0.205698394,0.043934105,0.180253452,0.112019427,0.014897164,0.028012145,0.055418593,0.293445707,0 +school,FALSE,22,3,0,0,0,0.017205445,0,0,0,0,0,0,0,0.072013982,0.171335382,0.018627394,0.235525324,0.014627752,0.218669111,0.25199561,0 +school,FALSE,22,4,0,0,0,0,0,0,0.014630535,0,0,0,0,0,0,0.021783187,0.041931895,0.020148708,0.336082731,0.565422944,0 +school,FALSE,23,1,0,0,0,0,0,0,0,0,0.111780051,0.21697306,0.207813189,0,0.029486875,0.065930991,0.028259313,0.025083791,0.027543321,0.043512885,0.243616523 +school,FALSE,23,2,0,0,0,0,0,0,0,0,0,0.125873532,0.191933649,0.013156926,0.035810782,0.023201345,0,0.03046339,0.176154142,0.116307048,0.287099186 +school,FALSE,23,3,0,0,0,0,0,0,0,0,0,0,0.39711845,0.032800383,0,0,0.246473294,0,0,0.167995519,0.155612354 +school,FALSE,23,4,0,0,0,0,0,0,0,0,0.313300531,0,0,0,0,0.002398637,0.195897513,0,0.195897513,0.004797275,0.28770853 +escort,TRUE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,TRUE,5,2,0.056858007,0.134308757,0.177188158,0,0,0.13142305,0,0.060572569,0,0.148645889,0.139773895,0.099108225,0,0.048544465,0.003576985,0,0,0,0 +escort,TRUE,5,3,0,0,0,0,0,0,0,0,0,0,0.744635807,0,0,0.255364193,0,0,0,0,0 +escort,TRUE,5,4,0,0,0,0,0,0,0,0,0,0,0.812216804,0.046945799,0,0.140837397,0,0,0,0,0 +escort,TRUE,6,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,TRUE,6,2,0,0.317902833,0.447578121,0.020114912,0,0,0.053725104,0,0,0.040669001,0.069308805,0.050701225,0,0,0,0,0,0,0 +escort,TRUE,6,3,0,0,0.573662861,0,0,0,0.426337139,0,0,0,0,0,0,0,0,0,0,0,0 +escort,TRUE,6,4,0,0,0,0,0,0,0.42115826,0.15768348,0.42115826,0,0,0,0,0,0,0,0,0,0 +escort,TRUE,7,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,TRUE,7,2,0,0,0.142617064,0.38383586,0.072492592,0.032249474,0.032292989,0.061737992,0.014418217,0,0.117686396,0.044994655,0.097674761,0,0,0,0,0,0 +escort,TRUE,7,3,0,0,0,0,0,0.045211707,0,0,0.126121874,0,0.277934232,0.221864174,0,0.328868013,0,0,0,0,0 +escort,TRUE,7,4,0,0,0,0,0,0.046374243,0,0,0.072684124,0,0,0.059438015,0.270430055,0.098354465,0,0.157068569,0,0.295650529,0 +escort,TRUE,8,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,TRUE,8,2,0,0,0,0.321006938,0.473310236,0.008304761,0.028639249,0.02199492,0.016407044,0,0.05343627,0.024107423,0.052793161,0,0,0,0,0,0 +escort,TRUE,8,3,0,0,0,0.32761399,0.648736988,0.023649023,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,TRUE,8,4,0,0,0,0,0.203285069,0.087659544,0.087659544,0,0.005822781,0,0,0,0.101642534,0.005717855,0.508212672,0,0,0,0 +escort,TRUE,9,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,TRUE,9,2,0,0,0,0,0.320224882,0.267747579,0.099295479,0,0.061354638,0.200251803,0,0,0,0.020258001,0.030867619,0,0,0,0 +escort,TRUE,9,3,0,0,0,0,0,0.432761501,0.214593419,0,0.146040986,0.206604093,0,0,0,0,0,0,0,0,0 +escort,TRUE,9,4,0,0,0,0,0,0,0.1657582,0.096920036,0.259807729,0,0.159171345,0.159171345,0.159171345,0,0,0,0,0,0 +escort,TRUE,10,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,TRUE,10,2,0,0,0,0,0,0.196501921,0.373640136,0.138599097,0.094607199,0.196651647,0,0,0,0,0,0,0,0,0 +escort,TRUE,10,3,0,0,0,0,0,0.116175548,0.44952369,0.143154558,0.097571597,0.14871659,0.044858016,0,0,0,0,0,0,0,0 +escort,TRUE,10,4,0,0,0,0,0,0,0.152413275,0.360078185,0.346132466,0.141376074,0,0,0,0,0,0,0,0,0 +escort,TRUE,11,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +escort,TRUE,11,2,0,0,0,0,0,0,0.236755791,0.714983274,0.028256555,0.02000438,0,0,0,0,0,0,0,0,0 +escort,TRUE,11,3,0,0,0,0,0,0,0,0.379678398,0.448220444,0.172101157,0,0,0,0,0,0,0,0,0 +escort,TRUE,11,4,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +escort,TRUE,12,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +escort,TRUE,12,2,0,0,0,0,0,0,0,0.146819614,0.555791511,0.044450314,0.058009028,0.153878569,0.041050964,0,0,0,0,0,0 +escort,TRUE,12,3,0,0,0,0,0,0,0,0,0.743230427,0.054234351,0.202535221,0,0,0,0,0,0,0,0 +escort,TRUE,12,4,0,0,0,0,0,0,0,0,0,0.132670832,0.867329168,0,0,0,0,0,0,0,0 +escort,TRUE,13,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +escort,TRUE,13,2,0,0,0,0,0,0,0,0,0.092255068,0.585233838,0.30962564,0.012885454,0,0,0,0,0,0,0 +escort,TRUE,13,3,0,0,0,0,0,0,0,0,0,0.671206778,0.328793222,0,0,0,0,0,0,0,0 +escort,TRUE,13,4,0,0,0,0,0,0,0,0,0,0.228972422,0.771027578,0,0,0,0,0,0,0,0 +escort,TRUE,14,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +escort,TRUE,14,2,0,0,0,0,0,0,0,0,0,0.562794406,0.331440849,0.082858701,0,0.022906044,0,0,0,0,0 +escort,TRUE,14,3,0,0,0,0,0,0,0,0,0,0,0.645172877,0.181000922,0.173826201,0,0,0,0,0,0 +escort,TRUE,14,4,0,0,0,0,0,0,0,0,0,0,0,0.753171928,0.246828072,0,0,0,0,0,0 +escort,TRUE,15,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +escort,TRUE,15,2,0,0,0,0,0,0,0,0,0,0,0.201660218,0.766732321,0.031607461,0,0,0,0,0,0 +escort,TRUE,15,3,0,0,0,0,0,0,0,0,0,0,0.299056486,0.074996412,0.41897627,0.206970833,0,0,0,0,0 +escort,TRUE,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0.150453054,0.849546946,0,0,0,0,0 +escort,TRUE,16,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +escort,TRUE,16,2,0,0,0,0,0,0,0,0,0,0,0,0.579038356,0.255758044,0.165203599,0,0,0,0,0 +escort,TRUE,16,3,0,0,0,0,0,0,0,0,0,0,0,0.035336994,0.238269535,0.726393471,0,0,0,0,0 +escort,TRUE,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +escort,TRUE,17,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +escort,TRUE,17,2,0,0,0,0,0,0,0,0,0,0,0,0,0.197118737,0.703970119,0.036315607,0.026383772,0.036211766,0,0 +escort,TRUE,17,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0.427169666,0.572830334,0,0,0,0 +escort,TRUE,17,4,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +escort,TRUE,18,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +escort,TRUE,18,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0.185479472,0.434361919,0.338714329,0.041444281,0,0 +escort,TRUE,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.78249237,0.21750763,0,0,0 +escort,TRUE,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.823014212,0.176985788,0 +escort,TRUE,19,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +escort,TRUE,19,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.285555275,0.649528389,0.064916336,0,0 +escort,TRUE,19,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +escort,TRUE,19,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +escort,TRUE,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +escort,TRUE,20,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.199542785,0.800457215,0,0 +escort,TRUE,20,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +escort,TRUE,20,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +escort,TRUE,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +escort,TRUE,21,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +escort,TRUE,21,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +escort,TRUE,21,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +escort,TRUE,22,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +escort,TRUE,22,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +escort,TRUE,22,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +escort,TRUE,22,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +escort,TRUE,23,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +escort,TRUE,23,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +escort,TRUE,23,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +escort,TRUE,23,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +escort,FALSE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,5,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,5,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,6,1,0.040029892,0.959970108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,6,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,6,3,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,6,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,7,1,0,0.020969803,0.979030197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,7,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,7,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,7,4,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,8,1,0,0,0.118338551,0.881661449,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,8,2,0,0,0.034411699,0.965588301,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,8,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,8,4,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,9,1,0,0,0.004282148,0.282836493,0.71288136,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,9,2,0,0,0,0.171647398,0.828352602,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,9,3,0,0,0,0.21068634,0.78931366,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,9,4,0,0,0,0.019911517,0.980088483,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,10,1,0,0,0.018159729,0.078956734,0.236267706,0.66661583,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,10,2,0,0,0,0.138185723,0.240772266,0.621042011,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,10,3,0,0,0.040625092,0.114436303,0.44797514,0.396963465,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,10,4,0,0,0,0,0.181720167,0.818279833,0,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,11,1,0,0,0,0.031917445,0.047683392,0.099924869,0.820474293,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,11,2,0,0,0,0,0.020814603,0.392076313,0.587109083,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,11,3,0,0,0,0,0.032514248,0.315393925,0.652091828,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,11,4,0,0,0,0,0,0.249548162,0.750451838,0,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,12,1,0,0,0,0.018963707,0.021920487,0.031520436,0.140654387,0.786940984,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,12,2,0,0,0,0.03235256,0.042149511,0.05052472,0.131440073,0.743533136,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,12,3,0,0,0,0.050468014,0,0.017084057,0.229496221,0.702951708,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,12,4,0,0,0,0,0.048745163,0,0.147271645,0.803983192,0,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,13,1,0,0,0.002941942,0.022003062,0.00551188,0.013544069,0.038590922,0.171545199,0.745862927,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,13,2,0,0,0,0.015043096,0.006073583,0.009841677,0.054297211,0.176600055,0.738144378,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,13,3,0,0,0,0.021105735,0,0,0.046096397,0.122921811,0.809876056,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,13,4,0,0,0,0,0,0,0,0.099840566,0.900159434,0,0,0,0,0,0,0,0,0,0 +escort,FALSE,14,1,0,0,0,0.048520661,0,0,0.016138911,0.044713809,0.085550978,0.805075641,0,0,0,0,0,0,0,0,0 +escort,FALSE,14,2,0,0,0,0.009564053,0.153251843,0,0,0.114426845,0.102407993,0.620349267,0,0,0,0,0,0,0,0,0 +escort,FALSE,14,3,0,0,0,0,0,0,0.013997667,0.033806812,0.25169859,0.700496931,0,0,0,0,0,0,0,0,0 +escort,FALSE,14,4,0,0,0,0,0,0,0,0.031515821,0.082969823,0.885514356,0,0,0,0,0,0,0,0,0 +escort,FALSE,15,1,0.001473284,0.001275418,0.003819369,0.008997,0.006335419,0.008570073,0.003284399,0.001014618,0.005676659,0.244506482,0.715047279,0,0,0,0,0,0,0,0 +escort,FALSE,15,2,0.004847658,0.004196604,0.007080083,0.006185119,0.01421088,0,0.026061603,0.014229404,0.009049421,0.195982731,0.718156496,0,0,0,0,0,0,0,0 +escort,FALSE,15,3,0,0.012564661,0,0,0,0.021197818,0.014513923,0.011367283,0.031969048,0.126086289,0.782300976,0,0,0,0,0,0,0,0 +escort,FALSE,15,4,0,0,0,0,0,0.027149505,0.045738486,0.027149505,0.029117725,0.13954129,0.731303489,0,0,0,0,0,0,0,0 +escort,FALSE,16,1,0.00200405,0.001051772,0.006771555,0.00180834,0.015487237,0.019320069,0.003963644,0.003467036,0,0.014608191,0.140235591,0.791282514,0,0,0,0,0,0,0 +escort,FALSE,16,2,0,0,0,0.006365421,0.007122206,0.007817846,0.005072611,0.002561853,0.010562285,0.011331327,0.163631956,0.785534495,0,0,0,0,0,0,0 +escort,FALSE,16,3,0,0,0,0,0,0,0.013949693,0.015608287,0.031607957,0.045248859,0.086738092,0.806847112,0,0,0,0,0,0,0 +escort,FALSE,16,4,0,0,0,0,0,0,0,0,0,0,0.176949473,0.823050527,0,0,0,0,0,0,0 +escort,FALSE,17,1,0,0.001885858,0.014135456,0.015985525,0.002552119,0,0,0.002305352,0,0.019788158,0.05304134,0.114790493,0.775515701,0,0,0,0,0,0 +escort,FALSE,17,2,0,0,0.01612501,0.004912147,0,0,0,0,0.006052735,0,0.066169183,0.192117368,0.714623557,0,0,0,0,0,0 +escort,FALSE,17,3,0,0,0,0,0,0,0,0,0,0.020217729,0.029305934,0.331354145,0.619122192,0,0,0,0,0,0 +escort,FALSE,17,4,0,0,0,0,0,0,0,0,0,0,0.06461582,0.084856782,0.850527398,0,0,0,0,0,0 +escort,FALSE,18,1,0,0.005432163,0.038940224,0.026689744,0.058158769,0,0.034797386,0,0,0.003175997,0.015025769,0.011190666,0.133413828,0.673175452,0,0,0,0,0 +escort,FALSE,18,2,0.006475372,0,0.028703811,0,0.057765487,0,0.00513516,0.012023268,0,0.005808733,0.027224281,0.023941956,0.217891148,0.615030786,0,0,0,0,0 +escort,FALSE,18,3,0,0,0,0,0,0,0,0.023354896,0,0,0.010873824,0.043494105,0.216938965,0.70533821,0,0,0,0,0 +escort,FALSE,18,4,0,0,0,0,0,0,0,0,0,0.030910531,0.015455265,0.036197751,0.134169828,0.783266626,0,0,0,0,0 +escort,FALSE,19,1,0,0,0.015759767,0.084811588,0,0.002872924,0,0.006556512,0.028956925,0.008237531,0,0.012966642,0.041318552,0.134584946,0.663934612,0,0,0,0 +escort,FALSE,19,2,0,0,0,0.041554494,0,0,0,0.005100141,0.012765195,0.005414707,0,0.027095562,0.040399,0.160510182,0.707160719,0,0,0,0 +escort,FALSE,19,3,0,0,0,0.042762147,0,0,0,0,0,0,0,0.118635541,0.138902724,0.131182018,0.568517571,0,0,0,0 +escort,FALSE,19,4,0,0,0,0,0,0,0,0,0,0,0,0,0.033575497,0.22070458,0.745719923,0,0,0,0 +escort,FALSE,20,1,0,0,0,0,0.076554131,0,0.004387939,0,0.005379578,0,0,0.005770825,0.013203816,0.052748034,0.038731746,0.80322393,0,0,0 +escort,FALSE,20,2,0,0,0,0,0,0,0.012675397,0,0,0,0.015539935,0,0.0372498,0.038141734,0.263200874,0.63319226,0,0,0 +escort,FALSE,20,3,0,0,0,0,0,0,0,0,0,0,0,0,0.142988825,0.070710819,0.050794946,0.73550541,0,0,0 +escort,FALSE,20,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0.054259213,0.205166313,0.740574475,0,0,0 +escort,FALSE,21,1,0,0,0,0.009094963,0.016533621,0,0,0,0,0.037489891,0.01972214,0.048167746,0,0.021841243,0.064693921,0.167744598,0.614711876,0,0 +escort,FALSE,21,2,0,0,0.010099315,0,0,0.041511619,0,0,0.014099016,0.047958493,0,0,0.074669665,0,0.04646442,0.263279058,0.501918415,0,0 +escort,FALSE,21,3,0,0,0.017776541,0,0,0,0,0,0,0,0.024816708,0,0.07306763,0.131431527,0.035447508,0.193292186,0.5241679,0,0 +escort,FALSE,21,4,0,0,0,0,0,0,0,0,0,0,0,0.022628167,0,0.052756196,0.032321457,0.080116339,0.812177841,0,0 +escort,FALSE,22,1,0,0,0,0.113172185,0,0,0,0,0,0.026397261,0.044886063,0,0,0.019218468,0.004386306,0.028722261,0.247924763,0.515292694,0 +escort,FALSE,22,2,0,0,0,0,0,0,0.18017321,0,0,0,0,0.074732757,0,0.107022619,0.042577452,0.038743506,0.038743506,0.518006951,0 +escort,FALSE,22,3,0,0,0,0,0,0,0.267409489,0,0,0,0,0,0,0,0.015267396,0.143659747,0.183067852,0.390595517,0 +escort,FALSE,22,4,0,0,0,0,0,0,0,0.234024187,0.234024187,0,0,0,0,0,0,0,0.303429308,0.228522318,0 +escort,FALSE,23,1,0,0,0,0,0,0,0,0.008127027,0.007835463,0.151355656,0,0.052450125,0.03651837,0.092153785,0.022741195,0,0.087045131,0.09410699,0.447666258 +escort,FALSE,23,2,0,0,0,0,0,0,0,0.038717113,0,0.014072799,0.013520577,0.321560091,0.117135518,0.10301486,0.065001842,0,0.046587075,0.02971575,0.250674374 +escort,FALSE,23,3,0,0,0,0,0,0,0,0,0,0,0.026894061,0.13703111,0,0.082687611,0.04923207,0,0.121213706,0.200076012,0.38286543 +escort,FALSE,23,4,0,0,0,0,0,0,0,0,0,0,0.049644185,0,0,0,0,0,0.09087828,0.241408525,0.61806901 +shopping,TRUE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,TRUE,5,2,0,0.18855969,0.026231205,0,0.018666624,0.036855114,0.01579057,0.02877734,0,0.008686294,0.03735935,0.062874703,0.02993166,0.13469908,0.360321567,0.051246804,0,0,0 +shopping,TRUE,5,3,0,0,0,0,0.061551337,0,0.071672554,0.060629628,0,0,0.091646938,0.65884087,0,0,0,0.055658673,0,0,0 +shopping,TRUE,5,4,0,0,0,0,0,0,0.063047092,0,0,0.063047092,0,0.063047092,0.096265448,0.600570816,0,0.05701123,0,0,0.05701123 +shopping,TRUE,6,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,TRUE,6,2,0,0.236185322,0.189345656,0.027307243,0,0.09795574,0.025679731,0.06524777,0,0.065782608,0.146681657,0.061307682,0.084506592,0,0,0,0,0,0 +shopping,TRUE,6,3,0,0.122362042,0,0.056125397,0,0.3786476,0,0,0.104941475,0,0,0.337923485,0,0,0,0,0,0,0 +shopping,TRUE,6,4,0,0,0,0,0,0.333126,0,0.333126,0,0,0,0.215517962,0.061611625,0.056618413,0,0,0,0,0 +shopping,TRUE,7,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,TRUE,7,2,0,0,0.137784762,0.347610842,0.133435005,0.027404455,0.039144758,0.071879163,0.050738746,0,0.035619826,0.112566834,0,0.017941118,0.01764776,0.008226732,0,0,0 +shopping,TRUE,7,3,0,0,0.118039813,0.173078319,0.187104935,0.14629093,0.052634804,0.10898427,0,0,0,0.168712159,0.045154769,0,0,0,0,0,0 +shopping,TRUE,7,4,0,0,0,0.044071544,0,0.113245235,0,0,0,0,0.055926536,0.110694997,0.261835563,0.414226125,0,0,0,0,0 +shopping,TRUE,8,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,TRUE,8,2,0,0,0,0.216420344,0.444754798,0.146005729,0.070193472,0.027780288,0.022919028,0,0.028031874,0,0.017321534,0.012974919,0,0,0,0.013598014,0 +shopping,TRUE,8,3,0,0,0,0.11915052,0.47354413,0.131084867,0.131912474,0.029942334,0.092204361,0.012421891,0,0,0,0.009739424,0,0,0,0,0 +shopping,TRUE,8,4,0,0,0,0.091488151,0.546318896,0.031542872,0.035173262,0.043158455,0.069562754,0.074293154,0.014133102,0.01007907,0.063090109,0.011081104,0,0.01007907,0,0,0 +shopping,TRUE,9,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,TRUE,9,2,0,0,0,0,0.25829748,0.338424677,0.195615866,0.063977369,0.037499937,0.014738329,0.047325307,0,0.015434424,0.020988402,0.007698208,0,0,0,0 +shopping,TRUE,9,3,0,0,0,0,0.092189784,0.255069356,0.282966449,0.075774276,0.085242805,0.057005967,0.019307332,0.104848677,0,0.027595353,0,0,0,0,0 +shopping,TRUE,9,4,0,0,0,0,0,0.086253583,0.235736082,0.217929307,0.026367245,0.066851523,0.150316009,0.167128809,0,0.049417443,0,0,0,0,0 +shopping,TRUE,10,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,TRUE,10,2,0,0,0,0,0,0.447429351,0.377114876,0.1219042,0.01784823,0.022881298,0.007112195,0.00570985,0,0,0,0,0,0,0 +shopping,TRUE,10,3,0,0,0,0,0,0.203895878,0.380391288,0.125413278,0.121084198,0.097085986,0.03993943,0.032189942,0,0,0,0,0,0,0 +shopping,TRUE,10,4,0,0,0,0,0,0.026436932,0.286895016,0.076810524,0.38619219,0.152227751,0.048029261,0,0.023408325,0,0,0,0,0,0 +shopping,TRUE,11,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,TRUE,11,2,0,0,0,0,0,0,0.321289054,0.351540642,0.130487047,0.150332918,0.014224049,0.004332814,0.027793477,0,0,0,0,0,0 +shopping,TRUE,11,3,0,0,0,0,0,0,0.22652124,0.229119163,0.279822494,0.140263855,0.09076511,0.017983211,0,0.015524928,0,0,0,0,0 +shopping,TRUE,11,4,0,0,0,0,0,0,0.060435728,0,0.337860558,0.382359867,0.089042433,0.089042433,0,0,0,0.041258981,0,0,0 +shopping,TRUE,12,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +shopping,TRUE,12,2,0,0,0,0,0,0,0,0.327958916,0.465492803,0.141109297,0.020542537,0.022498994,0.01140431,0.010993144,0,0,0,0,0 +shopping,TRUE,12,3,0,0,0,0,0,0,0,0.178317517,0.451517182,0.27737762,0.065198536,0,0.009801894,0.017787251,0,0,0,0,0 +shopping,TRUE,12,4,0,0,0,0,0,0,0,0,0.213180964,0.240910483,0.152246297,0.393662256,0,0,0,0,0,0,0 +shopping,TRUE,13,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +shopping,TRUE,13,2,0,0,0,0,0,0,0,0,0.508107696,0.321685937,0.081799219,0.061327596,0.027079551,0,0,0,0,0,0 +shopping,TRUE,13,3,0,0,0,0,0,0,0,0,0.177195753,0.267607099,0.084531289,0.424560684,0.014787439,0.031317737,0,0,0,0,0 +shopping,TRUE,13,4,0,0,0,0,0,0,0,0,0.263218395,0.402482495,0.061208389,0.185818041,0,0,0,0.087272681,0,0,0 +shopping,TRUE,14,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +shopping,TRUE,14,2,0,0,0,0,0,0,0,0,0,0.438870825,0.372372041,0.160848114,0.021826983,0,0,0.006082036,0,0,0 +shopping,TRUE,14,3,0,0,0,0,0,0,0,0,0,0.017173884,0.628449853,0.104128183,0.031161272,0,0,0.10714611,0.111940698,0,0 +shopping,TRUE,14,4,0,0,0,0,0,0,0,0,0,0,0.490831445,0,0,0,0,0.254584278,0.254584278,0,0 +shopping,TRUE,15,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +shopping,TRUE,15,2,0,0,0,0,0,0,0,0,0,0,0.261294755,0.632140733,0.068294747,0.038269765,0,0,0,0,0 +shopping,TRUE,15,3,0,0,0,0,0,0,0,0,0,0,0.150837677,0.364045291,0.292150535,0.06771696,0,0.125249537,0,0,0 +shopping,TRUE,15,4,0,0,0,0,0,0,0,0,0,0,0,0.36746411,0,0.075770875,0,0.278382507,0.278382507,0,0 +shopping,TRUE,16,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +shopping,TRUE,16,2,0,0,0,0,0,0,0,0,0,0,0,0.554781367,0.360878736,0.067834102,0.016505795,0,0,0,0 +shopping,TRUE,16,3,0,0,0,0,0,0,0,0,0,0,0,0.327593582,0.637795928,0.034610489,0,0,0,0,0 +shopping,TRUE,16,4,0,0,0,0,0,0,0,0,0,0,0,0.076274354,0.757840172,0.055295158,0.110590316,0,0,0,0 +shopping,TRUE,17,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +shopping,TRUE,17,2,0,0,0,0,0,0,0,0,0,0,0,0,0.281133857,0.595643382,0.100047971,0,0.023174789,0,0 +shopping,TRUE,17,3,0,0,0,0,0,0,0,0,0,0,0,0,0.517896269,0.345741974,0.070632988,0,0,0.065728769,0 +shopping,TRUE,17,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0.783800606,0,0.072066465,0.144132929,0,0 +shopping,TRUE,18,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +shopping,TRUE,18,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0.299407159,0.536590408,0.150080831,0.013921602,0,0 +shopping,TRUE,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0.192023096,0.807976904,0,0,0,0 +shopping,TRUE,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +shopping,TRUE,19,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +shopping,TRUE,19,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.221357455,0.693718463,0.084924082,0,0 +shopping,TRUE,19,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +shopping,TRUE,19,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +shopping,TRUE,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +shopping,TRUE,20,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.905321875,0.094678125,0,0 +shopping,TRUE,20,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +shopping,TRUE,20,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +shopping,TRUE,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +shopping,TRUE,21,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.768749763,0.231250237,0 +shopping,TRUE,21,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +shopping,TRUE,21,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +shopping,TRUE,22,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +shopping,TRUE,22,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +shopping,TRUE,22,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +shopping,TRUE,22,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +shopping,TRUE,23,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +shopping,TRUE,23,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +shopping,TRUE,23,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +shopping,TRUE,23,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +shopping,FALSE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,5,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,5,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,6,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,6,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,6,3,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,6,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,7,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,7,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,7,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,7,4,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,8,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,8,2,0,0,0.057856159,0.942143841,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,8,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,8,4,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,9,1,0,0,0,0.063004812,0.936995188,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,9,2,0,0,0,0.215154916,0.784845084,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,9,3,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,9,4,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,10,1,0,0,0,0.034621691,0.199730362,0.765647947,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,10,2,0,0,0,0.013947823,0.249445429,0.736606748,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,10,3,0,0,0,0,0.263792407,0.736207593,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,10,4,0,0,0,0,0.190842252,0.809157748,0,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,11,1,0,0,0,0,0.017620786,0.158923567,0.823455647,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,11,2,0,0,0,0,0.004541602,0.230049175,0.765409223,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,11,3,0,0,0,0,0,0.338910752,0.661089248,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,11,4,0,0,0,0,0,0.150257604,0.849742396,0,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,12,1,0,0,0.002514383,0,0.039915577,0.051276757,0.273727641,0.632565641,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,12,2,0,0,0,0,0.039730806,0.073816678,0.261462334,0.624990182,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,12,3,0,0,0,0,0.004430216,0.044433351,0.292333728,0.658802706,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,12,4,0,0,0,0,0,0.035609316,0.240024471,0.724366213,0,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,13,1,0,0,0,0,0.002652468,0.017076075,0.03891727,0.241051111,0.700303076,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,13,2,0,0,0,0,0.008356207,0.019728013,0.123359666,0.171778982,0.676777133,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,13,3,0,0,0,0,0.019588158,0,0.046245315,0.40772273,0.526443797,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,13,4,0,0,0,0,0.025743876,0.051487752,0.032165405,0.12492976,0.765673208,0,0,0,0,0,0,0,0,0,0 +shopping,FALSE,14,1,0,0,0,0.014322812,0.008308251,0.005594512,0.016143904,0.130012933,0.19330349,0.632314098,0,0,0,0,0,0,0,0,0 +shopping,FALSE,14,2,0,0,0,0.005506763,0.021606723,0.003403522,0.013852092,0.106618856,0.339860692,0.509151352,0,0,0,0,0,0,0,0,0 +shopping,FALSE,14,3,0,0,0,0.011027918,0,0.003096348,0.058586882,0.104167817,0.217735941,0.605385093,0,0,0,0,0,0,0,0,0 +shopping,FALSE,14,4,0,0,0,0.01227549,0,0.019168758,0.003446634,0.105336725,0.267971535,0.591800858,0,0,0,0,0,0,0,0,0 +shopping,FALSE,15,1,0,0,0,0,0.004254425,0.009138,0.019091237,0.013981558,0.039120881,0.34948947,0.564924428,0,0,0,0,0,0,0,0 +shopping,FALSE,15,2,0,0,0,0,0.001627899,0.009215496,0.004903293,0.002308669,0.07302082,0.221873866,0.687049956,0,0,0,0,0,0,0,0 +shopping,FALSE,15,3,0,0,0,0,0.003142874,0,0.025204014,0,0.04008905,0.235602582,0.69596148,0,0,0,0,0,0,0,0 +shopping,FALSE,15,4,0,0,0,0,0,0,0.004328876,0.008657753,0,0.285614869,0.701398502,0,0,0,0,0,0,0,0 +shopping,FALSE,16,1,0,0,0,0.000878576,0.003497576,0.021588157,0.009216937,0.008217315,0.002448233,0.048046219,0.232893086,0.673213901,0,0,0,0,0,0,0 +shopping,FALSE,16,2,0,0,0,0,0,0.035847568,0.011510797,0.014922592,0.020904683,0.052635454,0.243160325,0.62101858,0,0,0,0,0,0,0 +shopping,FALSE,16,3,0,0,0,0,0,0.051361483,0.00311995,0,0.051491012,0.042960512,0.192617192,0.658449851,0,0,0,0,0,0,0 +shopping,FALSE,16,4,0,0,0,0,0,0.046465728,0.002556214,0.025713434,0.038861358,0.073644993,0.248297436,0.564460837,0,0,0,0,0,0,0 +shopping,FALSE,17,1,0,0.002208578,0.009311633,0.01738702,0.001331755,0.005016926,0.003171846,0.006879148,0.001436793,0.027480637,0.058941124,0.29462051,0.572214029,0,0,0,0,0,0 +shopping,FALSE,17,2,0,0,0,0,0,0,0.010344283,0.037939171,0.039422982,0.026045212,0.06114443,0.190229666,0.634874255,0,0,0,0,0,0 +shopping,FALSE,17,3,0,0,0,0,0.007721229,0,0.011554543,0.070232976,0.032812162,0.025350429,0.070540072,0.236685334,0.545103256,0,0,0,0,0,0 +shopping,FALSE,17,4,0,0,0,0,0,0.006990598,0.033455447,0.006990598,0,0.064675896,0.055525232,0.171396816,0.660965415,0,0,0,0,0,0 +shopping,FALSE,18,1,0,0.033355807,0,0.001892316,0.00090772,0.004904866,0.001167821,0.016722263,0.003141548,0.002779365,0.024569171,0.061842541,0.271632599,0.577083981,0,0,0,0,0 +shopping,FALSE,18,2,0,0.075251856,0,0.017407741,0,0,0.005067103,0.012905849,0.043130871,0.028315061,0.006542046,0.109303095,0.166027278,0.536049102,0,0,0,0,0 +shopping,FALSE,18,3,0,0,0,0,0,0,0,0,0,0.066490049,0.057249304,0.237270804,0.359314757,0.279675086,0,0,0,0,0 +shopping,FALSE,18,4,0,0,0,0,0,0,0.007859239,0,0.011296648,0.003929619,0.099720544,0.061193285,0.240312145,0.575688521,0,0,0,0,0 +shopping,FALSE,19,1,0,0.002312931,0.007027556,0.00055146,0,0.020661977,0,0,0.011821234,0.002688782,0.004292928,0.007532001,0.051155819,0.156901174,0.735054139,0,0,0,0 +shopping,FALSE,19,2,0,0,0,0,0,0,0,0.003320994,0.005290597,0.01358355,0.003788453,0.020449742,0.075630163,0.221134543,0.656801959,0,0,0,0 +shopping,FALSE,19,3,0,0,0,0,0,0,0.014614817,0,0,0.020347906,0.008733406,0,0.047735668,0.374113208,0.534454996,0,0,0,0 +shopping,FALSE,19,4,0,0,0,0,0,0,0,0,0,0,0.020864671,0.058211406,0.120273738,0.204544879,0.596105306,0,0,0,0 +shopping,FALSE,20,1,0,0,0,0,0,0.001536146,0,0.001675312,0,0,0,0,0,0.047561031,0.181509603,0.767717908,0,0,0 +shopping,FALSE,20,2,0,0,0,0,0,0.00331683,0,0.004518272,0.00566615,0,0.002748233,0,0.008286949,0.051482817,0.259536082,0.664444667,0,0,0 +shopping,FALSE,20,3,0,0,0,0,0,0,0,0.011858233,0.008705041,0,0.022083602,0.018110733,0,0.035127515,0.143310213,0.760804664,0,0,0 +shopping,FALSE,20,4,0,0,0,0,0,0,0,0,0,0,0,0.03498938,0.040641133,0.145381408,0.371268099,0.407719981,0,0,0 +shopping,FALSE,21,1,0,0,0,0,0,0,0,0.004266615,0.002430883,0,0.007940168,0.009395117,0.021163822,0.046202149,0.053837474,0.173465177,0.681298593,0,0 +shopping,FALSE,21,2,0,0,0,0,0,0,0.007985058,0.003444064,0.007416145,0,0.004827496,0.003843961,0.059108441,0.050308287,0.078478176,0.182109604,0.602478768,0,0 +shopping,FALSE,21,3,0,0,0,0,0,0,0,0,0.037797058,0.007828278,0.02376667,0.011687609,0,0.020240379,0.189418946,0.098165754,0.611095305,0,0 +shopping,FALSE,21,4,0,0,0,0,0,0,0,0,0,0.019033172,0,0.01121107,0.036432132,0.018720166,0.031263843,0.186160383,0.697179234,0,0 +shopping,FALSE,22,1,0,0,0,0,0,0.018041153,0,0,0,0,0,0,0.009811009,0.008718506,0.044707222,0.097289219,0.453480605,0.367952287,0 +shopping,FALSE,22,2,0,0,0,0,0,0.014478651,0,0,0.00946373,0,0,0.015817118,0.022169677,0.014478651,0,0.0282764,0.258592224,0.63672355,0 +shopping,FALSE,22,3,0,0,0,0,0,0,0,0,0.017617342,0.054918813,0,0,0,0.029444584,0.095176163,0,0,0.802843098,0 +shopping,FALSE,22,4,0,0,0,0,0,0,0,0,0.020680151,0,0,0.158687133,0,0.087459292,0.073575862,0.034563581,0.293241585,0.331792395,0 +shopping,FALSE,23,1,0,0,0,0.023821741,0,0,0,0.039038004,0.026879421,0,0.010904146,0.018269598,0.019509677,0.079126477,0.035829398,0.029321261,0,0.084296742,0.633003535 +shopping,FALSE,23,2,0,0.103799266,0,0,0.011152724,0,0,0.015806724,0.046340267,0.023976697,0.037355147,0,0.054819521,0.059060036,0.061565304,0.051303212,0.00884805,0.147229688,0.378743364 +shopping,FALSE,23,3,0,0,0,0,0.155683525,0,0,0,0.034179578,0,0,0.080880151,0,0.080591686,0.03920938,0.158345959,0.053129458,0.120909369,0.277070893 +shopping,FALSE,23,4,0,0,0,0,0,0.157154735,0.078577368,0.196443419,0.047914328,0.039288684,0.12397869,0.009075333,0,0.026776309,0.014018049,0.026776309,0.008914443,0.067449234,0.2036331 +othmaint,TRUE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,TRUE,5,2,0,0.040658727,0.120399874,0.213344233,0.111017831,0.079889013,0.042291218,0,0.204453217,0,0,0.104955464,0.082990423,0,0,0,0,0,0 +othmaint,TRUE,5,3,0,0,0,0,0,0,0,0.287213384,0,0,0,0,0.712786616,0,0,0,0,0,0 +othmaint,TRUE,5,4,0,0,0,0,0,0,0,0,0.124355516,0.248711031,0,0,0.105129078,0,0.521804375,0,0,0,0 +othmaint,TRUE,6,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,TRUE,6,2,0,0,0.235488214,0.357403945,0.125753019,0,0,0.078259791,0,0.046555016,0.11357777,0.042962245,0,0,0,0,0,0,0 +othmaint,TRUE,6,3,0,0,0.326226519,0,0,0,0,0.174974691,0,0.373408666,0.125390124,0,0,0,0,0,0,0,0 +othmaint,TRUE,6,4,0,0,0,0,0,0,0.051430893,0.051430893,0,0.213968684,0.153518801,0.186667766,0.102982298,0.145655522,0,0.042793737,0.051551405,0,0 +othmaint,TRUE,7,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,TRUE,7,2,0,0,0.161965305,0.560535311,0.143218808,0.033324008,0.013918476,0.026127179,0.005375436,0,0.011132734,0.01156894,0.02310162,0,0.009732183,0,0,0,0 +othmaint,TRUE,7,3,0,0,0.113525478,0.598967516,0.089069194,0.080738894,0,0.030379017,0,0,0.0168487,0.017349938,0.019216267,0.018737763,0,0,0.015167234,0,0 +othmaint,TRUE,7,4,0,0,0.067302976,0.204351658,0.170979792,0.399761316,0.008551266,0.113238461,0,0,0,0,0,0.035814532,0,0,0,0,0 +othmaint,TRUE,8,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,TRUE,8,2,0,0,0,0.275563345,0.484065773,0.083338937,0.065284531,0.034854754,0.014700638,0.02595601,0.016236011,0,0,0,0,0,0,0,0 +othmaint,TRUE,8,3,0,0,0,0.256465635,0.196396681,0.177854408,0.122055686,0.028927661,0.08283666,0.079901924,0.043539857,0.012021488,0,0,0,0,0,0,0 +othmaint,TRUE,8,4,0,0,0,0,0.028047731,0,0.350951603,0,0.149252856,0.30289175,0,0.04635913,0.122496929,0,0,0,0,0,0 +othmaint,TRUE,9,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,TRUE,9,2,0,0,0,0,0.230097736,0.368638076,0.127385774,0.016744897,0.150776775,0,0,0.007474052,0.098882689,0,0,0,0,0,0 +othmaint,TRUE,9,3,0,0,0,0,0,0.231740286,0.127213569,0.112305301,0.189734694,0.10677054,0.198766593,0.033469018,0,0,0,0,0,0,0 +othmaint,TRUE,9,4,0,0,0,0,0,0,0.34116944,0,0.583836564,0.074993995,0,0,0,0,0,0,0,0,0 +othmaint,TRUE,10,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,TRUE,10,2,0,0,0,0,0,0.286259076,0.537234442,0.142887206,0.033619275,0,0,0,0,0,0,0,0,0,0 +othmaint,TRUE,10,3,0,0,0,0,0,0.164777982,0.52409087,0.14628494,0.049989666,0,0.114856542,0,0,0,0,0,0,0,0 +othmaint,TRUE,10,4,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +othmaint,TRUE,11,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,TRUE,11,2,0,0,0,0,0,0,0.473598812,0.258143996,0.104686693,0.141192999,0.022377501,0,0,0,0,0,0,0,0 +othmaint,TRUE,11,3,0,0,0,0,0,0,0.72551892,0.190277137,0.084203943,0,0,0,0,0,0,0,0,0,0 +othmaint,TRUE,11,4,0,0,0,0,0,0,0,0,0,0.305927706,0.347036147,0,0,0,0,0,0.347036147,0,0 +othmaint,TRUE,12,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +othmaint,TRUE,12,2,0,0,0,0,0,0,0,0.545682141,0.314476787,0.053501749,0.03851823,0.047821093,0,0,0,0,0,0,0 +othmaint,TRUE,12,3,0,0,0,0,0,0,0,0.214651848,0.46388943,0.061966411,0.132775585,0.126716726,0,0,0,0,0,0,0 +othmaint,TRUE,12,4,0,0,0,0,0,0,0,0,0.127956328,0,0,0.576495171,0,0.295548501,0,0,0,0,0 +othmaint,TRUE,13,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +othmaint,TRUE,13,2,0,0,0,0,0,0,0,0,0.323941314,0.585102169,0.090956518,0,0,0,0,0,0,0,0 +othmaint,TRUE,13,3,0,0,0,0,0,0,0,0,0.072453359,0.780993759,0.146552882,0,0,0,0,0,0,0,0 +othmaint,TRUE,13,4,0,0,0,0,0,0,0,0,0,0.222472025,0.777527975,0,0,0,0,0,0,0,0 +othmaint,TRUE,14,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +othmaint,TRUE,14,2,0,0,0,0,0,0,0,0,0,0.256222437,0.654201082,0.071103851,0.01847263,0,0,0,0,0,0 +othmaint,TRUE,14,3,0,0,0,0,0,0,0,0,0,0.11860694,0.44971127,0.431681789,0,0,0,0,0,0,0 +othmaint,TRUE,14,4,0,0,0,0,0,0,0,0,0,0,0.436444767,0.563555233,0,0,0,0,0,0,0 +othmaint,TRUE,15,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +othmaint,TRUE,15,2,0,0,0,0,0,0,0,0,0,0,0.593763081,0.406236919,0,0,0,0,0,0,0 +othmaint,TRUE,15,3,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +othmaint,TRUE,15,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +othmaint,TRUE,16,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +othmaint,TRUE,16,2,0,0,0,0,0,0,0,0,0,0,0,0.854510215,0.145489785,0,0,0,0,0,0 +othmaint,TRUE,16,3,0,0,0,0,0,0,0,0,0,0,0,0.724085091,0,0.275914909,0,0,0,0,0 +othmaint,TRUE,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +othmaint,TRUE,17,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +othmaint,TRUE,17,2,0,0,0,0,0,0,0,0,0,0,0,0,0.172124075,0.213012548,0.614863377,0,0,0,0 +othmaint,TRUE,17,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +othmaint,TRUE,17,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +othmaint,TRUE,18,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +othmaint,TRUE,18,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0.098642817,0.901357183,0,0,0,0 +othmaint,TRUE,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +othmaint,TRUE,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +othmaint,TRUE,19,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +othmaint,TRUE,19,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.270651613,0.600738159,0.128610228,0,0 +othmaint,TRUE,19,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +othmaint,TRUE,19,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +othmaint,TRUE,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +othmaint,TRUE,20,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.771681706,0,0.228318294,0 +othmaint,TRUE,20,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +othmaint,TRUE,20,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +othmaint,TRUE,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +othmaint,TRUE,21,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +othmaint,TRUE,21,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +othmaint,TRUE,21,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +othmaint,TRUE,22,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +othmaint,TRUE,22,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +othmaint,TRUE,22,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +othmaint,TRUE,22,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +othmaint,TRUE,23,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +othmaint,TRUE,23,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +othmaint,TRUE,23,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +othmaint,TRUE,23,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +othmaint,FALSE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,5,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,5,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,6,1,0.09071969,0.90928031,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,6,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,6,3,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,6,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,7,1,0,0.075063017,0.924936983,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,7,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,7,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,7,4,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,8,1,0,0,0.072655068,0.927344932,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,8,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,8,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,8,4,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,9,1,0,0,0.013631489,0.161967148,0.824401363,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,9,2,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,9,3,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,9,4,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,10,1,0,0,0,0.037502157,0.312567208,0.649930634,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,10,2,0,0,0,0,0.275988767,0.724011233,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,10,3,0,0,0,0,0.15552038,0.84447962,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,10,4,0,0,0,0,0.144245586,0.855754414,0,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,11,1,0,0,0,0,0.03338987,0.26489836,0.70171177,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,11,2,0,0,0,0,0.010989916,0.227634382,0.761375703,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,11,3,0,0,0,0,0,0.026011355,0.973988645,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,11,4,0,0,0,0,0,0.107851024,0.892148976,0,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,12,1,0,0,0,0.010158031,0.022913155,0.102307429,0.377078058,0.487543327,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,12,2,0,0,0,0,0,0.108745958,0.2159873,0.675266742,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,12,3,0,0,0,0,0,0.06065237,0.336243242,0.603104388,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,12,4,0,0,0,0,0,0.013311396,0.19774252,0.788946084,0,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,13,1,0,0,0,0,0.031249299,0.047260258,0.081354892,0.353123741,0.48701181,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,13,2,0,0,0,0,0.036088554,0.047323035,0.099280114,0.282440914,0.534867384,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,13,3,0,0,0,0.022092503,0,0.023342697,0.218332277,0.130650891,0.605581632,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,13,4,0,0,0,0,0,0,0.007598622,0.247081366,0.745320012,0,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,14,1,0,0,0,0,0.008432907,0.019241437,0.053781383,0.07753638,0.180423206,0.660584686,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,14,2,0,0,0,0,0,0.014889748,0.058818026,0.03592279,0.279517106,0.610852331,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,14,3,0,0,0,0,0,0.025148147,0.044798265,0.019855411,0.184100242,0.726097934,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,14,4,0,0,0,0,0,0.025559931,0.089028487,0.037908626,0.118966776,0.72853618,0,0,0,0,0,0,0,0,0 +othmaint,FALSE,15,1,0,0,0.014080554,0,0.010260757,0.018416064,0.003200712,0.030725966,0.060405447,0.322996101,0.5399144,0,0,0,0,0,0,0,0 +othmaint,FALSE,15,2,0,0,0,0.007837984,0.007663278,0.013198261,0,0.009670767,0.043030366,0.15942745,0.759171894,0,0,0,0,0,0,0,0 +othmaint,FALSE,15,3,0,0,0,0,0.009630972,0,0.006337143,0.101481335,0.066736017,0.096321205,0.719493328,0,0,0,0,0,0,0,0 +othmaint,FALSE,15,4,0,0,0,0,0,0,0,0.013528329,0.062228479,0.089319428,0.834923764,0,0,0,0,0,0,0,0 +othmaint,FALSE,16,1,0,0,0.006200413,0.004986933,0,0.010337749,0.015781258,0.022349724,0.011320009,0.0610877,0.263854949,0.604081265,0,0,0,0,0,0,0 +othmaint,FALSE,16,2,0,0,0.006875165,0,0,0.004755274,0.004846065,0.041322108,0.062817829,0.084403941,0.210011072,0.584968544,0,0,0,0,0,0,0 +othmaint,FALSE,16,3,0,0,0,0,0,0.003750011,0,0.038367203,0,0.081124439,0.173167838,0.703590508,0,0,0,0,0,0,0 +othmaint,FALSE,16,4,0,0,0,0,0,0,0,0.012408147,0.035652064,0.083467534,0.198538722,0.669933533,0,0,0,0,0,0,0 +othmaint,FALSE,17,1,0,0,0,0.020552867,0,0.005813725,0.002732148,0.008782581,0.005357107,0.029100301,0.080364833,0.302512654,0.544783785,0,0,0,0,0,0 +othmaint,FALSE,17,2,0,0,0,0,0.026548466,0.003679274,0.009319631,0,0.042518808,0.029889235,0.080550404,0.277668263,0.52982592,0,0,0,0,0,0 +othmaint,FALSE,17,3,0,0,0,0,0.009271174,0,0.054663157,0,0.016257561,0.01488333,0.09396777,0.266410029,0.544546979,0,0,0,0,0,0 +othmaint,FALSE,17,4,0,0,0,0,0,0.007066116,0.007066116,0.06151997,0.066639666,0.049844639,0.033402711,0.146764167,0.627696614,0,0,0,0,0,0 +othmaint,FALSE,18,1,0,0,0.00220337,0.003892833,0.007889226,0.016688123,0.035048075,0.024546837,0,0.00815882,0.035392235,0.148091146,0.276111609,0.441977726,0,0,0,0,0 +othmaint,FALSE,18,2,0,0,0,0,0,0.065300384,0.006485915,0.052781714,0.048191377,0.040820218,0,0.162432484,0.05438396,0.569603948,0,0,0,0,0 +othmaint,FALSE,18,3,0,0,0,0,0.017320219,0.031548823,0.022330672,0.091457847,0,0.019713885,0.042008327,0.218018162,0.200579611,0.357022454,0,0,0,0,0 +othmaint,FALSE,18,4,0,0,0,0,0.016419136,0,0.00528573,0.020252478,0,0.100415264,0.03805733,0.105531305,0.176732756,0.537306,0,0,0,0,0 +othmaint,FALSE,19,1,0,0,0,0,0.010727452,0,0.008098901,0.019233131,0.013852404,0.004645853,0.013295603,0.080270768,0.078632583,0.187569198,0.583674107,0,0,0,0 +othmaint,FALSE,19,2,0,0,0,0,0.049239842,0.011428143,0,0,0.026241801,0.041108511,0.013964285,0.025063837,0,0.310631722,0.522321858,0,0,0,0 +othmaint,FALSE,19,3,0,0,0,0,0,0.086744587,0,0,0,0.016477125,0.041531547,0.015283398,0.017093713,0.105309634,0.717559996,0,0,0,0 +othmaint,FALSE,19,4,0,0,0,0,0,0.069764219,0.069764219,0,0,0.104847005,0,0.033271814,0.058783522,0.247218312,0.416350909,0,0,0,0 +othmaint,FALSE,20,1,0,0,0,0,0,0,0.01242339,0.005336417,0.044409284,0.029249865,0.011600679,0.028809843,0.016252507,0.030331787,0.287705325,0.533880904,0,0,0 +othmaint,FALSE,20,2,0,0,0,0,0,0,0,0,0.032990066,0.012593317,0,0.052304607,0.150427735,0.026510728,0.302582814,0.422590733,0,0,0 +othmaint,FALSE,20,3,0,0,0,0,0,0,0,0.023039668,0.024925805,0.022055308,0.053273572,0.028755337,0.017687898,0.157803915,0.245882825,0.426575672,0,0,0 +othmaint,FALSE,20,4,0,0,0,0,0,0,0,0.009174883,0.009174883,0.039703931,0.032564469,0.051766512,0.025425007,0.0614869,0.641240832,0.129462584,0,0,0 +othmaint,FALSE,21,1,0,0.025380051,0.006505038,0,0,0,0,0,0,0.034497668,0.005372141,0.00750697,0.322054018,0.02041747,0.056367039,0.277982219,0.243917386,0,0 +othmaint,FALSE,21,2,0,0,0,0,0.006399766,0.007749372,0,0,0,0.006917002,0,0.046305978,0.04149865,0,0.351103334,0.214319682,0.325706214,0,0 +othmaint,FALSE,21,3,0,0,0,0,0,0,0.011775898,0.022192712,0.017562682,0,0,0.024503537,0,0.080192747,0.349550204,0.39894732,0.095274901,0,0 +othmaint,FALSE,21,4,0,0,0,0,0,0,0.012259416,0,0.035363359,0.018283805,0.073556494,0.018283805,0.057647363,0.014844726,0.042237266,0.375692888,0.351830879,0,0 +othmaint,FALSE,22,1,0,0,0,0,0,0,0,0.056847728,0,0.047979687,0,0,0.057283827,0,0.024129278,0.031974532,0.16735598,0.614428968,0 +othmaint,FALSE,22,2,0,0,0,0,0,0,0,0,0.161289071,0.04650851,0,0,0.16212443,0.112102538,0,0,0.142577705,0.375397745,0 +othmaint,FALSE,22,3,0,0,0,0,0,0,0,0.110415007,0.068559987,0.152422919,0,0.063721526,0.10278041,0,0,0.094851272,0.058740936,0.348507943,0 +othmaint,FALSE,22,4,0,0,0,0,0,0,0,0.050912705,0.082525929,0,0.031613224,0.050912705,0.094839672,0.029382195,0.129047073,0.050912705,0.220800245,0.259053549,0 +othmaint,FALSE,23,1,0,0,0,0,0,0.010515377,0.025008268,0.032644118,0,0.085888154,0.049317135,0.011196407,0.007715287,0.054305418,0,0.074906459,0.182663286,0.082719875,0.383120217 +othmaint,FALSE,23,2,0,0,0,0,0,0,0,0.045673386,0.020160892,0.021413699,0,0.082142047,0.014090672,0.018059971,0,0.045974294,0.048093764,0.355409136,0.348982138 +othmaint,FALSE,23,3,0,0,0,0,0,0,0,0.080258013,0,0.073055546,0,0.075004948,0.081094174,0.069336389,0,0,0,0.041154495,0.580096435 +othmaint,FALSE,23,4,0,0,0,0,0,0,0,0.037448064,0,0.04959035,0.016530117,0.025234243,0.062464477,0.114901182,0,0.107371648,0.062464477,0.148912902,0.37508254 +eatout,TRUE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,TRUE,5,2,0.032538851,0.221324643,0,0.037815017,0,0,0,0.272525282,0,0,0.037088163,0.337745523,0.034547537,0,0.026414986,0,0,0,0 +eatout,TRUE,5,3,0,0,0,0.091639733,0,0,0,0,0,0,0,0.089878297,0,0.81848197,0,0,0,0,0 +eatout,TRUE,5,4,0,0,0,0,0,0,0,0,0.091478599,0,0,0,0,0.817042802,0.091478599,0,0,0,0 +eatout,TRUE,6,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,TRUE,6,2,0,0.10870266,0.506895447,0.175689689,0,0.026096466,0.034864499,0.082091899,0,0,0,0.025468279,0.040191062,0,0,0,0,0,0 +eatout,TRUE,6,3,0,0.035560115,0.306736608,0.286592598,0.030199993,0.042569681,0.056872474,0,0.028493363,0,0,0.212975168,0,0,0,0,0,0,0 +eatout,TRUE,6,4,0,0,0.211737696,0.322316501,0,0,0.220793367,0,0.051433567,0.096859434,0,0,0,0.096859434,0,0,0,0,0 +eatout,TRUE,7,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,TRUE,7,2,0,0,0.144455214,0.345929433,0,0,0.086477099,0.023160754,0,0.016780688,0,0.202260676,0.052439775,0.128496361,0,0,0,0,0 +eatout,TRUE,7,3,0,0,0.090126203,0.306912678,0,0.037918354,0.033462594,0.029845783,0,0,0,0,0.104315493,0,0,0.397418896,0,0,0 +eatout,TRUE,7,4,0,0,0,0.502373694,0,0,0,0.134316948,0,0,0.070995242,0,0.070995242,0,0.221318875,0,0,0,0 +eatout,TRUE,8,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,TRUE,8,2,0,0,0,0.287649201,0.258570068,0.118932282,0.154019597,0.040748722,0.016734567,0.048015509,0.013439765,0.016546263,0.014029864,0.031314162,0,0,0,0,0 +eatout,TRUE,8,3,0,0,0,0,0.251109552,0,0.113694476,0.124444727,0,0,0.229845517,0.061431783,0.219473946,0,0,0,0,0,0 +eatout,TRUE,8,4,0,0,0,0,0.493293189,0,0,0,0,0,0.506706811,0,0,0,0,0,0,0,0 +eatout,TRUE,9,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,TRUE,9,2,0,0,0,0,0.366854738,0.25501335,0.107900842,0.2287524,0,0,0,0,0,0.041478671,0,0,0,0,0 +eatout,TRUE,9,3,0,0,0,0,0.468297002,0.238514298,0.2931887,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,TRUE,9,4,0,0,0,0,0.109486993,0.574078888,0.280149843,0,0.036284276,0,0,0,0,0,0,0,0,0,0 +eatout,TRUE,10,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,TRUE,10,2,0,0,0,0,0,0.254832017,0.469238325,0.127193733,0.065540094,0.051245746,0,0,0,0,0.031950083,0,0,0,0 +eatout,TRUE,10,3,0,0,0,0,0,0.064871933,0.163184264,0.345964678,0.111369168,0.141300007,0,0.17330995,0,0,0,0,0,0,0 +eatout,TRUE,10,4,0,0,0,0,0,0,0.150728895,0,0.209592187,0.423337891,0,0,0,0.216341028,0,0,0,0,0 +eatout,TRUE,11,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,TRUE,11,2,0,0,0,0,0,0,0.370585753,0.485622052,0.060239142,0.042221954,0,0,0,0.020865964,0.020465134,0,0,0,0 +eatout,TRUE,11,3,0,0,0,0,0,0,0.269205736,0.405557054,0.185720764,0,0.076480268,0,0.063036179,0,0,0,0,0,0 +eatout,TRUE,11,4,0,0,0,0,0,0,0,0.351458157,0.487871427,0,0,0,0,0.160670416,0,0,0,0,0 +eatout,TRUE,12,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +eatout,TRUE,12,2,0,0,0,0,0,0,0,0.437792419,0.301451181,0.150311105,0.034236693,0.076208603,0,0,0,0,0,0,0 +eatout,TRUE,12,3,0,0,0,0,0,0,0,0.225370702,0.381329664,0.174766696,0,0,0,0.218532938,0,0,0,0,0 +eatout,TRUE,12,4,0,0,0,0,0,0,0,0,0.221247262,0.778752738,0,0,0,0,0,0,0,0,0 +eatout,TRUE,13,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +eatout,TRUE,13,2,0,0,0,0,0,0,0,0,0.139433765,0.241394197,0.366145988,0,0,0.25302605,0,0,0,0,0 +eatout,TRUE,13,3,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +eatout,TRUE,13,4,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +eatout,TRUE,14,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +eatout,TRUE,14,2,0,0,0,0,0,0,0,0,0,0.141560108,0.455484612,0.063533559,0.080474833,0.258946888,0,0,0,0,0 +eatout,TRUE,14,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +eatout,TRUE,14,4,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +eatout,TRUE,15,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +eatout,TRUE,15,2,0,0,0,0,0,0,0,0,0,0,0.175719201,0.491767111,0.304614961,0.027898728,0,0,0,0,0 +eatout,TRUE,15,3,0,0,0,0,0,0,0,0,0,0,0.115184007,0.113089502,0.771726491,0,0,0,0,0,0 +eatout,TRUE,15,4,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +eatout,TRUE,16,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +eatout,TRUE,16,2,0,0,0,0,0,0,0,0,0,0,0,0.081443842,0.569785792,0.258691473,0.048438646,0,0.041640248,0,0 +eatout,TRUE,16,3,0,0,0,0,0,0,0,0,0,0,0,0.14088832,0.169273542,0.138693404,0.551144734,0,0,0,0 +eatout,TRUE,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0.522722044,0,0,0.477277956,0,0,0 +eatout,TRUE,17,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +eatout,TRUE,17,2,0,0,0,0,0,0,0,0,0,0,0,0,0.360098415,0.452873013,0.139516873,0.047511698,0,0,0 +eatout,TRUE,17,3,0,0,0,0,0,0,0,0,0,0,0,0,0.107576639,0.186526017,0.560987927,0.144909417,0,0,0 +eatout,TRUE,17,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +eatout,TRUE,18,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +eatout,TRUE,18,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0.27451797,0.572984268,0.072163445,0,0.080334317,0 +eatout,TRUE,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0.497007208,0.502992792,0,0,0,0 +eatout,TRUE,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +eatout,TRUE,19,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +eatout,TRUE,19,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.537636417,0.462363583,0,0,0 +eatout,TRUE,19,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.328311347,0.671688653,0,0,0 +eatout,TRUE,19,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +eatout,TRUE,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +eatout,TRUE,20,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.916716515,0.083283485,0,0 +eatout,TRUE,20,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.726342035,0.273657965,0,0 +eatout,TRUE,20,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +eatout,TRUE,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +eatout,TRUE,21,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +eatout,TRUE,21,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +eatout,TRUE,21,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +eatout,TRUE,22,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +eatout,TRUE,22,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +eatout,TRUE,22,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +eatout,TRUE,22,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +eatout,TRUE,23,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +eatout,TRUE,23,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +eatout,TRUE,23,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +eatout,TRUE,23,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +eatout,FALSE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,5,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,5,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,6,1,0.034815481,0.965184519,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,6,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,6,3,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,6,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,7,1,0,0.199908855,0.800091145,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,7,2,0,0.833877769,0.166122231,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,7,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,7,4,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,8,1,0,0,0.215838535,0.784161465,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,8,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,8,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,8,4,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,9,1,0,0,0,0.157266378,0.842733622,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,9,2,0,0,0,0.335277961,0.664722039,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,9,3,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,9,4,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,10,1,0,0,0.033536748,0.02770012,0.155369348,0.783393784,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,10,2,0,0,0,0,0.173469452,0.826530548,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,10,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,10,4,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,11,1,0,0,0,0,0.091878183,0.12493006,0.783191757,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,11,2,0,0,0,0,0,0.096132235,0.903867765,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,11,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,11,4,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,12,1,0,0,0,0.037969228,0,0.031107149,0.035414324,0.895509299,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,12,2,0,0,0,0,0.02753672,0,0.149847323,0.822615958,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,12,3,0,0,0,0,0,0,0.258442104,0.741557896,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,12,4,0,0,0,0,0,0,0.333333333,0.666666667,0,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,13,1,0,0.01200688,0,0,0,0.039950927,0.008513584,0.137590949,0.80193766,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,13,2,0,0,0,0,0,0,0,0.394497458,0.605502542,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,13,3,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,13,4,0,0,0,0,0,0,0,0.367803297,0.632196703,0,0,0,0,0,0,0,0,0,0 +eatout,FALSE,14,1,0,0,0,0,0,0.006675471,0,0.049503213,0.303745574,0.640075741,0,0,0,0,0,0,0,0,0 +eatout,FALSE,14,2,0,0,0,0,0,0,0,0,0.279565462,0.720434538,0,0,0,0,0,0,0,0,0 +eatout,FALSE,14,3,0,0,0,0,0,0,0,0,0.289280673,0.710719327,0,0,0,0,0,0,0,0,0 +eatout,FALSE,14,4,0,0,0,0,0,0,0,0,0.17018646,0.82981354,0,0,0,0,0,0,0,0,0 +eatout,FALSE,15,1,0,0,0.012317448,0.011793684,0,0.032471192,0.017402541,0.031610182,0.061546974,0.401654713,0.431203266,0,0,0,0,0,0,0,0 +eatout,FALSE,15,2,0,0,0,0.020848495,0,0,0.031697312,0.022993537,0.09062564,0.216001966,0.617833051,0,0,0,0,0,0,0,0 +eatout,FALSE,15,3,0,0,0,0,0,0,0,0.046096862,0.044136725,0.455929483,0.45383693,0,0,0,0,0,0,0,0 +eatout,FALSE,15,4,0,0,0,0,0,0,0,0.053925006,0,0.080548958,0.865526035,0,0,0,0,0,0,0,0 +eatout,FALSE,16,1,0,0.029358275,0.006634587,0,0.008384768,0,0.022595474,0.011554952,0,0.018323185,0.344468391,0.558680369,0,0,0,0,0,0,0 +eatout,FALSE,16,2,0,0,0,0,0,0,0.023120402,0.115646001,0.052131074,0.053950104,0.19213634,0.563016078,0,0,0,0,0,0,0 +eatout,FALSE,16,3,0,0,0,0,0,0,0,0.058624219,0.059135643,0.033481644,0.029621972,0.819136522,0,0,0,0,0,0,0 +eatout,FALSE,16,4,0,0,0,0,0,0,0,0,0.079941236,0.063875591,0.228664833,0.62751834,0,0,0,0,0,0,0 +eatout,FALSE,17,1,0.008270503,0,0.011204931,0,0.012161696,0.009083295,0,0,0.008915709,0.010949503,0.019220416,0.424059428,0.496134519,0,0,0,0,0,0 +eatout,FALSE,17,2,0,0,0,0,0.009447942,0,0.059827266,0.109282601,0.010850987,0.012969818,0.170046907,0.153233152,0.474341327,0,0,0,0,0,0 +eatout,FALSE,17,3,0,0,0,0,0,0,0.020113077,0.088749328,0.011185398,0,0.071370427,0.323187311,0.485394459,0,0,0,0,0,0 +eatout,FALSE,17,4,0,0,0.038633648,0,0,0,0,0.019522201,0.039044403,0.062661272,0.092635226,0.060867571,0.68663568,0,0,0,0,0,0 +eatout,FALSE,18,1,0,0.00402747,0,0.002699769,0,0,0.003458022,0.004776748,0,0,0.007128847,0.022821634,0.560262038,0.394825471,0,0,0,0,0 +eatout,FALSE,18,2,0,0,0,0,0,0,0.025269691,0.053659728,0.018624541,0,0.015410135,0.096858434,0.303814033,0.486363437,0,0,0,0,0 +eatout,FALSE,18,3,0,0,0,0.027139705,0,0,0,0,0.025309856,0,0.041317372,0,0.193332635,0.712900432,0,0,0,0,0 +eatout,FALSE,18,4,0,0,0,0.062266496,0,0,0,0.124532992,0,0,0,0.02844882,0.160985,0.623766691,0,0,0,0,0 +eatout,FALSE,19,1,0,0,0,0.035093846,0,0,0,0.002763787,0,0,0.007972126,0,0.006835141,0.182451712,0.76488339,0,0,0,0 +eatout,FALSE,19,2,0,0,0,0,0,0,0,0.009338966,0.0084296,0.012320862,0,0.007858119,0.07102686,0.181093919,0.709931674,0,0,0,0 +eatout,FALSE,19,3,0,0,0.034695617,0,0,0,0,0,0,0,0,0,0,0.325056792,0.640247591,0,0,0,0 +eatout,FALSE,19,4,0,0,0,0.101411526,0,0,0,0,0,0,0,0,0,0.101411526,0.797176947,0,0,0,0 +eatout,FALSE,20,1,0,0,0,0,0.006246293,0,0,0.011507943,0,0,0.013654973,0,0.007223887,0.028421478,0.204476714,0.728468712,0,0,0 +eatout,FALSE,20,2,0,0,0,0,0,0,0,0.029002329,0.008684063,0.040035705,0,0,0.033841105,0.026844626,0.219230553,0.64236162,0,0,0 +eatout,FALSE,20,3,0,0,0,0,0.017457545,0,0,0,0,0,0,0.022170954,0.111461135,0.026492142,0.144444394,0.677973828,0,0,0 +eatout,FALSE,20,4,0,0,0,0,0,0,0,0,0.027884869,0,0,0.019560862,0.053861802,0.185282652,0.14594305,0.567466765,0,0,0 +eatout,FALSE,21,1,0,0,0,0,0,0,0.001992088,0,0,0,0,0,0.004171801,0.008609329,0.045440515,0.297500935,0.642285332,0,0 +eatout,FALSE,21,2,0,0,0,0,0,0,0,0.008825951,0,0,0,0,0,0,0.022560857,0.064662954,0.903950239,0,0 +eatout,FALSE,21,3,0,0,0,0,0,0,0,0,0.01925505,0,0,0,0,0,0.141712181,0.063571817,0.775460952,0,0 +eatout,FALSE,21,4,0,0,0,0,0,0,0,0,0,0.059643388,0.029821694,0.029821694,0.054589294,0.218357176,0,0.338629065,0.269137688,0,0 +eatout,FALSE,22,1,0,0.003832232,0.014433483,0.029367654,0,0,0,0,0,0,0,0,0,0.037886729,0.013545706,0.01688148,0.286440472,0.597612243,0 +eatout,FALSE,22,2,0,0,0,0.058773031,0.007875566,0,0.038790615,0,0,0,0,0,0,0.124436861,0.030453108,0.011388959,0.304645476,0.423636384,0 +eatout,FALSE,22,3,0,0.023843907,0,0,0.012800003,0,0,0,0.063045627,0,0,0,0,0.016739233,0.04949484,0.078783423,0.338585891,0.416707076,0 +eatout,FALSE,22,4,0,0,0,0,0,0,0,0,0,0,0.012407461,0.122224371,0.035520139,0.109039785,0,0.076367345,0.347441239,0.296999659,0 +eatout,FALSE,23,1,0,0,0,0,0,0,0,0.012371175,0,0.025704524,0,0.023327151,0,0.007669333,0.042011178,0.019479582,0.006261906,0.163786764,0.699388388 +eatout,FALSE,23,2,0,0,0,0,0,0,0,0,0.033721119,0.101287181,0,0.014308982,0,0,0.023495989,0.043546799,0.169610935,0.119773048,0.494255948 +eatout,FALSE,23,3,0,0,0,0,0,0,0,0,0,0.098543037,0,0,0,0,0,0.027420729,0.019663025,0.062014245,0.792358964 +eatout,FALSE,23,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.015339182,0.166441975,0.108428683,0.70979016 +social,TRUE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,TRUE,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0.163488477,0.72896704,0.107544483,0,0,0 +social,TRUE,5,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +social,TRUE,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +social,TRUE,6,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,TRUE,6,2,0,0.429301212,0.220838883,0,0,0.349859905,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,TRUE,6,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,TRUE,6,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,TRUE,7,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,TRUE,7,2,0,0,0.238446471,0.18847097,0.451233232,0.061171813,0,0,0,0,0,0.060677514,0,0,0,0,0,0,0 +social,TRUE,7,3,0,0,0.263472951,0,0.345559204,0.045763272,0.194319778,0,0,0,0.076482272,0.074402522,0,0,0,0,0,0,0 +social,TRUE,7,4,0,0,0,0,0.720034483,0,0,0,0,0,0,0,0,0.279965517,0,0,0,0,0 +social,TRUE,8,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,TRUE,8,2,0,0,0,0.254275275,0.460062202,0.285662524,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,TRUE,8,3,0,0,0,0,0.319310909,0,0.196475338,0,0.334528108,0,0,0.149685645,0,0,0,0,0,0,0 +social,TRUE,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0.654606666,0.345393334,0,0,0,0,0 +social,TRUE,9,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,TRUE,9,2,0,0,0,0,0.545721423,0.112625256,0.326444169,0.015209152,0,0,0,0,0,0,0,0,0,0,0 +social,TRUE,9,3,0,0,0,0,0.023262324,0.080080665,0.730468634,0.143870653,0.022317724,0,0,0,0,0,0,0,0,0,0 +social,TRUE,9,4,0,0,0,0,0,0.026826474,0.852263327,0,0,0,0,0.014490394,0,0,0.053209903,0.053209903,0,0,0 +social,TRUE,10,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,TRUE,10,2,0,0,0,0,0,0.151977255,0.519637411,0.191906468,0.085778382,0.050700484,0,0,0,0,0,0,0,0,0 +social,TRUE,10,3,0,0,0,0,0,0.046500192,0.658940192,0.178956942,0,0.115602674,0,0,0,0,0,0,0,0,0 +social,TRUE,10,4,0,0,0,0,0,0,0.204837475,0.204837475,0.204837475,0,0,0.128495859,0.256991717,0,0,0,0,0,0 +social,TRUE,11,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +social,TRUE,11,2,0,0,0,0,0,0,0.252313913,0.608752771,0.060673874,0.078259442,0,0,0,0,0,0,0,0,0 +social,TRUE,11,3,0,0,0,0,0,0,0,0.893087119,0,0,0.106912881,0,0,0,0,0,0,0,0 +social,TRUE,11,4,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +social,TRUE,12,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +social,TRUE,12,2,0,0,0,0,0,0,0,0.01555306,0.804005354,0.113032269,0.042952725,0.024456591,0,0,0,0,0,0,0 +social,TRUE,12,3,0,0,0,0,0,0,0,0,0.762673603,0.196684366,0,0.040642031,0,0,0,0,0,0,0 +social,TRUE,12,4,0,0,0,0,0,0,0,0,0.974582243,0.025417757,0,0,0,0,0,0,0,0,0 +social,TRUE,13,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +social,TRUE,13,2,0,0,0,0,0,0,0,0,0.666277769,0.215739994,0.117982237,0,0,0,0,0,0,0,0 +social,TRUE,13,3,0,0,0,0,0,0,0,0,0.20985109,0.290892068,0,0.499256842,0,0,0,0,0,0,0 +social,TRUE,13,4,0,0,0,0,0,0,0,0,0,0,0.27976381,0.48015746,0,0.24007873,0,0,0,0,0 +social,TRUE,14,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +social,TRUE,14,2,0,0,0,0,0,0,0,0,0,0.474250224,0.479544424,0.046205352,0,0,0,0,0,0,0 +social,TRUE,14,3,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +social,TRUE,14,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +social,TRUE,15,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +social,TRUE,15,2,0,0,0,0,0,0,0,0,0,0,0.415915716,0.304081655,0.122383721,0.157618908,0,0,0,0,0 +social,TRUE,15,3,0,0,0,0,0,0,0,0,0,0,0.149219919,0.262392987,0.163198885,0.364386422,0.060801787,0,0,0,0 +social,TRUE,15,4,0,0,0,0,0,0,0,0,0,0,0,0,0.382256993,0.20034388,0.20034388,0.217055247,0,0,0 +social,TRUE,16,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +social,TRUE,16,2,0,0,0,0,0,0,0,0,0,0,0,0.084972892,0.631896416,0.184989951,0.098140741,0,0,0,0 +social,TRUE,16,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0.566972184,0,0.433027816,0,0,0 +social,TRUE,16,4,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +social,TRUE,17,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +social,TRUE,17,2,0,0,0,0,0,0,0,0,0,0,0,0,0.153985008,0.442019825,0.287546211,0.116448956,0,0,0 +social,TRUE,17,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0.805041829,0.194958171,0,0,0,0 +social,TRUE,17,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0.386035694,0.613964306,0,0,0,0 +social,TRUE,18,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +social,TRUE,18,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0.415464544,0.466670617,0.11786484,0,0,0 +social,TRUE,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.480898747,0.519101253,0,0,0 +social,TRUE,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +social,TRUE,19,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +social,TRUE,19,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.492816592,0.382668005,0.124515403,0,0 +social,TRUE,19,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.296845882,0.703154118,0,0 +social,TRUE,19,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +social,TRUE,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +social,TRUE,20,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.180542587,0.819457413,0,0 +social,TRUE,20,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +social,TRUE,20,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +social,TRUE,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +social,TRUE,21,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.186441429,0.813558571 +social,TRUE,21,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +social,TRUE,21,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +social,TRUE,22,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +social,TRUE,22,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +social,TRUE,22,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +social,TRUE,22,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +social,TRUE,23,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +social,TRUE,23,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +social,TRUE,23,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +social,TRUE,23,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +social,FALSE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,5,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,5,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,6,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,6,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,6,3,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,6,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,7,1,0,0.175358533,0.824641467,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,7,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,7,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,7,4,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,8,1,0,0,0.02236387,0.97763613,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,8,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,8,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,8,4,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,9,1,0,0,0,0.461831955,0.538168045,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,9,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,9,3,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,9,4,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,10,1,0,0,0,0,0.168748059,0.831251941,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,10,2,0,0,0,0,0.100405941,0.899594059,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,10,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,10,4,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,11,1,0,0,0,0,0.02167612,0.606898663,0.371425217,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,11,2,0,0,0,0.025894331,0,0.076173851,0.897931818,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,11,3,0,0,0,0,0,0.0362574,0.9637426,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,11,4,0,0,0,0,0,0.666666667,0.333333333,0,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,12,1,0,0,0,0,0,0.040943046,0.339881423,0.619175531,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,12,2,0,0,0,0,0,0.055306785,0,0.944693215,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,12,3,0,0,0,0,0,0,0.113705951,0.886294049,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,12,4,0,0,0,0,0,0,0.020620903,0.979379097,0,0,0,0,0,0,0,0,0,0,0 +social,FALSE,13,1,0,0.110729344,0,0,0,0,0.028982164,0.160850288,0.699438204,0,0,0,0,0,0,0,0,0,0 +social,FALSE,13,2,0,0,0,0,0,0,0,0.434109617,0.565890383,0,0,0,0,0,0,0,0,0,0 +social,FALSE,13,3,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +social,FALSE,13,4,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +social,FALSE,14,1,0,0,0,0,0,0,0.012646359,0.049957288,0.064957981,0.872438372,0,0,0,0,0,0,0,0,0 +social,FALSE,14,2,0,0,0,0,0,0,0,0.092000521,0.207125543,0.700873936,0,0,0,0,0,0,0,0,0 +social,FALSE,14,3,0,0,0,0,0,0,0,0,0.123105709,0.876894291,0,0,0,0,0,0,0,0,0 +social,FALSE,14,4,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +social,FALSE,15,1,0,0,0,0,0,0,0,0.025915129,0.021414108,0.301296274,0.651374488,0,0,0,0,0,0,0,0 +social,FALSE,15,2,0,0,0,0,0,0,0,0.038851326,0.060308128,0.040085863,0.860754683,0,0,0,0,0,0,0,0 +social,FALSE,15,3,0,0,0,0,0,0,0,0,0,0.337125075,0.662874925,0,0,0,0,0,0,0,0 +social,FALSE,15,4,0,0,0,0,0,0,0,0,0,0.240804556,0.759195444,0,0,0,0,0,0,0,0 +social,FALSE,16,1,0,0,0,0,0,0,0.010850109,0.028630302,0.034941364,0.027356994,0.399487153,0.498734077,0,0,0,0,0,0,0 +social,FALSE,16,2,0,0,0,0,0,0,0,0.085290601,0.096379465,0.140055991,0.14515731,0.533116633,0,0,0,0,0,0,0 +social,FALSE,16,3,0,0,0,0,0,0,0,0.039789367,0,0,0.207791274,0.752419359,0,0,0,0,0,0,0 +social,FALSE,16,4,0,0,0,0,0,0,0,0,0,0,0.444162303,0.555837697,0,0,0,0,0,0,0 +social,FALSE,17,1,0,0,0,0,0,0.004235542,0.004235542,0.010773772,0.036037056,0.011244257,0.008654904,0.185030812,0.739788115,0,0,0,0,0,0 +social,FALSE,17,2,0,0,0,0,0,0,0.011747117,0.030318289,0,0.026130418,0.124118238,0.265470463,0.542215475,0,0,0,0,0,0 +social,FALSE,17,3,0,0,0,0,0,0,0,0.035991711,0.05581904,0,0.118744644,0.174641807,0.614802798,0,0,0,0,0,0 +social,FALSE,17,4,0,0,0,0,0,0,0,0,0,0.133377911,0.156860689,0.067276975,0.642484425,0,0,0,0,0,0 +social,FALSE,18,1,0,0,0,0,0,0,0,0,0.021116578,0,0.023935246,0.014708731,0.292437045,0.6478024,0,0,0,0,0 +social,FALSE,18,2,0,0,0,0,0,0,0,0,0.050647706,0.018469336,0.057408229,0.034520986,0.245483705,0.593470039,0,0,0,0,0 +social,FALSE,18,3,0,0,0,0,0,0,0,0,0.215338024,0,0,0.143481023,0.32589869,0.315282263,0,0,0,0,0 +social,FALSE,18,4,0,0,0,0,0,0,0.012374723,0.012374723,0.037124169,0,0.012374723,0.11617789,0.120134128,0.689439644,0,0,0,0,0 +social,FALSE,19,1,0,0,0,0,0,0,0.007898288,0,0,0,0,0,0.121563834,0.284121966,0.586415912,0,0,0,0 +social,FALSE,19,2,0,0,0,0,0,0,0.039741889,0,0,0,0.02465859,0.116870248,0.036063489,0.320456158,0.462209626,0,0,0,0 +social,FALSE,19,3,0,0,0,0,0,0,0,0.054643855,0,0,0,0.060605496,0.025192236,0.702933269,0.156625145,0,0,0,0 +social,FALSE,19,4,0,0,0,0,0,0,0,0,0.175116816,0,0.022349377,0.130418062,0.054376362,0.036216461,0.581522921,0,0,0,0 +social,FALSE,20,1,0,0,0,0,0,0,0,0.006741002,0,0,0.01216091,0,0,0,0.185101107,0.795996982,0,0,0 +social,FALSE,20,2,0,0,0,0,0,0,0,0,0,0.04641167,0,0.083727631,0.098296373,0,0.202274397,0.569289928,0,0,0 +social,FALSE,20,3,0,0,0,0,0,0,0,0,0,0.139066538,0,0,0,0.294532307,0.250878966,0.315522189,0,0,0 +social,FALSE,20,4,0,0,0,0,0,0,0,0,0,0,0,0.139014445,0,0,0.258582347,0.602403208,0,0,0 +social,FALSE,21,1,0,0,0,0,0,0,0,0.006536044,0,0,0.004122227,0,0.009592478,0,0.025254876,0.168812361,0.785682015,0,0 +social,FALSE,21,2,0,0,0,0,0,0,0,0,0,0,0,0.009947847,0,0,0.015489709,0.091770901,0.882791543,0,0 +social,FALSE,21,3,0,0,0,0,0,0,0,0,0,0,0,0.035778147,0,0,0.059543199,0.096410036,0.808268618,0,0 +social,FALSE,21,4,0,0,0,0,0,0,0,0,0,0,0,0.039227837,0,0,0,0.272007988,0.688764175,0,0 +social,FALSE,22,1,0,0,0,0,0,0,0.008693912,0,0,0.023590293,0,0,0.014992001,0.012884951,0.01979978,0.017778233,0.266462768,0.635798061,0 +social,FALSE,22,2,0,0,0,0,0,0,0,0,0,0.054229245,0.01998552,0,0,0.183589112,0.020695417,0.01231348,0.164392793,0.544794434,0 +social,FALSE,22,3,0,0,0,0,0,0,0,0,0,0,0.03472135,0,0,0.015619534,0,0.035954672,0.531548096,0.382156347,0 +social,FALSE,22,4,0,0,0,0,0,0,0,0,0,0,0,0.05888279,0.05888279,0,0.176648369,0.09089481,0.189410385,0.425280856,0 +social,FALSE,23,1,0,0,0,0,0,0,0,0.028390618,0,0,0.004916978,0,0,0,0.014598183,0.07621256,0.027119644,0.125695917,0.7230661 +social,FALSE,23,2,0,0,0,0,0,0,0,0,0,0,0,0.01089797,0,0,0.031808043,0,0.091217964,0.172140515,0.693935509 +social,FALSE,23,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.052410677,0.231068411,0.716520911 +social,FALSE,23,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.061760943,0.229019025,0.709220031 +othdiscr,TRUE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,TRUE,5,2,0.261967145,0.409228643,0,0,0,0,0.034160738,0.0288967,0,0.105662564,0,0.028934007,0.099906136,0.031244066,0,0,0,0,0 +othdiscr,TRUE,5,3,0.05651263,0.078010805,0,0,0,0,0,0,0,0,0.105067549,0.353285463,0.190245768,0,0.216877785,0,0,0,0 +othdiscr,TRUE,5,4,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +othdiscr,TRUE,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +othdiscr,TRUE,6,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,TRUE,6,2,0,0.098860067,0.663141032,0.044723228,0.012153718,0.015393409,0,0.016907036,0,0.010826104,0.098262057,0.016422181,0.023311168,0,0,0,0,0,0 +othdiscr,TRUE,6,3,0,0.024215249,0.736578596,0.018671746,0.050466724,0,0.046817344,0.010678175,0.023238019,0,0.032556217,0,0.035620327,0.021157602,0,0,0,0,0 +othdiscr,TRUE,6,4,0,0,0.081847071,0,0.338763551,0,0.240085302,0,0.114633558,0,0.146128192,0,0,0.078542326,0,0,0,0,0 +othdiscr,TRUE,6,5,0,0,0.081847071,0,0.338763551,0,0.240085302,0,0.114633558,0,0.146128192,0,0,0.078542326,0,0,0,0,0 +othdiscr,TRUE,7,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,TRUE,7,2,0,0,0.352097404,0.309242997,0.08178386,0.093069138,0.009864271,0.017742267,0,0.050016669,0.019229555,0.024087308,0.042866531,0,0,0,0,0,0 +othdiscr,TRUE,7,3,0,0,0.212218699,0.104250306,0.22359596,0.028585094,0,0.022759931,0.040936909,0.272511733,0,0,0,0.095141367,0,0,0,0,0 +othdiscr,TRUE,7,4,0,0,0,0.429994902,0.250073782,0.067515708,0.179786534,0,0,0,0,0,0,0,0.072629074,0,0,0,0 +othdiscr,TRUE,7,5,0,0,0,0.429994902,0.250073782,0.067515708,0.179786534,0,0,0,0,0,0,0,0.072629074,0,0,0,0 +othdiscr,TRUE,8,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,TRUE,8,2,0,0,0,0.27373664,0.651618467,0.038952541,0.006393093,0,0,0.010887769,0.010198326,0,0.008213164,0,0,0,0,0,0 +othdiscr,TRUE,8,3,0,0,0,0.256077087,0.567372083,0.111208754,0.044947659,0,0,0,0,0.020394418,0,0,0,0,0,0,0 +othdiscr,TRUE,8,4,0,0,0,0,0.419368759,0.043993527,0.123598787,0,0,0,0,0.092242747,0.32079618,0,0,0,0,0,0 +othdiscr,TRUE,8,5,0,0,0,0,0.419368759,0.043993527,0.123598787,0,0,0,0,0.092242747,0.32079618,0,0,0,0,0,0 +othdiscr,TRUE,9,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,TRUE,9,2,0,0,0,0,0.325654332,0.331629325,0.251597773,0.036069214,0,0,0.007507425,0,0.005333887,0,0.042208044,0,0,0,0 +othdiscr,TRUE,9,3,0,0,0,0,0.296114826,0.283133229,0.171133878,0.024057098,0.039684124,0,0.104372804,0,0,0,0.081504041,0,0,0,0 +othdiscr,TRUE,9,4,0,0,0,0,0,0.026872303,0.087815216,0.185433391,0.459158688,0.037962963,0.202757439,0,0,0,0,0,0,0,0 +othdiscr,TRUE,9,5,0,0,0,0,0,0.026872303,0.087815216,0.185433391,0.459158688,0.037962963,0.202757439,0,0,0,0,0,0,0,0 +othdiscr,TRUE,10,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,TRUE,10,2,0,0,0,0,0,0.284975884,0.535943751,0.094599159,0.060212546,0,0,0,0.014932613,0,0.009336047,0,0,0,0 +othdiscr,TRUE,10,3,0,0,0,0,0,0.03549155,0.582807345,0.127174633,0.224739775,0,0,0,0,0.029786697,0,0,0,0,0 +othdiscr,TRUE,10,4,0,0,0,0,0,0,0.354929378,0.145446894,0.499623728,0,0,0,0,0,0,0,0,0,0 +othdiscr,TRUE,10,5,0,0,0,0,0,0,0.354929378,0.145446894,0.499623728,0,0,0,0,0,0,0,0,0,0 +othdiscr,TRUE,11,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,TRUE,11,2,0,0,0,0,0,0,0.373878462,0.422332476,0.042754045,0.138634672,0.012364309,0.010036036,0,0,0,0,0,0,0 +othdiscr,TRUE,11,3,0,0,0,0,0,0,0.120480473,0.332302699,0.091421072,0.287256805,0.161854878,0.006684074,0,0,0,0,0,0,0 +othdiscr,TRUE,11,4,0,0,0,0,0,0,0.227930951,0,0.335102136,0.044198628,0.207476437,0,0.185291847,0,0,0,0,0,0 +othdiscr,TRUE,11,5,0,0,0,0,0,0,0.227930951,0,0.335102136,0.044198628,0.207476437,0,0.185291847,0,0,0,0,0,0 +othdiscr,TRUE,12,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,TRUE,12,2,0,0,0,0,0,0,0,0.383615621,0.305559088,0.131113594,0.103542737,0.07616896,0,0,0,0,0,0,0 +othdiscr,TRUE,12,3,0,0,0,0,0,0,0,0.128632011,0.247877929,0.37071038,0.084899625,0.167880054,0,0,0,0,0,0,0 +othdiscr,TRUE,12,4,0,0,0,0,0,0,0,0,0.205547015,0.162425226,0.239993719,0,0.392034039,0,0,0,0,0,0 +othdiscr,TRUE,12,5,0,0,0,0,0,0,0,0,0.205547015,0.162425226,0.239993719,0,0.392034039,0,0,0,0,0,0 +othdiscr,TRUE,13,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +othdiscr,TRUE,13,2,0,0,0,0,0,0,0,0,0.353861476,0.371100297,0.168208236,0.052680009,0.054149982,0,0,0,0,0,0 +othdiscr,TRUE,13,3,0,0,0,0,0,0,0,0,0,0.679754381,0.320245619,0,0,0,0,0,0,0,0 +othdiscr,TRUE,13,4,0,0,0,0,0,0,0,0,0,0.043643993,0.545880167,0.094829055,0.241931264,0,0.073715521,0,0,0,0 +othdiscr,TRUE,13,5,0,0,0,0,0,0,0,0,0,0.043643993,0.545880167,0.094829055,0.241931264,0,0.073715521,0,0,0,0 +othdiscr,TRUE,14,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +othdiscr,TRUE,14,2,0,0,0,0,0,0,0,0,0,0.288892103,0.603164379,0.048532082,0.059411436,0,0,0,0,0,0 +othdiscr,TRUE,14,3,0,0,0,0,0,0,0,0,0,0.021579093,0.46445134,0.316987948,0.142583522,0.054398096,0,0,0,0,0 +othdiscr,TRUE,14,4,0,0,0,0,0,0,0,0,0,0.09464155,0.567572891,0.33778556,0,0,0,0,0,0,0 +othdiscr,TRUE,14,5,0,0,0,0,0,0,0,0,0,0.09464155,0.567572891,0.33778556,0,0,0,0,0,0,0 +othdiscr,TRUE,15,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +othdiscr,TRUE,15,2,0,0,0,0,0,0,0,0,0,0,0.373801479,0.542977323,0.070343764,0.01078053,0.002096902,0,0,0,0 +othdiscr,TRUE,15,3,0,0,0,0,0,0,0,0,0,0,0.122689199,0.717331575,0.030530698,0.123760049,0.005688479,0,0,0,0 +othdiscr,TRUE,15,4,0,0,0,0,0,0,0,0,0,0,0,0.635796163,0,0,0.364203837,0,0,0,0 +othdiscr,TRUE,15,5,0,0,0,0,0,0,0,0,0,0,0,0.635796163,0,0,0.364203837,0,0,0,0 +othdiscr,TRUE,16,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +othdiscr,TRUE,16,2,0,0,0,0,0,0,0,0,0,0,0,0.712603233,0.193798154,0.048982419,0.039696774,0.00491942,0,0,0 +othdiscr,TRUE,16,3,0,0,0,0,0,0,0,0,0,0,0,0.841745433,0.101833145,0.027409468,0,0.029011955,0,0,0 +othdiscr,TRUE,16,4,0,0,0,0,0,0,0,0,0,0,0,0,0.17218743,0.195323109,0.429118156,0,0.203371304,0,0 +othdiscr,TRUE,16,5,0,0,0,0,0,0,0,0,0,0,0,0,0.17218743,0.195323109,0.429118156,0,0.203371304,0,0 +othdiscr,TRUE,17,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +othdiscr,TRUE,17,2,0,0,0,0,0,0,0,0,0,0,0,0,0.185120326,0.587302234,0.220258146,0,0.007319293,0,0 +othdiscr,TRUE,17,3,0,0,0,0,0,0,0,0,0,0,0,0,0.183125342,0.285960671,0.48842584,0.013192652,0.029295494,0,0 +othdiscr,TRUE,17,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0.102125632,0.746583804,0.151290564,0,0,0 +othdiscr,TRUE,17,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0.102125632,0.746583804,0.151290564,0,0,0 +othdiscr,TRUE,18,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +othdiscr,TRUE,18,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0.542729526,0.35986304,0.097407435,0,0,0 +othdiscr,TRUE,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0.480620595,0.242765324,0.062025461,0.187335855,0.027252764,0 +othdiscr,TRUE,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0.098853758,0.563447888,0.242412271,0,0.095286083,0 +othdiscr,TRUE,18,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0.098853758,0.563447888,0.242412271,0,0.095286083,0 +othdiscr,TRUE,19,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +othdiscr,TRUE,19,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.341735737,0.560576797,0.050581281,0.047106185,0 +othdiscr,TRUE,19,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.213928771,0.439416592,0,0.346654637,0 +othdiscr,TRUE,19,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +othdiscr,TRUE,19,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +othdiscr,TRUE,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +othdiscr,TRUE,20,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.849356959,0.101132981,0.025617338,0.023892721 +othdiscr,TRUE,20,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +othdiscr,TRUE,20,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +othdiscr,TRUE,20,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +othdiscr,TRUE,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +othdiscr,TRUE,21,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +othdiscr,TRUE,21,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +othdiscr,TRUE,21,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +othdiscr,TRUE,21,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +othdiscr,TRUE,22,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +othdiscr,TRUE,22,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +othdiscr,TRUE,22,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +othdiscr,TRUE,22,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +othdiscr,TRUE,22,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +othdiscr,TRUE,23,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +othdiscr,TRUE,23,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +othdiscr,TRUE,23,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +othdiscr,TRUE,23,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +othdiscr,TRUE,23,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +othdiscr,FALSE,5,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,5,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,5,4,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,6,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,6,2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,6,3,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,6,4,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,7,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,7,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,7,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,7,4,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,8,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,8,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,8,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,8,4,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,9,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,9,2,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,9,3,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,9,4,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,10,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,10,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,10,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,10,4,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,11,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,11,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,11,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,11,4,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,12,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,12,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,12,3,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,12,4,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,13,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,13,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,13,3,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,13,4,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,14,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,14,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,14,3,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,14,4,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0 +othdiscr,FALSE,15,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +othdiscr,FALSE,15,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +othdiscr,FALSE,15,3,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +othdiscr,FALSE,15,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 +othdiscr,FALSE,16,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +othdiscr,FALSE,16,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +othdiscr,FALSE,16,3,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +othdiscr,FALSE,16,4,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0 +othdiscr,FALSE,17,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +othdiscr,FALSE,17,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +othdiscr,FALSE,17,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +othdiscr,FALSE,17,4,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0 +othdiscr,FALSE,18,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +othdiscr,FALSE,18,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +othdiscr,FALSE,18,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +othdiscr,FALSE,18,4,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 +othdiscr,FALSE,19,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +othdiscr,FALSE,19,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +othdiscr,FALSE,19,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +othdiscr,FALSE,19,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0 +othdiscr,FALSE,20,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +othdiscr,FALSE,20,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +othdiscr,FALSE,20,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +othdiscr,FALSE,20,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 +othdiscr,FALSE,21,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +othdiscr,FALSE,21,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +othdiscr,FALSE,21,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +othdiscr,FALSE,21,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 +othdiscr,FALSE,22,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +othdiscr,FALSE,22,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +othdiscr,FALSE,22,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +othdiscr,FALSE,22,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 +othdiscr,FALSE,23,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +othdiscr,FALSE,23,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +othdiscr,FALSE,23,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 +othdiscr,FALSE,23,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 \ No newline at end of file diff --git a/activitysim/examples/prototype_mtc_extended/configs_mp/settings.yaml b/activitysim/examples/prototype_mtc_extended/configs_mp/settings.yaml index 9938537c7..27e13575f 100644 --- a/activitysim/examples/prototype_mtc_extended/configs_mp/settings.yaml +++ b/activitysim/examples/prototype_mtc_extended/configs_mp/settings.yaml @@ -20,7 +20,7 @@ fail_fast: True # - ------------------------- dev config multiprocess: True strict: False -use_shadow_pricing: False +use_shadow_pricing: True households_sample_size: 0 chunk_size: 0 @@ -35,19 +35,23 @@ want_dest_choice_sample_tables: False #write_skim_cache: True # - tracing -#trace_hh_id: +trace_hh_id: trace_od: # to resume after last successful checkpoint, specify resume_after: _ #resume_after: trip_purpose_and_destination models: - ### mp_initialize step + ### mp_initialize_proto step (Create the proto tables in single process to be shared across cores) + - initialize_proto_population + ### mp_disaggregate_accessibility (Slice and run proto tables in multiprocess) + - compute_disaggregate_accessibility + ### mp_initialize_hhs step - initialize_landuse - initialize_households ### mp_accessibility step - compute_accessibility - ### mp_households step + ### mp_simulate step - school_location - workplace_location - auto_ownership_simulate @@ -56,6 +60,7 @@ models: - cdap_simulate - mandatory_tour_frequency - mandatory_tour_scheduling + - school_escorting - joint_tour_frequency - joint_tour_composition - joint_tour_participation @@ -83,6 +88,15 @@ models: multiprocess_steps: - name: mp_initialize + begin: initialize_proto_population + - name: mp_disaggregate_accessibility + begin: compute_disaggregate_accessibility + slice: + tables: + - proto_households + - proto_persons + - proto_tours + - name: mp_initialize_hhs begin: initialize_landuse - name: mp_accessibility begin: compute_accessibility @@ -90,8 +104,8 @@ multiprocess_steps: tables: - accessibility # don't slice any tables not explicitly listed above in slice.tables - except: True - - name: mp_households + except: True # This is needed after disaggregate accessibilities, otherwise it will return empty logsums tables + - name: mp_simulate begin: school_location slice: tables: diff --git a/activitysim/examples/prototype_mtc_extended/sampling_scenarios.py b/activitysim/examples/prototype_mtc_extended/sampling_scenarios.py new file mode 100644 index 000000000..84e72bedd --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/sampling_scenarios.py @@ -0,0 +1,179 @@ +import argparse +import os +import pkg_resources +import yaml +import pandas as pd +import shutil +from activitysim.cli.run import add_run_args, run +from activitysim.core.util import named_product + +START_ITER = 0 +SAMPLING_PARAMS = { + "DESTINATION_SAMPLE_SIZE": [0.1, 1 / 3, 2 / 3, 0], + "ORIGIN_SAMPLE_SIZE": [0.1, 1 / 3, 2 / 3, 0], + "ORIGIN_SAMPLE_METHOD": [None], # , 'kmeans'] +} + + +def integer_params(params): + n_zones = count_lines_enumerate(base_path("data_2/land_use.csv")) + + d_zones = 1 if params.DESTINATION_SAMPLE_SIZE > 1 else n_zones + o_zones = 1 if params.ORIGIN_SAMPLE_SIZE > 1 else n_zones + + params.DESTINATION_SAMPLE_SIZE = round(params.DESTINATION_SAMPLE_SIZE * d_zones) + params.ORIGIN_SAMPLE_SIZE = round(params.ORIGIN_SAMPLE_SIZE * o_zones) + + return params + + +def base_path(dirname): + resource = os.path.join("examples", "placeholder_sandag_2_zone", dirname) + return pkg_resources.resource_filename("activitysim", resource) + + +def extended_path(dirname): + resource = os.path.join("examples", "placeholder_sandag_2_zone_extended", dirname) + return pkg_resources.resource_filename("activitysim", resource) + + +def run_model(): + parser = argparse.ArgumentParser() + add_run_args(parser) + args = parser.parse_args() + + # add in the arguments + args.config = [ + extended_path("configs_mp"), + extended_path("configs"), + base_path("configs_2_zone"), + base_path("placeholder_psrc/configs"), + ] + args.output = extended_path("output") + args.data = [extended_path("data"), base_path("data_2")] + run(args) + + +def count_lines_enumerate(file_name): + fp = open(file_name, "r") + line_count = list(enumerate(fp))[-1][0] + return line_count + + +def update_configs(scene, model_settings, config_path): + # Update the model settings + scene = integer_params(scene) + model_settings["DESTINATION_SAMPLE_SIZE"] = scene.DESTINATION_SAMPLE_SIZE + model_settings["ORIGIN_SAMPLE_SIZE"] = scene.ORIGIN_SAMPLE_SIZE + model_settings["ORIGIN_SAMPLE_METHOD"] = scene.ORIGIN_SAMPLE_METHOD + + with open(config_path, "w") as file: + yaml.dump(model_settings, file) + + return model_settings + + +def make_scene_name(it, params): + d_samp = params["DESTINATION_SAMPLE_SIZE"] + o_samp = params["ORIGIN_SAMPLE_SIZE"] + method = params["ORIGIN_SAMPLE_METHOD"] + + scene_name = "scene-{}_dsamp-{}_osamp-{}_method-{}".format( + it + START_ITER, + d_samp, + o_samp, + method, + ) + + return scene_name + + +def copy_output(scene_name, model_settings): + + scene_dir_name = os.path.join("scenarios_output", scene_name) + + if os.path.exists(extended_path(scene_dir_name)): + shutil.rmtree(extended_path(scene_dir_name)) + os.makedirs(extended_path(scene_dir_name)) + + log = pd.read_csv("scenarios_output/log.csv") + filt = ( + (log.DESTINATION_SAMPLE_SIZE == model_settings["DESTINATION_SAMPLE_SIZE"]) + & (log.ORIGIN_SAMPLE_SIZE == model_settings["ORIGIN_SAMPLE_SIZE"]) + & (log.ORIGIN_SAMPLE_METHOD == model_settings["ORIGIN_SAMPLE_METHOD"]) + ) + log.loc[filt, "COMPLETED_ID"] = scene_name + log.to_csv("scenarios_output/log.csv", index=False) + + files_list = [ + x + for x in os.listdir(extended_path("output")) + if "pipeline" not in x and "cache" not in x + ] + + for file in files_list: + copyargs = { + "src": extended_path(os.path.join("output", file)), + "dst": extended_path(os.path.join(scene_dir_name, file)), + } + if os.path.isfile(copyargs["src"]): + shutil.copy(**copyargs) + else: + if os.path.exists(copyargs["dst"]): + shutil.rmtree(copyargs["dst"]) + shutil.copytree(**copyargs) + return + + +def run_scenarios(): + config_path = extended_path("configs/disaggregate_accessibility.yaml") + with open(config_path) as file: + model_settings = yaml.load(file, Loader=yaml.FullLoader) + + if not os.path.exists(extended_path("scenarios_output")): + os.makedirs(extended_path("scenarios_output")) + + if os.path.exists(extended_path("scenarios_output/log.csv")): + log = pd.read_csv(extended_path("scenarios_output/log.csv")) + # assert scenarios[['DESTINATION_SAMPLE_SIZE','ORIGIN_SAMPLE_SIZE', 'ORIGIN_SAMPLE_METHOD']].equals( + # log[['DESTINATION_SAMPLE_SIZE','ORIGIN_SAMPLE_SIZE', 'ORIGIN_SAMPLE_METHOD']] + # ) + scenarios = log + else: + scenarios = pd.DataFrame(named_product(**SAMPLING_PARAMS)) + scenarios["COMPLETED_ID"] = "" + scenarios["SKIP"] = False + scenarios.to_csv(extended_path("scenarios_output/log.csv"), index=False) + + for it, scene in scenarios.iterrows(): + # Update model settings + model_settings = update_configs(scene, model_settings, config_path) + + # Check if already run + scene_name = make_scene_name(it, scene) + scene_dir_name = extended_path(os.path.join("scenarios_output", scene_name)) + + if ( + any(scenarios.COMPLETED_ID == scene_name) + and os.path.exists(scene_dir_name) + or scene.SKIP + ): + continue + + # Run the model + print( + f"Running model {it} of {len(scenarios.index)}: {chr(10)}" + + f"{chr(10)}".join( + [f"{var}={model_settings[var]}" for var in SAMPLING_PARAMS.keys()] + ) + ) + try: + run_model() + # Copy results to named folder + copy_output(scene_name, model_settings) + except: + print(f"Failed on scene {scene_name}") + + +if __name__ == "__main__": + run_scenarios() diff --git a/activitysim/examples/prototype_mtc_extended/test/configs/settings.yaml b/activitysim/examples/prototype_mtc_extended/test/configs/settings.yaml index 78bdcf922..d322efd0f 100644 --- a/activitysim/examples/prototype_mtc_extended/test/configs/settings.yaml +++ b/activitysim/examples/prototype_mtc_extended/test/configs/settings.yaml @@ -38,3 +38,5 @@ output_tables: tables: - trips - vehicles + - proto_disaggregate_accessibility + diff --git a/activitysim/examples/prototype_mtc_extended/test/configs_mp/logging.yaml b/activitysim/examples/prototype_mtc_extended/test/configs_mp/logging.yaml new file mode 100644 index 000000000..e932009c5 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/test/configs_mp/logging.yaml @@ -0,0 +1,57 @@ +# Config for logging +# ------------------ +# See http://docs.python.org/2.7/library/logging.config.html#configuration-dictionary-schema + +logging: + version: 1 + disable_existing_loggers: true + + + # Configuring the default (root) logger is highly recommended + root: + level: DEBUG + handlers: [console, logfile] + + loggers: + + activitysim: + level: DEBUG + handlers: [console, logfile] + propagate: false + + orca: + level: WARNING + handlers: [console, logfile] + propagate: false + + handlers: + + logfile: + class: logging.FileHandler + filename: !!python/object/apply:activitysim.core.config.log_file_path ['activitysim.log'] + mode: w + formatter: fileFormatter + level: NOTSET + + console: + class: logging.StreamHandler + stream: ext://sys.stdout + formatter: simpleFormatter + #level: NOTSET + level: !!python/object/apply:activitysim.core.mp_tasks.if_sub_task [WARNING, NOTSET] + + formatters: + + simpleFormatter: + class: logging.Formatter + #format: '%(processName)-10s %(levelname)s - %(name)s - %(message)s' + format: !!python/object/apply:activitysim.core.mp_tasks.if_sub_task [ + '%(processName)-10s %(levelname)s - %(name)s - %(message)s', + '%(levelname)s - %(name)s - %(message)s'] + datefmt: '%d/%m/%Y %H:%M:%S' + + fileFormatter: + class: logging.Formatter + format: '%(asctime)s - %(levelname)s - %(name)s - %(message)s' + datefmt: '%d/%m/%Y %H:%M:%S' + diff --git a/activitysim/examples/prototype_mtc_extended/test/configs_mp/network_los.yaml b/activitysim/examples/prototype_mtc_extended/test/configs_mp/network_los.yaml new file mode 100644 index 000000000..1c4cd79da --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/test/configs_mp/network_los.yaml @@ -0,0 +1,6 @@ +inherit_settings: True + +# 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 diff --git a/activitysim/examples/prototype_mtc_extended/test/configs_mp/settings.yaml b/activitysim/examples/prototype_mtc_extended/test/configs_mp/settings.yaml new file mode 100644 index 000000000..f123acc55 --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/test/configs_mp/settings.yaml @@ -0,0 +1,33 @@ +inherit_settings: True + +# treat warnings as errors +strict: True + +# raise error if any sub-process fails without waiting for others to complete +fail_fast: True + +multiprocess: True + +use_shadow_pricing: False + +chunk_size: 0 +num_processes: 2 + +# number of households to simulate +households_sample_size: 10 + +# turn writing of sample_tables on and off for all models +# (if True, tables will be written if DEST_CHOICE_SAMPLE_TABLE_NAME is specified in individual model settings) +want_dest_choice_sample_tables: False + +cleanup_pipeline_after_run: True + +output_tables: + h5_store: False + action: include + prefix: final_ + sort: True + tables: + - trips + - vehicles + - proto_disaggregate_accessibility \ No newline at end of file diff --git a/activitysim/examples/prototype_mtc_extended/test/regress/final_proto_disaggregate_accessibility.csv b/activitysim/examples/prototype_mtc_extended/test/regress/final_proto_disaggregate_accessibility.csv new file mode 100644 index 000000000..068ce61cd --- /dev/null +++ b/activitysim/examples/prototype_mtc_extended/test/regress/final_proto_disaggregate_accessibility.csv @@ -0,0 +1,601 @@ +proto_person_id,proto_household_id,workplace_location_accessibility,othdiscr_accessibility,shopping_accessibility,pnum,military,pstudent,educ,grade,timeFactorWork,timeFactorNonWork,age,sex,ptype,pemploy,weeks,hours,DAP,age_16_to_19,age_16_p,adult,male,female,has_non_worker,has_retiree,has_preschool_kid,has_driving_kid,has_school_kid,has_full_time,has_part_time,has_university,student_is_employed,nonstudent_to_school,is_student,is_gradeschool,is_highschool,is_university,school_segment,is_worker,home_zone_id,value_of_time,HHT,auto_ownership,bldgsz,family,hh_value_of_time,hhsize,hinccat1,home_is_rural,home_is_urban,household_serial_no,hworkers,income,income_in_thousands,income_segment,median_value_of_time,non_family,num_adults,num_children,num_children_16_to_17,num_children_5_to_15,num_college_age,num_drivers,num_non_workers,num_workers,num_young_adults,num_young_children,persons,veh,DISTRICT,SD,county_id,TOTHH,TOTPOP,TOTACRE,RESACRE,CIACRE,TOTEMP,AGE0519,RETEMPN,FPSEMPN,HEREMPN,OTHEMPN,AGREMPN,MWTEMPN,PRKCST,OPRKCST,area_type,HSENROLL,COLLFTE,COLLPTE,TOPOLOGY,TERMINAL,household_density,employment_density,density_index,is_cbd +1,1,14.934157647811949,14.583105400151117,13.290724837607167,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,1,3.6993862007536533,1,0,2,True,3.6993862007536533,2,1,False,True,1,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +2,1,14.934157647811949,14.583105400151117,13.290724837607167,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,1,3.6993862007536533,1,0,2,True,3.6993862007536533,2,1,False,True,1,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +3,2,14.941525733433174,14.637156375030013,13.29240973917949,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,2,4.622160227939781,1,0,2,True,4.622160227939781,2,1,False,True,2,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +4,2,14.941525733433174,14.637156375030013,13.29240973917949,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,2,4.622160227939781,1,0,2,True,4.622160227939781,2,1,False,True,2,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +5,3,14.914694105962758,14.773733139382484,13.378175254176632,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,3,6.426304397824429,1,0,2,True,6.426304397824429,2,1,False,True,3,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +6,3,14.914694105962758,14.773733139382484,13.378175254176632,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,3,6.426304397824429,1,0,2,True,6.426304397824429,2,1,False,True,3,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +7,4,15.037666867106513,14.857589153196272,13.363463038624971,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,4,3.349135085367882,1,0,2,True,3.349135085367882,2,1,False,True,4,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +8,4,15.037666867106513,14.857589153196272,13.363463038624971,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,4,3.349135085367882,1,0,2,True,3.349135085367882,2,1,False,True,4,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +9,5,14.775340227002761,14.497081947540194,13.216072281042852,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,5,2.8151518476899557,1,0,2,True,2.8151518476899557,2,1,False,True,5,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +10,5,14.775340227002761,14.497081947540194,13.216072281042852,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,5,2.8151518476899557,1,0,2,True,2.8151518476899557,2,1,False,True,5,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +11,6,14.800395726920328,14.729156346499785,13.392359662645402,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,6,10.27487178098422,1,0,2,True,10.27487178098422,2,1,False,True,6,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +12,6,14.800395726920328,14.729156346499785,13.392359662645402,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,6,10.27487178098422,1,0,2,True,10.27487178098422,2,1,False,True,6,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +13,7,14.487785570204592,14.558411556274487,12.739176929463921,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,7,1.2370118044738838,1,0,2,True,1.2370118044738838,2,1,False,True,7,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +14,7,14.487785570204592,14.558411556274487,12.739176929463921,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,7,1.2370118044738838,1,0,2,True,1.2370118044738838,2,1,False,True,7,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +15,8,14.675589792171198,14.618801438987113,13.21435830656896,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,8,3.1139876848379626,1,0,2,True,3.1139876848379626,2,1,False,True,8,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +16,8,14.675589792171198,14.618801438987113,13.21435830656896,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,8,3.1139876848379626,1,0,2,True,3.1139876848379626,2,1,False,True,8,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +17,9,14.702745428813023,14.650826016274157,13.413416117843695,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,9,3.8385712502253573,1,0,2,True,3.8385712502253573,2,1,False,True,9,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +18,9,14.702745428813023,14.650826016274157,13.413416117843695,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,9,3.8385712502253573,1,0,2,True,3.8385712502253573,2,1,False,True,9,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +19,10,14.734935487498271,14.813513813014984,13.442730360118098,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,10,10.385462097445384,1,0,2,True,10.385462097445384,2,1,False,True,10,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +20,10,14.734935487498271,14.813513813014984,13.442730360118098,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,10,10.385462097445384,1,0,2,True,10.385462097445384,2,1,False,True,10,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +21,11,14.873398254382442,14.830159415554956,13.579357048171845,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,11,12.295379045080338,1,0,2,True,12.295379045080338,2,1,False,True,11,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +22,11,14.873398254382442,14.830159415554956,13.579357048171845,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,11,12.295379045080338,1,0,2,True,12.295379045080338,2,1,False,True,11,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +23,12,14.760049999358593,14.513777273636293,13.09546063438316,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,12,1.566650588211314,1,0,2,True,1.566650588211314,2,1,False,True,12,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +24,12,14.760049999358593,14.513777273636293,13.09546063438316,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,12,1.566650588211314,1,0,2,True,1.566650588211314,2,1,False,True,12,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +25,13,15.084851843815166,14.816839564702242,13.567895407193513,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,13,11.05520101068174,1,0,2,True,11.05520101068174,2,1,False,True,13,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +26,13,15.084851843815166,14.816839564702242,13.567895407193513,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,13,11.05520101068174,1,0,2,True,11.05520101068174,2,1,False,True,13,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +27,14,14.823335687660231,14.692158977208312,12.990495823639167,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,14,2.351002458384619,1,0,2,True,2.351002458384619,2,1,False,True,14,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +28,14,14.823335687660231,14.692158977208312,12.990495823639167,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,14,2.351002458384619,1,0,2,True,2.351002458384619,2,1,False,True,14,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +29,15,15.05315236231802,14.914065890740027,13.53282050882534,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,15,17.51823808878663,1,0,2,True,17.51823808878663,2,1,False,True,15,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +30,15,15.05315236231802,14.914065890740027,13.53282050882534,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,15,17.51823808878663,1,0,2,True,17.51823808878663,2,1,False,True,15,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +31,16,14.795347904131335,14.563695979893083,13.2337492525282,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,16,3.927312313334441,1,0,2,True,3.927312313334441,2,1,False,True,16,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +32,16,14.795347904131335,14.563695979893083,13.2337492525282,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,16,3.927312313334441,1,0,2,True,3.927312313334441,2,1,False,True,16,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +33,17,14.629923417374144,14.323450935447916,13.259201661019263,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,17,3.581523601079983,1,0,2,True,3.581523601079983,2,1,False,True,17,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +34,17,14.629923417374144,14.323450935447916,13.259201661019263,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,17,3.581523601079983,1,0,2,True,3.581523601079983,2,1,False,True,17,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +35,18,14.589168313367926,14.515967695971062,13.367200118408416,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,18,11.924364385670607,1,0,2,True,11.924364385670607,2,1,False,True,18,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +36,18,14.589168313367926,14.515967695971062,13.367200118408416,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,18,11.924364385670607,1,0,2,True,11.924364385670607,2,1,False,True,18,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +37,19,13.989135770327723,13.573207791305922,12.259247181197326,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,19,2.0618707574849084,1,0,2,True,2.0618707574849084,2,1,False,True,19,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +38,19,13.989135770327723,13.573207791305922,12.259247181197326,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,19,2.0618707574849084,1,0,2,True,2.0618707574849084,2,1,False,True,19,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +39,20,14.5803510693839,14.50024752748008,13.232575611542886,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,20,6.8760774035822605,1,0,2,True,6.8760774035822605,2,1,False,True,20,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +40,20,14.5803510693839,14.50024752748008,13.232575611542886,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,20,6.8760774035822605,1,0,2,True,6.8760774035822605,2,1,False,True,20,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +41,21,14.661718421392166,14.529653614560116,13.134244253431936,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,21,3.963174123146733,1,0,2,True,3.963174123146733,2,1,False,True,21,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +42,21,14.661718421392166,14.529653614560116,13.134244253431936,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,21,3.963174123146733,1,0,2,True,3.963174123146733,2,1,False,True,21,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +43,22,14.948900218595464,14.77826289083923,13.505655716120721,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,22,10.22269333101496,1,0,2,True,10.22269333101496,2,1,False,True,22,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +44,22,14.948900218595464,14.77826289083923,13.505655716120721,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,22,10.22269333101496,1,0,2,True,10.22269333101496,2,1,False,True,22,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +45,23,14.60178861655544,14.254958913683007,13.290917647028195,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,23,5.601773952270421,1,0,2,True,5.601773952270421,2,1,False,True,23,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +46,23,14.60178861655544,14.254958913683007,13.290917647028195,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,23,5.601773952270421,1,0,2,True,5.601773952270421,2,1,False,True,23,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +47,24,14.675062442113088,14.396487973134901,13.112176700430545,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,24,3.7761953739399243,1,0,2,True,3.7761953739399243,2,1,False,True,24,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +48,24,14.675062442113088,14.396487973134901,13.112176700430545,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,24,3.7761953739399243,1,0,2,True,3.7761953739399243,2,1,False,True,24,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +49,25,14.81282371404795,14.588621306644644,13.349676994216583,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,25,12.828627463759744,1,0,2,True,12.828627463759744,2,1,False,True,25,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +50,25,14.81282371404795,14.588621306644644,13.349676994216583,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,25,12.828627463759744,1,0,2,True,12.828627463759744,2,1,False,True,25,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +51,26,13.279546199653442,13.505918448192006,12.362634345499334,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,1,33.5377255969913,1,1,2,True,33.5377255969913,2,1,False,True,26,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +52,26,13.279546199653442,13.505918448192006,12.362634345499334,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,1,33.5377255969913,1,1,2,True,33.5377255969913,2,1,False,True,26,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +53,27,13.138658609177785,13.321519044395512,12.203779998549114,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,2,2.1607019932076956,1,1,2,True,2.1607019932076956,2,1,False,True,27,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +54,27,13.138658609177785,13.321519044395512,12.203779998549114,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,2,2.1607019932076956,1,1,2,True,2.1607019932076956,2,1,False,True,27,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +55,28,13.025909345002503,13.433163227106856,12.145846466349763,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,3,3.4178939587239374,1,1,2,True,3.4178939587239374,2,1,False,True,28,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +56,28,13.025909345002503,13.433163227106856,12.145846466349763,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,3,3.4178939587239374,1,1,2,True,3.4178939587239374,2,1,False,True,28,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +57,29,13.232410607184407,13.540890812643948,12.299831546229113,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,4,6.524944820263047,1,1,2,True,6.524944820263047,2,1,False,True,29,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +58,29,13.232410607184407,13.540890812643948,12.299831546229113,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,4,6.524944820263047,1,1,2,True,6.524944820263047,2,1,False,True,29,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +59,30,13.020102142007948,13.486420967323303,12.208459257799719,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,5,3.784478372443525,1,1,2,True,3.784478372443525,2,1,False,True,30,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +60,30,13.020102142007948,13.486420967323303,12.208459257799719,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,5,3.784478372443525,1,1,2,True,3.784478372443525,2,1,False,True,30,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +61,31,12.85518892615627,13.449483685526742,12.119822137097117,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,6,3.847676019912309,1,1,2,True,3.847676019912309,2,1,False,True,31,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +62,31,12.85518892615627,13.449483685526742,12.119822137097117,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,6,3.847676019912309,1,1,2,True,3.847676019912309,2,1,False,True,31,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +63,32,12.985826504135563,13.602263928457022,12.255163451241742,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,7,7.002540064081328,1,1,2,True,7.002540064081328,2,1,False,True,32,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +64,32,12.985826504135563,13.602263928457022,12.255163451241742,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,7,7.002540064081328,1,1,2,True,7.002540064081328,2,1,False,True,32,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +65,33,12.988210038712708,13.477277992779175,12.233725575099452,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,8,7.908300573491883,1,1,2,True,7.908300573491883,2,1,False,True,33,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +66,33,12.988210038712708,13.477277992779175,12.233725575099452,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,8,7.908300573491883,1,1,2,True,7.908300573491883,2,1,False,True,33,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +67,34,12.86961427174191,13.47913643144752,12.155974014193609,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,9,3.8464929612302297,1,1,2,True,3.8464929612302297,2,1,False,True,34,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +68,34,12.86961427174191,13.47913643144752,12.155974014193609,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,9,3.8464929612302297,1,1,2,True,3.8464929612302297,2,1,False,True,34,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +69,35,12.862033929714846,13.38101281509175,12.073784477821876,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,10,4.740438411040705,1,1,2,True,4.740438411040705,2,1,False,True,35,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +70,35,12.862033929714846,13.38101281509175,12.073784477821876,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,10,4.740438411040705,1,1,2,True,4.740438411040705,2,1,False,True,35,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +71,36,12.945076129195478,13.435032127392818,12.179687247000583,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,11,4.578947659408581,1,1,2,True,4.578947659408581,2,1,False,True,36,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +72,36,12.945076129195478,13.435032127392818,12.179687247000583,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,11,4.578947659408581,1,1,2,True,4.578947659408581,2,1,False,True,36,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +73,37,13.198402754046773,13.590354599955502,12.351833745457032,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,12,6.533970226519058,1,1,2,True,6.533970226519058,2,1,False,True,37,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +74,37,13.198402754046773,13.590354599955502,12.351833745457032,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,12,6.533970226519058,1,1,2,True,6.533970226519058,2,1,False,True,37,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +75,38,13.06294158460548,13.425541445176547,12.045566052971363,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,13,1.0993837470275443,1,1,2,True,1.0993837470275443,2,1,False,True,38,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +76,38,13.06294158460548,13.425541445176547,12.045566052971363,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,13,1.0993837470275443,1,1,2,True,1.0993837470275443,2,1,False,True,38,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +77,39,13.193498752833547,13.551814859608607,12.202866151248433,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,14,8.55080620979345,1,1,2,True,8.55080620979345,2,1,False,True,39,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +78,39,13.193498752833547,13.551814859608607,12.202866151248433,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,14,8.55080620979345,1,1,2,True,8.55080620979345,2,1,False,True,39,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +79,40,13.040374677168606,13.458124461742946,12.090046487958134,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,15,3.4524962779471564,1,1,2,True,3.4524962779471564,2,1,False,True,40,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +80,40,13.040374677168606,13.458124461742946,12.090046487958134,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,15,3.4524962779471564,1,1,2,True,3.4524962779471564,2,1,False,True,40,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +81,41,12.885099712030247,13.266782145266962,12.076109669206115,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,16,1.0,1,1,2,True,1.0,2,1,False,True,41,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +82,41,12.885099712030247,13.266782145266962,12.076109669206115,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,16,1.0,1,1,2,True,1.0,2,1,False,True,41,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +83,42,12.729947250294957,13.103536982754772,11.983744908017075,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,17,1.7498547069413075,1,1,2,True,1.7498547069413075,2,1,False,True,42,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +84,42,12.729947250294957,13.103536982754772,11.983744908017075,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,17,1.7498547069413075,1,1,2,True,1.7498547069413075,2,1,False,True,42,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +85,43,12.554232593333904,13.217790089391215,12.02108005382531,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,18,1.9775808483148,1,1,2,True,1.9775808483148,2,1,False,True,43,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +86,43,12.554232593333904,13.217790089391215,12.02108005382531,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,18,1.9775808483148,1,1,2,True,1.9775808483148,2,1,False,True,43,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +87,44,12.523567626047956,13.150337725229459,12.006704218065716,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,19,12.753111956783302,1,1,2,True,12.753111956783302,2,1,False,True,44,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +88,44,12.523567626047956,13.150337725229459,12.006704218065716,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,19,12.753111956783302,1,1,2,True,12.753111956783302,2,1,False,True,44,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +89,45,12.778341610178531,13.292329350846074,12.084695496537101,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,20,10.006234947783678,1,1,2,True,10.006234947783678,2,1,False,True,45,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +90,45,12.778341610178531,13.292329350846074,12.084695496537101,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,20,10.006234947783678,1,1,2,True,10.006234947783678,2,1,False,True,45,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +91,46,12.666997878450665,13.32775094962323,12.129398631028321,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,21,1.0,1,1,2,True,1.0,2,1,False,True,46,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +92,46,12.666997878450665,13.32775094962323,12.129398631028321,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,21,1.0,1,1,2,True,1.0,2,1,False,True,46,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +93,47,13.149794488967409,13.415875530175688,12.180467750846933,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,22,9.382548166799005,1,1,2,True,9.382548166799005,2,1,False,True,47,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +94,47,13.149794488967409,13.415875530175688,12.180467750846933,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,22,9.382548166799005,1,1,2,True,9.382548166799005,2,1,False,True,47,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +95,48,12.60869289905793,12.786364606959063,11.743939775304733,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,23,1.3449402803688615,1,1,2,True,1.3449402803688615,2,1,False,True,48,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +96,48,12.60869289905793,12.786364606959063,11.743939775304733,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,23,1.3449402803688615,1,1,2,True,1.3449402803688615,2,1,False,True,48,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +97,49,12.914252771383783,13.340009309721077,11.985583118297912,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,24,2.3994232603163863,1,1,2,True,2.3994232603163863,2,1,False,True,49,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +98,49,12.914252771383783,13.340009309721077,11.985583118297912,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,24,2.3994232603163863,1,1,2,True,2.3994232603163863,2,1,False,True,49,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +99,50,12.946757399993404,13.398016896525299,12.219219187269077,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,25,6.269350663402008,1,1,2,True,6.269350663402008,2,1,False,True,50,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +100,50,12.946757399993404,13.398016896525299,12.219219187269077,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,25,6.269350663402008,1,1,2,True,6.269350663402008,2,1,False,True,50,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +101,51,13.207839550803786,13.493602116139002,12.219146995750911,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,1,6.576373703386879,1,2,2,True,6.576373703386879,2,1,False,True,51,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +102,51,13.207839550803786,13.493602116139002,12.219146995750911,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,1,6.576373703386879,1,2,2,True,6.576373703386879,2,1,False,True,51,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +103,52,13.214614045671517,13.549383410556166,12.257641552024667,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,2,11.03663996108403,1,2,2,True,11.03663996108403,2,1,False,True,52,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +104,52,13.214614045671517,13.549383410556166,12.257641552024667,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,2,11.03663996108403,1,2,2,True,11.03663996108403,2,1,False,True,52,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +105,53,13.06964427044582,13.444870196607871,12.27129192621032,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,3,3.280766998744223,1,2,2,True,3.280766998744223,2,1,False,True,53,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +106,53,13.06964427044582,13.444870196607871,12.27129192621032,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,3,3.280766998744223,1,2,2,True,3.280766998744223,2,1,False,True,53,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +107,54,13.27449508384248,13.560027391700576,12.267829694821915,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,4,5.924542088183732,1,2,2,True,5.924542088183732,2,1,False,True,54,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +108,54,13.27449508384248,13.560027391700576,12.267829694821915,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,4,5.924542088183732,1,2,2,True,5.924542088183732,2,1,False,True,54,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +109,55,13.13066653079464,13.621519778169286,12.303646100144737,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,5,15.064407076227997,1,2,2,True,15.064407076227997,2,1,False,True,55,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +110,55,13.13066653079464,13.621519778169286,12.303646100144737,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,5,15.064407076227997,1,2,2,True,15.064407076227997,2,1,False,True,55,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +111,56,13.0245786440472,13.544796397856677,12.272171969612904,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,6,36.292577973286875,1,2,2,True,36.292577973286875,2,1,False,True,56,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +112,56,13.0245786440472,13.544796397856677,12.272171969612904,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,6,36.292577973286875,1,2,2,True,36.292577973286875,2,1,False,True,56,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +113,57,12.820349144405995,13.211258419495996,12.131865476725979,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,7,1.6529340919683446,1,2,2,True,1.6529340919683446,2,1,False,True,57,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +114,57,12.820349144405995,13.211258419495996,12.131865476725979,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,7,1.6529340919683446,1,2,2,True,1.6529340919683446,2,1,False,True,57,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +115,58,12.977942864804747,13.541025966333441,12.221188366747441,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,8,2.8078893650924934,1,2,2,True,2.8078893650924934,2,1,False,True,58,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +116,58,12.977942864804747,13.541025966333441,12.221188366747441,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,8,2.8078893650924934,1,2,2,True,2.8078893650924934,2,1,False,True,58,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +117,59,12.938978225586647,13.488446444806652,12.15209989968258,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,9,10.474286609560641,1,2,2,True,10.474286609560641,2,1,False,True,59,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +118,59,12.938978225586647,13.488446444806652,12.15209989968258,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,9,10.474286609560641,1,2,2,True,10.474286609560641,2,1,False,True,59,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +119,60,12.938029820778187,13.493436083838834,12.205666284053745,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,10,11.120004972469642,1,2,2,True,11.120004972469642,2,1,False,True,60,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +120,60,12.938029820778187,13.493436083838834,12.205666284053745,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,10,11.120004972469642,1,2,2,True,11.120004972469642,2,1,False,True,60,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +121,61,12.970690490040829,13.49662596070122,12.26722324001038,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,11,4.835961658337588,1,2,2,True,4.835961658337588,2,1,False,True,61,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +122,61,12.970690490040829,13.49662596070122,12.26722324001038,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,11,4.835961658337588,1,2,2,True,4.835961658337588,2,1,False,True,61,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +123,62,13.075569847892341,13.504956972297496,12.209153520795414,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,12,2.01196369725565,1,2,2,True,2.01196369725565,2,1,False,True,62,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +124,62,13.075569847892341,13.504956972297496,12.209153520795414,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,12,2.01196369725565,1,2,2,True,2.01196369725565,2,1,False,True,62,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +125,63,13.16586175761968,13.513381926300116,12.304762580566742,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,13,4.631961725075768,1,2,2,True,4.631961725075768,2,1,False,True,63,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +126,63,13.16586175761968,13.513381926300116,12.304762580566742,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,13,4.631961725075768,1,2,2,True,4.631961725075768,2,1,False,True,63,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +127,64,13.183893470586257,13.470323014651177,12.236094226775462,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,14,5.970934840961828,1,2,2,True,5.970934840961828,2,1,False,True,64,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +128,64,13.183893470586257,13.470323014651177,12.236094226775462,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,14,5.970934840961828,1,2,2,True,5.970934840961828,2,1,False,True,64,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +129,65,12.987134848141588,13.360108686182453,12.134574343752009,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,15,2.032089958694962,1,2,2,True,2.032089958694962,2,1,False,True,65,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +130,65,12.987134848141588,13.360108686182453,12.134574343752009,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,15,2.032089958694962,1,2,2,True,2.032089958694962,2,1,False,True,65,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +131,66,13.001280274064575,13.48291280923957,12.253471773172322,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,16,3.6724852844975384,1,2,2,True,3.6724852844975384,2,1,False,True,66,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +132,66,13.001280274064575,13.48291280923957,12.253471773172322,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,16,3.6724852844975384,1,2,2,True,3.6724852844975384,2,1,False,True,66,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +133,67,12.826689983231983,13.258912301896338,12.189449398943003,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,17,3.8686084791597883,1,2,2,True,3.8686084791597883,2,1,False,True,67,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +134,67,12.826689983231983,13.258912301896338,12.189449398943003,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,17,3.8686084791597883,1,2,2,True,3.8686084791597883,2,1,False,True,67,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +135,68,12.650117643485968,13.270931671805872,12.084539520539138,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,18,4.665806273151146,1,2,2,True,4.665806273151146,2,1,False,True,68,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +136,68,12.650117643485968,13.270931671805872,12.084539520539138,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,18,4.665806273151146,1,2,2,True,4.665806273151146,2,1,False,True,68,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +137,69,12.22226919692812,12.860401014111009,11.685158819109754,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,19,1.1812144404244418,1,2,2,True,1.1812144404244418,2,1,False,True,69,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +138,69,12.22226919692812,12.860401014111009,11.685158819109754,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,19,1.1812144404244418,1,2,2,True,1.1812144404244418,2,1,False,True,69,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +139,70,12.665944730574179,13.304738785084636,12.071614598242158,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,20,3.1529540875881645,1,2,2,True,3.1529540875881645,2,1,False,True,70,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +140,70,12.665944730574179,13.304738785084636,12.071614598242158,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,20,3.1529540875881645,1,2,2,True,3.1529540875881645,2,1,False,True,70,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +141,71,12.782785754873835,13.282359771960284,12.172403053262087,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,21,1.6534581547421712,1,2,2,True,1.6534581547421712,2,1,False,True,71,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +142,71,12.782785754873835,13.282359771960284,12.172403053262087,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,21,1.6534581547421712,1,2,2,True,1.6534581547421712,2,1,False,True,71,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +143,72,13.115655269543934,13.375557753932801,12.117857398893147,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,22,4.093847849936535,1,2,2,True,4.093847849936535,2,1,False,True,72,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +144,72,13.115655269543934,13.375557753932801,12.117857398893147,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,22,4.093847849936535,1,2,2,True,4.093847849936535,2,1,False,True,72,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +145,73,12.83663814696784,13.064712306945745,11.959562130262242,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,23,7.563799458648938,1,2,2,True,7.563799458648938,2,1,False,True,73,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +146,73,12.83663814696784,13.064712306945745,11.959562130262242,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,23,7.563799458648938,1,2,2,True,7.563799458648938,2,1,False,True,73,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +147,74,13.018390467337603,13.344639187941276,12.13702490643872,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,24,10.497635174284053,1,2,2,True,10.497635174284053,2,1,False,True,74,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +148,74,13.018390467337603,13.344639187941276,12.13702490643872,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,24,10.497635174284053,1,2,2,True,10.497635174284053,2,1,False,True,74,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +149,75,12.989941861673184,13.278966267502627,12.050472125812973,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,25,5.485498369130602,1,2,2,True,5.485498369130602,2,1,False,True,75,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +150,75,12.989941861673184,13.278966267502627,12.050472125812973,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,25,5.485498369130602,1,2,2,True,5.485498369130602,2,1,False,True,75,1,15000,15.0,1,6.01,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +151,76,14.991696214627684,14.69222132500953,13.562736333102032,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,1,6.714482447531277,1,0,2,True,6.714482447531277,2,2,False,True,76,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +152,76,14.991696214627684,14.69222132500953,13.562736333102032,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,1,6.714482447531277,1,0,2,True,6.714482447531277,2,2,False,True,76,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +153,77,14.934816011981189,14.66593573734273,13.24056864638241,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,2,4.675423717967643,1,0,2,True,4.675423717967643,2,2,False,True,77,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +154,77,14.934816011981189,14.66593573734273,13.24056864638241,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,2,4.675423717967643,1,0,2,True,4.675423717967643,2,2,False,True,77,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +155,78,14.826985000096396,14.607140132728924,13.264236915809411,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,3,3.3940756956456806,1,0,2,True,3.3940756956456806,2,2,False,True,78,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +156,78,14.826985000096396,14.607140132728924,13.264236915809411,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,3,3.3940756956456806,1,0,2,True,3.3940756956456806,2,2,False,True,78,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +157,79,14.983030694844064,14.798468210338342,13.491245196902252,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,4,4.3650365376610845,1,0,2,True,4.3650365376610845,2,2,False,True,79,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +158,79,14.983030694844064,14.798468210338342,13.491245196902252,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,4,4.3650365376610845,1,0,2,True,4.3650365376610845,2,2,False,True,79,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +159,80,14.677923622480384,14.460689221719242,12.899775969626953,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,5,1.943293523158802,1,0,2,True,1.943293523158802,2,2,False,True,80,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +160,80,14.677923622480384,14.460689221719242,12.899775969626953,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,5,1.943293523158802,1,0,2,True,1.943293523158802,2,2,False,True,80,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +161,81,14.642569749193852,14.549095714628956,13.310359799795386,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,6,5.345306706709357,1,0,2,True,5.345306706709357,2,2,False,True,81,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +162,81,14.642569749193852,14.549095714628956,13.310359799795386,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,6,5.345306706709357,1,0,2,True,5.345306706709357,2,2,False,True,81,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +163,82,14.699098573148914,14.722026441783596,13.330555603235444,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,7,5.436370674785919,1,0,2,True,5.436370674785919,2,2,False,True,82,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +164,82,14.699098573148914,14.722026441783596,13.330555603235444,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,7,5.436370674785919,1,0,2,True,5.436370674785919,2,2,False,True,82,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +165,83,14.83099051515964,14.847364306525035,13.42518100240856,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,8,7.932648976685355,1,0,2,True,7.932648976685355,2,2,False,True,83,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +166,83,14.83099051515964,14.847364306525035,13.42518100240856,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,8,7.932648976685355,1,0,2,True,7.932648976685355,2,2,False,True,83,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +167,84,14.793500143612917,14.862156732110009,13.653549988619252,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,9,17.26142598790864,1,0,2,True,17.26142598790864,2,2,False,True,84,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +168,84,14.793500143612917,14.862156732110009,13.653549988619252,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,9,17.26142598790864,1,0,2,True,17.26142598790864,2,2,False,True,84,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +169,85,14.647857025562017,14.768276714384031,13.37840045944726,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,10,6.849676305690078,1,0,2,True,6.849676305690078,2,2,False,True,85,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +170,85,14.647857025562017,14.768276714384031,13.37840045944726,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,10,6.849676305690078,1,0,2,True,6.849676305690078,2,2,False,True,85,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +171,86,14.7727331028102,14.662697967533902,13.402636165475743,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,11,5.858957090003502,1,0,2,True,5.858957090003502,2,2,False,True,86,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +172,86,14.7727331028102,14.662697967533902,13.402636165475743,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,11,5.858957090003502,1,0,2,True,5.858957090003502,2,2,False,True,86,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +173,87,15.024691912281366,14.852727205633155,13.540475272201626,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,12,8.853698913793092,1,0,2,True,8.853698913793092,2,2,False,True,87,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +174,87,15.024691912281366,14.852727205633155,13.540475272201626,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,12,8.853698913793092,1,0,2,True,8.853698913793092,2,2,False,True,87,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +175,88,15.034581908403645,14.960814120881004,13.583458099388489,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,13,9.021580950977969,1,0,2,True,9.021580950977969,2,2,False,True,88,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +176,88,15.034581908403645,14.960814120881004,13.583458099388489,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,13,9.021580950977969,1,0,2,True,9.021580950977969,2,2,False,True,88,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +177,89,15.070962080689716,14.729606624238253,13.581349526839114,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,14,12.176909570885035,1,0,2,True,12.176909570885035,2,2,False,True,89,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +178,89,15.070962080689716,14.729606624238253,13.581349526839114,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,14,12.176909570885035,1,0,2,True,12.176909570885035,2,2,False,True,89,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +179,90,14.785583776974894,14.506032958539908,13.122519001399716,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,15,2.9380190052392554,1,0,2,True,2.9380190052392554,2,2,False,True,90,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +180,90,14.785583776974894,14.506032958539908,13.122519001399716,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,15,2.9380190052392554,1,0,2,True,2.9380190052392554,2,2,False,True,90,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +181,91,14.853483441156818,14.751179916330306,13.416770450650873,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,16,6.133887640928137,1,0,2,True,6.133887640928137,2,2,False,True,91,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +182,91,14.853483441156818,14.751179916330306,13.416770450650873,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,16,6.133887640928137,1,0,2,True,6.133887640928137,2,2,False,True,91,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +183,92,14.619346638216161,14.468796817742032,13.211627641791093,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,17,3.4567872656128453,1,0,2,True,3.4567872656128453,2,2,False,True,92,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +184,92,14.619346638216161,14.468796817742032,13.211627641791093,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,17,3.4567872656128453,1,0,2,True,3.4567872656128453,2,2,False,True,92,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +185,93,14.585663664130834,14.435446720648434,13.313151807299706,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,18,8.663957593892762,1,0,2,True,8.663957593892762,2,2,False,True,93,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +186,93,14.585663664130834,14.435446720648434,13.313151807299706,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,18,8.663957593892762,1,0,2,True,8.663957593892762,2,2,False,True,93,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +187,94,14.001905378054202,13.592326897828759,12.258164046252737,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,19,1.9919778870095366,1,0,2,True,1.9919778870095366,2,2,False,True,94,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +188,94,14.001905378054202,13.592326897828759,12.258164046252737,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,19,1.9919778870095366,1,0,2,True,1.9919778870095366,2,2,False,True,94,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +189,95,14.552240319462312,14.537631902762227,13.388341417131464,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,20,8.295002654850537,1,0,2,True,8.295002654850537,2,2,False,True,95,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +190,95,14.552240319462312,14.537631902762227,13.388341417131464,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,20,8.295002654850537,1,0,2,True,8.295002654850537,2,2,False,True,95,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +191,96,14.800955534371855,14.693949497373733,13.58530241223352,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,21,16.96790223666738,1,0,2,True,16.96790223666738,2,2,False,True,96,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +192,96,14.800955534371855,14.693949497373733,13.58530241223352,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,21,16.96790223666738,1,0,2,True,16.96790223666738,2,2,False,True,96,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +193,97,14.909814017981153,14.674390759978486,13.660318165200797,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,22,11.03281556836826,1,0,2,True,11.03281556836826,2,2,False,True,97,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +194,97,14.909814017981153,14.674390759978486,13.660318165200797,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,22,11.03281556836826,1,0,2,True,11.03281556836826,2,2,False,True,97,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +195,98,14.55931926340946,14.23486774132134,13.04866315384407,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,23,5.3556466017061135,1,0,2,True,5.3556466017061135,2,2,False,True,98,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +196,98,14.55931926340946,14.23486774132134,13.04866315384407,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,23,5.3556466017061135,1,0,2,True,5.3556466017061135,2,2,False,True,98,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +197,99,14.588785620150778,14.498390899970435,12.73366617494181,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,24,2.1012905408903486,1,0,2,True,2.1012905408903486,2,2,False,True,99,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +198,99,14.588785620150778,14.498390899970435,12.73366617494181,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,24,2.1012905408903486,1,0,2,True,2.1012905408903486,2,2,False,True,99,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +199,100,14.70132841161042,14.500613704883634,13.162712876462376,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,25,4.507860382182516,1,0,2,True,4.507860382182516,2,2,False,True,100,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +200,100,14.70132841161042,14.500613704883634,13.162712876462376,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,25,4.507860382182516,1,0,2,True,4.507860382182516,2,2,False,True,100,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +201,101,13.11845160518079,13.37740258318873,12.141587598282689,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,1,3.01860534292064,1,1,2,True,3.01860534292064,2,2,False,True,101,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +202,101,13.11845160518079,13.37740258318873,12.141587598282689,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,1,3.01860534292064,1,1,2,True,3.01860534292064,2,2,False,True,101,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +203,102,13.15500754981195,13.398400523127327,12.207368922623308,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,2,3.3385338720843785,1,1,2,True,3.3385338720843785,2,2,False,True,102,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +204,102,13.15500754981195,13.398400523127327,12.207368922623308,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,2,3.3385338720843785,1,1,2,True,3.3385338720843785,2,2,False,True,102,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +205,103,13.074765820218081,13.520729222429267,12.225520847190925,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,3,3.3492750662923756,1,1,2,True,3.3492750662923756,2,2,False,True,103,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +206,103,13.074765820218081,13.520729222429267,12.225520847190925,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,3,3.3492750662923756,1,1,2,True,3.3492750662923756,2,2,False,True,103,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +207,104,13.171335249047992,13.532930212104553,12.179788596298733,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,4,3.352510200481194,1,1,2,True,3.352510200481194,2,2,False,True,104,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +208,104,13.171335249047992,13.532930212104553,12.179788596298733,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,4,3.352510200481194,1,1,2,True,3.352510200481194,2,2,False,True,104,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +209,105,13.096716518192089,13.535627264943582,12.363087399821433,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,5,13.140297421901966,1,1,2,True,13.140297421901966,2,2,False,True,105,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +210,105,13.096716518192089,13.535627264943582,12.363087399821433,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,5,13.140297421901966,1,1,2,True,13.140297421901966,2,2,False,True,105,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +211,106,12.858100105929317,13.346448052391025,12.200555416604699,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,6,4.1846277428757075,1,1,2,True,4.1846277428757075,2,2,False,True,106,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +212,106,12.858100105929317,13.346448052391025,12.200555416604699,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,6,4.1846277428757075,1,1,2,True,4.1846277428757075,2,2,False,True,106,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +213,107,12.940329822261674,13.558927892776374,12.287607289272307,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,7,10.726848329481081,1,1,2,True,10.726848329481081,2,2,False,True,107,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +214,107,12.940329822261674,13.558927892776374,12.287607289272307,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,7,10.726848329481081,1,1,2,True,10.726848329481081,2,2,False,True,107,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +215,108,12.936360545078763,13.467812398930652,12.252561392125159,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,8,4.658500055300513,1,1,2,True,4.658500055300513,2,2,False,True,108,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +216,108,12.936360545078763,13.467812398930652,12.252561392125159,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,8,4.658500055300513,1,1,2,True,4.658500055300513,2,2,False,True,108,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +217,109,12.859764631156324,13.333725849379356,12.13638637564806,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,9,6.261302724473695,1,1,2,True,6.261302724473695,2,2,False,True,109,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +218,109,12.859764631156324,13.333725849379356,12.13638637564806,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,9,6.261302724473695,1,1,2,True,6.261302724473695,2,2,False,True,109,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +219,110,12.770875564035562,13.414843098827438,11.989727354557335,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,10,2.630494518523089,1,1,2,True,2.630494518523089,2,2,False,True,110,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +220,110,12.770875564035562,13.414843098827438,11.989727354557335,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,10,2.630494518523089,1,1,2,True,2.630494518523089,2,2,False,True,110,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +221,111,12.939553592736889,13.521095149376054,12.217140248334625,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,11,5.041548558348935,1,1,2,True,5.041548558348935,2,2,False,True,111,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +222,111,12.939553592736889,13.521095149376054,12.217140248334625,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,11,5.041548558348935,1,1,2,True,5.041548558348935,2,2,False,True,111,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +223,112,13.238778537468804,13.56816811288101,12.388742032993012,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,12,21.55466323167172,1,1,2,True,21.55466323167172,2,2,False,True,112,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +224,112,13.238778537468804,13.56816811288101,12.388742032993012,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,12,21.55466323167172,1,1,2,True,21.55466323167172,2,2,False,True,112,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +225,113,13.14742203784858,13.468013142847466,12.105497969296682,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,13,1.827436548683454,1,1,2,True,1.827436548683454,2,2,False,True,113,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +226,113,13.14742203784858,13.468013142847466,12.105497969296682,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,13,1.827436548683454,1,1,2,True,1.827436548683454,2,2,False,True,113,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +227,114,13.136988869445764,13.494337494503954,12.255107115159506,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,14,4.294930102308611,1,1,2,True,4.294930102308611,2,2,False,True,114,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +228,114,13.136988869445764,13.494337494503954,12.255107115159506,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,14,4.294930102308611,1,1,2,True,4.294930102308611,2,2,False,True,114,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +229,115,12.95024049141629,13.222469147308212,12.064398902231938,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,15,1.311388516106586,1,1,2,True,1.311388516106586,2,2,False,True,115,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +230,115,12.95024049141629,13.222469147308212,12.064398902231938,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,15,1.311388516106586,1,1,2,True,1.311388516106586,2,2,False,True,115,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +231,116,12.941177600292542,13.337653099344767,12.178529949906197,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,16,1.6271233336754736,1,1,2,True,1.6271233336754736,2,2,False,True,116,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +232,116,12.941177600292542,13.337653099344767,12.178529949906197,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,16,1.6271233336754736,1,1,2,True,1.6271233336754736,2,2,False,True,116,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +233,117,12.917634055062674,13.426314856596706,12.185667289668984,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,17,16.350724766178505,1,1,2,True,16.350724766178505,2,2,False,True,117,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +234,117,12.917634055062674,13.426314856596706,12.185667289668984,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,17,16.350724766178505,1,1,2,True,16.350724766178505,2,2,False,True,117,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +235,118,12.63760195303001,13.166790782121918,12.043848217885058,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,18,2.6339397981781025,1,1,2,True,2.6339397981781025,2,2,False,True,118,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +236,118,12.63760195303001,13.166790782121918,12.043848217885058,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,18,2.6339397981781025,1,1,2,True,2.6339397981781025,2,2,False,True,118,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +237,119,12.530495447512687,13.239570429014822,11.959545863854572,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,19,8.617139415100091,1,1,2,True,8.617139415100091,2,2,False,True,119,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +238,119,12.530495447512687,13.239570429014822,11.959545863854572,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,19,8.617139415100091,1,1,2,True,8.617139415100091,2,2,False,True,119,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +239,120,12.741964719566434,13.331251339262021,12.034248900645428,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,20,6.444402442958617,1,1,2,True,6.444402442958617,2,2,False,True,120,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +240,120,12.741964719566434,13.331251339262021,12.034248900645428,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,20,6.444402442958617,1,1,2,True,6.444402442958617,2,2,False,True,120,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +241,121,12.907341914532592,13.449880847843506,12.294810448473019,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,21,11.266181246926378,1,1,2,True,11.266181246926378,2,2,False,True,121,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +242,121,12.907341914532592,13.449880847843506,12.294810448473019,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,21,11.266181246926378,1,1,2,True,11.266181246926378,2,2,False,True,121,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +243,122,13.022223998160644,13.233039807523262,12.095520127174039,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,22,2.9163896638682223,1,1,2,True,2.9163896638682223,2,2,False,True,122,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +244,122,13.022223998160644,13.233039807523262,12.095520127174039,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,22,2.9163896638682223,1,1,2,True,2.9163896638682223,2,2,False,True,122,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +245,123,12.838802229565601,13.27763041733021,12.070557824716229,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,23,8.318089128554591,1,1,2,True,8.318089128554591,2,2,False,True,123,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +246,123,12.838802229565601,13.27763041733021,12.070557824716229,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,23,8.318089128554591,1,1,2,True,8.318089128554591,2,2,False,True,123,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +247,124,12.918976849981325,13.226988480866506,12.092659506841265,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,24,3.211534361572735,1,1,2,True,3.211534361572735,2,2,False,True,124,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +248,124,12.918976849981325,13.226988480866506,12.092659506841265,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,24,3.211534361572735,1,1,2,True,3.211534361572735,2,2,False,True,124,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +249,125,12.92847913047003,13.22556537925708,12.182285704084324,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,25,6.364860572942692,1,1,2,True,6.364860572942692,2,2,False,True,125,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +250,125,12.92847913047003,13.22556537925708,12.182285704084324,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,25,6.364860572942692,1,1,2,True,6.364860572942692,2,2,False,True,125,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +251,126,13.2634486922445,13.536461185581473,12.331326792887971,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,1,13.780170022314827,1,2,2,True,13.780170022314827,2,2,False,True,126,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +252,126,13.2634486922445,13.536461185581473,12.331326792887971,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,1,13.780170022314827,1,2,2,True,13.780170022314827,2,2,False,True,126,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +253,127,13.098364770128407,13.423006370838847,12.1703672018029,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,2,2.589772768863601,1,2,2,True,2.589772768863601,2,2,False,True,127,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +254,127,13.098364770128407,13.423006370838847,12.1703672018029,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,2,2.589772768863601,1,2,2,True,2.589772768863601,2,2,False,True,127,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +255,128,13.155734276437855,13.52627563644358,12.281743434771933,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,3,9.383771009522306,1,2,2,True,9.383771009522306,2,2,False,True,128,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +256,128,13.155734276437855,13.52627563644358,12.281743434771933,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,3,9.383771009522306,1,2,2,True,9.383771009522306,2,2,False,True,128,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +257,129,13.250588383051934,13.511693086857528,12.182605176040651,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,4,3.328844483982704,1,2,2,True,3.328844483982704,2,2,False,True,129,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +258,129,13.250588383051934,13.511693086857528,12.182605176040651,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,4,3.328844483982704,1,2,2,True,3.328844483982704,2,2,False,True,129,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +259,130,13.02427051018969,13.457736313290035,12.193979484908668,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,5,4.533460590002592,1,2,2,True,4.533460590002592,2,2,False,True,130,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +260,130,13.02427051018969,13.457736313290035,12.193979484908668,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,5,4.533460590002592,1,2,2,True,4.533460590002592,2,2,False,True,130,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +261,131,12.811355253046797,13.439872747718827,12.149774180651237,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,6,5.068182651383836,1,2,2,True,5.068182651383836,2,2,False,True,131,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +262,131,12.811355253046797,13.439872747718827,12.149774180651237,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,6,5.068182651383836,1,2,2,True,5.068182651383836,2,2,False,True,131,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +263,132,12.859877175973354,13.555407692838159,12.224201239062143,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,7,4.426809726911572,1,2,2,True,4.426809726911572,2,2,False,True,132,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +264,132,12.859877175973354,13.555407692838159,12.224201239062143,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,7,4.426809726911572,1,2,2,True,4.426809726911572,2,2,False,True,132,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +265,133,12.993352730176788,13.615344584241674,12.279277432342854,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,8,4.46180290450385,1,2,2,True,4.46180290450385,2,2,False,True,133,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +266,133,12.993352730176788,13.615344584241674,12.279277432342854,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,8,4.46180290450385,1,2,2,True,4.46180290450385,2,2,False,True,133,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +267,134,12.884268104927068,13.276767177213939,12.093767484587397,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,9,2.467144190193196,1,2,2,True,2.467144190193196,2,2,False,True,134,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +268,134,12.884268104927068,13.276767177213939,12.093767484587397,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,9,2.467144190193196,1,2,2,True,2.467144190193196,2,2,False,True,134,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +269,135,12.865311267518138,13.430151958248194,12.21214466263186,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,10,10.456089141556776,1,2,2,True,10.456089141556776,2,2,False,True,135,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +270,135,12.865311267518138,13.430151958248194,12.21214466263186,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,10,10.456089141556776,1,2,2,True,10.456089141556776,2,2,False,True,135,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +271,136,12.884658548392748,13.443209016378473,12.219544552226765,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,11,3.284080378763862,1,2,2,True,3.284080378763862,2,2,False,True,136,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +272,136,12.884658548392748,13.443209016378473,12.219544552226765,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,11,3.284080378763862,1,2,2,True,3.284080378763862,2,2,False,True,136,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +273,137,13.085171029907197,13.582665959194632,12.221442208260935,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,12,4.066190893394222,1,2,2,True,4.066190893394222,2,2,False,True,137,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +274,137,13.085171029907197,13.582665959194632,12.221442208260935,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,12,4.066190893394222,1,2,2,True,4.066190893394222,2,2,False,True,137,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +275,138,13.125514703651099,13.452332385970614,12.200426491575316,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,13,2.2852314641711646,1,2,2,True,2.2852314641711646,2,2,False,True,138,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +276,138,13.125514703651099,13.452332385970614,12.200426491575316,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,13,2.2852314641711646,1,2,2,True,2.2852314641711646,2,2,False,True,138,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +277,139,13.208946902870506,13.544755968622884,12.268903413616753,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,14,8.355315539261081,1,2,2,True,8.355315539261081,2,2,False,True,139,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +278,139,13.208946902870506,13.544755968622884,12.268903413616753,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,14,8.355315539261081,1,2,2,True,8.355315539261081,2,2,False,True,139,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +279,140,13.099535709072294,13.408811183618246,12.224140200625175,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,15,8.152208431222483,1,2,2,True,8.152208431222483,2,2,False,True,140,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +280,140,13.099535709072294,13.408811183618246,12.224140200625175,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,15,8.152208431222483,1,2,2,True,8.152208431222483,2,2,False,True,140,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +281,141,13.007040869432036,13.434864004886803,12.333965623334512,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,16,3.678302637286524,1,2,2,True,3.678302637286524,2,2,False,True,141,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +282,141,13.007040869432036,13.434864004886803,12.333965623334512,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,16,3.678302637286524,1,2,2,True,3.678302637286524,2,2,False,True,141,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +283,142,12.746128086616173,13.186048949980412,12.184449696244188,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,17,2.3534248298245957,1,2,2,True,2.3534248298245957,2,2,False,True,142,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +284,142,12.746128086616173,13.186048949980412,12.184449696244188,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,17,2.3534248298245957,1,2,2,True,2.3534248298245957,2,2,False,True,142,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +285,143,12.58449256762078,13.243231130842826,12.055259676699949,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,18,3.0816163592117847,1,2,2,True,3.0816163592117847,2,2,False,True,143,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +286,143,12.58449256762078,13.243231130842826,12.055259676699949,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,18,3.0816163592117847,1,2,2,True,3.0816163592117847,2,2,False,True,143,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +287,144,12.509433519877748,13.092673466596299,12.0197738013478,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,19,7.5882182677593475,1,2,2,True,7.5882182677593475,2,2,False,True,144,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +288,144,12.509433519877748,13.092673466596299,12.0197738013478,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,19,7.5882182677593475,1,2,2,True,7.5882182677593475,2,2,False,True,144,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +289,145,12.839534330760669,13.334429526926916,12.175330964558722,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,20,32.66898786559783,1,2,2,True,32.66898786559783,2,2,False,True,145,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +290,145,12.839534330760669,13.334429526926916,12.175330964558722,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,20,32.66898786559783,1,2,2,True,32.66898786559783,2,2,False,True,145,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +291,146,12.908812809288086,13.460176837420336,12.25427706631663,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,21,11.55058986515076,1,2,2,True,11.55058986515076,2,2,False,True,146,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +292,146,12.908812809288086,13.460176837420336,12.25427706631663,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,21,11.55058986515076,1,2,2,True,11.55058986515076,2,2,False,True,146,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +293,147,13.071953945826005,13.35220135651185,12.110745282600172,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,22,7.8857862065733615,1,2,2,True,7.8857862065733615,2,2,False,True,147,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +294,147,13.071953945826005,13.35220135651185,12.110745282600172,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,22,7.8857862065733615,1,2,2,True,7.8857862065733615,2,2,False,True,147,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +295,148,12.441918542859106,12.932398855150494,11.740368244371272,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,23,1.0838126648308823,1,2,2,True,1.0838126648308823,2,2,False,True,148,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +296,148,12.441918542859106,12.932398855150494,11.740368244371272,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,23,1.0838126648308823,1,2,2,True,1.0838126648308823,2,2,False,True,148,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +297,149,12.982334062979428,13.45433172763323,12.096709127119773,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,24,8.163268092508233,1,2,2,True,8.163268092508233,2,2,False,True,149,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +298,149,12.982334062979428,13.45433172763323,12.096709127119773,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,24,8.163268092508233,1,2,2,True,8.163268092508233,2,2,False,True,149,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +299,150,12.779524812778899,13.228036608098574,12.015788473229922,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,25,1.6027833325925616,1,2,2,True,1.6027833325925616,2,2,False,True,150,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +300,150,12.779524812778899,13.228036608098574,12.015788473229922,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,25,1.6027833325925616,1,2,2,True,1.6027833325925616,2,2,False,True,150,1,45000,45.0,2,8.81,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +301,151,15.16976707496513,14.813952253390125,13.690809639052668,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,1,11.541303925682005,1,0,2,True,11.541303925682005,2,3,False,True,151,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +302,151,15.16976707496513,14.813952253390125,13.690809639052668,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,1,11.541303925682005,1,0,2,True,11.541303925682005,2,3,False,True,151,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +303,152,15.031450096787758,14.678104149060959,13.291382210555154,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,2,3.9408173193890805,1,0,2,True,3.9408173193890805,2,3,False,True,152,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +304,152,15.031450096787758,14.678104149060959,13.291382210555154,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,2,3.9408173193890805,1,0,2,True,3.9408173193890805,2,3,False,True,152,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +305,153,15.127403222130239,14.894629582960967,13.790119300596512,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,3,29.34984059353661,1,0,2,True,29.34984059353661,2,3,False,True,153,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +306,153,15.127403222130239,14.894629582960967,13.790119300596512,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,3,29.34984059353661,1,0,2,True,29.34984059353661,2,3,False,True,153,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +307,154,15.143414660540813,14.852547045007686,13.485938411169416,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,4,4.973506555681281,1,0,2,True,4.973506555681281,2,3,False,True,154,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +308,154,15.143414660540813,14.852547045007686,13.485938411169416,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,4,4.973506555681281,1,0,2,True,4.973506555681281,2,3,False,True,154,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +309,155,15.082152874627399,14.75420693068006,13.674826402978383,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,5,19.38987822847505,1,0,2,True,19.38987822847505,2,3,False,True,155,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +310,155,15.082152874627399,14.75420693068006,13.674826402978383,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,5,19.38987822847505,1,0,2,True,19.38987822847505,2,3,False,True,155,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +311,156,14.930090955581814,14.738578320157844,13.541468174711465,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,6,15.491798058694476,1,0,2,True,15.491798058694476,2,3,False,True,156,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +312,156,14.930090955581814,14.738578320157844,13.541468174711465,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,6,15.491798058694476,1,0,2,True,15.491798058694476,2,3,False,True,156,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +313,157,14.820400026901277,14.457964616034976,13.26366676281793,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,7,4.931055930061613,1,0,2,True,4.931055930061613,2,3,False,True,157,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +314,157,14.820400026901277,14.457964616034976,13.26366676281793,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,7,4.931055930061613,1,0,2,True,4.931055930061613,2,3,False,True,157,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +315,158,15.017968208489654,14.900171624158654,13.648461348716596,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,8,24.072181380111846,1,0,2,True,24.072181380111846,2,3,False,True,158,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +316,158,15.017968208489654,14.900171624158654,13.648461348716596,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,8,24.072181380111846,1,0,2,True,24.072181380111846,2,3,False,True,158,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +317,159,14.939925310226503,14.89378951682848,13.666776217078368,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,9,13.287334528749792,1,0,2,True,13.287334528749792,2,3,False,True,159,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +318,159,14.939925310226503,14.89378951682848,13.666776217078368,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,9,13.287334528749792,1,0,2,True,13.287334528749792,2,3,False,True,159,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +319,160,14.729339295696192,14.35860962136866,13.192082179609056,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,10,4.3017041715042525,1,0,2,True,4.3017041715042525,2,3,False,True,160,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +320,160,14.729339295696192,14.35860962136866,13.192082179609056,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,10,4.3017041715042525,1,0,2,True,4.3017041715042525,2,3,False,True,160,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +321,161,14.87837805449124,14.60845872279318,13.223164568250477,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,11,4.49643270786049,1,0,2,True,4.49643270786049,2,3,False,True,161,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +322,161,14.87837805449124,14.60845872279318,13.223164568250477,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,11,4.49643270786049,1,0,2,True,4.49643270786049,2,3,False,True,161,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +323,162,14.955060659706687,14.625489662155223,13.16165457354852,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,12,1.7341283433691612,1,0,2,True,1.7341283433691612,2,3,False,True,162,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +324,162,14.955060659706687,14.625489662155223,13.16165457354852,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,12,1.7341283433691612,1,0,2,True,1.7341283433691612,2,3,False,True,162,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +325,163,15.224942267757143,14.950094247313102,13.781134847122155,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,13,29.90439822176781,1,0,2,True,29.90439822176781,2,3,False,True,163,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +326,163,15.224942267757143,14.950094247313102,13.781134847122155,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,13,29.90439822176781,1,0,2,True,29.90439822176781,2,3,False,True,163,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +327,164,15.242649841676464,14.961436703341008,13.755933200732352,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,14,37.975281025952754,1,0,2,True,37.975281025952754,2,3,False,True,164,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +328,164,15.242649841676464,14.961436703341008,13.755933200732352,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,14,37.975281025952754,1,0,2,True,37.975281025952754,2,3,False,True,164,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +329,165,15.011724598762596,14.601699647622752,13.386851134636759,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,15,4.785474223193776,1,0,2,True,4.785474223193776,2,3,False,True,165,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +330,165,15.011724598762596,14.601699647622752,13.386851134636759,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,15,4.785474223193776,1,0,2,True,4.785474223193776,2,3,False,True,165,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +331,166,14.99181000900189,14.71341090916733,13.481145323053658,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,16,7.680656277955135,1,0,2,True,7.680656277955135,2,3,False,True,166,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +332,166,14.99181000900189,14.71341090916733,13.481145323053658,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,16,7.680656277955135,1,0,2,True,7.680656277955135,2,3,False,True,166,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +333,167,14.901542581641959,14.567601773276424,13.677667274227167,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,17,13.090612278727638,1,0,2,True,13.090612278727638,2,3,False,True,167,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +334,167,14.901542581641959,14.567601773276424,13.677667274227167,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,17,13.090612278727638,1,0,2,True,13.090612278727638,2,3,False,True,167,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +335,168,14.775896138273984,14.491558079393787,13.4051799908331,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,18,10.64584400598515,1,0,2,True,10.64584400598515,2,3,False,True,168,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +336,168,14.775896138273984,14.491558079393787,13.4051799908331,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,18,10.64584400598515,1,0,2,True,10.64584400598515,2,3,False,True,168,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +337,169,14.580447561930235,14.170873588446023,13.12500368947278,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,19,8.378660608670398,1,0,2,True,8.378660608670398,2,3,False,True,169,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +338,169,14.580447561930235,14.170873588446023,13.12500368947278,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,19,8.378660608670398,1,0,2,True,8.378660608670398,2,3,False,True,169,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +339,170,14.686529313714612,14.449522665342169,13.104304120654911,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,20,5.476717948716615,1,0,2,True,5.476717948716615,2,3,False,True,170,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +340,170,14.686529313714612,14.449522665342169,13.104304120654911,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,20,5.476717948716615,1,0,2,True,5.476717948716615,2,3,False,True,170,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +341,171,14.837178395492867,14.60475737634405,13.321091886167489,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,21,5.665695040906015,1,0,2,True,5.665695040906015,2,3,False,True,171,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +342,171,14.837178395492867,14.60475737634405,13.321091886167489,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,21,5.665695040906015,1,0,2,True,5.665695040906015,2,3,False,True,171,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +343,172,14.852177861569558,14.59963601312587,13.248110890904007,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,22,2.013138881627045,1,0,2,True,2.013138881627045,2,3,False,True,172,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +344,172,14.852177861569558,14.59963601312587,13.248110890904007,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,22,2.013138881627045,1,0,2,True,2.013138881627045,2,3,False,True,172,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +345,173,14.756444276265224,14.34065561048424,13.129148171293005,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,23,5.019107435254359,1,0,2,True,5.019107435254359,2,3,False,True,173,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +346,173,14.756444276265224,14.34065561048424,13.129148171293005,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,23,5.019107435254359,1,0,2,True,5.019107435254359,2,3,False,True,173,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +347,174,15.008892702345719,14.527604003852533,13.435094945002854,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,24,14.574420964279721,1,0,2,True,14.574420964279721,2,3,False,True,174,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +348,174,15.008892702345719,14.527604003852533,13.435094945002854,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,24,14.574420964279721,1,0,2,True,14.574420964279721,2,3,False,True,174,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +349,175,14.912786758508462,14.658419800514967,13.260305457597417,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,25,6.244005674673785,1,0,2,True,6.244005674673785,2,3,False,True,175,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +350,175,14.912786758508462,14.658419800514967,13.260305457597417,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,25,6.244005674673785,1,0,2,True,6.244005674673785,2,3,False,True,175,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +351,176,13.280222939366054,13.508997448796467,12.195925256358441,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,1,8.772235795597183,1,1,2,True,8.772235795597183,2,3,False,True,176,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +352,176,13.280222939366054,13.508997448796467,12.195925256358441,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,1,8.772235795597183,1,1,2,True,8.772235795597183,2,3,False,True,176,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +353,177,13.265631915781093,13.44719036873622,12.233853952735029,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,2,11.483583946251056,1,1,2,True,11.483583946251056,2,3,False,True,177,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +354,177,13.265631915781093,13.44719036873622,12.233853952735029,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,2,11.483583946251056,1,1,2,True,11.483583946251056,2,3,False,True,177,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +355,178,13.160294860544315,13.578075641192186,12.209735215391213,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,3,7.677378758307949,1,1,2,True,7.677378758307949,2,3,False,True,178,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +356,178,13.160294860544315,13.578075641192186,12.209735215391213,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,3,7.677378758307949,1,1,2,True,7.677378758307949,2,3,False,True,178,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +357,179,13.31965281452972,13.55145145162714,12.261392507436598,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,4,5.5364802789209895,1,1,2,True,5.5364802789209895,2,3,False,True,179,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +358,179,13.31965281452972,13.55145145162714,12.261392507436598,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,4,5.5364802789209895,1,1,2,True,5.5364802789209895,2,3,False,True,179,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +359,180,13.236688263846341,13.59840772410148,12.306558052627695,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,5,16.30331024331073,1,1,2,True,16.30331024331073,2,3,False,True,180,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +360,180,13.236688263846341,13.59840772410148,12.306558052627695,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,5,16.30331024331073,1,1,2,True,16.30331024331073,2,3,False,True,180,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +361,181,12.965159883041316,13.391638830255543,12.338490582714671,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,6,5.96388786906673,1,1,2,True,5.96388786906673,2,3,False,True,181,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +362,181,12.965159883041316,13.391638830255543,12.338490582714671,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,6,5.96388786906673,1,1,2,True,5.96388786906673,2,3,False,True,181,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +363,182,13.076015075908018,13.595314767349743,12.18997565713105,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,7,9.256668349033347,1,1,2,True,9.256668349033347,2,3,False,True,182,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +364,182,13.076015075908018,13.595314767349743,12.18997565713105,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,7,9.256668349033347,1,1,2,True,9.256668349033347,2,3,False,True,182,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +365,183,13.126453858963922,13.529985398950066,12.276732091501836,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,8,9.832756778323805,1,1,2,True,9.832756778323805,2,3,False,True,183,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +366,183,13.126453858963922,13.529985398950066,12.276732091501836,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,8,9.832756778323805,1,1,2,True,9.832756778323805,2,3,False,True,183,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +367,184,13.085575180246495,13.400926960351109,12.115754549218178,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,9,5.388744565400215,1,1,2,True,5.388744565400215,2,3,False,True,184,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +368,184,13.085575180246495,13.400926960351109,12.115754549218178,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,9,5.388744565400215,1,1,2,True,5.388744565400215,2,3,False,True,184,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +369,185,12.995723371107259,13.430156734026012,12.16633365409246,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,10,9.268342613722039,1,1,2,True,9.268342613722039,2,3,False,True,185,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +370,185,12.995723371107259,13.430156734026012,12.16633365409246,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,10,9.268342613722039,1,1,2,True,9.268342613722039,2,3,False,True,185,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +371,186,13.086294640314383,13.495025236726756,12.298916254372466,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,11,8.766362614660602,1,1,2,True,8.766362614660602,2,3,False,True,186,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +372,186,13.086294640314383,13.495025236726756,12.298916254372466,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,11,8.766362614660602,1,1,2,True,8.766362614660602,2,3,False,True,186,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +373,187,13.275179784390337,13.548213384741477,12.352916557313698,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,12,10.134725464061166,1,1,2,True,10.134725464061166,2,3,False,True,187,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +374,187,13.275179784390337,13.548213384741477,12.352916557313698,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,12,10.134725464061166,1,1,2,True,10.134725464061166,2,3,False,True,187,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +375,188,13.172995507165405,13.514397123177606,12.154479310080506,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,13,2.161001773000451,1,1,2,True,2.161001773000451,2,3,False,True,188,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +376,188,13.172995507165405,13.514397123177606,12.154479310080506,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,13,2.161001773000451,1,1,2,True,2.161001773000451,2,3,False,True,188,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +377,189,13.24007686711973,13.424891760417966,12.189196917163807,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,14,3.755267550197129,1,1,2,True,3.755267550197129,2,3,False,True,189,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +378,189,13.24007686711973,13.424891760417966,12.189196917163807,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,14,3.755267550197129,1,1,2,True,3.755267550197129,2,3,False,True,189,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +379,190,13.16416098511552,13.467666049762311,12.157650644340714,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,15,7.0000435043765235,1,1,2,True,7.0000435043765235,2,3,False,True,190,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +380,190,13.16416098511552,13.467666049762311,12.157650644340714,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,15,7.0000435043765235,1,1,2,True,7.0000435043765235,2,3,False,True,190,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +381,191,13.045624110500686,13.548525063086844,12.246371272741552,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,16,2.2968884441349724,1,1,2,True,2.2968884441349724,2,3,False,True,191,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +382,191,13.045624110500686,13.548525063086844,12.246371272741552,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,16,2.2968884441349724,1,1,2,True,2.2968884441349724,2,3,False,True,191,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +383,192,13.102052803096297,13.388751135270814,12.210419452208075,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,17,21.482862969920358,1,1,2,True,21.482862969920358,2,3,False,True,192,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +384,192,13.102052803096297,13.388751135270814,12.210419452208075,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,17,21.482862969920358,1,1,2,True,21.482862969920358,2,3,False,True,192,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +385,193,12.98314580022795,13.348000956063718,12.18026753964902,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,18,18.34909639509928,1,1,2,True,18.34909639509928,2,3,False,True,193,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +386,193,12.98314580022795,13.348000956063718,12.18026753964902,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,18,18.34909639509928,1,1,2,True,18.34909639509928,2,3,False,True,193,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +387,194,12.699623750087307,13.090858206949743,11.982576868365788,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,19,7.7232106371263,1,1,2,True,7.7232106371263,2,3,False,True,194,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +388,194,12.699623750087307,13.090858206949743,11.982576868365788,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,19,7.7232106371263,1,1,2,True,7.7232106371263,2,3,False,True,194,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +389,195,12.723184750081009,13.322254558066026,11.950894952212689,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,20,1.948184934977611,1,1,2,True,1.948184934977611,2,3,False,True,195,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +390,195,12.723184750081009,13.322254558066026,11.950894952212689,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,20,1.948184934977611,1,1,2,True,1.948184934977611,2,3,False,True,195,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +391,196,13.150756013365413,13.52506620422661,12.334253082507312,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,21,38.88046261077998,1,1,2,True,38.88046261077998,2,3,False,True,196,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +392,196,13.150756013365413,13.52506620422661,12.334253082507312,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,21,38.88046261077998,1,1,2,True,38.88046261077998,2,3,False,True,196,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +393,197,13.326194885794372,13.412673161531874,12.220099415437735,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,22,23.29514397355357,1,1,2,True,23.29514397355357,2,3,False,True,197,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +394,197,13.326194885794372,13.412673161531874,12.220099415437735,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,22,23.29514397355357,1,1,2,True,23.29514397355357,2,3,False,True,197,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +395,198,12.97543547509393,13.173837120618105,11.95555909284275,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,23,9.799600614177782,1,1,2,True,9.799600614177782,2,3,False,True,198,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +396,198,12.97543547509393,13.173837120618105,11.95555909284275,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,23,9.799600614177782,1,1,2,True,9.799600614177782,2,3,False,True,198,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +397,199,13.208761530572106,13.348948866179066,12.22853509604228,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,24,14.721102647502548,1,1,2,True,14.721102647502548,2,3,False,True,199,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +398,199,13.208761530572106,13.348948866179066,12.22853509604228,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,24,14.721102647502548,1,1,2,True,14.721102647502548,2,3,False,True,199,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +399,200,13.040422043215706,13.315477833537178,12.19925379264749,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,25,7.03304841314779,1,1,2,True,7.03304841314779,2,3,False,True,200,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +400,200,13.040422043215706,13.315477833537178,12.19925379264749,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,25,7.03304841314779,1,1,2,True,7.03304841314779,2,3,False,True,200,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +401,201,13.245673102226426,13.387912378846064,12.153286948613198,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,1,3.5382739249851345,1,2,2,True,3.5382739249851345,2,3,False,True,201,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +402,201,13.245673102226426,13.387912378846064,12.153286948613198,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,1,3.5382739249851345,1,2,2,True,3.5382739249851345,2,3,False,True,201,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +403,202,13.251975581012717,13.482227293496402,12.26254871799893,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,2,3.7275993850082214,1,2,2,True,3.7275993850082214,2,3,False,True,202,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +404,202,13.251975581012717,13.482227293496402,12.26254871799893,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,2,3.7275993850082214,1,2,2,True,3.7275993850082214,2,3,False,True,202,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +405,203,13.224967420340565,13.523107142872279,12.338734922733842,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,3,14.485158569949402,1,2,2,True,14.485158569949402,2,3,False,True,203,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +406,203,13.224967420340565,13.523107142872279,12.338734922733842,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,3,14.485158569949402,1,2,2,True,14.485158569949402,2,3,False,True,203,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +407,204,13.21704254799764,13.571516954269176,12.140992562724994,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,4,1.7022516568024884,1,2,2,True,1.7022516568024884,2,3,False,True,204,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +408,204,13.21704254799764,13.571516954269176,12.140992562724994,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,4,1.7022516568024884,1,2,2,True,1.7022516568024884,2,3,False,True,204,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +409,205,13.144631055319167,13.487108980812545,12.246788295543091,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,5,6.703205711643498,1,2,2,True,6.703205711643498,2,3,False,True,205,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +410,205,13.144631055319167,13.487108980812545,12.246788295543091,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,5,6.703205711643498,1,2,2,True,6.703205711643498,2,3,False,True,205,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +411,206,12.975832387067209,13.448303425203278,12.232254213568112,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,6,6.583860081822633,1,2,2,True,6.583860081822633,2,3,False,True,206,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +412,206,12.975832387067209,13.448303425203278,12.232254213568112,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,6,6.583860081822633,1,2,2,True,6.583860081822633,2,3,False,True,206,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +413,207,13.165454158942609,13.557735608668978,12.265971272642622,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,7,31.622769862029074,1,2,2,True,31.622769862029074,2,3,False,True,207,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +414,207,13.165454158942609,13.557735608668978,12.265971272642622,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,7,31.622769862029074,1,2,2,True,31.622769862029074,2,3,False,True,207,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +415,208,13.11099042534911,13.472488820611066,12.250110214409455,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,8,3.274556757748118,1,2,2,True,3.274556757748118,2,3,False,True,208,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +416,208,13.11099042534911,13.472488820611066,12.250110214409455,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,8,3.274556757748118,1,2,2,True,3.274556757748118,2,3,False,True,208,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +417,209,13.143147736713557,13.51171509010146,12.134090078248777,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,9,13.176050570855214,1,2,2,True,13.176050570855214,2,3,False,True,209,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +418,209,13.143147736713557,13.51171509010146,12.134090078248777,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,9,13.176050570855214,1,2,2,True,13.176050570855214,2,3,False,True,209,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +419,210,13.084527757938789,13.42066752065207,12.209028729040504,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,10,20.663521933407807,1,2,2,True,20.663521933407807,2,3,False,True,210,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +420,210,13.084527757938789,13.42066752065207,12.209028729040504,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,10,20.663521933407807,1,2,2,True,20.663521933407807,2,3,False,True,210,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +421,211,13.079024117398758,13.543221450054755,12.259190286586263,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,11,6.634344280420774,1,2,2,True,6.634344280420774,2,3,False,True,211,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +422,211,13.079024117398758,13.543221450054755,12.259190286586263,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,11,6.634344280420774,1,2,2,True,6.634344280420774,2,3,False,True,211,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +423,212,13.354194098817342,13.652361933479844,12.453877078871097,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,12,38.06148126238979,1,2,2,True,38.06148126238979,2,3,False,True,212,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +424,212,13.354194098817342,13.652361933479844,12.453877078871097,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,12,38.06148126238979,1,2,2,True,38.06148126238979,2,3,False,True,212,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +425,213,13.183626767509649,13.420909952513599,12.160684756525795,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,13,1.4341724734163686,1,2,2,True,1.4341724734163686,2,3,False,True,213,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +426,213,13.183626767509649,13.420909952513599,12.160684756525795,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,13,1.4341724734163686,1,2,2,True,1.4341724734163686,2,3,False,True,213,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +427,214,13.31699357846652,13.555365452362826,12.318885186176756,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,14,12.793731644086899,1,2,2,True,12.793731644086899,2,3,False,True,214,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +428,214,13.31699357846652,13.555365452362826,12.318885186176756,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,14,12.793731644086899,1,2,2,True,12.793731644086899,2,3,False,True,214,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +429,215,13.1530274540474,13.283232884072,12.154699273457135,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,15,2.700680015318015,1,2,2,True,2.700680015318015,2,3,False,True,215,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +430,215,13.1530274540474,13.283232884072,12.154699273457135,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,15,2.700680015318015,1,2,2,True,2.700680015318015,2,3,False,True,215,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +431,216,13.208314431586127,13.436486496116698,12.269712858007377,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,16,12.118395448169084,1,2,2,True,12.118395448169084,2,3,False,True,216,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +432,216,13.208314431586127,13.436486496116698,12.269712858007377,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,16,12.118395448169084,1,2,2,True,12.118395448169084,2,3,False,True,216,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +433,217,13.089034547103548,13.343505675762756,12.205793349731492,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,17,15.884815995598183,1,2,2,True,15.884815995598183,2,3,False,True,217,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +434,217,13.089034547103548,13.343505675762756,12.205793349731492,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,17,15.884815995598183,1,2,2,True,15.884815995598183,2,3,False,True,217,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +435,218,12.83307030069726,13.320341405419208,12.061935231593765,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,18,3.650861700967141,1,2,2,True,3.650861700967141,2,3,False,True,218,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +436,218,12.83307030069726,13.320341405419208,12.061935231593765,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,18,3.650861700967141,1,2,2,True,3.650861700967141,2,3,False,True,218,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +437,219,12.644305406683058,13.106308888036702,11.95935455568048,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,19,5.671003496287027,1,2,2,True,5.671003496287027,2,3,False,True,219,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +438,219,12.644305406683058,13.106308888036702,11.95935455568048,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,19,5.671003496287027,1,2,2,True,5.671003496287027,2,3,False,True,219,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +439,220,12.83697470411602,13.19618774473282,12.054946163672081,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,20,2.2279456873951533,1,2,2,True,2.2279456873951533,2,3,False,True,220,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +440,220,12.83697470411602,13.19618774473282,12.054946163672081,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,20,2.2279456873951533,1,2,2,True,2.2279456873951533,2,3,False,True,220,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +441,221,13.09504438908035,13.446203677478394,12.26478914338267,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,21,17.220628848763734,1,2,2,True,17.220628848763734,2,3,False,True,221,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +442,221,13.09504438908035,13.446203677478394,12.26478914338267,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,21,17.220628848763734,1,2,2,True,17.220628848763734,2,3,False,True,221,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +443,222,13.167368639288211,13.373822799177766,12.092164336082563,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,22,4.372355992166978,1,2,2,True,4.372355992166978,2,3,False,True,222,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +444,222,13.167368639288211,13.373822799177766,12.092164336082563,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,22,4.372355992166978,1,2,2,True,4.372355992166978,2,3,False,True,222,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +445,223,12.795746587073115,12.764165153797085,11.763219978094666,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,23,1.407589756524465,1,2,2,True,1.407589756524465,2,3,False,True,223,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +446,223,12.795746587073115,12.764165153797085,11.763219978094666,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,23,1.407589756524465,1,2,2,True,1.407589756524465,2,3,False,True,223,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +447,224,13.175667325975942,13.49264785166699,12.239939767969402,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,24,26.44281033235335,1,2,2,True,26.44281033235335,2,3,False,True,224,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +448,224,13.175667325975942,13.49264785166699,12.239939767969402,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,24,26.44281033235335,1,2,2,True,26.44281033235335,2,3,False,True,224,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +449,225,13.029917201737222,13.342122252681483,12.126022969381438,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,25,10.220862653982845,1,2,2,True,10.220862653982845,2,3,False,True,225,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +450,225,13.029917201737222,13.342122252681483,12.126022969381438,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,25,10.220862653982845,1,2,2,True,10.220862653982845,2,3,False,True,225,1,80000,80.0,3,10.44,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +451,226,15.238716220508005,14.836345539230344,13.546505606961137,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,1,6.620437168684506,1,0,2,True,6.620437168684506,2,4,False,True,226,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +452,226,15.238716220508005,14.836345539230344,13.546505606961137,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,1,6.620437168684506,1,0,2,True,6.620437168684506,2,4,False,True,226,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +453,227,15.338109738073234,15.0070439667439,13.711896148178765,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,2,44.93177796327261,1,0,2,True,44.93177796327261,2,4,False,True,227,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +454,227,15.338109738073234,15.0070439667439,13.711896148178765,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,2,44.93177796327261,1,0,2,True,44.93177796327261,2,4,False,True,227,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +455,228,15.182832718042215,14.93702350141361,13.534071161274886,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,3,8.08132951060589,1,0,2,True,8.08132951060589,2,4,False,True,228,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +456,228,15.182832718042215,14.93702350141361,13.534071161274886,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,3,8.08132951060589,1,0,2,True,8.08132951060589,2,4,False,True,228,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +457,229,15.350697665467878,14.828935392011086,13.639460476935406,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,4,13.513888803191495,1,0,2,True,13.513888803191495,2,4,False,True,229,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +458,229,15.350697665467878,14.828935392011086,13.639460476935406,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,4,13.513888803191495,1,0,2,True,13.513888803191495,2,4,False,True,229,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +459,230,15.205740889703522,14.8976942780599,13.718690073009444,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,5,28.994434714815736,1,0,2,True,28.994434714815736,2,4,False,True,230,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +460,230,15.205740889703522,14.8976942780599,13.718690073009444,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,5,28.994434714815736,1,0,2,True,28.994434714815736,2,4,False,True,230,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +461,231,14.789067963680576,14.353041925947245,12.991577465796556,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,6,2.9695955410645123,1,0,2,True,2.9695955410645123,2,4,False,True,231,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +462,231,14.789067963680576,14.353041925947245,12.991577465796556,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,6,2.9695955410645123,1,0,2,True,2.9695955410645123,2,4,False,True,231,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +463,232,14.767798504324569,14.543375435992047,12.811869593297342,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,7,2.2358212965005597,1,0,2,True,2.2358212965005597,2,4,False,True,232,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +464,232,14.767798504324569,14.543375435992047,12.811869593297342,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,7,2.2358212965005597,1,0,2,True,2.2358212965005597,2,4,False,True,232,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +465,233,15.11968650246574,14.835055551135978,13.799569754375193,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,8,26.926363112555787,1,0,2,True,26.926363112555787,2,4,False,True,233,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +466,233,15.11968650246574,14.835055551135978,13.799569754375193,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,8,26.926363112555787,1,0,2,True,26.926363112555787,2,4,False,True,233,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +467,234,15.081759480409968,14.85645610000061,13.706308758552762,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,9,21.868744506701383,1,0,2,True,21.868744506701383,2,4,False,True,234,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +468,234,15.081759480409968,14.85645610000061,13.706308758552762,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,9,21.868744506701383,1,0,2,True,21.868744506701383,2,4,False,True,234,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +469,235,14.965177663698466,14.538828122693943,13.35053553284427,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,10,6.307911089987903,1,0,2,True,6.307911089987903,2,4,False,True,235,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +470,235,14.965177663698466,14.538828122693943,13.35053553284427,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,10,6.307911089987903,1,0,2,True,6.307911089987903,2,4,False,True,235,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +471,236,14.932378263965711,14.630119572161135,13.297754490964946,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,11,4.526262585330729,1,0,2,True,4.526262585330729,2,4,False,True,236,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +472,236,14.932378263965711,14.630119572161135,13.297754490964946,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,11,4.526262585330729,1,0,2,True,4.526262585330729,2,4,False,True,236,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +473,237,15.26427496333283,14.873416265351626,13.660776391169778,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,12,12.422754902824309,1,0,2,True,12.422754902824309,2,4,False,True,237,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +474,237,15.26427496333283,14.873416265351626,13.660776391169778,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,12,12.422754902824309,1,0,2,True,12.422754902824309,2,4,False,True,237,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +475,238,15.298186030822258,14.864813207863842,13.682629140167563,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,13,14.13869938017003,1,0,2,True,14.13869938017003,2,4,False,True,238,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +476,238,15.298186030822258,14.864813207863842,13.682629140167563,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,13,14.13869938017003,1,0,2,True,14.13869938017003,2,4,False,True,238,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +477,239,15.32491917861708,14.904479980021321,13.599349216920283,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,14,18.278683390249007,1,0,2,True,18.278683390249007,2,4,False,True,239,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +478,239,15.32491917861708,14.904479980021321,13.599349216920283,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,14,18.278683390249007,1,0,2,True,18.278683390249007,2,4,False,True,239,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +479,240,15.245701165182526,14.824005081121413,13.559392626794876,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,15,11.56195328350888,1,0,2,True,11.56195328350888,2,4,False,True,240,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +480,240,15.245701165182526,14.824005081121413,13.559392626794876,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,15,11.56195328350888,1,0,2,True,11.56195328350888,2,4,False,True,240,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +481,241,15.127581027348233,14.776515035157884,13.440683823747687,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,16,8.12260886122596,1,0,2,True,8.12260886122596,2,4,False,True,241,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +482,241,15.127581027348233,14.776515035157884,13.440683823747687,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,16,8.12260886122596,1,0,2,True,8.12260886122596,2,4,False,True,241,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +483,242,14.990918834262597,14.570247124686674,13.605402045861892,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,17,9.357439831646927,1,0,2,True,9.357439831646927,2,4,False,True,242,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +484,242,14.990918834262597,14.570247124686674,13.605402045861892,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,17,9.357439831646927,1,0,2,True,9.357439831646927,2,4,False,True,242,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +485,243,14.855237109002854,14.467588768371217,13.449560283164296,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,18,7.949579756402113,1,0,2,True,7.949579756402113,2,4,False,True,243,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +486,243,14.855237109002854,14.467588768371217,13.449560283164296,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,18,7.949579756402113,1,0,2,True,7.949579756402113,2,4,False,True,243,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +487,244,14.82957504968308,14.343354733007079,13.43774125353687,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,19,30.703321880934038,1,0,2,True,30.703321880934038,2,4,False,True,244,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +488,244,14.82957504968308,14.343354733007079,13.43774125353687,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,19,30.703321880934038,1,0,2,True,30.703321880934038,2,4,False,True,244,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +489,245,14.974534370525868,14.73069276591416,13.595983229202524,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,20,36.74423988260558,1,0,2,True,36.74423988260558,2,4,False,True,245,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +490,245,14.974534370525868,14.73069276591416,13.595983229202524,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,20,36.74423988260558,1,0,2,True,36.74423988260558,2,4,False,True,245,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +491,246,14.926247598465764,14.528634676472281,13.381395318068918,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,21,5.647697391537433,1,0,2,True,5.647697391537433,2,4,False,True,246,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +492,246,14.926247598465764,14.528634676472281,13.381395318068918,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,21,5.647697391537433,1,0,2,True,5.647697391537433,2,4,False,True,246,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +493,247,15.209265426944846,14.81205751187078,13.432018287787105,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,22,11.03235545933555,1,0,2,True,11.03235545933555,2,4,False,True,247,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +494,247,15.209265426944846,14.81205751187078,13.432018287787105,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,22,11.03235545933555,1,0,2,True,11.03235545933555,2,4,False,True,247,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +495,248,14.941019048917138,14.328778503622605,13.414167152449112,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,23,10.434488522549879,1,0,2,True,10.434488522549879,2,4,False,True,248,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +496,248,14.941019048917138,14.328778503622605,13.414167152449112,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,23,10.434488522549879,1,0,2,True,10.434488522549879,2,4,False,True,248,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +497,249,15.037637336839461,14.444732099536354,13.124123116063883,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,24,5.311949259193116,1,0,2,True,5.311949259193116,2,4,False,True,249,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +498,249,15.037637336839461,14.444732099536354,13.124123116063883,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,24,5.311949259193116,1,0,2,True,5.311949259193116,2,4,False,True,249,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +499,250,15.069745053834815,14.408421181655957,13.326924476064926,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,25,11.056007329219232,1,0,2,True,11.056007329219232,2,4,False,True,250,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +500,250,15.069745053834815,14.408421181655957,13.326924476064926,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,25,11.056007329219232,1,0,2,True,11.056007329219232,2,4,False,True,250,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,0,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +501,251,13.44758956967745,13.504625391717688,12.177576691520624,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,1,9.880923411950437,1,1,2,True,9.880923411950437,2,4,False,True,251,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +502,251,13.44758956967745,13.504625391717688,12.177576691520624,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,1,9.880923411950437,1,1,2,True,9.880923411950437,2,4,False,True,251,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +503,252,13.392434324761215,13.448263885197276,12.22926466799663,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,2,7.081547891710607,1,1,2,True,7.081547891710607,2,4,False,True,252,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +504,252,13.392434324761215,13.448263885197276,12.22926466799663,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,2,7.081547891710607,1,1,2,True,7.081547891710607,2,4,False,True,252,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +505,253,13.413056121306163,13.57682743357882,12.341563633190418,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,3,26.20917179563924,1,1,2,True,26.20917179563924,2,4,False,True,253,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +506,253,13.413056121306163,13.57682743357882,12.341563633190418,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,3,26.20917179563924,1,1,2,True,26.20917179563924,2,4,False,True,253,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +507,254,13.543039211779922,13.65030957258677,12.42796142692723,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,4,37.07906130940215,1,1,2,True,37.07906130940215,2,4,False,True,254,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +508,254,13.543039211779922,13.65030957258677,12.42796142692723,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,4,37.07906130940215,1,1,2,True,37.07906130940215,2,4,False,True,254,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +509,255,13.23813898610385,13.40680786480122,12.275305963908384,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,5,4.035833881943237,1,1,2,True,4.035833881943237,2,4,False,True,255,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +510,255,13.23813898610385,13.40680786480122,12.275305963908384,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,5,4.035833881943237,1,1,2,True,4.035833881943237,2,4,False,True,255,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +511,256,12.98053864530613,13.25533089752532,12.04754668595597,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,6,1.5430511478319637,1,1,2,True,1.5430511478319637,2,4,False,True,256,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +512,256,12.98053864530613,13.25533089752532,12.04754668595597,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,6,1.5430511478319637,1,1,2,True,1.5430511478319637,2,4,False,True,256,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +513,257,13.235774893318132,13.575389985673537,12.320958146516524,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,7,16.914287357065394,1,1,2,True,16.914287357065394,2,4,False,True,257,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +514,257,13.235774893318132,13.575389985673537,12.320958146516524,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,7,16.914287357065394,1,1,2,True,16.914287357065394,2,4,False,True,257,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +515,258,13.213019130990062,13.530245539352135,12.222162964362218,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,8,7.22948459873614,1,1,2,True,7.22948459873614,2,4,False,True,258,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +516,258,13.213019130990062,13.530245539352135,12.222162964362218,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,8,7.22948459873614,1,1,2,True,7.22948459873614,2,4,False,True,258,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +517,259,13.192654795035786,13.477116446612335,12.225878805607634,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,9,15.453756567662591,1,1,2,True,15.453756567662591,2,4,False,True,259,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +518,259,13.192654795035786,13.477116446612335,12.225878805607634,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,9,15.453756567662591,1,1,2,True,15.453756567662591,2,4,False,True,259,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +519,260,13.182063467184834,13.479769702129964,12.146125276786858,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,10,13.664352914732909,1,1,2,True,13.664352914732909,2,4,False,True,260,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +520,260,13.182063467184834,13.479769702129964,12.146125276786858,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,10,13.664352914732909,1,1,2,True,13.664352914732909,2,4,False,True,260,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +521,261,13.18480012779362,13.477828235551305,12.182858753703762,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,11,7.047122466589476,1,1,2,True,7.047122466589476,2,4,False,True,261,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +522,261,13.18480012779362,13.477828235551305,12.182858753703762,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,11,7.047122466589476,1,1,2,True,7.047122466589476,2,4,False,True,261,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +523,262,13.269955553457477,13.552307527872221,12.267931587547329,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,12,2.6313143481798646,1,1,2,True,2.6313143481798646,2,4,False,True,262,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +524,262,13.269955553457477,13.552307527872221,12.267931587547329,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,12,2.6313143481798646,1,1,2,True,2.6313143481798646,2,4,False,True,262,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +525,263,13.559418483272665,13.561608833863067,12.396673756986512,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,13,46.76247051727934,1,1,2,True,46.76247051727934,2,4,False,True,263,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +526,263,13.559418483272665,13.561608833863067,12.396673756986512,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,13,46.76247051727934,1,1,2,True,46.76247051727934,2,4,False,True,263,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +527,264,13.432133931157683,13.535494990074532,12.315995587882522,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,14,17.165038738302936,1,1,2,True,17.165038738302936,2,4,False,True,264,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +528,264,13.432133931157683,13.535494990074532,12.315995587882522,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,14,17.165038738302936,1,1,2,True,17.165038738302936,2,4,False,True,264,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +529,265,13.311562207074292,13.378572017559579,12.241922375904817,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,15,5.9784748127825,1,1,2,True,5.9784748127825,2,4,False,True,265,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +530,265,13.311562207074292,13.378572017559579,12.241922375904817,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,15,5.9784748127825,1,1,2,True,5.9784748127825,2,4,False,True,265,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +531,266,13.310770535825746,13.449573616876654,12.321260477202642,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,16,10.33539496724932,1,1,2,True,10.33539496724932,2,4,False,True,266,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +532,266,13.310770535825746,13.449573616876654,12.321260477202642,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,16,10.33539496724932,1,1,2,True,10.33539496724932,2,4,False,True,266,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +533,267,13.114424107378579,13.343208953118681,12.207301548803672,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,17,7.823513988786895,1,1,2,True,7.823513988786895,2,4,False,True,267,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +534,267,13.114424107378579,13.343208953118681,12.207301548803672,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,17,7.823513988786895,1,1,2,True,7.823513988786895,2,4,False,True,267,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +535,268,13.011203037258882,13.219740333790083,12.157201738573422,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,18,6.609288716985079,1,1,2,True,6.609288716985079,2,4,False,True,268,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +536,268,13.011203037258882,13.219740333790083,12.157201738573422,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,18,6.609288716985079,1,1,2,True,6.609288716985079,2,4,False,True,268,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +537,269,12.912624426061923,13.234989727321357,11.970743435358472,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,19,11.639322300360142,1,1,2,True,11.639322300360142,2,4,False,True,269,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +538,269,12.912624426061923,13.234989727321357,11.970743435358472,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,19,11.639322300360142,1,1,2,True,11.639322300360142,2,4,False,True,269,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +539,270,13.129111096350947,13.391478669386599,12.163817084186748,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,20,14.934060004044138,1,1,2,True,14.934060004044138,2,4,False,True,270,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +540,270,13.129111096350947,13.391478669386599,12.163817084186748,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,20,14.934060004044138,1,1,2,True,14.934060004044138,2,4,False,True,270,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +541,271,13.215655674923347,13.4781229847198,12.267828099298836,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,21,25.158942344854868,1,1,2,True,25.158942344854868,2,4,False,True,271,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +542,271,13.215655674923347,13.4781229847198,12.267828099298836,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,21,25.158942344854868,1,1,2,True,25.158942344854868,2,4,False,True,271,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +543,272,13.281333190146931,13.39655414201394,12.072668084834072,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,22,4.531323441239523,1,1,2,True,4.531323441239523,2,4,False,True,272,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +544,272,13.281333190146931,13.39655414201394,12.072668084834072,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,22,4.531323441239523,1,1,2,True,4.531323441239523,2,4,False,True,272,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +545,273,13.154516907775848,13.286724256572727,12.018062213437133,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,23,13.134194635588159,1,1,2,True,13.134194635588159,2,4,False,True,273,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +546,273,13.154516907775848,13.286724256572727,12.018062213437133,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,23,13.134194635588159,1,1,2,True,13.134194635588159,2,4,False,True,273,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +547,274,13.240044745725374,13.345351797204,12.183271726713429,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,24,8.101981724859474,1,1,2,True,8.101981724859474,2,4,False,True,274,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +548,274,13.240044745725374,13.345351797204,12.183271726713429,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,24,8.101981724859474,1,1,2,True,8.101981724859474,2,4,False,True,274,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +549,275,13.086630080679498,13.371377488944114,12.121623467196178,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,25,4.825620097101846,1,1,2,True,4.825620097101846,2,4,False,True,275,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +550,275,13.086630080679498,13.371377488944114,12.121623467196178,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,25,4.825620097101846,1,1,2,True,4.825620097101846,2,4,False,True,275,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,1,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +551,276,13.455298959588552,13.517432251029145,12.282142663753168,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,1,17.83489889493407,1,2,2,True,17.83489889493407,2,4,False,True,276,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +552,276,13.455298959588552,13.517432251029145,12.282142663753168,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,1,17.83489889493407,1,2,2,True,17.83489889493407,2,4,False,True,276,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,46,82,20.3,1.0,15.0,27318,7,224,21927,2137,2254,18,758,284.01965,932.83514,0,0.0,0.0,0.0,3,5.89564,2.875,1707.375,2.8701670077474053,False +553,277,13.422865293807936,13.529465118799742,12.315937619717722,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,2,13.069624586363915,1,2,2,True,13.069624586363915,2,4,False,True,277,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +554,277,13.422865293807936,13.529465118799742,12.315937619717722,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,2,13.069624586363915,1,2,2,True,13.069624586363915,2,4,False,True,277,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,134,240,31.1,1.0,24.79297,42078,19,453,33422,4399,2948,56,800,269.6431,885.61682,0,0.0,0.0,0.0,1,5.84871,5.195214044757156,1631.3747505618778,5.178722083182309,False +555,278,13.298524094752075,13.424558468064182,12.2971395528537,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,3,6.631094850412764,1,2,2,True,6.631094850412764,2,4,False,True,278,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +556,278,13.298524094752075,13.424558468064182,12.2971395528537,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,3,6.631094850412764,1,2,2,True,6.631094850412764,2,4,False,True,278,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,267,476,14.7,1.0,2.31799,2445,38,93,1159,950,211,0,32,218.08298,716.27252,0,0.0,0.0,0.0,1,5.53231,80.47040527548305,736.8919134777381,72.5479870569897,False +557,279,13.47024885514088,13.585633586387038,12.279659295506542,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,4,11.432454045552834,1,2,2,True,11.432454045552834,2,4,False,True,279,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +558,279,13.47024885514088,13.585633586387038,12.279659295506542,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,4,11.432454045552834,1,2,2,True,11.432454045552834,2,4,False,True,279,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,151,253,19.3,1.0,18.0,22434,20,403,15430,3200,1907,116,1378,191.0,314.0,0,0.0,0.0,0.0,2,5.6433,7.947368421052632,1180.7368421052631,7.894233480535521,False +559,280,13.201153199325823,13.475090754706342,12.234637710062849,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,5,5.287035764801275,1,2,2,True,5.287035764801275,2,4,False,True,280,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +560,280,13.201153199325823,13.475090754706342,12.234637710062849,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,5,5.287035764801275,1,2,2,True,5.287035764801275,2,4,False,True,280,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,611,1069,52.7,1.0,15.0,15662,86,2175,6356,5443,1292,5,391,191.0087,314.01431,0,0.0,72.14684,0.0,1,5.52555,38.1875,978.875,36.75367940760769,False +561,281,13.073499162327979,13.380562399179185,12.239005453910165,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,6,5.194229096369147,1,2,2,True,5.194229096369147,2,4,False,True,281,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +562,281,13.073499162327979,13.380562399179185,12.239005453910165,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,6,5.194229096369147,1,2,2,True,5.194229096369147,2,4,False,True,281,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2240,3963,29.0,7.0,8.0,3789,226,151,924,1997,672,1,44,150.0,546.0,0,0.0,0.0,0.0,1,5.00004,149.33333333333334,252.6,93.85038978271686,False +563,282,13.151066257004576,13.513755078967217,12.222186911447341,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,7,7.012397602208886,1,2,2,True,7.012397602208886,2,4,False,True,282,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +564,282,13.151066257004576,13.513755078967217,12.222186911447341,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,7,7.012397602208886,1,2,2,True,7.012397602208886,2,4,False,True,282,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,3762,6032,45.0,13.0,14.0,11300,425,252,5535,4593,799,1,120,318.85754,933.24158,0,0.0,0.0,0.0,1,5.35435,139.33333333333334,418.51851851851853,104.5323772849998,False +565,283,13.238333779529565,13.51204372002887,12.281133253793131,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,8,7.377202985012893,1,2,2,True,7.377202985012893,2,4,False,True,283,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +566,283,13.238333779529565,13.51204372002887,12.281133253793131,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,8,7.377202985012893,1,2,2,True,7.377202985012893,2,4,False,True,283,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,4582,9907,51.0,8.33042,15.0,4171,876,344,1413,1690,648,7,69,138.6747,529.59387,0,0.0,0.0,0.0,2,4.64648,196.39595000861536,178.7794647503131,93.5870567218022,False +567,284,13.126053530988234,13.44331648359168,12.171478368428593,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,9,3.0208228888479898,1,2,2,True,3.0208228888479898,2,4,False,True,284,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +568,284,13.126053530988234,13.44331648359168,12.171478368428593,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,9,3.0208228888479898,1,2,2,True,3.0208228888479898,2,4,False,True,284,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,5545,10171,112.0,9.79332,47.0,31248,1034,123,8750,9500,12434,4,437,181.05391,299.21539,0,26.92893,2035.58118,20.60887,2,5.22542,97.63472182996169,550.2055523431277,82.92038669699788,False +569,285,13.087528118914634,13.376743418603787,12.044064337694094,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,10,1.7434421021447681,1,2,2,True,1.7434421021447681,2,4,False,True,285,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +570,285,13.087528118914634,13.376743418603787,12.044064337694094,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,10,1.7434421021447681,1,2,2,True,1.7434421021447681,2,4,False,True,285,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,5344,9308,73.5,10.37666,35.0,11172,822,139,3157,3008,4622,1,245,90.6058,277.92566,0,0.0,690.54974,0.0,3,4.73802,117.76979619037628,246.20586883212647,79.66360880593872,False +571,286,13.179000926320079,13.466198640455838,12.246699059459496,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,11,4.619914017810682,1,2,2,True,4.619914017810682,2,4,False,True,286,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +572,286,13.179000926320079,13.466198640455838,12.246699059459496,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,11,4.619914017810682,1,2,2,True,4.619914017810682,2,4,False,True,286,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2902,5163,81.0,12.58862,38.0,10581,456,2267,2971,2736,2351,2,254,116.0,259.0,0,0.0,0.0,0.0,3,4.647390000000001,57.364680040688995,209.1577117541455,45.017850590412394,False +573,287,13.31775011487474,13.478886856932332,12.307245013533995,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,12,2.4382895882307225,1,2,2,True,2.4382895882307225,2,4,False,True,287,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +574,287,13.31775011487474,13.478886856932332,12.307245013533995,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,12,2.4382895882307225,1,2,2,True,2.4382895882307225,2,4,False,True,287,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,793,1207,53.3,1.0,16.0,15184,15,537,5932,4702,3699,13,301,203.38792,893.98761,0,0.0,3434.2146,2376.73853,3,5.46202,46.64705882352941,893.1764705882352,44.33178576556742,False +575,288,13.361673442751087,13.515298402494212,12.288118048886137,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,13,5.12157113732263,1,2,2,True,5.12157113732263,2,4,False,True,288,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +576,288,13.361673442751087,13.515298402494212,12.288118048886137,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,13,5.12157113732263,1,2,2,True,5.12157113732263,2,4,False,True,288,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,102,166,26.5,1.0,19.79609,20289,2,792,15418,2402,1485,5,187,202.04991,888.1063800000001,0,348.71741000000003,1719.16077,3824.83545,3,5.51319,4.904768155937005,975.6160893706461,4.880233491040455,False +577,289,13.425226926600217,13.436810926830354,12.293597624188351,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,14,9.930664605988513,1,2,2,True,9.930664605988513,2,4,False,True,289,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +578,289,13.425226926600217,13.436810926830354,12.293597624188351,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,14,9.930664605988513,1,2,2,True,9.930664605988513,2,4,False,True,289,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,476,728,30.6,1.0,27.39873,28433,8,216,19167,2702,4286,14,2048,237.35252000000003,981.77643,0,0.0,851.33472,251.48717,3,5.52147,16.761312917866398,1001.2067441044019,16.485330180694433,False +579,290,13.29838363796958,13.32452178350225,12.130369146667533,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,15,4.1764066038279735,1,2,2,True,4.1764066038279735,2,4,False,True,290,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +580,290,13.29838363796958,13.32452178350225,12.130369146667533,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,15,4.1764066038279735,1,2,2,True,4.1764066038279735,2,4,False,True,290,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,279,470,28.5,3.0,14.0,16111,6,151,11256,2005,2175,9,515,262.41342000000003,1085.43726,0,0.0,0.0,0.0,3,5.5902400000000005,16.41176470588235,947.7058823529412,16.13239421454976,False +581,291,13.298901419840682,13.383839338773479,12.265170883589303,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,16,10.563134930732026,1,2,2,True,10.563134930732026,2,4,False,True,291,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +582,291,13.298901419840682,13.383839338773479,12.265170883589303,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,16,10.563134930732026,1,2,2,True,10.563134930732026,2,4,False,True,291,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,6164,10272,123.4,13.73247,72.0,23407,279,2791,11982,4588,3569,65,412,164.00706,532.0228900000001,0,0.0,0.0,0.0,2,4.75017,71.8980801556283,273.02374467923295,56.91110757846511,False +583,292,13.153530216614334,13.398562789871741,12.171785792094255,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,17,9.503228810769224,1,2,2,True,9.503228810769224,2,4,False,True,292,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +584,292,13.153530216614334,13.398562789871741,12.171785792094255,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,17,9.503228810769224,1,2,2,True,9.503228810769224,2,4,False,True,292,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,4075,7119,152.3,23.84518,36.0,9077,193,287,3374,1494,3691,5,226,109.0,477.0,1,0.0,0.0,0.0,1,4.58156,68.09236767271817,151.67470462951235,46.99470965368482,True +585,293,12.92314595857811,13.13771605439342,12.038032323616786,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,18,2.9281790217625807,1,2,2,True,2.9281790217625807,2,4,False,True,293,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +586,293,12.92314595857811,13.13771605439342,12.038032323616786,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,18,2.9281790217625807,1,2,2,True,2.9281790217625807,2,4,False,True,293,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1034,2069,107.3,2.09941,50.0,6772,137,326,2273,1250,2431,25,467,95.0,273.0,1,0.0,0.0,0.0,3,4.1701,19.846673887477806,129.98227811025114,17.217739631821637,True +587,294,12.631630636374581,13.047434022037299,11.79450195366704,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,19,1.874273324020115,1,2,2,True,1.874273324020115,2,4,False,True,294,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +588,294,12.631630636374581,13.047434022037299,11.79450195366704,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,19,1.874273324020115,1,2,2,True,1.874273324020115,2,4,False,True,294,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,843,1608,125.4,14.19946,74.0,10248,106,929,2892,1130,4388,0,909,82.00709,225.01944,1,0.0,0.0,0.0,3,4.1848,9.557881646894437,116.19118756509393,8.831410253121827,True +589,295,13.13202375626393,13.346100040461671,12.104017427124258,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,20,24.86576877178561,1,2,2,True,24.86576877178561,2,4,False,True,295,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +590,295,13.13202375626393,13.346100040461671,12.104017427124258,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,20,24.86576877178561,1,2,2,True,24.86576877178561,2,4,False,True,295,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,2006,3691,98.3,15.35359,35.0,3610,210,274,995,1046,903,0,392,82.0,225.0,1,0.0,0.0,0.0,3,3.99027,39.838271710120374,71.69300143246987,25.608290753834503,True +591,296,13.242789014651168,13.45272856744191,12.327593705611939,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,21,34.38231753904585,1,2,2,True,34.38231753904585,2,4,False,True,296,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +592,296,13.242789014651168,13.45272856744191,12.327593705611939,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,21,34.38231753904585,1,2,2,True,34.38231753904585,2,4,False,True,296,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,3472,6203,78.9,15.189429999999998,44.0,7211,352,381,2802,1840,1975,0,213,123.0,355.0,1,0.0,0.0,0.0,3,4.29617,58.659122076357214,121.82918470409328,39.59477012942168,True +593,297,13.273492623826,13.454153122506002,12.208311375634164,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,22,9.889518322869554,1,2,2,True,9.889518322869554,2,4,False,True,297,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +594,297,13.273492623826,13.454153122506002,12.208311375634164,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,22,9.889518322869554,1,2,2,True,9.889518322869554,2,4,False,True,297,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1195,1925,87.7,9.0,46.0,19848,40,310,13956,3965,1218,10,389,191.0,525.0,0,0.0,0.0,0.0,3,4.93813,21.727272727272727,360.8727272727273,20.493413918685977,False +595,298,13.135798391178005,13.12212441621206,12.0474303574849,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,23,12.469391709935115,1,2,2,True,12.469391709935115,2,4,False,True,298,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +596,298,13.135798391178005,13.12212441621206,12.0474303574849,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,23,12.469391709935115,1,2,2,True,12.469391709935115,2,4,False,True,298,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,565,906,90.8,4.413,20.0,11296,19,230,5968,1799,1870,2,1427,164.0,409.0,1,0.0,0.0,0.0,1,5.11702,23.14340720108139,462.7042968910007,22.040968530765987,True +597,299,13.239464301343471,13.400515167528484,12.12870218974323,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,24,11.596675815448394,1,2,2,True,11.596675815448394,2,4,False,True,299,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +598,299,13.239464301343471,13.400515167528484,12.12870218974323,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,24,11.596675815448394,1,2,2,True,11.596675815448394,2,4,False,True,299,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,604,979,39.0,2.0,20.40358,16572,47,202,10872,2074,2825,13,586,242.73199,784.69391,0,0.0,0.0,0.0,1,5.35851,26.959976932258147,739.7032081479834,26.011919988436304,False +599,300,12.980068854196942,13.1736440305529,11.888088762919107,1,4,3,13,0,1,1,35,2,1,1,1,35,M,False,True,True,False,True,True,False,False,False,False,False,False,False,False,False,False,False,False,False,0,True,25,1.0235879035884936,1,2,2,True,1.0235879035884936,2,4,False,True,300,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False +600,300,12.980068854196942,13.1736440305529,11.888088762919107,2,4,3,13,0,1,1,55,1,4,3,0,0,N,False,True,True,True,False,False,False,False,False,False,True,False,False,False,False,False,False,False,False,0,False,25,1.0235879035884936,1,2,2,True,1.0235879035884936,2,4,False,True,300,1,150000,150.0,4,12.86,False,2,0,0,0,0,2,1,1,0,0,2,2,1,1,1,1551,3416,21.0,4.0,4.0,1608,435,302,369,630,220,0,87,232.0,341.0,0,0.0,0.0,0.0,1,4.89113,193.875,201.0,98.68660968660969,False diff --git a/activitysim/examples/prototype_mtc_extended/test/regress/final_trips.csv b/activitysim/examples/prototype_mtc_extended/test/regress/final_trips.csv index 2260ceead..da9600b02 100644 --- a/activitysim/examples/prototype_mtc_extended/test/regress/final_trips.csv +++ b/activitysim/examples/prototype_mtc_extended/test/regress/final_trips.csv @@ -1,80 +1,85 @@ -trip_id,person_id,household_id,primary_purpose,trip_num,outbound,trip_count,destination,origin,tour_id,purpose,destination_logsum,depart,trip_mode,mode_choice_logsum -211388201,644476,386761,escort,1,True,1,11,16,26423525,escort,,5,WALK_LOC,4.789158412380779 -211388205,644476,386761,escort,1,False,1,16,11,26423525,home,,6,WALK_LOC,5.050171287433508 -211388329,644476,386761,othdiscr,1,True,1,16,16,26423541,othdiscr,,18,WALK,7.330879513166791 -211388333,644476,386761,othdiscr,1,False,1,16,16,26423541,home,,18,WALK,7.330879513166791 -211388353,644476,386761,othmaint,1,True,1,13,16,26423544,othmaint,,18,WALK,-0.4192505336997586 -211388357,644476,386761,othmaint,1,False,1,16,13,26423544,home,,19,WALK,-0.41925030619506426 -211388441,644476,386761,work,1,True,1,4,16,26423555,work,,7,SHARED2FREE,0.6902839738239953 -211388445,644476,386761,work,1,False,1,16,4,26423555,home,,17,SHARED3FREE,-0.060176139897114116 -211388721,644477,386761,shopping,1,True,1,16,16,26423590,shopping,,14,WALK,5.857443647205806 -211388725,644477,386761,shopping,1,False,1,16,16,26423590,home,,14,WALK,5.857443647205806 -211389033,644478,386761,school,1,True,1,20,16,26423629,school,,11,WALK_LOC,1.5300445825829465 -211389037,644478,386761,school,1,False,1,16,20,26423629,home,,19,WALK_LRF,3.76602489416099 -515832417,1572659,763879,shopping,1,True,3,25,6,64479052,othmaint,40.895784325733594,7,WALK,12.896301701456215 -515832418,1572659,763879,shopping,2,True,3,25,25,64479052,escort,40.13139614585728,12,WALK,13.621701652814899 -515832419,1572659,763879,shopping,3,True,3,24,25,64479052,shopping,,17,WALK,3.0930067693134005 -515832421,1572659,763879,shopping,1,False,3,25,24,64479052,shopping,38.41713719577139,18,WALK,3.0706867412992 -515832422,1572659,763879,shopping,2,False,3,7,25,64479052,escort,59.6309483835455,20,WALK,12.807021629683366 -515832423,1572659,763879,shopping,3,False,3,6,7,64479052,home,,20,WALK,14.258626224164276 -535620049,1632987,824207,work,1,True,1,4,18,66952506,work,,15,WALK_LOC,0.2992185756062765 -535620053,1632987,824207,work,1,False,1,18,4,66952506,home,,21,WALK,0.5557332757868809 -615236801,1875721,982875,work,1,True,1,10,16,76904600,work,,8,WALK_LOC,7.627291076037502 -615236805,1875721,982875,work,1,False,1,16,10,76904600,home,,18,WALK_LOC,7.6193935739287255 -615236865,1875722,982875,eatout,1,True,2,7,16,76904608,escort,33.332775271121825,10,WALK,12.852466196970816 -615236866,1875722,982875,eatout,2,True,2,14,7,76904608,eatout,,13,WALK,0.0679239371174617 -615236869,1875722,982875,eatout,1,False,1,16,14,76904608,home,,17,WALK,0.9383092208675533 -708171009,2159057,1099626,work,1,True,1,2,20,88521376,work,,7,WALK,-0.35400338649017565 -708171013,2159057,1099626,work,1,False,2,8,2,88521376,shopping,28.059656557964445,18,WALK,0.34307389812569966 -708171014,2159057,1099626,work,2,False,2,20,8,88521376,home,,18,WALK_LOC,9.930931452887558 -708171273,2159058,1099626,univ,1,True,1,9,20,88521409,univ,,15,WALK_LOC,10.081589126967758 -708171277,2159058,1099626,univ,1,False,1,20,9,88521409,home,,18,WALK_LOC,9.700222902924416 -708171601,2159059,1099626,school,1,True,1,20,20,88521450,school,,8,WALK,2.001157626801728 -708171605,2159059,1099626,school,1,False,1,20,20,88521450,home,,13,WALK,2.001157626801728 -841877257,2566698,1196298,work,1,True,1,1,25,105234657,work,,6,WALK,0.5218384234138416 -841877261,2566698,1196298,work,1,False,1,25,1,105234657,home,,17,WALK_LOC,0.4855336440096438 -841877849,2566700,1196298,school,1,True,1,25,25,105234731,school,,7,WALK,12.824615869979219 -841877853,2566700,1196298,school,1,False,1,25,25,105234731,home,,15,WALK,12.824615869979219 -841878177,2566701,1196298,school,1,True,1,3,25,105234772,school,,8,WALK,8.979312480941104 -841878181,2566701,1196298,school,1,False,1,25,3,105234772,home,,13,WALK,8.979312481086987 -841878505,2566702,1196298,school,1,True,1,6,25,105234813,school,,12,WALK_LOC,11.709395865665709 -841878509,2566702,1196298,school,1,False,2,25,6,105234813,shopping,51.23589608925055,20,WALK_LOC,11.238325436501778 -841878510,2566702,1196298,school,2,False,2,25,25,105234813,home,,20,WALK,11.641815891720018 -1004301497,3061894,1363467,shopping,1,True,1,20,24,125537687,shopping,,12,TNC_SHARED,0.09686480459546322 -1004301501,3061894,1363467,shopping,1,False,1,24,20,125537687,home,,13,DRIVEALONEFREE,0.015792413826355586 -1004301761,3061895,1363467,othdiscr,1,True,1,9,24,125537720,othdiscr,,17,WALK_HVY,11.684658026322639 -1004301765,3061895,1363467,othdiscr,1,False,1,24,9,125537720,home,,19,WALK_LRF,11.49938905905555 -1004301785,3061895,1363467,othmaint,1,True,1,7,24,125537723,othmaint,,15,WALK,8.131583343724042 -1004301789,3061895,1363467,othmaint,1,False,1,24,7,125537723,home,,16,WALK,8.096583148991245 -1004301873,3061895,1363467,work,1,True,1,25,24,125537734,work,,6,WALK,10.08552703351978 -1004301877,3061895,1363467,work,1,False,1,24,25,125537734,home,,13,WALK,10.103127058632895 -1368289969,4171615,1810015,univ,1,True,1,12,16,171036246,univ,,13,WALK,4.061179288088942 -1368289973,4171615,1810015,univ,1,False,1,16,12,171036246,home,,13,WALK,4.06117926693834 -1368290273,4171616,1810015,othmaint,1,True,1,3,16,171036284,othmaint,,9,WALK,5.752949863933666 -1368290277,4171616,1810015,othmaint,1,False,1,16,3,171036284,home,,11,WALK,5.595449988691705 -1368290689,4171617,1810015,work,1,True,2,8,16,171036336,social,23.477345398553453,9,WALK,7.896576327414681 -1368290690,4171617,1810015,work,2,True,2,15,8,171036336,work,,12,WALK,-0.8211572450364255 -1368290693,4171617,1810015,work,1,False,1,16,15,171036336,home,,18,WALK,0.23912905823533456 -1368291297,4171619,1810015,shopping,1,True,1,1,16,171036412,shopping,,13,WALK,-1.0053143437541998 -1368291301,4171619,1810015,shopping,1,False,2,7,1,171036412,shopping,29.48393750646727,14,WALK,-1.5297238905680486 -1368291302,4171619,1810015,shopping,2,False,2,16,7,171036412,home,,15,WALK,12.573466151788852 -1368291609,4171620,1810015,school,1,True,1,8,16,171036451,school,,7,WALK_LOC,10.68060996983474 -1368291613,4171620,1810015,school,1,False,1,16,8,171036451,home,,15,WALK_LOC,10.665116381563836 -1368292281,4171622,1810015,shopping,1,True,1,19,16,171036535,shopping,,9,WALK,-2.394141994327624 -1368292285,4171622,1810015,shopping,1,False,1,16,19,171036535,home,,15,WALK,-2.4219133842589526 -1368292377,4171623,1810015,atwork,1,True,1,7,21,171036547,atwork,,10,WALK,13.897946303660285 -1368292381,4171623,1810015,atwork,1,False,2,6,7,171036547,othmaint,62.239483838845736,10,WALK,14.364186248721689 -1368292382,4171623,1810015,atwork,2,False,2,21,6,171036547,work,,10,WALK,12.200629295549986 -1368292657,4171623,1810015,work,1,True,2,25,16,171036582,escort,30.234430836012045,8,WALK,9.029527074456235 -1368292658,4171623,1810015,work,2,True,2,21,25,171036582,work,,8,WALK,2.0014416307382055 -1368292661,4171623,1810015,work,1,False,2,7,21,171036582,work,34.72578612209499,23,WALK,2.5646380272501808 -1368292662,4171623,1810015,work,2,False,2,16,7,171036582,home,,23,WALK,9.584561374619746 -2464104641,7512514,2821179,eatout,1,True,1,13,8,308013080,eatout,,8,WALK,-1.171759971785514 -2464104645,7512514,2821179,eatout,1,False,1,8,13,308013080,home,,16,WALK,-1.238718768693438 -2464104857,7512514,2821179,shopping,1,True,1,6,8,308013107,shopping,,17,WALK,12.612248978887928 -2464104861,7512514,2821179,shopping,1,False,1,8,6,308013107,home,,19,WALK,12.322088998148224 -2464104881,7512514,2821179,social,1,True,1,9,8,308013110,social,,16,WALK,6.292424410910544 -2464104885,7512514,2821179,social,1,False,1,8,9,308013110,home,,16,WALK_LOC,6.322192231184283 -2464449633,7513565,2822230,work,1,True,2,9,8,308056204,univ,40.040196758213916,9,WALK,7.9948426686587775 -2464449634,7513565,2822230,work,2,True,2,25,9,308056204,work,,9,WALK,8.34752700809022 -2464449637,7513565,2822230,work,1,False,1,8,25,308056204,home,,18,WALK,9.31552710851258 +trip_id,person_id,household_id,primary_purpose,trip_num,outbound,trip_count,destination,origin,tour_id,escort_participants,school_escort_direction,purpose,destination_logsum,depart,trip_mode,mode_choice_logsum +242323049,644476,386761,escort,1,True,1,21,16,30290381,,,escort,,6,WALK_LOC,4.042535128605572 +242323053,644476,386761,escort,1,False,1,16,21,30290381,,,home,,7,WALK_LOC,4.052167807394184 +242323057,644476,386761,escort,1,True,1,5,16,30290382,,,escort,,18,WALK_LOC,4.080648337226452 +242323061,644476,386761,escort,1,False,1,16,5,30290382,,,home,,19,WALK_LOC,3.988008105859652 +242323337,644476,386761,work,1,True,2,16,16,30290417,,,shopping,22.646840437961423,7,WALK,5.89391877387621 +242323338,644476,386761,work,2,True,2,4,16,30290417,,,work,,9,WALK_LOC,0.5894708670927961 +242323341,644476,386761,work,1,False,1,16,4,30290417,,,home,,14,WALK,0.5926711189721502 +242323617,644477,386761,escort,1,True,1,20,16,30290452,644478,outbound,escort,,9,WALK_LOC,2.2266987144854578 +242323621,644477,386761,escort,1,False,1,16,20,30290452,,,home,,10,WALK_LOC,2.0602667118131186 +242323625,644477,386761,escort,1,True,1,20,16,30290453,,,escort,,15,SHARED2FREE,0.02563756984130738 +242323629,644477,386761,escort,1,False,1,16,20,30290453,644478,inbound,home,,21,SHARED2FREE,-0.6067369442221502 +242323665,644477,386761,shopping,1,True,1,24,16,30290458,,,shopping,,12,WALK,2.6242779649960877 +242323669,644477,386761,shopping,1,False,1,16,24,30290458,,,home,,15,WALK,2.1220846081768716 +242323977,644478,386761,school,1,True,1,20,16,30290497,644478,outbound,school,,9,WALK_LOC,1.5478828044209911 +242323981,644478,386761,school,1,False,1,16,20,30290497,644478,inbound,home,,21,WALK_LRF,3.7659908084629183 +591320097,1572659,763879,shopping,1,True,1,21,6,73915012,,,shopping,,15,WALK,3.4309851075419298 +591320101,1572659,763879,shopping,1,False,1,6,21,73915012,,,home,,16,WALK,3.2914869134330558 +614003473,1632987,824207,work,1,True,1,4,18,76750434,,,work,,11,WALK_LOC,0.8181455139717885 +614003477,1632987,824207,work,1,False,1,18,4,76750434,,,home,,18,TNC_SINGLE,0.8790372421971444 +705271457,1875721,982875,work,1,True,2,8,16,88158932,,,work,41.45726261453804,6,WALK,8.113864627032404 +705271458,1875721,982875,work,2,True,2,10,8,88158932,,,work,,7,WALK,7.348053505525651 +705271461,1875721,982875,work,1,False,4,25,10,88158932,,,eatout,38.63559821967325,15,WALK,5.593108397051723 +705271462,1875721,982875,work,2,False,4,7,25,88158932,,,work,48.58354002313392,17,WALK,9.985846622273144 +705271463,1875721,982875,work,3,False,4,7,7,88158932,,,othmaint,49.371699606919584,17,WALK,11.253667166466773 +705271464,1875721,982875,work,4,False,4,16,7,88158932,,,home,,18,WALK,9.801673790592494 +705271521,1875722,982875,eatout,1,True,1,16,16,88158940,,,eatout,,14,WALK,7.330879548563644 +705271525,1875722,982875,eatout,1,False,1,16,16,88158940,,,home,,14,WALK,7.330879548563644 +811805465,2159057,1099626,atwork,1,True,1,12,2,101475683,,,atwork,,10,BIKE,4.715323420502534 +811805469,2159057,1099626,atwork,1,False,4,6,12,101475683,,,eatout,41.607319446651566,11,BIKE,4.632510408415956 +811805470,2159057,1099626,atwork,2,False,4,7,6,101475683,,,shopping,58.5981022037824,11,BIKE,12.82544340906675 +811805471,2159057,1099626,atwork,3,False,4,8,7,101475683,,,shopping,57.83733158702466,11,BIKE,14.251604787530562 +811805472,2159057,1099626,atwork,4,False,4,2,8,101475683,,,work,,11,BIKE,11.986218844988313 +811805793,2159057,1099626,work,1,True,2,20,20,101475724,2159059,outbound,escort,,8,BIKE,1.469491859537221 +811805794,2159057,1099626,work,2,True,2,2,20,101475724,,outbound,work,,8,BIKE,-0.5791792872936957 +811805797,2159057,1099626,work,1,False,1,20,2,101475724,,,home,,16,BIKE,-0.6248114915418729 +811806057,2159058,1099626,univ,1,True,1,9,20,101475757,,,univ,,8,WALK_LOC,10.269026275933195 +811806061,2159058,1099626,univ,1,False,1,20,9,101475757,,,home,,15,WALK,10.018001375307323 +811806433,2159059,1099626,school,1,True,1,20,20,101475804,2159059,outbound,school,,8,WALK,0.8576518414590414 +811806437,2159059,1099626,school,1,False,2,8,20,101475804,,,escort,29.091231748200702,13,WALK,0.10962101219955418 +811806438,2159059,1099626,school,2,False,2,20,8,101475804,,,home,,13,WALK,9.517154177486342 +965078809,2566698,1196298,work,1,True,2,3,25,120634851,2566701,outbound,escort,,7,WALK,8.059508316855172 +965078810,2566698,1196298,work,2,True,2,1,3,120634851,,outbound,work,,7,WALK_LOC,0.4529523235490027 +965078813,2566698,1196298,work,1,False,2,3,1,120634851,,inbound,escort,,15,WALK_LOC,0.5918779092532164 +965078814,2566698,1196298,work,2,False,2,25,3,120634851,2566701,inbound,home,,15,WALK,8.060043328570224 +965079449,2566700,1196298,school,1,True,1,25,25,120634931,,,school,,8,WALK,12.824615869979219 +965079453,2566700,1196298,school,1,False,1,25,25,120634931,,,home,,11,WALK,12.824615869979219 +965079825,2566701,1196298,school,1,True,1,3,25,120634978,2566701,outbound,school,,7,WALK_LOC,9.001507052987597 +965079829,2566701,1196298,school,1,False,1,25,3,120634978,2566701,inbound,home,,15,WALK,9.002706716094952 +965080201,2566702,1196298,school,1,True,1,6,25,120635025,,,school,,8,WALK_LOC,11.701783633702806 +965080205,2566702,1196298,school,1,False,1,25,6,120635025,,,home,,11,WALK_LOC,11.238325486443596 +1151272457,3061894,1363467,shopping,1,True,2,7,24,143909057,,,shopping,41.17967845304803,9,WALK,12.456175870180834 +1151272458,3061894,1363467,shopping,2,True,2,16,7,143909057,,,shopping,,9,WALK,5.016065552186878 +1151272461,3061894,1363467,shopping,1,False,1,24,16,143909057,,,home,,10,WALK,6.0144523659233045 +1151272721,3061895,1363467,othdiscr,1,True,1,12,24,143909090,,,othdiscr,,18,WALK_LOC,5.383162707344228 +1151272725,3061895,1363467,othdiscr,1,False,1,24,12,143909090,,,home,,21,WALK_LOC,5.237593750735324 +1151272881,3061895,1363467,work,1,True,1,25,24,143909110,,,work,,8,WALK,10.08552703351978 +1151272885,3061895,1363467,work,1,False,2,25,25,143909110,,,shopping,47.32022679220743,18,WALK,10.4111270318245 +1151272886,3061895,1363467,work,2,False,2,24,25,143909110,,,home,,18,WALK,10.10312705864723 +1568527489,4171615,1810015,univ,1,True,1,12,16,196065936,,,univ,,18,WALK,4.0611793008879475 +1568527493,4171615,1810015,univ,1,False,1,16,12,196065936,,,home,,20,WALK,4.061179308034228 +1568527841,4171616,1810015,othmaint,1,True,1,1,16,196065980,,,othmaint,,11,WALK,-0.6301988612643667 +1568527845,4171616,1810015,othmaint,1,False,1,16,1,196065980,,,home,,11,WALK,-0.749167736404025 +1568528353,4171617,1810015,work,1,True,1,15,16,196066044,,,work,,9,WALK,0.3711262527058136 +1568528357,4171617,1810015,work,1,False,1,16,15,196066044,,,home,,18,WALK,0.23912905823533456 +1568529057,4171619,1810015,shopping,1,True,1,4,16,196066132,,,shopping,,17,WALK,-0.07597522284652446 +1568529061,4171619,1810015,shopping,1,False,1,16,4,196066132,,,home,,20,WALK,-0.07597486440603607 +1568529369,4171620,1810015,school,1,True,1,8,16,196066171,,,school,,7,WALK_LOC,10.68060996983474 +1568529373,4171620,1810015,school,1,False,1,16,8,196066171,,,home,,15,WALK_LOC,10.665116381563836 +1568530185,4171622,1810015,shopping,1,True,1,4,16,196066273,,,shopping,,15,WALK_LOC,-0.014574145190408769 +1568530189,4171622,1810015,shopping,1,False,1,16,4,196066273,,,home,,20,TNC_SHARED,-0.06502600888675153 +1568530249,4171623,1810015,atwork,1,True,1,20,21,196066281,,,atwork,,11,WALK,2.118733254713498 +1568530253,4171623,1810015,atwork,1,False,1,21,20,196066281,,,work,,13,WALK,2.2992126518613984 +1568530609,4171623,1810015,work,1,True,1,21,16,196066326,,,work,,7,WALK,2.520638113923786 +1568530613,4171623,1810015,work,1,False,1,16,21,196066326,,,home,,21,WALK,2.7406373944340223 +2824705313,7512514,2821179,eatout,1,True,1,5,8,353088164,,,eatout,,9,WALK,4.457538179557397 +2824705317,7512514,2821179,eatout,1,False,2,7,5,353088164,,,shopping,43.50687191689003,13,WALK,4.680738174161898 +2824705318,7512514,2821179,eatout,2,False,2,8,7,353088164,,,home,,13,WALK,14.013106225776854 +2824705577,7512514,2821179,shopping,1,True,1,12,8,353088197,,,shopping,,14,WALK,4.543763976298257 +2824705581,7512514,2821179,shopping,1,False,1,8,12,353088197,,,home,,15,WALK,4.487964086847733 +2824705601,7512514,2821179,social,1,True,1,4,8,353088200,,,social,,17,WALK,-0.13172701844259144 +2824705605,7512514,2821179,social,1,False,1,8,4,353088200,,,home,,20,WALK,-0.13872634937357575 +2825100801,7513565,2822230,work,1,True,1,25,8,353137600,,,work,,7,WALK_LOC,10.398311261190385 +2825100805,7513565,2822230,work,1,False,2,7,25,353137600,,,escort,50.884369784570026,17,WALK,10.724502913622391 +2825100806,7513565,2822230,work,2,False,2,8,7,353137600,,,home,,18,WALK,11.575052263627297 diff --git a/activitysim/examples/prototype_mtc_extended/test/test_mtc_extended.py b/activitysim/examples/prototype_mtc_extended/test/test_mtc_extended.py index cc7bb7b54..15220d3ec 100644 --- a/activitysim/examples/prototype_mtc_extended/test/test_mtc_extended.py +++ b/activitysim/examples/prototype_mtc_extended/test/test_mtc_extended.py @@ -15,7 +15,7 @@ def teardown_function(func): inject.reinject_decorated_tables() -def test_prototype_mtc_extended(): +def run_test_mtc_extended(multiprocess=False): def example_path(dirname): resource = os.path.join("examples", "prototype_mtc_extended", dirname) return pkg_resources.resource_filename("activitysim", resource) @@ -34,20 +34,25 @@ def regress(): regress_vehicles_df = pd.read_csv(test_path("regress/final_vehicles.csv")) final_vehicles_df = pd.read_csv(test_path("output/final_vehicles.csv")) - # person_id,household_id,tour_id,primary_purpose,trip_num,outbound,trip_count,purpose, - # destination,origin,destination_logsum,depart,trip_mode,mode_choice_logsum - # compare_cols = [] + regress_accessibility_df = pd.read_csv( + test_path("regress/final_proto_disaggregate_accessibility.csv") + ) + final_accessibiliy_df = pd.read_csv( + test_path("output/final_proto_disaggregate_accessibility.csv") + ) + pdt.assert_frame_equal(final_trips_df, regress_trips_df) pdt.assert_frame_equal(final_vehicles_df, regress_vehicles_df) + pdt.assert_frame_equal(final_accessibiliy_df, regress_accessibility_df) file_path = os.path.join(os.path.dirname(__file__), "simulation.py") - subprocess.run( - [ - "coverage", - "run", - "-a", - file_path, + if multiprocess: + run_args = [ + "-c", + test_path("configs_mp"), + "-c", + example_path("configs_mp"), "-c", test_path("configs"), "-c", @@ -58,13 +63,29 @@ def regress(): example_mtc_path("data"), "-o", test_path("output"), - ], - check=True, - ) + ] + else: + run_args = [ + "-c", + test_path("configs"), + "-c", + example_path("configs"), + "-c", + example_mtc_path("configs"), + "-d", + example_mtc_path("data"), + "-o", + test_path("output"), + ] + + subprocess.run(["coverage", "run", "-a", file_path] + run_args, check=True) regress() -if __name__ == "__main__": +def test_mtc_extended(): + run_test_mtc_extended(multiprocess=False) + - test_prototype_mtc_extended() +def test_mtc_extended_mp(): + run_test_mtc_extended(multiprocess=True) diff --git a/conda-environments/activitysim-test.yml b/conda-environments/activitysim-test.yml index bcd8e7d40..e741d9638 100644 --- a/conda-environments/activitysim-test.yml +++ b/conda-environments/activitysim-test.yml @@ -26,5 +26,6 @@ dependencies: - requests >= 2.7 - sharrow >= 2.2 - simwrapper > 1.7 +- sklearn >= 1.1.1 - xarray >= 0.21 - zarr diff --git a/conda-environments/docbuild.yml b/conda-environments/docbuild.yml index a4617fcf6..c598d8606 100644 --- a/conda-environments/docbuild.yml +++ b/conda-environments/docbuild.yml @@ -1,4 +1,11 @@ # Environment for building docs +# +# This conda environment is used to build the documentation. It includes a +# number of dependencies needed for the documentation only, and not to run or +# test ActivitySim itself. Note that ActivitySim itself is *not* installed +# in this environment, you must install it separately after using this recipe, +# which allows you to install the specific version you want. + name: docbuild channels: - conda-forge @@ -43,4 +50,3 @@ dependencies: - pip: - autodoc_pydantic - - -e .. diff --git a/conda-environments/github-actions-tests.yml b/conda-environments/github-actions-tests.yml index 01108bdc4..383b8c917 100644 --- a/conda-environments/github-actions-tests.yml +++ b/conda-environments/github-actions-tests.yml @@ -1,4 +1,7 @@ # Environment for testing in GitHub Actions +# This environment contains a minimal set of dependencies needed to run most tests. +# It does not install ActivitySim itself (which is done by the test scripts) and +# is not meant for use outside the CI tools. name: asim-test channels: - conda-forge @@ -9,11 +12,11 @@ dependencies: - cytoolz >= 0.8.1 - isort - nbmake -- numba >= 0.55.2 +- numba = 0.55.2 # see https://github.com/conda-forge/numba-feedstock/pull/104 - numpy >= 1.16.1,<=1.21 - openmatrix >= 0.3.4.1 - orca >= 1.6 -- pandas >= 1.1.0 +- pandas >= 1.1.0,<1.5 - psutil >= 4.1 - pyarrow >= 2.0 - pypyr >= 5.3 @@ -23,7 +26,8 @@ dependencies: - pytest-regressions - pyyaml >= 5.1 - requests >= 2.7 -- sharrow >= 2.2.4 +- sharrow >= 2.3.2 - simwrapper > 1.7 +- scikit-learn >= 1.1.1 - xarray >= 0.21 -- zarr +- zarr \ No newline at end of file diff --git a/docs/examples.rst b/docs/examples.rst index cf2431efc..fe8950e7f 100644 --- a/docs/examples.rst +++ b/docs/examples.rst @@ -1054,6 +1054,17 @@ in this example are: * :ref:`vehicle_type_choice`: Selects a vehicle type for each household vehicle. Runs after auto_ownership. * :ref:`vehicle_allocation`: Allocates a vehicle for each tour and each occupancy level. Tour and trip mode choice auto operating costs are modified to reflect the allocated vehicle option. +* :ref:`school_escorting`: Explicitly models school drop-off / pick-up of students to and from school. + +The prototype_mtc_extended example also contains changes to test the flexible number of tour and trip ids. +(Information in why this is important can be found `here `__.) +The following changes were made to demonstrate this: + +* An additional alternative was added to the non-mandatory tour frequency alternatives file containing 2 other discretionary tours. +* An additional alternative was added to the stop_frequency_alts.csv for 4 outbound stops and 3 inbound stops. This alternative was then + included as part of the stop_frequency_othdiscr.csv specification with an added calibration constant to control that alternative. + Because an additional trip may now happen in the outbound direction, the trip scheduling probabilities table was extended for the + other discretionary tour purpose where the fourth outbound trip rows were copied for the now availabile fifth trip. .. _example_estimation : diff --git a/docs/models.rst b/docs/models.rst index 00dd28aa4..b5dfd4e39 100644 --- a/docs/models.rst +++ b/docs/models.rst @@ -98,26 +98,102 @@ Core Table: ``skims`` | Result Table: ``accessibility`` | Skims Keys: ``O-D, D-O .. automodule:: activitysim.abm.models.accessibility :members: + +.. _disaggregate_accessibility: + +Disaggregate Accessibility +-------------- + +The disaggregate accessibility model is an extension of the base accessibility model. +While the base accessibility model is based on a mode-specific decay function and uses fixed market +segments in the population (i.e., income), the disaggregate accessibility model extracts the actual +destination choice logsums by purpose (i.e., mandatory fixed school/work location and non-mandatory +tour destinations by purpose) from the actual model calculations using a user-defined proto-population. +This enables users to include features that may be more critical to destination +choice than just income (e.g., automobile ownership). + + +Inputs: + * disaggregate_accessibility.yaml - Configuration settings for disaggregate accessibility model. + * annotate.csv [optional] - Users can specify additional annotations specific to disaggregate accessibility. For example, annotating the proto-population tables. + +Outputs: + * final_disaggregate_accessibility.csv [optional] + * final_non_mandatory_tour_destination_accesibility.csv [optional] + * final_workplace_location_accessibility.csv [optional] + * final_school_location_accessibility.csv [optional] + * final_proto_persons.csv [optional] + * final_proto_households.csv [optional] + * final_proto_tours.csv [optional] + +The above tables are created in the model pipeline, but the model will not save +any outputs unless specified in settings.yaml - output_tables. Users can return +the proto population tables for inspection, as well as the raw logsum accessibilities +for mandatory school/work and non-mandatory destinations. The logsums are then merged +at the household level in final_disaggregate_accessibility.csv, which each tour purpose +logsums shown as separate columns. + + +**Usage** +The disaggregate accessibility model is run as a model step in the model list. +There are two necessary steps: + +``- initialize_proto_population`` | ``- compute_disaggregate_accessibility`` + +The reason the steps must be separate is to enable multiprocessing. +The proto-population must be fully generated and initialized before activitysim +slices the tables into separate threads. These steps must also occur before +initialize_households in order to avoid conflict with the shadow_pricing model. + + +The model steps can be run either as part the activitysim model run, or setup +to run as a standalone run to pre-computing the accessibility values. +For standalone implementations, the final_disaggregate_accessibility.csv is read +into the pipeline and initialized with the initialize_household model step. + + +**Configuration of disaggregate_accessibility.yaml:** + * CREATE_TABLES - Users define the variables to be generated for PROTO_HOUSEHOLDS, PROTO_PERSONS, and PROTO_TOURS tables using the following parameters: + + - VARIABLES - The base variable, must be a value or a list. Results in the cartesian product (all non-repeating combinations) of the fields. + - mapped_fields [optional] - For non-combinatorial fields, users can map a variable to the fields generated in VARIABLES (e.g., income category bins mapped to median dollar values). + - filter_rows [optional] - Users can also filter rows using pandas expressions if specific variable combinations are not desired. + - JOIN_ON [required only for PROTO_TOURS] - specify the persons variable to join the tours to (e.g., person_number). + * MERGE_ON - User specified fields to merge the proto-population logsums onto the full synthetic population + * annotate_proto_tables [optional] - Annotation configurations if users which to modify the proto-population beyond basic generation in the YAML. + * DESTINATION_SAMPLE_SIZE - The *destination* sample size (0 = all zones), e.g., the number of destination zone alternatives sampled for calculating the destination logsum. Decimal values < 1 will be interpreted as a percentage, e.g., 0.5 = 50% sample. + * ORIGIN_SAMPLE_SIZE - The *origin* sample size (0 = all zones), e.g., the number of origins where logsum is calculated. Origins without a logsum will draw from the nearest zone with a logsum. This parameter is useful for systems with a large number of zones with similar accessibility. Decimal values < 1 will be interpreted as a percentage, e.g., 0.5 = 50% sample. + * ORIGIN_SAMPLE_METHOD - The method in which origins are sampled. Population weighted sampling can be TAZ-based or "TAZ-agnostic" using KMeans clustering. The potential advantage of KMeans is to provide a more geographically even spread of MAZs sampled that do not rely on TAZ hierarchies. Unweighted sampling is also possible using 'uniform' and 'uniform-taz'. + + - None [Default] - Sample zones weighted by population, ensuring at least one TAZ is sampled per MAZ. If n-samples > n-tazs then sample 1 MAZ from each TAZ until n-remaining-samples < n-tazs, then sample n-remaining-samples TAZs and sample an MAZ within each of those TAZs. If n-samples < n-tazs, then it proceeds to the above 'then' condition. + + - "kmeans" - K-Means clustering is performed on the zone centroids (must be provided as maz_centroids.csv), weighted by population. The clustering yields k XY coordinates weighted by zone population for n-samples = k-clusters specified. Once k new cluster centroids are found, these are then approximated into the nearest available zone centroid and used to calculate accessibilities on. By default, the k-means method is run on 10 different initial cluster seeds (n_init) using using "k-means++" seeding algorithm (https://en.wikipedia.org/wiki/K-means%2B%2B). The k-means method runs for max_iter iterations (default=300). + + - "uniform" - Unweighted sample of N zones independent of each other. + + - "uniform-taz" - Unweighted sample of 1 zone per taz up to the N samples specified. + + .. _work_from_home: Work From Home -------------- -Telecommuting is defined as workers who work from home instead of going -to work. It only applies to workers with a regular workplace outside of home. -The telecommute model consists of two submodels - this work from home model and a -person :ref:`telecommute_frequency` model. This model predicts for all workers whether they +Telecommuting is defined as workers who work from home instead of going +to work. It only applies to workers with a regular workplace outside of home. +The telecommute model consists of two submodels - this work from home model and a +person :ref:`telecommute_frequency` model. This model predicts for all workers whether they usually work from home. The work from home model includes the ability to adjust a work from home alternative -constant to attempt to realize a work from home percent for what-if type analysis. -This iterative single process procedure takes as input a number of iterations, a filter on -the choosers to use for the calculation, a target work from home percent, a tolerance percent -for convergence, and the name of the coefficient to adjust. An example setup is provided and -the coefficient adjustment at each iteration is: +constant to attempt to realize a work from home percent for what-if type analysis. +This iterative single process procedure takes as input a number of iterations, a filter on +the choosers to use for the calculation, a target work from home percent, a tolerance percent +for convergence, and the name of the coefficient to adjust. An example setup is provided and +the coefficient adjustment at each iteration is: ``new_coefficient = log( target_percent / current_percent ) + current_coefficient``. -The main interface to the work from home model is the +The main interface to the work from home model is the :py:func:`~activitysim.examples.prototype_semcog.extensions.work_from_home` function. This function is registered as an Inject step in the example Pipeline. @@ -197,40 +273,81 @@ The shadow pricing calculator used by work and school location choice. **Turning on and saving shadow prices** -Shadow pricing is activated by setting the ``use_shadow_pricing`` to True in the settings.yaml file. Once this setting has -been activated, ActivitySim will search for shadow pricing configuration in the shadow_pricing.yaml file. When shadow pricing is -activated, the shadow pricing outputs will be exported by the tracing engine. As a result, the shadow pricing output files will -be prepended with ``trace`` followed by the iteration number the results represent. For example, the shadow pricing outputs -for iteration 3 of the school location model will be called ``trace.shadow_price_school_shadow_prices_3.csv``. +Shadow pricing is activated by setting the ``use_shadow_pricing`` to True in the settings.yaml file. +Once this setting has been activated, ActivitySim will search for shadow pricing configuration in +the shadow_pricing.yaml file. When shadow pricing is activated, the shadow pricing outputs will be +exported by the tracing engine. As a result, the shadow pricing output files will be prepended with +``trace`` followed by the iteration number the results represent. For example, the shadow pricing +outputs for iteration 3 of the school location model will be called +``trace.shadow_price_school_shadow_prices_3.csv``. In total, ActivitySim generates three types of output files for each model with shadow pricing: -- ``trace.shadow_price__desired_size.csv`` - The size terms by zone that shadow pricing is attempting to target. These usually will match the size terms identified - in the land_use input file. - -- ``trace.shadow_price__modeled_size_.csv`` - These are the modeled size terms after the iteration of shadow pricing identified by the number. In other - words, these are the predicted choices by zone for the model after the iteration completes. - -- ``trace.shadow_price__shadow_prices_.csv`` - The actual shadow price for each zone and segment after the of shadow pricing. This the file that can be - used to warm start the shadow pricing mechanism in ActivitySim. +- ``trace.shadow_price__desired_size.csv`` The size terms by zone that the ctramp and daysim + methods are attempting to target. These equal the size term columns in the land use data + multiplied by size term coefficients. + +- ``trace.shadow_price__modeled_size_.csv`` These are the modeled size terms after + the iteration of shadow pricing identified by the number. In other words, these are + the predicted choices by zone and segment for the model after the iteration completes. (Not + applicable for ``simulation`` option.) + +- ``trace.shadow_price__shadow_prices_.csv`` The actual shadow price for each zone + and segment after the of shadow pricing. This is the file that can be used to warm + start the shadow pricing mechanism in ActivitySim. (Not applicable for ``simulation`` option.) + +There are three shadow pricing methods in activitysim: ``ctramp``, ``daysim``, and ``simulation``. +The first two methods try to match model output with workplace/school location model size terms, +while the last method matches model output with actual employment/enrollmment data. + +The simulation approach operates the following steps. First, every worker / student will be +assigned without shadow prices applied. The modeled share and the target share for each zone are +compared. If the zone is overassigned, a sample of people from the over-assigned zones will be +selected for re-simulation. Shadow prices are set to -999 for the next iteration for overassigned +zones which removes the zone from the set of alternatives in the next iteration. The sampled people +will then be forced to choose from one of the under-assigned zones that still have the initial +shadow price of 0. (In this approach, the shadow price variable is really just a switch turning that +zone on or off for selection in the subsequent iterations. For this reason, warm-start functionality +for this approach is not applicable.) This process repeats until the overall convergence criteria +is met or the maximum number of allowed iterations is reached. + +Because the simulation approach only re-simulates workers / students who were over-assigned in the +previous iteration, run time is significantly less (~90%) than the CTRAMP or DaySim approaches which +re-simulate all workers and students at each iteration. **shadow_pricing.yaml Attributes** -- ``shadow_pricing_models`` List model_selectors and model_names of models that use shadow pricing. This list identifies which size_terms to preload which must be done in single process mode, so predicted_size tables can be scaled to population) -- ``LOAD_SAVED_SHADOW_PRICES`` global switch to enable/disable loading of saved shadow prices. From the above example, this would be trace.shadow_price__shadow_prices_.csv renamed and stored in the ``data_dir``. -- ``MAX_ITERATIONS`` If no loaded shadow prices, maximum number of times shadow pricing can be run on each model before proceeding to the next model. -- ``MAX_ITERATIONS_SAVED`` If loaded shadow prices, maximum number of times shadow pricing can be run. -- ``SIZE_THRESHOLD`` Ignore zones in failure calculation with fewer choices than specified here. +- ``shadow_pricing_models`` List model_selectors and model_names of models that use shadow pricing. + This list identifies which size_terms to preload which must be done in single process mode, so + predicted_size tables can be scaled to population +- ``LOAD_SAVED_SHADOW_PRICES`` global switch to enable/disable loading of saved shadow prices. From + the above example, this would be trace.shadow_price__shadow_prices_.csv renamed + and stored in the ``data_dir``. +- ``MAX_ITERATIONS`` If no loaded shadow prices, maximum number of times shadow pricing can be run + on each model before proceeding to the next model. +- ``MAX_ITERATIONS_SAVED`` If loaded shadow prices, maximum number of times shadow pricing can be + run. +- ``SIZE_THRESHOLD`` Ignore zones in failure calculation (ctramp or daysim method) with smaller size + term value than size_threshold. +- ``TARGET_THRESHOLD`` Ignore zones in failure calculation (simulation method) with smaller + employment/enrollment than target_threshold. - ``PERCENT_TOLERANCE`` Maximum percent difference between modeled and desired size terms -- ``FAIL_THRESHOLD`` Number of zones exceeding the PERCENT_TOLERANCE considered a failure -- ``SHADOW_PRICE_METHOD`` [ctramp | daysim] -- ``DAMPING_FACTOR`` On each iteration, ActivitySim will attempt to adjust the model to match desired size terms. The number is multiplied by adjustment factor to dampen or amplify the ActivitySim calculation. (only for CT-RAMP) -- ``DAYSIM_ABSOLUTE_TOLERANCE`` +- ``FAIL_THRESHOLD`` percentage of zones exceeding the PERCENT_TOLERANCE considered a failure +- ``SHADOW_PRICE_METHOD`` [ctramp | daysim | simulation] +- ``workplace_segmentation_targets`` dict matching school segment to landuse employment column + target. Only used as part of simulation option. If mutiple segments list the same target column, + the segments will be added together for comparison. (Same with the school option below.) +- ``school_segmentation_targets`` dict matching school segment to landuse enrollment column target. + Only used as part of simulation option. +- ``DAMPING_FACTOR`` On each iteration, ActivitySim will attempt to adjust the model to match + desired size terms. The number is multiplied by adjustment factor to dampen or amplify the + ActivitySim calculation. (only for CTRAMP) +- ``DAYSIM_ABSOLUTE_TOLERANCE`` Absolute tolerance for DaySim option +- ``DAYSIM_PERCENT_TOLERANCE`` Relative tolerance for DaySim option +- ``WRITE_ITERATION_CHOICES`` [True | False ] Writes the choices of each person out to the trace + folder. Used for debugging or checking itration convergence. WARNING: every person is written for + each sub-process so the disc space can get large. -- ``DAYSIM_PERCENT_TOLERANCE`` .. automodule:: activitysim.abm.tables.shadow_pricing :members: @@ -281,11 +398,11 @@ Core Table: ``persons`` | Result Field: ``transit_pass_ownership`` | Skims Keys: Auto Ownership -------------- -The auto ownership model selects a number of autos for each household in the simulation. +The auto ownership model selects a number of autos for each household in the simulation. The primary model components are household demographics, zonal density, and accessibility. -The main interface to the auto ownership model is the -:py:func:`~activitysim.abm.models.auto_ownership.auto_ownership_simulate` +The main interface to the auto ownership model is the +:py:func:`~activitysim.abm.models.auto_ownership.auto_ownership_simulate` function. This function is registered as an Inject step in the example Pipeline. Core Table: ``households`` | Result Field: ``auto_ownership`` | Skims Keys: NA @@ -293,7 +410,7 @@ Core Table: ``households`` | Result Field: ``auto_ownership`` | Skims Keys: NA .. automodule:: activitysim.abm.models.auto_ownership :members: - + .. _vehicle_type_choice: Vehicle Type Choice @@ -389,12 +506,12 @@ Free Parking Eligibility ------------------------ The Free Parking Eligibility model predicts the availability of free parking at a person's -workplace. It is applied for people who work in zones that have parking charges, which are -generally located in the Central Business Districts. The purpose of the model is to adequately -reflect the cost of driving to work in subsequent models, particularly in mode choice. +workplace. It is applied for people who work in zones that have parking charges, which are +generally located in the Central Business Districts. The purpose of the model is to adequately +reflect the cost of driving to work in subsequent models, particularly in mode choice. -The main interface to the free parking eligibility model is the -:py:func:`~activitysim.abm.models.free_parking.free_parking` function. This function is registered +The main interface to the free parking eligibility model is the +:py:func:`~activitysim.abm.models.free_parking.free_parking` function. This function is registered as an Inject step in the example Pipeline. Core Table: ``persons`` | Result Field: ``free_parking_at_work`` | Skims Keys: NA @@ -493,6 +610,155 @@ Core Table: ``tours`` | Result Field: ``start, end, duration`` | Skims Keys: ``T :members: +.. _school_escorting: + +School Escorting +---------------- + +The school escort model determines whether children are dropped-off at or picked-up from school, +simultaneously with the chaperone responsible for chauffeuring the children, +which children are bundled together on half-tours, and the type of tour (pure escort versus rideshare). +The model is run after work and school locations have been chosen for all household members, +and after work and school tours have been generated and scheduled. +The model labels household members of driving age as potential ‘chauffeurs’ and children with school tours as potential ‘escortees’. +The model then attempts to match potential chauffeurs with potential escortees in a choice model whose alternatives +consist of ‘bundles’ of escortees with a chauffeur for each half tour. + +School escorting is a household level decision – each household will choose an alternative from the ``school_escorting_alts.csv`` file, +with the first alternative being no escorting. This file contains the following columns: + ++------------------------------------------------+--------------------------------------------------------------------+ +| Column Name | Column Description | ++================================================+====================================================================+ +| Alt | Alternative number | ++------------------------------------------------+--------------------------------------------------------------------+ +| bundle[1,2,3] | bundle number for child 1,2, and 3 | ++------------------------------------------------+--------------------------------------------------------------------+ +| chauf[1,2,3] | chauffeur number for child 1,2, and 3 | +| | - 0 = child not escorted | +| | - 1 = chauffeur 1 as ride share | +| | - 2 = chauffeur 1 as pure escort | +| | - 3 = chauffeur 2 as ride share | +| | - 4 = chauffeur 3 as pure escort | ++------------------------------------------------+--------------------------------------------------------------------+ +| nbund[1,2] | - number of escorting bundles for chauffeur 1 and 2 | ++------------------------------------------------+--------------------------------------------------------------------+ +| nbundles | - total number of bundles | +| | - equals nbund1 + nbund2 | ++------------------------------------------------+--------------------------------------------------------------------+ +| nrs1 | - number of ride share bundles for chauffeur 1 | ++------------------------------------------------+--------------------------------------------------------------------+ +| npe1 | - number of pure escort bundles for chauffeur 1 | ++------------------------------------------------+--------------------------------------------------------------------+ +| nrs2 | - number of ride share bundles for chauffeur 2 | ++------------------------------------------------+--------------------------------------------------------------------+ +| npe2 | - number of pure escort bundles for chauffeur 2 | ++------------------------------------------------+--------------------------------------------------------------------+ +| Description | - text description of alternative | ++------------------------------------------------+--------------------------------------------------------------------+ + +The model as currently implemented contains three escortees and two chauffeurs. +Escortees are students under age 16 with a mandatory tour whereas chaperones are all persons in the household over the age of 18. +For households that have more than three possible escortees, the three youngest children are selected for the model. +The two chaperones are selected as the adults of the household with the highest weight according to the following calculation: +:math:`Weight = 100*personType + 10*gender + 1*age(0,1)` +Where *personType* is the person type number from 1 to 5, *gender* is 1 for male and 2 for female, and +*age* is a binary indicator equal to 1 if age is over 25 else 0. + +The model is run sequentially three times, once in the outbound direction, once in the inbound direction, +and again in the outbound direction with additional conditions on what happened in the inbound direction. +There are therefore three sets of utility specifications, coefficients, and pre-processor files. +Each of these files is specified in the school_escorting.yaml file along with the number of escortees and number of chaperones. + +There is also a constants section in the school_escorting.yaml file which contain two constants. +One which sets the maximum time bin difference to match school and work tours for ride sharing +and another to set the number of minutes per time bin. +In the :ref:`prototype_mtc_extended` example, these are set to 1 and 60 respectively. + +After a school escorting alternative is chosen for the inbound and outbound direction, the model will +create the tours and trips associated with the decision. Pure escort tours are created, +and the mandatory tour start and end times are changed to match the school escort bundle start and end times. +(Outbound tours have their start times matched and inbound tours have their end times matched.) +Escortee drop-off / pick-up order is determined by the distance from home to the school locations. +They are ordered from smallest to largest in the outbound direction, and largest to smallest in the inbound direction. +Trips are created for each half-tour that includes school escorting according to the provided order. + +The created pure escort tours are joined to the already created mandatory tour table in the pipeline +and are also saved separately to the pipeline under the table name “school_escort_tours”. +Created school escorting trips are saved to the pipeline under the table name “school_escort_trips”. +By saving these to the pipeline, their data can be queried in downstream models to set correct purposes, +destinations, and schedules to satisfy the school escorting model choice. + +There are a host of downstream model changes that are involved when including the school escorting model. +The following list contains the models that are changed in some way when school escorting is included: + + * **Joint tour scheduling:** Joint tours are not allowed to be scheduled over school escort tours. + This happens automatically by updating the timetable object with the updated mandatory tour times + and created pure escort tour times after the school escorting model is run. + There were no code or config changes in this model, but it is still affected by school escorting. + * **Non-Mandatory tour frequency:** Pure school escort tours are joined to the tours created in the + non-mandatory tour frequency model and tour statistics (such as tour_count and tour_num) are re-calculated. + * **Non-Mandatory tour destination:** Since the primary destination of pure school escort tours is known, + they are removed from the choosers table and have their destination set according to the destination in\ + school_escort_tours table. They are also excluded from the estimation data bundle. + * **Non-Mandatory tour scheduling:** Pure escort tours need to have the non-escorting portion of their tour scheduled. + This is done by inserting availability conditions in the model specification that ensures the alternative + chosen for the start of the tour is equal to the alternative start time for outbound tours and the end time + is equal to the alternative end time for the inbound tours. There are additional terms that ensure the tour + does not overlap with subsequent school escorting tours as well. Beware -- If the availability conditions + in the school escorting model are not set correctly, the tours created may not be consistent with each other + and this model will fail. + * **Tour mode choice:** Availability conditions are set in tour mode choice to prohibit the drive alone mode + if the tour contains an escortee and the shared-ride 2 mode if the tour contains more than one escortee. + * **Stop Frequency:** No stops are allowed on half-tours that include school escorting. + This is enforced by adding availability conditions in the stop frequency model. After the stop frequency + model is run, the school escorting trips are merged from the trips created by the stop frequency model + and a new stop frequency is computed along with updated trip numbers. + * **Trip purpose, destination, and scheduling:** Trip purpose, destination, and departure times are known + for school escorting trips. As such they are removed from their respective chooser tables and the estimation + data bundles, and set according to the values in the school_escort_trips table residing in the pipeline. + * **Trip mode choice:** Like in tour mode choice, availability conditions are set to prohibit trip containing + an escortee to use the drive alone mode or the shared-ride 2 mode for trips with more than one escortee. + +Many of the changes discussed in the above list are handled in the code and the user is not required to make any +changes when implementing the school escorting model. However, it is the users responsibility to include the +changes in the following model configuration files for models downstream of the school escorting model: + ++--------------------------------------------------------------------+------------------------------------------------------------------+ +| File Name(s) | Change(s) Needed | ++====================================================================+==================================================================+ +| - `non_mandatory_tour_scheduling_annotate_tours_preprocessor.csv` | | +| - `tour_scheduling_nonmandatory.csv` | - Set availability conditions based on those times | +| | - Do not schedule over other school escort tours | ++--------------------------------------------------------------------+------------------------------------------------------------------+ +| - `tour_mode_choice_annotate_choosers_preprocessor.csv` | - count number of escortees on tour by parsing the | +| - `tour_mode_choice.csv` | ``escort_participants`` column | +| | - set mode choice availability based on number of escortees | +| | | ++--------------------------------------------------------------------+------------------------------------------------------------------+ +| - `stop_frequency_school.csv` | Do not allow stops for half-tours that include school escorting | +| - `stop_frequency_work.csv` | | +| - `stop_frequency_univ.csv` | | +| - `stop_frequency_escort.csv` | | ++--------------------------------------------------------------------+------------------------------------------------------------------+ +| - `trip_mode_choice_annotate_trips_preprocessor.csv` | - count number of escortees on trip by parsing the | +| - `trip_mode_choice.csv` | ``escort_participants`` column | +| | - set mode choice availability based on number of escortees | +| | | ++--------------------------------------------------------------------+------------------------------------------------------------------+ + +When not including the school escorting model, all of the escort trips to and from school are counted implicitly in +escort tours determined in the non-mandatory tour frequency model. Thus, when including the school escort model and +accounting for these tours explicitly, extra care should be taken not to double count them in the non-mandatory +tour frequency model. The non-mandatory tour frequency model should be re-evaluated and likely changed to decrease +the number of escort tours generated by that model. This was not implemented in the :ref:`prototype_mtc_extended` +implementation due to a lack of data surrounding the number of escort tours in the region. + + +.. automodule:: activitysim.abm.models.school_escorting + :members: + + .. _joint_tour_frequency: Joint Tour Frequency