Source code for aequilibrae.paths.results.skim_results
import multiprocessing as mp
from aequilibrae.matrix.aequilibrae_matrix import AequilibraeMatrix
from aequilibrae.paths.graph import Graph
[docs]
class SkimResults:
"""
Network skimming result holder.
.. code-block:: python
>>> from aequilibrae import Project
>>> from aequilibrae.paths.results import SkimResults
>>> proj = Project.from_path("/tmp/test_project")
>>> proj.network.build_graphs()
# Mode c is car in this project
>>> car_graph = proj.network.graphs['c']
# minimize travel time
>>> car_graph.set_graph('free_flow_time')
# Skims travel time and distance
>>> car_graph.set_skimming(['free_flow_time', 'distance'])
>>> res = SkimResults()
>>> res.prepare(car_graph)
>>> res.skims.export('/tmp/test_project/matrix.aem')
"""
[docs]
def __init__(self):
self.skims = AequilibraeMatrix()
self.cores = mp.cpu_count()
self.links = -1
self.nodes = -1
self.zones = -1
self.num_skims = -1
self._graph_id = None
self.graph = Graph()
[docs]
def prepare(self, graph: Graph):
"""
Prepares the object with dimensions corresponding to the graph objects
:Arguments:
**graph** (:obj:`Graph`): Needs to have been set with number of centroids and list of skims (if any)
"""
if not graph.cost_field:
raise Exception('Cost field needs to be set for computation. use graph.set_graph("your_cost_field")')
self.nodes = graph.compact_num_nodes + 1
self.zones = graph.num_zones
self.links = graph.compact_num_links + 1
self.num_skims = len(graph.skim_fields)
self.skims = AequilibraeMatrix()
self.skims.create_empty(
file_name=AequilibraeMatrix().random_name(), zones=self.zones, matrix_names=graph.skim_fields
)
self.skims.index[:] = graph.centroids[:]
self.skims.computational_view(core_list=self.skims.names)
self.skims.matrix_view = self.skims.matrix_view.reshape(self.zones, self.zones, self.num_skims)
self._graph_id = graph._id
self.graph = graph