Skip to content

Commit a8631b9

Browse files
authored
Addded selected_link_volumes option for SOLA Path Analysis (#241)
1 parent 8326175 commit a8631b9

2 files changed

Lines changed: 19 additions & 1 deletion

File tree

TMGToolbox/src/XTMF_internal/multi_class_road_assignment.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ class MultiClassRoadAssignment(_m.Tool()):
105105
ResultAttributes = _m.Attribute(str)
106106
xtmf_AnalysisAttributes = _m.Attribute(str)
107107
xtmf_AnalysisAttributesMatrixId = _m.Attribute(str)
108+
xtmf_AnalysisSelectedLinkVolumes = _m.Attribute(str)
108109
xtmf_AggregationOperator = _m.Attribute(str)
109110
xtmf_LowerBound = _m.Attribute(str)
110111
xtmf_UpperBound = _m.Attribute(str)
@@ -168,6 +169,7 @@ def __call__(
168169
ResultAttributes,
169170
xtmf_AnalysisAttributes,
170171
xtmf_AnalysisAttributesMatrixId,
172+
xtmf_AnalysisSelectedLinkVolumes,
171173
xtmf_AggregationOperator,
172174
xtmf_LowerBound,
173175
xtmf_UpperBound,
@@ -197,6 +199,7 @@ def __call__(
197199
self.LinkTollAttributeId = [x for x in LinkTollAttributeId.split(",")]
198200
AnalysisAttributes = [x for x in xtmf_AnalysisAttributes.split("|")]
199201
AnalysisAttributesMatrixId = [x for x in xtmf_AnalysisAttributesMatrixId.split("|")]
202+
AnalysisSelectedLinkVolumes = [x for x in xtmf_AnalysisSelectedLinkVolumes.split("|")]
200203
operators = [x for x in xtmf_AggregationOperator.split("|")]
201204
lowerBounds = [x for x in xtmf_LowerBound.split("|")]
202205
upperBounds = [x for x in xtmf_UpperBound.split("|")]
@@ -205,6 +208,7 @@ def __call__(
205208
mulitplyPathValue = [x for x in xtmf_MultiplyPathPropByValue.split("|")]
206209
self.ClassAnalysisAttributes = []
207210
self.ClassAnalysisAttributesMatrix = []
211+
self.ClassAnalysisSelectedLinkVolumes = []
208212
self.ClassAnalysisOperators = []
209213
self.ClassAnalysisLowerBounds = []
210214
self.ClassAnalysisUpperBounds = []
@@ -215,6 +219,7 @@ def __call__(
215219
for i in range(len(self.Demand_List)):
216220
self.ClassAnalysisAttributes.append([x for x in AnalysisAttributes[i].split(",")])
217221
self.ClassAnalysisAttributesMatrix.append([x for x in AnalysisAttributesMatrixId[i].split(",")])
222+
self.ClassAnalysisSelectedLinkVolumes.append([x for x in AnalysisSelectedLinkVolumes[i].split(",")])
218223
self.ClassAnalysisOperators.append([x for x in operators[i].split(",")])
219224
self.ClassAnalysisLowerBounds.append([x for x in lowerBounds[i].split(",")])
220225
self.ClassAnalysisUpperBounds.append([x for x in upperBounds[i].split(",")])
@@ -228,6 +233,9 @@ def __call__(
228233
if self.ClassAnalysisAttributesMatrix[i][j] == "mf0" or self.ClassAnalysisAttributesMatrix[i][j] == "":
229234
# make mf0 matrices None for better use in spec
230235
self.ClassAnalysisAttributesMatrix[i][j] = None
236+
if self.ClassAnalysisSelectedLinkVolumes[i][j] == "":
237+
# make mf0 matrices None for better use in spec
238+
self.ClassAnalysisSelectedLinkVolumes[i][j] = None
231239
try:
232240
self.ClassAnalysisLowerBounds[i][j] = float(self.ClassAnalysisLowerBounds[i][j])
233241
self.ClassAnalysisUpperBounds[i][j] = float(self.ClassAnalysisUpperBounds[i][j])
@@ -391,6 +399,7 @@ def get_attribute_name(at):
391399
attributeDefined = False
392400
allAttributes = []
393401
allMatrices = []
402+
selectedLinkVolumes = []
394403
operators = []
395404
lowerBounds = []
396405
upperBounds = []
@@ -401,6 +410,7 @@ def get_attribute_name(at):
401410
for i in range(len(self.Demand_List)):
402411
allAttributes.append([])
403412
allMatrices.append([])
413+
selectedLinkVolumes.append([])
404414
operators.append([])
405415
lowerBounds.append([])
406416
upperBounds.append([])
@@ -411,6 +421,7 @@ def get_attribute_name(at):
411421
_m.logbook_write("Cost matrix defined for class %s" % self.ClassNames[i])
412422
allAttributes[i].append(costAttribute[i].id)
413423
allMatrices[i].append(self.CostMatrixId[i])
424+
selectedLinkVolumes[i].append(None)
414425
operators[i].append("+")
415426
lowerBounds[i].append(None)
416427
upperBounds[i].append(None)
@@ -424,6 +435,7 @@ def get_attribute_name(at):
424435
_m.logbook_write("Toll matrix defined for class %s" % self.ClassNames[i])
425436
allAttributes[i].append(self.LinkTollAttributeId[i])
426437
allMatrices[i].append(self.TollsMatrixId[i])
438+
selectedLinkVolumes[i].append(None)
427439
operators[i].append("+")
428440
lowerBounds[i].append(None)
429441
upperBounds[i].append(None)
@@ -438,6 +450,7 @@ def get_attribute_name(at):
438450
_m.logbook_write("Additional matrix for attribute %s defined for class %s" % (self.ClassAnalysisAttributes[i][j], self.ClassNames[i]))
439451
allAttributes[i].append(self.ClassAnalysisAttributes[i][j])
440452
allMatrices[i].append(self.ClassAnalysisAttributesMatrix[i][j])
453+
selectedLinkVolumes[i].append(self.ClassAnalysisSelectedLinkVolumes[i][j])
441454
operators[i].append(self.ClassAnalysisOperators[i][j])
442455
lowerBounds[i].append(self.ClassAnalysisLowerBounds[i][j])
443456
upperBounds[i].append(self.ClassAnalysisUpperBounds[i][j])
@@ -470,6 +483,7 @@ def get_attribute_name(at):
470483
self.normGap,
471484
self.PerformanceFlag,
472485
self.TimesMatrixId,
486+
selectedLinkVolumes
473487
)
474488
report = self._tracker.runTool(trafficAssignmentTool, spec, scenario=self.Scenario)
475489
assignmentComplete = True

TMGToolbox/src/common/utilities.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -949,6 +949,7 @@ def _getPrimarySOLASpec(
949949
normGap,
950950
PerformanceFlag,
951951
TimesMatrixId,
952+
selectedLinkVolumes = None,
952953
):
953954

954955
if PerformanceFlag:
@@ -994,7 +995,10 @@ def _getPrimarySOLASpec(
994995
"path_value": multiplyPathValue[i][j],
995996
},
996997
},
997-
"results": {"od_values": matrices[i][j]},
998+
"results": {
999+
"od_values": matrices[i][j],
1000+
"selected_link_volumes": (selectedLinkVolumes[i][j] if selectedLinkVolumes is not None else None)
1001+
},
9981002
"analyzed_demand": None,
9991003
}
10001004
SOLA_path_analysis[i].append(path)

0 commit comments

Comments
 (0)