Forecasting#

In this example, we present a full forecasting workflow for the Sioux Falls example model.

We start creating the skim matrices, running the assignment for the base-year, and then distributing these trips into the network. Later, we estimate a set of future demand vectors which are going to be the input of a future year assignnment with select link analysis.

# Imports
from uuid import uuid4
from os.path import join
from tempfile import gettempdir

import pandas as pd

from aequilibrae.utils.create_example import create_example
# We create the example project inside our temp folder
fldr = join(gettempdir(), uuid4().hex)

project = create_example(fldr)
logger = project.logger

Traffic assignment with skimming#

In this step, we’ll set the skims for the variable free_flow_time, and execute the traffic assignment for the base-year.

from aequilibrae.paths import TrafficAssignment, TrafficClass
# We build all graphs
project.network.build_graphs()
# We get warnings that several fields in the project are filled with NaNs.
# This is true, but we won't use those fields.

# We grab the graph for cars
graph = project.network.graphs["c"]

# Let's say we want to minimize the free_flow_time
graph.set_graph("free_flow_time")

# And will skim time and distance while we are at it
graph.set_skimming(["free_flow_time", "distance"])

# And we will allow paths to be computed going through other centroids/centroid connectors
# required for the Sioux Falls network, as all nodes are centroids
graph.set_blocked_centroid_flows(False)

Let’s get the demand matrix directly from the project record, and inspect what matrices we have in the project.

proj_matrices = project.matrices
proj_matrices.list()
name file_name cores procedure procedure_id timestamp description status
0 demand_omx demand.omx 1 None None 2020-11-24 08:47:18 Original data imported to OMX format
1 demand_mc demand_mc.omx 3 None None 2021-02-24 00:51:35 NaN
2 skims skims.omx 2 None None NaN Example skim
3 demand_aem demand.aem 1 None None 2020-11-24 08:46:42 Original data imported to AEM format


We get the demand matrix, and prepare it for computation

demand = proj_matrices.get_matrix("demand_omx")
demand.computational_view(["matrix"])

Let’s perform the traffic assignment

# Create the assignment class
assigclass = TrafficClass(name="car", graph=graph, matrix=demand)

assig = TrafficAssignment()

# We start by adding the list of traffic classes to be assigned
assig.add_class(assigclass)

# Then we set these parameters, which an only be configured after adding one class to the assignment
assig.set_vdf("BPR")  # This is not case-sensitive

# Then we set the volume delay function and its parameters
assig.set_vdf_parameters({"alpha": "b", "beta": "power"})

# The capacity and free flow travel times as they exist in the graph
assig.set_capacity_field("capacity")
assig.set_time_field("free_flow_time")

# And the algorithm we want to use to assign
assig.set_algorithm("bfw")

# Since we haven't checked the parameters file, let's make sure convergence criteria is good
assig.max_iter = 1000
assig.rgap_target = 0.001

# we then execute the assignment
assig.execute()
car                                               :   0%|          | 0/24 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 1/1000 [00:00<00:00, 42366.71it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 1/1000 [00:00<00:00, 9489.38it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 1/1000 - RGap: inf:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 2/1000 [00:00<00:26, 37.10it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 2/1000 [00:00<00:26, 37.05it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 2/1000 [00:00<00:26, 37.00it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 2/1000 - RGap: 0.852989:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 3/1000 [00:00<00:10, 91.36it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 3/1000 [00:00<00:10, 91.15it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 3/1000 [00:00<00:10, 90.95it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 3/1000 - RGap: 0.478664:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   0%|          | 4/1000 [00:00<00:06, 142.69it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 4/1000 [00:00<00:07, 142.28it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 4/1000 [00:00<00:07, 134.98it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 4/1000 - RGap: 0.240469:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 4/1000 - RGap: 0.240469:   0%|          | 5/1000 [00:00<00:32, 30.54it/s]
Equilibrium Assignment                            :   0%|          | 5/1000 [00:00<00:32, 30.54it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 5/1000 [00:00<00:32, 30.54it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 5/1000 [00:00<00:32, 30.54it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 5/1000 - RGap: 0.156466:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 5/1000 - RGap: 0.156466:   1%|          | 6/1000 [00:00<00:18, 53.22it/s]
Equilibrium Assignment                            :   1%|          | 6/1000 [00:00<00:18, 53.22it/s]
All-or-Nothing - Traffic Class: car               :   1%|          | 6/1000 [00:00<00:18, 53.22it/s]
All-or-Nothing - Traffic Class: car               :   1%|          | 6/1000 [00:00<00:18, 53.22it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 6/1000 - RGap: 0.119963:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 6/1000 - RGap: 0.119963:   1%|          | 7/1000 [00:00<00:17, 57.49it/s]
Equilibrium Assignment                            :   1%|          | 7/1000 [00:00<00:17, 57.49it/s]
All-or-Nothing - Traffic Class: car               :   1%|          | 7/1000 [00:00<00:17, 57.49it/s]
All-or-Nothing - Traffic Class: car               :   1%|          | 7/1000 [00:00<00:17, 57.49it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 7/1000 - RGap: 0.0747566:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 7/1000 - RGap: 0.0747566:   1%|          | 8/1000 [00:00<00:14, 67.36it/s]
Equilibrium Assignment                            :   1%|          | 8/1000 [00:00<00:14, 67.36it/s]
All-or-Nothing - Traffic Class: car               :   1%|          | 8/1000 [00:00<00:14, 67.36it/s]
All-or-Nothing - Traffic Class: car               :   1%|          | 8/1000 [00:00<00:14, 67.36it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 8/1000 - RGap: 0.105012:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 8/1000 - RGap: 0.105012:   1%|          | 9/1000 [00:00<00:18, 53.38it/s]
Equilibrium Assignment                            :   1%|          | 9/1000 [00:00<00:18, 53.38it/s]
All-or-Nothing - Traffic Class: car               :   1%|          | 9/1000 [00:00<00:18, 53.38it/s]
All-or-Nothing - Traffic Class: car               :   1%|          | 9/1000 [00:00<00:18, 53.38it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 9/1000 - RGap: 0.0818315:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 9/1000 - RGap: 0.0818315:   1%|          | 10/1000 [00:00<00:10, 94.29it/s]
Equilibrium Assignment                            :   1%|          | 10/1000 [00:00<00:10, 94.29it/s]
All-or-Nothing - Traffic Class: car               :   1%|          | 10/1000 [00:00<00:10, 94.29it/s]
All-or-Nothing - Traffic Class: car               :   1%|          | 10/1000 [00:00<00:10, 94.29it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 10/1000 - RGap: 0.062379:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   1%|          | 11/1000 [00:00<00:05, 187.03it/s]
All-or-Nothing - Traffic Class: car               :   1%|          | 11/1000 [00:00<00:05, 186.77it/s]
All-or-Nothing - Traffic Class: car               :   1%|          | 11/1000 [00:00<00:05, 186.55it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 11/1000 - RGap: 0.0487461:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   1%|          | 12/1000 [00:00<00:03, 295.16it/s]
All-or-Nothing - Traffic Class: car               :   1%|          | 12/1000 [00:00<00:03, 294.61it/s]
All-or-Nothing - Traffic Class: car               :   1%|          | 12/1000 [00:00<00:03, 294.10it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 12/1000 - RGap: 0.0427:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 12/1000 - RGap: 0.0427:   1%|▏         | 13/1000 [00:00<00:08, 111.49it/s]
Equilibrium Assignment                            :   1%|▏         | 13/1000 [00:00<00:08, 111.49it/s]
All-or-Nothing - Traffic Class: car               :   1%|▏         | 13/1000 [00:00<00:08, 111.49it/s]
All-or-Nothing - Traffic Class: car               :   1%|▏         | 13/1000 [00:00<00:08, 111.49it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 13/1000 - RGap: 0.0337744:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 13/1000 - RGap: 0.0337744:   1%|▏         | 14/1000 [00:00<00:08, 110.06it/s]
Equilibrium Assignment                            :   1%|▏         | 14/1000 [00:00<00:08, 110.06it/s]
All-or-Nothing - Traffic Class: car               :   1%|▏         | 14/1000 [00:00<00:08, 110.06it/s]
All-or-Nothing - Traffic Class: car               :   1%|▏         | 14/1000 [00:00<00:08, 110.06it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 14/1000 - RGap: 0.0260284:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   2%|▏         | 15/1000 [00:00<00:02, 406.54it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 15/1000 [00:00<00:02, 405.56it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 15/1000 [00:00<00:02, 404.71it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 15/1000 - RGap: 0.0193655:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   2%|▏         | 16/1000 [00:00<00:05, 190.33it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 16/1000 [00:00<00:05, 190.13it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 16/1000 [00:00<00:05, 189.96it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 16/1000 - RGap: 0.0201206:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 16/1000 - RGap: 0.0201206:   2%|▏         | 17/1000 [00:00<00:07, 138.39it/s]
Equilibrium Assignment                            :   2%|▏         | 17/1000 [00:00<00:07, 138.39it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 17/1000 [00:00<00:07, 138.39it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 17/1000 [00:00<00:07, 138.39it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 17/1000 - RGap: 0.0157873:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 17/1000 - RGap: 0.0157873:   2%|▏         | 18/1000 [00:00<00:06, 142.18it/s]
Equilibrium Assignment                            :   2%|▏         | 18/1000 [00:00<00:06, 142.18it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 18/1000 [00:00<00:06, 142.18it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 18/1000 [00:00<00:06, 142.18it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 18/1000 - RGap: 0.0119096:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 18/1000 - RGap: 0.0119096:   2%|▏         | 19/1000 [00:00<00:06, 161.39it/s]
Equilibrium Assignment                            :   2%|▏         | 19/1000 [00:00<00:06, 161.39it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 19/1000 [00:00<00:06, 161.39it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 19/1000 [00:00<00:06, 161.39it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 19/1000 - RGap: 0.0178277:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   2%|▏         | 20/1000 [00:00<00:03, 300.31it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 20/1000 [00:00<00:03, 299.90it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 20/1000 [00:00<00:03, 299.50it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 20/1000 - RGap: 0.0166676:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   2%|▏         | 21/1000 [00:00<00:02, 487.05it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 21/1000 [00:00<00:02, 486.06it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 21/1000 [00:00<00:02, 485.24it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 21/1000 - RGap: 0.0145824:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   2%|▏         | 22/1000 [00:00<00:02, 340.96it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 22/1000 [00:00<00:02, 340.33it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 22/1000 [00:00<00:02, 339.90it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 22/1000 - RGap: 0.00943687:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   2%|▏         | 23/1000 [00:00<00:00, 2127.63it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 23/1000 [00:00<00:00, 2111.98it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 23/1000 [00:00<00:00, 2097.47it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 23/1000 - RGap: 0.00966808:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 23/1000 - RGap: 0.00966808:   2%|▏         | 24/1000 [00:00<00:05, 178.37it/s]
Equilibrium Assignment                            :   2%|▏         | 24/1000 [00:00<00:05, 178.37it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 24/1000 [00:00<00:05, 178.37it/s]
All-or-Nothing - Traffic Class: car               :   2%|▏         | 24/1000 [00:00<00:05, 178.37it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 24/1000 - RGap: 0.0125165:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   2%|▎         | 25/1000 [00:00<00:01, 790.00it/s]
All-or-Nothing - Traffic Class: car               :   2%|▎         | 25/1000 [00:00<00:01, 787.96it/s]
All-or-Nothing - Traffic Class: car               :   2%|▎         | 25/1000 [00:00<00:01, 786.04it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 25/1000 - RGap: 0.00922739:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   3%|▎         | 26/1000 [00:00<00:01, 547.63it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 26/1000 [00:00<00:01, 546.55it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 26/1000 [00:00<00:01, 545.35it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 26/1000 - RGap: 0.00860861:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   3%|▎         | 27/1000 [00:00<00:01, 612.86it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 27/1000 [00:00<00:01, 611.59it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 27/1000 [00:00<00:01, 610.51it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 27/1000 - RGap: 0.00597931:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   3%|▎         | 28/1000 [00:00<00:02, 372.19it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 28/1000 [00:00<00:02, 371.61it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 28/1000 [00:00<00:02, 371.19it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 28/1000 - RGap: 0.00688209:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   3%|▎         | 29/1000 [00:00<00:00, 1567.46it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 29/1000 [00:00<00:00, 1558.98it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 29/1000 [00:00<00:00, 1552.51it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 29/1000 - RGap: 0.00461933:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   3%|▎         | 30/1000 [00:00<00:01, 537.61it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 30/1000 [00:00<00:01, 536.78it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 30/1000 [00:00<00:01, 536.06it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 30/1000 - RGap: 0.00538567:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   3%|▎         | 31/1000 [00:00<00:02, 360.75it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 31/1000 [00:00<00:02, 360.40it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 31/1000 [00:00<00:02, 360.09it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 31/1000 - RGap: 0.00526572:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   3%|▎         | 32/1000 [00:00<00:00, 1114.77it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 32/1000 [00:00<00:00, 1111.73it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 32/1000 [00:00<00:00, 1108.83it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 32/1000 - RGap: 0.00469941:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 32/1000 - RGap: 0.00469941:   3%|▎         | 33/1000 [00:00<00:03, 270.84it/s]
Equilibrium Assignment                            :   3%|▎         | 33/1000 [00:00<00:03, 270.84it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 33/1000 [00:00<00:03, 270.84it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 33/1000 [00:00<00:03, 270.84it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 33/1000 - RGap: 0.0042486:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 33/1000 - RGap: 0.0042486:   3%|▎         | 34/1000 [00:00<00:03, 283.64it/s]
Equilibrium Assignment                            :   3%|▎         | 34/1000 [00:00<00:03, 283.64it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 34/1000 [00:00<00:03, 283.64it/s]
All-or-Nothing - Traffic Class: car               :   3%|▎         | 34/1000 [00:00<00:03, 283.64it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 34/1000 - RGap: 0.00344913:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   4%|▎         | 35/1000 [00:00<00:01, 534.58it/s]
All-or-Nothing - Traffic Class: car               :   4%|▎         | 35/1000 [00:00<00:01, 533.89it/s]
All-or-Nothing - Traffic Class: car               :   4%|▎         | 35/1000 [00:00<00:01, 533.31it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 35/1000 - RGap: 0.00381805:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   4%|▎         | 36/1000 [00:00<00:00, 1061.80it/s]
All-or-Nothing - Traffic Class: car               :   4%|▎         | 36/1000 [00:00<00:00, 1059.20it/s]
All-or-Nothing - Traffic Class: car               :   4%|▎         | 36/1000 [00:00<00:00, 1056.85it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 36/1000 - RGap: 0.00322043:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   4%|▎         | 37/1000 [00:00<00:01, 546.75it/s]
All-or-Nothing - Traffic Class: car               :   4%|▎         | 37/1000 [00:00<00:01, 546.12it/s]
All-or-Nothing - Traffic Class: car               :   4%|▎         | 37/1000 [00:00<00:01, 545.52it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 37/1000 - RGap: 0.00258447:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   4%|▍         | 38/1000 [00:00<00:00, 1194.15it/s]
All-or-Nothing - Traffic Class: car               :   4%|▍         | 38/1000 [00:00<00:00, 1191.00it/s]
All-or-Nothing - Traffic Class: car               :   4%|▍         | 38/1000 [00:00<00:00, 1188.19it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 38/1000 - RGap: 0.00271786:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   4%|▍         | 39/1000 [00:00<00:00, 2039.47it/s]
All-or-Nothing - Traffic Class: car               :   4%|▍         | 39/1000 [00:00<00:00, 2027.59it/s]
All-or-Nothing - Traffic Class: car               :   4%|▍         | 39/1000 [00:00<00:00, 2019.40it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 39/1000 - RGap: 0.00266628:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   4%|▍         | 40/1000 [00:00<00:00, 1840.84it/s]
All-or-Nothing - Traffic Class: car               :   4%|▍         | 40/1000 [00:00<00:00, 1763.35it/s]
All-or-Nothing - Traffic Class: car               :   4%|▍         | 40/1000 [00:00<00:00, 1753.29it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 40/1000 - RGap: 0.00233865:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   4%|▍         | 41/1000 [00:00<00:01, 491.10it/s]
All-or-Nothing - Traffic Class: car               :   4%|▍         | 41/1000 [00:00<00:01, 490.63it/s]
All-or-Nothing - Traffic Class: car               :   4%|▍         | 41/1000 [00:00<00:01, 490.09it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 41/1000 - RGap: 0.00187372:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   4%|▍         | 42/1000 [00:00<00:01, 521.67it/s]
All-or-Nothing - Traffic Class: car               :   4%|▍         | 42/1000 [00:00<00:01, 521.10it/s]
All-or-Nothing - Traffic Class: car               :   4%|▍         | 42/1000 [00:00<00:01, 520.61it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 42/1000 - RGap: 0.00194087:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   4%|▍         | 43/1000 [00:00<00:01, 676.70it/s]
All-or-Nothing - Traffic Class: car               :   4%|▍         | 43/1000 [00:00<00:01, 675.48it/s]
All-or-Nothing - Traffic Class: car               :   4%|▍         | 43/1000 [00:00<00:01, 674.38it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 43/1000 - RGap: 0.00211112:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   4%|▍         | 44/1000 [00:00<00:01, 519.23it/s]
All-or-Nothing - Traffic Class: car               :   4%|▍         | 44/1000 [00:00<00:01, 518.50it/s]
All-or-Nothing - Traffic Class: car               :   4%|▍         | 44/1000 [00:00<00:01, 517.85it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 44/1000 - RGap: 0.00161117:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   4%|▍         | 45/1000 [00:00<00:00, 5048.65it/s]
All-or-Nothing - Traffic Class: car               :   4%|▍         | 45/1000 [00:00<00:00, 4993.75it/s]
All-or-Nothing - Traffic Class: car               :   4%|▍         | 45/1000 [00:00<00:00, 4949.36it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 45/1000 - RGap: 0.00197991:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 45/1000 - RGap: 0.00197991:   5%|▍         | 46/1000 [00:00<00:02, 422.90it/s]
Equilibrium Assignment                            :   5%|▍         | 46/1000 [00:00<00:02, 422.90it/s]
All-or-Nothing - Traffic Class: car               :   5%|▍         | 46/1000 [00:00<00:02, 422.90it/s]
All-or-Nothing - Traffic Class: car               :   5%|▍         | 46/1000 [00:00<00:02, 422.90it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 46/1000 - RGap: 0.00205963:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   5%|▍         | 47/1000 [00:00<00:00, 3679.21it/s]
All-or-Nothing - Traffic Class: car               :   5%|▍         | 47/1000 [00:00<00:00, 3655.88it/s]
All-or-Nothing - Traffic Class: car               :   5%|▍         | 47/1000 [00:00<00:00, 3634.04it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 47/1000 - RGap: 0.00216574:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   5%|▍         | 48/1000 [00:00<00:01, 905.02it/s]
All-or-Nothing - Traffic Class: car               :   5%|▍         | 48/1000 [00:00<00:01, 903.62it/s]
All-or-Nothing - Traffic Class: car               :   5%|▍         | 48/1000 [00:00<00:01, 902.36it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 48/1000 - RGap: 0.00186995:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   5%|▍         | 49/1000 [00:00<00:00, 3596.73it/s]
All-or-Nothing - Traffic Class: car               :   5%|▍         | 49/1000 [00:00<00:00, 3575.02it/s]
All-or-Nothing - Traffic Class: car               :   5%|▍         | 49/1000 [00:00<00:00, 3555.48it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 49/1000 - RGap: 0.00164329:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   5%|▌         | 50/1000 [00:00<00:01, 740.16it/s]
All-or-Nothing - Traffic Class: car               :   5%|▌         | 50/1000 [00:00<00:01, 739.30it/s]
All-or-Nothing - Traffic Class: car               :   5%|▌         | 50/1000 [00:00<00:01, 738.49it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 50/1000 - RGap: 0.00147962:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   5%|▌         | 51/1000 [00:00<00:01, 543.99it/s]
All-or-Nothing - Traffic Class: car               :   5%|▌         | 51/1000 [00:00<00:01, 543.49it/s]
All-or-Nothing - Traffic Class: car               :   5%|▌         | 51/1000 [00:00<00:01, 543.03it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 51/1000 - RGap: 0.00167956:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   5%|▌         | 52/1000 [00:00<00:01, 842.86it/s]
All-or-Nothing - Traffic Class: car               :   5%|▌         | 52/1000 [00:00<00:01, 841.68it/s]
All-or-Nothing - Traffic Class: car               :   5%|▌         | 52/1000 [00:00<00:01, 840.61it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 52/1000 - RGap: 0.00177454:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   5%|▌         | 53/1000 [00:00<00:00, 6641.71it/s]
All-or-Nothing - Traffic Class: car               :   5%|▌         | 53/1000 [00:00<00:00, 6574.53it/s]
All-or-Nothing - Traffic Class: car               :   5%|▌         | 53/1000 [00:00<00:00, 6513.47it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 53/1000 - RGap: 0.00140168:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   5%|▌         | 54/1000 [00:00<00:00, 1868.43it/s]
All-or-Nothing - Traffic Class: car               :   5%|▌         | 54/1000 [00:00<00:00, 1863.12it/s]
All-or-Nothing - Traffic Class: car               :   5%|▌         | 54/1000 [00:00<00:00, 1858.23it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 54/1000 - RGap: 0.00139728:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   6%|▌         | 55/1000 [00:00<00:00, 2629.00it/s]
All-or-Nothing - Traffic Class: car               :   6%|▌         | 55/1000 [00:00<00:00, 2618.79it/s]
All-or-Nothing - Traffic Class: car               :   6%|▌         | 55/1000 [00:00<00:00, 2609.37it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 55/1000 - RGap: 0.00122577:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   6%|▌         | 56/1000 [00:00<00:00, 3242.91it/s]
All-or-Nothing - Traffic Class: car               :   6%|▌         | 56/1000 [00:00<00:00, 3227.81it/s]
All-or-Nothing - Traffic Class: car               :   6%|▌         | 56/1000 [00:00<00:00, 3214.20it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 56/1000 - RGap: 0.00150772:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 56/1000 - RGap: 0.00150772:   6%|▌         | 57/1000 [00:00<00:01, 509.63it/s]
Equilibrium Assignment                            :   6%|▌         | 57/1000 [00:00<00:01, 509.63it/s]
All-or-Nothing - Traffic Class: car               :   6%|▌         | 57/1000 [00:00<00:01, 509.63it/s]
All-or-Nothing - Traffic Class: car               :   6%|▌         | 57/1000 [00:00<00:01, 509.63it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 57/1000 - RGap: 0.00106111:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   6%|▌         | 58/1000 [00:00<00:00, 1199.66it/s]
All-or-Nothing - Traffic Class: car               :   6%|▌         | 58/1000 [00:00<00:00, 1197.55it/s]
All-or-Nothing - Traffic Class: car               :   6%|▌         | 58/1000 [00:00<00:00, 1194.73it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 58/1000 - RGap: 0.00107087:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   6%|▌         | 59/1000 [00:00<00:00, 1767.22it/s]
All-or-Nothing - Traffic Class: car               :   6%|▌         | 59/1000 [00:00<00:00, 1762.99it/s]
All-or-Nothing - Traffic Class: car               :   6%|▌         | 59/1000 [00:00<00:00, 1758.98it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment - Iteration: 59/1000 - RGap: 0.00118409:   0%|          | 0/1000 [00:00<?, ?it/s]
Equilibrium Assignment                            :   6%|▌         | 60/1000 [00:00<00:01, 614.69it/s]
All-or-Nothing - Traffic Class: car               :   6%|▌         | 60/1000 [00:00<00:01, 614.19it/s]
All-or-Nothing - Traffic Class: car               :   6%|▌         | 60/1000 [00:00<00:01, 613.71it/s]
All-or-Nothing - Traffic Class: car               :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 0/24 :   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 10/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 20/24:   0%|          | 0/1000 [00:00<?, ?it/s]
All-or-Nothing - Traffic Class: car - Zones: 24/24:   0%|          | 0/1000 [00:00<?, ?it/s]

After finishing the assignment, we can easily see the convergence report.

convergence_report = assig.report()
convergence_report.head()
iteration time rgap alpha warnings beta0 beta1 beta2
0 1 0.063431 inf 1.000000 1.000000 0.000000 0.000000
1 2 0.096475 0.852989 0.339547 1.000000 0.000000 0.000000
2 3 0.124720 0.478664 0.177207 1.000000 0.000000 0.000000
3 4 0.290100 0.240469 0.234962 1.000000 0.000000 0.000000
4 5 0.403141 0.156466 0.447214 0.605334 0.378501 0.016164


And we can also see the results of the assignment

results = assig.results()
results.head()
matrix_ab matrix_ba matrix_tot Preload_AB Preload_BA Preload_tot Congested_Time_AB Congested_Time_BA Congested_Time_Max Delay_factor_AB Delay_factor_BA Delay_factor_Max VOC_AB VOC_BA VOC_max PCE_AB PCE_BA PCE_tot
link_id
1 4567.230095 0.0 4567.230095 0.0 0.0 0.0 6.000870 0.0 6.000870 1.000145 0.0 1.000145 0.176340 0.0 0.176340 4567.230095 0.0 4567.230095
2 8174.162682 0.0 8174.162682 0.0 0.0 0.0 4.008929 0.0 4.008929 1.002232 0.0 1.002232 0.349271 0.0 0.349271 8174.162682 0.0 8174.162682
3 4574.375228 0.0 4574.375228 0.0 0.0 0.0 6.000876 0.0 6.000876 1.000146 0.0 1.000146 0.176615 0.0 0.176615 4574.375228 0.0 4574.375228
4 5987.496471 0.0 5987.496471 0.0 0.0 0.0 6.594971 0.0 6.594971 1.318994 0.0 1.318994 1.207599 0.0 1.207599 5987.496471 0.0 5987.496471
5 8167.017550 0.0 8167.017550 0.0 0.0 0.0 4.008898 0.0 4.008898 1.002224 0.0 1.002224 0.348966 0.0 0.348966 8167.017550 0.0 8167.017550


We can export our results to CSV or get a Pandas DataFrame, but let’s put it directly into the results database

assig.save_results("base_year_assignment")

And save the skims

assig.save_skims("base_year_assignment_skims", which_ones="all", format="omx")

Trip distribution#

First, let’s have a function to plot the Trip Length Frequency Distribution.

from math import log10, floor
import matplotlib.pyplot as plt
def plot_tlfd(demand, skim, name):
    plt.clf()
    b = floor(log10(skim.shape[0]) * 10)
    n, bins, patches = plt.hist(
        np.nan_to_num(skim.flatten(), 0),
        bins=b,
        weights=np.nan_to_num(demand.flatten()),
        density=False,
        facecolor="g",
        alpha=0.75,
    )

    plt.xlabel("Trip length")
    plt.ylabel("Probability")
    plt.title(f"Trip-length frequency distribution for {name}")
    return plt

Calibration#

We will calibrate synthetic gravity models using the skims for free_flow_time that we just generated

import numpy as np
from aequilibrae.distribution import GravityCalibration

We need the demand matrix and to prepare it for computation

demand = proj_matrices.get_matrix("demand_omx")
demand.computational_view(["matrix"])

We also need the skims we just saved into our project

imped = proj_matrices.get_matrix("base_year_assignment_skims_car")

# We can check which matrix cores were created for our skims to decide which one to use
imped.names
['distance_blended', 'distance_final', 'free_flow_time_blended', 'free_flow_time_final']

Where free_flow_time_final is actually the congested time for the last iteration

But before using the data, let’s get some impedance for the intrazonals. Let’s assume it is 75% of the closest zone.

imped_core = "free_flow_time_final"
imped.computational_view([imped_core])

# If we run the code below more than once, we will be overwriting the diagonal values with non-sensical data
# so let's zero it first
np.fill_diagonal(imped.matrix_view, 0)

# We compute it with a little bit of NumPy magic
intrazonals = np.amin(imped.matrix_view, where=imped.matrix_view > 0, initial=imped.matrix_view.max(), axis=1)
intrazonals *= 0.75

# Then we fill in the impedance matrix
np.fill_diagonal(imped.matrix_view, intrazonals)

Since we are working with an OMX file, we cannot overwrite a matrix on disk. So let’s give it a new name to save.

imped.save(names=["final_time_with_intrazonals"])

This also updates these new matrices as those being used for computation

imped.view_names
['final_time_with_intrazonals']

Let’s calibrate our Gravity Model

for function in ["power", "expo"]:
    gc = GravityCalibration(matrix=demand, impedance=imped, function=function, nan_as_zero=True)
    gc.calibrate()
    model = gc.model
    # We save the model
    model.save(join(fldr, f"{function}_model.mod"))

    _ = plot_tlfd(gc.result_matrix.matrix_view, imped.matrix_view, f"{function} model")

    # We can save the result of applying the model as well
    # We can also save the calibration report
    with open(join(fldr, f"{function}_convergence.log"), "w") as otp:
        for r in gc.report:
            otp.write(r + "\n")
Trip-length frequency distribution for expo model

And let’s plot a trip length frequency distribution for the demand itself

plt = plot_tlfd(demand.matrix_view, imped.matrix_view, "demand")
plt.show()
Trip-length frequency distribution for demand

Forecast#

We create a set of ‘future’ vectors using some random growth factors. We apply the model for inverse power, as the trip frequency length distribution (TFLD) seems to be a better fit for the actual one.

from aequilibrae.distribution import Ipf, GravityApplication, SyntheticGravityModel

Compute future vectors#

First thing to do is to compute the future vectors from our matrix.

origins = np.sum(demand.matrix_view, axis=1)
destinations = np.sum(demand.matrix_view, axis=0)

# Then grow them with some random growth between 0 and 10%, and balance them
orig = origins * (1 + np.random.rand(origins.shape[0]) / 10)
dest = destinations * (1 + np.random.rand(origins.shape[0]) / 10)
dest *= orig.sum() / dest.sum()

vectors = pd.DataFrame({"origins":orig, "destinations":dest}, index=demand.index[:])

IPF for the future vectors#

Let’s balance the future vectors. The output of this step is going to be used later in the traffic assignment for future year.

args = {
    "matrix": demand,
    "vectors": vectors,
    "column_field": "destinations",
    "row_field": "origins",
    "nan_as_zero": True,
}

ipf = Ipf(**args)
ipf.fit()

When saving our vector into the project, we’ll get an output that it was recorded

ipf.save_to_project(name="demand_ipfd_omx", file_name="demand_ipfd.omx")
<aequilibrae.project.data.matrix_record.MatrixRecord object at 0x7fad881fa690>

Impedance#

Let’s get the base-year assignment skim for car we created before and prepare it for computation

imped = proj_matrices.get_matrix("base_year_assignment_skims_car")
imped.computational_view(["final_time_with_intrazonals"])

If we wanted the main diagonal to not be considered…

# np.fill_diagonal(imped.matrix_view, np.nan)

Now we apply the Synthetic Gravity model

for function in ["power", "expo"]:
    model = SyntheticGravityModel()
    model.load(join(fldr, f"{function}_model.mod"))

    args = {
        "impedance": imped,
        "vectors": vectors,
        "row_field": "origins",
        "model": model,
        "column_field": "destinations",
        "nan_as_zero": True,
    }

    gravity = GravityApplication(**args)
    gravity.apply()

    # We get the output matrix and save it to OMX too,
    gravity.save_to_project(name=f"demand_{function}_modeled", file_name=f"demand_{function}_modeled.omx")

We update the matrices table/records and verify that the new matrices are indeed there

proj_matrices.update_database()
proj_matrices.list()
name file_name cores procedure procedure_id timestamp description status
0 demand_omx demand.omx 1 NaN NaN 2020-11-24 08:47:18 Original data imported to OMX format
1 demand_mc demand_mc.omx 3 NaN NaN 2021-02-24 00:51:35 NaN
2 skims skims.omx 2 NaN NaN NaN Example skim
3 demand_aem demand.aem 1 NaN NaN 2020-11-24 08:46:42 Original data imported to AEM format
4 base_year_assignment_skims_car base_year_assignment_skims_car.omx 4 Traffic Assignment 43af1b25278a4ed982e2718c6670f8c4 2026-07-21 01:31:15.820703 Skimming for assignment procedure. Class car
5 demand_ipfd_omx demand_ipfd.omx 1 Iterative Proportional fitting 9f8af34e70a24ea2b4c655232b08314d 2026-07-21 01:31:21.273134 NaN
6 demand_power_modeled demand_power_modeled.omx 1 Synthetic gravity trip distribution 3a87c8a0a51645eb9fe3501f4c60ebfe 2026-07-21 01:31:21.394702 Synthetic gravity trip distribution. POWER
7 demand_expo_modeled demand_expo_modeled.omx 1 Synthetic gravity trip distribution 05de326720034618815ebb00233d8a34 2026-07-21 01:31:21.548527 Synthetic gravity trip distribution. EXPO