diff --git a/.gitignore b/.gitignore index c876c288..a6de7440 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,9 @@ core/release/ model-files/runtime/config/pskill.exe utilities/vta_expresslane_feed_saver/vta_expresslanes_2018* site/ +.DS_Store +model-files/model/TripModeChoice.xls +utilities/sandag-activitysim/configs/* +utilities/sandag-activitysim/output/* +utilities/sandag-activitysim/scripts/.Rproj.user/* +utilities/sandag-activitysim/scripts/.Rhistory diff --git a/utilities/sandag-activitysim/scripts/mandatory-tour-frequency.Rmd b/utilities/sandag-activitysim/scripts/mandatory-tour-frequency.Rmd new file mode 100644 index 00000000..67751850 --- /dev/null +++ b/utilities/sandag-activitysim/scripts/mandatory-tour-frequency.Rmd @@ -0,0 +1,241 @@ +--- +title: "Mandatory Tour Frequency" +output: html_notebook +--- + +# Overhead +```{r overhead, include = FALSE} +packages_vector <- c("tidyverse", + "kableExtra") + +need_to_install <- packages_vector[!(packages_vector %in% installed.packages()[,"Package"])] + +if (length(need_to_install)) install.packages(need_to_install) + +for (package in packages_vector) { + library(package, character.only = TRUE) +} + +``` + +# Remote I/O +```{r remote-io} +interim_dir <- "../output/" + +person_filename <- paste0(interim_dir, "final_persons.csv") +tour_filename <- paste0(interim_dir, "final_tours.csv") + +``` + +# Parameters +```{r parameters} +ptype_dict <- tibble(ptype = seq(1,8), + label = c("Full-time Worker", + "Part-time Worker", + "University Student", + "Unemployed", + "Retired", + "Driving age Student", + "Non-driving age Student", + "Preschool Student")) +``` + + +# Data Reads +```{r read} +person_df <- read_csv(person_filename, col_types = cols( + person_id = col_double(), + household_id = col_double(), + age = col_double(), + PNUM = col_double(), + sex = col_double(), + pemploy = col_double(), + pstudent = col_double(), + ptype = col_double(), + educ = col_double(), + naics2_original_code = col_character(), + soc2 = col_double(), + age_16_to_19 = col_logical(), + age_16_p = col_logical(), + adult = col_logical(), + male = col_logical(), + female = col_logical(), + has_non_worker = col_logical(), + has_retiree = col_logical(), + has_preschool_kid = col_logical(), + has_driving_kid = col_logical(), + has_school_kid = col_logical(), + has_full_time = col_logical(), + has_part_time = col_logical(), + has_university = col_logical(), + student_is_employed = col_logical(), + nonstudent_to_school = col_logical(), + is_student = col_logical(), + is_preschool = col_logical(), + is_gradeschool = col_logical(), + is_highschool = col_logical(), + is_university = col_logical(), + school_segment = col_double(), + is_worker = col_logical(), + is_fulltime_worker = col_logical(), + is_parttime_worker = col_logical(), + is_internal_worker = col_logical(), + is_external_worker = col_logical(), + home_zone_id = col_double(), + time_factor_work = col_double(), + time_factor_nonwork = col_double(), + naics_code = col_double(), + occupation = col_character(), + is_income_less25K = col_logical(), + is_income_25K_to_60K = col_logical(), + is_income_60K_to_120K = col_logical(), + is_income_greater60K = col_logical(), + is_income_greater120K = col_logical(), + is_non_worker_in_HH = col_logical(), + is_all_adults_full_time_workers = col_logical(), + is_pre_drive_child_in_HH = col_logical(), + work_from_home = col_logical(), + is_out_of_home_worker = col_logical(), + external_workplace_zone_id = col_double(), + external_workplace_location_logsum = col_double(), + external_workplace_modechoice_logsum = col_double(), + school_zone_id = col_double(), + school_location_logsum = col_double(), + school_modechoice_logsum = col_double(), + distance_to_school = col_double(), + roundtrip_auto_time_to_school = col_double(), + workplace_zone_id = col_double(), + workplace_location_logsum = col_double(), + workplace_modechoice_logsum = col_double(), + distance_to_work = col_double(), + workplace_in_cbd = col_logical(), + work_zone_area_type = col_double(), + auto_time_home_to_work = col_double(), + roundtrip_auto_time_to_work = col_double(), + work_auto_savings = col_double(), + exp_daily_work = col_double(), + non_toll_time_work = col_double(), + toll_time_work = col_double(), + toll_dist_work = col_double(), + toll_cost_work = col_double(), + toll_travel_time_savings_work = col_double(), + transit_pass_subsidy = col_double(), + transit_pass_ownership = col_double(), + free_parking_at_work = col_logical(), + telecommute_frequency = col_character(), + cdap_activity = col_character(), + travel_active = col_logical(), + under16_not_at_school = col_logical(), + has_preschool_kid_at_home = col_logical(), + has_school_kid_at_home = col_logical(), + mandatory_tour_frequency = col_character(), + work_and_school_and_worker = col_logical(), + work_and_school_and_student = col_logical(), + num_mand = col_double(), + num_work_tours = col_double(), + has_pre_school_child_with_mandatory = col_logical(), + has_driving_age_child_with_mandatory = col_logical(), + num_joint_tours = col_double(), + non_mandatory_tour_frequency = col_double(), + num_non_mand = col_double(), + num_escort_tours = col_double(), + num_eatout_tours = col_double(), + num_shop_tours = col_double(), + num_maint_tours = col_double(), + num_discr_tours = col_double(), + num_social_tours = col_double(), + num_non_escort_tours = col_double(), + num_shop_maint_tours = col_double(), + num_shop_maint_escort_tours = col_double(), + num_add_shop_maint_tours = col_double(), + num_soc_discr_tours = col_double(), + num_add_soc_discr_tours = col_double(), + model = col_character() +)) + +tour_df <- read_csv(tour_filename, col_types = cols( + tour_id = col_double(), + person_id = col_double(), + tour_type = col_character(), + tour_type_count = col_double(), + tour_type_num = col_double(), + tour_num = col_double(), + tour_count = col_double(), + tour_category = col_character(), + number_of_participants = col_double(), + destination = col_double(), + origin = col_double(), + household_id = col_double(), + start = col_double(), + end = col_double(), + duration = col_double(), + school_esc_outbound = col_character(), + school_esc_inbound = col_character(), + num_escortees = col_double(), + tdd = col_double(), + tour_id_temp = col_double(), + composition = col_character(), + is_external_tour = col_logical(), + is_internal_tour = col_logical(), + destination_logsum = col_double(), + vehicle_occup_1 = col_character(), + vehicle_occup_2 = col_character(), + vehicle_occup_3.5 = col_character(), + tour_mode = col_character(), + mode_choice_logsum = col_double(), + selected_vehicle = col_character(), + atwork_subtour_frequency = col_character(), + parent_tour_id = col_double(), + stop_frequency = col_character(), + primary_purpose = col_character(), + model = col_character() +)) +``` + +# Reductions +```{r reductions} +temp_df <- tour_df %>% + select(tour_id, person_id, tour_category, tour_type) %>% + filter(tour_category == "mandatory") %>% + group_by(person_id, tour_type) %>% + summarise(mandatory_tours = n(), .groups = "drop") %>% + mutate(choice = paste0(tour_type, "_", mandatory_tours)) + +working_df <- temp_df %>% + group_by(person_id) %>% + summarise(count = n(), .groups = "drop") %>% + filter(count > 1) %>% + mutate(choice_update = "work_and_school") %>% + select(person_id, choice_update) + +out_df <- left_join(temp_df, working_df, by = c("person_id")) %>% + mutate(choice = if_else(is.na(choice_update), choice, choice_update)) %>% + distinct(person_id, choice) %>% + left_join(select(person_df, person_id, ptype), ., by = c("person_id")) %>% + mutate(choice = if_else(is.na(choice), "none", choice)) %>% + left_join(., ptype_dict, by = c("ptype")) %>% + rename(person_type = label) + +summary_df <- out_df %>% + group_by(ptype, person_type, choice) %>% + summarise(count = n(), .groups = "drop") %>% + group_by(ptype, person_type) %>% + mutate(share = count/sum(count)) %>% + ungroup() %>% + arrange(ptype) %>% + select(person_type, choice, share) %>% + pivot_wider(names_from = choice, values_from = share, values_fill = 0.0) + +summary_df %>% + kbl() %>% + kable_styling() + +``` +The model does show the right types of categories for each of the person types. It seems to have a much higher than expected share of non-mandatory and home activity patterns for workers and students, so the model does not appear to be well calibrated. But the implementation appears correct. ActivitySim files reviewed include: + +- `mandatory_tour_frequency_alternatives.csv` +- `mandatory_tour_frequency_coeffs.csv` +- `mandatory_tour_frequency.csv` +- `mandatory_tour_frequency.yaml` +- `annotate_persons_mtf.csv` + diff --git a/utilities/sandag-activitysim/scripts/mandatory-tour-frequency.nb.html b/utilities/sandag-activitysim/scripts/mandatory-tour-frequency.nb.html new file mode 100644 index 00000000..78bebe2d --- /dev/null +++ b/utilities/sandag-activitysim/scripts/mandatory-tour-frequency.nb.html @@ -0,0 +1,2375 @@ + + + + + + + + + + + + + +Mandatory Tour Frequency + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+

Overhead

+ + +
+
+

Remote I/O

+ + + +
interim_dir <- "../output/"
+
+person_filename <- paste0(interim_dir, "final_persons.csv")
+tour_filename <- paste0(interim_dir, "final_tours.csv")
+
+ + + +
+
+

Parameters

+ + + +
ptype_dict <- tibble(ptype = seq(1,8),
+                     label = c("Full-time Worker",
+                               "Part-time Worker",
+                               "University Student",
+                               "Unemployed",
+                               "Retired",
+                               "Driving age Student",
+                               "Non-driving age Student",
+                               "Preschool Student"))
+ + + +
+
+

Data Reads

+ + + +
person_df <- read_csv(person_filename, col_types = cols(
+  person_id = col_double(),
+  household_id = col_double(),
+  age = col_double(),
+  PNUM = col_double(),
+  sex = col_double(),
+  pemploy = col_double(),
+  pstudent = col_double(),
+  ptype = col_double(),
+  educ = col_double(),
+  naics2_original_code = col_character(),
+  soc2 = col_double(),
+  age_16_to_19 = col_logical(),
+  age_16_p = col_logical(),
+  adult = col_logical(),
+  male = col_logical(),
+  female = col_logical(),
+  has_non_worker = col_logical(),
+  has_retiree = col_logical(),
+  has_preschool_kid = col_logical(),
+  has_driving_kid = col_logical(),
+  has_school_kid = col_logical(),
+  has_full_time = col_logical(),
+  has_part_time = col_logical(),
+  has_university = col_logical(),
+  student_is_employed = col_logical(),
+  nonstudent_to_school = col_logical(),
+  is_student = col_logical(),
+  is_preschool = col_logical(),
+  is_gradeschool = col_logical(),
+  is_highschool = col_logical(),
+  is_university = col_logical(),
+  school_segment = col_double(),
+  is_worker = col_logical(),
+  is_fulltime_worker = col_logical(),
+  is_parttime_worker = col_logical(),
+  is_internal_worker = col_logical(),
+  is_external_worker = col_logical(),
+  home_zone_id = col_double(),
+  time_factor_work = col_double(),
+  time_factor_nonwork = col_double(),
+  naics_code = col_double(),
+  occupation = col_character(),
+  is_income_less25K = col_logical(),
+  is_income_25K_to_60K = col_logical(),
+  is_income_60K_to_120K = col_logical(),
+  is_income_greater60K = col_logical(),
+  is_income_greater120K = col_logical(),
+  is_non_worker_in_HH = col_logical(),
+  is_all_adults_full_time_workers = col_logical(),
+  is_pre_drive_child_in_HH = col_logical(),
+  work_from_home = col_logical(),
+  is_out_of_home_worker = col_logical(),
+  external_workplace_zone_id = col_double(),
+  external_workplace_location_logsum = col_double(),
+  external_workplace_modechoice_logsum = col_double(),
+  school_zone_id = col_double(),
+  school_location_logsum = col_double(),
+  school_modechoice_logsum = col_double(),
+  distance_to_school = col_double(),
+  roundtrip_auto_time_to_school = col_double(),
+  workplace_zone_id = col_double(),
+  workplace_location_logsum = col_double(),
+  workplace_modechoice_logsum = col_double(),
+  distance_to_work = col_double(),
+  workplace_in_cbd = col_logical(),
+  work_zone_area_type = col_double(),
+  auto_time_home_to_work = col_double(),
+  roundtrip_auto_time_to_work = col_double(),
+  work_auto_savings = col_double(),
+  exp_daily_work = col_double(),
+  non_toll_time_work = col_double(),
+  toll_time_work = col_double(),
+  toll_dist_work = col_double(),
+  toll_cost_work = col_double(),
+  toll_travel_time_savings_work = col_double(),
+  transit_pass_subsidy = col_double(),
+  transit_pass_ownership = col_double(),
+  free_parking_at_work = col_logical(),
+  telecommute_frequency = col_character(),
+  cdap_activity = col_character(),
+  travel_active = col_logical(),
+  under16_not_at_school = col_logical(),
+  has_preschool_kid_at_home = col_logical(),
+  has_school_kid_at_home = col_logical(),
+  mandatory_tour_frequency = col_character(),
+  work_and_school_and_worker = col_logical(),
+  work_and_school_and_student = col_logical(),
+  num_mand = col_double(),
+  num_work_tours = col_double(),
+  has_pre_school_child_with_mandatory = col_logical(),
+  has_driving_age_child_with_mandatory = col_logical(),
+  num_joint_tours = col_double(),
+  non_mandatory_tour_frequency = col_double(),
+  num_non_mand = col_double(),
+  num_escort_tours = col_double(),
+  num_eatout_tours = col_double(),
+  num_shop_tours = col_double(),
+  num_maint_tours = col_double(),
+  num_discr_tours = col_double(),
+  num_social_tours = col_double(),
+  num_non_escort_tours = col_double(),
+  num_shop_maint_tours = col_double(),
+  num_shop_maint_escort_tours = col_double(),
+  num_add_shop_maint_tours = col_double(),
+  num_soc_discr_tours = col_double(),
+  num_add_soc_discr_tours = col_double(),
+  model = col_character()
+))
+
+tour_df <- read_csv(tour_filename, col_types = cols(
+  tour_id = col_double(),
+  person_id = col_double(),
+  tour_type = col_character(),
+  tour_type_count = col_double(),
+  tour_type_num = col_double(),
+  tour_num = col_double(),
+  tour_count = col_double(),
+  tour_category = col_character(),
+  number_of_participants = col_double(),
+  destination = col_double(),
+  origin = col_double(),
+  household_id = col_double(),
+  start = col_double(),
+  end = col_double(),
+  duration = col_double(),
+  school_esc_outbound = col_character(),
+  school_esc_inbound = col_character(),
+  num_escortees = col_double(),
+  tdd = col_double(),
+  tour_id_temp = col_double(),
+  composition = col_character(),
+  is_external_tour = col_logical(),
+  is_internal_tour = col_logical(),
+  destination_logsum = col_double(),
+  vehicle_occup_1 = col_character(),
+  vehicle_occup_2 = col_character(),
+  vehicle_occup_3.5 = col_character(),
+  tour_mode = col_character(),
+  mode_choice_logsum = col_double(),
+  selected_vehicle = col_character(),
+  atwork_subtour_frequency = col_character(),
+  parent_tour_id = col_double(),
+  stop_frequency = col_character(),
+  primary_purpose = col_character(),
+  model = col_character()
+))
+ + + +
+
+

Reductions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
person_type none work_1 work_2 school_1 school_2 work_and_school
Full-time Worker 0.7793215 0.1993803 0.0212982 0.0000000 0.0000000 0.0000000
Part-time Worker 0.7374583 0.2314355 0.0311062 0.0000000 0.0000000 0.0000000
University Student 0.7873440 0.0076863 0.0159111 0.1704447 0.0079819 0.0106320
Unemployed 1.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
Retired 1.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
Driving age Student 0.8328733 0.0002269 0.0053503 0.1524559 0.0072031 0.0018906
Non-driving age Student 0.8154858 0.0000000 0.0000000 0.1819527 0.0025614 0.0000000
Preschool Student 0.9033079 0.0000000 0.0000000 0.0489189 0.0477732 0.0000000
+ + + + +
summary_df %>%
+  kbl() %>%
+  kable_styling()
+
+ + + +

The model does show the right types of categories for each of the +person types. It seems to have a much higher than expected share of +non-mandatory and home activity patterns for workers and students, so +the model does not appear to be well calibrated. But the implementation +appears correct. ActivitySim files reviewed include:

+ + +
+ +
LS0tCnRpdGxlOiAiTWFuZGF0b3J5IFRvdXIgRnJlcXVlbmN5IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojIE92ZXJoZWFkCmBgYHtyIG92ZXJoZWFkLCBpbmNsdWRlID0gRkFMU0V9CnBhY2thZ2VzX3ZlY3RvciA8LSBjKCJ0aWR5dmVyc2UiLAogICAgICAgICAgICAgICAgICAgICAia2FibGVFeHRyYSIpCgpuZWVkX3RvX2luc3RhbGwgPC0gcGFja2FnZXNfdmVjdG9yWyEocGFja2FnZXNfdmVjdG9yICVpbiUgaW5zdGFsbGVkLnBhY2thZ2VzKClbLCJQYWNrYWdlIl0pXQoKaWYgKGxlbmd0aChuZWVkX3RvX2luc3RhbGwpKSBpbnN0YWxsLnBhY2thZ2VzKG5lZWRfdG9faW5zdGFsbCkKCmZvciAocGFja2FnZSBpbiBwYWNrYWdlc192ZWN0b3IpIHsKICBsaWJyYXJ5KHBhY2thZ2UsIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSkKfQoKYGBgCgojIFJlbW90ZSBJL08KYGBge3IgcmVtb3RlLWlvfQppbnRlcmltX2RpciA8LSAiLi4vb3V0cHV0LyIKCnBlcnNvbl9maWxlbmFtZSA8LSBwYXN0ZTAoaW50ZXJpbV9kaXIsICJmaW5hbF9wZXJzb25zLmNzdiIpCnRvdXJfZmlsZW5hbWUgPC0gcGFzdGUwKGludGVyaW1fZGlyLCAiZmluYWxfdG91cnMuY3N2IikKCmBgYAoKIyBQYXJhbWV0ZXJzCmBgYHtyIHBhcmFtZXRlcnN9CnB0eXBlX2RpY3QgPC0gdGliYmxlKHB0eXBlID0gc2VxKDEsOCksCiAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gYygiRnVsbC10aW1lIFdvcmtlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFydC10aW1lIFdvcmtlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5pdmVyc2l0eSBTdHVkZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmVtcGxveWVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZXRpcmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEcml2aW5nIGFnZSBTdHVkZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb24tZHJpdmluZyBhZ2UgU3R1ZGVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJlc2Nob29sIFN0dWRlbnQiKSkKYGBgCgoKIyBEYXRhIFJlYWRzCmBgYHtyIHJlYWR9CnBlcnNvbl9kZiA8LSByZWFkX2NzdihwZXJzb25fZmlsZW5hbWUsIGNvbF90eXBlcyA9IGNvbHMoCiAgcGVyc29uX2lkID0gY29sX2RvdWJsZSgpLAogIGhvdXNlaG9sZF9pZCA9IGNvbF9kb3VibGUoKSwKICBhZ2UgPSBjb2xfZG91YmxlKCksCiAgUE5VTSA9IGNvbF9kb3VibGUoKSwKICBzZXggPSBjb2xfZG91YmxlKCksCiAgcGVtcGxveSA9IGNvbF9kb3VibGUoKSwKICBwc3R1ZGVudCA9IGNvbF9kb3VibGUoKSwKICBwdHlwZSA9IGNvbF9kb3VibGUoKSwKICBlZHVjID0gY29sX2RvdWJsZSgpLAogIG5haWNzMl9vcmlnaW5hbF9jb2RlID0gY29sX2NoYXJhY3RlcigpLAogIHNvYzIgPSBjb2xfZG91YmxlKCksCiAgYWdlXzE2X3RvXzE5ID0gY29sX2xvZ2ljYWwoKSwKICBhZ2VfMTZfcCA9IGNvbF9sb2dpY2FsKCksCiAgYWR1bHQgPSBjb2xfbG9naWNhbCgpLAogIG1hbGUgPSBjb2xfbG9naWNhbCgpLAogIGZlbWFsZSA9IGNvbF9sb2dpY2FsKCksCiAgaGFzX25vbl93b3JrZXIgPSBjb2xfbG9naWNhbCgpLAogIGhhc19yZXRpcmVlID0gY29sX2xvZ2ljYWwoKSwKICBoYXNfcHJlc2Nob29sX2tpZCA9IGNvbF9sb2dpY2FsKCksCiAgaGFzX2RyaXZpbmdfa2lkID0gY29sX2xvZ2ljYWwoKSwKICBoYXNfc2Nob29sX2tpZCA9IGNvbF9sb2dpY2FsKCksCiAgaGFzX2Z1bGxfdGltZSA9IGNvbF9sb2dpY2FsKCksCiAgaGFzX3BhcnRfdGltZSA9IGNvbF9sb2dpY2FsKCksCiAgaGFzX3VuaXZlcnNpdHkgPSBjb2xfbG9naWNhbCgpLAogIHN0dWRlbnRfaXNfZW1wbG95ZWQgPSBjb2xfbG9naWNhbCgpLAogIG5vbnN0dWRlbnRfdG9fc2Nob29sID0gY29sX2xvZ2ljYWwoKSwKICBpc19zdHVkZW50ID0gY29sX2xvZ2ljYWwoKSwKICBpc19wcmVzY2hvb2wgPSBjb2xfbG9naWNhbCgpLAogIGlzX2dyYWRlc2Nob29sID0gY29sX2xvZ2ljYWwoKSwKICBpc19oaWdoc2Nob29sID0gY29sX2xvZ2ljYWwoKSwKICBpc191bml2ZXJzaXR5ID0gY29sX2xvZ2ljYWwoKSwKICBzY2hvb2xfc2VnbWVudCA9IGNvbF9kb3VibGUoKSwKICBpc193b3JrZXIgPSBjb2xfbG9naWNhbCgpLAogIGlzX2Z1bGx0aW1lX3dvcmtlciA9IGNvbF9sb2dpY2FsKCksCiAgaXNfcGFydHRpbWVfd29ya2VyID0gY29sX2xvZ2ljYWwoKSwKICBpc19pbnRlcm5hbF93b3JrZXIgPSBjb2xfbG9naWNhbCgpLAogIGlzX2V4dGVybmFsX3dvcmtlciA9IGNvbF9sb2dpY2FsKCksCiAgaG9tZV96b25lX2lkID0gY29sX2RvdWJsZSgpLAogIHRpbWVfZmFjdG9yX3dvcmsgPSBjb2xfZG91YmxlKCksCiAgdGltZV9mYWN0b3Jfbm9ud29yayA9IGNvbF9kb3VibGUoKSwKICBuYWljc19jb2RlID0gY29sX2RvdWJsZSgpLAogIG9jY3VwYXRpb24gPSBjb2xfY2hhcmFjdGVyKCksCiAgaXNfaW5jb21lX2xlc3MyNUsgPSBjb2xfbG9naWNhbCgpLAogIGlzX2luY29tZV8yNUtfdG9fNjBLID0gY29sX2xvZ2ljYWwoKSwKICBpc19pbmNvbWVfNjBLX3RvXzEyMEsgPSBjb2xfbG9naWNhbCgpLAogIGlzX2luY29tZV9ncmVhdGVyNjBLID0gY29sX2xvZ2ljYWwoKSwKICBpc19pbmNvbWVfZ3JlYXRlcjEyMEsgPSBjb2xfbG9naWNhbCgpLAogIGlzX25vbl93b3JrZXJfaW5fSEggPSBjb2xfbG9naWNhbCgpLAogIGlzX2FsbF9hZHVsdHNfZnVsbF90aW1lX3dvcmtlcnMgPSBjb2xfbG9naWNhbCgpLAogIGlzX3ByZV9kcml2ZV9jaGlsZF9pbl9ISCA9IGNvbF9sb2dpY2FsKCksCiAgd29ya19mcm9tX2hvbWUgPSBjb2xfbG9naWNhbCgpLAogIGlzX291dF9vZl9ob21lX3dvcmtlciA9IGNvbF9sb2dpY2FsKCksCiAgZXh0ZXJuYWxfd29ya3BsYWNlX3pvbmVfaWQgPSBjb2xfZG91YmxlKCksCiAgZXh0ZXJuYWxfd29ya3BsYWNlX2xvY2F0aW9uX2xvZ3N1bSA9IGNvbF9kb3VibGUoKSwKICBleHRlcm5hbF93b3JrcGxhY2VfbW9kZWNob2ljZV9sb2dzdW0gPSBjb2xfZG91YmxlKCksCiAgc2Nob29sX3pvbmVfaWQgPSBjb2xfZG91YmxlKCksCiAgc2Nob29sX2xvY2F0aW9uX2xvZ3N1bSA9IGNvbF9kb3VibGUoKSwKICBzY2hvb2xfbW9kZWNob2ljZV9sb2dzdW0gPSBjb2xfZG91YmxlKCksCiAgZGlzdGFuY2VfdG9fc2Nob29sID0gY29sX2RvdWJsZSgpLAogIHJvdW5kdHJpcF9hdXRvX3RpbWVfdG9fc2Nob29sID0gY29sX2RvdWJsZSgpLAogIHdvcmtwbGFjZV96b25lX2lkID0gY29sX2RvdWJsZSgpLAogIHdvcmtwbGFjZV9sb2NhdGlvbl9sb2dzdW0gPSBjb2xfZG91YmxlKCksCiAgd29ya3BsYWNlX21vZGVjaG9pY2VfbG9nc3VtID0gY29sX2RvdWJsZSgpLAogIGRpc3RhbmNlX3RvX3dvcmsgPSBjb2xfZG91YmxlKCksCiAgd29ya3BsYWNlX2luX2NiZCA9IGNvbF9sb2dpY2FsKCksCiAgd29ya196b25lX2FyZWFfdHlwZSA9IGNvbF9kb3VibGUoKSwKICBhdXRvX3RpbWVfaG9tZV90b193b3JrID0gY29sX2RvdWJsZSgpLAogIHJvdW5kdHJpcF9hdXRvX3RpbWVfdG9fd29yayA9IGNvbF9kb3VibGUoKSwKICB3b3JrX2F1dG9fc2F2aW5ncyA9IGNvbF9kb3VibGUoKSwKICBleHBfZGFpbHlfd29yayA9IGNvbF9kb3VibGUoKSwKICBub25fdG9sbF90aW1lX3dvcmsgPSBjb2xfZG91YmxlKCksCiAgdG9sbF90aW1lX3dvcmsgPSBjb2xfZG91YmxlKCksCiAgdG9sbF9kaXN0X3dvcmsgPSBjb2xfZG91YmxlKCksCiAgdG9sbF9jb3N0X3dvcmsgPSBjb2xfZG91YmxlKCksCiAgdG9sbF90cmF2ZWxfdGltZV9zYXZpbmdzX3dvcmsgPSBjb2xfZG91YmxlKCksCiAgdHJhbnNpdF9wYXNzX3N1YnNpZHkgPSBjb2xfZG91YmxlKCksCiAgdHJhbnNpdF9wYXNzX293bmVyc2hpcCA9IGNvbF9kb3VibGUoKSwKICBmcmVlX3BhcmtpbmdfYXRfd29yayA9IGNvbF9sb2dpY2FsKCksCiAgdGVsZWNvbW11dGVfZnJlcXVlbmN5ID0gY29sX2NoYXJhY3RlcigpLAogIGNkYXBfYWN0aXZpdHkgPSBjb2xfY2hhcmFjdGVyKCksCiAgdHJhdmVsX2FjdGl2ZSA9IGNvbF9sb2dpY2FsKCksCiAgdW5kZXIxNl9ub3RfYXRfc2Nob29sID0gY29sX2xvZ2ljYWwoKSwKICBoYXNfcHJlc2Nob29sX2tpZF9hdF9ob21lID0gY29sX2xvZ2ljYWwoKSwKICBoYXNfc2Nob29sX2tpZF9hdF9ob21lID0gY29sX2xvZ2ljYWwoKSwKICBtYW5kYXRvcnlfdG91cl9mcmVxdWVuY3kgPSBjb2xfY2hhcmFjdGVyKCksCiAgd29ya19hbmRfc2Nob29sX2FuZF93b3JrZXIgPSBjb2xfbG9naWNhbCgpLAogIHdvcmtfYW5kX3NjaG9vbF9hbmRfc3R1ZGVudCA9IGNvbF9sb2dpY2FsKCksCiAgbnVtX21hbmQgPSBjb2xfZG91YmxlKCksCiAgbnVtX3dvcmtfdG91cnMgPSBjb2xfZG91YmxlKCksCiAgaGFzX3ByZV9zY2hvb2xfY2hpbGRfd2l0aF9tYW5kYXRvcnkgPSBjb2xfbG9naWNhbCgpLAogIGhhc19kcml2aW5nX2FnZV9jaGlsZF93aXRoX21hbmRhdG9yeSA9IGNvbF9sb2dpY2FsKCksCiAgbnVtX2pvaW50X3RvdXJzID0gY29sX2RvdWJsZSgpLAogIG5vbl9tYW5kYXRvcnlfdG91cl9mcmVxdWVuY3kgPSBjb2xfZG91YmxlKCksCiAgbnVtX25vbl9tYW5kID0gY29sX2RvdWJsZSgpLAogIG51bV9lc2NvcnRfdG91cnMgPSBjb2xfZG91YmxlKCksCiAgbnVtX2VhdG91dF90b3VycyA9IGNvbF9kb3VibGUoKSwKICBudW1fc2hvcF90b3VycyA9IGNvbF9kb3VibGUoKSwKICBudW1fbWFpbnRfdG91cnMgPSBjb2xfZG91YmxlKCksCiAgbnVtX2Rpc2NyX3RvdXJzID0gY29sX2RvdWJsZSgpLAogIG51bV9zb2NpYWxfdG91cnMgPSBjb2xfZG91YmxlKCksCiAgbnVtX25vbl9lc2NvcnRfdG91cnMgPSBjb2xfZG91YmxlKCksCiAgbnVtX3Nob3BfbWFpbnRfdG91cnMgPSBjb2xfZG91YmxlKCksCiAgbnVtX3Nob3BfbWFpbnRfZXNjb3J0X3RvdXJzID0gY29sX2RvdWJsZSgpLAogIG51bV9hZGRfc2hvcF9tYWludF90b3VycyA9IGNvbF9kb3VibGUoKSwKICBudW1fc29jX2Rpc2NyX3RvdXJzID0gY29sX2RvdWJsZSgpLAogIG51bV9hZGRfc29jX2Rpc2NyX3RvdXJzID0gY29sX2RvdWJsZSgpLAogIG1vZGVsID0gY29sX2NoYXJhY3RlcigpCikpCgp0b3VyX2RmIDwtIHJlYWRfY3N2KHRvdXJfZmlsZW5hbWUsIGNvbF90eXBlcyA9IGNvbHMoCiAgdG91cl9pZCA9IGNvbF9kb3VibGUoKSwKICBwZXJzb25faWQgPSBjb2xfZG91YmxlKCksCiAgdG91cl90eXBlID0gY29sX2NoYXJhY3RlcigpLAogIHRvdXJfdHlwZV9jb3VudCA9IGNvbF9kb3VibGUoKSwKICB0b3VyX3R5cGVfbnVtID0gY29sX2RvdWJsZSgpLAogIHRvdXJfbnVtID0gY29sX2RvdWJsZSgpLAogIHRvdXJfY291bnQgPSBjb2xfZG91YmxlKCksCiAgdG91cl9jYXRlZ29yeSA9IGNvbF9jaGFyYWN0ZXIoKSwKICBudW1iZXJfb2ZfcGFydGljaXBhbnRzID0gY29sX2RvdWJsZSgpLAogIGRlc3RpbmF0aW9uID0gY29sX2RvdWJsZSgpLAogIG9yaWdpbiA9IGNvbF9kb3VibGUoKSwKICBob3VzZWhvbGRfaWQgPSBjb2xfZG91YmxlKCksCiAgc3RhcnQgPSBjb2xfZG91YmxlKCksCiAgZW5kID0gY29sX2RvdWJsZSgpLAogIGR1cmF0aW9uID0gY29sX2RvdWJsZSgpLAogIHNjaG9vbF9lc2Nfb3V0Ym91bmQgPSBjb2xfY2hhcmFjdGVyKCksCiAgc2Nob29sX2VzY19pbmJvdW5kID0gY29sX2NoYXJhY3RlcigpLAogIG51bV9lc2NvcnRlZXMgPSBjb2xfZG91YmxlKCksCiAgdGRkID0gY29sX2RvdWJsZSgpLAogIHRvdXJfaWRfdGVtcCA9IGNvbF9kb3VibGUoKSwKICBjb21wb3NpdGlvbiA9IGNvbF9jaGFyYWN0ZXIoKSwKICBpc19leHRlcm5hbF90b3VyID0gY29sX2xvZ2ljYWwoKSwKICBpc19pbnRlcm5hbF90b3VyID0gY29sX2xvZ2ljYWwoKSwKICBkZXN0aW5hdGlvbl9sb2dzdW0gPSBjb2xfZG91YmxlKCksCiAgdmVoaWNsZV9vY2N1cF8xID0gY29sX2NoYXJhY3RlcigpLAogIHZlaGljbGVfb2NjdXBfMiA9IGNvbF9jaGFyYWN0ZXIoKSwKICB2ZWhpY2xlX29jY3VwXzMuNSA9IGNvbF9jaGFyYWN0ZXIoKSwKICB0b3VyX21vZGUgPSBjb2xfY2hhcmFjdGVyKCksCiAgbW9kZV9jaG9pY2VfbG9nc3VtID0gY29sX2RvdWJsZSgpLAogIHNlbGVjdGVkX3ZlaGljbGUgPSBjb2xfY2hhcmFjdGVyKCksCiAgYXR3b3JrX3N1YnRvdXJfZnJlcXVlbmN5ID0gY29sX2NoYXJhY3RlcigpLAogIHBhcmVudF90b3VyX2lkID0gY29sX2RvdWJsZSgpLAogIHN0b3BfZnJlcXVlbmN5ID0gY29sX2NoYXJhY3RlcigpLAogIHByaW1hcnlfcHVycG9zZSA9IGNvbF9jaGFyYWN0ZXIoKSwKICBtb2RlbCA9IGNvbF9jaGFyYWN0ZXIoKQopKQpgYGAKCiMgUmVkdWN0aW9ucyAKYGBge3IgcmVkdWN0aW9uc30KdGVtcF9kZiA8LSB0b3VyX2RmICU+JQogIHNlbGVjdCh0b3VyX2lkLCBwZXJzb25faWQsIHRvdXJfY2F0ZWdvcnksIHRvdXJfdHlwZSkgJT4lCiAgZmlsdGVyKHRvdXJfY2F0ZWdvcnkgPT0gIm1hbmRhdG9yeSIpICU+JQogIGdyb3VwX2J5KHBlcnNvbl9pZCwgdG91cl90eXBlKSAlPiUKICBzdW1tYXJpc2UobWFuZGF0b3J5X3RvdXJzID0gbigpLCAuZ3JvdXBzID0gImRyb3AiKSAlPiUKICBtdXRhdGUoY2hvaWNlID0gcGFzdGUwKHRvdXJfdHlwZSwgIl8iLCBtYW5kYXRvcnlfdG91cnMpKQoKd29ya2luZ19kZiA8LSB0ZW1wX2RmICU+JQogIGdyb3VwX2J5KHBlcnNvbl9pZCkgJT4lCiAgc3VtbWFyaXNlKGNvdW50ID0gbigpLCAuZ3JvdXBzID0gImRyb3AiKSAlPiUKICBmaWx0ZXIoY291bnQgPiAxKSAlPiUKICBtdXRhdGUoY2hvaWNlX3VwZGF0ZSA9ICJ3b3JrX2FuZF9zY2hvb2wiKSAlPiUKICBzZWxlY3QocGVyc29uX2lkLCBjaG9pY2VfdXBkYXRlKQoKb3V0X2RmIDwtIGxlZnRfam9pbih0ZW1wX2RmLCB3b3JraW5nX2RmLCBieSA9IGMoInBlcnNvbl9pZCIpKSAlPiUKICBtdXRhdGUoY2hvaWNlID0gaWZfZWxzZShpcy5uYShjaG9pY2VfdXBkYXRlKSwgY2hvaWNlLCBjaG9pY2VfdXBkYXRlKSkgJT4lCiAgZGlzdGluY3QocGVyc29uX2lkLCBjaG9pY2UpICU+JQogIGxlZnRfam9pbihzZWxlY3QocGVyc29uX2RmLCBwZXJzb25faWQsIHB0eXBlKSwgLiwgYnkgPSBjKCJwZXJzb25faWQiKSkgJT4lCiAgbXV0YXRlKGNob2ljZSA9IGlmX2Vsc2UoaXMubmEoY2hvaWNlKSwgIm5vbmUiLCBjaG9pY2UpKSAlPiUKICBsZWZ0X2pvaW4oLiwgcHR5cGVfZGljdCwgYnkgPSBjKCJwdHlwZSIpKSAlPiUKICByZW5hbWUocGVyc29uX3R5cGUgPSBsYWJlbCkKCnN1bW1hcnlfZGYgPC0gb3V0X2RmICU+JQogIGdyb3VwX2J5KHB0eXBlLCBwZXJzb25fdHlwZSwgY2hvaWNlKSAlPiUKICBzdW1tYXJpc2UoY291bnQgPSBuKCksIC5ncm91cHMgPSAiZHJvcCIpICU+JQogIGdyb3VwX2J5KHB0eXBlLCBwZXJzb25fdHlwZSkgJT4lCiAgbXV0YXRlKHNoYXJlID0gY291bnQvc3VtKGNvdW50KSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGFycmFuZ2UocHR5cGUpICU+JQogIHNlbGVjdChwZXJzb25fdHlwZSwgY2hvaWNlLCBzaGFyZSkgJT4lCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IGNob2ljZSwgdmFsdWVzX2Zyb20gPSBzaGFyZSwgdmFsdWVzX2ZpbGwgPSAwLjApCgpzdW1tYXJ5X2RmICU+JQogIGtibCgpICU+JQogIGthYmxlX3N0eWxpbmcoKQoKYGBgClRoZSBtb2RlbCBkb2VzIHNob3cgdGhlIHJpZ2h0IHR5cGVzIG9mIGNhdGVnb3JpZXMgZm9yIGVhY2ggb2YgdGhlIHBlcnNvbiB0eXBlcy4gSXQgc2VlbXMgdG8gaGF2ZSBhIG11Y2ggaGlnaGVyIHRoYW4gZXhwZWN0ZWQgc2hhcmUgb2Ygbm9uLW1hbmRhdG9yeSBhbmQgaG9tZSBhY3Rpdml0eSBwYXR0ZXJucyBmb3Igd29ya2VycyBhbmQgc3R1ZGVudHMsIHNvIHRoZSBtb2RlbCBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd2VsbCBjYWxpYnJhdGVkLiBCdXQgdGhlIGltcGxlbWVudGF0aW9uIGFwcGVhcnMgY29ycmVjdC4gQWN0aXZpdHlTaW0gZmlsZXMgcmV2aWV3ZWQgaW5jbHVkZToKCi0gYG1hbmRhdG9yeV90b3VyX2ZyZXF1ZW5jeV9hbHRlcm5hdGl2ZXMuY3N2YAotIGBtYW5kYXRvcnlfdG91cl9mcmVxdWVuY3lfY29lZmZzLmNzdmAKLSBgbWFuZGF0b3J5X3RvdXJfZnJlcXVlbmN5LmNzdmAKLSBgbWFuZGF0b3J5X3RvdXJfZnJlcXVlbmN5LnlhbWxgCi0gYGFubm90YXRlX3BlcnNvbnNfbXRmLmNzdmAKCg==
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/utilities/sandag-activitysim/scripts/parking-subsidy.Rmd b/utilities/sandag-activitysim/scripts/parking-subsidy.Rmd new file mode 100644 index 00000000..61408341 --- /dev/null +++ b/utilities/sandag-activitysim/scripts/parking-subsidy.Rmd @@ -0,0 +1,487 @@ +--- +title: "Parking Subsidy" +output: html_notebook +--- + +# Overhead +```{r overhead, include = FALSE} +packages_vector <- c("tidyverse", + "kableExtra") + +need_to_install <- packages_vector[!(packages_vector %in% installed.packages()[,"Package"])] + +if (length(need_to_install)) install.packages(need_to_install) + +for (package in packages_vector) { + library(package, character.only = TRUE) +} + +``` + +# Remote I/O +```{r remote-io} +interim_dir <- "../output/" + +person_filename <- paste0(interim_dir, "final_persons.csv") +trips_filename <- paste0(interim_dir, "final_trips.csv") + +temp_trips_filename <- paste0(interim_dir, "final_trips.RDS") + +``` + +# Parameters +```{r parameters} +ptype_dict <- tibble(ptype = seq(1,8), + label = c("Full-time Worker", + "Part-time Worker", + "University Student", + "Unemployed", + "Retired", + "Driving age Student", + "Non-driving age Student", + "Preschool Student")) +``` + + +# Data Reads +```{r read} +trips_df <- read_csv(trips_filename, col_types = cols( + trip_id = col_double(), + person_id = col_double(), + household_id = col_double(), + primary_purpose = col_character(), + trip_num = col_double(), + outbound = col_logical(), + trip_count = col_double(), + destination = col_double(), + origin = col_double(), + tour_id = col_double(), + escort_participants = col_character(), + school_escort_direction = col_character(), + purpose = col_character(), + destination_logsum = col_double(), + depart = col_double(), + trip_mode = col_character(), + mode_choice_logsum = col_double(), + vot_da = col_double(), + vot_s2 = col_double(), + vot_s3 = col_double(), + ownsTransponder = col_logical(), + parking_zone = col_double(), + trip_period = col_character(), + tour_participants = col_double(), + distance = col_double(), + is_ea = col_logical(), + is_am = col_logical(), + is_md = col_logical(), + is_pm = col_logical(), + is_ev = col_logical(), + ownTrp = col_logical(), + vot1 = col_double(), + vot2 = col_double(), + vot3 = col_double(), + inbound = col_logical(), + DRIVEALONE_NOTR_EA_LOW = col_double(), + SHARED2_NOTR_EA_LOW = col_double(), + SHARED3_NOTR_EA_LOW = col_double(), + DRIVEALONE_TR_EA_LOW = col_double(), + SHARED2_TR_EA_LOW = col_double(), + SHARED3_TR_EA_LOW = col_double(), + DRIVEALONE_NOTR_EA_MED = col_double(), + SHARED2_NOTR_EA_MED = col_double(), + SHARED3_NOTR_EA_MED = col_double(), + DRIVEALONE_TR_EA_MED = col_double(), + SHARED2_TR_EA_MED = col_double(), + SHARED3_TR_EA_MED = col_double(), + DRIVEALONE_NOTR_EA_HIGH = col_double(), + SHARED2_NOTR_EA_HIGH = col_double(), + SHARED3_NOTR_EA_HIGH = col_double(), + DRIVEALONE_TR_EA_HIGH = col_double(), + SHARED2_TR_EA_HIGH = col_double(), + SHARED3_TR_EA_HIGH = col_double(), + WALK_LOC_EA = col_double(), + WALK_PRM_EA = col_double(), + WALK_MIX_EA = col_double(), + PNR_LOCOUT_EA = col_double(), + PNR_PRMOUT_EA = col_double(), + PNR_MIXOUT_EA = col_double(), + KNR_LOCOUT_EA = col_double(), + KNR_PRMOUT_EA = col_double(), + KNR_MIXOUT_EA = col_double(), + TNC_LOCOUT_EA = col_double(), + TNC_PRMOUT_EA = col_double(), + TNC_MIXOUT_EA = col_double(), + PNR_LOCIN_EA = col_double(), + PNR_PRMIN_EA = col_double(), + PNR_MIXIN_EA = col_double(), + KNR_LOCIN_EA = col_double(), + KNR_PRMIN_EA = col_double(), + KNR_MIXIN_EA = col_double(), + TNC_LOCIN_EA = col_double(), + TNC_PRMIN_EA = col_double(), + TNC_MIXIN_EA = col_double(), + BIKE_EA = col_double(), + WALK_EA = col_double(), + DRIVEALONE_NOTR_AM_LOW = col_double(), + SHARED2_NOTR_AM_LOW = col_double(), + SHARED3_NOTR_AM_LOW = col_double(), + DRIVEALONE_TR_AM_LOW = col_double(), + SHARED2_TR_AM_LOW = col_double(), + SHARED3_TR_AM_LOW = col_double(), + DRIVEALONE_NOTR_AM_MED = col_double(), + SHARED2_NOTR_AM_MED = col_double(), + SHARED3_NOTR_AM_MED = col_double(), + DRIVEALONE_TR_AM_MED = col_double(), + SHARED2_TR_AM_MED = col_double(), + SHARED3_TR_AM_MED = col_double(), + DRIVEALONE_NOTR_AM_HIGH = col_double(), + SHARED2_NOTR_AM_HIGH = col_double(), + SHARED3_NOTR_AM_HIGH = col_double(), + DRIVEALONE_TR_AM_HIGH = col_double(), + SHARED2_TR_AM_HIGH = col_double(), + SHARED3_TR_AM_HIGH = col_double(), + WALK_LOC_AM = col_double(), + WALK_PRM_AM = col_double(), + WALK_MIX_AM = col_double(), + PNR_LOCOUT_AM = col_double(), + PNR_PRMOUT_AM = col_double(), + PNR_MIXOUT_AM = col_double(), + KNR_LOCOUT_AM = col_double(), + KNR_PRMOUT_AM = col_double(), + KNR_MIXOUT_AM = col_double(), + TNC_LOCOUT_AM = col_double(), + TNC_PRMOUT_AM = col_double(), + TNC_MIXOUT_AM = col_double(), + PNR_LOCIN_AM = col_double(), + PNR_PRMIN_AM = col_double(), + PNR_MIXIN_AM = col_double(), + KNR_LOCIN_AM = col_double(), + KNR_PRMIN_AM = col_double(), + KNR_MIXIN_AM = col_double(), + TNC_LOCIN_AM = col_double(), + TNC_PRMIN_AM = col_double(), + TNC_MIXIN_AM = col_double(), + BIKE_AM = col_double(), + WALK_AM = col_double(), + DRIVEALONE_NOTR_MD_LOW = col_double(), + SHARED2_NOTR_MD_LOW = col_double(), + SHARED3_NOTR_MD_LOW = col_double(), + DRIVEALONE_TR_MD_LOW = col_double(), + SHARED2_TR_MD_LOW = col_double(), + SHARED3_TR_MD_LOW = col_double(), + DRIVEALONE_NOTR_MD_MED = col_double(), + SHARED2_NOTR_MD_MED = col_double(), + SHARED3_NOTR_MD_MED = col_double(), + DRIVEALONE_TR_MD_MED = col_double(), + SHARED2_TR_MD_MED = col_double(), + SHARED3_TR_MD_MED = col_double(), + DRIVEALONE_NOTR_MD_HIGH = col_double(), + SHARED2_NOTR_MD_HIGH = col_double(), + SHARED3_NOTR_MD_HIGH = col_double(), + DRIVEALONE_TR_MD_HIGH = col_double(), + SHARED2_TR_MD_HIGH = col_double(), + SHARED3_TR_MD_HIGH = col_double(), + WALK_LOC_MD = col_double(), + WALK_PRM_MD = col_double(), + WALK_MIX_MD = col_double(), + PNR_LOCOUT_MD = col_double(), + PNR_PRMOUT_MD = col_double(), + PNR_MIXOUT_MD = col_double(), + KNR_LOCOUT_MD = col_double(), + KNR_PRMOUT_MD = col_double(), + KNR_MIXOUT_MD = col_double(), + TNC_LOCOUT_MD = col_double(), + TNC_PRMOUT_MD = col_double(), + TNC_MIXOUT_MD = col_double(), + PNR_LOCIN_MD = col_double(), + PNR_PRMIN_MD = col_double(), + PNR_MIXIN_MD = col_double(), + KNR_LOCIN_MD = col_double(), + KNR_PRMIN_MD = col_double(), + KNR_MIXIN_MD = col_double(), + TNC_LOCIN_MD = col_double(), + TNC_PRMIN_MD = col_double(), + TNC_MIXIN_MD = col_double(), + BIKE_MD = col_double(), + WALK_MD = col_double(), + DRIVEALONE_NOTR_PM_LOW = col_double(), + SHARED2_NOTR_PM_LOW = col_double(), + SHARED3_NOTR_PM_LOW = col_double(), + DRIVEALONE_TR_PM_LOW = col_double(), + SHARED2_TR_PM_LOW = col_double(), + SHARED3_TR_PM_LOW = col_double(), + DRIVEALONE_NOTR_PM_MED = col_double(), + SHARED2_NOTR_PM_MED = col_double(), + SHARED3_NOTR_PM_MED = col_double(), + DRIVEALONE_TR_PM_MED = col_double(), + SHARED2_TR_PM_MED = col_double(), + SHARED3_TR_PM_MED = col_double(), + DRIVEALONE_NOTR_PM_HIGH = col_double(), + SHARED2_NOTR_PM_HIGH = col_double(), + SHARED3_NOTR_PM_HIGH = col_double(), + DRIVEALONE_TR_PM_HIGH = col_double(), + SHARED2_TR_PM_HIGH = col_double(), + SHARED3_TR_PM_HIGH = col_double(), + WALK_LOC_PM = col_double(), + WALK_PRM_PM = col_double(), + WALK_MIX_PM = col_double(), + PNR_LOCOUT_PM = col_double(), + PNR_PRMOUT_PM = col_double(), + PNR_MIXOUT_PM = col_double(), + KNR_LOCOUT_PM = col_double(), + KNR_PRMOUT_PM = col_double(), + KNR_MIXOUT_PM = col_double(), + TNC_LOCOUT_PM = col_double(), + TNC_PRMOUT_PM = col_double(), + TNC_MIXOUT_PM = col_double(), + PNR_LOCIN_PM = col_double(), + PNR_PRMIN_PM = col_double(), + PNR_MIXIN_PM = col_double(), + KNR_LOCIN_PM = col_double(), + KNR_PRMIN_PM = col_double(), + KNR_MIXIN_PM = col_double(), + TNC_LOCIN_PM = col_double(), + TNC_PRMIN_PM = col_double(), + TNC_MIXIN_PM = col_double(), + BIKE_PM = col_double(), + WALK_PM = col_double(), + DRIVEALONE_NOTR_EV_LOW = col_double(), + SHARED2_NOTR_EV_LOW = col_double(), + SHARED3_NOTR_EV_LOW = col_double(), + DRIVEALONE_TR_EV_LOW = col_double(), + SHARED2_TR_EV_LOW = col_double(), + SHARED3_TR_EV_LOW = col_double(), + DRIVEALONE_NOTR_EV_MED = col_double(), + SHARED2_NOTR_EV_MED = col_double(), + SHARED3_NOTR_EV_MED = col_double(), + DRIVEALONE_TR_EV_MED = col_double(), + SHARED2_TR_EV_MED = col_double(), + SHARED3_TR_EV_MED = col_double(), + DRIVEALONE_NOTR_EV_HIGH = col_double(), + SHARED2_NOTR_EV_HIGH = col_double(), + SHARED3_NOTR_EV_HIGH = col_double(), + DRIVEALONE_TR_EV_HIGH = col_double(), + SHARED2_TR_EV_HIGH = col_double(), + SHARED3_TR_EV_HIGH = col_double(), + WALK_LOC_EV = col_double(), + WALK_PRM_EV = col_double(), + WALK_MIX_EV = col_double(), + PNR_LOCOUT_EV = col_double(), + PNR_PRMOUT_EV = col_double(), + PNR_MIXOUT_EV = col_double(), + KNR_LOCOUT_EV = col_double(), + KNR_PRMOUT_EV = col_double(), + KNR_MIXOUT_EV = col_double(), + TNC_LOCOUT_EV = col_double(), + TNC_PRMOUT_EV = col_double(), + TNC_MIXOUT_EV = col_double(), + PNR_LOCIN_EV = col_double(), + PNR_PRMIN_EV = col_double(), + PNR_MIXIN_EV = col_double(), + KNR_LOCIN_EV = col_double(), + KNR_PRMIN_EV = col_double(), + KNR_MIXIN_EV = col_double(), + TNC_LOCIN_EV = col_double(), + TNC_PRMIN_EV = col_double(), + TNC_MIXIN_EV = col_double(), + BIKE_EV = col_double(), + WALK_EV = col_double(), + timeDrive = col_double(), + distanceDrive = col_double(), + costTollDrive = col_double(), + timeTransitInVehicle = col_double(), + timeRapidTransitInVehicle = col_double(), + timeExpressBusTransitInVehicle = col_double(), + timeLocalBusTransitInVehicle = col_double(), + timeLightRailTransitInVehicle = col_double(), + timeCommuterRailTransitInVehicle = col_double(), + timeTransitInitialWait = col_double(), + costFareTransit = col_double(), + transfersTransit = col_double(), + timeBike = col_double(), + timeWalk = col_double(), + sample_rate = col_double(), + otaz = col_double(), + dtaz = col_double(), + model = col_character() +)) + +person_df <- read_csv(person_filename, col_types = cols( + person_id = col_double(), + household_id = col_double(), + age = col_double(), + PNUM = col_double(), + sex = col_double(), + pemploy = col_double(), + pstudent = col_double(), + ptype = col_double(), + educ = col_double(), + naics2_original_code = col_character(), + soc2 = col_double(), + age_16_to_19 = col_logical(), + age_16_p = col_logical(), + adult = col_logical(), + male = col_logical(), + female = col_logical(), + has_non_worker = col_logical(), + has_retiree = col_logical(), + has_preschool_kid = col_logical(), + has_driving_kid = col_logical(), + has_school_kid = col_logical(), + has_full_time = col_logical(), + has_part_time = col_logical(), + has_university = col_logical(), + student_is_employed = col_logical(), + nonstudent_to_school = col_logical(), + is_student = col_logical(), + is_preschool = col_logical(), + is_gradeschool = col_logical(), + is_highschool = col_logical(), + is_university = col_logical(), + school_segment = col_double(), + is_worker = col_logical(), + is_fulltime_worker = col_logical(), + is_parttime_worker = col_logical(), + is_internal_worker = col_logical(), + is_external_worker = col_logical(), + home_zone_id = col_double(), + time_factor_work = col_double(), + time_factor_nonwork = col_double(), + naics_code = col_double(), + occupation = col_character(), + is_income_less25K = col_logical(), + is_income_25K_to_60K = col_logical(), + is_income_60K_to_120K = col_logical(), + is_income_greater60K = col_logical(), + is_income_greater120K = col_logical(), + is_non_worker_in_HH = col_logical(), + is_all_adults_full_time_workers = col_logical(), + is_pre_drive_child_in_HH = col_logical(), + work_from_home = col_logical(), + is_out_of_home_worker = col_logical(), + external_workplace_zone_id = col_double(), + external_workplace_location_logsum = col_double(), + external_workplace_modechoice_logsum = col_double(), + school_zone_id = col_double(), + school_location_logsum = col_double(), + school_modechoice_logsum = col_double(), + distance_to_school = col_double(), + roundtrip_auto_time_to_school = col_double(), + workplace_zone_id = col_double(), + workplace_location_logsum = col_double(), + workplace_modechoice_logsum = col_double(), + distance_to_work = col_double(), + workplace_in_cbd = col_logical(), + work_zone_area_type = col_double(), + auto_time_home_to_work = col_double(), + roundtrip_auto_time_to_work = col_double(), + work_auto_savings = col_double(), + exp_daily_work = col_double(), + non_toll_time_work = col_double(), + toll_time_work = col_double(), + toll_dist_work = col_double(), + toll_cost_work = col_double(), + toll_travel_time_savings_work = col_double(), + transit_pass_subsidy = col_double(), + transit_pass_ownership = col_double(), + free_parking_at_work = col_logical(), + telecommute_frequency = col_character(), + cdap_activity = col_character(), + travel_active = col_logical(), + under16_not_at_school = col_logical(), + has_preschool_kid_at_home = col_logical(), + has_school_kid_at_home = col_logical(), + mandatory_tour_frequency = col_character(), + work_and_school_and_worker = col_logical(), + work_and_school_and_student = col_logical(), + num_mand = col_double(), + num_work_tours = col_double(), + has_pre_school_child_with_mandatory = col_logical(), + has_driving_age_child_with_mandatory = col_logical(), + num_joint_tours = col_double(), + non_mandatory_tour_frequency = col_double(), + num_non_mand = col_double(), + num_escort_tours = col_double(), + num_eatout_tours = col_double(), + num_shop_tours = col_double(), + num_maint_tours = col_double(), + num_discr_tours = col_double(), + num_social_tours = col_double(), + num_non_escort_tours = col_double(), + num_shop_maint_tours = col_double(), + num_shop_maint_escort_tours = col_double(), + num_add_shop_maint_tours = col_double(), + num_soc_discr_tours = col_double(), + num_add_soc_discr_tours = col_double(), + model = col_character() +)) + +``` + +# Temp I/O +```{r temp-io} +saveRDS(trips_df, temp_trips_filename) +trips_df <- readRDS(temp_trips_filename) +``` + + +# Reductions +```{r reductions} +summary_df <- person_df %>% + select(person_id, ptype, free_parking_at_work) %>% + left_join(., ptype_dict, by = c("ptype")) %>% + rename(person_type = label) %>% + mutate(free_parking_at_work = if_else(free_parking_at_work, "Free Parking at Work", "Not Free Parking at Work")) %>% + group_by(ptype, person_type, free_parking_at_work) %>% + summarise(count = n(), .groups = "drop") %>% + group_by(ptype, person_type) %>% + mutate(share = count/sum(count)) %>% + ungroup() %>% + arrange(ptype) %>% + select(person_type, free_parking_at_work, share) %>% + pivot_wider(names_from = free_parking_at_work, values_from = share, values_fill = 0.0) + + +summary_df %>% + kbl() %>% + kable_styling() + +``` +The model does show the right types of categories for each of the person types. The implementation appears correct. ActivitySim files reviewed include: + +- `free_parking_annotate_persons_preprocessor.csv` +- `free_parking_coefficients.csv` +-- For SANDAG: still has coefficients specific to SF Bay Area +- `free_parking.csv`: not much intelligence in the spec +- `free_parking.yaml`: appears + +```{r Reductions part 2} +# need to check what choices those with free parking make in regards to parking locations +summary_df <- trips_df %>% + select(trip_id, person_id, purpose, parking_zone, destination) %>% + filter(purpose == "work") %>% + left_join(., select(person_df, person_id, free_parking_at_work), by = c("person_id")) %>% + mutate(parking_choice_made = (parking_zone > 0)) %>% + mutate(parking_zone_is_destination = if_else(parking_zone == destination, "Parked at Destination", "Parked and Walked to Destination")) %>% + mutate(parking_zone_is_destination = if_else(parking_choice_made, parking_zone_is_destination, "No Parking Choice Made")) %>% + mutate(free_parking_at_work = if_else(free_parking_at_work, "Free Parking at Work", "Not Free Parking at Work")) %>% + group_by(free_parking_at_work, parking_zone_is_destination) %>% + summarise(count = n(), .groups = "drop") %>% + group_by(free_parking_at_work) %>% + mutate(share = count/sum(count)) %>% + ungroup() %>% + select(-count) %>% + pivot_wider(names_from = parking_zone_is_destination, values_from = share, values_fill = 0.0) + +summary_df %>% + kbl() %>% + kable_styling() + + + + +``` + +The parking location choice model does not appeared to be applied correctly. Emailed Joe F. follow-up question on 10/26. + + diff --git a/utilities/sandag-activitysim/scripts/parking-subsidy.nb.html b/utilities/sandag-activitysim/scripts/parking-subsidy.nb.html new file mode 100644 index 00000000..fc14fc57 --- /dev/null +++ b/utilities/sandag-activitysim/scripts/parking-subsidy.nb.html @@ -0,0 +1,2311 @@ + + + + + + + + + + + + + +Parking Subsidy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+

Overhead

+ + +
+
+

Remote I/O

+ + + +
interim_dir <- "../output/"
+
+person_filename <- paste0(interim_dir, "final_persons.csv")
+trips_filename <- paste0(interim_dir, "final_trips.csv")
+
+temp_trips_filename <- paste0(interim_dir, "final_trips.RDS")
+
+ + + +
+
+

Parameters

+ + + +
ptype_dict <- tibble(ptype = seq(1,8),
+                     label = c("Full-time Worker",
+                               "Part-time Worker",
+                               "University Student",
+                               "Unemployed",
+                               "Retired",
+                               "Driving age Student",
+                               "Non-driving age Student",
+                               "Preschool Student"))
+ + + +
+
+

Data Reads

+ + + +
trips_df <- read_csv(trips_filename)
+
+ + +
Rows: 9229920 Columns: 258── Column specification ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
+Delimiter: ","
+chr   (7): primary_purpose, escort_participants, school_escort_direction, purpose, trip_mode, trip_period, model
+dbl (242): trip_id, person_id, household_id, trip_num, trip_count, destination, origin, tour_id, destination_logsum, depart, mode_choice_logsum, vot_da, vot_s2, vot_s3, parking_zone, tour_participants, distance, vot1, vot2, vot3, DRIVEALONE_N...
+lgl   (9): outbound, ownsTransponder, is_ea, is_am, is_md, is_pm, is_ev, ownTrp, inbound
+ℹ Use `spec()` to retrieve the full column specification for this data.
+ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
+ + + +
+
+

Temp I/O

+ + + +
saveRDS(trips_df, temp_trips_filename)
+ + + +
+
+

Reductions

+ + + +
summary_df <- person_df %>%
+  select(person_id, ptype, free_parking_at_work) %>%
+  left_join(., ptype_dict, by = c("ptype")) %>%
+  rename(person_type = label) %>%
+  mutate(free_parking_at_work = if_else(free_parking_at_work, "Free Parking at Work", "Not Free Parking at Work")) %>%
+  group_by(ptype, person_type, free_parking_at_work) %>%
+  summarise(count = n(), .groups = "drop") %>%
+  group_by(ptype, person_type) %>%
+  mutate(share = count/sum(count)) %>%
+  ungroup() %>%
+  arrange(ptype) %>%
+  select(person_type, free_parking_at_work, share) %>%
+  pivot_wider(names_from = free_parking_at_work, values_from = share, values_fill = 0.0)
+  
+
+summary_df %>%
+  kbl() %>%
+  kable_styling()
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
person_type Free Parking at Work Not Free Parking at Work
Full-time Worker 0.4530072 0.5469928
Part-time Worker 0.5140448 0.4859552
University Student 0.1371233 0.8628767
Unemployed 0.0000000 1.0000000
Retired 0.0000000 1.0000000
Driving age Student 0.0413185 0.9586815
Non-driving age Student 0.0000000 1.0000000
Preschool Student 0.0000000 1.0000000
+ + + + +
NA
+ + + +

The model does show the right types of categories for each of the +person types. The implementation appears correct. ActivitySim files +reviewed include:

+ + + + +
# need to check what choices those with free parking make in regards to parking locations
+summary_df <- trips_df %>%
+  select(trip_id, person_id, purpose, parking_zone, destination) %>%
+  filter(purpose == "work") %>% 
+  left_join(., select(person_df, person_id, free_parking_at_work), by = c("person_id")) %>%
+  mutate(parking_choice_made = (parking_zone > 0)) %>%
+  mutate(parking_zone_is_destination = if_else(parking_zone == destination, "Parked at Destination", "Parked and Walked to Destination")) %>%
+  mutate(parking_zone_is_destination = if_else(parking_choice_made, parking_zone_is_destination, "No Parking Choice Made")) %>%
+  mutate(free_parking_at_work = if_else(free_parking_at_work, "Free Parking at Work", "Not Free Parking at Work")) %>%
+  group_by(free_parking_at_work, parking_zone_is_destination) %>%
+  summarise(count = n(), .groups = "drop") %>%
+  group_by(free_parking_at_work) %>%
+  mutate(share = count/sum(count)) %>%
+  ungroup() %>%
+  select(-count) %>%
+  pivot_wider(names_from = parking_zone_is_destination, values_from = share, values_fill = 0.0)
+
+summary_df %>%
+  kbl() %>%
+  kable_styling()
+ + + + + + + + + + + + + + + + + + + + + + + + +
free_parking_at_work No Parking Choice Made Parked at Destination
Free Parking at Work 0.9386687 0.0613313
Not Free Parking at Work 0.9406610 0.0593390
+ + + + +
NA
+NA
+NA
+NA
+ + + +

The parking location choice model does not appeared to be applied +correctly. Emailed Joe F. follow-up question on 10/26.

+ +
+ +
LS0tCnRpdGxlOiAiUGFya2luZyBTdWJzaWR5IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgojIE92ZXJoZWFkCmBgYHtyIG92ZXJoZWFkLCBpbmNsdWRlID0gRkFMU0V9CnBhY2thZ2VzX3ZlY3RvciA8LSBjKCJ0aWR5dmVyc2UiLAogICAgICAgICAgICAgICAgICAgICAia2FibGVFeHRyYSIpCgpuZWVkX3RvX2luc3RhbGwgPC0gcGFja2FnZXNfdmVjdG9yWyEocGFja2FnZXNfdmVjdG9yICVpbiUgaW5zdGFsbGVkLnBhY2thZ2VzKClbLCJQYWNrYWdlIl0pXQoKaWYgKGxlbmd0aChuZWVkX3RvX2luc3RhbGwpKSBpbnN0YWxsLnBhY2thZ2VzKG5lZWRfdG9faW5zdGFsbCkKCmZvciAocGFja2FnZSBpbiBwYWNrYWdlc192ZWN0b3IpIHsKICBsaWJyYXJ5KHBhY2thZ2UsIGNoYXJhY3Rlci5vbmx5ID0gVFJVRSkKfQoKYGBgCgojIFJlbW90ZSBJL08KYGBge3IgcmVtb3RlLWlvfQppbnRlcmltX2RpciA8LSAiLi4vb3V0cHV0LyIKCnBlcnNvbl9maWxlbmFtZSA8LSBwYXN0ZTAoaW50ZXJpbV9kaXIsICJmaW5hbF9wZXJzb25zLmNzdiIpCnRyaXBzX2ZpbGVuYW1lIDwtIHBhc3RlMChpbnRlcmltX2RpciwgImZpbmFsX3RyaXBzLmNzdiIpCgp0ZW1wX3RyaXBzX2ZpbGVuYW1lIDwtIHBhc3RlMChpbnRlcmltX2RpciwgImZpbmFsX3RyaXBzLlJEUyIpCgpgYGAKCiMgUGFyYW1ldGVycwpgYGB7ciBwYXJhbWV0ZXJzfQpwdHlwZV9kaWN0IDwtIHRpYmJsZShwdHlwZSA9IHNlcSgxLDgpLAogICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IGMoIkZ1bGwtdGltZSBXb3JrZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBhcnQtdGltZSBXb3JrZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuaXZlcnNpdHkgU3R1ZGVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5lbXBsb3llZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmV0aXJlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRHJpdmluZyBhZ2UgU3R1ZGVudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uLWRyaXZpbmcgYWdlIFN0dWRlbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByZXNjaG9vbCBTdHVkZW50IikpCmBgYAoKCiMgRGF0YSBSZWFkcwpgYGB7ciByZWFkfQp0cmlwc19kZiA8LSByZWFkX2Nzdih0cmlwc19maWxlbmFtZSwgY29sX3R5cGVzID0gY29scygKICB0cmlwX2lkID0gY29sX2RvdWJsZSgpLAogIHBlcnNvbl9pZCA9IGNvbF9kb3VibGUoKSwKICBob3VzZWhvbGRfaWQgPSBjb2xfZG91YmxlKCksCiAgcHJpbWFyeV9wdXJwb3NlID0gY29sX2NoYXJhY3RlcigpLAogIHRyaXBfbnVtID0gY29sX2RvdWJsZSgpLAogIG91dGJvdW5kID0gY29sX2xvZ2ljYWwoKSwKICB0cmlwX2NvdW50ID0gY29sX2RvdWJsZSgpLAogIGRlc3RpbmF0aW9uID0gY29sX2RvdWJsZSgpLAogIG9yaWdpbiA9IGNvbF9kb3VibGUoKSwKICB0b3VyX2lkID0gY29sX2RvdWJsZSgpLAogIGVzY29ydF9wYXJ0aWNpcGFudHMgPSBjb2xfY2hhcmFjdGVyKCksCiAgc2Nob29sX2VzY29ydF9kaXJlY3Rpb24gPSBjb2xfY2hhcmFjdGVyKCksCiAgcHVycG9zZSA9IGNvbF9jaGFyYWN0ZXIoKSwKICBkZXN0aW5hdGlvbl9sb2dzdW0gPSBjb2xfZG91YmxlKCksCiAgZGVwYXJ0ID0gY29sX2RvdWJsZSgpLAogIHRyaXBfbW9kZSA9IGNvbF9jaGFyYWN0ZXIoKSwKICBtb2RlX2Nob2ljZV9sb2dzdW0gPSBjb2xfZG91YmxlKCksCiAgdm90X2RhID0gY29sX2RvdWJsZSgpLAogIHZvdF9zMiA9IGNvbF9kb3VibGUoKSwKICB2b3RfczMgPSBjb2xfZG91YmxlKCksCiAgb3duc1RyYW5zcG9uZGVyID0gY29sX2xvZ2ljYWwoKSwKICBwYXJraW5nX3pvbmUgPSBjb2xfZG91YmxlKCksCiAgdHJpcF9wZXJpb2QgPSBjb2xfY2hhcmFjdGVyKCksCiAgdG91cl9wYXJ0aWNpcGFudHMgPSBjb2xfZG91YmxlKCksCiAgZGlzdGFuY2UgPSBjb2xfZG91YmxlKCksCiAgaXNfZWEgPSBjb2xfbG9naWNhbCgpLAogIGlzX2FtID0gY29sX2xvZ2ljYWwoKSwKICBpc19tZCA9IGNvbF9sb2dpY2FsKCksCiAgaXNfcG0gPSBjb2xfbG9naWNhbCgpLAogIGlzX2V2ID0gY29sX2xvZ2ljYWwoKSwKICBvd25UcnAgPSBjb2xfbG9naWNhbCgpLAogIHZvdDEgPSBjb2xfZG91YmxlKCksCiAgdm90MiA9IGNvbF9kb3VibGUoKSwKICB2b3QzID0gY29sX2RvdWJsZSgpLAogIGluYm91bmQgPSBjb2xfbG9naWNhbCgpLAogIERSSVZFQUxPTkVfTk9UUl9FQV9MT1cgPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEMl9OT1RSX0VBX0xPVyA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQzX05PVFJfRUFfTE9XID0gY29sX2RvdWJsZSgpLAogIERSSVZFQUxPTkVfVFJfRUFfTE9XID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDJfVFJfRUFfTE9XID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDNfVFJfRUFfTE9XID0gY29sX2RvdWJsZSgpLAogIERSSVZFQUxPTkVfTk9UUl9FQV9NRUQgPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEMl9OT1RSX0VBX01FRCA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQzX05PVFJfRUFfTUVEID0gY29sX2RvdWJsZSgpLAogIERSSVZFQUxPTkVfVFJfRUFfTUVEID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDJfVFJfRUFfTUVEID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDNfVFJfRUFfTUVEID0gY29sX2RvdWJsZSgpLAogIERSSVZFQUxPTkVfTk9UUl9FQV9ISUdIID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDJfTk9UUl9FQV9ISUdIID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDNfTk9UUl9FQV9ISUdIID0gY29sX2RvdWJsZSgpLAogIERSSVZFQUxPTkVfVFJfRUFfSElHSCA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQyX1RSX0VBX0hJR0ggPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEM19UUl9FQV9ISUdIID0gY29sX2RvdWJsZSgpLAogIFdBTEtfTE9DX0VBID0gY29sX2RvdWJsZSgpLAogIFdBTEtfUFJNX0VBID0gY29sX2RvdWJsZSgpLAogIFdBTEtfTUlYX0VBID0gY29sX2RvdWJsZSgpLAogIFBOUl9MT0NPVVRfRUEgPSBjb2xfZG91YmxlKCksCiAgUE5SX1BSTU9VVF9FQSA9IGNvbF9kb3VibGUoKSwKICBQTlJfTUlYT1VUX0VBID0gY29sX2RvdWJsZSgpLAogIEtOUl9MT0NPVVRfRUEgPSBjb2xfZG91YmxlKCksCiAgS05SX1BSTU9VVF9FQSA9IGNvbF9kb3VibGUoKSwKICBLTlJfTUlYT1VUX0VBID0gY29sX2RvdWJsZSgpLAogIFROQ19MT0NPVVRfRUEgPSBjb2xfZG91YmxlKCksCiAgVE5DX1BSTU9VVF9FQSA9IGNvbF9kb3VibGUoKSwKICBUTkNfTUlYT1VUX0VBID0gY29sX2RvdWJsZSgpLAogIFBOUl9MT0NJTl9FQSA9IGNvbF9kb3VibGUoKSwKICBQTlJfUFJNSU5fRUEgPSBjb2xfZG91YmxlKCksCiAgUE5SX01JWElOX0VBID0gY29sX2RvdWJsZSgpLAogIEtOUl9MT0NJTl9FQSA9IGNvbF9kb3VibGUoKSwKICBLTlJfUFJNSU5fRUEgPSBjb2xfZG91YmxlKCksCiAgS05SX01JWElOX0VBID0gY29sX2RvdWJsZSgpLAogIFROQ19MT0NJTl9FQSA9IGNvbF9kb3VibGUoKSwKICBUTkNfUFJNSU5fRUEgPSBjb2xfZG91YmxlKCksCiAgVE5DX01JWElOX0VBID0gY29sX2RvdWJsZSgpLAogIEJJS0VfRUEgPSBjb2xfZG91YmxlKCksCiAgV0FMS19FQSA9IGNvbF9kb3VibGUoKSwKICBEUklWRUFMT05FX05PVFJfQU1fTE9XID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDJfTk9UUl9BTV9MT1cgPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEM19OT1RSX0FNX0xPVyA9IGNvbF9kb3VibGUoKSwKICBEUklWRUFMT05FX1RSX0FNX0xPVyA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQyX1RSX0FNX0xPVyA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQzX1RSX0FNX0xPVyA9IGNvbF9kb3VibGUoKSwKICBEUklWRUFMT05FX05PVFJfQU1fTUVEID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDJfTk9UUl9BTV9NRUQgPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEM19OT1RSX0FNX01FRCA9IGNvbF9kb3VibGUoKSwKICBEUklWRUFMT05FX1RSX0FNX01FRCA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQyX1RSX0FNX01FRCA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQzX1RSX0FNX01FRCA9IGNvbF9kb3VibGUoKSwKICBEUklWRUFMT05FX05PVFJfQU1fSElHSCA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQyX05PVFJfQU1fSElHSCA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQzX05PVFJfQU1fSElHSCA9IGNvbF9kb3VibGUoKSwKICBEUklWRUFMT05FX1RSX0FNX0hJR0ggPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEMl9UUl9BTV9ISUdIID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDNfVFJfQU1fSElHSCA9IGNvbF9kb3VibGUoKSwKICBXQUxLX0xPQ19BTSA9IGNvbF9kb3VibGUoKSwKICBXQUxLX1BSTV9BTSA9IGNvbF9kb3VibGUoKSwKICBXQUxLX01JWF9BTSA9IGNvbF9kb3VibGUoKSwKICBQTlJfTE9DT1VUX0FNID0gY29sX2RvdWJsZSgpLAogIFBOUl9QUk1PVVRfQU0gPSBjb2xfZG91YmxlKCksCiAgUE5SX01JWE9VVF9BTSA9IGNvbF9kb3VibGUoKSwKICBLTlJfTE9DT1VUX0FNID0gY29sX2RvdWJsZSgpLAogIEtOUl9QUk1PVVRfQU0gPSBjb2xfZG91YmxlKCksCiAgS05SX01JWE9VVF9BTSA9IGNvbF9kb3VibGUoKSwKICBUTkNfTE9DT1VUX0FNID0gY29sX2RvdWJsZSgpLAogIFROQ19QUk1PVVRfQU0gPSBjb2xfZG91YmxlKCksCiAgVE5DX01JWE9VVF9BTSA9IGNvbF9kb3VibGUoKSwKICBQTlJfTE9DSU5fQU0gPSBjb2xfZG91YmxlKCksCiAgUE5SX1BSTUlOX0FNID0gY29sX2RvdWJsZSgpLAogIFBOUl9NSVhJTl9BTSA9IGNvbF9kb3VibGUoKSwKICBLTlJfTE9DSU5fQU0gPSBjb2xfZG91YmxlKCksCiAgS05SX1BSTUlOX0FNID0gY29sX2RvdWJsZSgpLAogIEtOUl9NSVhJTl9BTSA9IGNvbF9kb3VibGUoKSwKICBUTkNfTE9DSU5fQU0gPSBjb2xfZG91YmxlKCksCiAgVE5DX1BSTUlOX0FNID0gY29sX2RvdWJsZSgpLAogIFROQ19NSVhJTl9BTSA9IGNvbF9kb3VibGUoKSwKICBCSUtFX0FNID0gY29sX2RvdWJsZSgpLAogIFdBTEtfQU0gPSBjb2xfZG91YmxlKCksCiAgRFJJVkVBTE9ORV9OT1RSX01EX0xPVyA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQyX05PVFJfTURfTE9XID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDNfTk9UUl9NRF9MT1cgPSBjb2xfZG91YmxlKCksCiAgRFJJVkVBTE9ORV9UUl9NRF9MT1cgPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEMl9UUl9NRF9MT1cgPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEM19UUl9NRF9MT1cgPSBjb2xfZG91YmxlKCksCiAgRFJJVkVBTE9ORV9OT1RSX01EX01FRCA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQyX05PVFJfTURfTUVEID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDNfTk9UUl9NRF9NRUQgPSBjb2xfZG91YmxlKCksCiAgRFJJVkVBTE9ORV9UUl9NRF9NRUQgPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEMl9UUl9NRF9NRUQgPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEM19UUl9NRF9NRUQgPSBjb2xfZG91YmxlKCksCiAgRFJJVkVBTE9ORV9OT1RSX01EX0hJR0ggPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEMl9OT1RSX01EX0hJR0ggPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEM19OT1RSX01EX0hJR0ggPSBjb2xfZG91YmxlKCksCiAgRFJJVkVBTE9ORV9UUl9NRF9ISUdIID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDJfVFJfTURfSElHSCA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQzX1RSX01EX0hJR0ggPSBjb2xfZG91YmxlKCksCiAgV0FMS19MT0NfTUQgPSBjb2xfZG91YmxlKCksCiAgV0FMS19QUk1fTUQgPSBjb2xfZG91YmxlKCksCiAgV0FMS19NSVhfTUQgPSBjb2xfZG91YmxlKCksCiAgUE5SX0xPQ09VVF9NRCA9IGNvbF9kb3VibGUoKSwKICBQTlJfUFJNT1VUX01EID0gY29sX2RvdWJsZSgpLAogIFBOUl9NSVhPVVRfTUQgPSBjb2xfZG91YmxlKCksCiAgS05SX0xPQ09VVF9NRCA9IGNvbF9kb3VibGUoKSwKICBLTlJfUFJNT1VUX01EID0gY29sX2RvdWJsZSgpLAogIEtOUl9NSVhPVVRfTUQgPSBjb2xfZG91YmxlKCksCiAgVE5DX0xPQ09VVF9NRCA9IGNvbF9kb3VibGUoKSwKICBUTkNfUFJNT1VUX01EID0gY29sX2RvdWJsZSgpLAogIFROQ19NSVhPVVRfTUQgPSBjb2xfZG91YmxlKCksCiAgUE5SX0xPQ0lOX01EID0gY29sX2RvdWJsZSgpLAogIFBOUl9QUk1JTl9NRCA9IGNvbF9kb3VibGUoKSwKICBQTlJfTUlYSU5fTUQgPSBjb2xfZG91YmxlKCksCiAgS05SX0xPQ0lOX01EID0gY29sX2RvdWJsZSgpLAogIEtOUl9QUk1JTl9NRCA9IGNvbF9kb3VibGUoKSwKICBLTlJfTUlYSU5fTUQgPSBjb2xfZG91YmxlKCksCiAgVE5DX0xPQ0lOX01EID0gY29sX2RvdWJsZSgpLAogIFROQ19QUk1JTl9NRCA9IGNvbF9kb3VibGUoKSwKICBUTkNfTUlYSU5fTUQgPSBjb2xfZG91YmxlKCksCiAgQklLRV9NRCA9IGNvbF9kb3VibGUoKSwKICBXQUxLX01EID0gY29sX2RvdWJsZSgpLAogIERSSVZFQUxPTkVfTk9UUl9QTV9MT1cgPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEMl9OT1RSX1BNX0xPVyA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQzX05PVFJfUE1fTE9XID0gY29sX2RvdWJsZSgpLAogIERSSVZFQUxPTkVfVFJfUE1fTE9XID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDJfVFJfUE1fTE9XID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDNfVFJfUE1fTE9XID0gY29sX2RvdWJsZSgpLAogIERSSVZFQUxPTkVfTk9UUl9QTV9NRUQgPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEMl9OT1RSX1BNX01FRCA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQzX05PVFJfUE1fTUVEID0gY29sX2RvdWJsZSgpLAogIERSSVZFQUxPTkVfVFJfUE1fTUVEID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDJfVFJfUE1fTUVEID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDNfVFJfUE1fTUVEID0gY29sX2RvdWJsZSgpLAogIERSSVZFQUxPTkVfTk9UUl9QTV9ISUdIID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDJfTk9UUl9QTV9ISUdIID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDNfTk9UUl9QTV9ISUdIID0gY29sX2RvdWJsZSgpLAogIERSSVZFQUxPTkVfVFJfUE1fSElHSCA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQyX1RSX1BNX0hJR0ggPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEM19UUl9QTV9ISUdIID0gY29sX2RvdWJsZSgpLAogIFdBTEtfTE9DX1BNID0gY29sX2RvdWJsZSgpLAogIFdBTEtfUFJNX1BNID0gY29sX2RvdWJsZSgpLAogIFdBTEtfTUlYX1BNID0gY29sX2RvdWJsZSgpLAogIFBOUl9MT0NPVVRfUE0gPSBjb2xfZG91YmxlKCksCiAgUE5SX1BSTU9VVF9QTSA9IGNvbF9kb3VibGUoKSwKICBQTlJfTUlYT1VUX1BNID0gY29sX2RvdWJsZSgpLAogIEtOUl9MT0NPVVRfUE0gPSBjb2xfZG91YmxlKCksCiAgS05SX1BSTU9VVF9QTSA9IGNvbF9kb3VibGUoKSwKICBLTlJfTUlYT1VUX1BNID0gY29sX2RvdWJsZSgpLAogIFROQ19MT0NPVVRfUE0gPSBjb2xfZG91YmxlKCksCiAgVE5DX1BSTU9VVF9QTSA9IGNvbF9kb3VibGUoKSwKICBUTkNfTUlYT1VUX1BNID0gY29sX2RvdWJsZSgpLAogIFBOUl9MT0NJTl9QTSA9IGNvbF9kb3VibGUoKSwKICBQTlJfUFJNSU5fUE0gPSBjb2xfZG91YmxlKCksCiAgUE5SX01JWElOX1BNID0gY29sX2RvdWJsZSgpLAogIEtOUl9MT0NJTl9QTSA9IGNvbF9kb3VibGUoKSwKICBLTlJfUFJNSU5fUE0gPSBjb2xfZG91YmxlKCksCiAgS05SX01JWElOX1BNID0gY29sX2RvdWJsZSgpLAogIFROQ19MT0NJTl9QTSA9IGNvbF9kb3VibGUoKSwKICBUTkNfUFJNSU5fUE0gPSBjb2xfZG91YmxlKCksCiAgVE5DX01JWElOX1BNID0gY29sX2RvdWJsZSgpLAogIEJJS0VfUE0gPSBjb2xfZG91YmxlKCksCiAgV0FMS19QTSA9IGNvbF9kb3VibGUoKSwKICBEUklWRUFMT05FX05PVFJfRVZfTE9XID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDJfTk9UUl9FVl9MT1cgPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEM19OT1RSX0VWX0xPVyA9IGNvbF9kb3VibGUoKSwKICBEUklWRUFMT05FX1RSX0VWX0xPVyA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQyX1RSX0VWX0xPVyA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQzX1RSX0VWX0xPVyA9IGNvbF9kb3VibGUoKSwKICBEUklWRUFMT05FX05PVFJfRVZfTUVEID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDJfTk9UUl9FVl9NRUQgPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEM19OT1RSX0VWX01FRCA9IGNvbF9kb3VibGUoKSwKICBEUklWRUFMT05FX1RSX0VWX01FRCA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQyX1RSX0VWX01FRCA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQzX1RSX0VWX01FRCA9IGNvbF9kb3VibGUoKSwKICBEUklWRUFMT05FX05PVFJfRVZfSElHSCA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQyX05PVFJfRVZfSElHSCA9IGNvbF9kb3VibGUoKSwKICBTSEFSRUQzX05PVFJfRVZfSElHSCA9IGNvbF9kb3VibGUoKSwKICBEUklWRUFMT05FX1RSX0VWX0hJR0ggPSBjb2xfZG91YmxlKCksCiAgU0hBUkVEMl9UUl9FVl9ISUdIID0gY29sX2RvdWJsZSgpLAogIFNIQVJFRDNfVFJfRVZfSElHSCA9IGNvbF9kb3VibGUoKSwKICBXQUxLX0xPQ19FViA9IGNvbF9kb3VibGUoKSwKICBXQUxLX1BSTV9FViA9IGNvbF9kb3VibGUoKSwKICBXQUxLX01JWF9FViA9IGNvbF9kb3VibGUoKSwKICBQTlJfTE9DT1VUX0VWID0gY29sX2RvdWJsZSgpLAogIFBOUl9QUk1PVVRfRVYgPSBjb2xfZG91YmxlKCksCiAgUE5SX01JWE9VVF9FViA9IGNvbF9kb3VibGUoKSwKICBLTlJfTE9DT1VUX0VWID0gY29sX2RvdWJsZSgpLAogIEtOUl9QUk1PVVRfRVYgPSBjb2xfZG91YmxlKCksCiAgS05SX01JWE9VVF9FViA9IGNvbF9kb3VibGUoKSwKICBUTkNfTE9DT1VUX0VWID0gY29sX2RvdWJsZSgpLAogIFROQ19QUk1PVVRfRVYgPSBjb2xfZG91YmxlKCksCiAgVE5DX01JWE9VVF9FViA9IGNvbF9kb3VibGUoKSwKICBQTlJfTE9DSU5fRVYgPSBjb2xfZG91YmxlKCksCiAgUE5SX1BSTUlOX0VWID0gY29sX2RvdWJsZSgpLAogIFBOUl9NSVhJTl9FViA9IGNvbF9kb3VibGUoKSwKICBLTlJfTE9DSU5fRVYgPSBjb2xfZG91YmxlKCksCiAgS05SX1BSTUlOX0VWID0gY29sX2RvdWJsZSgpLAogIEtOUl9NSVhJTl9FViA9IGNvbF9kb3VibGUoKSwKICBUTkNfTE9DSU5fRVYgPSBjb2xfZG91YmxlKCksCiAgVE5DX1BSTUlOX0VWID0gY29sX2RvdWJsZSgpLAogIFROQ19NSVhJTl9FViA9IGNvbF9kb3VibGUoKSwKICBCSUtFX0VWID0gY29sX2RvdWJsZSgpLAogIFdBTEtfRVYgPSBjb2xfZG91YmxlKCksCiAgdGltZURyaXZlID0gY29sX2RvdWJsZSgpLAogIGRpc3RhbmNlRHJpdmUgPSBjb2xfZG91YmxlKCksCiAgY29zdFRvbGxEcml2ZSA9IGNvbF9kb3VibGUoKSwKICB0aW1lVHJhbnNpdEluVmVoaWNsZSA9IGNvbF9kb3VibGUoKSwKICB0aW1lUmFwaWRUcmFuc2l0SW5WZWhpY2xlID0gY29sX2RvdWJsZSgpLAogIHRpbWVFeHByZXNzQnVzVHJhbnNpdEluVmVoaWNsZSA9IGNvbF9kb3VibGUoKSwKICB0aW1lTG9jYWxCdXNUcmFuc2l0SW5WZWhpY2xlID0gY29sX2RvdWJsZSgpLAogIHRpbWVMaWdodFJhaWxUcmFuc2l0SW5WZWhpY2xlID0gY29sX2RvdWJsZSgpLAogIHRpbWVDb21tdXRlclJhaWxUcmFuc2l0SW5WZWhpY2xlID0gY29sX2RvdWJsZSgpLAogIHRpbWVUcmFuc2l0SW5pdGlhbFdhaXQgPSBjb2xfZG91YmxlKCksCiAgY29zdEZhcmVUcmFuc2l0ID0gY29sX2RvdWJsZSgpLAogIHRyYW5zZmVyc1RyYW5zaXQgPSBjb2xfZG91YmxlKCksCiAgdGltZUJpa2UgPSBjb2xfZG91YmxlKCksCiAgdGltZVdhbGsgPSBjb2xfZG91YmxlKCksCiAgc2FtcGxlX3JhdGUgPSBjb2xfZG91YmxlKCksCiAgb3RheiA9IGNvbF9kb3VibGUoKSwKICBkdGF6ID0gY29sX2RvdWJsZSgpLAogIG1vZGVsID0gY29sX2NoYXJhY3RlcigpCikpCgpwZXJzb25fZGYgPC0gcmVhZF9jc3YocGVyc29uX2ZpbGVuYW1lLCBjb2xfdHlwZXMgPSBjb2xzKAogIHBlcnNvbl9pZCA9IGNvbF9kb3VibGUoKSwKICBob3VzZWhvbGRfaWQgPSBjb2xfZG91YmxlKCksCiAgYWdlID0gY29sX2RvdWJsZSgpLAogIFBOVU0gPSBjb2xfZG91YmxlKCksCiAgc2V4ID0gY29sX2RvdWJsZSgpLAogIHBlbXBsb3kgPSBjb2xfZG91YmxlKCksCiAgcHN0dWRlbnQgPSBjb2xfZG91YmxlKCksCiAgcHR5cGUgPSBjb2xfZG91YmxlKCksCiAgZWR1YyA9IGNvbF9kb3VibGUoKSwKICBuYWljczJfb3JpZ2luYWxfY29kZSA9IGNvbF9jaGFyYWN0ZXIoKSwKICBzb2MyID0gY29sX2RvdWJsZSgpLAogIGFnZV8xNl90b18xOSA9IGNvbF9sb2dpY2FsKCksCiAgYWdlXzE2X3AgPSBjb2xfbG9naWNhbCgpLAogIGFkdWx0ID0gY29sX2xvZ2ljYWwoKSwKICBtYWxlID0gY29sX2xvZ2ljYWwoKSwKICBmZW1hbGUgPSBjb2xfbG9naWNhbCgpLAogIGhhc19ub25fd29ya2VyID0gY29sX2xvZ2ljYWwoKSwKICBoYXNfcmV0aXJlZSA9IGNvbF9sb2dpY2FsKCksCiAgaGFzX3ByZXNjaG9vbF9raWQgPSBjb2xfbG9naWNhbCgpLAogIGhhc19kcml2aW5nX2tpZCA9IGNvbF9sb2dpY2FsKCksCiAgaGFzX3NjaG9vbF9raWQgPSBjb2xfbG9naWNhbCgpLAogIGhhc19mdWxsX3RpbWUgPSBjb2xfbG9naWNhbCgpLAogIGhhc19wYXJ0X3RpbWUgPSBjb2xfbG9naWNhbCgpLAogIGhhc191bml2ZXJzaXR5ID0gY29sX2xvZ2ljYWwoKSwKICBzdHVkZW50X2lzX2VtcGxveWVkID0gY29sX2xvZ2ljYWwoKSwKICBub25zdHVkZW50X3RvX3NjaG9vbCA9IGNvbF9sb2dpY2FsKCksCiAgaXNfc3R1ZGVudCA9IGNvbF9sb2dpY2FsKCksCiAgaXNfcHJlc2Nob29sID0gY29sX2xvZ2ljYWwoKSwKICBpc19ncmFkZXNjaG9vbCA9IGNvbF9sb2dpY2FsKCksCiAgaXNfaGlnaHNjaG9vbCA9IGNvbF9sb2dpY2FsKCksCiAgaXNfdW5pdmVyc2l0eSA9IGNvbF9sb2dpY2FsKCksCiAgc2Nob29sX3NlZ21lbnQgPSBjb2xfZG91YmxlKCksCiAgaXNfd29ya2VyID0gY29sX2xvZ2ljYWwoKSwKICBpc19mdWxsdGltZV93b3JrZXIgPSBjb2xfbG9naWNhbCgpLAogIGlzX3BhcnR0aW1lX3dvcmtlciA9IGNvbF9sb2dpY2FsKCksCiAgaXNfaW50ZXJuYWxfd29ya2VyID0gY29sX2xvZ2ljYWwoKSwKICBpc19leHRlcm5hbF93b3JrZXIgPSBjb2xfbG9naWNhbCgpLAogIGhvbWVfem9uZV9pZCA9IGNvbF9kb3VibGUoKSwKICB0aW1lX2ZhY3Rvcl93b3JrID0gY29sX2RvdWJsZSgpLAogIHRpbWVfZmFjdG9yX25vbndvcmsgPSBjb2xfZG91YmxlKCksCiAgbmFpY3NfY29kZSA9IGNvbF9kb3VibGUoKSwKICBvY2N1cGF0aW9uID0gY29sX2NoYXJhY3RlcigpLAogIGlzX2luY29tZV9sZXNzMjVLID0gY29sX2xvZ2ljYWwoKSwKICBpc19pbmNvbWVfMjVLX3RvXzYwSyA9IGNvbF9sb2dpY2FsKCksCiAgaXNfaW5jb21lXzYwS190b18xMjBLID0gY29sX2xvZ2ljYWwoKSwKICBpc19pbmNvbWVfZ3JlYXRlcjYwSyA9IGNvbF9sb2dpY2FsKCksCiAgaXNfaW5jb21lX2dyZWF0ZXIxMjBLID0gY29sX2xvZ2ljYWwoKSwKICBpc19ub25fd29ya2VyX2luX0hIID0gY29sX2xvZ2ljYWwoKSwKICBpc19hbGxfYWR1bHRzX2Z1bGxfdGltZV93b3JrZXJzID0gY29sX2xvZ2ljYWwoKSwKICBpc19wcmVfZHJpdmVfY2hpbGRfaW5fSEggPSBjb2xfbG9naWNhbCgpLAogIHdvcmtfZnJvbV9ob21lID0gY29sX2xvZ2ljYWwoKSwKICBpc19vdXRfb2ZfaG9tZV93b3JrZXIgPSBjb2xfbG9naWNhbCgpLAogIGV4dGVybmFsX3dvcmtwbGFjZV96b25lX2lkID0gY29sX2RvdWJsZSgpLAogIGV4dGVybmFsX3dvcmtwbGFjZV9sb2NhdGlvbl9sb2dzdW0gPSBjb2xfZG91YmxlKCksCiAgZXh0ZXJuYWxfd29ya3BsYWNlX21vZGVjaG9pY2VfbG9nc3VtID0gY29sX2RvdWJsZSgpLAogIHNjaG9vbF96b25lX2lkID0gY29sX2RvdWJsZSgpLAogIHNjaG9vbF9sb2NhdGlvbl9sb2dzdW0gPSBjb2xfZG91YmxlKCksCiAgc2Nob29sX21vZGVjaG9pY2VfbG9nc3VtID0gY29sX2RvdWJsZSgpLAogIGRpc3RhbmNlX3RvX3NjaG9vbCA9IGNvbF9kb3VibGUoKSwKICByb3VuZHRyaXBfYXV0b190aW1lX3RvX3NjaG9vbCA9IGNvbF9kb3VibGUoKSwKICB3b3JrcGxhY2Vfem9uZV9pZCA9IGNvbF9kb3VibGUoKSwKICB3b3JrcGxhY2VfbG9jYXRpb25fbG9nc3VtID0gY29sX2RvdWJsZSgpLAogIHdvcmtwbGFjZV9tb2RlY2hvaWNlX2xvZ3N1bSA9IGNvbF9kb3VibGUoKSwKICBkaXN0YW5jZV90b193b3JrID0gY29sX2RvdWJsZSgpLAogIHdvcmtwbGFjZV9pbl9jYmQgPSBjb2xfbG9naWNhbCgpLAogIHdvcmtfem9uZV9hcmVhX3R5cGUgPSBjb2xfZG91YmxlKCksCiAgYXV0b190aW1lX2hvbWVfdG9fd29yayA9IGNvbF9kb3VibGUoKSwKICByb3VuZHRyaXBfYXV0b190aW1lX3RvX3dvcmsgPSBjb2xfZG91YmxlKCksCiAgd29ya19hdXRvX3NhdmluZ3MgPSBjb2xfZG91YmxlKCksCiAgZXhwX2RhaWx5X3dvcmsgPSBjb2xfZG91YmxlKCksCiAgbm9uX3RvbGxfdGltZV93b3JrID0gY29sX2RvdWJsZSgpLAogIHRvbGxfdGltZV93b3JrID0gY29sX2RvdWJsZSgpLAogIHRvbGxfZGlzdF93b3JrID0gY29sX2RvdWJsZSgpLAogIHRvbGxfY29zdF93b3JrID0gY29sX2RvdWJsZSgpLAogIHRvbGxfdHJhdmVsX3RpbWVfc2F2aW5nc193b3JrID0gY29sX2RvdWJsZSgpLAogIHRyYW5zaXRfcGFzc19zdWJzaWR5ID0gY29sX2RvdWJsZSgpLAogIHRyYW5zaXRfcGFzc19vd25lcnNoaXAgPSBjb2xfZG91YmxlKCksCiAgZnJlZV9wYXJraW5nX2F0X3dvcmsgPSBjb2xfbG9naWNhbCgpLAogIHRlbGVjb21tdXRlX2ZyZXF1ZW5jeSA9IGNvbF9jaGFyYWN0ZXIoKSwKICBjZGFwX2FjdGl2aXR5ID0gY29sX2NoYXJhY3RlcigpLAogIHRyYXZlbF9hY3RpdmUgPSBjb2xfbG9naWNhbCgpLAogIHVuZGVyMTZfbm90X2F0X3NjaG9vbCA9IGNvbF9sb2dpY2FsKCksCiAgaGFzX3ByZXNjaG9vbF9raWRfYXRfaG9tZSA9IGNvbF9sb2dpY2FsKCksCiAgaGFzX3NjaG9vbF9raWRfYXRfaG9tZSA9IGNvbF9sb2dpY2FsKCksCiAgbWFuZGF0b3J5X3RvdXJfZnJlcXVlbmN5ID0gY29sX2NoYXJhY3RlcigpLAogIHdvcmtfYW5kX3NjaG9vbF9hbmRfd29ya2VyID0gY29sX2xvZ2ljYWwoKSwKICB3b3JrX2FuZF9zY2hvb2xfYW5kX3N0dWRlbnQgPSBjb2xfbG9naWNhbCgpLAogIG51bV9tYW5kID0gY29sX2RvdWJsZSgpLAogIG51bV93b3JrX3RvdXJzID0gY29sX2RvdWJsZSgpLAogIGhhc19wcmVfc2Nob29sX2NoaWxkX3dpdGhfbWFuZGF0b3J5ID0gY29sX2xvZ2ljYWwoKSwKICBoYXNfZHJpdmluZ19hZ2VfY2hpbGRfd2l0aF9tYW5kYXRvcnkgPSBjb2xfbG9naWNhbCgpLAogIG51bV9qb2ludF90b3VycyA9IGNvbF9kb3VibGUoKSwKICBub25fbWFuZGF0b3J5X3RvdXJfZnJlcXVlbmN5ID0gY29sX2RvdWJsZSgpLAogIG51bV9ub25fbWFuZCA9IGNvbF9kb3VibGUoKSwKICBudW1fZXNjb3J0X3RvdXJzID0gY29sX2RvdWJsZSgpLAogIG51bV9lYXRvdXRfdG91cnMgPSBjb2xfZG91YmxlKCksCiAgbnVtX3Nob3BfdG91cnMgPSBjb2xfZG91YmxlKCksCiAgbnVtX21haW50X3RvdXJzID0gY29sX2RvdWJsZSgpLAogIG51bV9kaXNjcl90b3VycyA9IGNvbF9kb3VibGUoKSwKICBudW1fc29jaWFsX3RvdXJzID0gY29sX2RvdWJsZSgpLAogIG51bV9ub25fZXNjb3J0X3RvdXJzID0gY29sX2RvdWJsZSgpLAogIG51bV9zaG9wX21haW50X3RvdXJzID0gY29sX2RvdWJsZSgpLAogIG51bV9zaG9wX21haW50X2VzY29ydF90b3VycyA9IGNvbF9kb3VibGUoKSwKICBudW1fYWRkX3Nob3BfbWFpbnRfdG91cnMgPSBjb2xfZG91YmxlKCksCiAgbnVtX3NvY19kaXNjcl90b3VycyA9IGNvbF9kb3VibGUoKSwKICBudW1fYWRkX3NvY19kaXNjcl90b3VycyA9IGNvbF9kb3VibGUoKSwKICBtb2RlbCA9IGNvbF9jaGFyYWN0ZXIoKQopKQoKYGBgCgojIFRlbXAgSS9PCmBgYHtyIHRlbXAtaW99CnNhdmVSRFModHJpcHNfZGYsIHRlbXBfdHJpcHNfZmlsZW5hbWUpCnRyaXBzX2RmIDwtIHJlYWRSRFModGVtcF90cmlwc19maWxlbmFtZSkKYGBgCgoKIyBSZWR1Y3Rpb25zIApgYGB7ciByZWR1Y3Rpb25zfQpzdW1tYXJ5X2RmIDwtIHBlcnNvbl9kZiAlPiUKICBzZWxlY3QocGVyc29uX2lkLCBwdHlwZSwgZnJlZV9wYXJraW5nX2F0X3dvcmspICU+JQogIGxlZnRfam9pbiguLCBwdHlwZV9kaWN0LCBieSA9IGMoInB0eXBlIikpICU+JQogIHJlbmFtZShwZXJzb25fdHlwZSA9IGxhYmVsKSAlPiUKICBtdXRhdGUoZnJlZV9wYXJraW5nX2F0X3dvcmsgPSBpZl9lbHNlKGZyZWVfcGFya2luZ19hdF93b3JrLCAiRnJlZSBQYXJraW5nIGF0IFdvcmsiLCAiTm90IEZyZWUgUGFya2luZyBhdCBXb3JrIikpICU+JQogIGdyb3VwX2J5KHB0eXBlLCBwZXJzb25fdHlwZSwgZnJlZV9wYXJraW5nX2F0X3dvcmspICU+JQogIHN1bW1hcmlzZShjb3VudCA9IG4oKSwgLmdyb3VwcyA9ICJkcm9wIikgJT4lCiAgZ3JvdXBfYnkocHR5cGUsIHBlcnNvbl90eXBlKSAlPiUKICBtdXRhdGUoc2hhcmUgPSBjb3VudC9zdW0oY291bnQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgYXJyYW5nZShwdHlwZSkgJT4lCiAgc2VsZWN0KHBlcnNvbl90eXBlLCBmcmVlX3BhcmtpbmdfYXRfd29yaywgc2hhcmUpICU+JQogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBmcmVlX3BhcmtpbmdfYXRfd29yaywgdmFsdWVzX2Zyb20gPSBzaGFyZSwgdmFsdWVzX2ZpbGwgPSAwLjApCiAgCgpzdW1tYXJ5X2RmICU+JQogIGtibCgpICU+JQogIGthYmxlX3N0eWxpbmcoKQoKYGBgClRoZSBtb2RlbCBkb2VzIHNob3cgdGhlIHJpZ2h0IHR5cGVzIG9mIGNhdGVnb3JpZXMgZm9yIGVhY2ggb2YgdGhlIHBlcnNvbiB0eXBlcy4gVGhlIGltcGxlbWVudGF0aW9uIGFwcGVhcnMgY29ycmVjdC4gQWN0aXZpdHlTaW0gZmlsZXMgcmV2aWV3ZWQgaW5jbHVkZToKCi0gYGZyZWVfcGFya2luZ19hbm5vdGF0ZV9wZXJzb25zX3ByZXByb2Nlc3Nvci5jc3ZgCi0gYGZyZWVfcGFya2luZ19jb2VmZmljaWVudHMuY3N2YAotLSBGb3IgU0FOREFHOiBzdGlsbCBoYXMgY29lZmZpY2llbnRzIHNwZWNpZmljIHRvIFNGIEJheSBBcmVhCi0gYGZyZWVfcGFya2luZy5jc3ZgOiBub3QgbXVjaCBpbnRlbGxpZ2VuY2UgaW4gdGhlIHNwZWMKLSBgZnJlZV9wYXJraW5nLnlhbWxgOiBhcHBlYXJzCgpgYGB7ciBSZWR1Y3Rpb25zIHBhcnQgMn0KIyBuZWVkIHRvIGNoZWNrIHdoYXQgY2hvaWNlcyB0aG9zZSB3aXRoIGZyZWUgcGFya2luZyBtYWtlIGluIHJlZ2FyZHMgdG8gcGFya2luZyBsb2NhdGlvbnMKc3VtbWFyeV9kZiA8LSB0cmlwc19kZiAlPiUKICBzZWxlY3QodHJpcF9pZCwgcGVyc29uX2lkLCBwdXJwb3NlLCBwYXJraW5nX3pvbmUsIGRlc3RpbmF0aW9uKSAlPiUKICBmaWx0ZXIocHVycG9zZSA9PSAid29yayIpICU+JSAKICBsZWZ0X2pvaW4oLiwgc2VsZWN0KHBlcnNvbl9kZiwgcGVyc29uX2lkLCBmcmVlX3BhcmtpbmdfYXRfd29yayksIGJ5ID0gYygicGVyc29uX2lkIikpICU+JQogIG11dGF0ZShwYXJraW5nX2Nob2ljZV9tYWRlID0gKHBhcmtpbmdfem9uZSA+IDApKSAlPiUKICBtdXRhdGUocGFya2luZ196b25lX2lzX2Rlc3RpbmF0aW9uID0gaWZfZWxzZShwYXJraW5nX3pvbmUgPT0gZGVzdGluYXRpb24sICJQYXJrZWQgYXQgRGVzdGluYXRpb24iLCAiUGFya2VkIGFuZCBXYWxrZWQgdG8gRGVzdGluYXRpb24iKSkgJT4lCiAgbXV0YXRlKHBhcmtpbmdfem9uZV9pc19kZXN0aW5hdGlvbiA9IGlmX2Vsc2UocGFya2luZ19jaG9pY2VfbWFkZSwgcGFya2luZ196b25lX2lzX2Rlc3RpbmF0aW9uLCAiTm8gUGFya2luZyBDaG9pY2UgTWFkZSIpKSAlPiUKICBtdXRhdGUoZnJlZV9wYXJraW5nX2F0X3dvcmsgPSBpZl9lbHNlKGZyZWVfcGFya2luZ19hdF93b3JrLCAiRnJlZSBQYXJraW5nIGF0IFdvcmsiLCAiTm90IEZyZWUgUGFya2luZyBhdCBXb3JrIikpICU+JQogIGdyb3VwX2J5KGZyZWVfcGFya2luZ19hdF93b3JrLCBwYXJraW5nX3pvbmVfaXNfZGVzdGluYXRpb24pICU+JQogIHN1bW1hcmlzZShjb3VudCA9IG4oKSwgLmdyb3VwcyA9ICJkcm9wIikgJT4lCiAgZ3JvdXBfYnkoZnJlZV9wYXJraW5nX2F0X3dvcmspICU+JQogIG11dGF0ZShzaGFyZSA9IGNvdW50L3N1bShjb3VudCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QoLWNvdW50KSAlPiUKICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gcGFya2luZ196b25lX2lzX2Rlc3RpbmF0aW9uLCB2YWx1ZXNfZnJvbSA9IHNoYXJlLCB2YWx1ZXNfZmlsbCA9IDAuMCkKCnN1bW1hcnlfZGYgJT4lCiAga2JsKCkgJT4lCiAga2FibGVfc3R5bGluZygpCiAgCgoKCmBgYAoKVGhlIHBhcmtpbmcgbG9jYXRpb24gY2hvaWNlIG1vZGVsIGRvZXMgbm90IGFwcGVhcmVkIHRvIGJlIGFwcGxpZWQgY29ycmVjdGx5LiBFbWFpbGVkIEpvZSBGLiBmb2xsb3ctdXAgcXVlc3Rpb24gb24gMTAvMjYuIAoKCg==
+ + + +
+ + + + + + + + + + + + + + + + diff --git a/utilities/sandag-activitysim/scripts/scripts.Rproj b/utilities/sandag-activitysim/scripts/scripts.Rproj new file mode 100644 index 00000000..8e3c2ebc --- /dev/null +++ b/utilities/sandag-activitysim/scripts/scripts.Rproj @@ -0,0 +1,13 @@ +Version: 1.0 + +RestoreWorkspace: Default +SaveWorkspace: Default +AlwaysSaveHistory: Default + +EnableCodeIndexing: Yes +UseSpacesForTab: Yes +NumSpacesForTab: 2 +Encoding: UTF-8 + +RnwWeave: Sweave +LaTeX: pdfLaTeX