From ceb5c9a97ed8cd007ff9422553b1cc2cb5ae63d5 Mon Sep 17 00:00:00 2001 From: David Hensle Date: Wed, 10 Aug 2022 23:32:10 -0700 Subject: [PATCH 01/16] initial commit of flexible tour/trip ids --- activitysim/abm/models/util/canonical_ids.py | 294 +++++++++++++------ 1 file changed, 206 insertions(+), 88 deletions(-) diff --git a/activitysim/abm/models/util/canonical_ids.py b/activitysim/abm/models/util/canonical_ids.py index 0720340fc..bdd7b067b 100644 --- a/activitysim/abm/models/util/canonical_ids.py +++ b/activitysim/abm/models/util/canonical_ids.py @@ -4,37 +4,27 @@ 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__) -RANDOM_CHANNELS = [ - "households", - "persons", - "tours", - "joint_tour_participants", - "trips", - "vehicles", -] -TRACEABLE_TABLES = [ - "households", - "persons", - "tours", - "joint_tour_participants", - "trips", - "vehicles", -] +RANDOM_CHANNELS = ['households', 'persons', 'tours', 'joint_tour_participants', 'trips', 'vehicles'] +TRACEABLE_TABLES = ['households', 'persons', 'tours', 'joint_tour_participants', 'trips', 'vehicles'] CANONICAL_TABLE_INDEX_NAMES = { - "households": "household_id", - "persons": "person_id", - "tours": "tour_id", - "joint_tour_participants": "participant_id", - "trips": "trip_id", - "land_use": "zone_id", - "vehicles": "vehicle_id", + 'households': 'household_id', + 'persons': 'person_id', + 'tours': 'tour_id', + 'joint_tour_participants': 'participant_id', + 'trips': 'trip_id', + 'land_use': 'zone_id', + 'vehicles': 'vehicle_id' } # unfortunately the two places this is needed (joint_tour_participation and estimation.infer @@ -46,14 +36,92 @@ def enumerate_tour_types(tour_flavors): # tour_flavors: {'eat': 1, 'business': 2, 'maint': 1} # channels: ['eat1', 'business1', 'business2', 'maint1'] - channels = [ - tour_type + str(tour_num) - for tour_type, max_count in tour_flavors.items() - for tour_num in range(1, max_count + 1) - ] + channels = [tour_type + str(tour_num) + for tour_type, max_count in tour_flavors.items() + for tour_num in range(1, max_count + 1)] return channels +def parse_tour_flavor_from_columns(columns, tour_flavor): + # determines the max number from columns if column name contains 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(f"Specified tour flavors {provided_flavors} do not match alternative file flavors {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(f"Could not determine alts from alt file and no flavors were provided. 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): + 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) & isinstance(num, int) & (num > 0)) for flavor, num in flavors.items()]) + except: + 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(f"Could not determine alts from alt file and no flavors were provided. 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,56 +131,79 @@ 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 = simulate.read_model_alts('non_mandatory_tour_frequency_alternatives.csv', set_index=None) + + # first need to determine max extension + ext_probs_f = config.config_file_path('non_mandatory_tour_frequency_extension_probs.csv') + extension_probs = pd.read_csv(ext_probs_f, comment='#') + 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) + # FIXME add additional tours for school escorting only if model is included in run list: + # non_mandatory_tour_flavors['escort'] = non_mandatory_tour_flavors['escort'] + 3 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_model_spec = simulate.read_model_spec(file_name=mtf_model_settings['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 = simulate.read_model_alts('atwork_subtour_frequency_alternatives.csv', set_index=None) + + 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) - for c in atwork_subtour_channels - for i in range(max_work_tours) - ] - - # - joint_tour_channels - joint_tour_flavors = { - "shopping": 2, - "othmaint": 2, - "othdiscr": 2, - "eatout": 2, - "social": 2, - } + max_work_tours = mandatory_tour_flavors['work'] + atwork_subtour_channels = ['%s_%s' % (c, i+1) + for c in atwork_subtour_channels + for i in range(max_work_tours)] + + # ---- joint_tour_channels + jtf_model_settings_file_name = 'joint_tour_frequency.yaml' + jtf_model_settings = config.read_model_settings(jtf_model_settings_file_name) + alts = simulate.read_model_alts('joint_tour_frequency_alternatives.csv', set_index=None) + 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(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] + joint_tour_channels = ['j_%s' % c for c in joint_tour_channels] - sub_channels = ( - non_mandatory_channels - + mandatory_channels - + atwork_subtour_channels - + joint_tour_channels - ) + sub_channels = \ + non_mandatory_channels + mandatory_channels + atwork_subtour_channels + joint_tour_channels sub_channels.sort() @@ -137,37 +228,36 @@ def set_tour_index(tours, parent_tour_num_col=None, is_joint=False): Tours dataframe to reindex. """ - tour_num_col = "tour_type_num" + tour_num_col = 'tour_type_num' possible_tours = canonical_tours() possible_tours_count = len(possible_tours) assert tour_num_col in tours.columns # create string tour_id corresonding to keys in possible_tours (e.g. 'work1', 'j_shopping2') - tours["tour_id"] = tours.tour_type + tours[tour_num_col].map(str) + tours['tour_id'] = tours.tour_type + tours[tour_num_col].map(str) if parent_tour_num_col: # 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) parent_tour_num = tours[parent_tour_num_col] - if parent_tour_num.dtype != "int64": + if parent_tour_num.dtype != 'int64': # might get converted to float if non-subtours rows are None (but we try to avoid this) - logger.error("parent_tour_num.dtype: %s" % parent_tour_num.dtype) + logger.error('parent_tour_num.dtype: %s' % parent_tour_num.dtype) parent_tour_num = parent_tour_num.astype(np.int64) - tours["tour_id"] = tours["tour_id"] + "_" + parent_tour_num.map(str) + tours['tour_id'] = tours['tour_id'] + '_' + parent_tour_num.map(str) if is_joint: - tours["tour_id"] = "j_" + tours["tour_id"] + tours['tour_id'] = 'j_' + 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)) - ) + tours.tour_id = tours.tour_id.replace(to_replace=possible_tours, + value=list(range(possible_tours_count))) # convert to numeric - shouldn't be any NaNs - this will raise error if there are - tours.tour_id = pd.to_numeric(tours.tour_id, errors="raise").astype(np.int64) + tours.tour_id = pd.to_numeric(tours.tour_id, errors='raise').astype(np.int64) tours.tour_id = (tours.person_id * possible_tours_count) + tours.tour_id @@ -176,22 +266,50 @@ def set_tour_index(tours, parent_tour_num_col=None, is_joint=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) + tours.set_index('tour_id', inplace=True, verify_integrity=True) # we modify tours in place, but return the dataframe for the convenience of the caller 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) + + # determine flavors from alternative file + alts = simulate.read_model_alts('stop_frequency_alternatives.csv', set_index=None) + try: + trips_per_leg = [int(alts[c].max()) for c in alts.columns if all(alts[c].astype(str).str.isnumeric())] + max_trips_per_leg = max(trips_per_leg) + 1 # adding one for additional trip home or to primary dest + if (max_trips_per_leg > 1): + valid_max_trips = True + except: + 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_TRIPS_PER_LEG = 4 # max number of trips per leg (inbound or outbound) of tour + # 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 - trips["trip_id"] = ( - trips[tour_id_column] * (2 * MAX_TRIPS_PER_LEG) + canonical_trip_num - ) - trips.set_index("trip_id", inplace=True, verify_integrity=True) + 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.set_index('trip_id', inplace=True, verify_integrity=True) # we modify trips in place, but return the dataframe for the convenience of the caller return trips From 1495ca1348adf3e47dd1c8e03fc647713be4ce00 Mon Sep 17 00:00:00 2001 From: David Hensle Date: Wed, 10 Aug 2022 23:41:33 -0700 Subject: [PATCH 02/16] pycodestyle --- activitysim/abm/models/util/canonical_ids.py | 52 +++++++++++--------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/activitysim/abm/models/util/canonical_ids.py b/activitysim/abm/models/util/canonical_ids.py index bdd7b067b..a6395389c 100644 --- a/activitysim/abm/models/util/canonical_ids.py +++ b/activitysim/abm/models/util/canonical_ids.py @@ -73,13 +73,15 @@ def determine_mandatory_tour_flavors(mtf_settings, model_spec, default_flavors): if provided_flavors is not None: if mandatory_tour_flavors != provided_flavors: - logger.warning(f"Specified tour flavors {provided_flavors} do not match alternative file flavors {mandatory_tour_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(f"Could not determine alts from alt file and no flavors were provided. Using defaults: {default_flavors}") + 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 @@ -97,17 +99,18 @@ def determine_non_mandatory_tour_max_extension(model_settings, extension_probs, 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): 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) & isinstance(num, int) & (num > 0)) for flavor, num in flavors.items()]) - except: + 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()]) + except ValueError: 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}") @@ -116,9 +119,10 @@ def determine_flavors_from_alts_file(alts, provided_flavors, default_flavors, ma if not valid_flavors: # if flavors could not be parsed correctly and no flavors provided, return the default - logger.warning(f"Could not determine alts from alt file and no flavors were provided. Using defaults: {default_flavors}") + 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 @@ -134,12 +138,13 @@ def canonical_tours(): # ---- 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 = simulate.read_model_alts('non_mandatory_tour_frequency_alternatives.csv', set_index=None) + nm_alts = simulate.read_model_alts('non_mandatory_tour_frequency_alternatives.csv', set_index=None) # first need to determine max extension ext_probs_f = config.config_file_path('non_mandatory_tour_frequency_extension_probs.csv') extension_probs = pd.read_csv(ext_probs_f, comment='#') - max_extension = determine_non_mandatory_tour_max_extension(nm_model_settings, extension_probs, default_max_extension=2) + 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, @@ -149,7 +154,6 @@ def canonical_tours(): '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) # FIXME add additional tours for school escorting only if model is included in run list: @@ -164,7 +168,8 @@ def canonical_tours(): mtf_model_spec = simulate.read_model_spec(file_name=mtf_model_settings['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_tour_flavors = determine_mandatory_tour_flavors( + mtf_model_settings, mtf_model_spec, default_mandatory_tour_flavors) mandatory_channels = enumerate_tour_types(mandatory_tour_flavors) logger.info(f"Mandatory tour flavors used are {mandatory_tour_flavors}") @@ -172,12 +177,13 @@ def canonical_tours(): # ---- 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 = simulate.read_model_alts('atwork_subtour_frequency_alternatives.csv', set_index=None) + atwork_alts = simulate.read_model_alts('atwork_subtour_frequency_alternatives.csv', set_index=None) 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_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}") @@ -192,11 +198,12 @@ def canonical_tours(): # ---- joint_tour_channels jtf_model_settings_file_name = 'joint_tour_frequency.yaml' jtf_model_settings = config.read_model_settings(jtf_model_settings_file_name) - alts = simulate.read_model_alts('joint_tour_frequency_alternatives.csv', set_index=None) + jtf_alts = simulate.read_model_alts('joint_tour_frequency_alternatives.csv', set_index=None) 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(alts, provided_joint_flavors, default_joint_flavors) + 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) @@ -280,13 +287,13 @@ def determine_max_trips_per_leg(default_max_trips_per_leg=4): provided_max_trips_per_leg = model_settings.get('MAX_TRIPS_PER_LEG', None) # determine flavors from alternative file - alts = simulate.read_model_alts('stop_frequency_alternatives.csv', set_index=None) - try: + alts = simulate.read_model_alts('stop_frequency_alternatives.csv', set_index=None) + try: trips_per_leg = [int(alts[c].max()) for c in alts.columns if all(alts[c].astype(str).str.isnumeric())] max_trips_per_leg = max(trips_per_leg) + 1 # adding one for additional trip home or to primary dest if (max_trips_per_leg > 1): valid_max_trips = True - except: + except ValueError: valid_max_trips = False if provided_max_trips_per_leg is not None: @@ -296,13 +303,12 @@ def determine_max_trips_per_leg(default_max_trips_per_leg=4): 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 + # 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() From efd7fc3b95b0a561365ee885d9e9deb03fa80416 Mon Sep 17 00:00:00 2001 From: David Hensle Date: Thu, 11 Aug 2022 11:05:55 -0700 Subject: [PATCH 03/16] black formatting --- activitysim/abm/models/util/canonical_ids.py | 249 ++++++++++++------- 1 file changed, 163 insertions(+), 86 deletions(-) diff --git a/activitysim/abm/models/util/canonical_ids.py b/activitysim/abm/models/util/canonical_ids.py index a6395389c..7afe13c37 100644 --- a/activitysim/abm/models/util/canonical_ids.py +++ b/activitysim/abm/models/util/canonical_ids.py @@ -14,17 +14,31 @@ logger = logging.getLogger(__name__) -RANDOM_CHANNELS = ['households', 'persons', 'tours', 'joint_tour_participants', 'trips', 'vehicles'] -TRACEABLE_TABLES = ['households', 'persons', 'tours', 'joint_tour_participants', 'trips', 'vehicles'] +RANDOM_CHANNELS = [ + "households", + "persons", + "tours", + "joint_tour_participants", + "trips", + "vehicles", +] +TRACEABLE_TABLES = [ + "households", + "persons", + "tours", + "joint_tour_participants", + "trips", + "vehicles", +] CANONICAL_TABLE_INDEX_NAMES = { - 'households': 'household_id', - 'persons': 'person_id', - 'tours': 'tour_id', - 'joint_tour_participants': 'participant_id', - 'trips': 'trip_id', - 'land_use': 'zone_id', - 'vehicles': 'vehicle_id' + "households": "household_id", + "persons": "person_id", + "tours": "tour_id", + "joint_tour_participants": "participant_id", + "trips": "trip_id", + "land_use": "zone_id", + "vehicles": "vehicle_id", } # unfortunately the two places this is needed (joint_tour_participation and estimation.infer @@ -36,9 +50,11 @@ def enumerate_tour_types(tour_flavors): # tour_flavors: {'eat': 1, 'business': 2, 'maint': 1} # channels: ['eat1', 'business1', 'business2', 'maint1'] - channels = [tour_type + str(tour_num) - for tour_type, max_count in tour_flavors.items() - for tour_num in range(1, max_count + 1)] + channels = [ + tour_type + str(tour_num) + for tour_type, max_count in tour_flavors.items() + for tour_num in range(1, max_count + 1) + ] return channels @@ -46,7 +62,7 @@ def parse_tour_flavor_from_columns(columns, tour_flavor): # determines the max number from columns if column name contains 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] + 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] @@ -61,40 +77,52 @@ def parse_tour_flavor_from_columns(columns, tour_flavor): def determine_mandatory_tour_flavors(mtf_settings, model_spec, default_flavors): - provided_flavors = mtf_settings.get('MANDATORY_TOUR_FLAVORS', None) + 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') + "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)) + 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}") + 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( + "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) +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') + 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") + 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): @@ -103,23 +131,34 @@ def determine_non_mandatory_tour_max_extension(model_settings, extension_probs, return default_max_extension -def determine_flavors_from_alts_file(alts, provided_flavors, default_flavors, max_extension=0): +def determine_flavors_from_alts_file( + alts, provided_flavors, default_flavors, max_extension=0 +): 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()]) + 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()] + ) except ValueError: 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}") + 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( + "Could not determine alts from alt file and no flavors were provided." + ) logger.warning(f"Using defaults: {default_flavors}") return default_flavors @@ -136,26 +175,34 @@ def canonical_tours(): """ # ---- non_mandatory_channels - nm_model_settings_file_name = 'non_mandatory_tour_frequency.yaml' + nm_model_settings_file_name = "non_mandatory_tour_frequency.yaml" nm_model_settings = config.read_model_settings(nm_model_settings_file_name) - nm_alts = simulate.read_model_alts('non_mandatory_tour_frequency_alternatives.csv', set_index=None) + nm_alts = simulate.read_model_alts( + "non_mandatory_tour_frequency_alternatives.csv", set_index=None + ) # first need to determine max extension - ext_probs_f = config.config_file_path('non_mandatory_tour_frequency_extension_probs.csv') - extension_probs = pd.read_csv(ext_probs_f, comment='#') + ext_probs_f = config.config_file_path( + "non_mandatory_tour_frequency_extension_probs.csv" + ) + extension_probs = pd.read_csv(ext_probs_f, comment="#") 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} + 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) + nm_alts, provided_nm_tour_flavors, default_nm_tour_flavors, max_extension + ) # FIXME add additional tours for school escorting only if model is included in run list: # non_mandatory_tour_flavors['escort'] = non_mandatory_tour_flavors['escort'] + 3 non_mandatory_channels = enumerate_tour_types(non_mandatory_tour_flavors) @@ -163,54 +210,73 @@ def canonical_tours(): 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_file_name = "mandatory_tour_frequency.yaml" mtf_model_settings = config.read_model_settings(mtf_model_settings_file_name) - mtf_model_spec = simulate.read_model_spec(file_name=mtf_model_settings['SPEC']) - default_mandatory_tour_flavors = {'work': 2, 'school': 2} + mtf_model_spec = simulate.read_model_spec(file_name=mtf_model_settings["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) + mtf_model_settings, mtf_model_spec, default_mandatory_tour_flavors + ) mandatory_channels = enumerate_tour_types(mandatory_tour_flavors) 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_file_name = "atwork_subtour_frequency.yaml" atwork_model_settings = config.read_model_settings(atwork_model_settings_file_name) - atwork_alts = simulate.read_model_alts('atwork_subtour_frequency_alternatives.csv', set_index=None) + atwork_alts = simulate.read_model_alts( + "atwork_subtour_frequency_alternatives.csv", set_index=None + ) - provided_atwork_flavors = atwork_model_settings.get('ATWORK_SUBTOUR_FLAVORS', None) - default_atwork_flavors = {'eat': 1, 'business': 2, 'maint': 1} + 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_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) - max_work_tours = mandatory_tour_flavors['work'] - atwork_subtour_channels = ['%s_%s' % (c, i+1) - for c in atwork_subtour_channels - for i in range(max_work_tours)] + max_work_tours = mandatory_tour_flavors["work"] + atwork_subtour_channels = [ + "%s_%s" % (c, i + 1) + for c in atwork_subtour_channels + for i in range(max_work_tours) + ] # ---- joint_tour_channels - jtf_model_settings_file_name = 'joint_tour_frequency.yaml' + jtf_model_settings_file_name = "joint_tour_frequency.yaml" jtf_model_settings = config.read_model_settings(jtf_model_settings_file_name) - jtf_alts = simulate.read_model_alts('joint_tour_frequency_alternatives.csv', set_index=None) - provided_joint_flavors = jtf_model_settings.get('JOINT_TOUR_FLAVORS', None) - - default_joint_flavors = {'shopping': 2, 'othmaint': 2, 'othdiscr': 2, 'eatout': 2, 'social': 2} + jtf_alts = simulate.read_model_alts( + "joint_tour_frequency_alternatives.csv", set_index=None + ) + 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) + 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] + joint_tour_channels = ["j_%s" % c for c in joint_tour_channels] - sub_channels = \ - non_mandatory_channels + mandatory_channels + atwork_subtour_channels + joint_tour_channels + sub_channels = ( + non_mandatory_channels + + mandatory_channels + + atwork_subtour_channels + + joint_tour_channels + ) sub_channels.sort() @@ -235,36 +301,37 @@ def set_tour_index(tours, parent_tour_num_col=None, is_joint=False): Tours dataframe to reindex. """ - tour_num_col = 'tour_type_num' + tour_num_col = "tour_type_num" possible_tours = canonical_tours() possible_tours_count = len(possible_tours) assert tour_num_col in tours.columns # create string tour_id corresonding to keys in possible_tours (e.g. 'work1', 'j_shopping2') - tours['tour_id'] = tours.tour_type + tours[tour_num_col].map(str) + tours["tour_id"] = tours.tour_type + tours[tour_num_col].map(str) if parent_tour_num_col: # 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) parent_tour_num = tours[parent_tour_num_col] - if parent_tour_num.dtype != 'int64': + if parent_tour_num.dtype != "int64": # might get converted to float if non-subtours rows are None (but we try to avoid this) - logger.error('parent_tour_num.dtype: %s' % parent_tour_num.dtype) + logger.error("parent_tour_num.dtype: %s" % parent_tour_num.dtype) parent_tour_num = parent_tour_num.astype(np.int64) - tours['tour_id'] = tours['tour_id'] + '_' + parent_tour_num.map(str) + tours["tour_id"] = tours["tour_id"] + "_" + parent_tour_num.map(str) if is_joint: - tours['tour_id'] = 'j_' + tours['tour_id'] + tours["tour_id"] = "j_" + 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))) + tours.tour_id = tours.tour_id.replace( + to_replace=possible_tours, value=list(range(possible_tours_count)) + ) # convert to numeric - shouldn't be any NaNs - this will raise error if there are - tours.tour_id = pd.to_numeric(tours.tour_id, errors='raise').astype(np.int64) + tours.tour_id = pd.to_numeric(tours.tour_id, errors="raise").astype(np.int64) tours.tour_id = (tours.person_id * possible_tours_count) + tours.tour_id @@ -273,32 +340,40 @@ def set_tour_index(tours, parent_tour_num_col=None, is_joint=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) + tours.set_index("tour_id", inplace=True, verify_integrity=True) # we modify tours in place, but return the dataframe for the convenience of the caller return tours def determine_max_trips_per_leg(default_max_trips_per_leg=4): - model_settings_file_name = 'stop_frequency.yaml' + 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) + provided_max_trips_per_leg = model_settings.get("MAX_TRIPS_PER_LEG", None) # determine flavors from alternative file - alts = simulate.read_model_alts('stop_frequency_alternatives.csv', set_index=None) + alts = simulate.read_model_alts("stop_frequency_alternatives.csv", set_index=None) try: - trips_per_leg = [int(alts[c].max()) for c in alts.columns if all(alts[c].astype(str).str.isnumeric())] - max_trips_per_leg = max(trips_per_leg) + 1 # adding one for additional trip home or to primary dest - if (max_trips_per_leg > 1): + trips_per_leg = [ + int(alts[c].max()) + for c in alts.columns + if all(alts[c].astype(str).str.isnumeric()) + ] + max_trips_per_leg = ( + max(trips_per_leg) + 1 + ) # adding one for additional trip home or to primary dest + if max_trips_per_leg > 1: valid_max_trips = True except ValueError: 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") + 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: @@ -307,15 +382,17 @@ def determine_max_trips_per_leg(default_max_trips_per_leg=4): return default_max_trips_per_leg -def set_trip_index(trips, tour_id_column='tour_id'): +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 - trips['trip_id'] = trips[tour_id_column] * (2 * max_trips_per_leg) + canonical_trip_num - trips.set_index('trip_id', inplace=True, verify_integrity=True) + trips["trip_id"] = ( + trips[tour_id_column] * (2 * max_trips_per_leg) + canonical_trip_num + ) + trips.set_index("trip_id", inplace=True, verify_integrity=True) # we modify trips in place, but return the dataframe for the convenience of the caller return trips From 78916622b4eb9928cef9e5047e4f729e1fe9b96a Mon Sep 17 00:00:00 2001 From: David Hensle Date: Thu, 11 Aug 2022 15:33:46 -0700 Subject: [PATCH 04/16] adding frequency alternatives configs required for test system --- .../atwork_subtour_frequency_alternatives.csv | 8 + .../joint_tour_frequency_alternatives.csv | 23 +++ .../test/configs/mandatory_tour_frequency.csv | 101 +++++++++ .../configs/mandatory_tour_frequency.yaml | 10 + ..._mandatory_tour_frequency_alternatives.csv | 97 +++++++++ ...ndatory_tour_frequency_extension_probs.csv | 193 ++++++++++++++++++ 6 files changed, 432 insertions(+) create mode 100644 activitysim/abm/models/util/test/configs/atwork_subtour_frequency_alternatives.csv create mode 100644 activitysim/abm/models/util/test/configs/joint_tour_frequency_alternatives.csv create mode 100644 activitysim/abm/models/util/test/configs/mandatory_tour_frequency.csv create mode 100644 activitysim/abm/models/util/test/configs/mandatory_tour_frequency.yaml create mode 100644 activitysim/abm/models/util/test/configs/non_mandatory_tour_frequency_alternatives.csv create mode 100644 activitysim/abm/models/util/test/configs/non_mandatory_tour_frequency_extension_probs.csv 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 From f4d8eaee136b5861482665dc1ba8ce80d39fea0c Mon Sep 17 00:00:00 2001 From: David Hensle Date: Thu, 11 Aug 2022 16:53:58 -0700 Subject: [PATCH 05/16] added additional unit tests --- activitysim/abm/models/util/canonical_ids.py | 2 +- .../util/test/test_flexible_tour_trip_ids.py | 110 ++++++++++++++++++ .../test/test_mandatory_tour_frequency.py | 5 + 3 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 activitysim/abm/models/util/test/test_flexible_tour_trip_ids.py diff --git a/activitysim/abm/models/util/canonical_ids.py b/activitysim/abm/models/util/canonical_ids.py index 7afe13c37..47e6ade8d 100644 --- a/activitysim/abm/models/util/canonical_ids.py +++ b/activitysim/abm/models/util/canonical_ids.py @@ -141,7 +141,7 @@ def determine_flavors_from_alts_file( if all(alts[c].astype(str).str.isnumeric()) } valid_flavors = all( - [(isinstance(flavor, str) & (num > 0)) for flavor, num in flavors.items()] + [(isinstance(flavor, str) & (num >= 0)) for flavor, num in flavors.items()] ) except ValueError: valid_flavors = False 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..872ba1756 100644 --- a/activitysim/abm/models/util/test/test_mandatory_tour_frequency.py +++ b/activitysim/abm/models/util/test/test_mandatory_tour_frequency.py @@ -11,6 +11,11 @@ from ..tour_frequency import process_mandatory_tours +@pytest.fixture(scope="module") +def configs_dir(): + return os.path.join(os.path.dirname(__file__), "configs") + + 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") From b537e106833cdb19f45c9aad132408e9aba811be Mon Sep 17 00:00:00 2001 From: David Hensle Date: Thu, 11 Aug 2022 17:02:48 -0700 Subject: [PATCH 06/16] added setup function for test configs dir --- .../abm/models/util/test/test_mandatory_tour_frequency.py | 7 +++++++ 1 file changed, 7 insertions(+) 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 872ba1756..cdfe74308 100644 --- a/activitysim/abm/models/util/test/test_mandatory_tour_frequency.py +++ b/activitysim/abm/models/util/test/test_mandatory_tour_frequency.py @@ -16,6 +16,13 @@ def configs_dir(): return os.path.join(os.path.dirname(__file__), "configs") +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") From a782f2410cc267c637b0004c80b9dc05755c4118 Mon Sep 17 00:00:00 2001 From: David Hensle Date: Thu, 11 Aug 2022 17:21:54 -0700 Subject: [PATCH 07/16] formatting --- activitysim/abm/models/util/canonical_ids.py | 38 ++++++++++++++++++- .../test/test_mandatory_tour_frequency.py | 2 + 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/activitysim/abm/models/util/canonical_ids.py b/activitysim/abm/models/util/canonical_ids.py index 47e6ade8d..908631350 100644 --- a/activitysim/abm/models/util/canonical_ids.py +++ b/activitysim/abm/models/util/canonical_ids.py @@ -59,8 +59,21 @@ def enumerate_tour_types(tour_flavors): def parse_tour_flavor_from_columns(columns, tour_flavor): - # determines the max number from columns if column name contains 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] @@ -134,6 +147,29 @@ def determine_non_mandatory_tour_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) 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 cdfe74308..3f0144608 100644 --- a/activitysim/abm/models/util/test/test_mandatory_tour_frequency.py +++ b/activitysim/abm/models/util/test/test_mandatory_tour_frequency.py @@ -8,6 +8,8 @@ import pandas.testing as pdt import pytest +from activitysim.core import inject + from ..tour_frequency import process_mandatory_tours From 7e0e6b0081d9ca1e6a10e02f75bd46a7c97e181b Mon Sep 17 00:00:00 2001 From: David Hensle Date: Fri, 12 Aug 2022 09:55:27 -0700 Subject: [PATCH 08/16] handling missing alts files in examples --- activitysim/abm/models/util/canonical_ids.py | 31 ++++++++++++-------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/activitysim/abm/models/util/canonical_ids.py b/activitysim/abm/models/util/canonical_ids.py index 908631350..75291ce8b 100644 --- a/activitysim/abm/models/util/canonical_ids.py +++ b/activitysim/abm/models/util/canonical_ids.py @@ -58,6 +58,15 @@ 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 None + return alts + + def parse_tour_flavor_from_columns(columns, tour_flavor): """ determines the max number from columns if column name contains tour flavor @@ -213,15 +222,17 @@ def canonical_tours(): # ---- 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 = simulate.read_model_alts( - "non_mandatory_tour_frequency_alternatives.csv", set_index=None - ) + nm_alts = read_alts_file("non_mandatory_tour_frequency_alternatives.csv") # first need to determine max extension ext_probs_f = config.config_file_path( "non_mandatory_tour_frequency_extension_probs.csv" ) - extension_probs = pd.read_csv(ext_probs_f, comment="#") + try: + extension_probs = pd.read_csv(ext_probs_f, comment="#") + except RuntimeError: + logger.warning(f"Extension probabilities file not found: {ext_probs_f}") + extension_probs = None max_extension = determine_non_mandatory_tour_max_extension( nm_model_settings, extension_probs, default_max_extension=2 ) @@ -261,9 +272,7 @@ def canonical_tours(): # ---- 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 = simulate.read_model_alts( - "atwork_subtour_frequency_alternatives.csv", set_index=None - ) + 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} @@ -287,9 +296,7 @@ def canonical_tours(): # ---- 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 = simulate.read_model_alts( - "joint_tour_frequency_alternatives.csv", set_index=None - ) + jtf_alts = read_alts_file("joint_tour_frequency_alternatives.csv") provided_joint_flavors = jtf_model_settings.get("JOINT_TOUR_FLAVORS", None) default_joint_flavors = { @@ -390,8 +397,8 @@ def determine_max_trips_per_leg(default_max_trips_per_leg=4): provided_max_trips_per_leg = model_settings.get("MAX_TRIPS_PER_LEG", None) # determine flavors from alternative file - alts = simulate.read_model_alts("stop_frequency_alternatives.csv", set_index=None) try: + alts = read_alts_file("stop_frequency_alternatives.csv") trips_per_leg = [ int(alts[c].max()) for c in alts.columns @@ -402,7 +409,7 @@ def determine_max_trips_per_leg(default_max_trips_per_leg=4): ) # adding one for additional trip home or to primary dest if max_trips_per_leg > 1: valid_max_trips = True - except ValueError: + except (ValueError, RuntimeError): valid_max_trips = False if provided_max_trips_per_leg is not None: From a2a5ad9a95221fe759fb3f304e536bfa7d10149f Mon Sep 17 00:00:00 2001 From: David Hensle Date: Fri, 12 Aug 2022 10:53:22 -0700 Subject: [PATCH 09/16] error catching around extension probs --- activitysim/abm/models/util/canonical_ids.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/activitysim/abm/models/util/canonical_ids.py b/activitysim/abm/models/util/canonical_ids.py index 75291ce8b..1733c2cd2 100644 --- a/activitysim/abm/models/util/canonical_ids.py +++ b/activitysim/abm/models/util/canonical_ids.py @@ -225,10 +225,10 @@ def canonical_tours(): nm_alts = read_alts_file("non_mandatory_tour_frequency_alternatives.csv") # first need to determine max extension - ext_probs_f = config.config_file_path( - "non_mandatory_tour_frequency_extension_probs.csv" - ) 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"Extension probabilities file not found: {ext_probs_f}") From c22da11737d88f8cdfddfd0550cad0cbe90beace Mon Sep 17 00:00:00 2001 From: David Hensle Date: Fri, 12 Aug 2022 13:18:39 -0700 Subject: [PATCH 10/16] passing tests --- activitysim/abm/models/util/canonical_ids.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/activitysim/abm/models/util/canonical_ids.py b/activitysim/abm/models/util/canonical_ids.py index 1733c2cd2..bb025deee 100644 --- a/activitysim/abm/models/util/canonical_ids.py +++ b/activitysim/abm/models/util/canonical_ids.py @@ -231,7 +231,9 @@ def canonical_tours(): ) extension_probs = pd.read_csv(ext_probs_f, comment="#") except RuntimeError: - logger.warning(f"Extension probabilities file not found: {ext_probs_f}") + logger.warning( + f"non_mandatory_tour_frequency_extension_probs.csv file not found" + ) extension_probs = None max_extension = determine_non_mandatory_tour_max_extension( nm_model_settings, extension_probs, default_max_extension=2 From 256d2c97e5437725c4da3fa508e69f3665236cc9 Mon Sep 17 00:00:00 2001 From: David Hensle Date: Fri, 12 Aug 2022 15:13:33 -0700 Subject: [PATCH 11/16] still passing tests around missing config files --- activitysim/abm/models/util/canonical_ids.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/activitysim/abm/models/util/canonical_ids.py b/activitysim/abm/models/util/canonical_ids.py index bb025deee..294990804 100644 --- a/activitysim/abm/models/util/canonical_ids.py +++ b/activitysim/abm/models/util/canonical_ids.py @@ -188,7 +188,7 @@ def determine_flavors_from_alts_file( valid_flavors = all( [(isinstance(flavor, str) & (num >= 0)) for flavor, num in flavors.items()] ) - except ValueError: + except (ValueError, AttributeError): valid_flavors = False if provided_flavors is not None: @@ -234,7 +234,7 @@ def canonical_tours(): logger.warning( f"non_mandatory_tour_frequency_extension_probs.csv file not found" ) - extension_probs = None + extension_probs = pd.DataFrame() max_extension = determine_non_mandatory_tour_max_extension( nm_model_settings, extension_probs, default_max_extension=2 ) From 3263d4af1f8d52520c9819433faef9588f01b60a Mon Sep 17 00:00:00 2001 From: David Hensle Date: Fri, 12 Aug 2022 17:34:46 -0700 Subject: [PATCH 12/16] accounting for missing mtf spec in marin example --- activitysim/abm/models/util/canonical_ids.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/activitysim/abm/models/util/canonical_ids.py b/activitysim/abm/models/util/canonical_ids.py index 294990804..6181f0edc 100644 --- a/activitysim/abm/models/util/canonical_ids.py +++ b/activitysim/abm/models/util/canonical_ids.py @@ -63,7 +63,16 @@ def read_alts_file(file_name, set_index=None): 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 None + 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 @@ -261,7 +270,8 @@ def canonical_tours(): # ---- mandatory_channels mtf_model_settings_file_name = "mandatory_tour_frequency.yaml" mtf_model_settings = config.read_model_settings(mtf_model_settings_file_name) - mtf_model_spec = simulate.read_model_spec(file_name=mtf_model_settings["SPEC"]) + 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( From 69008a9e7f1849f1d679d5f082a38861804b08f4 Mon Sep 17 00:00:00 2001 From: David Hensle Date: Sun, 14 Aug 2022 11:09:39 -0700 Subject: [PATCH 13/16] fixed defaults not getting used if file missing --- activitysim/abm/models/util/canonical_ids.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/activitysim/abm/models/util/canonical_ids.py b/activitysim/abm/models/util/canonical_ids.py index 6181f0edc..6fc647e3c 100644 --- a/activitysim/abm/models/util/canonical_ids.py +++ b/activitysim/abm/models/util/canonical_ids.py @@ -196,7 +196,7 @@ def determine_flavors_from_alts_file( } valid_flavors = all( [(isinstance(flavor, str) & (num >= 0)) for flavor, num in flavors.items()] - ) + ) & (len(flavors) > 0) except (ValueError, AttributeError): valid_flavors = False From fdc94021ed8d84386be3072954e75d0d07150a7e Mon Sep 17 00:00:00 2001 From: David Hensle Date: Wed, 31 Aug 2022 13:55:08 -0700 Subject: [PATCH 14/16] extending nmtf and stop frequency to demonstrate flexible ids --- ..._mandatory_tour_frequency_alternatives.csv | 100 ++ .../configs/stop_frequency_alternatives.csv | 21 + .../configs/stop_frequency_othdiscr.csv | 50 + .../configs/trip_scheduling_probs.csv | 1388 +++++++++++++++++ .../test/regress/final_trips.csv | 147 +- docs/examples.rst | 10 + 6 files changed, 1637 insertions(+), 79 deletions(-) create mode 100644 activitysim/examples/prototype_mtc_extended/configs/non_mandatory_tour_frequency_alternatives.csv create mode 100644 activitysim/examples/prototype_mtc_extended/configs/stop_frequency_alternatives.csv create mode 100644 activitysim/examples/prototype_mtc_extended/configs/stop_frequency_othdiscr.csv create mode 100644 activitysim/examples/prototype_mtc_extended/configs/trip_scheduling_probs.csv 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/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_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/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/test/regress/final_trips.csv b/activitysim/examples/prototype_mtc_extended/test/regress/final_trips.csv index 2260ceead..087b411f7 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,69 @@ 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 +270680011,644476,386761,escort,1,True,1,16,16,27068001,escort,,5,WALK,0.5320114470722612 +270680016,644476,386761,escort,1,False,1,16,16,27068001,home,,5,TNC_SHARED,0.5320114470722612 +270680321,644476,386761,work,1,True,1,4,16,27068032,work,,5,WALK,0.5508855295681693 +270680326,644476,386761,work,1,False,2,25,4,27068032,escort,30.54448196201861,17,WALK_LOC,0.5220544805224123 +270680327,644476,386761,work,2,False,2,16,25,27068032,home,,19,WALK,10.360438250702908 +270680681,644477,386761,shopping,1,True,1,5,16,27068068,shopping,,10,WALK,4.08926155146542 +270680686,644477,386761,shopping,1,False,1,16,5,27068068,home,,18,WALK,4.011141637613954 +270681081,644478,386761,school,1,True,1,20,16,27068108,school,,7,WALK_LOC,1.5478828044209911 +270681086,644478,386761,school,1,False,2,7,20,27068108,escort,35.8479573232449,15,WALK_LOC,1.84109124654809 +270681087,644478,386761,school,2,False,2,16,7,27068108,home,,19,WALK_LOC,12.400175556762573 +660517121,1572659,763879,shopping,1,True,2,9,6,66051712,shopping,30.03488181091657,11,WALK_LOC,10.793454218489757 +660517122,1572659,763879,shopping,2,True,2,19,9,66051712,shopping,,12,TNC_SINGLE,0.5947152742072428 +660517126,1572659,763879,shopping,1,False,1,6,19,66051712,home,,20,WALK_LOC,0.40082631615857406 +685854941,1632987,824207,work,1,True,1,4,18,68585494,work,,7,WALK_LOC,0.31006269124138514 +685854946,1632987,824207,work,1,False,1,18,4,68585494,home,,17,WALK_LRF,0.6273330838758376 +787803221,1875721,982875,work,1,True,1,10,16,78780322,work,,8,WALK_LOC,7.627291076037502 +787803226,1875721,982875,work,1,False,1,16,10,78780322,home,,17,WALK_LOC,7.619393996022852 +787803301,1875722,982875,eatout,1,True,1,18,16,78780330,eatout,,7,WALK,0.25375271650786135 +787803306,1875722,982875,eatout,1,False,1,16,18,78780330,home,,13,WALK,0.22587009469786754 +906804341,2159057,1099626,work,1,True,1,2,20,90680434,work,,6,WALK,-0.31801945845680446 +906804346,2159057,1099626,work,1,False,1,20,2,90680434,home,,16,DRIVEALONEFREE,-2.1064263496483453 +906804681,2159058,1099626,univ,1,True,1,9,20,90680468,univ,,17,WALK_LOC,10.081589126967758 +906804686,2159058,1099626,univ,1,False,1,20,9,90680468,home,,20,WALK_LOC,9.95195853064744 +906805101,2159059,1099626,school,1,True,1,20,20,90680510,school,,7,WALK,2.001157626801728 +906805106,2159059,1099626,school,1,False,1,20,20,90680510,home,,15,WALK,2.001157626801728 +1078013561,2566698,1196298,work,1,True,1,1,25,107801356,work,,6,TNC_SINGLE,0.5218384234138416 +1078013566,2566698,1196298,work,1,False,1,25,1,107801356,home,,16,TNC_SINGLE,0.48556944294283877 +1078014321,2566700,1196298,school,1,True,1,25,25,107801432,school,,6,WALK,12.824615869979219 +1078014326,2566700,1196298,school,1,False,1,25,25,107801432,home,,22,WALK,12.824615869979219 +1078014741,2566701,1196298,school,1,True,1,3,25,107801474,school,,8,WALK_LOC,9.001507052987597 +1078014746,2566701,1196298,school,1,False,1,25,3,107801474,home,,16,WALK_LOC,9.002706716094952 +1078015161,2566702,1196298,school,1,True,1,6,25,107801516,school,,8,WALK,11.701783633702806 +1078015166,2566702,1196298,school,1,False,1,25,6,107801516,home,,13,WALK,11.238325441665102 +1285995821,3061894,1363467,shopping,1,True,2,7,24,128599582,othmaint,36.460758096403005,8,WALK,12.852372712730944 +1285995822,3061894,1363467,shopping,2,True,2,19,7,128599582,shopping,,8,DRIVEALONEFREE,0.6685799294322372 +1285995826,3061894,1363467,shopping,1,False,1,24,19,128599582,home,,19,SHARED2FREE,-0.6841449484072673 +1285996191,3061895,1363467,othmaint,1,True,1,4,24,128599619,othmaint,,7,WALK_LOC,0.8657906793525643 +1285996196,3061895,1363467,othmaint,1,False,1,24,4,128599619,home,,15,TNC_SINGLE,0.8645860484799108 +1285996271,3061895,1363467,social,1,True,1,11,24,128599627,social,,16,WALK_LOC,3.2107016897939977 +1285996276,3061895,1363467,social,1,False,1,24,11,128599627,home,,16,WALK_LOC,3.1342659069708274 +1285996301,3061895,1363467,work,1,True,1,25,24,128599630,work,,16,WALK,10.08552703351978 +1285996306,3061895,1363467,work,1,False,1,24,25,128599630,home,,22,WALK,10.10312705864723 +1752078621,4171615,1810015,univ,1,True,3,8,16,175207862,shopping,35.19582314159723,7,WALK,9.727146483995874 +1752078622,4171615,1810015,univ,2,True,3,7,8,175207862,shopping,41.2554497545281,8,WALK,13.486637386410468 +1752078623,4171615,1810015,univ,3,True,3,12,7,175207862,univ,,8,WALK,3.952779302703081 +1752078626,4171615,1810015,univ,1,False,1,16,12,175207862,home,,13,WALK,4.06117926693834 +1752079011,4171616,1810015,othmaint,1,True,1,19,16,175207901,othmaint,,14,TNC_SHARED,0.0016175329783967448 +1752079016,4171616,1810015,othmaint,1,False,1,16,19,175207901,home,,20,DRIVEALONEFREE,-0.9029931043506836 +1752079181,4171617,1810015,atwork,1,True,1,23,15,175207918,atwork,,14,WALK,2.4881666914007305 +1752079186,4171617,1810015,atwork,1,False,1,15,23,175207918,work,,14,WALK,2.4881666975625527 +1752079541,4171617,1810015,work,1,True,1,15,16,175207954,work,,9,WALK,0.3711262527058136 +1752079546,4171617,1810015,work,1,False,1,16,15,175207954,home,,18,WALK,0.23912905823533456 +1752080321,4171619,1810015,shopping,1,True,1,1,16,175208032,shopping,,14,WALK,-1.0053143437541998 +1752080326,4171619,1810015,shopping,1,False,1,16,1,175208032,home,,15,WALK,-1.1950043076874513 +1752080721,4171620,1810015,school,1,True,1,8,16,175208072,school,,7,WALK_LOC,10.68060996983474 +1752080726,4171620,1810015,school,1,False,1,16,8,175208072,home,,15,WALK_LOC,10.665116381563836 +1752081581,4171622,1810015,shopping,1,True,1,16,16,175208158,shopping,,11,WALK,7.3308794494701575 +1752081586,4171622,1810015,shopping,1,False,1,16,16,175208158,home,,15,WALK,7.330879449572421 +1752081701,4171623,1810015,atwork,1,True,1,4,21,175208170,atwork,,12,WALK,0.02111455052769715 +1752081706,4171623,1810015,atwork,1,False,1,21,4,175208170,work,,13,WALK,0.051191935808610436 +1752082061,4171623,1810015,work,1,True,1,21,16,175208206,work,,7,WALK,2.520638113923786 +1752082066,4171623,1810015,work,1,False,1,16,21,175208206,home,,22,WALK,2.7406373944340223 +3155256171,7512514,2821179,othmaint,1,True,1,9,8,315525617,othmaint,,12,WALK,6.622033921399732 +3155256176,7512514,2821179,othmaint,1,False,1,8,9,315525617,home,,15,WALK,6.622033921399732 +3155256221,7512514,2821179,shopping,1,True,1,2,8,315525622,shopping,,12,WALK,0.12220973142838766 +3155256226,7512514,2821179,shopping,1,False,1,8,2,315525622,home,,12,BIKE,0.06782315574947502 +3155697701,7513565,2822230,work,1,True,1,25,8,315569770,work,,8,WALK_LOC,10.398311261190385 +3155697706,7513565,2822230,work,1,False,1,8,25,315569770,home,,18,WALK_LOC,10.440882539983576 diff --git a/docs/examples.rst b/docs/examples.rst index 1b2c56ade..52d1aadaa 100644 --- a/docs/examples.rst +++ b/docs/examples.rst @@ -1102,6 +1102,16 @@ in this example are: * :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. +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 : From 06849e0e778edc72319c3aa904fad79fe2d25331 Mon Sep 17 00:00:00 2001 From: David Hensle Date: Thu, 27 Oct 2022 16:44:50 -0700 Subject: [PATCH 15/16] updating github test env --- conda-environments/github-actions-tests.yml | 32 +++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 conda-environments/github-actions-tests.yml diff --git a/conda-environments/github-actions-tests.yml b/conda-environments/github-actions-tests.yml new file mode 100644 index 000000000..552bb74ec --- /dev/null +++ b/conda-environments/github-actions-tests.yml @@ -0,0 +1,32 @@ +# 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 +dependencies: +- pip +- black +- coveralls +- cytoolz >= 0.8.1 +- isort +- nbmake +- 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,<1.5 +- psutil >= 4.1 +- pyarrow >= 2.0 +- pypyr >= 5.3 +- pytables >= 3.5.1,<3.7 # orca's constraint +- pytest +- pytest-cov +- pytest-regressions +- pyyaml >= 5.1 +- requests >= 2.7 +- sharrow >= 2.3.2 +- simwrapper > 1.7 +- xarray >= 0.21 +- zarr \ No newline at end of file From fa7cc94209ae1f23e07f1f2d087ccb41879adb03 Mon Sep 17 00:00:00 2001 From: David Hensle Date: Thu, 27 Oct 2022 16:45:19 -0700 Subject: [PATCH 16/16] responding to review comments --- activitysim/abm/models/util/canonical_ids.py | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/activitysim/abm/models/util/canonical_ids.py b/activitysim/abm/models/util/canonical_ids.py index 6fc647e3c..421b57615 100644 --- a/activitysim/abm/models/util/canonical_ids.py +++ b/activitysim/abm/models/util/canonical_ids.py @@ -67,15 +67,6 @@ def read_alts_file(file_name, set_index=None): 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 @@ -261,8 +252,7 @@ def canonical_tours(): non_mandatory_tour_flavors = determine_flavors_from_alts_file( nm_alts, provided_nm_tour_flavors, default_nm_tour_flavors, max_extension ) - # FIXME add additional tours for school escorting only if model is included in run list: - # non_mandatory_tour_flavors['escort'] = non_mandatory_tour_flavors['escort'] + 3 + # FIXME additional non-mandatory tour flavors are added in school escorting PR non_mandatory_channels = enumerate_tour_types(non_mandatory_tour_flavors) logger.info(f"Non-Mandatory tour flavors used are {non_mandatory_tour_flavors}") @@ -271,7 +261,7 @@ def canonical_tours(): 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) + mtf_model_spec = read_alts_file(file_name=mtf_spec) default_mandatory_tour_flavors = {"work": 2, "school": 2} mandatory_tour_flavors = determine_mandatory_tour_flavors( @@ -442,7 +432,7 @@ def set_trip_index(trips, tour_id_column="tour_id"): # = 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: 1st trip out = 1, 2nd trip out = 2, 1st in = max_trips_per_leg + 1, etc. 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