Exporting trips to zonal matrices#

To support the Polaris demand to be assigned to networks using static traffic assignment available in commonly used modelling packages, Polaris-Studio has a convenient tool for exporting demand into a traditional demand matrix format

Exporting matrices#

sphinx_gallery_thumbnail_path = ‘../../examples/modelling_like_the_old_days/matrix.png’

from pathlib import Path

import pandas as pd

from polaris.analyze.activity_metrics import ActivityMetrics
from polaris.analyze.trip_metrics import TripMetrics
from polaris.runs.convergence.convergence_iteration import ConvergenceIteration

We get the demand matrices for two separate iterations#

project_dir = Path("/tmp/Bloomington")

iteration_3 = ConvergenceIteration.from_dir(project_dir / "Bloomington_iteration_3")
tm3 = TripMetrics(Path("/tmp/Bloomington/Bloomington-Supply.sqlite"), iteration_3.files.demand_db)
# Let's get the morning peak matrix
# Let's say that the peak time is from 6:45AM to 8:45AM, so we get trips starting during that time
mat3 = tm3.vehicle_trip_matrix(from_start_time=6.75 * 3600, to_start_time=8.75 * 3600)

iteration_4 = ConvergenceIteration.from_dir(project_dir / "Bloomington_iteration_4")
tm4 = TripMetrics(Path("/tmp/Bloomington/Bloomington-Supply.sqlite"), iteration_3.files.demand_db)
# Same for the 4th iteration
mat4 = tm4.vehicle_trip_matrix(from_start_time=6.75 * 3600, to_start_time=8.75 * 3600)

We can also look at matrices from PLANNED ACTIVITIES These matrices contain only trips by CAR

act_metr = ActivityMetrics(Path("/tmp/Bloomington/Bloomington-Supply.sqlite"), iteration_3.files.demand_db)
act_matr3 = act_metr.vehicle_trip_matrix(from_start_time=6.75 * 3600, to_start_time=8.75 * 3600)

We can export the matrices to OMX

mat3.export("/tmp/am_peak_iter3.omx")
mat4.export("/tmp/am_peak_iter4.omx")

Since we have the matrices in memory, we can compare the marginals for SOV trips at zone levels

# the names of matrices we have
print(mat4.names)

i3 = mat3.SOV_0.sum(axis=1)
i4 = mat4.SOV_0.sum(axis=1)

pd.DataFrame({"Iter 3": i3, "Iter 4": i4}).plot.scatter(x="Iter 3", y="Iter 4", title="Destinations")

i3 = mat3.SOV_0.sum(axis=0)
i4 = mat4.SOV_0.sum(axis=0)

pd.DataFrame({"Iter 3": i3, "Iter 4": i4}).plot.scatter(x="Iter 3", y="Iter 4", title="Origins")
  • Destinations
  • Origins
['SOV_0', 'TAXI_9']

<Axes: title={'center': 'Origins'}, xlabel='Iter 3', ylabel='Iter 4'>

Total running time of the script: (0 minutes 1.813 seconds)

Gallery generated by Sphinx-Gallery