[graph]
edge_list = [
{ input_file = "walk/edges-compass.csv.gz" },
{ input_file = "bike/edges-compass.csv.gz" },
{ input_file = "drive/edges-compass.csv.gz" },
]
vertex_list_input_file = "vertices-compass.csv.gz"
[mapping]
type = "edge"
geometry = [
{ type = "from_linestrings", geometry_input_file = "walk/edges-geometries-enumerated.txt.gz" },
{ type = "from_linestrings", geometry_input_file = "bike/edges-geometries-enumerated.txt.gz" },
{ type = "from_linestrings", geometry_input_file = "drive/edges-geometries-enumerated.txt.gz" },
]
tolerance.distance = 0.531414010
tolerance.unit = "kilometers"
queries_without_destinations = true
matching_type = ["point"]
[algorithm]
type = "a*"
termination_behavior = "allow_tree_termination"
[termination]
type = "solution_size"
limit = 1_000_000
[cost]
weights.trip_time = 1.0
vehicle_rates.trip_time.type = "raw"
[[search]]
traversal.type = "combined"
traversal.models = [
{ type = "distance", distance_unit = "miles" },
{ type = "fixed_speed", name = "walk", speed = 5.0, speed_unit = "kph" },
{ type = "time", time_unit = "minutes" },
{ type = "multimodal", this_mode = "walk", available_modes = ["walk", "bike", "drive"] }
]
constraint.type = "combined"
constraint.models = [
{ type = "multimodal", this_mode = "walk", available_modes = ["walk", "bike", "drive"] }
]
[[search]]
traversal.type = "combined"
traversal.models = [
{ type = "distance", distance_unit = "miles" },
{ type = "fixed_speed", name = "bike", speed = 16.0, speed_unit = "kph" },
{ type = "time", time_unit = "minutes" },
{ type = "multimodal", this_mode = "bike", available_modes = ["walk", "bike", "drive"] }
]
constraint.type = "combined"
constraint.models = [
{ type = "multimodal", this_mode = "bike", available_modes = ["walk", "bike", "drive"] }
]
[[search]]
traversal.type = "combined"
traversal.models = [
{ type = "distance", distance_unit = "miles" },
{ type = "speed", speed_unit = "mph", speed_table_input_file = "drive/edges-speeds-mph-enumerated.txt.gz" },
{ type = "time", time_unit = "minutes" },
{ type = "multimodal", this_mode = "drive", available_modes = ["walk", "bike", "drive"] }
]
constraint.type = "combined"
constraint.models = [
{ type = "multimodal", this_mode = "drive", available_modes = ["walk", "bike", "drive"] }
]
[[plugin.input_plugins]]
type = "grid"
extent_format = "wkt"
grid = { type = "h3", resolution = 8 }
[plugin.input_plugins.population_source]
type = "acs"
acs_type = "five_year"
acs_year = 2022
acs_resolution = "census_tract"
acs_categories = ["B01001_001E"]
[[plugin.input_plugins]]
type = "inject"
format = "key_value"
write_mode = "overwrite"
key = "grid_search"
[[plugin.input_plugins.value._modes]]
trip_mode = "walk"
constraints = [
{ type = "time_limit", limit = 40.0, unit = "minutes" },
{ type = "allowed_modes", values = ["walk"]}
]
max_trip_legs = 1
[[plugin.input_plugins.value._modes]]
trip_mode = "bike"
constraints = [
{ type = "time_limit", limit = 40.0, unit = "minutes" },
{ type = "mode_time_limit", values = { walk = { limit = 10.0, unit = "minutes" }}},
{ type = "allowed_modes", values = ["walk", "bike"]}
]
max_trip_legs = 3
[[plugin.input_plugins.value._modes]]
trip_mode = "drive"
constraints = [
{ type = "time_limit", limit = 40.0, unit = "minutes" },
{ type = "mode_leg_distance_limit", values.walk = { leg.type = "first", constraint = { limit = 0.5, unit = "miles" }}},
{ type = "mode_leg_distance_limit", values.walk = { leg.type = "last", constraint = { limit = 0.5, unit = "miles" }}},
{ type = "allowed_modes", values = ["walk", "drive"]}
]
max_trip_legs = 3
[[plugin.input_plugins]]
type = "inject"
format = "key_value"
write_mode = "overwrite"
key = "max_trip_legs"
value = 3
[[plugin.input_plugins]]
type = "grid_search"
[[plugin.output_plugins]]
type = "traversal"
[[plugin.output_plugins]]
type = "summary"
[[plugin.output_plugins]]
type = "bambam"
format = "aggregate"
binning = { type = "time", feature = "trip_time", values = [10,20,30,40], unit = "minutes" }
geometry_model = { type = "destination_point" }
isochrone_algorithm = { type = "k_nearest_concave_hull", k = 3 }
isochrone_format = "wkb"
[[plugin.output_plugins]]
type = "isochrone"
[[plugin.output_plugins]]
type = "opportunity"
[plugin.output_plugins.model]
type = "combined"
[[plugin.output_plugins.model.models]]
type = "api"
vertex_input_file = "vertices-compass.csv.gz"
activity_column_names = ["entertainment", "food", "retail", "healthcare", "services", "jobs"]
table_orientation = "destination_vertex_oriented"
[plugin.output_plugins.model.models.opportunity_source]
type = "lodes"
study_region = { type = "census", geoids = [
"08001",
"08005",
"08013",
"08014",
"08031",
"08035",
"08039",
"08059",
"08123",
] }
data_granularity = "census_tract"
edition = "LODES8"
job_type = "JT00"
segment = "S000"
year = 2022
[plugin.output_plugins.model.models.opportunity_source.activity_mapping]
CNS01 = ["jobs"]
CNS02 = ["jobs"]
CNS03 = ["jobs"]
CNS04 = ["jobs"]
CNS05 = ["jobs"]
CNS06 = ["jobs"]
CNS07 = ["jobs", "retail"]
CNS08 = ["jobs"]
CNS09 = ["jobs"]
CNS10 = ["jobs"]
CNS11 = ["jobs"]
CNS12 = ["jobs", "services"]
CNS13 = ["jobs"]
CNS14 = ["jobs"]
CNS15 = ["jobs"]
CNS16 = ["jobs", "healthcare"]
CNS17 = ["jobs", "entertainment"]
CNS18 = ["jobs", "food"]
CNS19 = ["jobs"]
CNS20 = ["jobs"]
[system]
parallelism = 8
response_persistence_policy = "persist_response_in_memory"
[system.response_output_policy]
type = "combined"
[[system.response_output_policy.policies]]
type = "file"
filename = "result.json"
[system.response_output_policy.policies.format]
type = "json"
newline_delimited = false
[[system.response_output_policy.policies]]
type = "file"
filename = "result.csv"
[system.response_output_policy.policies.format]
type = "csv"
sorted = true
[system.response_output_policy.policies.format.mapping]
grid_id = "request.grid_id"
lon = "request.origin_x"
lat = "request.origin_y"
mode = "request.trip_mode"
runtime = "search_runtime"
tree_size = "tree_size_count"
error = { optional = "error" }
opps_entertainment_total = "opportunity_totals.entertainment"
opps_retail_total = "opportunity_totals.retail"
opps_healthcare_total = "opportunity_totals.healthcare"
opps_services_total = "opportunity_totals.services"
opps_food_total = "opportunity_totals.food"
opps_jobs_total = "opportunity_totals.jobs"
opps_count_10 = "aggregate_opportunities.10.n_destinations"
opps_count_20 = "aggregate_opportunities.20.n_destinations"
opps_count_30 = "aggregate_opportunities.30.n_destinations"
opps_count_40 = "aggregate_opportunities.40.n_destinations"
opps_entertainment_10 = "aggregate_opportunities.10.opportunities.entertainment"
opps_retail_10 = "aggregate_opportunities.10.opportunities.retail"
opps_healthcare_10 = "aggregate_opportunities.10.opportunities.healthcare"
opps_services_10 = "aggregate_opportunities.10.opportunities.services"
opps_food_10 = "aggregate_opportunities.10.opportunities.food"
opps_jobs_10 = "aggregate_opportunities.10.opportunities.jobs"
opps_entertainment_20 = "aggregate_opportunities.20.opportunities.entertainment"
opps_retail_20 = "aggregate_opportunities.20.opportunities.retail"
opps_healthcare_20 = "aggregate_opportunities.20.opportunities.healthcare"
opps_services_20 = "aggregate_opportunities.20.opportunities.services"
opps_food_20 = "aggregate_opportunities.20.opportunities.food"
opps_jobs_20 = "aggregate_opportunities.20.opportunities.jobs"
opps_entertainment_30 = "aggregate_opportunities.30.opportunities.entertainment"
opps_retail_30 = "aggregate_opportunities.30.opportunities.retail"
opps_healthcare_30 = "aggregate_opportunities.30.opportunities.healthcare"
opps_services_30 = "aggregate_opportunities.30.opportunities.services"
opps_food_30 = "aggregate_opportunities.30.opportunities.food"
opps_jobs_30 = "aggregate_opportunities.30.opportunities.jobs"
opps_entertainment_40 = "aggregate_opportunities.40.opportunities.entertainment"
opps_retail_40 = "aggregate_opportunities.40.opportunities.retail"
opps_healthcare_40 = "aggregate_opportunities.40.opportunities.healthcare"
opps_services_40 = "aggregate_opportunities.40.opportunities.services"
opps_food_40 = "aggregate_opportunities.40.opportunities.food"
opps_jobs_40 = "aggregate_opportunities.40.opportunities.jobs"
isochrone_10 = "aggregate_opportunities.10.isochrone"
isochrone_20 = "aggregate_opportunities.20.isochrone"
isochrone_30 = "aggregate_opportunities.30.isochrone"
isochrone_40 = "aggregate_opportunities.40.isochrone"