sumolib.scenario.pop2
1# Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo 2# Copyright (C) 2012-2026 German Aerospace Center (DLR) and others. 3# This program and the accompanying materials are made available under the 4# terms of the Eclipse Public License 2.0 which is available at 5# https://www.eclipse.org/legal/epl-2.0/ 6# This Source Code may also be made available under the following Secondary 7# Licenses when the conditions for such availability set forth in the Eclipse 8# Public License 2.0 are satisfied: GNU General Public License, version 2 9# or later which is available at 10# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html 11# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later 12 13# @file pop2.py 14# @author Daniel Krajzewicz 15# @author Michael Behrisch 16# @date 2014-08-22 17 18 19from __future__ import absolute_import 20from __future__ import print_function 21import sumolib.net.generator.demand as demandGenerator 22import sumolib 23from .scenarios import extrapolateDemand, getScenario, split_by_proportions, fileNeedsRebuild 24import random 25import math 26 27 28RWS = [ 29 [1, 0.5104, 0.5828, 0.5772, 0.6332, 0.748, 2.8719, 1.7177], 30 [2, 0.3432, 0.3078, 0.3675, 0.336, 0.4566, 1.9838, 1.0125], 31 [3, 0.2107, 0.2523, 0.2086, 0.2895, 0.2517, 1.3241, 0.8154], 32 [4, 0.3703, 0.1997, 0.3053, 0.2064, 0.3579, 0.9965, 0.4875], 33 [5, 0.9379, 0.4054, 0.5936, 0.457, 0.6685, 0.6633, 0.6375], 34 [6, 2.5954, 1.3955, 1.9009, 1.5343, 2.2885, 0.9947, 1.2423], 35 [7, 6.6675, 2.9516, 4.9363, 3.5946, 5.1519, 1.0119, 1.5891], 36 [8, 8.9356, 5.3546, 7.2095, 4.5774, 7.6271, 1.4289, 2.7169], 37 [9, 8.1931, 6.0357, 6.9139, 5.2376, 6.8091, 2.4236, 3.8612], 38 [10, 6.3549, 4.9486, 6.0444, 4.9067, 5.7137, 3.9569, 5.7839], 39 [11, 5.496, 4.4953, 5.3436, 5.5661, 5.2829, 5.4762, 6.406], 40 [12, 5.0961, 4.778, 5.0059, 5.955, 5.2941, 5.9344, 7.0014], 41 [13, 5.3599, 5.2839, 5.4039, 6.853, 5.9041, 6.4891, 7.3738], 42 [14, 5.6462, 5.9352, 5.7807, 7.2908, 6.4795, 7.2301, 7.6242], 43 [15, 5.7565, 6.6796, 6.1341, 8.336, 6.8031, 7.8309, 7.7892], 44 [16, 6.0419, 7.4557, 7.0506, 9.0655, 7.0955, 7.4463, 7.3836], 45 [17, 6.9183, 9.3616, 7.8898, 8.6483, 6.7089, 7.7562, 6.9353], 46 [18, 6.6566, 10.19, 7.5263, 7.7115, 6.4494, 8.2159, 6.7839], 47 [19, 5.8434, 8.5196, 6.9226, 6.4153, 5.942, 7.5234, 6.331], 48 [20, 4.4669, 5.8307, 4.9389, 4.2742, 4.4143, 6.1206, 4.9072], 49 [21, 3.3168, 3.8433, 3.4602, 2.8543, 3.5677, 4.778, 4.0775], 50 [22, 2.0562, 2.3324, 2.6526, 2.2575, 2.7751, 3.6782, 2.9477], 51 [23, 1.4711, 1.9216, 1.7354, 1.8819, 1.8463, 2.3371, 2.5049], 52 [24, 0.7552, 0.9392, 1.0983, 1.118, 1.3643, 1.5282, 2.0705] 53] 54 55 56def getRWScurves(): 57 RWScurves = [[], [], []] 58 for line in RWS: 59 RWScurves[0].append(line[1]) 60 RWScurves[1].append(line[2]) 61 RWScurves[2].append(line[3]) 62 return RWScurves 63 64 65def merge(defaultParams, setParams): 66 ret = {} 67 for p in defaultParams: 68 ret[p] = defaultParams[p] 69 if p in setParams: 70 ret[p] = setParams[p] 71 return ret 72 73 74class ScenarioSet: 75 76 def __init__(self, name, params): 77 self.name = name 78 self.params = params 79 80 def getNumRuns(self): 81 raise NotImplementedError("virtual ScenarioSet/getNumRuns") 82 83 def getAverageDuration(self): 84 raise NotImplementedError("virtual ScenarioSet/getAverageDuration") 85 86 def iterate(self): 87 raise NotImplementedError("virtual ScenarioSet/iterate") 88 89 def getRunsMatrix(self): 90 raise NotImplementedError("virtual ScenarioSet/getRunsMatrix") 91 92 def getInt(self, name): 93 return int(self.params[name]) 94 95 def getFloat(self, name): 96 return float(self.params[name]) 97 98 def addTLSParameterFromFile(self, tlsProg, paramFile): 99 if paramFile is None: 100 return 101 fd = open(paramFile) 102 for line in fd.readlines(): 103 line = line.strip() 104 if len(line) == 0: 105 continue 106 v = line.split(":") 107 tlsProg.addParameter(v[0], v[1]) 108 fd.close() 109 110 def adaptOutputs(self, sID, scenario, options, tls_algorithm): 111 args = [] 112 files = {} 113 # those set on the command line 114 tripinfoFile = scenario.fullPath('tripinfos_%s.xml' % sID) 115 args.extend( 116 ['--tripinfo-output', tripinfoFile, '--device.emissions.probability', '1']) 117 files["tripinfo"] = [tripinfoFile] 118 # those generated using an additional file 119 scenario.addAdditionalFile(scenario.fullPath("measures_%s" % sID)) 120 fdo = open(scenario.fullPath("measures_%s.add.xml" % sID), "w") 121 fdo.write("<additional>\n") 122 files["trafficLane"] = [scenario.fullPath('traffic_%s.xml' % sID)] 123 fdo.write(' <laneData id="traffic" file="%s" freq="60"/>\n' % 124 files["trafficLane"][0]) 125 files["emissionsLane"] = [scenario.fullPath('emissions_%s.xml' % sID)] 126 fdo.write(' <laneData id="traffic" type="emissions" file="%s" freq="60"/>\n' % 127 files["emissionsLane"][0]) 128 net = sumolib.net.readNet( 129 scenario.NET_FILE, withPrograms=True, withConnections=True) 130 seenLanes = set() 131 files["tlsstates"] = [scenario.fullPath("tls_states_%s.xml" % (sID))] 132 if options.couplede2: 133 files["coupledE2"] = [ 134 scenario.fullPath("coupledE2_%s.xml" % (sID))] 135 if options.e2: 136 files["e2"] = [scenario.fullPath("e2_%s.xml" % (sID))] 137 for tlsID in net._id2tls: 138 tlsID.replace("/", "_") 139 tls = net._id2tls[tlsID] 140 fdo.write(' <timedEvent type="SaveTLSStates" source="%s" dest="%s"/>\n' % ( 141 tlsID, files["tlsstates"][0])) 142 for conn in tls._connections: 143 laneID = conn[0].getID() 144 if laneID in seenLanes: 145 continue 146 seenLanes.add(laneID) 147 if options.couplede2: 148 fdo.write((' <e2Detector id="%s_%s" lane="%s" pos="-.1" length="200" ' + 149 'tl="%s" file="%s" friendlyPos="t"/>\n') % ( 150 tlsID, laneID, laneID, tlsID, files["coupledE2"][0])) 151 fdo.write('\n') 152 if options.e2: 153 for _lane in seenLanes: 154 fdo.write((' <e2Detector id="%s" lane="%s" pos="-.1" length="200" file="%s" ' + 155 'freq="%s" friendlyPos="t"/>\n') % (_lane, _lane, files["e2"][0], options.aggregation)) 156 fdo.write('\n') 157 fdo.write("</additional>\n") 158 fdo.close() 159 return args, files 160 161 def getAdditionalDivider(self): 162 return [] 163 164 def halfX(self): 165 return True 166 167 def orientationX(self): 168 return 0 169 170 def ticksSize(self): 171 return 16 172 173 def figsize(self): 174 return None 175 176 def adjust(self, fig): 177 return 178 179 180# -------------------------------------- 181 182class ScenarioSet_IterateFlowsNA(ScenarioSet): 183 184 def __init__(self, params): 185 ScenarioSet.__init__(self, "iterateFlowsNA", merge( 186 {"f1from": "0", "f1to": "2400", "f1step": "400", 187 "f2from": "0", "f2to": "2400", "f2step": "400"}, 188 params)) 189 190 def getNumRuns(self): 191 f1num = 1 + \ 192 (self.getInt("f1to") - self.getInt("f1from")) / \ 193 self.getInt("f1step") 194 f2num = 1 + \ 195 (self.getInt("f2to") - self.getInt("f2from")) / \ 196 self.getInt("f2step") 197 return f1num * f2num 198 199 """ 200 Yields returning a built scenario and its description as key/value pairs 201 """ 202 203 def iterateScenarios(self): 204 desc = {"name": "iterateFlowsNA"} 205 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 206 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 207 if f1 == 0 and f2 == 0: 208 continue 209 print("Computing for %s<->%s" % (f1, f2)) 210 sID = "iterateFlowsNA(%s-%s)" % (f1, f2) 211 s = getScenario("BasicCross", {}, False) 212 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 213 if fileNeedsRebuild(s.demandName, "duarouter"): 214 s.demand = demandGenerator.Demand() 215 # why isn't it possible to get a network and return all 216 # possible routes or whatever - to ease the process 217 s.demand.addStream(demandGenerator.Stream( 218 None, 0, 3600, f1, "2/1_to_1/1", "1/1_to_0/1", {"passenger": 1})) 219 # why isn't it possible to get a network and return all 220 # possible routes or whatever - to ease the process 221 s.demand.addStream(demandGenerator.Stream( 222 None, 0, 3600, f1, "0/1_to_1/1", "1/1_to_2/1", {"passenger": 1})) 223 # why isn't it possible to get a network and return all 224 # possible routes or whatever - to ease the process 225 s.demand.addStream(demandGenerator.Stream( 226 None, 0, 3600, f2, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 227 # why isn't it possible to get a network and return all 228 # possible routes or whatever - to ease the process 229 s.demand.addStream(demandGenerator.Stream( 230 None, 0, 3600, f2, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 231 s.demand.build(0, 3600, s.netName, s.demandName) 232 desc = { 233 "scenario": "iterateFlowsNA", "f1": str(f1), "f2": str(f2)} 234 yield s, desc, sID 235 236 def getRunsMatrix(self): 237 ret = [] 238 ranges = [[], []] 239 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 240 ret.append([]) 241 ranges[0].append(f1) 242 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 243 ret[-1].append({"scenario": "iterateFlowsNA", 244 "f1": str(f1), "f2": str(f2)}) 245 ranges[1].append(f2) 246 return (ret, ranges) 247 248 def getAverageDuration(self): 249 return -1 # !!! 250 251 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 252 # adapt tls to current settings 253 scenario.addAdditionalFile( 254 scenario.fullPath("tls_adapted_%s_%s" % (sID, tls_algorithm))) 255 fdo = open( 256 scenario.fullPath("tls_adapted_%s_%s.add.xml" % (sID, tls_algorithm)), "w") 257 fdo.write("<additional>\n") 258 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 259 for tlsID in net._id2tls: 260 tls = net._id2tls[tlsID] 261 for prog in tls._programs: 262 tls._programs[prog]._type = tls_algorithm 263 tls._programs[prog]._id = "adapted" 264 self.addTLSParameterFromFile( 265 tls._programs[prog], options.tls_params) 266 fdo.write(tls._programs[prog].toXML(tlsID)) 267 fdo.write("</additional>\n") 268 fdo.close() 269 args = [] 270 return args 271 272 def getXLabel(self): 273 return "horizontal demand [vehicles/h]" 274 275 def getYLabel(self): 276 return "vertical demand [vehicles/h]" 277 278# -------------------------------------- 279 280 281class ScenarioSet_IterateFlowsA(ScenarioSet): 282 283 def __init__(self, params): 284 ScenarioSet.__init__(self, "iterateFlowsA", merge( 285 {"f1from": "0", "f1to": "2400", "f1step": "400", 286 "f2from": "0", "f2to": "2400", "f2step": "400"}, 287 params)) 288 289 def getNumRuns(self): 290 f1num = 1 + \ 291 (self.getInt("f1to") - self.getInt("f1from")) / \ 292 self.getInt("f1step") 293 f2num = 1 + \ 294 (self.getInt("f2to") - self.getInt("f2from")) / \ 295 self.getInt("f2step") 296 return f1num * f2num 297 298 """ 299 Yields returning a built scenario and its description as key/value pairs 300 """ 301 302 def iterateScenarios(self): 303 desc = {"name": "iterateFlowsA"} 304 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 305 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 306 if f1 == 0 and f2 == 0: 307 continue 308 print("Computing for %s<->%s" % (f1, f2)) 309 sID = "iterateFlowsA(%s-%s)" % (f1, f2) 310 s = getScenario("BasicCross", {}, False) 311 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 312 if fileNeedsRebuild(s.demandName, "duarouter"): 313 s.demand = demandGenerator.Demand() 314 # why isn't it possible to get a network and return all 315 # possible routes or whatever - to ease the process 316 s.demand.addStream(demandGenerator.Stream( 317 None, 0, 3600, f1, "2/1_to_1/1", "1/1_to_0/1", {"passenger": 1})) 318 # why isn't it possible to get a network and return all 319 # possible routes or whatever - to ease the process 320 s.demand.addStream(demandGenerator.Stream( 321 None, 0, 3600, f1, "0/1_to_1/1", "1/1_to_2/1", {"passenger": 1})) 322 # why isn't it possible to get a network and return all 323 # possible routes or whatever - to ease the process 324 s.demand.addStream(demandGenerator.Stream( 325 None, 0, 3600, f2, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 326 # why isn't it possible to get a network and return all 327 # possible routes or whatever - to ease the process 328 s.demand.addStream(demandGenerator.Stream( 329 None, 0, 3600, f2, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 330 s.demand.build(0, 3600, s.netName, s.demandName) 331 # !!! the following two lines are a hack to pass the numbers instead of recomputing them 332 s.demand._f1Value = f1 333 s.demand._f2Value = f2 334 desc = { 335 "scenario": "iterateFlowsA", "f1": str(f1), "f2": str(f2)} 336 yield s, desc, sID 337 338 def getRunsMatrix(self): 339 ret = [] 340 ranges = [[], []] 341 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 342 ret.append([]) 343 ranges[0].append(f1) 344 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 345 ret[-1].append({"scenario": "iterateFlowsA", 346 "f1": str(f1), "f2": str(f2)}) 347 ranges[1].append(f2) 348 return (ret, ranges) 349 350 def getAverageDuration(self): 351 return -1 # !!! 352 353 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 354 # adapt tls to current settings 355 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 356 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 357 fdo.write("<additional>\n") 358 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 359 for tlsID in net._id2tls: 360 tls = net._id2tls[tlsID] 361 for prog in tls._programs: 362 tls._programs[prog]._type = tls_algorithm 363 tls._programs[prog]._id = "adapted" 364 self.addTLSParameterFromFile( 365 tls._programs[prog], options.tls_params) 366 scenario.demand._f1Value = float( 367 max(scenario.demand._f1Value, 1)) 368 scenario.demand._f2Value = float( 369 max(scenario.demand._f2Value, 1)) 370 t = scenario.demand._f1Value + scenario.demand._f2Value 371 greens = split_by_proportions( 372 80, (scenario.demand._f1Value / t, scenario.demand._f2Value / t), (10, 10)) 373 tls._programs[prog]._phases[0][1] = greens[0] 374 tls._programs[prog]._phases[3][1] = greens[1] 375 fdo.write(tls._programs[prog].toXML(tlsID)) 376 fdo.write("</additional>\n") 377 fdo.close() 378 args = [] 379 return args 380 381 def getXLabel(self): 382 return "horizontal demand [vehicles/h]" 383 384 def getYLabel(self): 385 return "vertical demand [vehicles/h]" 386 387# -------------------------------------- 388 389 390class ScenarioSet_RiLSA1LoadCurves(ScenarioSet): 391 392 def __init__(self, params): 393 ScenarioSet.__init__(self, "RiLSA1LoadCurves", merge( 394 {}, 395 params)) 396 397 def getNumRuns(self): 398 return 3 * 3 * 3 * 3 399 """ 400 Yields returning a built scenario and its description as key/value pairs 401 """ 402 403 def iterateScenarios(self): 404 # desc = {"name": "RiLSA1LoadCurves"} 405 RWScurves = getRWScurves() 406 for iWE, cWE in enumerate(RWScurves): 407 for iNS, cNS in enumerate(RWScurves): 408 for iEW, cEW in enumerate(RWScurves): 409 for iSN, cSN in enumerate(RWScurves): 410 # s, desc, sID 411 yield self.runSingle(RWScurves, iWE, iNS, iEW, iSN) 412 413 def runSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 414 cWE = RWScurves[iWE] 415 cNS = RWScurves[iNS] 416 cEW = RWScurves[iEW] 417 cSN = RWScurves[iSN] 418 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 419 if uID is None: 420 sID = "RiLSA1LoadCurves(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 421 else: 422 sID = "RiLSA1LoadCurves(%s)" % (uID) 423 s = getScenario("RiLSA1", {}) 424 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 425 print(s.demandName) 426 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 427 nStreams = [] 428 for stream in s.demand.streams: 429 if stream._departEdgeModel.startswith("nm"): 430 nStreams.extend( 431 extrapolateDemand(stream, 3600, cNS, 7).streams) 432 elif stream._departEdgeModel.startswith("em"): 433 nStreams.extend( 434 extrapolateDemand(stream, 3600, cEW, 7).streams) 435 elif stream._departEdgeModel.startswith("sm"): 436 nStreams.extend( 437 extrapolateDemand(stream, 3600, cSN, 7).streams) 438 elif stream._departEdgeModel.startswith("wm"): 439 nStreams.extend( 440 extrapolateDemand(stream, 3600, cWE, 7).streams) 441 else: 442 print(stream._departEdgeModel) 443 raise RuntimeError("Hmmm, unknown stream??") 444 s.demand.streams = nStreams 445 end = 86400 446 sampleFactor = None 447 seenRatio = None 448 if "sample-factor" in self.params: 449 sampleFactor = self.params["sample-factor"] 450 if "seen-ratio" in self.params: 451 seenRatio = self.params["seen-ratio"] 452 s.demand.build( 453 0, end, s.netName, s.demandName, sampleFactor, seenRatio) 454 desc = {"scenario": "RiLSA1LoadCurves", "iWE": str( 455 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 456 return s, desc, sID 457 458 def getRunsMatrix(self): 459 ret = [] 460 ranges = [[], []] 461 RWScurves = getRWScurves() 462 i = 0 463 for iWE, cWE in enumerate(RWScurves): 464 for iNS, cNS in enumerate(RWScurves): 465 ret.append([]) 466 ranges[0].append("%s/%s" % (iWE, iNS)) 467 i = i + 1 468 j = 0 469 for iEW, cEW in enumerate(RWScurves): 470 for iSN, cSN in enumerate(RWScurves): 471 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": 472 str(iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurves"}) 473 ranges[-1].append("%s/%s" % (iEW, iSN)) 474 j = j + 1 475 return (ret, ranges) 476 477 def getAverageDuration(self): 478 return -1 # !!! 479 480 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 481 # adapt tls to current settings 482 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 483 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 484 fdo.write("<additional>\n") 485 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 486 for tlsID in net._id2tls: 487 tls = net._id2tls[tlsID] 488 (streamsNS, streamsWE) = scenario.getOppositeFlows() 489 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 490 for prog in tls._programs: 491 i1 = i2 = 0 492 for i, p in enumerate(tls._programs[prog]._phases): 493 if p[1] == 40: 494 i1 = i 495 elif p[1] == 12: 496 i2 = i 497 for t in greens: 498 tls._programs[prog]._type = tls_algorithm 499 tls._programs[prog]._id = "adapted" + str(t) 500 self.addTLSParameterFromFile( 501 tls._programs[prog], options.tls_params) 502 tls._programs[prog]._phases[i1][1] = greens[t][1] 503 tls._programs[prog]._phases[i2][1] = greens[t][0] 504 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 505 fdo.write('\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 506 for t in times: 507 fdo.write('\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 508 fdo.write("\t</WAUT>\n") 509 fdo.write('\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 510 fdo.write("</additional>\n") 511 fdo.close() 512 args = [] 513 return args 514 515 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 516 # adapt tls to current settings 517 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 518 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 519 fdo.write("<additional>\n") 520 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 521 for tlsID in net._id2tls: 522 tls = net._id2tls[tlsID] 523 (streamsNS, streamsWE) = scenario.getOppositeFlows() 524 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 525 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 526 greens = split_by_proportions(72, (ns, we), (10, 10)) 527 for prog in tls._programs: 528 i1 = i2 = 0 529 for i, p in enumerate(tls._programs[prog]._phases): 530 if p[1] == 40: 531 i1 = i 532 elif p[1] == 12: 533 i2 = i 534 tls._programs[prog]._type = tls_algorithm 535 tls._programs[prog]._id = "adapted" 536 self.addTLSParameterFromFile( 537 tls._programs[prog], options.tls_params) 538 539 tls._programs[prog]._phases[i1][1] = greens[1] 540 tls._programs[prog]._phases[i2][1] = greens[0] 541 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 542 fdo.write("</additional>\n") 543 fdo.close() 544 args = [] 545 return args 546 547 def getXLabel(self): 548 return "RWS type (west-east)/RWS type (north-south)" 549 550 def getYLabel(self): 551 return "RWS type (east-west)/RWS type (south-north)" 552 553 def halfX(self): 554 return False 555 556 def getAdditionalDivider(self): 557 return [ 558 [2.5, -0.5, 2.5, 8.5], 559 [5.5, -0.5, 5.5, 8.5], 560 [-0.5, 2.5, 8.5, 2.5], 561 [-0.5, 5.5, 8.5, 5.5] 562 ] 563 564# -------------------------------------- 565 566 567class ScenarioSet_RiLSA1LoadCurvesSampled(ScenarioSet): 568 569 def __init__(self, params): 570 ScenarioSet.__init__(self, "RiLSA1LoadCurvesSampled", merge( 571 {}, 572 params)) 573 574 def getNumRuns(self): 575 return 3 * 3 * 3 * 3 576 577 def iterateScenarios(self): 578 """ 579 Yields returning a built scenario and its description as key/value pairs 580 """ 581 # desc = {"name": "RiLSA1LoadCurvesSampled"} 582 RWScurves = getRWScurves() 583 for iWE, cWE in enumerate(RWScurves): 584 for iNS, cNS in enumerate(RWScurves): 585 for iEW, cEW in enumerate(RWScurves): 586 for iSN, cSN in enumerate(RWScurves): 587 # s, desc, sID 588 yield self.runSingle(RWScurves, iWE, iNS, iEW, iSN) 589 590 def runSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 591 cWE = RWScurves[iWE] 592 cNS = RWScurves[iNS] 593 cEW = RWScurves[iEW] 594 cSN = RWScurves[iSN] 595 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 596 if uID is None: 597 sID = "RiLSA1LoadCurvesSampled(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 598 else: 599 sID = "RiLSA1LoadCurvesSampled(%s)" % (uID) 600 s = getScenario("RiLSA1", {}) 601 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 602 print(s.demandName) 603 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 604 nStreams = [] 605 for stream in s.demand.streams: 606 if stream._departEdgeModel.startswith("nm"): 607 nStreams.extend( 608 extrapolateDemand(stream, 3600, cNS, 7).streams) 609 elif stream._departEdgeModel.startswith("em"): 610 nStreams.extend( 611 extrapolateDemand(stream, 3600, cEW, 7).streams) 612 elif stream._departEdgeModel.startswith("sm"): 613 nStreams.extend( 614 extrapolateDemand(stream, 3600, cSN, 7).streams) 615 elif stream._departEdgeModel.startswith("wm"): 616 nStreams.extend( 617 extrapolateDemand(stream, 3600, cWE, 7).streams) 618 else: 619 print(stream._departEdgeModel) 620 raise RuntimeError("Hmmm, unknown stream??") 621 s.demand.streams = nStreams 622 end = 86400 623 sampleFactor = 1 624 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 625 desc = {"scenario": "RiLSA1LoadCurvesSampled", "iWE": str( 626 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 627 return s, desc, sID 628 629 def getRunsMatrix(self): 630 ret = [] 631 ranges = [[], []] 632 RWScurves = getRWScurves() 633 i = 0 634 for iWE, cWE in enumerate(RWScurves): 635 for iNS, cNS in enumerate(RWScurves): 636 ret.append([]) 637 ranges[0].append("%s/%s" % (iWE, iNS)) 638 i = i + 1 639 j = 0 640 for iEW, cEW in enumerate(RWScurves): 641 for iSN, cSN in enumerate(RWScurves): 642 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": str( 643 iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurvesSampled"}) 644 ranges[-1].append("%s/%s" % (iEW, iSN)) 645 j = j + 1 646 return (ret, ranges) 647 648 def getAverageDuration(self): 649 return -1 # !!! 650 651 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 652 # adapt tls to current settings 653 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 654 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 655 fdo.write("<additional>\n") 656 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 657 for tlsID in net._id2tls: 658 tls = net._id2tls[tlsID] 659 (streamsNS, streamsWE) = scenario.getOppositeFlows() 660 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 661 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 662 greens = split_by_proportions(72, (ns, we), (10, 10)) 663 for prog in tls._programs: 664 i1 = i2 = 0 665 for i, p in enumerate(tls._programs[prog]._phases): 666 if p[1] == 40: 667 i1 = i 668 elif p[1] == 12: 669 i2 = i 670 tls._programs[prog]._type = tls_algorithm 671 tls._programs[prog]._id = "adapted" 672 self.addTLSParameterFromFile( 673 tls._programs[prog], options.tls_params) 674 675 tls._programs[prog]._phases[i1][1] = greens[1] 676 tls._programs[prog]._phases[i2][1] = greens[0] 677 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 678 fdo.write("</additional>\n") 679 fdo.close() 680 args = [] 681 return args 682 683 def getXLabel(self): 684 return "RWS type (west-east)/RWS type (north-south)" 685 686 def getYLabel(self): 687 return "RWS type (east-west)/RWS type (south-north)" 688 689 def halfX(self): 690 return False 691 692 def getAdditionalDivider(self): 693 return [ 694 [2.5, -0.5, 2.5, 8.5], 695 [5.5, -0.5, 5.5, 8.5], 696 [-0.5, 2.5, 8.5, 2.5], 697 [-0.5, 5.5, 8.5, 5.5] 698 ] 699 700 701# -------------------------------------- 702 703class ScenarioSet_BasicOutflow(ScenarioSet): 704 705 def __init__(self, params): 706 ScenarioSet.__init__(self, "BasicOutflow", merge( 707 {"g1from": "4", "g1to": "64", "g1step": "5", 708 "g2from": "4", "g2to": "64", "g2step": "5"}, 709 params)) 710 711 def getNumRuns(self): 712 g1num = 1 + \ 713 (self.getInt("g1to") - self.getInt("g1from")) / \ 714 self.getInt("g1step") 715 g2num = 1 + \ 716 (self.getInt("g2to") - self.getInt("g2from")) / \ 717 self.getInt("g2step") 718 return g1num * g2num 719 720 def iterateScenarios(self): 721 desc = {"name": "BasicOutflow"} 722 for f1 in range(self.getInt("g1from"), self.getInt("g1to"), self.getInt("g1step")): 723 for f2 in range(self.getInt("g2from"), self.getInt("g2to"), self.getInt("g2step")): 724 if f1 == 0 and f2 == 0: 725 continue 726 print("Computing for %s<->%s" % (f1, f2)) 727 sID = "BasicOutflow(%s-%s)" % (f1, f2) 728 s = getScenario("BasicCross", {}, False) 729 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 730 if fileNeedsRebuild(s.demandName, "duarouter"): 731 s.demand = demandGenerator.Demand() 732 # why isn't it possible to get a network and return all 733 # possible routes or whatever - to ease the process 734 s.demand.addStream(demandGenerator.Stream( 735 None, 0, 3600, f1, "2/1_to_1/1", "1/1_to_0/1", {"passenger": 1})) 736 # why isn't it possible to get a network and return all 737 # possible routes or whatever - to ease the process 738 s.demand.addStream(demandGenerator.Stream( 739 None, 0, 3600, f1, "0/1_to_1/1", "1/1_to_2/1", {"passenger": 1})) 740 # why isn't it possible to get a network and return all 741 # possible routes or whatever - to ease the process 742 s.demand.addStream(demandGenerator.Stream( 743 None, 0, 3600, f2, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 744 # why isn't it possible to get a network and return all 745 # possible routes or whatever - to ease the process 746 s.demand.addStream(demandGenerator.Stream( 747 None, 0, 3600, f2, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 748 s.demand.build(0, 3600, s.netName, s.demandName) 749 # !!! the following two lines are a hack to pass the numbers instead of recomputing them 750 s.demand._f1Value = f1 751 s.demand._f2Value = f2 752 desc = { 753 "scenario": "BasicOutflow", "g1": str(f1), "g2": str(f2)} 754 yield s, desc, sID 755 756 def getRunsMatrix(self): 757 ret = [] 758 ranges = [[], []] 759 for g1 in range(self.getInt("g1from"), self.getInt("g1to"), self.getInt("g1step")): 760 ret.append([]) 761 ranges[0].append(g1) 762 for g2 in range(self.getInt("g2from"), self.getInt("g2to"), self.getInt("g2step")): 763 ret[-1].append({"scenario": "BasicOutflow", 764 "g1": str(g1), "g2": str(g2)}) 765 ranges[1].append(g2) 766 return (ret, ranges) 767 768 def getAverageDuration(self): 769 return -1 # !!! 770 771 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 772 # adapt tls to current settings 773 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 774 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 775 fdo.write("<additional>\n") 776 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 777 for tlsID in net._id2tls: 778 tls = net._id2tls[tlsID] 779 for prog in tls._programs: 780 tls._programs[prog]._type = tls_algorithm 781 tls._programs[prog]._id = "adapted" 782 self.addTLSParameterFromFile( 783 tls._programs[prog], options.tls_params) 784 scenario.demand._f1Value = float( 785 max(scenario.demand._f1Value, 1)) 786 scenario.demand._f2Value = float( 787 max(scenario.demand._f2Value, 1)) 788 t = scenario.demand._f1Value + scenario.demand._f2Value 789 greens = split_by_proportions( 790 80, (scenario.demand._f1Value / t, scenario.demand._f2Value / t), (10, 10)) 791 tls._programs[prog]._phases[0][1] = greens[0] 792 tls._programs[prog]._phases[3][1] = greens[1] 793 fdo.write(tls._programs[prog].toXML(tlsID)) 794 fdo.write("</additional>\n") 795 fdo.close() 796 args = [] 797 return args 798 799 def getXLabel(self): 800 return "horizontal demand [vehicles/h]" 801 802 def getYLabel(self): 803 return "vertical demand [vehicles/h]" 804 805 def getAdditionalDivider(self): 806 return [] 807 808 def orientationX(self): 809 return 90 810 811 def halfX(self): 812 return False 813 814# -------------------------------------- 815 816 817class ScenarioSet_RiLSA1Outflow(ScenarioSet_RiLSA1LoadCurvesSampled): 818 819 def __init__(self, params): 820 ScenarioSet.__init__(self, "RiLSA1Outflow", merge( 821 {"g1from": "8", "g1to": "81", "g1step": "8", 822 "g2from": "8", "g2to": "81", "g2step": "8"}, 823 params)) 824 825 def getNumRuns(self): 826 f1num = 1 + \ 827 (self.getInt("g1to") - self.getInt("g1from")) / \ 828 self.getInt("g1step") 829 f2num = 1 + \ 830 (self.getInt("g2to") - self.getInt("g2from")) / \ 831 self.getInt("g2step") 832 return f1num * f2num 833 """ 834 Yields returning a built scenario and its description as key/value pairs 835 """ 836 837 def iterateScenarios(self): 838 # desc = {"name": "RiLSA1Outflow"} 839 RWScurves = getRWScurves() 840 for g1 in range(self.getInt("g1from"), self.getInt("g1to"), self.getInt("g1step")): 841 for g2 in range(self.getInt("g2from"), self.getInt("g2to"), self.getInt("g2step")): 842 yield self.runSingle(RWScurves, g1, g2) 843 844 def runSingle(self, RWScurves, g1, g2, uID=None): 845 cWE = RWScurves[0] 846 cNS = RWScurves[1] 847 cEW = RWScurves[2] 848 cSN = RWScurves[1] 849 print("Computing for %s %s" % (g1, g2)) 850 sID = "RiLSA1Outflow(%s-%s)" % (g1, g2) 851 s = getScenario("RiLSA1OutTLS", {}) 852 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 853 s.params["g1"] = g1 854 s.params["g2"] = g2 855 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 856 nStreams = [] 857 for stream in s.demand.streams: 858 if stream._departEdgeModel.startswith("nm"): 859 nStreams.extend( 860 extrapolateDemand(stream, 3600, cNS, 7).streams) 861 elif stream._departEdgeModel.startswith("em"): 862 nStreams.extend( 863 extrapolateDemand(stream, 3600, cEW, 7).streams) 864 elif stream._departEdgeModel.startswith("sm"): 865 nStreams.extend( 866 extrapolateDemand(stream, 3600, cSN, 7).streams) 867 elif stream._departEdgeModel.startswith("wm"): 868 nStreams.extend( 869 extrapolateDemand(stream, 3600, cWE, 7).streams) 870 else: 871 print(stream._departEdgeModel) 872 raise RuntimeError("Hmmm, unknown stream??") 873 s.demand.streams = nStreams 874 end = 86400 875 sampleFactor = 1 876 if "seen-ratio" in self.params: 877 self.params["seen-ratio"] 878 # , seenRatio) 879 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 880 desc = {"scenario": "RiLSA1Outflow", "g1": str(g1), "g2": str(g2)} 881 return s, desc, sID 882 883 def getRunsMatrix(self): 884 ret = [] 885 ranges = [[], []] 886 for g1 in range(self.getInt("g1from"), self.getInt("g1to"), self.getInt("g1step")): 887 ret.append([]) 888 ranges[0].append(g1) 889 for g2 in range(self.getInt("g2from"), self.getInt("g2to"), self.getInt("g2step")): 890 ret[-1].append({"g1": str(g1), "g2": str(g2), 891 "scenario": "RiLSA1Outflow"}) 892 ranges[-1].append(g2) 893 return (ret, ranges) 894 895 def getAverageDuration(self): 896 return -1 # !!! 897 898 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 899 # adapt tls to current settings 900 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 901 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 902 fdo.write("<additional>\n") 903 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 904 for tlsID in net._id2tls: 905 906 tls = net._id2tls[tlsID] 907 if tlsID == "0": 908 (streamsNS, streamsWE) = scenario.getOppositeFlows() 909 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 910 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 911 greens = split_by_proportions(72, (ns, we), (10, 10)) 912 for prog in tls._programs: 913 i1 = i2 = 0 914 for i, p in enumerate(tls._programs[prog]._phases): 915 if p[1] == 40: 916 i1 = i 917 elif p[1] == 12: 918 i2 = i 919 tls._programs[prog]._type = tls_algorithm 920 self.addTLSParameterFromFile( 921 tls._programs[prog], options.tls_params) 922 tls._programs[prog]._phases[i1][1] = greens[1] 923 tls._programs[prog]._phases[i2][1] = greens[0] 924 tls._programs[prog]._id = "adapted" 925 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 926 else: 927 if tlsID[0] == 'e' or tlsID[0] == 'w': 928 tls._programs[prog]._phases[0][ 929 1] = int(scenario.params["g1"]) 930 tls._programs[prog]._phases[2][ 931 1] = 92 - 4 - int(scenario.params["g1"]) 932 else: 933 tls._programs[prog]._phases[1][ 934 1] = int(scenario.params["g2"]) 935 tls._programs[prog]._phases[0][ 936 1] = 92 - 4 - int(scenario.params["g2"]) 937 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 938 fdo.write("</additional>\n") 939 fdo.close() 940 args = [] 941 return args 942 943 def getXLabel(self): 944 return "horizontal green time [s]" 945 946 def getYLabel(self): 947 return "vertical green time [s]" 948 949 def getAdditionalDivider(self): 950 return [] 951 952 def halfX(self): 953 return False 954 955# -------------------------------------- 956 957 958class ScenarioSet_RiLSA1PedFlow(ScenarioSet_RiLSA1LoadCurvesSampled): 959 960 def __init__(self, params): 961 ScenarioSet.__init__(self, "RiLSA1PedFlow", merge( 962 {"f1from": "0", "f1to": "501", "f1step": "50", 963 "f2from": "0", "f2to": "501", "f2step": "50"}, 964 params)) 965 966 def getNumRuns(self): 967 f1num = 1 + \ 968 (self.getInt("f1to") - self.getInt("f1from")) / \ 969 self.getInt("f1step") 970 f2num = 1 + \ 971 (self.getInt("f2to") - self.getInt("f2from")) / \ 972 self.getInt("f2step") 973 return f1num * f2num 974 """ 975 Yields returning a built scenario and its description as key/value pairs 976 """ 977 978 def iterateScenarios(self): 979 # desc = {"name": "RiLSA1PedFlow"} 980 RWScurves = getRWScurves() 981 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 982 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 983 yield self.runSingle(RWScurves, f1, f2) 984 985 def runSingle(self, RWScurves, f1, f2, uID=None): 986 cWE = RWScurves[0] 987 cNS = RWScurves[1] 988 cEW = RWScurves[2] 989 cSN = RWScurves[1] 990 print("Computing for %s %s" % (f1, f2)) 991 sID = "RiLSA1PedFlow(%s-%s)" % (f1, f2) 992 s = getScenario("RiLSA1", {}) 993 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 994 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 995 nStreams = [] 996 for stream in s.demand.streams: 997 if stream._departEdgeModel.startswith("nm"): 998 nStreams.extend( 999 extrapolateDemand(stream, 3600, cNS, 7).streams) 1000 elif stream._departEdgeModel.startswith("em"): 1001 nStreams.extend( 1002 extrapolateDemand(stream, 3600, cEW, 7).streams) 1003 elif stream._departEdgeModel.startswith("sm"): 1004 nStreams.extend( 1005 extrapolateDemand(stream, 3600, cSN, 7).streams) 1006 elif stream._departEdgeModel.startswith("wm"): 1007 nStreams.extend( 1008 extrapolateDemand(stream, 3600, cWE, 7).streams) 1009 else: 1010 print(stream._departEdgeModel) 1011 raise RuntimeError("Hmmm, unknown stream??") 1012 s.demand.streams = nStreams 1013 s.demand.addStream(demandGenerator.Stream( 1014 "p_emp_to_mw", 0, 86400, f1, "emp", "mw", {"pedestrian": 1})) 1015 s.demand.addStream(demandGenerator.Stream( 1016 "p_wmp_to_me", 0, 86400, f1, "wmp", "me", {"pedestrian": 1})) 1017 s.demand.addStream(demandGenerator.Stream( 1018 "p_nmp_to_ms", 0, 86400, f2, "nmp", "ms", {"pedestrian": 1})) 1019 s.demand.addStream(demandGenerator.Stream( 1020 "p_smp_to_mn", 0, 86400, f2, "smp", "mn", {"pedestrian": 1})) 1021 end = 86400 1022 sampleFactor = 1 1023 if "seen-ratio" in self.params: 1024 self.params["seen-ratio"] 1025 # , seenRatio) 1026 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 1027 desc = {"scenario": "RiLSA1PedFlow", "f1": str(f1), "f2": str(f2)} 1028 return s, desc, sID 1029 1030 def getRunsMatrix(self): 1031 ret = [] 1032 ranges = [[], []] 1033 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1034 ret.append([]) 1035 ranges[0].append(f1) 1036 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 1037 ret[-1].append({"f1": str(f1), "f2": str(f2), 1038 "scenario": "RiLSA1PedFlow"}) 1039 ranges[-1].append(f2) 1040 return (ret, ranges) 1041 1042 def getAverageDuration(self): 1043 return -1 # !!! 1044 1045 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1046 # adapt tls to current settings 1047 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1048 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1049 fdo.write("<additional>\n") 1050 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1051 for tlsID in net._id2tls: 1052 1053 tls = net._id2tls[tlsID] 1054 if tlsID == "0": 1055 (streamsNS, streamsWE) = scenario.getOppositeFlows() 1056 streamsNS[0] = 34 1057 streamsWE[0] = 38 1058 ns = 340. / (720.) 1059 we = 380. / (720.) 1060 greens = split_by_proportions(72, (ns, we), (10, 10)) 1061 for prog in tls._programs: 1062 i1 = i2 = 0 1063 for i, p in enumerate(tls._programs[prog]._phases): 1064 if p[1] == 40: 1065 i1 = i 1066 elif p[1] == 12: 1067 i2 = i 1068 tls._programs[prog]._type = tls_algorithm 1069 self.addTLSParameterFromFile( 1070 tls._programs[prog], options.tls_params) 1071 tls._programs[prog]._phases[i1][1] = greens[1] 1072 tls._programs[prog]._phases[i2][1] = greens[0] 1073 tls._programs[prog]._id = "adapted" 1074 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 1075 fdo.write("</additional>\n") 1076 fdo.close() 1077 args = [] 1078 return args 1079 1080 def getXLabel(self): 1081 return "horizontal pedestrian flow [pedestrians/hour]" 1082 1083 def getYLabel(self): 1084 return "vertical pedestrian flow [pedestrians/hour]" 1085 1086 def getAdditionalDivider(self): 1087 return [] 1088 1089# -------------------------------------- 1090 1091 1092class ScenarioSet_RiLSA1PTIteration(ScenarioSet_RiLSA1LoadCurvesSampled): 1093 1094 def __init__(self, params): 1095 ScenarioSet.__init__(self, "RiLSA1PTIteration", merge( 1096 {"p1from": "120", "p1to": "1201", "p1step": "120", 1097 "p2from": "120", "p2to": "1201", "p2step": "120"}, 1098 params)) 1099 1100 def getNumRuns(self): 1101 p1num = 1 + \ 1102 (self.getInt("p1to") - self.getInt("p1from")) / \ 1103 self.getInt("p1step") 1104 p2num = 1 + \ 1105 (self.getInt("p2to") - self.getInt("p2from")) / \ 1106 self.getInt("p2step") 1107 return p1num * p2num 1108 """ 1109 Yields returning a built scenario and its description as key/value pairs 1110 """ 1111 1112 def iterateScenarios(self): 1113 # desc = {"name": "RiLSA1PedFlow"} 1114 RWScurves = getRWScurves() 1115 for p1 in range(self.getInt("p1from"), self.getInt("p1to"), self.getInt("p1step")): 1116 for p2 in range(self.getInt("p2from"), self.getInt("p2to"), self.getInt("p2step")): 1117 yield self.runSingle(RWScurves, p1, p2) 1118 1119 def runSingle(self, RWScurves, p1, p2, uID=None): 1120 cWE = RWScurves[0] 1121 cNS = RWScurves[1] 1122 cEW = RWScurves[2] 1123 cSN = RWScurves[1] 1124 print("Computing for %s %s" % (p1, p2)) 1125 sID = "RiLSA1PTIteration(%s-%s)" % (p1, p2) 1126 s = getScenario("RiLSA1", {}) 1127 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 1128 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 1129 nStreams = [] 1130 for stream in s.demand.streams: 1131 if stream._departEdgeModel.startswith("nm"): 1132 nStreams.extend( 1133 extrapolateDemand(stream, 3600, cNS, 7).streams) 1134 elif stream._departEdgeModel.startswith("em"): 1135 nStreams.extend( 1136 extrapolateDemand(stream, 3600, cEW, 7).streams) 1137 elif stream._departEdgeModel.startswith("sm"): 1138 nStreams.extend( 1139 extrapolateDemand(stream, 3600, cSN, 7).streams) 1140 elif stream._departEdgeModel.startswith("wm"): 1141 nStreams.extend( 1142 extrapolateDemand(stream, 3600, cWE, 7).streams) 1143 else: 1144 print(stream._departEdgeModel) 1145 raise RuntimeError("Hmmm, unknown stream??") 1146 s.demand.streams = nStreams 1147 1148 vehicles = [] 1149 for i in range(p1 / 2, 3600, p1): 1150 vehicles.append( 1151 demandGenerator.Vehicle("bus+p1#" + str(i), int(i), "emp", "mw", "bus")) 1152 vehicles.append( 1153 demandGenerator.Vehicle("bus-p1#" + str(i), int(i), "wmp", "me", "bus")) 1154 for i in range(p1 / 2, 3600, p1): 1155 vehicles.append( 1156 demandGenerator.Vehicle("bus+p2#" + str(i), int(i), "nmp", "ms", "bus")) 1157 vehicles.append( 1158 demandGenerator.Vehicle("bus-p2#" + str(i), int(i), "smp", "mw", "bus")) 1159 end = 86400 1160 sampleFactor = 1 1161 if "seen-ratio" in self.params: 1162 self.params["seen-ratio"] 1163 # , seenRatio) 1164 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 1165 desc = {"scenario": "RiLSA1PTIteration", 1166 "p1": str(p1), "p2": str(p2)} 1167 return s, desc, sID 1168 1169 def getRunsMatrix(self): 1170 ret = [] 1171 ranges = [[], []] 1172 for p1 in range(self.getInt("p1from"), self.getInt("p1to"), self.getInt("p1step")): 1173 ret.append([]) 1174 ranges[0].append(p1) 1175 for p2 in range(self.getInt("p2from"), self.getInt("p2to"), self.getInt("p2step")): 1176 ret[-1].append({"p1": str(p1), "p2": str(p2), 1177 "scenario": "RiLSA1PTIteration"}) 1178 ranges[-1].append(p2) 1179 return (ret, ranges) 1180 1181 def getAverageDuration(self): 1182 return -1 # !!! 1183 1184 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1185 # adapt tls to current settings 1186 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1187 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1188 fdo.write("<additional>\n") 1189 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1190 for tlsID in net._id2tls: 1191 1192 tls = net._id2tls[tlsID] 1193 if tlsID == "0": 1194 (streamsNS, streamsWE) = scenario.getOppositeFlows() 1195 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 1196 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 1197 greens = split_by_proportions(72, (ns, we), (10, 10)) 1198 for prog in tls._programs: 1199 i1 = i2 = 0 1200 for i, p in enumerate(tls._programs[prog]._phases): 1201 if p[1] == 40: 1202 i1 = i 1203 elif p[1] == 12: 1204 i2 = i 1205 tls._programs[prog]._type = tls_algorithm 1206 self.addTLSParameterFromFile( 1207 tls._programs[prog], options.tls_params) 1208 tls._programs[prog]._phases[i1][1] = greens[1] 1209 tls._programs[prog]._phases[i2][1] = greens[0] 1210 tls._programs[prog]._id = "adapted" 1211 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 1212 fdo.write("</additional>\n") 1213 fdo.close() 1214 args = [] 1215 return args 1216 1217 def getXLabel(self): 1218 return "pt period [s]" 1219 1220 def getYLabel(self): 1221 return "pt period [s]" 1222 1223 def getAdditionalDivider(self): 1224 return [] 1225 1226 def orientationX(self): 1227 return 90 1228 1229 def halfX(self): 1230 return False 1231# def figsize(self): 1232# return 8,6 1233 1234 def adjust(self, fig): 1235 fig.subplots_adjust(bottom=0.2) 1236 1237# -------------------------------------- 1238 1239 1240class ScenarioSet_SinSinDemand(ScenarioSet): 1241 MEAN = 700. 1242 AMPLITUDE = 300. 1243 1244 def __init__(self, params): 1245 ScenarioSet.__init__(self, "SinSinDemand", merge( 1246 {"offsetFrom": "0", "offsetTo": "6.28", "offsetStep": ".628", 1247 "freqFrom": "0", "freqTo": "21", "freqStep": "2"}, 1248 params)) 1249 self.offsets = [] 1250 offset = self.getFloat("offsetFrom") 1251 while offset < self.getFloat("offsetTo"): 1252 self.offsets.append(offset) 1253 offset = offset + self.getFloat("offsetStep") 1254 self.frequencies = [] 1255 frequency = self.getFloat("freqFrom") 1256 while frequency < self.getFloat("freqTo"): 1257 self.frequencies.append(frequency) 1258 frequency = frequency + self.getFloat("freqStep") 1259 1260 def getNumRuns(self): 1261 return len(self.offsets) * len(self.frequencies) 1262 1263 def genDemand(self, scenario, simSteps, offset, frequency): 1264 # fd = tempfile.NamedTemporaryFile(mode="w", delete=False) 1265 fd = open(scenario.demandName, "w") 1266 # ---routes--- 1267 print("""<routes> 1268 <route id="WE" edges="0/1_to_1/1 0/1_to_1/1.-100 1/1_to_2/1"/> 1269 <route id="NS" edges="1/2_to_1/1 1/2_to_1/1.-100 1/1_to_1/0"/> 1270 <route id="EW" edges="2/1_to_1/1 2/1_to_1/1.-100 1/1_to_0/1"/> 1271 <route id="SN" edges="1/0_to_1/1 1/0_to_1/1.-100 1/1_to_1/2"/> 1272 """, file=fd) 1273 pv1 = 0 1274 pv2 = 0 1275 vehNr = 0 1276 o1 = 0 1277 o2 = offset 1278 for i in range(simSteps): 1279 v = math.sin(o1) * self.AMPLITUDE + self.MEAN 1280 v = v / 3600. 1281 pv1 = v + pv1 1282 if random.uniform(0, 1) < pv1: 1283 pv1 = pv1 - 1. 1284 print(' <vehicle id="%i" type="passenger" route="WE" depart="%i" departSpeed="13.89" />' % ( 1285 vehNr, i), file=fd) 1286 vehNr += 1 1287 print(' <vehicle id="%i" type="passenger" route="EW" depart="%i" departSpeed="13.89" />' % ( 1288 vehNr, i), file=fd) 1289 vehNr += 1 1290 v = math.sin(o2) * self.AMPLITUDE + self.MEAN 1291 v = v / 3600. 1292 pv2 = v + pv2 1293 if random.uniform(0, 1) < pv2: 1294 pv2 = pv2 - 1. 1295 print(' <vehicle id="%i" type="passenger" route="NS" depart="%i" departSpeed="13.89" />' % ( 1296 vehNr, i), file=fd) 1297 vehNr += 1 1298 print(' <vehicle id="%i" type="passenger" route="SN" depart="%i" departSpeed="13.89" />' % ( 1299 vehNr, i), file=fd) 1300 vehNr += 1 1301 if frequency != 0: 1302 o1 = o1 + ((math.pi * 2) / (180 * frequency)) 1303 o2 = o2 + ((math.pi * 2) / (180 * frequency)) 1304 1305 print("</routes>", file=fd) 1306 fd.close() 1307 # duarouter = sumolib.checkBinary("duarouter") 1308 # retCode = subprocess.call([duarouter, "-v", "-n", scenario.netName, "-t", fd.name, "-o", scenario.demandName, 1309 # "--no-warnings"]) # aeh, implizite no-warnings sind nicht schoen 1310 # os.remove(fd.name) 1311 """ 1312 Yields returning a built scenario and its description as key/value pairs 1313 """ 1314 1315 def iterateScenarios(self): 1316 desc = {"name": "SinSinDemand"} 1317 for offset in self.offsets: 1318 for freq in self.frequencies: 1319 print("Computing for %s<->%s" % (offset, freq)) 1320 sID = "SinSinDemand(%s-%s)" % (offset, freq) 1321 s = getScenario("BasicCross", {}, False) 1322 s.demandName = s.fullPath("routes_%s.rou.xml" % (sID)) 1323 if fileNeedsRebuild(s.demandName, "duarouter"): 1324 self.genDemand(s, 3600, offset, freq) 1325 desc = {"scenario": "SinSinDemand", 1326 "offset": str(offset), "frequency": str(freq)} 1327 yield s, desc, sID 1328 1329 def getRunsMatrix(self): 1330 ret = [] 1331 ranges = [[], []] 1332 for offset in self.offsets: 1333 ret.append([]) 1334 ranges[0].append(offset) 1335 for freq in self.frequencies: 1336 ret[-1].append({"scenario": "SinSinDemand", 1337 "offset": str(offset), "frequency": str(freq)}) 1338 ranges[1].append(freq) 1339 return (ret, ranges) 1340 1341 def getAverageDuration(self): 1342 return -1 # !!! 1343 1344 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1345 # adapt tls to current settings 1346 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1347 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1348 fdo.write("<additional>\n") 1349 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1350 for tlsID in net._id2tls: 1351 tls = net._id2tls[tlsID] 1352 for prog in tls._programs: 1353 tls._programs[prog]._type = tls_algorithm 1354 tls._programs[prog]._id = "adapted" 1355 self.addTLSParameterFromFile( 1356 tls._programs[prog], options.tls_params) 1357 fdo.write(tls._programs[prog].toXML(tlsID)) 1358 fdo.write("</additional>\n") 1359 fdo.close() 1360 args = [] 1361 return args 1362 1363 def getXLabel(self): 1364 return "offset" 1365 1366 def getYLabel(self): 1367 return "frequency [s]" 1368 1369# -------------------------------------- 1370 1371 1372class ScenarioSet_OneSinDemand(ScenarioSet): 1373 MAIN_FLOW = 1000. 1374 1375 def __init__(self, params): 1376 ScenarioSet.__init__(self, "OneSinDemand", merge( 1377 {"amplFrom": "0", "amplTo": "1201", "amplStep": "200", 1378 "freqFrom": "0", "freqTo": "11", "freqStep": "1"}, 1379 params)) 1380 self.amplitudes = [] 1381 amplitude = self.getFloat("amplFrom") 1382 while amplitude < self.getFloat("amplTo"): 1383 self.amplitudes.append(amplitude) 1384 amplitude = amplitude + self.getFloat("amplStep") 1385 self.frequencies = [] 1386 frequency = self.getFloat("freqFrom") 1387 while frequency < self.getFloat("freqTo"): 1388 self.frequencies.append(frequency) 1389 frequency = frequency + self.getFloat("freqStep") 1390 1391 def getNumRuns(self): 1392 return len(self.amplitudes) * len(self.amplitudes) 1393 1394 def genDemand(self, scenario, simSteps, amplitude, frequency): 1395 # fd = tempfile.NamedTemporaryFile(mode="w", delete=False) 1396 fd = open(scenario.demandName, "w") 1397 # ---routes--- 1398 print("""<routes> 1399 <route id="WE" edges="0/1_to_1/1 0/1_to_1/1.-100 1/1_to_2/1"/> 1400 <route id="NS" edges="1/2_to_1/1 1/2_to_1/1.-100 1/1_to_1/0"/> 1401 <route id="EW" edges="2/1_to_1/1 2/1_to_1/1.-100 1/1_to_0/1"/> 1402 <route id="SN" edges="1/0_to_1/1 1/0_to_1/1.-100 1/1_to_1/2"/> 1403 """, file=fd) 1404 pv1 = 0 1405 vehNr = 0 1406 o1 = 0 1407 for i in range(simSteps): 1408 v = math.sin(o1) * amplitude + 600. 1409 v = v / 3600. 1410 pv1 = v + pv1 1411 if random.uniform(0, 1) < pv1: 1412 pv1 = pv1 - 1. 1413 print(' <vehicle id="%i" type="passenger" route="WE" depart="%i" departSpeed="13.89" />' % ( 1414 vehNr, i), file=fd) 1415 vehNr += 1 1416 print(' <vehicle id="%i" type="passenger" route="EW" depart="%i" departSpeed="13.89" />' % ( 1417 vehNr, i), file=fd) 1418 vehNr += 1 1419 if frequency != 0: 1420 o1 = o1 + ((math.pi * 2) / (180 * frequency)) 1421 pNS = float(self.MAIN_FLOW) / 3600 1422 pSN = float(self.MAIN_FLOW) / 3600 1423 if random.uniform(0, 1) < pNS: 1424 print(' <vehicle id="%i" type="passenger" route="NS" depart="%i" departSpeed="13.89" />' % ( 1425 vehNr, i), file=fd) 1426 vehNr += 1 1427 if random.uniform(0, 1) < pSN: 1428 print(' <vehicle id="%i" type="passenger" route="SN" depart="%i" departSpeed="13.89" />' % ( 1429 vehNr, i), file=fd) 1430 vehNr += 1 1431 1432 print("</routes>", file=fd) 1433 fd.close() 1434 1435 """ 1436 Yields returning a built scenario and its description as key/value pairs 1437 """ 1438 1439 def iterateScenarios(self): 1440 desc = {"name": "OneSinDemand"} 1441 for amplitude in self.amplitudes: 1442 for freq in self.frequencies: 1443 print("Computing for %s<->%s" % (amplitude, freq)) 1444 sID = "OneSinDemand(%s-%s)" % (amplitude, freq) 1445 s = getScenario("BasicCross", {}, False) 1446 s.demandName = s.fullPath("routes_%s.rou.xml" % (sID)) 1447 if fileNeedsRebuild(s.demandName, "duarouter"): 1448 self.genDemand(s, 3600, amplitude, freq) 1449 desc = {"scenario": "OneSinDemand", "amplitude": str( 1450 amplitude), "frequency": str(freq)} 1451 yield s, desc, sID 1452 1453 def getRunsMatrix(self): 1454 ret = [] 1455 ranges = [[], []] 1456 for amplitude in self.amplitudes: 1457 ret.append([]) 1458 ranges[0].append(amplitude) 1459 for freq in self.frequencies: 1460 ret[-1].append({"scenario": "OneSinDemand", 1461 "amplitude": str(amplitude), "frequency": str(freq)}) 1462 ranges[1].append(freq) 1463 return (ret, ranges) 1464 1465 def getAverageDuration(self): 1466 return -1 # !!! 1467 1468 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1469 # adapt tls to current settings 1470 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1471 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1472 fdo.write("<additional>\n") 1473 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1474 for tlsID in net._id2tls: 1475 tls = net._id2tls[tlsID] 1476 for prog in tls._programs: 1477 tls._programs[prog]._type = tls_algorithm 1478 tls._programs[prog]._id = "adapted" 1479 self.addTLSParameterFromFile( 1480 tls._programs[prog], options.tls_params) 1481 fdo.write(tls._programs[prog].toXML(tlsID)) 1482 fdo.write("</additional>\n") 1483 fdo.close() 1484 args = [] 1485 return args 1486 1487 def getXLabel(self): 1488 return "!!!amplitude" 1489 1490 def getYLabel(self): 1491 return "frequency [s]" 1492 1493# -------------------------------------- 1494 1495 1496class ScenarioSet_DemandStep(ScenarioSet): 1497 1498 def __init__(self, params): 1499 ScenarioSet.__init__(self, "DemandStep", merge( 1500 {"f1from": "0", "f1to": "2400", "f1step": "600", 1501 "f2beginFrom": "0", "f2beginTo": "2400", "f2beginStep": "600", 1502 "f2endFrom": "0", "f2endTo": "2400", "f2endStep": "600", 1503 "f2durationFrom": "0", "f2durationTo": "3601", "f2durationStep": "900", 1504 }, 1505 params)) 1506 1507 def getNumRuns(self): 1508 f1num = 1 + \ 1509 (self.getInt("f1to") - self.getInt("f1from")) / \ 1510 self.getInt("f1step") 1511 f2beginNum = 1 + (self.getInt("f2beginTo") - 1512 self.getInt("f2beginFrom")) / self.getInt("f2beginStep") 1513 f2endNum = 1 + \ 1514 (self.getInt("f2endTo") - self.getInt("f2endFrom")) / \ 1515 self.getInt("f2endStep") 1516 f2durationNum = 1 + (self.getInt("f2durationTo") - 1517 self.getInt("f2durationFrom")) / self.getInt("f2durationStep") 1518 return f1num * f2beginNum * f2endNum * f2durationNum 1519 1520 def iterateScenarios(self): 1521 desc = {"name": "iterateFlowsNA"} 1522 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1523 for f2begin in range(self.getInt("f2beginFrom"), self.getInt("f2beginTo"), self.getInt("f2beginStep")): 1524 for f2end in range(self.getInt("f2endFrom"), self.getInt("f2endTo"), self.getInt("f2endStep")): 1525 for f2duration in range( 1526 self.getInt("f2durationFrom"), self.getInt("f2durationTo"), self.getInt("f2durationStep")): 1527 if f1 == 0 and f2begin == 0 and f2end == 0: 1528 continue 1529 print("Computing for %s<->%s->%s@%s" % 1530 (f1, f2begin, f2end, f2duration)) 1531 sID = "DemandStep(%s-%s-%s-%s)" % (f1, 1532 f2begin, f2end, f2duration) 1533 s = getScenario("BasicCross", {}, False) 1534 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 1535 # fileNeedsRebuild(s.demandName, "duarouter"): 1536 if True: 1537 hd = f2duration / 2 1538 s.demand = demandGenerator.Demand() 1539 # why isn't it possible to get a network and return 1540 # all possible routes or whatever - to ease the 1541 # process 1542 s.demand.addStream(demandGenerator.Stream( 1543 None, 0, 7200, f1, "2/1_to_1/1", "1/1_to_0/1", {"passenger": 1})) 1544 # why isn't it possible to get a network and return 1545 # all possible routes or whatever - to ease the 1546 # process 1547 s.demand.addStream(demandGenerator.Stream( 1548 None, 0, 7200, f1, "0/1_to_1/1", "1/1_to_2/1", {"passenger": 1})) 1549 # begin 1550 # why isn't it possible to get a network and return 1551 # all possible routes or whatever - to ease the 1552 # process 1553 s.demand.addStream(demandGenerator.Stream( 1554 None, 0, 3600 - hd, f2begin, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 1555 # why isn't it possible to get a network and return 1556 # all possible routes or whatever - to ease the 1557 # process 1558 s.demand.addStream(demandGenerator.Stream( 1559 None, 0, 3600 - hd, f2begin, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 1560 # between 1561 for t in range(0, f2duration, 300): 1562 fat = (f2end - f2begin) / \ 1563 f2duration * (t + 150) 1564 # why isn't it possible to get a network and 1565 # return all possible routes or whatever - to 1566 # ease the process 1567 s.demand.addStream(demandGenerator.Stream( 1568 None, 3600 - hd + t, 3600 - hd + t + 300, fat, "1/2_to_1/1", "1/1_to_1/0", 1569 {"passenger": 1})) 1570 # why isn't it possible to get a network and 1571 # return all possible routes or whatever - to 1572 # ease the process 1573 s.demand.addStream(demandGenerator.Stream( 1574 None, 3600 - hd + t, 3600 - hd + t + 300, fat, "1/0_to_1/1", "1/1_to_1/2", 1575 {"passenger": 1})) 1576 # end 1577 # why isn't it possible to get a network and return 1578 # all possible routes or whatever - to ease the 1579 # process 1580 s.demand.addStream(demandGenerator.Stream( 1581 None, 3600 + hd, 7200, f2end, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 1582 # why isn't it possible to get a network and return 1583 # all possible routes or whatever - to ease the 1584 # process 1585 s.demand.addStream(demandGenerator.Stream( 1586 None, 3600 + hd, 7200, f2end, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 1587 s.demand.build(0, 7200, s.netName, s.demandName) 1588 # !!! the following two lines are a hack to pass the numbers instead of recomputing them 1589 s.demand._f1Value = f1 1590 s.demand._f2Value = (f2begin + f2end) / 2. 1591 desc = {"scenario": "DemandStep", "f1": str(f1), "f2begin": str( 1592 f2begin), "f2end": str(f2end), "f2duration": str(f2duration)} 1593 yield s, desc, sID 1594 1595 def getRunsMatrix(self): 1596 ret = [] 1597 ranges = [[], []] 1598 getRWScurves() 1599 i = 0 1600 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1601 for f2begin in range(self.getInt("f2beginFrom"), self.getInt("f2beginTo"), self.getInt("f2beginStep")): 1602 ret.append([]) 1603 ranges[0].append("%s/%s" % (f1, f2begin)) 1604 i = i + 1 1605 j = 0 1606 for f2end in range(self.getInt("f2endFrom"), self.getInt("f2endTo"), self.getInt("f2endStep")): 1607 for f2duration in range( 1608 self.getInt("f2durationFrom"), self.getInt("f2durationTo"), self.getInt("f2durationStep")): 1609 ret[-1].append({"f1": str(f1), "f2begin": str(f2begin), "f2end": str( 1610 f2end), "f2duration": str(f2duration), "scenario": "DemandStep"}) 1611 ranges[-1].append("%s/%s" % (f2end, f2duration)) 1612 j = j + 1 1613 return (ret, ranges) 1614 1615 def getAverageDuration(self): 1616 return -1 # !!! 1617 1618 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1619 # adapt tls to current settings 1620 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1621 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1622 fdo.write("<additional>\n") 1623 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1624 for tlsID in net._id2tls: 1625 tls = net._id2tls[tlsID] 1626 for prog in tls._programs: 1627 tls._programs[prog]._type = tls_algorithm 1628 tls._programs[prog]._id = "adapted" 1629 self.addTLSParameterFromFile( 1630 tls._programs[prog], options.tls_params) 1631 scenario.demand._f1Value = float( 1632 max(scenario.demand._f1Value, 1)) 1633 scenario.demand._f2Value = float( 1634 max(scenario.demand._f2Value, 1)) 1635 t = scenario.demand._f1Value + scenario.demand._f2Value 1636 greens = split_by_proportions( 1637 80, (scenario.demand._f1Value / t, scenario.demand._f2Value / t), (10, 10)) 1638 tls._programs[prog]._phases[0][1] = greens[0] 1639 tls._programs[prog]._phases[3][1] = greens[1] 1640 fdo.write(tls._programs[prog].toXML(tlsID)) 1641 fdo.write("</additional>\n") 1642 fdo.close() 1643 args = [] 1644 return args 1645 1646 def getXLabel(self): 1647 return "initial flow#1 [veh/h] / initial flow#2 [veh/h]" 1648 1649 def getYLabel(self): 1650 return "final flow#2 [veh/h] /\nchange duration [s]" 1651 1652 def getAdditionalDivider(self): 1653 f1num = (self.getInt("f1to") - self.getInt("f1from")) / \ 1654 self.getInt("f1step") 1655 f2beginNum = (self.getInt("f2beginTo") - 1656 self.getInt("f2beginFrom")) / self.getInt("f2beginStep") 1657 f2endNum = ( 1658 self.getInt("f2endTo") - self.getInt("f2endFrom")) / self.getInt("f2endStep") 1659 f2durationNum = 1 + (self.getInt("f2durationTo") - 1660 self.getInt("f2durationFrom")) / self.getInt("f2durationStep") 1661 ret = [] 1662 xMax = f1num * f2beginNum - .5 1663 yMax = f2durationNum * f2endNum - .5 1664 for f2begin in range(1, f2beginNum): 1665 x = f2begin * f1num - .5 1666 ret.append([x, -0.5, x, yMax]) 1667 # for f2begin in range(self.getInt("f2beginFrom"), 1668 # self.getInt("f2beginTo"), self.getInt("f2beginStep")): 1669 for f2end in range(1, f2endNum): 1670 # for f2duration in range(self.getInt("f2durationFrom"), 1671 # self.getInt("f2durationTo"), self.getInt("f2durationStep")): 1672 y = f2durationNum * f2end - .5 1673 ret.append([-0.5, y, xMax, y]) 1674 return ret 1675 1676 def halfX(self): 1677 return False 1678 1679 def orientationX(self): 1680 return 90 1681 1682 def ticksSize(self): 1683 return 12 1684 1685 def figsize(self): 1686 return 8, 8 1687 1688 def adjust(self, fig): 1689 fig.subplots_adjust(bottom=0.2, left=0.2) 1690 1691 1692# -------------------------------------- 1693 1694class ScenarioSet_CorrFlowsDistancesA(ScenarioSet): 1695 1696 def __init__(self, params): 1697 ScenarioSet.__init__(self, "CorrFlowsDistancesA", merge( 1698 {"f1from": "0", "f1to": "2400", "f1step": "400", 1699 "f2from": "0", "f2to": "2400", "f2step": "400", 1700 "d1from": "300", "d1to": "1000", "d1step": "100"}, 1701 params)) 1702 1703 def getNumRuns(self): 1704 f1num = 1 + \ 1705 (self.getInt("f1to") - self.getInt("f1from")) / \ 1706 self.getInt("f1step") 1707 f2num = 1 + \ 1708 (self.getInt("f2to") - self.getInt("f2from")) / \ 1709 self.getInt("f2step") 1710 d1num = 1 + \ 1711 (self.getInt("d1to") - self.getInt("d1from")) / \ 1712 self.getInt("d1step") 1713 return f1num * f2num * d1num 1714 1715 def iterateScenarios(self): 1716 desc = {"name": "CorrFlowsDistancesA"} 1717 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1718 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 1719 for d1 in range(self.getInt("d1from"), self.getInt("d1to"), self.getInt("d1step")): 1720 if f1 == 0 and f2 == 0: 1721 continue 1722 print("Computing for %s<->%s %s" % (f1, f2, d1)) 1723 sID = "CorrFlowsDistancesA(%s-%s-%s)" % (f1, f2, d1) 1724 s = getScenario("BasicCorridor", {"xoff": d1}, False) 1725 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 1726 if fileNeedsRebuild(s.demandName, "duarouter"): 1727 s.demand = demandGenerator.Demand() 1728 # why isn't it possible to get a network and return all 1729 # possible routes or whatever - to ease the process 1730 s.demand.addStream(demandGenerator.Stream( 1731 None, 0, 3600, f1, "6/1_to_5/1", "1/1_to_0/1", {"passenger": 1})) 1732 # why isn't it possible to get a network and return all 1733 # possible routes or whatever - to ease the process 1734 s.demand.addStream(demandGenerator.Stream( 1735 None, 0, 3600, f1, "0/1_to_1/1", "5/1_to_6/1", {"passenger": 1})) 1736 for i in range(1, 6): 1737 # why isn't it possible to get a network and return 1738 # all possible routes or whatever - to ease the 1739 # process 1740 s.demand.addStream(demandGenerator.Stream( 1741 None, 0, 3600, f2, "%s/2_to_%s/1" % (i, i), "%s/1_to_%s/0" % (i, i), {"passenger": 1})) 1742 # why isn't it possible to get a network and return 1743 # all possible routes or whatever - to ease the 1744 # process 1745 s.demand.addStream(demandGenerator.Stream( 1746 None, 0, 3600, f2, "%s/0_to_%s/1" % (i, i), "%s/1_to_%s/2" % (i, i), {"passenger": 1})) 1747 s.demand.build(0, 3600, s.netName, s.demandName) 1748 # !!! the following two lines are a hack to pass the numbers instead of recomputing them 1749 s.demand._f1Value = f1 1750 s.demand._f2Value = f2 1751 desc = {"scenario": "CorrFlowsDistancesA", 1752 "f1": str(f1), "f2": str(f2), "d1": str(d1)} 1753 yield s, desc, sID 1754 1755 def getRunsMatrix(self): 1756 ret = [] 1757 ranges = [[], []] 1758 getRWScurves() 1759 i = 0 1760 for d1 in range(self.getInt("d1from"), self.getInt("d1to"), self.getInt("d1step")): 1761 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1762 ret.append([]) 1763 ranges[0].append("%s/%s" % (d1, f1)) 1764 i = i + 1 1765 j = 0 1766 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 1767 ret[-1].append({"f1": str(f1), "f2": str(f2), 1768 "d1": str(d1), "scenario": "CorrFlowsDistancesA"}) 1769 ranges[-1].append(f2) 1770 j = j + 1 1771 return (ret, ranges) 1772 1773 def getAverageDuration(self): 1774 return -1 # !!! 1775 1776 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1777 # adapt tls to current settings 1778 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1779 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1780 fdo.write("<additional>\n") 1781 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1782 for tlsID in net._id2tls: 1783 tls = net._id2tls[tlsID] 1784 for prog in tls._programs: 1785 tls._programs[prog]._type = tls_algorithm 1786 tls._programs[prog]._id = "adapted" 1787 self.addTLSParameterFromFile( 1788 tls._programs[prog], options.tls_params) 1789 scenario.demand._f1Value = float( 1790 max(scenario.demand._f1Value, 1)) 1791 scenario.demand._f2Value = float( 1792 max(scenario.demand._f2Value, 1)) 1793 t = scenario.demand._f1Value + scenario.demand._f2Value 1794 greens = split_by_proportions( 1795 80, (scenario.demand._f1Value / t, scenario.demand._f2Value / t), (10, 10)) 1796 tls._programs[prog]._phases[0][1] = greens[0] 1797 tls._programs[prog]._phases[3][1] = greens[1] 1798 fdo.write(tls._programs[prog].toXML(tlsID)) 1799 fdo.write("</additional>\n") 1800 fdo.close() 1801 args = [] 1802 return args 1803 1804 def getXLabel(self): 1805 return "distance [m] / flow#1 [veh/h]" 1806 1807 def getYLabel(self): 1808 return "flow#2 [veh/h]" 1809 1810 def figsize(self): 1811 return 10, 4 1812 1813 def orientationX(self): 1814 return 90 1815 1816 def ticksSize(self): 1817 return 12 1818 1819 def halfX(self): 1820 return False 1821 1822 def getAdditionalDivider(self): 1823 ret = [] 1824 for i in range(1, 7): 1825 ret.append([i * 6 - .5, -0.5, i * 6 - .5, 5.5]) 1826 return ret 1827 1828 def adjust(self, fig): 1829 fig.subplots_adjust(bottom=0.2) 1830 1831# -------------------------------------- 1832 1833 1834class ScenarioSet_NetFlowsDistancesA(ScenarioSet): 1835 1836 def __init__(self, params): 1837 ScenarioSet.__init__(self, "NetFlowsDistancesA", merge( 1838 {"f1from": "0", "f1to": "2401", "f1step": "800", 1839 "f2from": "0", "f2to": "2401", "f2step": "800", 1840 "oFrom": "0", "oTo": "3.14", "oStep": ".315"}, 1841 params)) 1842 self.offsets = [] 1843 offset = self.getFloat("oFrom") 1844 while offset < self.getFloat("oTo"): 1845 self.offsets.append(offset) 1846 offset = offset + self.getFloat("oStep") 1847 1848 def getNumRuns(self): 1849 f1num = 1 + \ 1850 (self.getInt("f1to") - self.getInt("f1from")) / \ 1851 self.getInt("f1step") 1852 f2num = 1 + \ 1853 (self.getInt("f2to") - self.getInt("f2from")) / \ 1854 self.getInt("f2step") 1855 return f1num * f2num * len(self.offsets) 1856 1857 def iterateScenarios(self): 1858 desc = {"name": "NetFlowsDistancesA"} 1859 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1860 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 1861 for o in self.offsets: 1862 if f1 == 0 and f2 == 0: 1863 continue 1864 print("Computing for %s %s<->%s" % (o, f1, f2)) 1865 sID = "NetFlowsDistancesA(%s-%s-%s)" % (f1, f2, o) 1866 s = getScenario("BasicNet", {"rot": o}, False) 1867 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 1868 if fileNeedsRebuild(s.demandName, "duarouter"): 1869 s.demand = demandGenerator.Demand() 1870 for i in range(1, 6): 1871 # why isn't it possible to get a network and return 1872 # all possible routes or whatever - to ease the 1873 # process 1874 s.demand.addStream(demandGenerator.Stream( 1875 None, 0, 3600, f1, "6/%s_to_5/%s" % (i, i), "1/%s_to_0/%s" % (i, i), {"passenger": 1})) 1876 # why isn't it possible to get a network and return 1877 # all possible routes or whatever - to ease the 1878 # process 1879 s.demand.addStream(demandGenerator.Stream( 1880 None, 0, 3600, f1, "0/%s_to_1/%s" % (i, i), "5/%s_to_6/%s" % (i, i), {"passenger": 1})) 1881 for i in range(1, 6): 1882 # why isn't it possible to get a network and return 1883 # all possible routes or whatever - to ease the 1884 # process 1885 s.demand.addStream(demandGenerator.Stream( 1886 None, 0, 3600, f2, "%s/6_to_%s/5" % (i, i), "%s/1_to_%s/0" % (i, i), {"passenger": 1})) 1887 # why isn't it possible to get a network and return 1888 # all possible routes or whatever - to ease the 1889 # process 1890 s.demand.addStream(demandGenerator.Stream( 1891 None, 0, 3600, f2, "%s/0_to_%s/1" % (i, i), "%s/5_to_%s/6" % (i, i), {"passenger": 1})) 1892 s.demand.build(0, 3600, s.netName, s.demandName) 1893 # !!! the following two lines are a hack to pass the numbers instead of recomputing them 1894 s.demand._f1Value = f1 1895 s.demand._f2Value = f2 1896 desc = {"scenario": "NetFlowsDistancesA", 1897 "f1": str(f1), "f2": str(f2), "o": str(o)} 1898 yield s, desc, sID 1899 1900 def getRunsMatrix(self): 1901 ret = [] 1902 ranges = [[], []] 1903 for o in self.offsets: 1904 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1905 ret.append([]) 1906 ranges[0].append("%s/%s" % (o, f1)) 1907 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 1908 ret[-1].append({"scenario": "NetFlowsDistancesA", 1909 "f1": str(f1), "f2": str(f2), "o": str(o)}) 1910 ranges[1].append("%s" % f2) 1911 return (ret, ranges) 1912 1913 def getAverageDuration(self): 1914 return -1 # !!! 1915 1916 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1917 # adapt tls to current settings 1918 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1919 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1920 fdo.write("<additional>\n") 1921 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1922 for tlsID in net._id2tls: 1923 tls = net._id2tls[tlsID] 1924 for prog in tls._programs: 1925 tls._programs[prog]._type = tls_algorithm 1926 tls._programs[prog]._id = "adapted" 1927 self.addTLSParameterFromFile( 1928 tls._programs[prog], options.tls_params) 1929 scenario.demand._f1Value = float( 1930 max(scenario.demand._f1Value, 1)) 1931 scenario.demand._f2Value = float( 1932 max(scenario.demand._f2Value, 1)) 1933 t = scenario.demand._f1Value + scenario.demand._f2Value 1934 greens = split_by_proportions( 1935 80, (scenario.demand._f1Value / t, scenario.demand._f2Value / t), (10, 10)) 1936 tls._programs[prog]._phases[0][1] = greens[0] 1937 tls._programs[prog]._phases[3][1] = greens[1] 1938 fdo.write(tls._programs[prog].toXML(tlsID)) 1939 fdo.write("</additional>\n") 1940 fdo.close() 1941 args = [] 1942 return args 1943 1944 def getXLabel(self): 1945 return "offset [m] / flow#1 [vehicles/h]" 1946 1947 def getYLabel(self): 1948 return "flow#2 [vehicles/h]" 1949 1950 def figsize(self): 1951 return 10, 4 1952 1953 def orientationX(self): 1954 return 90 1955 1956 def ticksSize(self): 1957 return 12 1958 1959 def halfX(self): 1960 return False 1961 1962 def getAdditionalDivider(self): 1963 ret = [] 1964 for i in range(1, 10): 1965 ret.append([i * 4 - .5, -0.5, i * 4 - .5, 3.5]) 1966 return ret 1967 1968# -------------------------------------- 1969 1970 1971class ScenarioSet_TurnIteration(ScenarioSet): 1972 MAIN_FLOW = 800 1973 1974 def __init__(self, params): 1975 ScenarioSet.__init__(self, "TurnIteration", merge( 1976 {"rightFrom": "0", "rightTo": "51", "rightStep": "10", 1977 "leftFrom": "0", "leftTo": "51", "leftStep": "10"}, 1978 params)) 1979 1980 def getNumRuns(self): 1981 f1num = 1 + \ 1982 (self.getInt("rightFrom") - self.getInt("rightTo")) / \ 1983 self.getInt("rightStep") 1984 f2num = 1 + \ 1985 (self.getInt("leftFrom") - self.getInt("leftTo")) / \ 1986 self.getInt("leftStep") 1987 return f1num * f2num 1988 1989 def iterateScenarios(self): 1990 """ 1991 Yields returning a built scenario and its description as key/value pairs 1992 """ 1993 desc = {"name": "TurnIteration"} 1994 for right in range(self.getInt("rightFrom"), self.getInt("rightTo"), self.getInt("rightStep")): 1995 for left in range(self.getInt("leftFrom"), self.getInt("leftTo"), self.getInt("leftStep")): 1996 print("Computing for %s<->%s" % (right, left)) 1997 sID = "TurnIteration(%s-%s)" % (right, left) 1998 s = getScenario("BasicCrossL", {}, False) 1999 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 2000 if fileNeedsRebuild(s.demandName, "duarouter"): 2001 s.demand = demandGenerator.Demand() 2002 aL = float(left) / 100. 2003 aR = float(right) / 100. 2004 if aR != 0: 2005 # why isn't it possible to get a network and return all 2006 # possible routes or whatever - to ease the process 2007 s.demand.addStream(demandGenerator.Stream( 2008 None, 0, 3600, self.MAIN_FLOW * aR, "2/1_to_1/1", "1/1_to_1/2", {"passenger": 1})) 2009 if aL != 0: 2010 # why isn't it possible to get a network and return all 2011 # possible routes or whatever - to ease the process 2012 s.demand.addStream(demandGenerator.Stream( 2013 None, 0, 3600, self.MAIN_FLOW * aL, "2/1_to_1/1", "1/1_to_1/0", {"passenger": 1})) 2014 if (1. - aR - aL) != 0: 2015 # why isn't it possible to get a network and return all 2016 # possible routes or whatever - to ease the process 2017 s.demand.addStream(demandGenerator.Stream( 2018 None, 0, 3600, self.MAIN_FLOW * (1. - aR - aL), "2/1_to_1/1", "1/1_to_0/1", 2019 {"passenger": 1})) 2020 # why isn't it possible to get a network and return all 2021 # possible routes or whatever - to ease the process 2022 s.demand.addStream(demandGenerator.Stream( 2023 None, 0, 3600, self.MAIN_FLOW, "0/1_to_1/1", "1/1_to_2/1", {"passenger": 1})) 2024 2025 # why isn't it possible to get a network and return all 2026 # possible routes or whatever - to ease the process 2027 s.demand.addStream(demandGenerator.Stream( 2028 None, 0, 3600, self.MAIN_FLOW, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 2029 # why isn't it possible to get a network and return all 2030 # possible routes or whatever - to ease the process 2031 s.demand.addStream(demandGenerator.Stream( 2032 None, 0, 3600, self.MAIN_FLOW, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 2033 s.demand.build(0, 3600, s.netName, s.demandName) 2034 desc = {"scenario": "TurnIteration", "r": str(right), "l": str(left)} 2035 yield s, desc, sID 2036 2037 def getRunsMatrix(self): 2038 ret = [] 2039 ranges = [[], []] 2040 for right in range(self.getInt("rightFrom"), self.getInt("rightTo"), self.getInt("rightStep")): 2041 ret.append([]) 2042 ranges[0].append(right) 2043 for left in range(self.getInt("leftFrom"), self.getInt("leftTo"), self.getInt("leftStep")): 2044 ret[-1].append({"scenario": "TurnIteration", 2045 "r": str(right), "l": str(left)}) 2046 ranges[1].append(left) 2047 return (ret, ranges) 2048 2049 def getAverageDuration(self): 2050 return -1 # !!! 2051 2052 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2053 # adapt tls to current settings 2054 scenario.addAdditionalFile( 2055 scenario.fullPath("tls_adapted_%s_%s" % (sID, tls_algorithm))) 2056 fdo = open( 2057 scenario.fullPath("tls_adapted_%s_%s.add.xml" % (sID, tls_algorithm)), "w") 2058 fdo.write("<additional>\n") 2059 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2060 for tlsID in net._id2tls: 2061 tls = net._id2tls[tlsID] 2062 for prog in tls._programs: 2063 tls._programs[prog]._type = tls_algorithm 2064 tls._programs[prog]._id = "adapted" 2065 self.addTLSParameterFromFile( 2066 tls._programs[prog], options.tls_params) 2067 fdo.write(tls._programs[prog].toXML(tlsID)) 2068 fdo.write("</additional>\n") 2069 fdo.close() 2070 args = [] 2071 return args 2072 2073 def getXLabel(self): 2074 return "right-turning ratio [%]" 2075 2076 def getYLabel(self): 2077 return "left-turning ratio [%]" 2078 2079# -------------------------------------- 2080 2081 2082class ScenarioSet_TurnIterationINIT(ScenarioSet): 2083 MAIN_FLOW = 800 2084 2085 def __init__(self, params): 2086 ScenarioSet.__init__(self, "TurnIteration", merge( 2087 {"rightFrom": "0", "rightTo": "51", "rightStep": "10", 2088 "leftFrom": "0", "leftTo": "51", "leftStep": "10"}, 2089 params)) 2090 2091 def getNumRuns(self): 2092 f1num = 1 + \ 2093 (self.getInt("rightFrom") - self.getInt("rightTo")) / \ 2094 self.getInt("rightStep") 2095 f2num = 1 + \ 2096 (self.getInt("leftFrom") - self.getInt("leftTo")) / \ 2097 self.getInt("leftStep") 2098 return f1num * f2num 2099 2100 """ 2101 Yields returning a built scenario and its description as key/value pairs 2102 """ 2103 2104 def iterateScenarios(self): 2105 desc = {"name": "TurnIteration"} 2106 for right in range(self.getInt("rightFrom"), self.getInt("rightTo"), self.getInt("rightStep")): 2107 for left in range(self.getInt("leftFrom"), self.getInt("leftTo"), self.getInt("leftStep")): 2108 print("Computing for %s<->%s" % (right, left)) 2109 sID = "TurnIteration(%s-%s)" % (right, left) 2110 s = getScenario("BasicCrossL", {}, False) 2111 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 2112 if fileNeedsRebuild(s.demandName, "duarouter"): 2113 s.demand = demandGenerator.Demand() 2114 aL = float(left) / 100. 2115 aR = float(right) / 100. 2116 if aR != 0: 2117 # why isn't it possible to get a network and return all 2118 # possible routes or whatever - to ease the process 2119 s.demand.addStream(demandGenerator.Stream( 2120 None, 0, 3600, self.MAIN_FLOW * aR, "2/1_to_1/1", "1/1_to_1/2", {"passenger": 1})) 2121 if aL != 0: 2122 # why isn't it possible to get a network and return all 2123 # possible routes or whatever - to ease the process 2124 s.demand.addStream(demandGenerator.Stream( 2125 None, 0, 3600, self.MAIN_FLOW * aL, "2/1_to_1/1", "1/1_to_1/0", {"passenger": 1})) 2126 if (1. - aR - aL) != 0: 2127 # why isn't it possible to get a network and return all 2128 # possible routes or whatever - to ease the process 2129 s.demand.addStream(demandGenerator.Stream( 2130 None, 0, 3600, self.MAIN_FLOW * (1. - aR - aL), "2/1_to_1/1", "1/1_to_0/1", 2131 {"passenger": 1})) 2132 2133 if aR != 0: 2134 # why isn't it possible to get a network and return all 2135 # possible routes or whatever - to ease the process 2136 s.demand.addStream(demandGenerator.Stream( 2137 None, 0, 3600, self.MAIN_FLOW * aR, "0/1_to_1/1", "1/1_to_1/0", {"passenger": 1})) 2138 if aL != 0: 2139 # why isn't it possible to get a network and return all 2140 # possible routes or whatever - to ease the process 2141 s.demand.addStream(demandGenerator.Stream( 2142 None, 0, 3600, self.MAIN_FLOW * aL, "0/1_to_1/1", "1/1_to_1/2", {"passenger": 1})) 2143 if (1. - aR - aL) != 0: 2144 # why isn't it possible to get a network and return all 2145 # possible routes or whatever - to ease the process 2146 s.demand.addStream(demandGenerator.Stream( 2147 None, 0, 3600, self.MAIN_FLOW * (1. - aR - aL), "0/1_to_1/1", "1/1_to_2/1", 2148 {"passenger": 1})) 2149 2150 # why isn't it possible to get a network and return all 2151 # possible routes or whatever - to ease the process 2152 s.demand.addStream(demandGenerator.Stream( 2153 None, 0, 3600, self.MAIN_FLOW, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 2154 # why isn't it possible to get a network and return all 2155 # possible routes or whatever - to ease the process 2156 s.demand.addStream(demandGenerator.Stream( 2157 None, 0, 3600, self.MAIN_FLOW, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 2158 s.demand.build(0, 3600, s.netName, s.demandName) 2159 desc = {"scenario": "TurnIteration", "r": str(right), "l": str(left)} 2160 yield s, desc, sID 2161 2162 def getRunsMatrix(self): 2163 ret = [] 2164 ranges = [[], []] 2165 for right in range(self.getInt("rightFrom"), self.getInt("rightTo"), self.getInt("rightStep")): 2166 ret.append([]) 2167 ranges[0].append(right) 2168 for left in range(self.getInt("leftFrom"), self.getInt("leftTo"), self.getInt("leftStep")): 2169 ret[-1].append({"scenario": "TurnIteration", 2170 "r": str(right), "l": str(left)}) 2171 ranges[1].append(left) 2172 return (ret, ranges) 2173 2174 def getAverageDuration(self): 2175 return -1 # !!! 2176 2177 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2178 # adapt tls to current settings 2179 scenario.addAdditionalFile( 2180 scenario.fullPath("tls_adapted_%s_%s" % (sID, tls_algorithm))) 2181 fdo = open( 2182 scenario.fullPath("tls_adapted_%s_%s.add.xml" % (sID, tls_algorithm)), "w") 2183 fdo.write("<additional>\n") 2184 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2185 for tlsID in net._id2tls: 2186 tls = net._id2tls[tlsID] 2187 for prog in tls._programs: 2188 tls._programs[prog]._type = tls_algorithm 2189 tls._programs[prog]._id = "adapted" 2190 self.addTLSParameterFromFile( 2191 tls._programs[prog], options.tls_params) 2192 fdo.write(tls._programs[prog].toXML(tlsID)) 2193 fdo.write("</additional>\n") 2194 fdo.close() 2195 args = [] 2196 return args 2197 2198 def getXLabel(self): 2199 return "right-turning ratio [%]" 2200 2201 def getYLabel(self): 2202 return "left-turning ratio [%]" 2203 2204# -------------------------------------- 2205 2206 2207class ScenarioSet_RealWorld(ScenarioSet): 2208 2209 def __init__(self, params): 2210 ScenarioSet.__init__(self, "RealWorld", merge( 2211 {"scaleFrom": "50", "scaleTo": "151", 2212 "scaleStep": "25", "which": "unknown"}, 2213 params)) 2214 print(params) 2215 print(self.params) 2216 2217 def getNumRuns(self): 2218 f1num = 1 + abs(self.getInt("scaleFrom") - 2219 self.getInt("scaleTo")) / self.getInt("scaleStep") 2220 return f1num 2221 2222 """ 2223 Yields returning a built scenario and its description as key/value pairs 2224 """ 2225 2226 def iterateScenarios(self): 2227 desc = {"name": "RealWorld"} 2228 which = self.params["which"] 2229 for scale in range(self.getInt("scaleFrom"), self.getInt("scaleTo"), self.getInt("scaleStep")): 2230 print("Computing for %s<->%s" % (which, scale)) 2231 sID = "RealWorld(%s-%s)" % (which, scale) 2232 s = getScenario("RealWorld", self.params) 2233 # s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 2234 desc = { 2235 "scenario": "RealWorld", "which": which, "scale": str(scale)} 2236 yield s, desc, sID 2237 2238 def getRunsMatrix(self): 2239 ret = [] 2240 ranges = [[], []] 2241 ret.append([]) 2242 ranges[0].append(self.params["which"]) 2243 for s in range(self.getInt("scaleFrom"), self.getInt("scaleTo"), self.getInt("scaleStep")): 2244 ret[-1].append({"scenario": "RealWorld", 2245 "which": self.params["which"], "scale": str(s)}) 2246 ranges[1].append(s) 2247 return (ret, ranges) 2248 2249 def getAverageDuration(self): 2250 return -1 # !!! 2251 2252 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2253 # adapt tls to current settings 2254 scenario.addAdditionalFile( 2255 scenario.fullPath("tls_adapted_%s_%s" % (sID, tls_algorithm))) 2256 fdo = open( 2257 scenario.fullPath("tls_adapted_%s_%s.add.xml" % (sID, tls_algorithm)), "w") 2258 fdo.write("<additional>\n") 2259 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2260 for tlsID in net._id2tls: 2261 tls = net._id2tls[tlsID] 2262 for prog in tls._programs: 2263 tls._programs[prog]._type = tls_algorithm 2264 tls._programs[prog]._id = "adapted" 2265 self.addTLSParameterFromFile( 2266 tls._programs[prog], options.tls_params) 2267 fdo.write(tls._programs[prog].toXML(tlsID)) 2268 fdo.write("</additional>\n") 2269 fdo.close() 2270 args = [] 2271 return args 2272 2273 def getXLabel(self): 2274 return "" 2275 2276 def getYLabel(self): 2277 return "demand scale [%]" 2278 2279 def figsize(self): 2280 return 3, 5 2281# def adjust(self, fig): 2282# fig.subplots_adjust(bottom=0.2) 2283 2284# -------------------------------------- 2285 2286 2287class ScenarioSet_RiLSA1LoadCurvesOutTLS(ScenarioSet): 2288 2289 def __init__(self, params): 2290 ScenarioSet.__init__(self, "RiLSA1LoadCurvesOutTLS", merge( 2291 {}, 2292 params)) 2293 if "other-green" not in self.params: 2294 self.params["other-green"] = 31 2295 2296 def getNumRuns(self): 2297 return 3 * 3 * 3 * 3 2298 """ 2299 Yields returning a built scenario and its description as key/value pairs 2300 """ 2301 2302 def iterateScenarios(self): 2303 # desc = {"name": "RiLSA1LoadCurvesOutTLS"} 2304 RWScurves = getRWScurves() 2305 for iWE, cWE in enumerate(RWScurves): 2306 for iNS, cNS in enumerate(RWScurves): 2307 for iEW, cEW in enumerate(RWScurves): 2308 for iSN, cSN in enumerate(RWScurves): 2309 # s, desc, sID 2310 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN) 2311 2312 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 2313 cWE = RWScurves[iWE] 2314 cNS = RWScurves[iNS] 2315 cEW = RWScurves[iEW] 2316 cSN = RWScurves[iSN] 2317 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 2318 if uID is None: 2319 sID = "RiLSA1LoadCurvesOutTLS(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 2320 else: 2321 sID = "RiLSA1LoadCurvesOutTLS(%s)" % (uID) 2322 s = getScenario("RiLSA1OutTLS", "RiLSA1LoadCurvesOutTLS", self.params) 2323 s.demandName = s.sandboxPath("routes_%s.rou.xml" % sID) 2324 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 2325 nStreams = [] 2326 for stream in s.demand.streams: 2327 if stream._departEdgeModel.startswith("nm"): 2328 nStreams.extend( 2329 extrapolateDemand(stream, 3600, cNS, 7).streams) 2330 elif stream._departEdgeModel.startswith("em"): 2331 nStreams.extend( 2332 extrapolateDemand(stream, 3600, cEW, 7).streams) 2333 elif stream._departEdgeModel.startswith("sm"): 2334 nStreams.extend( 2335 extrapolateDemand(stream, 3600, cSN, 7).streams) 2336 elif stream._departEdgeModel.startswith("wm"): 2337 nStreams.extend( 2338 extrapolateDemand(stream, 3600, cWE, 7).streams) 2339 else: 2340 print(stream._departEdgeModel) 2341 raise RuntimeError("Hmmm, unknown stream??") 2342 s.demand.streams = nStreams 2343 end = 86400 2344 sampleFactor = None 2345 if "sample-factor" in self.params: 2346 sampleFactor = self.params["sample-factor"] 2347 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 2348 desc = {"scenario": "RiLSA1LoadCurvesOutTLS", "iWE": str( 2349 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 2350 return s, desc, sID 2351 2352 def getRunsMatrix(self): 2353 ret = [] 2354 ranges = [[], []] 2355 RWScurves = getRWScurves() 2356 i = 0 2357 for iWE, cWE in enumerate(RWScurves): 2358 for iNS, cNS in enumerate(RWScurves): 2359 ret.append([]) 2360 ranges[0].append(i) 2361 i = i + 1 2362 j = 0 2363 for iEW, cEW in enumerate(RWScurves): 2364 for iSN, cSN in enumerate(RWScurves): 2365 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": 2366 str(iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurves"}) 2367 ranges[-1].append(j) 2368 j = j + 1 2369 return (ret, ranges) 2370 2371 def getAverageDuration(self): 2372 return -1 # !!! 2373 2374 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2375 # adapt tls to current settings 2376 scenario.addAdditionalFile( 2377 scenario.sandboxPath("tls_adapted_%s" % sID)) 2378 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2379 fdo.write("<additional>\n") 2380 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2381 for tlsID in net._id2tls: 2382 tls = net._id2tls[tlsID] 2383 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2384 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 2385 for prog in tls._programs: 2386 i1 = i2 = 0 2387 for i, p in enumerate(tls._programs[prog]._phases): 2388 if p[1] == 40: 2389 i1 = i 2390 elif p[1] == 12: 2391 i2 = i 2392 for t in greens: 2393 tls._programs[prog]._type = tls_algorithm 2394 tls._programs[prog]._id = "adapted" + str(t) 2395 self.addTLSParameterFromFile( 2396 tls._programs[prog], options.tls_params) 2397 tls._programs[prog]._phases[i1][1] = greens[t][1] 2398 tls._programs[prog]._phases[i2][1] = greens[t][0] 2399 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2400 fdo.write( 2401 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 2402 for t in times: 2403 fdo.write( 2404 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 2405 fdo.write("\t</WAUT>\n") 2406 fdo.write( 2407 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 2408 fdo.write("</additional>\n") 2409 fdo.close() 2410 args = [] 2411 return args 2412 2413 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 2414 # adapt tls to current settings 2415 scenario.addAdditionalFile( 2416 scenario.sandboxPath("tls_adapted_%s" % sID)) 2417 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2418 fdo.write("<additional>\n") 2419 net = sumolib.net.readNet( 2420 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 2421 for tlsID in net._id2tls: 2422 tls = net._id2tls[tlsID] 2423 if tlsID == "0": 2424 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2425 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 2426 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 2427 greens = split_by_proportions(72, (ns, we), (10, 10)) 2428 for prog in tls._programs: 2429 i1 = i2 = 0 2430 for i, p in enumerate(tls._programs[prog]._phases): 2431 if p[1] == 40: 2432 i1 = i 2433 elif p[1] == 12: 2434 i2 = i 2435 tls._programs[prog]._type = tls_algorithm 2436 self.addTLSParameterFromFile( 2437 tls._programs[prog], options.tls_params) 2438 tls._programs[prog]._phases[i1][1] = greens[1] 2439 tls._programs[prog]._phases[i2][1] = greens[0] 2440 tls._programs[prog]._id = "adapted" 2441 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2442 else: 2443 if tlsID[0] == 'e' or tlsID[0] == 'w': 2444 tls._programs[prog]._phases[0][ 2445 1] = self.params["other-green"] 2446 else: 2447 tls._programs[prog]._phases[1][ 2448 1] = self.params["other-green"] 2449 tls._programs[prog]._id = "adapted" 2450 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2451 fdo.write("</additional>\n") 2452 fdo.close() 2453 args = [] 2454 return args 2455 2456 def getXLabel(self): 2457 return "!!!RWS type" 2458 2459 def getYLabel(self): 2460 return "!!!RWS type" 2461 2462# -------------------------------------- 2463 2464 2465class ScenarioSet_RiLSA1LoadCurvesOutTLS24(ScenarioSet): 2466 2467 def __init__(self, params): 2468 ScenarioSet.__init__(self, "RiLSA1LoadCurvesOutTLS24", merge( 2469 {}, 2470 params)) 2471 if "other-green" not in self.params: 2472 self.params["other-green"] = 31 2473 2474 def getNumRuns(self): 2475 return 3 * 3 * 3 * 3 2476 """ 2477 Yields returning a built scenario and its description as key/value pairs 2478 """ 2479 2480 def iterateScenarios(self): 2481 # desc = {"name": "RiLSA1LoadCurvesOutTLS24"} 2482 RWScurves = getRWScurves() 2483 for iWE, cWE in enumerate(RWScurves): 2484 for iNS, cNS in enumerate(RWScurves): 2485 for iEW, cEW in enumerate(RWScurves): 2486 for iSN, cSN in enumerate(RWScurves): 2487 # s, desc, sID 2488 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN) 2489 2490 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 2491 cWE = RWScurves[iWE] 2492 cNS = RWScurves[iNS] 2493 cEW = RWScurves[iEW] 2494 cSN = RWScurves[iSN] 2495 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 2496 if uID is None: 2497 sID = "RiLSA1LoadCurvesOutTLS24(%s-%s-%s-%s)" % ( 2498 iWE, iNS, iEW, iSN) 2499 else: 2500 sID = "RiLSA1LoadCurvesOutTLS24(%s)" % (uID) 2501 s = getScenario( 2502 "RiLSA1OutTLS", "RiLSA1LoadCurvesOutTLS24", self.params) 2503 s.demandName = s.sandboxPath("routes_%s.rou.xml" % sID) 2504 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 2505 nStreams = [] 2506 for stream in s.demand.streams: 2507 if stream._departEdgeModel.startswith("nm"): 2508 nStreams.extend( 2509 extrapolateDemand(stream, 3600, cNS, 7).streams) 2510 elif stream._departEdgeModel.startswith("em"): 2511 nStreams.extend( 2512 extrapolateDemand(stream, 3600, cEW, 7).streams) 2513 elif stream._departEdgeModel.startswith("sm"): 2514 nStreams.extend( 2515 extrapolateDemand(stream, 3600, cSN, 7).streams) 2516 elif stream._departEdgeModel.startswith("wm"): 2517 nStreams.extend( 2518 extrapolateDemand(stream, 3600, cWE, 7).streams) 2519 else: 2520 print(stream._departEdgeModel) 2521 raise RuntimeError("Hmmm, unknown stream??") 2522 s.demand.streams = nStreams 2523 end = 86400 2524 sampleFactor = None 2525 if "sample-factor" in self.params: 2526 sampleFactor = self.params["sample-factor"] 2527 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 2528 desc = {"scenario": "RiLSA1LoadCurvesOutTLS24", "iWE": str( 2529 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 2530 return s, desc, sID 2531 2532 def getRunsMatrix(self): 2533 ret = [] 2534 ranges = [[], []] 2535 RWScurves = getRWScurves() 2536 i = 0 2537 for iWE, cWE in enumerate(RWScurves): 2538 for iNS, cNS in enumerate(RWScurves): 2539 ret.append([]) 2540 ranges[0].append(i) 2541 i = i + 1 2542 j = 0 2543 for iEW, cEW in enumerate(RWScurves): 2544 for iSN, cSN in enumerate(RWScurves): 2545 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": str( 2546 iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurvesOutTLS24"}) 2547 ranges[-1].append(j) 2548 j = j + 1 2549 return (ret, ranges) 2550 2551 def getAverageDuration(self): 2552 return -1 # !!! 2553 2554 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2555 # adapt tls to current settings 2556 scenario.addAdditionalFile( 2557 scenario.sandboxPath("tls_adapted_%s" % sID)) 2558 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2559 fdo.write("<additional>\n") 2560 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2561 for tlsID in net._id2tls: 2562 tls = net._id2tls[tlsID] 2563 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2564 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 2565 for prog in tls._programs: 2566 i1 = i2 = 0 2567 for i, p in enumerate(tls._programs[prog]._phases): 2568 if p[1] == 40: 2569 i1 = i 2570 elif p[1] == 12: 2571 i2 = i 2572 for t in greens: 2573 tls._programs[prog]._type = tls_algorithm 2574 tls._programs[prog]._id = "adapted" + str(t) 2575 self.addTLSParameterFromFile( 2576 tls._programs[prog], options.tls_params) 2577 tls._programs[prog]._phases[i1][1] = greens[t][1] 2578 tls._programs[prog]._phases[i2][1] = greens[t][0] 2579 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2580 fdo.write( 2581 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 2582 for t in times: 2583 fdo.write( 2584 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 2585 fdo.write("\t</WAUT>\n") 2586 fdo.write( 2587 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 2588 fdo.write("</additional>\n") 2589 fdo.close() 2590 args = [] 2591 return args 2592 2593 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 2594 # adapt tls to current settings 2595 scenario.addAdditionalFile( 2596 scenario.sandboxPath("tls_adapted_%s" % sID)) 2597 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2598 fdo.write("<additional>\n") 2599 net = sumolib.net.readNet( 2600 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 2601 for tlsID in net._id2tls: 2602 tls = net._id2tls[tlsID] 2603 if tlsID == "0": 2604 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2605 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 2606 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 2607 greens = split_by_proportions(72, (ns, we), (10, 10)) 2608 for prog in tls._programs: 2609 i1 = i2 = 0 2610 for i, p in enumerate(tls._programs[prog]._phases): 2611 if p[1] == 40: 2612 i1 = i 2613 elif p[1] == 12: 2614 i2 = i 2615 tls._programs[prog]._type = tls_algorithm 2616 self.addTLSParameterFromFile( 2617 tls._programs[prog], options.tls_params) 2618 tls._programs[prog]._phases[i1][1] = greens[1] 2619 tls._programs[prog]._phases[i2][1] = greens[0] 2620 tls._programs[prog]._id = "adapted" 2621 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2622 else: 2623 if tlsID[0] == 'e' or tlsID[0] == 'w': 2624 tls._programs[prog]._phases[0][ 2625 1] = self.params["other-green"] 2626 else: 2627 tls._programs[prog]._phases[1][ 2628 1] = self.params["other-green"] 2629 tls._programs[prog]._id = "adapted" 2630 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2631 fdo.write("</additional>\n") 2632 fdo.close() 2633 args = [] 2634 return args 2635 2636 def getXLabel(self): 2637 return "!!!RWS type" 2638 2639 def getYLabel(self): 2640 return "!!!RWS type" 2641 2642# -------------------------------------- 2643 2644 2645class ScenarioSet_RiLSA1LoadCurvesBothTLS(ScenarioSet): 2646 2647 def __init__(self, params): 2648 ScenarioSet.__init__(self, "RiLSA1LoadCurvesBothTLS", merge( 2649 {}, 2650 params)) 2651 if "other-green" not in self.params: 2652 self.params["other-green"] = 31 2653 2654 def getNumRuns(self): 2655 return 3 * 3 * 3 * 3 2656 """ 2657 Yields returning a built scenario and its description as key/value pairs 2658 """ 2659 2660 def iterateScenarios(self): 2661 # desc = {"name": "RiLSA1LoadCurvesBothTLS"} 2662 RWScurves = getRWScurves() 2663 for iWE, cWE in enumerate(RWScurves): 2664 for iNS, cNS in enumerate(RWScurves): 2665 for iEW, cEW in enumerate(RWScurves): 2666 for iSN, cSN in enumerate(RWScurves): 2667 # s, desc, sID 2668 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN) 2669 2670 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 2671 cWE = RWScurves[iWE] 2672 cNS = RWScurves[iNS] 2673 cEW = RWScurves[iEW] 2674 cSN = RWScurves[iSN] 2675 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 2676 if uID is None: 2677 sID = "RiLSA1LoadCurvesBothTLS(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 2678 else: 2679 sID = "RiLSA1LoadCurvesBothTLS(%s)" % (uID) 2680 s = getScenario( 2681 "RiLSA1BothTLS", "RiLSA1LoadCurvesBothTLS", self.params) 2682 s.demandName = s.sandboxPath("routes_%s.rou.xml" % sID) 2683 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 2684 nStreams = [] 2685 for stream in s.demand.streams: 2686 if stream._departEdgeModel.startswith("nm"): 2687 nStreams.extend( 2688 extrapolateDemand(stream, 3600, cNS, 7).streams) 2689 elif stream._departEdgeModel.startswith("em"): 2690 nStreams.extend( 2691 extrapolateDemand(stream, 3600, cEW, 7).streams) 2692 elif stream._departEdgeModel.startswith("sm"): 2693 nStreams.extend( 2694 extrapolateDemand(stream, 3600, cSN, 7).streams) 2695 elif stream._departEdgeModel.startswith("wm"): 2696 nStreams.extend( 2697 extrapolateDemand(stream, 3600, cWE, 7).streams) 2698 else: 2699 print(stream._departEdgeModel) 2700 raise RuntimeError("Hmmm, unknown stream??") 2701 s.demand.streams = nStreams 2702 end = 86400 2703 sampleFactor = None 2704 if "sample-factor" in self.params: 2705 sampleFactor = self.params["sample-factor"] 2706 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 2707 desc = {"scenario": "RiLSA1LoadCurvesBothTLS", "iWE": str( 2708 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 2709 return s, desc, sID 2710 2711 def getRunsMatrix(self): 2712 ret = [] 2713 ranges = [[], []] 2714 RWScurves = getRWScurves() 2715 i = 0 2716 for iWE, cWE in enumerate(RWScurves): 2717 for iNS, cNS in enumerate(RWScurves): 2718 ret.append([]) 2719 ranges[0].append(i) 2720 i = i + 1 2721 j = 0 2722 for iEW, cEW in enumerate(RWScurves): 2723 for iSN, cSN in enumerate(RWScurves): 2724 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": str( 2725 iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurvesBothTLS"}) 2726 ranges[-1].append(j) 2727 j = j + 1 2728 return (ret, ranges) 2729 2730 def getAverageDuration(self): 2731 return -1 # !!! 2732 2733 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2734 # adapt tls to current settings 2735 scenario.addAdditionalFile( 2736 scenario.sandboxPath("tls_adapted_%s" % sID)) 2737 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2738 fdo.write("<additional>\n") 2739 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2740 for tlsID in net._id2tls: 2741 tls = net._id2tls[tlsID] 2742 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2743 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 2744 for prog in tls._programs: 2745 i1 = i2 = 0 2746 for i, p in enumerate(tls._programs[prog]._phases): 2747 if p[1] == 40: 2748 i1 = i 2749 elif p[1] == 12: 2750 i2 = i 2751 for t in greens: 2752 tls._programs[prog]._type = tls_algorithm 2753 tls._programs[prog]._id = "adapted" + str(t) 2754 self.addTLSParameterFromFile( 2755 tls._programs[prog], options.tls_params) 2756 tls._programs[prog]._phases[i1][1] = greens[t][1] 2757 tls._programs[prog]._phases[i2][1] = greens[t][0] 2758 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2759 fdo.write( 2760 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 2761 for t in times: 2762 fdo.write( 2763 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 2764 fdo.write("\t</WAUT>\n") 2765 fdo.write( 2766 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 2767 fdo.write("</additional>\n") 2768 fdo.close() 2769 args = [] 2770 return args 2771 2772 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 2773 # adapt tls to current settings 2774 scenario.addAdditionalFile( 2775 scenario.sandboxPath("tls_adapted_%s" % sID)) 2776 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2777 fdo.write("<additional>\n") 2778 net = sumolib.net.readNet( 2779 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 2780 for tlsID in net._id2tls: 2781 tls = net._id2tls[tlsID] 2782 if tlsID == "0": 2783 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2784 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 2785 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 2786 greens = split_by_proportions(72, (ns, we), (10, 10)) 2787 for prog in tls._programs: 2788 i1 = i2 = 0 2789 for i, p in enumerate(tls._programs[prog]._phases): 2790 if p[1] == 40: 2791 i1 = i 2792 elif p[1] == 12: 2793 i2 = i 2794 tls._programs[prog]._type = tls_algorithm 2795 self.addTLSParameterFromFile( 2796 tls._programs[prog], options.tls_params) 2797 tls._programs[prog]._phases[i1][1] = greens[1] 2798 tls._programs[prog]._phases[i2][1] = greens[0] 2799 tls._programs[prog]._id = "adapted" 2800 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2801 else: 2802 if tlsID[0] == 'e' or tlsID[0] == 'w': 2803 tls._programs[prog]._phases[0][ 2804 1] = self.params["other-green"] 2805 else: 2806 tls._programs[prog]._phases[1][ 2807 1] = self.params["other-green"] 2808 tls._programs[prog]._id = "adapted" 2809 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2810 fdo.write("</additional>\n") 2811 fdo.close() 2812 args = [] 2813 return args 2814 2815 def getXLabel(self): 2816 return "!!!RWS type" 2817 2818 def getYLabel(self): 2819 return "!!!RWS type" 2820 2821# -------------------------------------- 2822 2823 2824class ScenarioSet_RiLSA1LoadCurvesBothTLS24(ScenarioSet): 2825 2826 def __init__(self, params): 2827 ScenarioSet.__init__(self, "RiLSA1LoadCurvesBothTLS24", merge( 2828 {}, 2829 params)) 2830 if "other-green" not in self.params: 2831 self.params["other-green"] = 31 2832 2833 def getNumRuns(self): 2834 return 3 * 3 * 3 * 3 2835 """ 2836 Yields returning a built scenario and its description as key/value pairs 2837 """ 2838 2839 def iterateScenarios(self): 2840 # desc = {"name": "RiLSA1LoadCurvesBothTLS24"} 2841 RWScurves = getRWScurves() 2842 for iWE, cWE in enumerate(RWScurves): 2843 for iNS, cNS in enumerate(RWScurves): 2844 for iEW, cEW in enumerate(RWScurves): 2845 for iSN, cSN in enumerate(RWScurves): 2846 # s, desc, sID 2847 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN) 2848 2849 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 2850 cWE = RWScurves[iWE] 2851 cNS = RWScurves[iNS] 2852 cEW = RWScurves[iEW] 2853 cSN = RWScurves[iSN] 2854 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 2855 if uID is None: 2856 sID = "RiLSA1LoadCurvesBothTLS24(%s-%s-%s-%s)" % ( 2857 iWE, iNS, iEW, iSN) 2858 else: 2859 sID = "RiLSA1LoadCurvesBothTLS24(%s)" % (uID) 2860 s = getScenario( 2861 "RiLSA1BothTLS", "RiLSA1LoadCurvesBothTLS24", self.params) 2862 s.demandName = s.sandboxPath("routes_%s.rou.xml" % sID) 2863 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 2864 nStreams = [] 2865 for stream in s.demand.streams: 2866 if stream._departEdgeModel.startswith("nm"): 2867 nStreams.extend( 2868 extrapolateDemand(stream, 3600, cNS, 7).streams) 2869 elif stream._departEdgeModel.startswith("em"): 2870 nStreams.extend( 2871 extrapolateDemand(stream, 3600, cEW, 7).streams) 2872 elif stream._departEdgeModel.startswith("sm"): 2873 nStreams.extend( 2874 extrapolateDemand(stream, 3600, cSN, 7).streams) 2875 elif stream._departEdgeModel.startswith("wm"): 2876 nStreams.extend( 2877 extrapolateDemand(stream, 3600, cWE, 7).streams) 2878 else: 2879 print(stream._departEdgeModel) 2880 raise RuntimeError("Hmmm, unknown stream??") 2881 s.demand.streams = nStreams 2882 end = 86400 2883 sampleFactor = None 2884 if "sample-factor" in self.params: 2885 sampleFactor = self.params["sample-factor"] 2886 print('%s %s %s' % (s.netName, s.demandName, sampleFactor)) 2887 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 2888 desc = {"scenario": "RiLSA1LoadCurvesBothTLS24", "iWE": str( 2889 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 2890 return s, desc, sID 2891 2892 def getRunsMatrix(self): 2893 ret = [] 2894 ranges = [[], []] 2895 RWScurves = getRWScurves() 2896 i = 0 2897 for iWE, cWE in enumerate(RWScurves): 2898 for iNS, cNS in enumerate(RWScurves): 2899 ret.append([]) 2900 ranges[0].append(i) 2901 i = i + 1 2902 j = 0 2903 for iEW, cEW in enumerate(RWScurves): 2904 for iSN, cSN in enumerate(RWScurves): 2905 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": str( 2906 iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurvesBothTLS24"}) 2907 ranges[-1].append(j) 2908 j = j + 1 2909 return (ret, ranges) 2910 2911 def getAverageDuration(self): 2912 return -1 # !!! 2913 2914 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2915 # adapt tls to current settings 2916 scenario.addAdditionalFile( 2917 scenario.sandboxPath("tls_adapted_%s" % sID)) 2918 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2919 fdo.write("<additional>\n") 2920 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2921 for tlsID in net._id2tls: 2922 tls = net._id2tls[tlsID] 2923 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2924 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 2925 for prog in tls._programs: 2926 i1 = i2 = 0 2927 for i, p in enumerate(tls._programs[prog]._phases): 2928 if p[1] == 40: 2929 i1 = i 2930 elif p[1] == 12: 2931 i2 = i 2932 for t in greens: 2933 tls._programs[prog]._type = tls_algorithm 2934 tls._programs[prog]._id = "adapted" + str(t) 2935 self.addTLSParameterFromFile( 2936 tls._programs[prog], options.tls_params) 2937 tls._programs[prog]._phases[i1][1] = greens[t][1] 2938 tls._programs[prog]._phases[i2][1] = greens[t][0] 2939 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2940 fdo.write( 2941 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 2942 for t in times: 2943 fdo.write( 2944 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 2945 fdo.write("\t</WAUT>\n") 2946 fdo.write( 2947 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 2948 fdo.write("</additional>\n") 2949 fdo.close() 2950 args = [] 2951 return args 2952 2953 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 2954 # adapt tls to current settings 2955 scenario.addAdditionalFile( 2956 scenario.sandboxPath("tls_adapted_%s" % sID)) 2957 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2958 fdo.write("<additional>\n") 2959 net = sumolib.net.readNet( 2960 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 2961 for tlsID in net._id2tls: 2962 tls = net._id2tls[tlsID] 2963 if tlsID == "0": 2964 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2965 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 2966 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 2967 greens = split_by_proportions(72, (ns, we), (10, 10)) 2968 for prog in tls._programs: 2969 i1 = i2 = 0 2970 for i, p in enumerate(tls._programs[prog]._phases): 2971 if p[1] == 40: 2972 i1 = i 2973 elif p[1] == 12: 2974 i2 = i 2975 tls._programs[prog]._type = tls_algorithm 2976 self.addTLSParameterFromFile( 2977 tls._programs[prog], options.tls_params) 2978 tls._programs[prog]._phases[i1][1] = greens[1] 2979 tls._programs[prog]._phases[i2][1] = greens[0] 2980 tls._programs[prog]._id = "adapted" 2981 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2982 else: 2983 if tlsID[0] == 'e' or tlsID[0] == 'w': 2984 tls._programs[prog]._phases[0][ 2985 1] = self.params["other-green"] 2986 else: 2987 tls._programs[prog]._phases[1][ 2988 1] = self.params["other-green"] 2989 tls._programs[prog]._id = "adapted" 2990 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2991 fdo.write("</additional>\n") 2992 fdo.close() 2993 args = [] 2994 return args 2995 2996 def getXLabel(self): 2997 return "!!!RWS type" 2998 2999 def getYLabel(self): 3000 return "!!!RWS type" 3001 3002# -------------------------------------- 3003 3004 3005class ScenarioSet_BasicRiLSANet(ScenarioSet): 3006 3007 def __init__(self, params): 3008 ScenarioSet.__init__(self, "BasicRiLSANet", merge( 3009 {}, 3010 params)) 3011 if "other-green" not in self.params: 3012 self.params["other-green"] = 31 3013 3014 def getNumRuns(self): 3015 return 3 * 3 * 3 * 3 3016 """ 3017 Yields returning a built scenario and its description as key/value pairs 3018 """ 3019 3020 def iterateScenarios(self): 3021 # desc = {"name": "BasicRiLSANet"} 3022 RWScurves = getRWScurves() 3023 for iWE, cWE in enumerate(RWScurves): 3024 for iNS, cNS in enumerate(RWScurves): 3025 for iEW, cEW in enumerate(RWScurves): 3026 for iSN, cSN in enumerate(RWScurves): 3027 # s, desc, sID 3028 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN) 3029 3030 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 3031 cWE = RWScurves[iWE] 3032 cNS = RWScurves[iNS] 3033 cEW = RWScurves[iEW] 3034 cSN = RWScurves[iSN] 3035 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 3036 if uID is None: 3037 sID = "BasicRiLSANet(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 3038 else: 3039 sID = "BasicRiLSANet(%s)" % (uID) 3040 s = getScenario("BasicRiLSANet", "BasicRiLSANet", self.params) 3041 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 3042 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 3043 nStreams = [] 3044 for stream in s.demand.streams: 3045 if stream._departEdgeModel.find("/4_to") >= 0: 3046 nStreams.extend( 3047 extrapolateDemand(stream, 3600, cNS, 7).streams) 3048 elif stream._departEdgeModel.startswith("4/"): 3049 nStreams.extend( 3050 extrapolateDemand(stream, 3600, cEW, 7).streams) 3051 elif stream._departEdgeModel.find("/0_to") >= 0: 3052 nStreams.extend( 3053 extrapolateDemand(stream, 3600, cSN, 7).streams) 3054 elif stream._departEdgeModel.startswith("0/"): 3055 nStreams.extend( 3056 extrapolateDemand(stream, 3600, cWE, 7).streams) 3057 else: 3058 print(stream._departEdgeModel) 3059 raise RuntimeError("Hmmm, unknown stream??") 3060 s.demand.streams = nStreams 3061 end = 86400 3062 s.demand.build(0, end, s.netName, s.demandName, None) 3063 desc = {"scenario": "BasicRiLSANet", "iWE": str( 3064 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 3065 return s, desc, sID 3066 3067 def getRunsMatrix(self): 3068 ret = [] 3069 ranges = [[], []] 3070 RWScurves = getRWScurves() 3071 i = 0 3072 for iWE, cWE in enumerate(RWScurves): 3073 for iNS, cNS in enumerate(RWScurves): 3074 ret.append([]) 3075 ranges[0].append(i) 3076 i = i + 1 3077 j = 0 3078 for iEW, cEW in enumerate(RWScurves): 3079 for iSN, cSN in enumerate(RWScurves): 3080 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": 3081 str(iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurves"}) 3082 ranges[-1].append(j) 3083 j = j + 1 3084 return (ret, ranges) 3085 3086 def getAverageDuration(self): 3087 return -1 # !!! 3088 3089 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 3090 # adapt tls to current settings 3091 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 3092 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 3093 fdo.write("<additional>\n") 3094 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 3095 for tlsID in net._id2tls: 3096 tls = net._id2tls[tlsID] 3097 (streamsNS, streamsWE) = scenario.getOppositeFlows() 3098 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 3099 for prog in tls._programs: 3100 i1 = i2 = 0 3101 for i, p in enumerate(tls._programs[prog]._phases): 3102 if p[1] == 40: 3103 i1 = i 3104 elif p[1] == 12: 3105 i2 = i 3106 for t in greens: 3107 tls._programs[prog]._type = tls_algorithm 3108 tls._programs[prog]._id = "adapted" + str(t) 3109 self.addTLSParameterFromFile( 3110 tls._programs[prog], options.tls_params) 3111 tls._programs[prog]._phases[i1][1] = greens[t][1] 3112 tls._programs[prog]._phases[i2][1] = greens[t][0] 3113 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3114 fdo.write( 3115 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 3116 for t in times: 3117 fdo.write( 3118 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 3119 fdo.write("\t</WAUT>\n") 3120 fdo.write( 3121 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 3122 fdo.write("</additional>\n") 3123 fdo.close() 3124 args = [] 3125 return args 3126 3127 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 3128 # adapt tls to current settings 3129 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 3130 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 3131 fdo.write("<additional>\n") 3132 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 3133 for tlsID in net._id2tls: 3134 tls = net._id2tls[tlsID] 3135 """ 3136 (streamsNS, streamsWE) = scenario.getOppositeFlows2() 3137 ns = streamsNS[0] / (streamsNS[0]+streamsWE[0]) 3138 we = streamsWE[0] / (streamsNS[0]+streamsWE[0]) 3139 greens = split_by_proportions(72, (ns, we), (10, 10)) 3140 """ 3141 for prog in tls._programs: 3142 """ 3143 i1 = i2 = 0 3144 for i,p in enumerate(tls._programs[prog]._phases): 3145 if p[1]==40: 3146 i1 = i 3147 elif p[1]==12: 3148 i2 = i 3149 tls._programs[prog]._phases[i1][1] = greens[1] 3150 tls._programs[prog]._phases[i2][1] = greens[0] 3151 """ 3152 tls._programs[prog]._id = "adapted" 3153 tls._programs[prog]._type = tls_algorithm 3154 self.addTLSParameterFromFile( 3155 tls._programs[prog], options.tls_params) 3156 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3157 fdo.write("</additional>\n") 3158 fdo.close() 3159 args = [] 3160 return args 3161 3162 def getXLabel(self): 3163 return "!!!RWS type" 3164 3165 def getYLabel(self): 3166 return "!!!RWS type" 3167 3168# -------------------------------------- 3169 3170 3171class ScenarioSet_BasicRiLSANet2x2(ScenarioSet): 3172 3173 def __init__(self, params): 3174 ScenarioSet.__init__(self, "BasicRiLSANet2x2", merge( 3175 {}, 3176 params)) 3177 if "other-green" not in self.params: 3178 self.params["other-green"] = 31 3179 3180 def getNumRuns(self): 3181 return 3 * 3 * 3 * 3 3182 """ 3183 Yields returning a built scenario and its description as key/value pairs 3184 """ 3185 3186 def iterateScenarios(self): 3187 # desc = {"name": "BasicRiLSANet2x2"} 3188 RWScurves = getRWScurves() 3189 for iWE, cWE in enumerate(RWScurves): 3190 for iNS, cNS in enumerate(RWScurves): 3191 for iEW, cEW in enumerate(RWScurves): 3192 for iSN, cSN in enumerate(RWScurves): 3193 # s, desc, sID 3194 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN) 3195 3196 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 3197 cWE = RWScurves[iWE] 3198 cNS = RWScurves[iNS] 3199 cEW = RWScurves[iEW] 3200 cSN = RWScurves[iSN] 3201 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 3202 if uID is None: 3203 sID = "BasicRiLSANet(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 3204 else: 3205 sID = "BasicRiLSANet(%s)" % (uID) 3206 s = getScenario("BasicRiLSANet2x2", "BasicRiLSANet2x2", self.params) 3207 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 3208 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 3209 nStreams = [] 3210 for stream in s.demand.streams: 3211 if stream._departEdgeModel.find("/5_to") >= 0: 3212 nStreams.extend( 3213 extrapolateDemand(stream, 3600, cNS, 7).streams) 3214 elif stream._departEdgeModel.startswith("5/"): 3215 nStreams.extend( 3216 extrapolateDemand(stream, 3600, cEW, 7).streams) 3217 elif stream._departEdgeModel.find("/0_to") >= 0: 3218 nStreams.extend( 3219 extrapolateDemand(stream, 3600, cSN, 7).streams) 3220 elif stream._departEdgeModel.startswith("0/"): 3221 nStreams.extend( 3222 extrapolateDemand(stream, 3600, cWE, 7).streams) 3223 else: 3224 print(stream._departEdgeModel) 3225 raise RuntimeError("Hmmm, unknown stream??") 3226 s.demand.streams = nStreams 3227 end = 86400 3228 sampleFactor = None 3229 if "sample-factor" in self.params: 3230 sampleFactor = self.params["sample-factor"] 3231 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 3232 desc = {"scenario": "BasicRiLSANet2x2", "iWE": str( 3233 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 3234 return s, desc, sID 3235 3236 def getRunsMatrix(self): 3237 ret = [] 3238 ranges = [[], []] 3239 RWScurves = getRWScurves() 3240 i = 0 3241 for iWE, cWE in enumerate(RWScurves): 3242 for iNS, cNS in enumerate(RWScurves): 3243 ret.append([]) 3244 ranges[0].append(i) 3245 i = i + 1 3246 j = 0 3247 for iEW, cEW in enumerate(RWScurves): 3248 for iSN, cSN in enumerate(RWScurves): 3249 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": 3250 str(iEW), "iSN": str(iSN), "scenario": "BasicRiLSANet2x2"}) 3251 ranges[-1].append(j) 3252 j = j + 1 3253 return (ret, ranges) 3254 3255 def getAverageDuration(self): 3256 return -1 # !!! 3257 3258 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 3259 # adapt tls to current settings 3260 scenario.addAdditionalFile( 3261 scenario.sandboxPath("tls_adapted_%s" % sID)) 3262 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 3263 print("Hahah") 3264 fdo.write("<additional>\n") 3265 net = sumolib.net.readNet( 3266 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 3267 for tlsID in net._id2tls: 3268 tls = net._id2tls[tlsID] 3269 (streamsNS, streamsWE) = scenario.getOppositeFlows() 3270 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 3271 for prog in tls._programs: 3272 i1 = i2 = 0 3273 for i, p in enumerate(tls._programs[prog]._phases): 3274 if p[1] == 40: 3275 i1 = i 3276 elif p[1] == 12: 3277 i2 = i 3278 for t in greens: 3279 tls._programs[prog]._type = tls_algorithm 3280 tls._programs[prog]._id = "adapted" + str(t) 3281 self.addTLSParameterFromFile( 3282 tls._programs[prog], options.tls_params) 3283 tls._programs[prog]._phases[i1][1] = greens[t][1] 3284 tls._programs[prog]._phases[i2][1] = greens[t][0] 3285 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3286 fdo.write( 3287 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 3288 for t in times: 3289 fdo.write( 3290 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 3291 fdo.write("\t</WAUT>\n") 3292 fdo.write( 3293 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 3294 fdo.write("</additional>\n") 3295 fdo.close() 3296 args = [] 3297 return args 3298 3299 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 3300 # adapt tls to current settings 3301 scenario.addAdditionalFile( 3302 scenario.sandboxPath("tls_adapted_%s" % sID)) 3303 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 3304 fdo.write("<additional>\n") 3305 net = sumolib.net.readNet( 3306 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 3307 for tlsID in net._id2tls: 3308 tls = net._id2tls[tlsID] 3309 """ 3310 (streamsNS, streamsWE) = scenario.getOppositeFlows2() 3311 ns = streamsNS[0] / (streamsNS[0]+streamsWE[0]) 3312 we = streamsWE[0] / (streamsNS[0]+streamsWE[0]) 3313 greens = split_by_proportions(72, (ns, we), (10, 10)) 3314 """ 3315 for prog in tls._programs: 3316 """ 3317 i1 = i2 = 0 3318 for i,p in enumerate(tls._programs[prog]._phases): 3319 if p[1]==40: 3320 i1 = i 3321 elif p[1]==12: 3322 i2 = i 3323 tls._programs[prog]._phases[i1][1] = greens[1] 3324 tls._programs[prog]._phases[i2][1] = greens[0] 3325 """ 3326 tls._programs[prog]._id = "adapted" 3327 if tlsID in ["2/3", "3/3", "2/2", "3/2"]: 3328 tls._programs[prog]._type = tls_algorithm 3329 else: 3330 tls._programs[prog]._type = "actuated" 3331 self.addTLSParameterFromFile( 3332 tls._programs[prog], options.tls_params) 3333 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3334 fdo.write("</additional>\n") 3335 fdo.close() 3336 args = [] 3337 return args 3338 3339 def getXLabel(self): 3340 return "!!!RWS type" 3341 3342 def getYLabel(self): 3343 return "!!!RWS type" 3344 3345# -------------------------------------- 3346 3347 3348class ScenarioSet_BasicRiLSACorridor3(ScenarioSet): 3349 3350 def __init__(self, params): 3351 ScenarioSet.__init__(self, "BasicRiLSACorridor3", merge( 3352 {}, 3353 params)) 3354 if "other-green" not in self.params: 3355 self.params["other-green"] = 31 3356 3357 def getNumRuns(self): 3358 return 3 * 3 * 3 * 3 3359 """ 3360 Yields returning a built scenario and its description as key/value pairs 3361 """ 3362 3363 def iterateScenarios(self): 3364 # desc = {"name": "BasicRiLSACorridor3"} 3365 RWScurves = getRWScurves() 3366 for iWE, cWE in enumerate(RWScurves): 3367 for iNS, cNS in enumerate(RWScurves): 3368 for iEW, cEW in enumerate(RWScurves): 3369 for iSN, cSN in enumerate(RWScurves): 3370 # s, desc, sID 3371 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN) 3372 3373 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 3374 cWE = RWScurves[iWE] 3375 cNS = RWScurves[iNS] 3376 cEW = RWScurves[iEW] 3377 cSN = RWScurves[iSN] 3378 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 3379 if uID is None: 3380 sID = "BasicRiLSACorridor3(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 3381 else: 3382 sID = "BasicRiLSACorridor3(%s)" % (uID) 3383 s = getScenario( 3384 "BasicRiLSACorridor3", "BasicRiLSACorridor3", self.params) 3385 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 3386 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 3387 nStreams = [] 3388 for stream in s.demand.streams: 3389 if stream._departEdgeModel.find("/4_to") >= 0: 3390 nStreams.extend( 3391 extrapolateDemand(stream, 3600, cNS, 7).streams) 3392 elif stream._departEdgeModel.startswith("6/"): 3393 nStreams.extend( 3394 extrapolateDemand(stream, 3600, cEW, 7).streams) 3395 elif stream._departEdgeModel.find("/0_to") >= 0: 3396 nStreams.extend( 3397 extrapolateDemand(stream, 3600, cSN, 7).streams) 3398 elif stream._departEdgeModel.startswith("0/"): 3399 nStreams.extend( 3400 extrapolateDemand(stream, 3600, cWE, 7).streams) 3401 else: 3402 print(stream._departEdgeModel) 3403 raise RuntimeError("Hmmm, unknown stream??") 3404 s.demand.streams = nStreams 3405 end = 86400 3406 sampleFactor = None 3407 if "sample-factor" in self.params: 3408 sampleFactor = self.params["sample-factor"] 3409 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 3410 desc = {"scenario": "BasicRiLSACorridor3", "iWE": str( 3411 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 3412 return s, desc, sID 3413 3414 def getRunsMatrix(self): 3415 ret = [] 3416 ranges = [[], []] 3417 RWScurves = getRWScurves() 3418 i = 0 3419 for iWE, cWE in enumerate(RWScurves): 3420 for iNS, cNS in enumerate(RWScurves): 3421 ret.append([]) 3422 ranges[0].append(i) 3423 i = i + 1 3424 j = 0 3425 for iEW, cEW in enumerate(RWScurves): 3426 for iSN, cSN in enumerate(RWScurves): 3427 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": str( 3428 iEW), "iSN": str(iSN), "scenario": "BasicRiLSACorridor3"}) 3429 ranges[-1].append(j) 3430 j = j + 1 3431 return (ret, ranges) 3432 3433 def getAverageDuration(self): 3434 return -1 # !!! 3435 3436 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 3437 # adapt tls to current settings 3438 scenario.addAdditionalFile( 3439 scenario.sandboxPath("tls_adapted_%s" % sID)) 3440 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 3441 print("Hahah") 3442 fdo.write("<additional>\n") 3443 net = sumolib.net.readNet( 3444 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 3445 for tlsID in net._id2tls: 3446 tls = net._id2tls[tlsID] 3447 (streamsNS, streamsWE) = scenario.getOppositeFlows() 3448 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 3449 for prog in tls._programs: 3450 i1 = i2 = 0 3451 for i, p in enumerate(tls._programs[prog]._phases): 3452 if p[1] == 40: 3453 i1 = i 3454 elif p[1] == 12: 3455 i2 = i 3456 for t in greens: 3457 tls._programs[prog]._type = tls_algorithm 3458 tls._programs[prog]._id = "adapted" + str(t) 3459 self.addTLSParameterFromFile( 3460 tls._programs[prog], options.tls_params) 3461 tls._programs[prog]._phases[i1][1] = greens[t][1] 3462 tls._programs[prog]._phases[i2][1] = greens[t][0] 3463 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3464 fdo.write( 3465 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 3466 for t in times: 3467 fdo.write( 3468 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 3469 fdo.write("\t</WAUT>\n") 3470 fdo.write( 3471 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 3472 fdo.write("</additional>\n") 3473 fdo.close() 3474 args = [] 3475 return args 3476 3477 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 3478 # adapt tls to current settings 3479 scenario.addAdditionalFile( 3480 scenario.sandboxPath("tls_adapted_%s" % sID)) 3481 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 3482 fdo.write("<additional>\n") 3483 net = sumolib.net.readNet( 3484 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 3485 for tlsID in net._id2tls: 3486 tls = net._id2tls[tlsID] 3487 """ 3488 (streamsNS, streamsWE) = scenario.getOppositeFlows2() 3489 ns = streamsNS[0] / (streamsNS[0]+streamsWE[0]) 3490 we = streamsWE[0] / (streamsNS[0]+streamsWE[0]) 3491 greens = split_by_proportions(72, (ns, we), (10, 10)) 3492 """ 3493 for prog in tls._programs: 3494 """ 3495 i1 = i2 = 0 3496 for i,p in enumerate(tls._programs[prog]._phases): 3497 if p[1]==40: 3498 i1 = i 3499 elif p[1]==12: 3500 i2 = i 3501 tls._programs[prog]._phases[i1][1] = greens[1] 3502 tls._programs[prog]._phases[i2][1] = greens[0] 3503 """ 3504 tls._programs[prog]._id = "adapted" 3505 if tlsID in ["2/2", "3/2", "4/2"]: 3506 tls._programs[prog]._type = tls_algorithm 3507 else: 3508 tls._programs[prog]._type = "actuated" 3509 self.addTLSParameterFromFile( 3510 tls._programs[prog], options.tls_params) 3511 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3512 fdo.write("</additional>\n") 3513 fdo.close() 3514 args = [] 3515 return args 3516 3517 def getXLabel(self): 3518 return "!!!RWS type" 3519 3520 def getYLabel(self): 3521 return "!!!RWS type" 3522 3523# -------------------------------------- 3524 3525 3526def getScenarioSet(name, params): 3527 if name == "iterateFlowsNA": 3528 return ScenarioSet_IterateFlowsNA(params) 3529 if name == "iterateFlowsA": 3530 return ScenarioSet_IterateFlowsA(params) 3531 if name == "RiLSA1LoadCurves": 3532 return ScenarioSet_RiLSA1LoadCurves(params) 3533 if name == "RiLSA1LoadCurvesSampled": 3534 return ScenarioSet_RiLSA1LoadCurvesSampled(params) 3535 if name == "RiLSA1LoadCurvesOutTLS": 3536 return ScenarioSet_RiLSA1LoadCurvesOutTLS(params) 3537 if name == "RiLSA1LoadCurvesBothTLS": 3538 return ScenarioSet_RiLSA1LoadCurvesBothTLS(params) 3539 if name == "RiLSA1LoadCurvesOutTLS24": 3540 return ScenarioSet_RiLSA1LoadCurvesOutTLS24(params) 3541 if name == "RiLSA1LoadCurvesBothTLS24": 3542 return ScenarioSet_RiLSA1LoadCurvesBothTLS24(params) 3543 if name == "RiLSA1Outflow": 3544 return ScenarioSet_RiLSA1Outflow(params) 3545 if name == "RiLSA1PedFlow": 3546 return ScenarioSet_RiLSA1PedFlow(params) 3547 if name == "RiLSA1PTIteration": 3548 return ScenarioSet_RiLSA1PTIteration(params) 3549 3550 if name == "SinSinDemand": 3551 return ScenarioSet_SinSinDemand(params) 3552 if name == "OneSinDemand": 3553 return ScenarioSet_OneSinDemand(params) 3554 if name == "DemandStep": 3555 return ScenarioSet_DemandStep(params) 3556 if name == "TurnIteration": 3557 return ScenarioSet_TurnIteration(params) 3558 if name == "CorrFlowsDistancesA": 3559 return ScenarioSet_CorrFlowsDistancesA(params) 3560# if name == "NetFlowsA": # seems not to be implemented 3561# return ScenarioSet_NetFlowsA(params) 3562 if name == "NetFlowsDistancesA": 3563 return ScenarioSet_NetFlowsDistancesA(params) 3564 if name == "RealWorld": 3565 return ScenarioSet_RealWorld(params) 3566 if name == "BasicRiLSANet": 3567 return ScenarioSet_BasicRiLSANet(params) 3568 if name == "BasicRiLSANet2x2": 3569 return ScenarioSet_BasicRiLSANet2x2(params) 3570 if name == "BasicRiLSANet2x2_24": 3571 return ScenarioSet_BasicRiLSANet2x2(params) 3572 if name == "BasicRiLSACorridor3": 3573 return ScenarioSet_BasicRiLSACorridor3(params) 3574 if name == "BasicRiLSACorridor3_24": 3575 return ScenarioSet_BasicRiLSACorridor3(params) 3576 3577 raise RuntimeError("unknown scenario '%s'" % name) 3578 3579 3580def getAllScenarioSets(): 3581 return ";".join(["iterateFlowsNA", "iterateFlowsA2", 3582 "RiLSA1LoadCurves", "RiLSA1LoadCurvesOutTLS", 3583 "SinSinDemand", "OneSinDemand", "DemandStep", 3584 "TurnIteration"])
RWS =
[[1, 0.5104, 0.5828, 0.5772, 0.6332, 0.748, 2.8719, 1.7177], [2, 0.3432, 0.3078, 0.3675, 0.336, 0.4566, 1.9838, 1.0125], [3, 0.2107, 0.2523, 0.2086, 0.2895, 0.2517, 1.3241, 0.8154], [4, 0.3703, 0.1997, 0.3053, 0.2064, 0.3579, 0.9965, 0.4875], [5, 0.9379, 0.4054, 0.5936, 0.457, 0.6685, 0.6633, 0.6375], [6, 2.5954, 1.3955, 1.9009, 1.5343, 2.2885, 0.9947, 1.2423], [7, 6.6675, 2.9516, 4.9363, 3.5946, 5.1519, 1.0119, 1.5891], [8, 8.9356, 5.3546, 7.2095, 4.5774, 7.6271, 1.4289, 2.7169], [9, 8.1931, 6.0357, 6.9139, 5.2376, 6.8091, 2.4236, 3.8612], [10, 6.3549, 4.9486, 6.0444, 4.9067, 5.7137, 3.9569, 5.7839], [11, 5.496, 4.4953, 5.3436, 5.5661, 5.2829, 5.4762, 6.406], [12, 5.0961, 4.778, 5.0059, 5.955, 5.2941, 5.9344, 7.0014], [13, 5.3599, 5.2839, 5.4039, 6.853, 5.9041, 6.4891, 7.3738], [14, 5.6462, 5.9352, 5.7807, 7.2908, 6.4795, 7.2301, 7.6242], [15, 5.7565, 6.6796, 6.1341, 8.336, 6.8031, 7.8309, 7.7892], [16, 6.0419, 7.4557, 7.0506, 9.0655, 7.0955, 7.4463, 7.3836], [17, 6.9183, 9.3616, 7.8898, 8.6483, 6.7089, 7.7562, 6.9353], [18, 6.6566, 10.19, 7.5263, 7.7115, 6.4494, 8.2159, 6.7839], [19, 5.8434, 8.5196, 6.9226, 6.4153, 5.942, 7.5234, 6.331], [20, 4.4669, 5.8307, 4.9389, 4.2742, 4.4143, 6.1206, 4.9072], [21, 3.3168, 3.8433, 3.4602, 2.8543, 3.5677, 4.778, 4.0775], [22, 2.0562, 2.3324, 2.6526, 2.2575, 2.7751, 3.6782, 2.9477], [23, 1.4711, 1.9216, 1.7354, 1.8819, 1.8463, 2.3371, 2.5049], [24, 0.7552, 0.9392, 1.0983, 1.118, 1.3643, 1.5282, 2.0705]]
def
getRWScurves():
def
merge(defaultParams, setParams):
class
ScenarioSet:
75class ScenarioSet: 76 77 def __init__(self, name, params): 78 self.name = name 79 self.params = params 80 81 def getNumRuns(self): 82 raise NotImplementedError("virtual ScenarioSet/getNumRuns") 83 84 def getAverageDuration(self): 85 raise NotImplementedError("virtual ScenarioSet/getAverageDuration") 86 87 def iterate(self): 88 raise NotImplementedError("virtual ScenarioSet/iterate") 89 90 def getRunsMatrix(self): 91 raise NotImplementedError("virtual ScenarioSet/getRunsMatrix") 92 93 def getInt(self, name): 94 return int(self.params[name]) 95 96 def getFloat(self, name): 97 return float(self.params[name]) 98 99 def addTLSParameterFromFile(self, tlsProg, paramFile): 100 if paramFile is None: 101 return 102 fd = open(paramFile) 103 for line in fd.readlines(): 104 line = line.strip() 105 if len(line) == 0: 106 continue 107 v = line.split(":") 108 tlsProg.addParameter(v[0], v[1]) 109 fd.close() 110 111 def adaptOutputs(self, sID, scenario, options, tls_algorithm): 112 args = [] 113 files = {} 114 # those set on the command line 115 tripinfoFile = scenario.fullPath('tripinfos_%s.xml' % sID) 116 args.extend( 117 ['--tripinfo-output', tripinfoFile, '--device.emissions.probability', '1']) 118 files["tripinfo"] = [tripinfoFile] 119 # those generated using an additional file 120 scenario.addAdditionalFile(scenario.fullPath("measures_%s" % sID)) 121 fdo = open(scenario.fullPath("measures_%s.add.xml" % sID), "w") 122 fdo.write("<additional>\n") 123 files["trafficLane"] = [scenario.fullPath('traffic_%s.xml' % sID)] 124 fdo.write(' <laneData id="traffic" file="%s" freq="60"/>\n' % 125 files["trafficLane"][0]) 126 files["emissionsLane"] = [scenario.fullPath('emissions_%s.xml' % sID)] 127 fdo.write(' <laneData id="traffic" type="emissions" file="%s" freq="60"/>\n' % 128 files["emissionsLane"][0]) 129 net = sumolib.net.readNet( 130 scenario.NET_FILE, withPrograms=True, withConnections=True) 131 seenLanes = set() 132 files["tlsstates"] = [scenario.fullPath("tls_states_%s.xml" % (sID))] 133 if options.couplede2: 134 files["coupledE2"] = [ 135 scenario.fullPath("coupledE2_%s.xml" % (sID))] 136 if options.e2: 137 files["e2"] = [scenario.fullPath("e2_%s.xml" % (sID))] 138 for tlsID in net._id2tls: 139 tlsID.replace("/", "_") 140 tls = net._id2tls[tlsID] 141 fdo.write(' <timedEvent type="SaveTLSStates" source="%s" dest="%s"/>\n' % ( 142 tlsID, files["tlsstates"][0])) 143 for conn in tls._connections: 144 laneID = conn[0].getID() 145 if laneID in seenLanes: 146 continue 147 seenLanes.add(laneID) 148 if options.couplede2: 149 fdo.write((' <e2Detector id="%s_%s" lane="%s" pos="-.1" length="200" ' + 150 'tl="%s" file="%s" friendlyPos="t"/>\n') % ( 151 tlsID, laneID, laneID, tlsID, files["coupledE2"][0])) 152 fdo.write('\n') 153 if options.e2: 154 for _lane in seenLanes: 155 fdo.write((' <e2Detector id="%s" lane="%s" pos="-.1" length="200" file="%s" ' + 156 'freq="%s" friendlyPos="t"/>\n') % (_lane, _lane, files["e2"][0], options.aggregation)) 157 fdo.write('\n') 158 fdo.write("</additional>\n") 159 fdo.close() 160 return args, files 161 162 def getAdditionalDivider(self): 163 return [] 164 165 def halfX(self): 166 return True 167 168 def orientationX(self): 169 return 0 170 171 def ticksSize(self): 172 return 16 173 174 def figsize(self): 175 return None 176 177 def adjust(self, fig): 178 return
def
adaptOutputs(self, sID, scenario, options, tls_algorithm):
111 def adaptOutputs(self, sID, scenario, options, tls_algorithm): 112 args = [] 113 files = {} 114 # those set on the command line 115 tripinfoFile = scenario.fullPath('tripinfos_%s.xml' % sID) 116 args.extend( 117 ['--tripinfo-output', tripinfoFile, '--device.emissions.probability', '1']) 118 files["tripinfo"] = [tripinfoFile] 119 # those generated using an additional file 120 scenario.addAdditionalFile(scenario.fullPath("measures_%s" % sID)) 121 fdo = open(scenario.fullPath("measures_%s.add.xml" % sID), "w") 122 fdo.write("<additional>\n") 123 files["trafficLane"] = [scenario.fullPath('traffic_%s.xml' % sID)] 124 fdo.write(' <laneData id="traffic" file="%s" freq="60"/>\n' % 125 files["trafficLane"][0]) 126 files["emissionsLane"] = [scenario.fullPath('emissions_%s.xml' % sID)] 127 fdo.write(' <laneData id="traffic" type="emissions" file="%s" freq="60"/>\n' % 128 files["emissionsLane"][0]) 129 net = sumolib.net.readNet( 130 scenario.NET_FILE, withPrograms=True, withConnections=True) 131 seenLanes = set() 132 files["tlsstates"] = [scenario.fullPath("tls_states_%s.xml" % (sID))] 133 if options.couplede2: 134 files["coupledE2"] = [ 135 scenario.fullPath("coupledE2_%s.xml" % (sID))] 136 if options.e2: 137 files["e2"] = [scenario.fullPath("e2_%s.xml" % (sID))] 138 for tlsID in net._id2tls: 139 tlsID.replace("/", "_") 140 tls = net._id2tls[tlsID] 141 fdo.write(' <timedEvent type="SaveTLSStates" source="%s" dest="%s"/>\n' % ( 142 tlsID, files["tlsstates"][0])) 143 for conn in tls._connections: 144 laneID = conn[0].getID() 145 if laneID in seenLanes: 146 continue 147 seenLanes.add(laneID) 148 if options.couplede2: 149 fdo.write((' <e2Detector id="%s_%s" lane="%s" pos="-.1" length="200" ' + 150 'tl="%s" file="%s" friendlyPos="t"/>\n') % ( 151 tlsID, laneID, laneID, tlsID, files["coupledE2"][0])) 152 fdo.write('\n') 153 if options.e2: 154 for _lane in seenLanes: 155 fdo.write((' <e2Detector id="%s" lane="%s" pos="-.1" length="200" file="%s" ' + 156 'freq="%s" friendlyPos="t"/>\n') % (_lane, _lane, files["e2"][0], options.aggregation)) 157 fdo.write('\n') 158 fdo.write("</additional>\n") 159 fdo.close() 160 return args, files
183class ScenarioSet_IterateFlowsNA(ScenarioSet): 184 185 def __init__(self, params): 186 ScenarioSet.__init__(self, "iterateFlowsNA", merge( 187 {"f1from": "0", "f1to": "2400", "f1step": "400", 188 "f2from": "0", "f2to": "2400", "f2step": "400"}, 189 params)) 190 191 def getNumRuns(self): 192 f1num = 1 + \ 193 (self.getInt("f1to") - self.getInt("f1from")) / \ 194 self.getInt("f1step") 195 f2num = 1 + \ 196 (self.getInt("f2to") - self.getInt("f2from")) / \ 197 self.getInt("f2step") 198 return f1num * f2num 199 200 """ 201 Yields returning a built scenario and its description as key/value pairs 202 """ 203 204 def iterateScenarios(self): 205 desc = {"name": "iterateFlowsNA"} 206 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 207 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 208 if f1 == 0 and f2 == 0: 209 continue 210 print("Computing for %s<->%s" % (f1, f2)) 211 sID = "iterateFlowsNA(%s-%s)" % (f1, f2) 212 s = getScenario("BasicCross", {}, False) 213 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 214 if fileNeedsRebuild(s.demandName, "duarouter"): 215 s.demand = demandGenerator.Demand() 216 # why isn't it possible to get a network and return all 217 # possible routes or whatever - to ease the process 218 s.demand.addStream(demandGenerator.Stream( 219 None, 0, 3600, f1, "2/1_to_1/1", "1/1_to_0/1", {"passenger": 1})) 220 # why isn't it possible to get a network and return all 221 # possible routes or whatever - to ease the process 222 s.demand.addStream(demandGenerator.Stream( 223 None, 0, 3600, f1, "0/1_to_1/1", "1/1_to_2/1", {"passenger": 1})) 224 # why isn't it possible to get a network and return all 225 # possible routes or whatever - to ease the process 226 s.demand.addStream(demandGenerator.Stream( 227 None, 0, 3600, f2, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 228 # why isn't it possible to get a network and return all 229 # possible routes or whatever - to ease the process 230 s.demand.addStream(demandGenerator.Stream( 231 None, 0, 3600, f2, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 232 s.demand.build(0, 3600, s.netName, s.demandName) 233 desc = { 234 "scenario": "iterateFlowsNA", "f1": str(f1), "f2": str(f2)} 235 yield s, desc, sID 236 237 def getRunsMatrix(self): 238 ret = [] 239 ranges = [[], []] 240 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 241 ret.append([]) 242 ranges[0].append(f1) 243 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 244 ret[-1].append({"scenario": "iterateFlowsNA", 245 "f1": str(f1), "f2": str(f2)}) 246 ranges[1].append(f2) 247 return (ret, ranges) 248 249 def getAverageDuration(self): 250 return -1 # !!! 251 252 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 253 # adapt tls to current settings 254 scenario.addAdditionalFile( 255 scenario.fullPath("tls_adapted_%s_%s" % (sID, tls_algorithm))) 256 fdo = open( 257 scenario.fullPath("tls_adapted_%s_%s.add.xml" % (sID, tls_algorithm)), "w") 258 fdo.write("<additional>\n") 259 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 260 for tlsID in net._id2tls: 261 tls = net._id2tls[tlsID] 262 for prog in tls._programs: 263 tls._programs[prog]._type = tls_algorithm 264 tls._programs[prog]._id = "adapted" 265 self.addTLSParameterFromFile( 266 tls._programs[prog], options.tls_params) 267 fdo.write(tls._programs[prog].toXML(tlsID)) 268 fdo.write("</additional>\n") 269 fdo.close() 270 args = [] 271 return args 272 273 def getXLabel(self): 274 return "horizontal demand [vehicles/h]" 275 276 def getYLabel(self): 277 return "vertical demand [vehicles/h]"
def
iterateScenarios(self):
204 def iterateScenarios(self): 205 desc = {"name": "iterateFlowsNA"} 206 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 207 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 208 if f1 == 0 and f2 == 0: 209 continue 210 print("Computing for %s<->%s" % (f1, f2)) 211 sID = "iterateFlowsNA(%s-%s)" % (f1, f2) 212 s = getScenario("BasicCross", {}, False) 213 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 214 if fileNeedsRebuild(s.demandName, "duarouter"): 215 s.demand = demandGenerator.Demand() 216 # why isn't it possible to get a network and return all 217 # possible routes or whatever - to ease the process 218 s.demand.addStream(demandGenerator.Stream( 219 None, 0, 3600, f1, "2/1_to_1/1", "1/1_to_0/1", {"passenger": 1})) 220 # why isn't it possible to get a network and return all 221 # possible routes or whatever - to ease the process 222 s.demand.addStream(demandGenerator.Stream( 223 None, 0, 3600, f1, "0/1_to_1/1", "1/1_to_2/1", {"passenger": 1})) 224 # why isn't it possible to get a network and return all 225 # possible routes or whatever - to ease the process 226 s.demand.addStream(demandGenerator.Stream( 227 None, 0, 3600, f2, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 228 # why isn't it possible to get a network and return all 229 # possible routes or whatever - to ease the process 230 s.demand.addStream(demandGenerator.Stream( 231 None, 0, 3600, f2, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 232 s.demand.build(0, 3600, s.netName, s.demandName) 233 desc = { 234 "scenario": "iterateFlowsNA", "f1": str(f1), "f2": str(f2)} 235 yield s, desc, sID
def
getRunsMatrix(self):
237 def getRunsMatrix(self): 238 ret = [] 239 ranges = [[], []] 240 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 241 ret.append([]) 242 ranges[0].append(f1) 243 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 244 ret[-1].append({"scenario": "iterateFlowsNA", 245 "f1": str(f1), "f2": str(f2)}) 246 ranges[1].append(f2) 247 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
252 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 253 # adapt tls to current settings 254 scenario.addAdditionalFile( 255 scenario.fullPath("tls_adapted_%s_%s" % (sID, tls_algorithm))) 256 fdo = open( 257 scenario.fullPath("tls_adapted_%s_%s.add.xml" % (sID, tls_algorithm)), "w") 258 fdo.write("<additional>\n") 259 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 260 for tlsID in net._id2tls: 261 tls = net._id2tls[tlsID] 262 for prog in tls._programs: 263 tls._programs[prog]._type = tls_algorithm 264 tls._programs[prog]._id = "adapted" 265 self.addTLSParameterFromFile( 266 tls._programs[prog], options.tls_params) 267 fdo.write(tls._programs[prog].toXML(tlsID)) 268 fdo.write("</additional>\n") 269 fdo.close() 270 args = [] 271 return args
282class ScenarioSet_IterateFlowsA(ScenarioSet): 283 284 def __init__(self, params): 285 ScenarioSet.__init__(self, "iterateFlowsA", merge( 286 {"f1from": "0", "f1to": "2400", "f1step": "400", 287 "f2from": "0", "f2to": "2400", "f2step": "400"}, 288 params)) 289 290 def getNumRuns(self): 291 f1num = 1 + \ 292 (self.getInt("f1to") - self.getInt("f1from")) / \ 293 self.getInt("f1step") 294 f2num = 1 + \ 295 (self.getInt("f2to") - self.getInt("f2from")) / \ 296 self.getInt("f2step") 297 return f1num * f2num 298 299 """ 300 Yields returning a built scenario and its description as key/value pairs 301 """ 302 303 def iterateScenarios(self): 304 desc = {"name": "iterateFlowsA"} 305 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 306 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 307 if f1 == 0 and f2 == 0: 308 continue 309 print("Computing for %s<->%s" % (f1, f2)) 310 sID = "iterateFlowsA(%s-%s)" % (f1, f2) 311 s = getScenario("BasicCross", {}, False) 312 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 313 if fileNeedsRebuild(s.demandName, "duarouter"): 314 s.demand = demandGenerator.Demand() 315 # why isn't it possible to get a network and return all 316 # possible routes or whatever - to ease the process 317 s.demand.addStream(demandGenerator.Stream( 318 None, 0, 3600, f1, "2/1_to_1/1", "1/1_to_0/1", {"passenger": 1})) 319 # why isn't it possible to get a network and return all 320 # possible routes or whatever - to ease the process 321 s.demand.addStream(demandGenerator.Stream( 322 None, 0, 3600, f1, "0/1_to_1/1", "1/1_to_2/1", {"passenger": 1})) 323 # why isn't it possible to get a network and return all 324 # possible routes or whatever - to ease the process 325 s.demand.addStream(demandGenerator.Stream( 326 None, 0, 3600, f2, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 327 # why isn't it possible to get a network and return all 328 # possible routes or whatever - to ease the process 329 s.demand.addStream(demandGenerator.Stream( 330 None, 0, 3600, f2, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 331 s.demand.build(0, 3600, s.netName, s.demandName) 332 # !!! the following two lines are a hack to pass the numbers instead of recomputing them 333 s.demand._f1Value = f1 334 s.demand._f2Value = f2 335 desc = { 336 "scenario": "iterateFlowsA", "f1": str(f1), "f2": str(f2)} 337 yield s, desc, sID 338 339 def getRunsMatrix(self): 340 ret = [] 341 ranges = [[], []] 342 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 343 ret.append([]) 344 ranges[0].append(f1) 345 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 346 ret[-1].append({"scenario": "iterateFlowsA", 347 "f1": str(f1), "f2": str(f2)}) 348 ranges[1].append(f2) 349 return (ret, ranges) 350 351 def getAverageDuration(self): 352 return -1 # !!! 353 354 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 355 # adapt tls to current settings 356 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 357 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 358 fdo.write("<additional>\n") 359 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 360 for tlsID in net._id2tls: 361 tls = net._id2tls[tlsID] 362 for prog in tls._programs: 363 tls._programs[prog]._type = tls_algorithm 364 tls._programs[prog]._id = "adapted" 365 self.addTLSParameterFromFile( 366 tls._programs[prog], options.tls_params) 367 scenario.demand._f1Value = float( 368 max(scenario.demand._f1Value, 1)) 369 scenario.demand._f2Value = float( 370 max(scenario.demand._f2Value, 1)) 371 t = scenario.demand._f1Value + scenario.demand._f2Value 372 greens = split_by_proportions( 373 80, (scenario.demand._f1Value / t, scenario.demand._f2Value / t), (10, 10)) 374 tls._programs[prog]._phases[0][1] = greens[0] 375 tls._programs[prog]._phases[3][1] = greens[1] 376 fdo.write(tls._programs[prog].toXML(tlsID)) 377 fdo.write("</additional>\n") 378 fdo.close() 379 args = [] 380 return args 381 382 def getXLabel(self): 383 return "horizontal demand [vehicles/h]" 384 385 def getYLabel(self): 386 return "vertical demand [vehicles/h]"
def
iterateScenarios(self):
303 def iterateScenarios(self): 304 desc = {"name": "iterateFlowsA"} 305 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 306 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 307 if f1 == 0 and f2 == 0: 308 continue 309 print("Computing for %s<->%s" % (f1, f2)) 310 sID = "iterateFlowsA(%s-%s)" % (f1, f2) 311 s = getScenario("BasicCross", {}, False) 312 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 313 if fileNeedsRebuild(s.demandName, "duarouter"): 314 s.demand = demandGenerator.Demand() 315 # why isn't it possible to get a network and return all 316 # possible routes or whatever - to ease the process 317 s.demand.addStream(demandGenerator.Stream( 318 None, 0, 3600, f1, "2/1_to_1/1", "1/1_to_0/1", {"passenger": 1})) 319 # why isn't it possible to get a network and return all 320 # possible routes or whatever - to ease the process 321 s.demand.addStream(demandGenerator.Stream( 322 None, 0, 3600, f1, "0/1_to_1/1", "1/1_to_2/1", {"passenger": 1})) 323 # why isn't it possible to get a network and return all 324 # possible routes or whatever - to ease the process 325 s.demand.addStream(demandGenerator.Stream( 326 None, 0, 3600, f2, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 327 # why isn't it possible to get a network and return all 328 # possible routes or whatever - to ease the process 329 s.demand.addStream(demandGenerator.Stream( 330 None, 0, 3600, f2, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 331 s.demand.build(0, 3600, s.netName, s.demandName) 332 # !!! the following two lines are a hack to pass the numbers instead of recomputing them 333 s.demand._f1Value = f1 334 s.demand._f2Value = f2 335 desc = { 336 "scenario": "iterateFlowsA", "f1": str(f1), "f2": str(f2)} 337 yield s, desc, sID
def
getRunsMatrix(self):
339 def getRunsMatrix(self): 340 ret = [] 341 ranges = [[], []] 342 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 343 ret.append([]) 344 ranges[0].append(f1) 345 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 346 ret[-1].append({"scenario": "iterateFlowsA", 347 "f1": str(f1), "f2": str(f2)}) 348 ranges[1].append(f2) 349 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
354 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 355 # adapt tls to current settings 356 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 357 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 358 fdo.write("<additional>\n") 359 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 360 for tlsID in net._id2tls: 361 tls = net._id2tls[tlsID] 362 for prog in tls._programs: 363 tls._programs[prog]._type = tls_algorithm 364 tls._programs[prog]._id = "adapted" 365 self.addTLSParameterFromFile( 366 tls._programs[prog], options.tls_params) 367 scenario.demand._f1Value = float( 368 max(scenario.demand._f1Value, 1)) 369 scenario.demand._f2Value = float( 370 max(scenario.demand._f2Value, 1)) 371 t = scenario.demand._f1Value + scenario.demand._f2Value 372 greens = split_by_proportions( 373 80, (scenario.demand._f1Value / t, scenario.demand._f2Value / t), (10, 10)) 374 tls._programs[prog]._phases[0][1] = greens[0] 375 tls._programs[prog]._phases[3][1] = greens[1] 376 fdo.write(tls._programs[prog].toXML(tlsID)) 377 fdo.write("</additional>\n") 378 fdo.close() 379 args = [] 380 return args
391class ScenarioSet_RiLSA1LoadCurves(ScenarioSet): 392 393 def __init__(self, params): 394 ScenarioSet.__init__(self, "RiLSA1LoadCurves", merge( 395 {}, 396 params)) 397 398 def getNumRuns(self): 399 return 3 * 3 * 3 * 3 400 """ 401 Yields returning a built scenario and its description as key/value pairs 402 """ 403 404 def iterateScenarios(self): 405 # desc = {"name": "RiLSA1LoadCurves"} 406 RWScurves = getRWScurves() 407 for iWE, cWE in enumerate(RWScurves): 408 for iNS, cNS in enumerate(RWScurves): 409 for iEW, cEW in enumerate(RWScurves): 410 for iSN, cSN in enumerate(RWScurves): 411 # s, desc, sID 412 yield self.runSingle(RWScurves, iWE, iNS, iEW, iSN) 413 414 def runSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 415 cWE = RWScurves[iWE] 416 cNS = RWScurves[iNS] 417 cEW = RWScurves[iEW] 418 cSN = RWScurves[iSN] 419 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 420 if uID is None: 421 sID = "RiLSA1LoadCurves(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 422 else: 423 sID = "RiLSA1LoadCurves(%s)" % (uID) 424 s = getScenario("RiLSA1", {}) 425 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 426 print(s.demandName) 427 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 428 nStreams = [] 429 for stream in s.demand.streams: 430 if stream._departEdgeModel.startswith("nm"): 431 nStreams.extend( 432 extrapolateDemand(stream, 3600, cNS, 7).streams) 433 elif stream._departEdgeModel.startswith("em"): 434 nStreams.extend( 435 extrapolateDemand(stream, 3600, cEW, 7).streams) 436 elif stream._departEdgeModel.startswith("sm"): 437 nStreams.extend( 438 extrapolateDemand(stream, 3600, cSN, 7).streams) 439 elif stream._departEdgeModel.startswith("wm"): 440 nStreams.extend( 441 extrapolateDemand(stream, 3600, cWE, 7).streams) 442 else: 443 print(stream._departEdgeModel) 444 raise RuntimeError("Hmmm, unknown stream??") 445 s.demand.streams = nStreams 446 end = 86400 447 sampleFactor = None 448 seenRatio = None 449 if "sample-factor" in self.params: 450 sampleFactor = self.params["sample-factor"] 451 if "seen-ratio" in self.params: 452 seenRatio = self.params["seen-ratio"] 453 s.demand.build( 454 0, end, s.netName, s.demandName, sampleFactor, seenRatio) 455 desc = {"scenario": "RiLSA1LoadCurves", "iWE": str( 456 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 457 return s, desc, sID 458 459 def getRunsMatrix(self): 460 ret = [] 461 ranges = [[], []] 462 RWScurves = getRWScurves() 463 i = 0 464 for iWE, cWE in enumerate(RWScurves): 465 for iNS, cNS in enumerate(RWScurves): 466 ret.append([]) 467 ranges[0].append("%s/%s" % (iWE, iNS)) 468 i = i + 1 469 j = 0 470 for iEW, cEW in enumerate(RWScurves): 471 for iSN, cSN in enumerate(RWScurves): 472 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": 473 str(iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurves"}) 474 ranges[-1].append("%s/%s" % (iEW, iSN)) 475 j = j + 1 476 return (ret, ranges) 477 478 def getAverageDuration(self): 479 return -1 # !!! 480 481 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 482 # adapt tls to current settings 483 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 484 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 485 fdo.write("<additional>\n") 486 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 487 for tlsID in net._id2tls: 488 tls = net._id2tls[tlsID] 489 (streamsNS, streamsWE) = scenario.getOppositeFlows() 490 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 491 for prog in tls._programs: 492 i1 = i2 = 0 493 for i, p in enumerate(tls._programs[prog]._phases): 494 if p[1] == 40: 495 i1 = i 496 elif p[1] == 12: 497 i2 = i 498 for t in greens: 499 tls._programs[prog]._type = tls_algorithm 500 tls._programs[prog]._id = "adapted" + str(t) 501 self.addTLSParameterFromFile( 502 tls._programs[prog], options.tls_params) 503 tls._programs[prog]._phases[i1][1] = greens[t][1] 504 tls._programs[prog]._phases[i2][1] = greens[t][0] 505 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 506 fdo.write('\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 507 for t in times: 508 fdo.write('\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 509 fdo.write("\t</WAUT>\n") 510 fdo.write('\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 511 fdo.write("</additional>\n") 512 fdo.close() 513 args = [] 514 return args 515 516 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 517 # adapt tls to current settings 518 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 519 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 520 fdo.write("<additional>\n") 521 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 522 for tlsID in net._id2tls: 523 tls = net._id2tls[tlsID] 524 (streamsNS, streamsWE) = scenario.getOppositeFlows() 525 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 526 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 527 greens = split_by_proportions(72, (ns, we), (10, 10)) 528 for prog in tls._programs: 529 i1 = i2 = 0 530 for i, p in enumerate(tls._programs[prog]._phases): 531 if p[1] == 40: 532 i1 = i 533 elif p[1] == 12: 534 i2 = i 535 tls._programs[prog]._type = tls_algorithm 536 tls._programs[prog]._id = "adapted" 537 self.addTLSParameterFromFile( 538 tls._programs[prog], options.tls_params) 539 540 tls._programs[prog]._phases[i1][1] = greens[1] 541 tls._programs[prog]._phases[i2][1] = greens[0] 542 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 543 fdo.write("</additional>\n") 544 fdo.close() 545 args = [] 546 return args 547 548 def getXLabel(self): 549 return "RWS type (west-east)/RWS type (north-south)" 550 551 def getYLabel(self): 552 return "RWS type (east-west)/RWS type (south-north)" 553 554 def halfX(self): 555 return False 556 557 def getAdditionalDivider(self): 558 return [ 559 [2.5, -0.5, 2.5, 8.5], 560 [5.5, -0.5, 5.5, 8.5], 561 [-0.5, 2.5, 8.5, 2.5], 562 [-0.5, 5.5, 8.5, 5.5] 563 ]
def
iterateScenarios(self):
404 def iterateScenarios(self): 405 # desc = {"name": "RiLSA1LoadCurves"} 406 RWScurves = getRWScurves() 407 for iWE, cWE in enumerate(RWScurves): 408 for iNS, cNS in enumerate(RWScurves): 409 for iEW, cEW in enumerate(RWScurves): 410 for iSN, cSN in enumerate(RWScurves): 411 # s, desc, sID 412 yield self.runSingle(RWScurves, iWE, iNS, iEW, iSN)
def
runSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None):
414 def runSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 415 cWE = RWScurves[iWE] 416 cNS = RWScurves[iNS] 417 cEW = RWScurves[iEW] 418 cSN = RWScurves[iSN] 419 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 420 if uID is None: 421 sID = "RiLSA1LoadCurves(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 422 else: 423 sID = "RiLSA1LoadCurves(%s)" % (uID) 424 s = getScenario("RiLSA1", {}) 425 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 426 print(s.demandName) 427 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 428 nStreams = [] 429 for stream in s.demand.streams: 430 if stream._departEdgeModel.startswith("nm"): 431 nStreams.extend( 432 extrapolateDemand(stream, 3600, cNS, 7).streams) 433 elif stream._departEdgeModel.startswith("em"): 434 nStreams.extend( 435 extrapolateDemand(stream, 3600, cEW, 7).streams) 436 elif stream._departEdgeModel.startswith("sm"): 437 nStreams.extend( 438 extrapolateDemand(stream, 3600, cSN, 7).streams) 439 elif stream._departEdgeModel.startswith("wm"): 440 nStreams.extend( 441 extrapolateDemand(stream, 3600, cWE, 7).streams) 442 else: 443 print(stream._departEdgeModel) 444 raise RuntimeError("Hmmm, unknown stream??") 445 s.demand.streams = nStreams 446 end = 86400 447 sampleFactor = None 448 seenRatio = None 449 if "sample-factor" in self.params: 450 sampleFactor = self.params["sample-factor"] 451 if "seen-ratio" in self.params: 452 seenRatio = self.params["seen-ratio"] 453 s.demand.build( 454 0, end, s.netName, s.demandName, sampleFactor, seenRatio) 455 desc = {"scenario": "RiLSA1LoadCurves", "iWE": str( 456 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 457 return s, desc, sID
def
getRunsMatrix(self):
459 def getRunsMatrix(self): 460 ret = [] 461 ranges = [[], []] 462 RWScurves = getRWScurves() 463 i = 0 464 for iWE, cWE in enumerate(RWScurves): 465 for iNS, cNS in enumerate(RWScurves): 466 ret.append([]) 467 ranges[0].append("%s/%s" % (iWE, iNS)) 468 i = i + 1 469 j = 0 470 for iEW, cEW in enumerate(RWScurves): 471 for iSN, cSN in enumerate(RWScurves): 472 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": 473 str(iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurves"}) 474 ranges[-1].append("%s/%s" % (iEW, iSN)) 475 j = j + 1 476 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
481 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 482 # adapt tls to current settings 483 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 484 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 485 fdo.write("<additional>\n") 486 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 487 for tlsID in net._id2tls: 488 tls = net._id2tls[tlsID] 489 (streamsNS, streamsWE) = scenario.getOppositeFlows() 490 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 491 for prog in tls._programs: 492 i1 = i2 = 0 493 for i, p in enumerate(tls._programs[prog]._phases): 494 if p[1] == 40: 495 i1 = i 496 elif p[1] == 12: 497 i2 = i 498 for t in greens: 499 tls._programs[prog]._type = tls_algorithm 500 tls._programs[prog]._id = "adapted" + str(t) 501 self.addTLSParameterFromFile( 502 tls._programs[prog], options.tls_params) 503 tls._programs[prog]._phases[i1][1] = greens[t][1] 504 tls._programs[prog]._phases[i2][1] = greens[t][0] 505 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 506 fdo.write('\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 507 for t in times: 508 fdo.write('\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 509 fdo.write("\t</WAUT>\n") 510 fdo.write('\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 511 fdo.write("</additional>\n") 512 fdo.close() 513 args = [] 514 return args
def
adapt2TLS2(self, sID, scenario, options, tls_algorithm):
516 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 517 # adapt tls to current settings 518 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 519 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 520 fdo.write("<additional>\n") 521 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 522 for tlsID in net._id2tls: 523 tls = net._id2tls[tlsID] 524 (streamsNS, streamsWE) = scenario.getOppositeFlows() 525 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 526 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 527 greens = split_by_proportions(72, (ns, we), (10, 10)) 528 for prog in tls._programs: 529 i1 = i2 = 0 530 for i, p in enumerate(tls._programs[prog]._phases): 531 if p[1] == 40: 532 i1 = i 533 elif p[1] == 12: 534 i2 = i 535 tls._programs[prog]._type = tls_algorithm 536 tls._programs[prog]._id = "adapted" 537 self.addTLSParameterFromFile( 538 tls._programs[prog], options.tls_params) 539 540 tls._programs[prog]._phases[i1][1] = greens[1] 541 tls._programs[prog]._phases[i2][1] = greens[0] 542 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 543 fdo.write("</additional>\n") 544 fdo.close() 545 args = [] 546 return args
Inherited Members
568class ScenarioSet_RiLSA1LoadCurvesSampled(ScenarioSet): 569 570 def __init__(self, params): 571 ScenarioSet.__init__(self, "RiLSA1LoadCurvesSampled", merge( 572 {}, 573 params)) 574 575 def getNumRuns(self): 576 return 3 * 3 * 3 * 3 577 578 def iterateScenarios(self): 579 """ 580 Yields returning a built scenario and its description as key/value pairs 581 """ 582 # desc = {"name": "RiLSA1LoadCurvesSampled"} 583 RWScurves = getRWScurves() 584 for iWE, cWE in enumerate(RWScurves): 585 for iNS, cNS in enumerate(RWScurves): 586 for iEW, cEW in enumerate(RWScurves): 587 for iSN, cSN in enumerate(RWScurves): 588 # s, desc, sID 589 yield self.runSingle(RWScurves, iWE, iNS, iEW, iSN) 590 591 def runSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 592 cWE = RWScurves[iWE] 593 cNS = RWScurves[iNS] 594 cEW = RWScurves[iEW] 595 cSN = RWScurves[iSN] 596 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 597 if uID is None: 598 sID = "RiLSA1LoadCurvesSampled(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 599 else: 600 sID = "RiLSA1LoadCurvesSampled(%s)" % (uID) 601 s = getScenario("RiLSA1", {}) 602 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 603 print(s.demandName) 604 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 605 nStreams = [] 606 for stream in s.demand.streams: 607 if stream._departEdgeModel.startswith("nm"): 608 nStreams.extend( 609 extrapolateDemand(stream, 3600, cNS, 7).streams) 610 elif stream._departEdgeModel.startswith("em"): 611 nStreams.extend( 612 extrapolateDemand(stream, 3600, cEW, 7).streams) 613 elif stream._departEdgeModel.startswith("sm"): 614 nStreams.extend( 615 extrapolateDemand(stream, 3600, cSN, 7).streams) 616 elif stream._departEdgeModel.startswith("wm"): 617 nStreams.extend( 618 extrapolateDemand(stream, 3600, cWE, 7).streams) 619 else: 620 print(stream._departEdgeModel) 621 raise RuntimeError("Hmmm, unknown stream??") 622 s.demand.streams = nStreams 623 end = 86400 624 sampleFactor = 1 625 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 626 desc = {"scenario": "RiLSA1LoadCurvesSampled", "iWE": str( 627 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 628 return s, desc, sID 629 630 def getRunsMatrix(self): 631 ret = [] 632 ranges = [[], []] 633 RWScurves = getRWScurves() 634 i = 0 635 for iWE, cWE in enumerate(RWScurves): 636 for iNS, cNS in enumerate(RWScurves): 637 ret.append([]) 638 ranges[0].append("%s/%s" % (iWE, iNS)) 639 i = i + 1 640 j = 0 641 for iEW, cEW in enumerate(RWScurves): 642 for iSN, cSN in enumerate(RWScurves): 643 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": str( 644 iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurvesSampled"}) 645 ranges[-1].append("%s/%s" % (iEW, iSN)) 646 j = j + 1 647 return (ret, ranges) 648 649 def getAverageDuration(self): 650 return -1 # !!! 651 652 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 653 # adapt tls to current settings 654 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 655 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 656 fdo.write("<additional>\n") 657 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 658 for tlsID in net._id2tls: 659 tls = net._id2tls[tlsID] 660 (streamsNS, streamsWE) = scenario.getOppositeFlows() 661 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 662 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 663 greens = split_by_proportions(72, (ns, we), (10, 10)) 664 for prog in tls._programs: 665 i1 = i2 = 0 666 for i, p in enumerate(tls._programs[prog]._phases): 667 if p[1] == 40: 668 i1 = i 669 elif p[1] == 12: 670 i2 = i 671 tls._programs[prog]._type = tls_algorithm 672 tls._programs[prog]._id = "adapted" 673 self.addTLSParameterFromFile( 674 tls._programs[prog], options.tls_params) 675 676 tls._programs[prog]._phases[i1][1] = greens[1] 677 tls._programs[prog]._phases[i2][1] = greens[0] 678 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 679 fdo.write("</additional>\n") 680 fdo.close() 681 args = [] 682 return args 683 684 def getXLabel(self): 685 return "RWS type (west-east)/RWS type (north-south)" 686 687 def getYLabel(self): 688 return "RWS type (east-west)/RWS type (south-north)" 689 690 def halfX(self): 691 return False 692 693 def getAdditionalDivider(self): 694 return [ 695 [2.5, -0.5, 2.5, 8.5], 696 [5.5, -0.5, 5.5, 8.5], 697 [-0.5, 2.5, 8.5, 2.5], 698 [-0.5, 5.5, 8.5, 5.5] 699 ]
def
iterateScenarios(self):
578 def iterateScenarios(self): 579 """ 580 Yields returning a built scenario and its description as key/value pairs 581 """ 582 # desc = {"name": "RiLSA1LoadCurvesSampled"} 583 RWScurves = getRWScurves() 584 for iWE, cWE in enumerate(RWScurves): 585 for iNS, cNS in enumerate(RWScurves): 586 for iEW, cEW in enumerate(RWScurves): 587 for iSN, cSN in enumerate(RWScurves): 588 # s, desc, sID 589 yield self.runSingle(RWScurves, iWE, iNS, iEW, iSN)
Yields returning a built scenario and its description as key/value pairs
def
runSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None):
591 def runSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 592 cWE = RWScurves[iWE] 593 cNS = RWScurves[iNS] 594 cEW = RWScurves[iEW] 595 cSN = RWScurves[iSN] 596 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 597 if uID is None: 598 sID = "RiLSA1LoadCurvesSampled(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 599 else: 600 sID = "RiLSA1LoadCurvesSampled(%s)" % (uID) 601 s = getScenario("RiLSA1", {}) 602 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 603 print(s.demandName) 604 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 605 nStreams = [] 606 for stream in s.demand.streams: 607 if stream._departEdgeModel.startswith("nm"): 608 nStreams.extend( 609 extrapolateDemand(stream, 3600, cNS, 7).streams) 610 elif stream._departEdgeModel.startswith("em"): 611 nStreams.extend( 612 extrapolateDemand(stream, 3600, cEW, 7).streams) 613 elif stream._departEdgeModel.startswith("sm"): 614 nStreams.extend( 615 extrapolateDemand(stream, 3600, cSN, 7).streams) 616 elif stream._departEdgeModel.startswith("wm"): 617 nStreams.extend( 618 extrapolateDemand(stream, 3600, cWE, 7).streams) 619 else: 620 print(stream._departEdgeModel) 621 raise RuntimeError("Hmmm, unknown stream??") 622 s.demand.streams = nStreams 623 end = 86400 624 sampleFactor = 1 625 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 626 desc = {"scenario": "RiLSA1LoadCurvesSampled", "iWE": str( 627 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 628 return s, desc, sID
def
getRunsMatrix(self):
630 def getRunsMatrix(self): 631 ret = [] 632 ranges = [[], []] 633 RWScurves = getRWScurves() 634 i = 0 635 for iWE, cWE in enumerate(RWScurves): 636 for iNS, cNS in enumerate(RWScurves): 637 ret.append([]) 638 ranges[0].append("%s/%s" % (iWE, iNS)) 639 i = i + 1 640 j = 0 641 for iEW, cEW in enumerate(RWScurves): 642 for iSN, cSN in enumerate(RWScurves): 643 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": str( 644 iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurvesSampled"}) 645 ranges[-1].append("%s/%s" % (iEW, iSN)) 646 j = j + 1 647 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
652 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 653 # adapt tls to current settings 654 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 655 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 656 fdo.write("<additional>\n") 657 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 658 for tlsID in net._id2tls: 659 tls = net._id2tls[tlsID] 660 (streamsNS, streamsWE) = scenario.getOppositeFlows() 661 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 662 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 663 greens = split_by_proportions(72, (ns, we), (10, 10)) 664 for prog in tls._programs: 665 i1 = i2 = 0 666 for i, p in enumerate(tls._programs[prog]._phases): 667 if p[1] == 40: 668 i1 = i 669 elif p[1] == 12: 670 i2 = i 671 tls._programs[prog]._type = tls_algorithm 672 tls._programs[prog]._id = "adapted" 673 self.addTLSParameterFromFile( 674 tls._programs[prog], options.tls_params) 675 676 tls._programs[prog]._phases[i1][1] = greens[1] 677 tls._programs[prog]._phases[i2][1] = greens[0] 678 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 679 fdo.write("</additional>\n") 680 fdo.close() 681 args = [] 682 return args
Inherited Members
704class ScenarioSet_BasicOutflow(ScenarioSet): 705 706 def __init__(self, params): 707 ScenarioSet.__init__(self, "BasicOutflow", merge( 708 {"g1from": "4", "g1to": "64", "g1step": "5", 709 "g2from": "4", "g2to": "64", "g2step": "5"}, 710 params)) 711 712 def getNumRuns(self): 713 g1num = 1 + \ 714 (self.getInt("g1to") - self.getInt("g1from")) / \ 715 self.getInt("g1step") 716 g2num = 1 + \ 717 (self.getInt("g2to") - self.getInt("g2from")) / \ 718 self.getInt("g2step") 719 return g1num * g2num 720 721 def iterateScenarios(self): 722 desc = {"name": "BasicOutflow"} 723 for f1 in range(self.getInt("g1from"), self.getInt("g1to"), self.getInt("g1step")): 724 for f2 in range(self.getInt("g2from"), self.getInt("g2to"), self.getInt("g2step")): 725 if f1 == 0 and f2 == 0: 726 continue 727 print("Computing for %s<->%s" % (f1, f2)) 728 sID = "BasicOutflow(%s-%s)" % (f1, f2) 729 s = getScenario("BasicCross", {}, False) 730 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 731 if fileNeedsRebuild(s.demandName, "duarouter"): 732 s.demand = demandGenerator.Demand() 733 # why isn't it possible to get a network and return all 734 # possible routes or whatever - to ease the process 735 s.demand.addStream(demandGenerator.Stream( 736 None, 0, 3600, f1, "2/1_to_1/1", "1/1_to_0/1", {"passenger": 1})) 737 # why isn't it possible to get a network and return all 738 # possible routes or whatever - to ease the process 739 s.demand.addStream(demandGenerator.Stream( 740 None, 0, 3600, f1, "0/1_to_1/1", "1/1_to_2/1", {"passenger": 1})) 741 # why isn't it possible to get a network and return all 742 # possible routes or whatever - to ease the process 743 s.demand.addStream(demandGenerator.Stream( 744 None, 0, 3600, f2, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 745 # why isn't it possible to get a network and return all 746 # possible routes or whatever - to ease the process 747 s.demand.addStream(demandGenerator.Stream( 748 None, 0, 3600, f2, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 749 s.demand.build(0, 3600, s.netName, s.demandName) 750 # !!! the following two lines are a hack to pass the numbers instead of recomputing them 751 s.demand._f1Value = f1 752 s.demand._f2Value = f2 753 desc = { 754 "scenario": "BasicOutflow", "g1": str(f1), "g2": str(f2)} 755 yield s, desc, sID 756 757 def getRunsMatrix(self): 758 ret = [] 759 ranges = [[], []] 760 for g1 in range(self.getInt("g1from"), self.getInt("g1to"), self.getInt("g1step")): 761 ret.append([]) 762 ranges[0].append(g1) 763 for g2 in range(self.getInt("g2from"), self.getInt("g2to"), self.getInt("g2step")): 764 ret[-1].append({"scenario": "BasicOutflow", 765 "g1": str(g1), "g2": str(g2)}) 766 ranges[1].append(g2) 767 return (ret, ranges) 768 769 def getAverageDuration(self): 770 return -1 # !!! 771 772 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 773 # adapt tls to current settings 774 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 775 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 776 fdo.write("<additional>\n") 777 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 778 for tlsID in net._id2tls: 779 tls = net._id2tls[tlsID] 780 for prog in tls._programs: 781 tls._programs[prog]._type = tls_algorithm 782 tls._programs[prog]._id = "adapted" 783 self.addTLSParameterFromFile( 784 tls._programs[prog], options.tls_params) 785 scenario.demand._f1Value = float( 786 max(scenario.demand._f1Value, 1)) 787 scenario.demand._f2Value = float( 788 max(scenario.demand._f2Value, 1)) 789 t = scenario.demand._f1Value + scenario.demand._f2Value 790 greens = split_by_proportions( 791 80, (scenario.demand._f1Value / t, scenario.demand._f2Value / t), (10, 10)) 792 tls._programs[prog]._phases[0][1] = greens[0] 793 tls._programs[prog]._phases[3][1] = greens[1] 794 fdo.write(tls._programs[prog].toXML(tlsID)) 795 fdo.write("</additional>\n") 796 fdo.close() 797 args = [] 798 return args 799 800 def getXLabel(self): 801 return "horizontal demand [vehicles/h]" 802 803 def getYLabel(self): 804 return "vertical demand [vehicles/h]" 805 806 def getAdditionalDivider(self): 807 return [] 808 809 def orientationX(self): 810 return 90 811 812 def halfX(self): 813 return False
def
iterateScenarios(self):
721 def iterateScenarios(self): 722 desc = {"name": "BasicOutflow"} 723 for f1 in range(self.getInt("g1from"), self.getInt("g1to"), self.getInt("g1step")): 724 for f2 in range(self.getInt("g2from"), self.getInt("g2to"), self.getInt("g2step")): 725 if f1 == 0 and f2 == 0: 726 continue 727 print("Computing for %s<->%s" % (f1, f2)) 728 sID = "BasicOutflow(%s-%s)" % (f1, f2) 729 s = getScenario("BasicCross", {}, False) 730 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 731 if fileNeedsRebuild(s.demandName, "duarouter"): 732 s.demand = demandGenerator.Demand() 733 # why isn't it possible to get a network and return all 734 # possible routes or whatever - to ease the process 735 s.demand.addStream(demandGenerator.Stream( 736 None, 0, 3600, f1, "2/1_to_1/1", "1/1_to_0/1", {"passenger": 1})) 737 # why isn't it possible to get a network and return all 738 # possible routes or whatever - to ease the process 739 s.demand.addStream(demandGenerator.Stream( 740 None, 0, 3600, f1, "0/1_to_1/1", "1/1_to_2/1", {"passenger": 1})) 741 # why isn't it possible to get a network and return all 742 # possible routes or whatever - to ease the process 743 s.demand.addStream(demandGenerator.Stream( 744 None, 0, 3600, f2, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 745 # why isn't it possible to get a network and return all 746 # possible routes or whatever - to ease the process 747 s.demand.addStream(demandGenerator.Stream( 748 None, 0, 3600, f2, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 749 s.demand.build(0, 3600, s.netName, s.demandName) 750 # !!! the following two lines are a hack to pass the numbers instead of recomputing them 751 s.demand._f1Value = f1 752 s.demand._f2Value = f2 753 desc = { 754 "scenario": "BasicOutflow", "g1": str(f1), "g2": str(f2)} 755 yield s, desc, sID
def
getRunsMatrix(self):
757 def getRunsMatrix(self): 758 ret = [] 759 ranges = [[], []] 760 for g1 in range(self.getInt("g1from"), self.getInt("g1to"), self.getInt("g1step")): 761 ret.append([]) 762 ranges[0].append(g1) 763 for g2 in range(self.getInt("g2from"), self.getInt("g2to"), self.getInt("g2step")): 764 ret[-1].append({"scenario": "BasicOutflow", 765 "g1": str(g1), "g2": str(g2)}) 766 ranges[1].append(g2) 767 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
772 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 773 # adapt tls to current settings 774 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 775 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 776 fdo.write("<additional>\n") 777 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 778 for tlsID in net._id2tls: 779 tls = net._id2tls[tlsID] 780 for prog in tls._programs: 781 tls._programs[prog]._type = tls_algorithm 782 tls._programs[prog]._id = "adapted" 783 self.addTLSParameterFromFile( 784 tls._programs[prog], options.tls_params) 785 scenario.demand._f1Value = float( 786 max(scenario.demand._f1Value, 1)) 787 scenario.demand._f2Value = float( 788 max(scenario.demand._f2Value, 1)) 789 t = scenario.demand._f1Value + scenario.demand._f2Value 790 greens = split_by_proportions( 791 80, (scenario.demand._f1Value / t, scenario.demand._f2Value / t), (10, 10)) 792 tls._programs[prog]._phases[0][1] = greens[0] 793 tls._programs[prog]._phases[3][1] = greens[1] 794 fdo.write(tls._programs[prog].toXML(tlsID)) 795 fdo.write("</additional>\n") 796 fdo.close() 797 args = [] 798 return args
Inherited Members
818class ScenarioSet_RiLSA1Outflow(ScenarioSet_RiLSA1LoadCurvesSampled): 819 820 def __init__(self, params): 821 ScenarioSet.__init__(self, "RiLSA1Outflow", merge( 822 {"g1from": "8", "g1to": "81", "g1step": "8", 823 "g2from": "8", "g2to": "81", "g2step": "8"}, 824 params)) 825 826 def getNumRuns(self): 827 f1num = 1 + \ 828 (self.getInt("g1to") - self.getInt("g1from")) / \ 829 self.getInt("g1step") 830 f2num = 1 + \ 831 (self.getInt("g2to") - self.getInt("g2from")) / \ 832 self.getInt("g2step") 833 return f1num * f2num 834 """ 835 Yields returning a built scenario and its description as key/value pairs 836 """ 837 838 def iterateScenarios(self): 839 # desc = {"name": "RiLSA1Outflow"} 840 RWScurves = getRWScurves() 841 for g1 in range(self.getInt("g1from"), self.getInt("g1to"), self.getInt("g1step")): 842 for g2 in range(self.getInt("g2from"), self.getInt("g2to"), self.getInt("g2step")): 843 yield self.runSingle(RWScurves, g1, g2) 844 845 def runSingle(self, RWScurves, g1, g2, uID=None): 846 cWE = RWScurves[0] 847 cNS = RWScurves[1] 848 cEW = RWScurves[2] 849 cSN = RWScurves[1] 850 print("Computing for %s %s" % (g1, g2)) 851 sID = "RiLSA1Outflow(%s-%s)" % (g1, g2) 852 s = getScenario("RiLSA1OutTLS", {}) 853 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 854 s.params["g1"] = g1 855 s.params["g2"] = g2 856 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 857 nStreams = [] 858 for stream in s.demand.streams: 859 if stream._departEdgeModel.startswith("nm"): 860 nStreams.extend( 861 extrapolateDemand(stream, 3600, cNS, 7).streams) 862 elif stream._departEdgeModel.startswith("em"): 863 nStreams.extend( 864 extrapolateDemand(stream, 3600, cEW, 7).streams) 865 elif stream._departEdgeModel.startswith("sm"): 866 nStreams.extend( 867 extrapolateDemand(stream, 3600, cSN, 7).streams) 868 elif stream._departEdgeModel.startswith("wm"): 869 nStreams.extend( 870 extrapolateDemand(stream, 3600, cWE, 7).streams) 871 else: 872 print(stream._departEdgeModel) 873 raise RuntimeError("Hmmm, unknown stream??") 874 s.demand.streams = nStreams 875 end = 86400 876 sampleFactor = 1 877 if "seen-ratio" in self.params: 878 self.params["seen-ratio"] 879 # , seenRatio) 880 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 881 desc = {"scenario": "RiLSA1Outflow", "g1": str(g1), "g2": str(g2)} 882 return s, desc, sID 883 884 def getRunsMatrix(self): 885 ret = [] 886 ranges = [[], []] 887 for g1 in range(self.getInt("g1from"), self.getInt("g1to"), self.getInt("g1step")): 888 ret.append([]) 889 ranges[0].append(g1) 890 for g2 in range(self.getInt("g2from"), self.getInt("g2to"), self.getInt("g2step")): 891 ret[-1].append({"g1": str(g1), "g2": str(g2), 892 "scenario": "RiLSA1Outflow"}) 893 ranges[-1].append(g2) 894 return (ret, ranges) 895 896 def getAverageDuration(self): 897 return -1 # !!! 898 899 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 900 # adapt tls to current settings 901 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 902 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 903 fdo.write("<additional>\n") 904 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 905 for tlsID in net._id2tls: 906 907 tls = net._id2tls[tlsID] 908 if tlsID == "0": 909 (streamsNS, streamsWE) = scenario.getOppositeFlows() 910 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 911 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 912 greens = split_by_proportions(72, (ns, we), (10, 10)) 913 for prog in tls._programs: 914 i1 = i2 = 0 915 for i, p in enumerate(tls._programs[prog]._phases): 916 if p[1] == 40: 917 i1 = i 918 elif p[1] == 12: 919 i2 = i 920 tls._programs[prog]._type = tls_algorithm 921 self.addTLSParameterFromFile( 922 tls._programs[prog], options.tls_params) 923 tls._programs[prog]._phases[i1][1] = greens[1] 924 tls._programs[prog]._phases[i2][1] = greens[0] 925 tls._programs[prog]._id = "adapted" 926 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 927 else: 928 if tlsID[0] == 'e' or tlsID[0] == 'w': 929 tls._programs[prog]._phases[0][ 930 1] = int(scenario.params["g1"]) 931 tls._programs[prog]._phases[2][ 932 1] = 92 - 4 - int(scenario.params["g1"]) 933 else: 934 tls._programs[prog]._phases[1][ 935 1] = int(scenario.params["g2"]) 936 tls._programs[prog]._phases[0][ 937 1] = 92 - 4 - int(scenario.params["g2"]) 938 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 939 fdo.write("</additional>\n") 940 fdo.close() 941 args = [] 942 return args 943 944 def getXLabel(self): 945 return "horizontal green time [s]" 946 947 def getYLabel(self): 948 return "vertical green time [s]" 949 950 def getAdditionalDivider(self): 951 return [] 952 953 def halfX(self): 954 return False
def
iterateScenarios(self):
838 def iterateScenarios(self): 839 # desc = {"name": "RiLSA1Outflow"} 840 RWScurves = getRWScurves() 841 for g1 in range(self.getInt("g1from"), self.getInt("g1to"), self.getInt("g1step")): 842 for g2 in range(self.getInt("g2from"), self.getInt("g2to"), self.getInt("g2step")): 843 yield self.runSingle(RWScurves, g1, g2)
Yields returning a built scenario and its description as key/value pairs
def
runSingle(self, RWScurves, g1, g2, uID=None):
845 def runSingle(self, RWScurves, g1, g2, uID=None): 846 cWE = RWScurves[0] 847 cNS = RWScurves[1] 848 cEW = RWScurves[2] 849 cSN = RWScurves[1] 850 print("Computing for %s %s" % (g1, g2)) 851 sID = "RiLSA1Outflow(%s-%s)" % (g1, g2) 852 s = getScenario("RiLSA1OutTLS", {}) 853 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 854 s.params["g1"] = g1 855 s.params["g2"] = g2 856 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 857 nStreams = [] 858 for stream in s.demand.streams: 859 if stream._departEdgeModel.startswith("nm"): 860 nStreams.extend( 861 extrapolateDemand(stream, 3600, cNS, 7).streams) 862 elif stream._departEdgeModel.startswith("em"): 863 nStreams.extend( 864 extrapolateDemand(stream, 3600, cEW, 7).streams) 865 elif stream._departEdgeModel.startswith("sm"): 866 nStreams.extend( 867 extrapolateDemand(stream, 3600, cSN, 7).streams) 868 elif stream._departEdgeModel.startswith("wm"): 869 nStreams.extend( 870 extrapolateDemand(stream, 3600, cWE, 7).streams) 871 else: 872 print(stream._departEdgeModel) 873 raise RuntimeError("Hmmm, unknown stream??") 874 s.demand.streams = nStreams 875 end = 86400 876 sampleFactor = 1 877 if "seen-ratio" in self.params: 878 self.params["seen-ratio"] 879 # , seenRatio) 880 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 881 desc = {"scenario": "RiLSA1Outflow", "g1": str(g1), "g2": str(g2)} 882 return s, desc, sID
def
getRunsMatrix(self):
884 def getRunsMatrix(self): 885 ret = [] 886 ranges = [[], []] 887 for g1 in range(self.getInt("g1from"), self.getInt("g1to"), self.getInt("g1step")): 888 ret.append([]) 889 ranges[0].append(g1) 890 for g2 in range(self.getInt("g2from"), self.getInt("g2to"), self.getInt("g2step")): 891 ret[-1].append({"g1": str(g1), "g2": str(g2), 892 "scenario": "RiLSA1Outflow"}) 893 ranges[-1].append(g2) 894 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
899 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 900 # adapt tls to current settings 901 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 902 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 903 fdo.write("<additional>\n") 904 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 905 for tlsID in net._id2tls: 906 907 tls = net._id2tls[tlsID] 908 if tlsID == "0": 909 (streamsNS, streamsWE) = scenario.getOppositeFlows() 910 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 911 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 912 greens = split_by_proportions(72, (ns, we), (10, 10)) 913 for prog in tls._programs: 914 i1 = i2 = 0 915 for i, p in enumerate(tls._programs[prog]._phases): 916 if p[1] == 40: 917 i1 = i 918 elif p[1] == 12: 919 i2 = i 920 tls._programs[prog]._type = tls_algorithm 921 self.addTLSParameterFromFile( 922 tls._programs[prog], options.tls_params) 923 tls._programs[prog]._phases[i1][1] = greens[1] 924 tls._programs[prog]._phases[i2][1] = greens[0] 925 tls._programs[prog]._id = "adapted" 926 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 927 else: 928 if tlsID[0] == 'e' or tlsID[0] == 'w': 929 tls._programs[prog]._phases[0][ 930 1] = int(scenario.params["g1"]) 931 tls._programs[prog]._phases[2][ 932 1] = 92 - 4 - int(scenario.params["g1"]) 933 else: 934 tls._programs[prog]._phases[1][ 935 1] = int(scenario.params["g2"]) 936 tls._programs[prog]._phases[0][ 937 1] = 92 - 4 - int(scenario.params["g2"]) 938 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 939 fdo.write("</additional>\n") 940 fdo.close() 941 args = [] 942 return args
Inherited Members
959class ScenarioSet_RiLSA1PedFlow(ScenarioSet_RiLSA1LoadCurvesSampled): 960 961 def __init__(self, params): 962 ScenarioSet.__init__(self, "RiLSA1PedFlow", merge( 963 {"f1from": "0", "f1to": "501", "f1step": "50", 964 "f2from": "0", "f2to": "501", "f2step": "50"}, 965 params)) 966 967 def getNumRuns(self): 968 f1num = 1 + \ 969 (self.getInt("f1to") - self.getInt("f1from")) / \ 970 self.getInt("f1step") 971 f2num = 1 + \ 972 (self.getInt("f2to") - self.getInt("f2from")) / \ 973 self.getInt("f2step") 974 return f1num * f2num 975 """ 976 Yields returning a built scenario and its description as key/value pairs 977 """ 978 979 def iterateScenarios(self): 980 # desc = {"name": "RiLSA1PedFlow"} 981 RWScurves = getRWScurves() 982 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 983 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 984 yield self.runSingle(RWScurves, f1, f2) 985 986 def runSingle(self, RWScurves, f1, f2, uID=None): 987 cWE = RWScurves[0] 988 cNS = RWScurves[1] 989 cEW = RWScurves[2] 990 cSN = RWScurves[1] 991 print("Computing for %s %s" % (f1, f2)) 992 sID = "RiLSA1PedFlow(%s-%s)" % (f1, f2) 993 s = getScenario("RiLSA1", {}) 994 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 995 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 996 nStreams = [] 997 for stream in s.demand.streams: 998 if stream._departEdgeModel.startswith("nm"): 999 nStreams.extend( 1000 extrapolateDemand(stream, 3600, cNS, 7).streams) 1001 elif stream._departEdgeModel.startswith("em"): 1002 nStreams.extend( 1003 extrapolateDemand(stream, 3600, cEW, 7).streams) 1004 elif stream._departEdgeModel.startswith("sm"): 1005 nStreams.extend( 1006 extrapolateDemand(stream, 3600, cSN, 7).streams) 1007 elif stream._departEdgeModel.startswith("wm"): 1008 nStreams.extend( 1009 extrapolateDemand(stream, 3600, cWE, 7).streams) 1010 else: 1011 print(stream._departEdgeModel) 1012 raise RuntimeError("Hmmm, unknown stream??") 1013 s.demand.streams = nStreams 1014 s.demand.addStream(demandGenerator.Stream( 1015 "p_emp_to_mw", 0, 86400, f1, "emp", "mw", {"pedestrian": 1})) 1016 s.demand.addStream(demandGenerator.Stream( 1017 "p_wmp_to_me", 0, 86400, f1, "wmp", "me", {"pedestrian": 1})) 1018 s.demand.addStream(demandGenerator.Stream( 1019 "p_nmp_to_ms", 0, 86400, f2, "nmp", "ms", {"pedestrian": 1})) 1020 s.demand.addStream(demandGenerator.Stream( 1021 "p_smp_to_mn", 0, 86400, f2, "smp", "mn", {"pedestrian": 1})) 1022 end = 86400 1023 sampleFactor = 1 1024 if "seen-ratio" in self.params: 1025 self.params["seen-ratio"] 1026 # , seenRatio) 1027 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 1028 desc = {"scenario": "RiLSA1PedFlow", "f1": str(f1), "f2": str(f2)} 1029 return s, desc, sID 1030 1031 def getRunsMatrix(self): 1032 ret = [] 1033 ranges = [[], []] 1034 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1035 ret.append([]) 1036 ranges[0].append(f1) 1037 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 1038 ret[-1].append({"f1": str(f1), "f2": str(f2), 1039 "scenario": "RiLSA1PedFlow"}) 1040 ranges[-1].append(f2) 1041 return (ret, ranges) 1042 1043 def getAverageDuration(self): 1044 return -1 # !!! 1045 1046 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1047 # adapt tls to current settings 1048 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1049 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1050 fdo.write("<additional>\n") 1051 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1052 for tlsID in net._id2tls: 1053 1054 tls = net._id2tls[tlsID] 1055 if tlsID == "0": 1056 (streamsNS, streamsWE) = scenario.getOppositeFlows() 1057 streamsNS[0] = 34 1058 streamsWE[0] = 38 1059 ns = 340. / (720.) 1060 we = 380. / (720.) 1061 greens = split_by_proportions(72, (ns, we), (10, 10)) 1062 for prog in tls._programs: 1063 i1 = i2 = 0 1064 for i, p in enumerate(tls._programs[prog]._phases): 1065 if p[1] == 40: 1066 i1 = i 1067 elif p[1] == 12: 1068 i2 = i 1069 tls._programs[prog]._type = tls_algorithm 1070 self.addTLSParameterFromFile( 1071 tls._programs[prog], options.tls_params) 1072 tls._programs[prog]._phases[i1][1] = greens[1] 1073 tls._programs[prog]._phases[i2][1] = greens[0] 1074 tls._programs[prog]._id = "adapted" 1075 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 1076 fdo.write("</additional>\n") 1077 fdo.close() 1078 args = [] 1079 return args 1080 1081 def getXLabel(self): 1082 return "horizontal pedestrian flow [pedestrians/hour]" 1083 1084 def getYLabel(self): 1085 return "vertical pedestrian flow [pedestrians/hour]" 1086 1087 def getAdditionalDivider(self): 1088 return []
def
iterateScenarios(self):
979 def iterateScenarios(self): 980 # desc = {"name": "RiLSA1PedFlow"} 981 RWScurves = getRWScurves() 982 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 983 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 984 yield self.runSingle(RWScurves, f1, f2)
Yields returning a built scenario and its description as key/value pairs
def
runSingle(self, RWScurves, f1, f2, uID=None):
986 def runSingle(self, RWScurves, f1, f2, uID=None): 987 cWE = RWScurves[0] 988 cNS = RWScurves[1] 989 cEW = RWScurves[2] 990 cSN = RWScurves[1] 991 print("Computing for %s %s" % (f1, f2)) 992 sID = "RiLSA1PedFlow(%s-%s)" % (f1, f2) 993 s = getScenario("RiLSA1", {}) 994 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 995 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 996 nStreams = [] 997 for stream in s.demand.streams: 998 if stream._departEdgeModel.startswith("nm"): 999 nStreams.extend( 1000 extrapolateDemand(stream, 3600, cNS, 7).streams) 1001 elif stream._departEdgeModel.startswith("em"): 1002 nStreams.extend( 1003 extrapolateDemand(stream, 3600, cEW, 7).streams) 1004 elif stream._departEdgeModel.startswith("sm"): 1005 nStreams.extend( 1006 extrapolateDemand(stream, 3600, cSN, 7).streams) 1007 elif stream._departEdgeModel.startswith("wm"): 1008 nStreams.extend( 1009 extrapolateDemand(stream, 3600, cWE, 7).streams) 1010 else: 1011 print(stream._departEdgeModel) 1012 raise RuntimeError("Hmmm, unknown stream??") 1013 s.demand.streams = nStreams 1014 s.demand.addStream(demandGenerator.Stream( 1015 "p_emp_to_mw", 0, 86400, f1, "emp", "mw", {"pedestrian": 1})) 1016 s.demand.addStream(demandGenerator.Stream( 1017 "p_wmp_to_me", 0, 86400, f1, "wmp", "me", {"pedestrian": 1})) 1018 s.demand.addStream(demandGenerator.Stream( 1019 "p_nmp_to_ms", 0, 86400, f2, "nmp", "ms", {"pedestrian": 1})) 1020 s.demand.addStream(demandGenerator.Stream( 1021 "p_smp_to_mn", 0, 86400, f2, "smp", "mn", {"pedestrian": 1})) 1022 end = 86400 1023 sampleFactor = 1 1024 if "seen-ratio" in self.params: 1025 self.params["seen-ratio"] 1026 # , seenRatio) 1027 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 1028 desc = {"scenario": "RiLSA1PedFlow", "f1": str(f1), "f2": str(f2)} 1029 return s, desc, sID
def
getRunsMatrix(self):
1031 def getRunsMatrix(self): 1032 ret = [] 1033 ranges = [[], []] 1034 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1035 ret.append([]) 1036 ranges[0].append(f1) 1037 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 1038 ret[-1].append({"f1": str(f1), "f2": str(f2), 1039 "scenario": "RiLSA1PedFlow"}) 1040 ranges[-1].append(f2) 1041 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
1046 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1047 # adapt tls to current settings 1048 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1049 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1050 fdo.write("<additional>\n") 1051 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1052 for tlsID in net._id2tls: 1053 1054 tls = net._id2tls[tlsID] 1055 if tlsID == "0": 1056 (streamsNS, streamsWE) = scenario.getOppositeFlows() 1057 streamsNS[0] = 34 1058 streamsWE[0] = 38 1059 ns = 340. / (720.) 1060 we = 380. / (720.) 1061 greens = split_by_proportions(72, (ns, we), (10, 10)) 1062 for prog in tls._programs: 1063 i1 = i2 = 0 1064 for i, p in enumerate(tls._programs[prog]._phases): 1065 if p[1] == 40: 1066 i1 = i 1067 elif p[1] == 12: 1068 i2 = i 1069 tls._programs[prog]._type = tls_algorithm 1070 self.addTLSParameterFromFile( 1071 tls._programs[prog], options.tls_params) 1072 tls._programs[prog]._phases[i1][1] = greens[1] 1073 tls._programs[prog]._phases[i2][1] = greens[0] 1074 tls._programs[prog]._id = "adapted" 1075 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 1076 fdo.write("</additional>\n") 1077 fdo.close() 1078 args = [] 1079 return args
1093class ScenarioSet_RiLSA1PTIteration(ScenarioSet_RiLSA1LoadCurvesSampled): 1094 1095 def __init__(self, params): 1096 ScenarioSet.__init__(self, "RiLSA1PTIteration", merge( 1097 {"p1from": "120", "p1to": "1201", "p1step": "120", 1098 "p2from": "120", "p2to": "1201", "p2step": "120"}, 1099 params)) 1100 1101 def getNumRuns(self): 1102 p1num = 1 + \ 1103 (self.getInt("p1to") - self.getInt("p1from")) / \ 1104 self.getInt("p1step") 1105 p2num = 1 + \ 1106 (self.getInt("p2to") - self.getInt("p2from")) / \ 1107 self.getInt("p2step") 1108 return p1num * p2num 1109 """ 1110 Yields returning a built scenario and its description as key/value pairs 1111 """ 1112 1113 def iterateScenarios(self): 1114 # desc = {"name": "RiLSA1PedFlow"} 1115 RWScurves = getRWScurves() 1116 for p1 in range(self.getInt("p1from"), self.getInt("p1to"), self.getInt("p1step")): 1117 for p2 in range(self.getInt("p2from"), self.getInt("p2to"), self.getInt("p2step")): 1118 yield self.runSingle(RWScurves, p1, p2) 1119 1120 def runSingle(self, RWScurves, p1, p2, uID=None): 1121 cWE = RWScurves[0] 1122 cNS = RWScurves[1] 1123 cEW = RWScurves[2] 1124 cSN = RWScurves[1] 1125 print("Computing for %s %s" % (p1, p2)) 1126 sID = "RiLSA1PTIteration(%s-%s)" % (p1, p2) 1127 s = getScenario("RiLSA1", {}) 1128 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 1129 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 1130 nStreams = [] 1131 for stream in s.demand.streams: 1132 if stream._departEdgeModel.startswith("nm"): 1133 nStreams.extend( 1134 extrapolateDemand(stream, 3600, cNS, 7).streams) 1135 elif stream._departEdgeModel.startswith("em"): 1136 nStreams.extend( 1137 extrapolateDemand(stream, 3600, cEW, 7).streams) 1138 elif stream._departEdgeModel.startswith("sm"): 1139 nStreams.extend( 1140 extrapolateDemand(stream, 3600, cSN, 7).streams) 1141 elif stream._departEdgeModel.startswith("wm"): 1142 nStreams.extend( 1143 extrapolateDemand(stream, 3600, cWE, 7).streams) 1144 else: 1145 print(stream._departEdgeModel) 1146 raise RuntimeError("Hmmm, unknown stream??") 1147 s.demand.streams = nStreams 1148 1149 vehicles = [] 1150 for i in range(p1 / 2, 3600, p1): 1151 vehicles.append( 1152 demandGenerator.Vehicle("bus+p1#" + str(i), int(i), "emp", "mw", "bus")) 1153 vehicles.append( 1154 demandGenerator.Vehicle("bus-p1#" + str(i), int(i), "wmp", "me", "bus")) 1155 for i in range(p1 / 2, 3600, p1): 1156 vehicles.append( 1157 demandGenerator.Vehicle("bus+p2#" + str(i), int(i), "nmp", "ms", "bus")) 1158 vehicles.append( 1159 demandGenerator.Vehicle("bus-p2#" + str(i), int(i), "smp", "mw", "bus")) 1160 end = 86400 1161 sampleFactor = 1 1162 if "seen-ratio" in self.params: 1163 self.params["seen-ratio"] 1164 # , seenRatio) 1165 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 1166 desc = {"scenario": "RiLSA1PTIteration", 1167 "p1": str(p1), "p2": str(p2)} 1168 return s, desc, sID 1169 1170 def getRunsMatrix(self): 1171 ret = [] 1172 ranges = [[], []] 1173 for p1 in range(self.getInt("p1from"), self.getInt("p1to"), self.getInt("p1step")): 1174 ret.append([]) 1175 ranges[0].append(p1) 1176 for p2 in range(self.getInt("p2from"), self.getInt("p2to"), self.getInt("p2step")): 1177 ret[-1].append({"p1": str(p1), "p2": str(p2), 1178 "scenario": "RiLSA1PTIteration"}) 1179 ranges[-1].append(p2) 1180 return (ret, ranges) 1181 1182 def getAverageDuration(self): 1183 return -1 # !!! 1184 1185 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1186 # adapt tls to current settings 1187 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1188 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1189 fdo.write("<additional>\n") 1190 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1191 for tlsID in net._id2tls: 1192 1193 tls = net._id2tls[tlsID] 1194 if tlsID == "0": 1195 (streamsNS, streamsWE) = scenario.getOppositeFlows() 1196 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 1197 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 1198 greens = split_by_proportions(72, (ns, we), (10, 10)) 1199 for prog in tls._programs: 1200 i1 = i2 = 0 1201 for i, p in enumerate(tls._programs[prog]._phases): 1202 if p[1] == 40: 1203 i1 = i 1204 elif p[1] == 12: 1205 i2 = i 1206 tls._programs[prog]._type = tls_algorithm 1207 self.addTLSParameterFromFile( 1208 tls._programs[prog], options.tls_params) 1209 tls._programs[prog]._phases[i1][1] = greens[1] 1210 tls._programs[prog]._phases[i2][1] = greens[0] 1211 tls._programs[prog]._id = "adapted" 1212 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 1213 fdo.write("</additional>\n") 1214 fdo.close() 1215 args = [] 1216 return args 1217 1218 def getXLabel(self): 1219 return "pt period [s]" 1220 1221 def getYLabel(self): 1222 return "pt period [s]" 1223 1224 def getAdditionalDivider(self): 1225 return [] 1226 1227 def orientationX(self): 1228 return 90 1229 1230 def halfX(self): 1231 return False 1232# def figsize(self): 1233# return 8,6 1234 1235 def adjust(self, fig): 1236 fig.subplots_adjust(bottom=0.2)
def
iterateScenarios(self):
1113 def iterateScenarios(self): 1114 # desc = {"name": "RiLSA1PedFlow"} 1115 RWScurves = getRWScurves() 1116 for p1 in range(self.getInt("p1from"), self.getInt("p1to"), self.getInt("p1step")): 1117 for p2 in range(self.getInt("p2from"), self.getInt("p2to"), self.getInt("p2step")): 1118 yield self.runSingle(RWScurves, p1, p2)
Yields returning a built scenario and its description as key/value pairs
def
runSingle(self, RWScurves, p1, p2, uID=None):
1120 def runSingle(self, RWScurves, p1, p2, uID=None): 1121 cWE = RWScurves[0] 1122 cNS = RWScurves[1] 1123 cEW = RWScurves[2] 1124 cSN = RWScurves[1] 1125 print("Computing for %s %s" % (p1, p2)) 1126 sID = "RiLSA1PTIteration(%s-%s)" % (p1, p2) 1127 s = getScenario("RiLSA1", {}) 1128 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 1129 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 1130 nStreams = [] 1131 for stream in s.demand.streams: 1132 if stream._departEdgeModel.startswith("nm"): 1133 nStreams.extend( 1134 extrapolateDemand(stream, 3600, cNS, 7).streams) 1135 elif stream._departEdgeModel.startswith("em"): 1136 nStreams.extend( 1137 extrapolateDemand(stream, 3600, cEW, 7).streams) 1138 elif stream._departEdgeModel.startswith("sm"): 1139 nStreams.extend( 1140 extrapolateDemand(stream, 3600, cSN, 7).streams) 1141 elif stream._departEdgeModel.startswith("wm"): 1142 nStreams.extend( 1143 extrapolateDemand(stream, 3600, cWE, 7).streams) 1144 else: 1145 print(stream._departEdgeModel) 1146 raise RuntimeError("Hmmm, unknown stream??") 1147 s.demand.streams = nStreams 1148 1149 vehicles = [] 1150 for i in range(p1 / 2, 3600, p1): 1151 vehicles.append( 1152 demandGenerator.Vehicle("bus+p1#" + str(i), int(i), "emp", "mw", "bus")) 1153 vehicles.append( 1154 demandGenerator.Vehicle("bus-p1#" + str(i), int(i), "wmp", "me", "bus")) 1155 for i in range(p1 / 2, 3600, p1): 1156 vehicles.append( 1157 demandGenerator.Vehicle("bus+p2#" + str(i), int(i), "nmp", "ms", "bus")) 1158 vehicles.append( 1159 demandGenerator.Vehicle("bus-p2#" + str(i), int(i), "smp", "mw", "bus")) 1160 end = 86400 1161 sampleFactor = 1 1162 if "seen-ratio" in self.params: 1163 self.params["seen-ratio"] 1164 # , seenRatio) 1165 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 1166 desc = {"scenario": "RiLSA1PTIteration", 1167 "p1": str(p1), "p2": str(p2)} 1168 return s, desc, sID
def
getRunsMatrix(self):
1170 def getRunsMatrix(self): 1171 ret = [] 1172 ranges = [[], []] 1173 for p1 in range(self.getInt("p1from"), self.getInt("p1to"), self.getInt("p1step")): 1174 ret.append([]) 1175 ranges[0].append(p1) 1176 for p2 in range(self.getInt("p2from"), self.getInt("p2to"), self.getInt("p2step")): 1177 ret[-1].append({"p1": str(p1), "p2": str(p2), 1178 "scenario": "RiLSA1PTIteration"}) 1179 ranges[-1].append(p2) 1180 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
1185 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1186 # adapt tls to current settings 1187 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1188 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1189 fdo.write("<additional>\n") 1190 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1191 for tlsID in net._id2tls: 1192 1193 tls = net._id2tls[tlsID] 1194 if tlsID == "0": 1195 (streamsNS, streamsWE) = scenario.getOppositeFlows() 1196 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 1197 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 1198 greens = split_by_proportions(72, (ns, we), (10, 10)) 1199 for prog in tls._programs: 1200 i1 = i2 = 0 1201 for i, p in enumerate(tls._programs[prog]._phases): 1202 if p[1] == 40: 1203 i1 = i 1204 elif p[1] == 12: 1205 i2 = i 1206 tls._programs[prog]._type = tls_algorithm 1207 self.addTLSParameterFromFile( 1208 tls._programs[prog], options.tls_params) 1209 tls._programs[prog]._phases[i1][1] = greens[1] 1210 tls._programs[prog]._phases[i2][1] = greens[0] 1211 tls._programs[prog]._id = "adapted" 1212 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 1213 fdo.write("</additional>\n") 1214 fdo.close() 1215 args = [] 1216 return args
Inherited Members
1241class ScenarioSet_SinSinDemand(ScenarioSet): 1242 MEAN = 700. 1243 AMPLITUDE = 300. 1244 1245 def __init__(self, params): 1246 ScenarioSet.__init__(self, "SinSinDemand", merge( 1247 {"offsetFrom": "0", "offsetTo": "6.28", "offsetStep": ".628", 1248 "freqFrom": "0", "freqTo": "21", "freqStep": "2"}, 1249 params)) 1250 self.offsets = [] 1251 offset = self.getFloat("offsetFrom") 1252 while offset < self.getFloat("offsetTo"): 1253 self.offsets.append(offset) 1254 offset = offset + self.getFloat("offsetStep") 1255 self.frequencies = [] 1256 frequency = self.getFloat("freqFrom") 1257 while frequency < self.getFloat("freqTo"): 1258 self.frequencies.append(frequency) 1259 frequency = frequency + self.getFloat("freqStep") 1260 1261 def getNumRuns(self): 1262 return len(self.offsets) * len(self.frequencies) 1263 1264 def genDemand(self, scenario, simSteps, offset, frequency): 1265 # fd = tempfile.NamedTemporaryFile(mode="w", delete=False) 1266 fd = open(scenario.demandName, "w") 1267 # ---routes--- 1268 print("""<routes> 1269 <route id="WE" edges="0/1_to_1/1 0/1_to_1/1.-100 1/1_to_2/1"/> 1270 <route id="NS" edges="1/2_to_1/1 1/2_to_1/1.-100 1/1_to_1/0"/> 1271 <route id="EW" edges="2/1_to_1/1 2/1_to_1/1.-100 1/1_to_0/1"/> 1272 <route id="SN" edges="1/0_to_1/1 1/0_to_1/1.-100 1/1_to_1/2"/> 1273 """, file=fd) 1274 pv1 = 0 1275 pv2 = 0 1276 vehNr = 0 1277 o1 = 0 1278 o2 = offset 1279 for i in range(simSteps): 1280 v = math.sin(o1) * self.AMPLITUDE + self.MEAN 1281 v = v / 3600. 1282 pv1 = v + pv1 1283 if random.uniform(0, 1) < pv1: 1284 pv1 = pv1 - 1. 1285 print(' <vehicle id="%i" type="passenger" route="WE" depart="%i" departSpeed="13.89" />' % ( 1286 vehNr, i), file=fd) 1287 vehNr += 1 1288 print(' <vehicle id="%i" type="passenger" route="EW" depart="%i" departSpeed="13.89" />' % ( 1289 vehNr, i), file=fd) 1290 vehNr += 1 1291 v = math.sin(o2) * self.AMPLITUDE + self.MEAN 1292 v = v / 3600. 1293 pv2 = v + pv2 1294 if random.uniform(0, 1) < pv2: 1295 pv2 = pv2 - 1. 1296 print(' <vehicle id="%i" type="passenger" route="NS" depart="%i" departSpeed="13.89" />' % ( 1297 vehNr, i), file=fd) 1298 vehNr += 1 1299 print(' <vehicle id="%i" type="passenger" route="SN" depart="%i" departSpeed="13.89" />' % ( 1300 vehNr, i), file=fd) 1301 vehNr += 1 1302 if frequency != 0: 1303 o1 = o1 + ((math.pi * 2) / (180 * frequency)) 1304 o2 = o2 + ((math.pi * 2) / (180 * frequency)) 1305 1306 print("</routes>", file=fd) 1307 fd.close() 1308 # duarouter = sumolib.checkBinary("duarouter") 1309 # retCode = subprocess.call([duarouter, "-v", "-n", scenario.netName, "-t", fd.name, "-o", scenario.demandName, 1310 # "--no-warnings"]) # aeh, implizite no-warnings sind nicht schoen 1311 # os.remove(fd.name) 1312 """ 1313 Yields returning a built scenario and its description as key/value pairs 1314 """ 1315 1316 def iterateScenarios(self): 1317 desc = {"name": "SinSinDemand"} 1318 for offset in self.offsets: 1319 for freq in self.frequencies: 1320 print("Computing for %s<->%s" % (offset, freq)) 1321 sID = "SinSinDemand(%s-%s)" % (offset, freq) 1322 s = getScenario("BasicCross", {}, False) 1323 s.demandName = s.fullPath("routes_%s.rou.xml" % (sID)) 1324 if fileNeedsRebuild(s.demandName, "duarouter"): 1325 self.genDemand(s, 3600, offset, freq) 1326 desc = {"scenario": "SinSinDemand", 1327 "offset": str(offset), "frequency": str(freq)} 1328 yield s, desc, sID 1329 1330 def getRunsMatrix(self): 1331 ret = [] 1332 ranges = [[], []] 1333 for offset in self.offsets: 1334 ret.append([]) 1335 ranges[0].append(offset) 1336 for freq in self.frequencies: 1337 ret[-1].append({"scenario": "SinSinDemand", 1338 "offset": str(offset), "frequency": str(freq)}) 1339 ranges[1].append(freq) 1340 return (ret, ranges) 1341 1342 def getAverageDuration(self): 1343 return -1 # !!! 1344 1345 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1346 # adapt tls to current settings 1347 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1348 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1349 fdo.write("<additional>\n") 1350 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1351 for tlsID in net._id2tls: 1352 tls = net._id2tls[tlsID] 1353 for prog in tls._programs: 1354 tls._programs[prog]._type = tls_algorithm 1355 tls._programs[prog]._id = "adapted" 1356 self.addTLSParameterFromFile( 1357 tls._programs[prog], options.tls_params) 1358 fdo.write(tls._programs[prog].toXML(tlsID)) 1359 fdo.write("</additional>\n") 1360 fdo.close() 1361 args = [] 1362 return args 1363 1364 def getXLabel(self): 1365 return "offset" 1366 1367 def getYLabel(self): 1368 return "frequency [s]"
ScenarioSet_SinSinDemand(params)
1245 def __init__(self, params): 1246 ScenarioSet.__init__(self, "SinSinDemand", merge( 1247 {"offsetFrom": "0", "offsetTo": "6.28", "offsetStep": ".628", 1248 "freqFrom": "0", "freqTo": "21", "freqStep": "2"}, 1249 params)) 1250 self.offsets = [] 1251 offset = self.getFloat("offsetFrom") 1252 while offset < self.getFloat("offsetTo"): 1253 self.offsets.append(offset) 1254 offset = offset + self.getFloat("offsetStep") 1255 self.frequencies = [] 1256 frequency = self.getFloat("freqFrom") 1257 while frequency < self.getFloat("freqTo"): 1258 self.frequencies.append(frequency) 1259 frequency = frequency + self.getFloat("freqStep")
def
genDemand(self, scenario, simSteps, offset, frequency):
1264 def genDemand(self, scenario, simSteps, offset, frequency): 1265 # fd = tempfile.NamedTemporaryFile(mode="w", delete=False) 1266 fd = open(scenario.demandName, "w") 1267 # ---routes--- 1268 print("""<routes> 1269 <route id="WE" edges="0/1_to_1/1 0/1_to_1/1.-100 1/1_to_2/1"/> 1270 <route id="NS" edges="1/2_to_1/1 1/2_to_1/1.-100 1/1_to_1/0"/> 1271 <route id="EW" edges="2/1_to_1/1 2/1_to_1/1.-100 1/1_to_0/1"/> 1272 <route id="SN" edges="1/0_to_1/1 1/0_to_1/1.-100 1/1_to_1/2"/> 1273 """, file=fd) 1274 pv1 = 0 1275 pv2 = 0 1276 vehNr = 0 1277 o1 = 0 1278 o2 = offset 1279 for i in range(simSteps): 1280 v = math.sin(o1) * self.AMPLITUDE + self.MEAN 1281 v = v / 3600. 1282 pv1 = v + pv1 1283 if random.uniform(0, 1) < pv1: 1284 pv1 = pv1 - 1. 1285 print(' <vehicle id="%i" type="passenger" route="WE" depart="%i" departSpeed="13.89" />' % ( 1286 vehNr, i), file=fd) 1287 vehNr += 1 1288 print(' <vehicle id="%i" type="passenger" route="EW" depart="%i" departSpeed="13.89" />' % ( 1289 vehNr, i), file=fd) 1290 vehNr += 1 1291 v = math.sin(o2) * self.AMPLITUDE + self.MEAN 1292 v = v / 3600. 1293 pv2 = v + pv2 1294 if random.uniform(0, 1) < pv2: 1295 pv2 = pv2 - 1. 1296 print(' <vehicle id="%i" type="passenger" route="NS" depart="%i" departSpeed="13.89" />' % ( 1297 vehNr, i), file=fd) 1298 vehNr += 1 1299 print(' <vehicle id="%i" type="passenger" route="SN" depart="%i" departSpeed="13.89" />' % ( 1300 vehNr, i), file=fd) 1301 vehNr += 1 1302 if frequency != 0: 1303 o1 = o1 + ((math.pi * 2) / (180 * frequency)) 1304 o2 = o2 + ((math.pi * 2) / (180 * frequency)) 1305 1306 print("</routes>", file=fd) 1307 fd.close() 1308 # duarouter = sumolib.checkBinary("duarouter") 1309 # retCode = subprocess.call([duarouter, "-v", "-n", scenario.netName, "-t", fd.name, "-o", scenario.demandName, 1310 # "--no-warnings"]) # aeh, implizite no-warnings sind nicht schoen 1311 # os.remove(fd.name) 1312 """ 1313 Yields returning a built scenario and its description as key/value pairs 1314 """
def
iterateScenarios(self):
1316 def iterateScenarios(self): 1317 desc = {"name": "SinSinDemand"} 1318 for offset in self.offsets: 1319 for freq in self.frequencies: 1320 print("Computing for %s<->%s" % (offset, freq)) 1321 sID = "SinSinDemand(%s-%s)" % (offset, freq) 1322 s = getScenario("BasicCross", {}, False) 1323 s.demandName = s.fullPath("routes_%s.rou.xml" % (sID)) 1324 if fileNeedsRebuild(s.demandName, "duarouter"): 1325 self.genDemand(s, 3600, offset, freq) 1326 desc = {"scenario": "SinSinDemand", 1327 "offset": str(offset), "frequency": str(freq)} 1328 yield s, desc, sID
def
getRunsMatrix(self):
1330 def getRunsMatrix(self): 1331 ret = [] 1332 ranges = [[], []] 1333 for offset in self.offsets: 1334 ret.append([]) 1335 ranges[0].append(offset) 1336 for freq in self.frequencies: 1337 ret[-1].append({"scenario": "SinSinDemand", 1338 "offset": str(offset), "frequency": str(freq)}) 1339 ranges[1].append(freq) 1340 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
1345 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1346 # adapt tls to current settings 1347 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1348 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1349 fdo.write("<additional>\n") 1350 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1351 for tlsID in net._id2tls: 1352 tls = net._id2tls[tlsID] 1353 for prog in tls._programs: 1354 tls._programs[prog]._type = tls_algorithm 1355 tls._programs[prog]._id = "adapted" 1356 self.addTLSParameterFromFile( 1357 tls._programs[prog], options.tls_params) 1358 fdo.write(tls._programs[prog].toXML(tlsID)) 1359 fdo.write("</additional>\n") 1360 fdo.close() 1361 args = [] 1362 return args
1373class ScenarioSet_OneSinDemand(ScenarioSet): 1374 MAIN_FLOW = 1000. 1375 1376 def __init__(self, params): 1377 ScenarioSet.__init__(self, "OneSinDemand", merge( 1378 {"amplFrom": "0", "amplTo": "1201", "amplStep": "200", 1379 "freqFrom": "0", "freqTo": "11", "freqStep": "1"}, 1380 params)) 1381 self.amplitudes = [] 1382 amplitude = self.getFloat("amplFrom") 1383 while amplitude < self.getFloat("amplTo"): 1384 self.amplitudes.append(amplitude) 1385 amplitude = amplitude + self.getFloat("amplStep") 1386 self.frequencies = [] 1387 frequency = self.getFloat("freqFrom") 1388 while frequency < self.getFloat("freqTo"): 1389 self.frequencies.append(frequency) 1390 frequency = frequency + self.getFloat("freqStep") 1391 1392 def getNumRuns(self): 1393 return len(self.amplitudes) * len(self.amplitudes) 1394 1395 def genDemand(self, scenario, simSteps, amplitude, frequency): 1396 # fd = tempfile.NamedTemporaryFile(mode="w", delete=False) 1397 fd = open(scenario.demandName, "w") 1398 # ---routes--- 1399 print("""<routes> 1400 <route id="WE" edges="0/1_to_1/1 0/1_to_1/1.-100 1/1_to_2/1"/> 1401 <route id="NS" edges="1/2_to_1/1 1/2_to_1/1.-100 1/1_to_1/0"/> 1402 <route id="EW" edges="2/1_to_1/1 2/1_to_1/1.-100 1/1_to_0/1"/> 1403 <route id="SN" edges="1/0_to_1/1 1/0_to_1/1.-100 1/1_to_1/2"/> 1404 """, file=fd) 1405 pv1 = 0 1406 vehNr = 0 1407 o1 = 0 1408 for i in range(simSteps): 1409 v = math.sin(o1) * amplitude + 600. 1410 v = v / 3600. 1411 pv1 = v + pv1 1412 if random.uniform(0, 1) < pv1: 1413 pv1 = pv1 - 1. 1414 print(' <vehicle id="%i" type="passenger" route="WE" depart="%i" departSpeed="13.89" />' % ( 1415 vehNr, i), file=fd) 1416 vehNr += 1 1417 print(' <vehicle id="%i" type="passenger" route="EW" depart="%i" departSpeed="13.89" />' % ( 1418 vehNr, i), file=fd) 1419 vehNr += 1 1420 if frequency != 0: 1421 o1 = o1 + ((math.pi * 2) / (180 * frequency)) 1422 pNS = float(self.MAIN_FLOW) / 3600 1423 pSN = float(self.MAIN_FLOW) / 3600 1424 if random.uniform(0, 1) < pNS: 1425 print(' <vehicle id="%i" type="passenger" route="NS" depart="%i" departSpeed="13.89" />' % ( 1426 vehNr, i), file=fd) 1427 vehNr += 1 1428 if random.uniform(0, 1) < pSN: 1429 print(' <vehicle id="%i" type="passenger" route="SN" depart="%i" departSpeed="13.89" />' % ( 1430 vehNr, i), file=fd) 1431 vehNr += 1 1432 1433 print("</routes>", file=fd) 1434 fd.close() 1435 1436 """ 1437 Yields returning a built scenario and its description as key/value pairs 1438 """ 1439 1440 def iterateScenarios(self): 1441 desc = {"name": "OneSinDemand"} 1442 for amplitude in self.amplitudes: 1443 for freq in self.frequencies: 1444 print("Computing for %s<->%s" % (amplitude, freq)) 1445 sID = "OneSinDemand(%s-%s)" % (amplitude, freq) 1446 s = getScenario("BasicCross", {}, False) 1447 s.demandName = s.fullPath("routes_%s.rou.xml" % (sID)) 1448 if fileNeedsRebuild(s.demandName, "duarouter"): 1449 self.genDemand(s, 3600, amplitude, freq) 1450 desc = {"scenario": "OneSinDemand", "amplitude": str( 1451 amplitude), "frequency": str(freq)} 1452 yield s, desc, sID 1453 1454 def getRunsMatrix(self): 1455 ret = [] 1456 ranges = [[], []] 1457 for amplitude in self.amplitudes: 1458 ret.append([]) 1459 ranges[0].append(amplitude) 1460 for freq in self.frequencies: 1461 ret[-1].append({"scenario": "OneSinDemand", 1462 "amplitude": str(amplitude), "frequency": str(freq)}) 1463 ranges[1].append(freq) 1464 return (ret, ranges) 1465 1466 def getAverageDuration(self): 1467 return -1 # !!! 1468 1469 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1470 # adapt tls to current settings 1471 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1472 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1473 fdo.write("<additional>\n") 1474 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1475 for tlsID in net._id2tls: 1476 tls = net._id2tls[tlsID] 1477 for prog in tls._programs: 1478 tls._programs[prog]._type = tls_algorithm 1479 tls._programs[prog]._id = "adapted" 1480 self.addTLSParameterFromFile( 1481 tls._programs[prog], options.tls_params) 1482 fdo.write(tls._programs[prog].toXML(tlsID)) 1483 fdo.write("</additional>\n") 1484 fdo.close() 1485 args = [] 1486 return args 1487 1488 def getXLabel(self): 1489 return "!!!amplitude" 1490 1491 def getYLabel(self): 1492 return "frequency [s]"
ScenarioSet_OneSinDemand(params)
1376 def __init__(self, params): 1377 ScenarioSet.__init__(self, "OneSinDemand", merge( 1378 {"amplFrom": "0", "amplTo": "1201", "amplStep": "200", 1379 "freqFrom": "0", "freqTo": "11", "freqStep": "1"}, 1380 params)) 1381 self.amplitudes = [] 1382 amplitude = self.getFloat("amplFrom") 1383 while amplitude < self.getFloat("amplTo"): 1384 self.amplitudes.append(amplitude) 1385 amplitude = amplitude + self.getFloat("amplStep") 1386 self.frequencies = [] 1387 frequency = self.getFloat("freqFrom") 1388 while frequency < self.getFloat("freqTo"): 1389 self.frequencies.append(frequency) 1390 frequency = frequency + self.getFloat("freqStep")
def
genDemand(self, scenario, simSteps, amplitude, frequency):
1395 def genDemand(self, scenario, simSteps, amplitude, frequency): 1396 # fd = tempfile.NamedTemporaryFile(mode="w", delete=False) 1397 fd = open(scenario.demandName, "w") 1398 # ---routes--- 1399 print("""<routes> 1400 <route id="WE" edges="0/1_to_1/1 0/1_to_1/1.-100 1/1_to_2/1"/> 1401 <route id="NS" edges="1/2_to_1/1 1/2_to_1/1.-100 1/1_to_1/0"/> 1402 <route id="EW" edges="2/1_to_1/1 2/1_to_1/1.-100 1/1_to_0/1"/> 1403 <route id="SN" edges="1/0_to_1/1 1/0_to_1/1.-100 1/1_to_1/2"/> 1404 """, file=fd) 1405 pv1 = 0 1406 vehNr = 0 1407 o1 = 0 1408 for i in range(simSteps): 1409 v = math.sin(o1) * amplitude + 600. 1410 v = v / 3600. 1411 pv1 = v + pv1 1412 if random.uniform(0, 1) < pv1: 1413 pv1 = pv1 - 1. 1414 print(' <vehicle id="%i" type="passenger" route="WE" depart="%i" departSpeed="13.89" />' % ( 1415 vehNr, i), file=fd) 1416 vehNr += 1 1417 print(' <vehicle id="%i" type="passenger" route="EW" depart="%i" departSpeed="13.89" />' % ( 1418 vehNr, i), file=fd) 1419 vehNr += 1 1420 if frequency != 0: 1421 o1 = o1 + ((math.pi * 2) / (180 * frequency)) 1422 pNS = float(self.MAIN_FLOW) / 3600 1423 pSN = float(self.MAIN_FLOW) / 3600 1424 if random.uniform(0, 1) < pNS: 1425 print(' <vehicle id="%i" type="passenger" route="NS" depart="%i" departSpeed="13.89" />' % ( 1426 vehNr, i), file=fd) 1427 vehNr += 1 1428 if random.uniform(0, 1) < pSN: 1429 print(' <vehicle id="%i" type="passenger" route="SN" depart="%i" departSpeed="13.89" />' % ( 1430 vehNr, i), file=fd) 1431 vehNr += 1 1432 1433 print("</routes>", file=fd) 1434 fd.close()
def
iterateScenarios(self):
1440 def iterateScenarios(self): 1441 desc = {"name": "OneSinDemand"} 1442 for amplitude in self.amplitudes: 1443 for freq in self.frequencies: 1444 print("Computing for %s<->%s" % (amplitude, freq)) 1445 sID = "OneSinDemand(%s-%s)" % (amplitude, freq) 1446 s = getScenario("BasicCross", {}, False) 1447 s.demandName = s.fullPath("routes_%s.rou.xml" % (sID)) 1448 if fileNeedsRebuild(s.demandName, "duarouter"): 1449 self.genDemand(s, 3600, amplitude, freq) 1450 desc = {"scenario": "OneSinDemand", "amplitude": str( 1451 amplitude), "frequency": str(freq)} 1452 yield s, desc, sID
def
getRunsMatrix(self):
1454 def getRunsMatrix(self): 1455 ret = [] 1456 ranges = [[], []] 1457 for amplitude in self.amplitudes: 1458 ret.append([]) 1459 ranges[0].append(amplitude) 1460 for freq in self.frequencies: 1461 ret[-1].append({"scenario": "OneSinDemand", 1462 "amplitude": str(amplitude), "frequency": str(freq)}) 1463 ranges[1].append(freq) 1464 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
1469 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1470 # adapt tls to current settings 1471 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1472 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1473 fdo.write("<additional>\n") 1474 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1475 for tlsID in net._id2tls: 1476 tls = net._id2tls[tlsID] 1477 for prog in tls._programs: 1478 tls._programs[prog]._type = tls_algorithm 1479 tls._programs[prog]._id = "adapted" 1480 self.addTLSParameterFromFile( 1481 tls._programs[prog], options.tls_params) 1482 fdo.write(tls._programs[prog].toXML(tlsID)) 1483 fdo.write("</additional>\n") 1484 fdo.close() 1485 args = [] 1486 return args
1497class ScenarioSet_DemandStep(ScenarioSet): 1498 1499 def __init__(self, params): 1500 ScenarioSet.__init__(self, "DemandStep", merge( 1501 {"f1from": "0", "f1to": "2400", "f1step": "600", 1502 "f2beginFrom": "0", "f2beginTo": "2400", "f2beginStep": "600", 1503 "f2endFrom": "0", "f2endTo": "2400", "f2endStep": "600", 1504 "f2durationFrom": "0", "f2durationTo": "3601", "f2durationStep": "900", 1505 }, 1506 params)) 1507 1508 def getNumRuns(self): 1509 f1num = 1 + \ 1510 (self.getInt("f1to") - self.getInt("f1from")) / \ 1511 self.getInt("f1step") 1512 f2beginNum = 1 + (self.getInt("f2beginTo") - 1513 self.getInt("f2beginFrom")) / self.getInt("f2beginStep") 1514 f2endNum = 1 + \ 1515 (self.getInt("f2endTo") - self.getInt("f2endFrom")) / \ 1516 self.getInt("f2endStep") 1517 f2durationNum = 1 + (self.getInt("f2durationTo") - 1518 self.getInt("f2durationFrom")) / self.getInt("f2durationStep") 1519 return f1num * f2beginNum * f2endNum * f2durationNum 1520 1521 def iterateScenarios(self): 1522 desc = {"name": "iterateFlowsNA"} 1523 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1524 for f2begin in range(self.getInt("f2beginFrom"), self.getInt("f2beginTo"), self.getInt("f2beginStep")): 1525 for f2end in range(self.getInt("f2endFrom"), self.getInt("f2endTo"), self.getInt("f2endStep")): 1526 for f2duration in range( 1527 self.getInt("f2durationFrom"), self.getInt("f2durationTo"), self.getInt("f2durationStep")): 1528 if f1 == 0 and f2begin == 0 and f2end == 0: 1529 continue 1530 print("Computing for %s<->%s->%s@%s" % 1531 (f1, f2begin, f2end, f2duration)) 1532 sID = "DemandStep(%s-%s-%s-%s)" % (f1, 1533 f2begin, f2end, f2duration) 1534 s = getScenario("BasicCross", {}, False) 1535 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 1536 # fileNeedsRebuild(s.demandName, "duarouter"): 1537 if True: 1538 hd = f2duration / 2 1539 s.demand = demandGenerator.Demand() 1540 # why isn't it possible to get a network and return 1541 # all possible routes or whatever - to ease the 1542 # process 1543 s.demand.addStream(demandGenerator.Stream( 1544 None, 0, 7200, f1, "2/1_to_1/1", "1/1_to_0/1", {"passenger": 1})) 1545 # why isn't it possible to get a network and return 1546 # all possible routes or whatever - to ease the 1547 # process 1548 s.demand.addStream(demandGenerator.Stream( 1549 None, 0, 7200, f1, "0/1_to_1/1", "1/1_to_2/1", {"passenger": 1})) 1550 # begin 1551 # why isn't it possible to get a network and return 1552 # all possible routes or whatever - to ease the 1553 # process 1554 s.demand.addStream(demandGenerator.Stream( 1555 None, 0, 3600 - hd, f2begin, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 1556 # why isn't it possible to get a network and return 1557 # all possible routes or whatever - to ease the 1558 # process 1559 s.demand.addStream(demandGenerator.Stream( 1560 None, 0, 3600 - hd, f2begin, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 1561 # between 1562 for t in range(0, f2duration, 300): 1563 fat = (f2end - f2begin) / \ 1564 f2duration * (t + 150) 1565 # why isn't it possible to get a network and 1566 # return all possible routes or whatever - to 1567 # ease the process 1568 s.demand.addStream(demandGenerator.Stream( 1569 None, 3600 - hd + t, 3600 - hd + t + 300, fat, "1/2_to_1/1", "1/1_to_1/0", 1570 {"passenger": 1})) 1571 # why isn't it possible to get a network and 1572 # return all possible routes or whatever - to 1573 # ease the process 1574 s.demand.addStream(demandGenerator.Stream( 1575 None, 3600 - hd + t, 3600 - hd + t + 300, fat, "1/0_to_1/1", "1/1_to_1/2", 1576 {"passenger": 1})) 1577 # end 1578 # why isn't it possible to get a network and return 1579 # all possible routes or whatever - to ease the 1580 # process 1581 s.demand.addStream(demandGenerator.Stream( 1582 None, 3600 + hd, 7200, f2end, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 1583 # why isn't it possible to get a network and return 1584 # all possible routes or whatever - to ease the 1585 # process 1586 s.demand.addStream(demandGenerator.Stream( 1587 None, 3600 + hd, 7200, f2end, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 1588 s.demand.build(0, 7200, s.netName, s.demandName) 1589 # !!! the following two lines are a hack to pass the numbers instead of recomputing them 1590 s.demand._f1Value = f1 1591 s.demand._f2Value = (f2begin + f2end) / 2. 1592 desc = {"scenario": "DemandStep", "f1": str(f1), "f2begin": str( 1593 f2begin), "f2end": str(f2end), "f2duration": str(f2duration)} 1594 yield s, desc, sID 1595 1596 def getRunsMatrix(self): 1597 ret = [] 1598 ranges = [[], []] 1599 getRWScurves() 1600 i = 0 1601 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1602 for f2begin in range(self.getInt("f2beginFrom"), self.getInt("f2beginTo"), self.getInt("f2beginStep")): 1603 ret.append([]) 1604 ranges[0].append("%s/%s" % (f1, f2begin)) 1605 i = i + 1 1606 j = 0 1607 for f2end in range(self.getInt("f2endFrom"), self.getInt("f2endTo"), self.getInt("f2endStep")): 1608 for f2duration in range( 1609 self.getInt("f2durationFrom"), self.getInt("f2durationTo"), self.getInt("f2durationStep")): 1610 ret[-1].append({"f1": str(f1), "f2begin": str(f2begin), "f2end": str( 1611 f2end), "f2duration": str(f2duration), "scenario": "DemandStep"}) 1612 ranges[-1].append("%s/%s" % (f2end, f2duration)) 1613 j = j + 1 1614 return (ret, ranges) 1615 1616 def getAverageDuration(self): 1617 return -1 # !!! 1618 1619 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1620 # adapt tls to current settings 1621 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1622 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1623 fdo.write("<additional>\n") 1624 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1625 for tlsID in net._id2tls: 1626 tls = net._id2tls[tlsID] 1627 for prog in tls._programs: 1628 tls._programs[prog]._type = tls_algorithm 1629 tls._programs[prog]._id = "adapted" 1630 self.addTLSParameterFromFile( 1631 tls._programs[prog], options.tls_params) 1632 scenario.demand._f1Value = float( 1633 max(scenario.demand._f1Value, 1)) 1634 scenario.demand._f2Value = float( 1635 max(scenario.demand._f2Value, 1)) 1636 t = scenario.demand._f1Value + scenario.demand._f2Value 1637 greens = split_by_proportions( 1638 80, (scenario.demand._f1Value / t, scenario.demand._f2Value / t), (10, 10)) 1639 tls._programs[prog]._phases[0][1] = greens[0] 1640 tls._programs[prog]._phases[3][1] = greens[1] 1641 fdo.write(tls._programs[prog].toXML(tlsID)) 1642 fdo.write("</additional>\n") 1643 fdo.close() 1644 args = [] 1645 return args 1646 1647 def getXLabel(self): 1648 return "initial flow#1 [veh/h] / initial flow#2 [veh/h]" 1649 1650 def getYLabel(self): 1651 return "final flow#2 [veh/h] /\nchange duration [s]" 1652 1653 def getAdditionalDivider(self): 1654 f1num = (self.getInt("f1to") - self.getInt("f1from")) / \ 1655 self.getInt("f1step") 1656 f2beginNum = (self.getInt("f2beginTo") - 1657 self.getInt("f2beginFrom")) / self.getInt("f2beginStep") 1658 f2endNum = ( 1659 self.getInt("f2endTo") - self.getInt("f2endFrom")) / self.getInt("f2endStep") 1660 f2durationNum = 1 + (self.getInt("f2durationTo") - 1661 self.getInt("f2durationFrom")) / self.getInt("f2durationStep") 1662 ret = [] 1663 xMax = f1num * f2beginNum - .5 1664 yMax = f2durationNum * f2endNum - .5 1665 for f2begin in range(1, f2beginNum): 1666 x = f2begin * f1num - .5 1667 ret.append([x, -0.5, x, yMax]) 1668 # for f2begin in range(self.getInt("f2beginFrom"), 1669 # self.getInt("f2beginTo"), self.getInt("f2beginStep")): 1670 for f2end in range(1, f2endNum): 1671 # for f2duration in range(self.getInt("f2durationFrom"), 1672 # self.getInt("f2durationTo"), self.getInt("f2durationStep")): 1673 y = f2durationNum * f2end - .5 1674 ret.append([-0.5, y, xMax, y]) 1675 return ret 1676 1677 def halfX(self): 1678 return False 1679 1680 def orientationX(self): 1681 return 90 1682 1683 def ticksSize(self): 1684 return 12 1685 1686 def figsize(self): 1687 return 8, 8 1688 1689 def adjust(self, fig): 1690 fig.subplots_adjust(bottom=0.2, left=0.2)
ScenarioSet_DemandStep(params)
1499 def __init__(self, params): 1500 ScenarioSet.__init__(self, "DemandStep", merge( 1501 {"f1from": "0", "f1to": "2400", "f1step": "600", 1502 "f2beginFrom": "0", "f2beginTo": "2400", "f2beginStep": "600", 1503 "f2endFrom": "0", "f2endTo": "2400", "f2endStep": "600", 1504 "f2durationFrom": "0", "f2durationTo": "3601", "f2durationStep": "900", 1505 }, 1506 params))
def
getNumRuns(self):
1508 def getNumRuns(self): 1509 f1num = 1 + \ 1510 (self.getInt("f1to") - self.getInt("f1from")) / \ 1511 self.getInt("f1step") 1512 f2beginNum = 1 + (self.getInt("f2beginTo") - 1513 self.getInt("f2beginFrom")) / self.getInt("f2beginStep") 1514 f2endNum = 1 + \ 1515 (self.getInt("f2endTo") - self.getInt("f2endFrom")) / \ 1516 self.getInt("f2endStep") 1517 f2durationNum = 1 + (self.getInt("f2durationTo") - 1518 self.getInt("f2durationFrom")) / self.getInt("f2durationStep") 1519 return f1num * f2beginNum * f2endNum * f2durationNum
def
iterateScenarios(self):
1521 def iterateScenarios(self): 1522 desc = {"name": "iterateFlowsNA"} 1523 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1524 for f2begin in range(self.getInt("f2beginFrom"), self.getInt("f2beginTo"), self.getInt("f2beginStep")): 1525 for f2end in range(self.getInt("f2endFrom"), self.getInt("f2endTo"), self.getInt("f2endStep")): 1526 for f2duration in range( 1527 self.getInt("f2durationFrom"), self.getInt("f2durationTo"), self.getInt("f2durationStep")): 1528 if f1 == 0 and f2begin == 0 and f2end == 0: 1529 continue 1530 print("Computing for %s<->%s->%s@%s" % 1531 (f1, f2begin, f2end, f2duration)) 1532 sID = "DemandStep(%s-%s-%s-%s)" % (f1, 1533 f2begin, f2end, f2duration) 1534 s = getScenario("BasicCross", {}, False) 1535 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 1536 # fileNeedsRebuild(s.demandName, "duarouter"): 1537 if True: 1538 hd = f2duration / 2 1539 s.demand = demandGenerator.Demand() 1540 # why isn't it possible to get a network and return 1541 # all possible routes or whatever - to ease the 1542 # process 1543 s.demand.addStream(demandGenerator.Stream( 1544 None, 0, 7200, f1, "2/1_to_1/1", "1/1_to_0/1", {"passenger": 1})) 1545 # why isn't it possible to get a network and return 1546 # all possible routes or whatever - to ease the 1547 # process 1548 s.demand.addStream(demandGenerator.Stream( 1549 None, 0, 7200, f1, "0/1_to_1/1", "1/1_to_2/1", {"passenger": 1})) 1550 # begin 1551 # why isn't it possible to get a network and return 1552 # all possible routes or whatever - to ease the 1553 # process 1554 s.demand.addStream(demandGenerator.Stream( 1555 None, 0, 3600 - hd, f2begin, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 1556 # why isn't it possible to get a network and return 1557 # all possible routes or whatever - to ease the 1558 # process 1559 s.demand.addStream(demandGenerator.Stream( 1560 None, 0, 3600 - hd, f2begin, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 1561 # between 1562 for t in range(0, f2duration, 300): 1563 fat = (f2end - f2begin) / \ 1564 f2duration * (t + 150) 1565 # why isn't it possible to get a network and 1566 # return all possible routes or whatever - to 1567 # ease the process 1568 s.demand.addStream(demandGenerator.Stream( 1569 None, 3600 - hd + t, 3600 - hd + t + 300, fat, "1/2_to_1/1", "1/1_to_1/0", 1570 {"passenger": 1})) 1571 # why isn't it possible to get a network and 1572 # return all possible routes or whatever - to 1573 # ease the process 1574 s.demand.addStream(demandGenerator.Stream( 1575 None, 3600 - hd + t, 3600 - hd + t + 300, fat, "1/0_to_1/1", "1/1_to_1/2", 1576 {"passenger": 1})) 1577 # end 1578 # why isn't it possible to get a network and return 1579 # all possible routes or whatever - to ease the 1580 # process 1581 s.demand.addStream(demandGenerator.Stream( 1582 None, 3600 + hd, 7200, f2end, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 1583 # why isn't it possible to get a network and return 1584 # all possible routes or whatever - to ease the 1585 # process 1586 s.demand.addStream(demandGenerator.Stream( 1587 None, 3600 + hd, 7200, f2end, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 1588 s.demand.build(0, 7200, s.netName, s.demandName) 1589 # !!! the following two lines are a hack to pass the numbers instead of recomputing them 1590 s.demand._f1Value = f1 1591 s.demand._f2Value = (f2begin + f2end) / 2. 1592 desc = {"scenario": "DemandStep", "f1": str(f1), "f2begin": str( 1593 f2begin), "f2end": str(f2end), "f2duration": str(f2duration)} 1594 yield s, desc, sID
def
getRunsMatrix(self):
1596 def getRunsMatrix(self): 1597 ret = [] 1598 ranges = [[], []] 1599 getRWScurves() 1600 i = 0 1601 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1602 for f2begin in range(self.getInt("f2beginFrom"), self.getInt("f2beginTo"), self.getInt("f2beginStep")): 1603 ret.append([]) 1604 ranges[0].append("%s/%s" % (f1, f2begin)) 1605 i = i + 1 1606 j = 0 1607 for f2end in range(self.getInt("f2endFrom"), self.getInt("f2endTo"), self.getInt("f2endStep")): 1608 for f2duration in range( 1609 self.getInt("f2durationFrom"), self.getInt("f2durationTo"), self.getInt("f2durationStep")): 1610 ret[-1].append({"f1": str(f1), "f2begin": str(f2begin), "f2end": str( 1611 f2end), "f2duration": str(f2duration), "scenario": "DemandStep"}) 1612 ranges[-1].append("%s/%s" % (f2end, f2duration)) 1613 j = j + 1 1614 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
1619 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1620 # adapt tls to current settings 1621 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1622 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1623 fdo.write("<additional>\n") 1624 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1625 for tlsID in net._id2tls: 1626 tls = net._id2tls[tlsID] 1627 for prog in tls._programs: 1628 tls._programs[prog]._type = tls_algorithm 1629 tls._programs[prog]._id = "adapted" 1630 self.addTLSParameterFromFile( 1631 tls._programs[prog], options.tls_params) 1632 scenario.demand._f1Value = float( 1633 max(scenario.demand._f1Value, 1)) 1634 scenario.demand._f2Value = float( 1635 max(scenario.demand._f2Value, 1)) 1636 t = scenario.demand._f1Value + scenario.demand._f2Value 1637 greens = split_by_proportions( 1638 80, (scenario.demand._f1Value / t, scenario.demand._f2Value / t), (10, 10)) 1639 tls._programs[prog]._phases[0][1] = greens[0] 1640 tls._programs[prog]._phases[3][1] = greens[1] 1641 fdo.write(tls._programs[prog].toXML(tlsID)) 1642 fdo.write("</additional>\n") 1643 fdo.close() 1644 args = [] 1645 return args
def
getAdditionalDivider(self):
1653 def getAdditionalDivider(self): 1654 f1num = (self.getInt("f1to") - self.getInt("f1from")) / \ 1655 self.getInt("f1step") 1656 f2beginNum = (self.getInt("f2beginTo") - 1657 self.getInt("f2beginFrom")) / self.getInt("f2beginStep") 1658 f2endNum = ( 1659 self.getInt("f2endTo") - self.getInt("f2endFrom")) / self.getInt("f2endStep") 1660 f2durationNum = 1 + (self.getInt("f2durationTo") - 1661 self.getInt("f2durationFrom")) / self.getInt("f2durationStep") 1662 ret = [] 1663 xMax = f1num * f2beginNum - .5 1664 yMax = f2durationNum * f2endNum - .5 1665 for f2begin in range(1, f2beginNum): 1666 x = f2begin * f1num - .5 1667 ret.append([x, -0.5, x, yMax]) 1668 # for f2begin in range(self.getInt("f2beginFrom"), 1669 # self.getInt("f2beginTo"), self.getInt("f2beginStep")): 1670 for f2end in range(1, f2endNum): 1671 # for f2duration in range(self.getInt("f2durationFrom"), 1672 # self.getInt("f2durationTo"), self.getInt("f2durationStep")): 1673 y = f2durationNum * f2end - .5 1674 ret.append([-0.5, y, xMax, y]) 1675 return ret
Inherited Members
1695class ScenarioSet_CorrFlowsDistancesA(ScenarioSet): 1696 1697 def __init__(self, params): 1698 ScenarioSet.__init__(self, "CorrFlowsDistancesA", merge( 1699 {"f1from": "0", "f1to": "2400", "f1step": "400", 1700 "f2from": "0", "f2to": "2400", "f2step": "400", 1701 "d1from": "300", "d1to": "1000", "d1step": "100"}, 1702 params)) 1703 1704 def getNumRuns(self): 1705 f1num = 1 + \ 1706 (self.getInt("f1to") - self.getInt("f1from")) / \ 1707 self.getInt("f1step") 1708 f2num = 1 + \ 1709 (self.getInt("f2to") - self.getInt("f2from")) / \ 1710 self.getInt("f2step") 1711 d1num = 1 + \ 1712 (self.getInt("d1to") - self.getInt("d1from")) / \ 1713 self.getInt("d1step") 1714 return f1num * f2num * d1num 1715 1716 def iterateScenarios(self): 1717 desc = {"name": "CorrFlowsDistancesA"} 1718 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1719 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 1720 for d1 in range(self.getInt("d1from"), self.getInt("d1to"), self.getInt("d1step")): 1721 if f1 == 0 and f2 == 0: 1722 continue 1723 print("Computing for %s<->%s %s" % (f1, f2, d1)) 1724 sID = "CorrFlowsDistancesA(%s-%s-%s)" % (f1, f2, d1) 1725 s = getScenario("BasicCorridor", {"xoff": d1}, False) 1726 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 1727 if fileNeedsRebuild(s.demandName, "duarouter"): 1728 s.demand = demandGenerator.Demand() 1729 # why isn't it possible to get a network and return all 1730 # possible routes or whatever - to ease the process 1731 s.demand.addStream(demandGenerator.Stream( 1732 None, 0, 3600, f1, "6/1_to_5/1", "1/1_to_0/1", {"passenger": 1})) 1733 # why isn't it possible to get a network and return all 1734 # possible routes or whatever - to ease the process 1735 s.demand.addStream(demandGenerator.Stream( 1736 None, 0, 3600, f1, "0/1_to_1/1", "5/1_to_6/1", {"passenger": 1})) 1737 for i in range(1, 6): 1738 # why isn't it possible to get a network and return 1739 # all possible routes or whatever - to ease the 1740 # process 1741 s.demand.addStream(demandGenerator.Stream( 1742 None, 0, 3600, f2, "%s/2_to_%s/1" % (i, i), "%s/1_to_%s/0" % (i, i), {"passenger": 1})) 1743 # why isn't it possible to get a network and return 1744 # all possible routes or whatever - to ease the 1745 # process 1746 s.demand.addStream(demandGenerator.Stream( 1747 None, 0, 3600, f2, "%s/0_to_%s/1" % (i, i), "%s/1_to_%s/2" % (i, i), {"passenger": 1})) 1748 s.demand.build(0, 3600, s.netName, s.demandName) 1749 # !!! the following two lines are a hack to pass the numbers instead of recomputing them 1750 s.demand._f1Value = f1 1751 s.demand._f2Value = f2 1752 desc = {"scenario": "CorrFlowsDistancesA", 1753 "f1": str(f1), "f2": str(f2), "d1": str(d1)} 1754 yield s, desc, sID 1755 1756 def getRunsMatrix(self): 1757 ret = [] 1758 ranges = [[], []] 1759 getRWScurves() 1760 i = 0 1761 for d1 in range(self.getInt("d1from"), self.getInt("d1to"), self.getInt("d1step")): 1762 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1763 ret.append([]) 1764 ranges[0].append("%s/%s" % (d1, f1)) 1765 i = i + 1 1766 j = 0 1767 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 1768 ret[-1].append({"f1": str(f1), "f2": str(f2), 1769 "d1": str(d1), "scenario": "CorrFlowsDistancesA"}) 1770 ranges[-1].append(f2) 1771 j = j + 1 1772 return (ret, ranges) 1773 1774 def getAverageDuration(self): 1775 return -1 # !!! 1776 1777 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1778 # adapt tls to current settings 1779 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1780 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1781 fdo.write("<additional>\n") 1782 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1783 for tlsID in net._id2tls: 1784 tls = net._id2tls[tlsID] 1785 for prog in tls._programs: 1786 tls._programs[prog]._type = tls_algorithm 1787 tls._programs[prog]._id = "adapted" 1788 self.addTLSParameterFromFile( 1789 tls._programs[prog], options.tls_params) 1790 scenario.demand._f1Value = float( 1791 max(scenario.demand._f1Value, 1)) 1792 scenario.demand._f2Value = float( 1793 max(scenario.demand._f2Value, 1)) 1794 t = scenario.demand._f1Value + scenario.demand._f2Value 1795 greens = split_by_proportions( 1796 80, (scenario.demand._f1Value / t, scenario.demand._f2Value / t), (10, 10)) 1797 tls._programs[prog]._phases[0][1] = greens[0] 1798 tls._programs[prog]._phases[3][1] = greens[1] 1799 fdo.write(tls._programs[prog].toXML(tlsID)) 1800 fdo.write("</additional>\n") 1801 fdo.close() 1802 args = [] 1803 return args 1804 1805 def getXLabel(self): 1806 return "distance [m] / flow#1 [veh/h]" 1807 1808 def getYLabel(self): 1809 return "flow#2 [veh/h]" 1810 1811 def figsize(self): 1812 return 10, 4 1813 1814 def orientationX(self): 1815 return 90 1816 1817 def ticksSize(self): 1818 return 12 1819 1820 def halfX(self): 1821 return False 1822 1823 def getAdditionalDivider(self): 1824 ret = [] 1825 for i in range(1, 7): 1826 ret.append([i * 6 - .5, -0.5, i * 6 - .5, 5.5]) 1827 return ret 1828 1829 def adjust(self, fig): 1830 fig.subplots_adjust(bottom=0.2)
def
getNumRuns(self):
1704 def getNumRuns(self): 1705 f1num = 1 + \ 1706 (self.getInt("f1to") - self.getInt("f1from")) / \ 1707 self.getInt("f1step") 1708 f2num = 1 + \ 1709 (self.getInt("f2to") - self.getInt("f2from")) / \ 1710 self.getInt("f2step") 1711 d1num = 1 + \ 1712 (self.getInt("d1to") - self.getInt("d1from")) / \ 1713 self.getInt("d1step") 1714 return f1num * f2num * d1num
def
iterateScenarios(self):
1716 def iterateScenarios(self): 1717 desc = {"name": "CorrFlowsDistancesA"} 1718 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1719 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 1720 for d1 in range(self.getInt("d1from"), self.getInt("d1to"), self.getInt("d1step")): 1721 if f1 == 0 and f2 == 0: 1722 continue 1723 print("Computing for %s<->%s %s" % (f1, f2, d1)) 1724 sID = "CorrFlowsDistancesA(%s-%s-%s)" % (f1, f2, d1) 1725 s = getScenario("BasicCorridor", {"xoff": d1}, False) 1726 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 1727 if fileNeedsRebuild(s.demandName, "duarouter"): 1728 s.demand = demandGenerator.Demand() 1729 # why isn't it possible to get a network and return all 1730 # possible routes or whatever - to ease the process 1731 s.demand.addStream(demandGenerator.Stream( 1732 None, 0, 3600, f1, "6/1_to_5/1", "1/1_to_0/1", {"passenger": 1})) 1733 # why isn't it possible to get a network and return all 1734 # possible routes or whatever - to ease the process 1735 s.demand.addStream(demandGenerator.Stream( 1736 None, 0, 3600, f1, "0/1_to_1/1", "5/1_to_6/1", {"passenger": 1})) 1737 for i in range(1, 6): 1738 # why isn't it possible to get a network and return 1739 # all possible routes or whatever - to ease the 1740 # process 1741 s.demand.addStream(demandGenerator.Stream( 1742 None, 0, 3600, f2, "%s/2_to_%s/1" % (i, i), "%s/1_to_%s/0" % (i, i), {"passenger": 1})) 1743 # why isn't it possible to get a network and return 1744 # all possible routes or whatever - to ease the 1745 # process 1746 s.demand.addStream(demandGenerator.Stream( 1747 None, 0, 3600, f2, "%s/0_to_%s/1" % (i, i), "%s/1_to_%s/2" % (i, i), {"passenger": 1})) 1748 s.demand.build(0, 3600, s.netName, s.demandName) 1749 # !!! the following two lines are a hack to pass the numbers instead of recomputing them 1750 s.demand._f1Value = f1 1751 s.demand._f2Value = f2 1752 desc = {"scenario": "CorrFlowsDistancesA", 1753 "f1": str(f1), "f2": str(f2), "d1": str(d1)} 1754 yield s, desc, sID
def
getRunsMatrix(self):
1756 def getRunsMatrix(self): 1757 ret = [] 1758 ranges = [[], []] 1759 getRWScurves() 1760 i = 0 1761 for d1 in range(self.getInt("d1from"), self.getInt("d1to"), self.getInt("d1step")): 1762 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1763 ret.append([]) 1764 ranges[0].append("%s/%s" % (d1, f1)) 1765 i = i + 1 1766 j = 0 1767 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 1768 ret[-1].append({"f1": str(f1), "f2": str(f2), 1769 "d1": str(d1), "scenario": "CorrFlowsDistancesA"}) 1770 ranges[-1].append(f2) 1771 j = j + 1 1772 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
1777 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1778 # adapt tls to current settings 1779 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1780 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1781 fdo.write("<additional>\n") 1782 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1783 for tlsID in net._id2tls: 1784 tls = net._id2tls[tlsID] 1785 for prog in tls._programs: 1786 tls._programs[prog]._type = tls_algorithm 1787 tls._programs[prog]._id = "adapted" 1788 self.addTLSParameterFromFile( 1789 tls._programs[prog], options.tls_params) 1790 scenario.demand._f1Value = float( 1791 max(scenario.demand._f1Value, 1)) 1792 scenario.demand._f2Value = float( 1793 max(scenario.demand._f2Value, 1)) 1794 t = scenario.demand._f1Value + scenario.demand._f2Value 1795 greens = split_by_proportions( 1796 80, (scenario.demand._f1Value / t, scenario.demand._f2Value / t), (10, 10)) 1797 tls._programs[prog]._phases[0][1] = greens[0] 1798 tls._programs[prog]._phases[3][1] = greens[1] 1799 fdo.write(tls._programs[prog].toXML(tlsID)) 1800 fdo.write("</additional>\n") 1801 fdo.close() 1802 args = [] 1803 return args
Inherited Members
1835class ScenarioSet_NetFlowsDistancesA(ScenarioSet): 1836 1837 def __init__(self, params): 1838 ScenarioSet.__init__(self, "NetFlowsDistancesA", merge( 1839 {"f1from": "0", "f1to": "2401", "f1step": "800", 1840 "f2from": "0", "f2to": "2401", "f2step": "800", 1841 "oFrom": "0", "oTo": "3.14", "oStep": ".315"}, 1842 params)) 1843 self.offsets = [] 1844 offset = self.getFloat("oFrom") 1845 while offset < self.getFloat("oTo"): 1846 self.offsets.append(offset) 1847 offset = offset + self.getFloat("oStep") 1848 1849 def getNumRuns(self): 1850 f1num = 1 + \ 1851 (self.getInt("f1to") - self.getInt("f1from")) / \ 1852 self.getInt("f1step") 1853 f2num = 1 + \ 1854 (self.getInt("f2to") - self.getInt("f2from")) / \ 1855 self.getInt("f2step") 1856 return f1num * f2num * len(self.offsets) 1857 1858 def iterateScenarios(self): 1859 desc = {"name": "NetFlowsDistancesA"} 1860 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1861 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 1862 for o in self.offsets: 1863 if f1 == 0 and f2 == 0: 1864 continue 1865 print("Computing for %s %s<->%s" % (o, f1, f2)) 1866 sID = "NetFlowsDistancesA(%s-%s-%s)" % (f1, f2, o) 1867 s = getScenario("BasicNet", {"rot": o}, False) 1868 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 1869 if fileNeedsRebuild(s.demandName, "duarouter"): 1870 s.demand = demandGenerator.Demand() 1871 for i in range(1, 6): 1872 # why isn't it possible to get a network and return 1873 # all possible routes or whatever - to ease the 1874 # process 1875 s.demand.addStream(demandGenerator.Stream( 1876 None, 0, 3600, f1, "6/%s_to_5/%s" % (i, i), "1/%s_to_0/%s" % (i, i), {"passenger": 1})) 1877 # why isn't it possible to get a network and return 1878 # all possible routes or whatever - to ease the 1879 # process 1880 s.demand.addStream(demandGenerator.Stream( 1881 None, 0, 3600, f1, "0/%s_to_1/%s" % (i, i), "5/%s_to_6/%s" % (i, i), {"passenger": 1})) 1882 for i in range(1, 6): 1883 # why isn't it possible to get a network and return 1884 # all possible routes or whatever - to ease the 1885 # process 1886 s.demand.addStream(demandGenerator.Stream( 1887 None, 0, 3600, f2, "%s/6_to_%s/5" % (i, i), "%s/1_to_%s/0" % (i, i), {"passenger": 1})) 1888 # why isn't it possible to get a network and return 1889 # all possible routes or whatever - to ease the 1890 # process 1891 s.demand.addStream(demandGenerator.Stream( 1892 None, 0, 3600, f2, "%s/0_to_%s/1" % (i, i), "%s/5_to_%s/6" % (i, i), {"passenger": 1})) 1893 s.demand.build(0, 3600, s.netName, s.demandName) 1894 # !!! the following two lines are a hack to pass the numbers instead of recomputing them 1895 s.demand._f1Value = f1 1896 s.demand._f2Value = f2 1897 desc = {"scenario": "NetFlowsDistancesA", 1898 "f1": str(f1), "f2": str(f2), "o": str(o)} 1899 yield s, desc, sID 1900 1901 def getRunsMatrix(self): 1902 ret = [] 1903 ranges = [[], []] 1904 for o in self.offsets: 1905 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1906 ret.append([]) 1907 ranges[0].append("%s/%s" % (o, f1)) 1908 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 1909 ret[-1].append({"scenario": "NetFlowsDistancesA", 1910 "f1": str(f1), "f2": str(f2), "o": str(o)}) 1911 ranges[1].append("%s" % f2) 1912 return (ret, ranges) 1913 1914 def getAverageDuration(self): 1915 return -1 # !!! 1916 1917 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1918 # adapt tls to current settings 1919 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1920 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1921 fdo.write("<additional>\n") 1922 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1923 for tlsID in net._id2tls: 1924 tls = net._id2tls[tlsID] 1925 for prog in tls._programs: 1926 tls._programs[prog]._type = tls_algorithm 1927 tls._programs[prog]._id = "adapted" 1928 self.addTLSParameterFromFile( 1929 tls._programs[prog], options.tls_params) 1930 scenario.demand._f1Value = float( 1931 max(scenario.demand._f1Value, 1)) 1932 scenario.demand._f2Value = float( 1933 max(scenario.demand._f2Value, 1)) 1934 t = scenario.demand._f1Value + scenario.demand._f2Value 1935 greens = split_by_proportions( 1936 80, (scenario.demand._f1Value / t, scenario.demand._f2Value / t), (10, 10)) 1937 tls._programs[prog]._phases[0][1] = greens[0] 1938 tls._programs[prog]._phases[3][1] = greens[1] 1939 fdo.write(tls._programs[prog].toXML(tlsID)) 1940 fdo.write("</additional>\n") 1941 fdo.close() 1942 args = [] 1943 return args 1944 1945 def getXLabel(self): 1946 return "offset [m] / flow#1 [vehicles/h]" 1947 1948 def getYLabel(self): 1949 return "flow#2 [vehicles/h]" 1950 1951 def figsize(self): 1952 return 10, 4 1953 1954 def orientationX(self): 1955 return 90 1956 1957 def ticksSize(self): 1958 return 12 1959 1960 def halfX(self): 1961 return False 1962 1963 def getAdditionalDivider(self): 1964 ret = [] 1965 for i in range(1, 10): 1966 ret.append([i * 4 - .5, -0.5, i * 4 - .5, 3.5]) 1967 return ret
ScenarioSet_NetFlowsDistancesA(params)
1837 def __init__(self, params): 1838 ScenarioSet.__init__(self, "NetFlowsDistancesA", merge( 1839 {"f1from": "0", "f1to": "2401", "f1step": "800", 1840 "f2from": "0", "f2to": "2401", "f2step": "800", 1841 "oFrom": "0", "oTo": "3.14", "oStep": ".315"}, 1842 params)) 1843 self.offsets = [] 1844 offset = self.getFloat("oFrom") 1845 while offset < self.getFloat("oTo"): 1846 self.offsets.append(offset) 1847 offset = offset + self.getFloat("oStep")
def
iterateScenarios(self):
1858 def iterateScenarios(self): 1859 desc = {"name": "NetFlowsDistancesA"} 1860 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1861 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 1862 for o in self.offsets: 1863 if f1 == 0 and f2 == 0: 1864 continue 1865 print("Computing for %s %s<->%s" % (o, f1, f2)) 1866 sID = "NetFlowsDistancesA(%s-%s-%s)" % (f1, f2, o) 1867 s = getScenario("BasicNet", {"rot": o}, False) 1868 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 1869 if fileNeedsRebuild(s.demandName, "duarouter"): 1870 s.demand = demandGenerator.Demand() 1871 for i in range(1, 6): 1872 # why isn't it possible to get a network and return 1873 # all possible routes or whatever - to ease the 1874 # process 1875 s.demand.addStream(demandGenerator.Stream( 1876 None, 0, 3600, f1, "6/%s_to_5/%s" % (i, i), "1/%s_to_0/%s" % (i, i), {"passenger": 1})) 1877 # why isn't it possible to get a network and return 1878 # all possible routes or whatever - to ease the 1879 # process 1880 s.demand.addStream(demandGenerator.Stream( 1881 None, 0, 3600, f1, "0/%s_to_1/%s" % (i, i), "5/%s_to_6/%s" % (i, i), {"passenger": 1})) 1882 for i in range(1, 6): 1883 # why isn't it possible to get a network and return 1884 # all possible routes or whatever - to ease the 1885 # process 1886 s.demand.addStream(demandGenerator.Stream( 1887 None, 0, 3600, f2, "%s/6_to_%s/5" % (i, i), "%s/1_to_%s/0" % (i, i), {"passenger": 1})) 1888 # why isn't it possible to get a network and return 1889 # all possible routes or whatever - to ease the 1890 # process 1891 s.demand.addStream(demandGenerator.Stream( 1892 None, 0, 3600, f2, "%s/0_to_%s/1" % (i, i), "%s/5_to_%s/6" % (i, i), {"passenger": 1})) 1893 s.demand.build(0, 3600, s.netName, s.demandName) 1894 # !!! the following two lines are a hack to pass the numbers instead of recomputing them 1895 s.demand._f1Value = f1 1896 s.demand._f2Value = f2 1897 desc = {"scenario": "NetFlowsDistancesA", 1898 "f1": str(f1), "f2": str(f2), "o": str(o)} 1899 yield s, desc, sID
def
getRunsMatrix(self):
1901 def getRunsMatrix(self): 1902 ret = [] 1903 ranges = [[], []] 1904 for o in self.offsets: 1905 for f1 in range(self.getInt("f1from"), self.getInt("f1to"), self.getInt("f1step")): 1906 ret.append([]) 1907 ranges[0].append("%s/%s" % (o, f1)) 1908 for f2 in range(self.getInt("f2from"), self.getInt("f2to"), self.getInt("f2step")): 1909 ret[-1].append({"scenario": "NetFlowsDistancesA", 1910 "f1": str(f1), "f2": str(f2), "o": str(o)}) 1911 ranges[1].append("%s" % f2) 1912 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
1917 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 1918 # adapt tls to current settings 1919 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 1920 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 1921 fdo.write("<additional>\n") 1922 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 1923 for tlsID in net._id2tls: 1924 tls = net._id2tls[tlsID] 1925 for prog in tls._programs: 1926 tls._programs[prog]._type = tls_algorithm 1927 tls._programs[prog]._id = "adapted" 1928 self.addTLSParameterFromFile( 1929 tls._programs[prog], options.tls_params) 1930 scenario.demand._f1Value = float( 1931 max(scenario.demand._f1Value, 1)) 1932 scenario.demand._f2Value = float( 1933 max(scenario.demand._f2Value, 1)) 1934 t = scenario.demand._f1Value + scenario.demand._f2Value 1935 greens = split_by_proportions( 1936 80, (scenario.demand._f1Value / t, scenario.demand._f2Value / t), (10, 10)) 1937 tls._programs[prog]._phases[0][1] = greens[0] 1938 tls._programs[prog]._phases[3][1] = greens[1] 1939 fdo.write(tls._programs[prog].toXML(tlsID)) 1940 fdo.write("</additional>\n") 1941 fdo.close() 1942 args = [] 1943 return args
Inherited Members
1972class ScenarioSet_TurnIteration(ScenarioSet): 1973 MAIN_FLOW = 800 1974 1975 def __init__(self, params): 1976 ScenarioSet.__init__(self, "TurnIteration", merge( 1977 {"rightFrom": "0", "rightTo": "51", "rightStep": "10", 1978 "leftFrom": "0", "leftTo": "51", "leftStep": "10"}, 1979 params)) 1980 1981 def getNumRuns(self): 1982 f1num = 1 + \ 1983 (self.getInt("rightFrom") - self.getInt("rightTo")) / \ 1984 self.getInt("rightStep") 1985 f2num = 1 + \ 1986 (self.getInt("leftFrom") - self.getInt("leftTo")) / \ 1987 self.getInt("leftStep") 1988 return f1num * f2num 1989 1990 def iterateScenarios(self): 1991 """ 1992 Yields returning a built scenario and its description as key/value pairs 1993 """ 1994 desc = {"name": "TurnIteration"} 1995 for right in range(self.getInt("rightFrom"), self.getInt("rightTo"), self.getInt("rightStep")): 1996 for left in range(self.getInt("leftFrom"), self.getInt("leftTo"), self.getInt("leftStep")): 1997 print("Computing for %s<->%s" % (right, left)) 1998 sID = "TurnIteration(%s-%s)" % (right, left) 1999 s = getScenario("BasicCrossL", {}, False) 2000 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 2001 if fileNeedsRebuild(s.demandName, "duarouter"): 2002 s.demand = demandGenerator.Demand() 2003 aL = float(left) / 100. 2004 aR = float(right) / 100. 2005 if aR != 0: 2006 # why isn't it possible to get a network and return all 2007 # possible routes or whatever - to ease the process 2008 s.demand.addStream(demandGenerator.Stream( 2009 None, 0, 3600, self.MAIN_FLOW * aR, "2/1_to_1/1", "1/1_to_1/2", {"passenger": 1})) 2010 if aL != 0: 2011 # why isn't it possible to get a network and return all 2012 # possible routes or whatever - to ease the process 2013 s.demand.addStream(demandGenerator.Stream( 2014 None, 0, 3600, self.MAIN_FLOW * aL, "2/1_to_1/1", "1/1_to_1/0", {"passenger": 1})) 2015 if (1. - aR - aL) != 0: 2016 # why isn't it possible to get a network and return all 2017 # possible routes or whatever - to ease the process 2018 s.demand.addStream(demandGenerator.Stream( 2019 None, 0, 3600, self.MAIN_FLOW * (1. - aR - aL), "2/1_to_1/1", "1/1_to_0/1", 2020 {"passenger": 1})) 2021 # why isn't it possible to get a network and return all 2022 # possible routes or whatever - to ease the process 2023 s.demand.addStream(demandGenerator.Stream( 2024 None, 0, 3600, self.MAIN_FLOW, "0/1_to_1/1", "1/1_to_2/1", {"passenger": 1})) 2025 2026 # why isn't it possible to get a network and return all 2027 # possible routes or whatever - to ease the process 2028 s.demand.addStream(demandGenerator.Stream( 2029 None, 0, 3600, self.MAIN_FLOW, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 2030 # why isn't it possible to get a network and return all 2031 # possible routes or whatever - to ease the process 2032 s.demand.addStream(demandGenerator.Stream( 2033 None, 0, 3600, self.MAIN_FLOW, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 2034 s.demand.build(0, 3600, s.netName, s.demandName) 2035 desc = {"scenario": "TurnIteration", "r": str(right), "l": str(left)} 2036 yield s, desc, sID 2037 2038 def getRunsMatrix(self): 2039 ret = [] 2040 ranges = [[], []] 2041 for right in range(self.getInt("rightFrom"), self.getInt("rightTo"), self.getInt("rightStep")): 2042 ret.append([]) 2043 ranges[0].append(right) 2044 for left in range(self.getInt("leftFrom"), self.getInt("leftTo"), self.getInt("leftStep")): 2045 ret[-1].append({"scenario": "TurnIteration", 2046 "r": str(right), "l": str(left)}) 2047 ranges[1].append(left) 2048 return (ret, ranges) 2049 2050 def getAverageDuration(self): 2051 return -1 # !!! 2052 2053 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2054 # adapt tls to current settings 2055 scenario.addAdditionalFile( 2056 scenario.fullPath("tls_adapted_%s_%s" % (sID, tls_algorithm))) 2057 fdo = open( 2058 scenario.fullPath("tls_adapted_%s_%s.add.xml" % (sID, tls_algorithm)), "w") 2059 fdo.write("<additional>\n") 2060 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2061 for tlsID in net._id2tls: 2062 tls = net._id2tls[tlsID] 2063 for prog in tls._programs: 2064 tls._programs[prog]._type = tls_algorithm 2065 tls._programs[prog]._id = "adapted" 2066 self.addTLSParameterFromFile( 2067 tls._programs[prog], options.tls_params) 2068 fdo.write(tls._programs[prog].toXML(tlsID)) 2069 fdo.write("</additional>\n") 2070 fdo.close() 2071 args = [] 2072 return args 2073 2074 def getXLabel(self): 2075 return "right-turning ratio [%]" 2076 2077 def getYLabel(self): 2078 return "left-turning ratio [%]"
def
iterateScenarios(self):
1990 def iterateScenarios(self): 1991 """ 1992 Yields returning a built scenario and its description as key/value pairs 1993 """ 1994 desc = {"name": "TurnIteration"} 1995 for right in range(self.getInt("rightFrom"), self.getInt("rightTo"), self.getInt("rightStep")): 1996 for left in range(self.getInt("leftFrom"), self.getInt("leftTo"), self.getInt("leftStep")): 1997 print("Computing for %s<->%s" % (right, left)) 1998 sID = "TurnIteration(%s-%s)" % (right, left) 1999 s = getScenario("BasicCrossL", {}, False) 2000 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 2001 if fileNeedsRebuild(s.demandName, "duarouter"): 2002 s.demand = demandGenerator.Demand() 2003 aL = float(left) / 100. 2004 aR = float(right) / 100. 2005 if aR != 0: 2006 # why isn't it possible to get a network and return all 2007 # possible routes or whatever - to ease the process 2008 s.demand.addStream(demandGenerator.Stream( 2009 None, 0, 3600, self.MAIN_FLOW * aR, "2/1_to_1/1", "1/1_to_1/2", {"passenger": 1})) 2010 if aL != 0: 2011 # why isn't it possible to get a network and return all 2012 # possible routes or whatever - to ease the process 2013 s.demand.addStream(demandGenerator.Stream( 2014 None, 0, 3600, self.MAIN_FLOW * aL, "2/1_to_1/1", "1/1_to_1/0", {"passenger": 1})) 2015 if (1. - aR - aL) != 0: 2016 # why isn't it possible to get a network and return all 2017 # possible routes or whatever - to ease the process 2018 s.demand.addStream(demandGenerator.Stream( 2019 None, 0, 3600, self.MAIN_FLOW * (1. - aR - aL), "2/1_to_1/1", "1/1_to_0/1", 2020 {"passenger": 1})) 2021 # why isn't it possible to get a network and return all 2022 # possible routes or whatever - to ease the process 2023 s.demand.addStream(demandGenerator.Stream( 2024 None, 0, 3600, self.MAIN_FLOW, "0/1_to_1/1", "1/1_to_2/1", {"passenger": 1})) 2025 2026 # why isn't it possible to get a network and return all 2027 # possible routes or whatever - to ease the process 2028 s.demand.addStream(demandGenerator.Stream( 2029 None, 0, 3600, self.MAIN_FLOW, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 2030 # why isn't it possible to get a network and return all 2031 # possible routes or whatever - to ease the process 2032 s.demand.addStream(demandGenerator.Stream( 2033 None, 0, 3600, self.MAIN_FLOW, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 2034 s.demand.build(0, 3600, s.netName, s.demandName) 2035 desc = {"scenario": "TurnIteration", "r": str(right), "l": str(left)} 2036 yield s, desc, sID
Yields returning a built scenario and its description as key/value pairs
def
getRunsMatrix(self):
2038 def getRunsMatrix(self): 2039 ret = [] 2040 ranges = [[], []] 2041 for right in range(self.getInt("rightFrom"), self.getInt("rightTo"), self.getInt("rightStep")): 2042 ret.append([]) 2043 ranges[0].append(right) 2044 for left in range(self.getInt("leftFrom"), self.getInt("leftTo"), self.getInt("leftStep")): 2045 ret[-1].append({"scenario": "TurnIteration", 2046 "r": str(right), "l": str(left)}) 2047 ranges[1].append(left) 2048 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
2053 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2054 # adapt tls to current settings 2055 scenario.addAdditionalFile( 2056 scenario.fullPath("tls_adapted_%s_%s" % (sID, tls_algorithm))) 2057 fdo = open( 2058 scenario.fullPath("tls_adapted_%s_%s.add.xml" % (sID, tls_algorithm)), "w") 2059 fdo.write("<additional>\n") 2060 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2061 for tlsID in net._id2tls: 2062 tls = net._id2tls[tlsID] 2063 for prog in tls._programs: 2064 tls._programs[prog]._type = tls_algorithm 2065 tls._programs[prog]._id = "adapted" 2066 self.addTLSParameterFromFile( 2067 tls._programs[prog], options.tls_params) 2068 fdo.write(tls._programs[prog].toXML(tlsID)) 2069 fdo.write("</additional>\n") 2070 fdo.close() 2071 args = [] 2072 return args
2083class ScenarioSet_TurnIterationINIT(ScenarioSet): 2084 MAIN_FLOW = 800 2085 2086 def __init__(self, params): 2087 ScenarioSet.__init__(self, "TurnIteration", merge( 2088 {"rightFrom": "0", "rightTo": "51", "rightStep": "10", 2089 "leftFrom": "0", "leftTo": "51", "leftStep": "10"}, 2090 params)) 2091 2092 def getNumRuns(self): 2093 f1num = 1 + \ 2094 (self.getInt("rightFrom") - self.getInt("rightTo")) / \ 2095 self.getInt("rightStep") 2096 f2num = 1 + \ 2097 (self.getInt("leftFrom") - self.getInt("leftTo")) / \ 2098 self.getInt("leftStep") 2099 return f1num * f2num 2100 2101 """ 2102 Yields returning a built scenario and its description as key/value pairs 2103 """ 2104 2105 def iterateScenarios(self): 2106 desc = {"name": "TurnIteration"} 2107 for right in range(self.getInt("rightFrom"), self.getInt("rightTo"), self.getInt("rightStep")): 2108 for left in range(self.getInt("leftFrom"), self.getInt("leftTo"), self.getInt("leftStep")): 2109 print("Computing for %s<->%s" % (right, left)) 2110 sID = "TurnIteration(%s-%s)" % (right, left) 2111 s = getScenario("BasicCrossL", {}, False) 2112 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 2113 if fileNeedsRebuild(s.demandName, "duarouter"): 2114 s.demand = demandGenerator.Demand() 2115 aL = float(left) / 100. 2116 aR = float(right) / 100. 2117 if aR != 0: 2118 # why isn't it possible to get a network and return all 2119 # possible routes or whatever - to ease the process 2120 s.demand.addStream(demandGenerator.Stream( 2121 None, 0, 3600, self.MAIN_FLOW * aR, "2/1_to_1/1", "1/1_to_1/2", {"passenger": 1})) 2122 if aL != 0: 2123 # why isn't it possible to get a network and return all 2124 # possible routes or whatever - to ease the process 2125 s.demand.addStream(demandGenerator.Stream( 2126 None, 0, 3600, self.MAIN_FLOW * aL, "2/1_to_1/1", "1/1_to_1/0", {"passenger": 1})) 2127 if (1. - aR - aL) != 0: 2128 # why isn't it possible to get a network and return all 2129 # possible routes or whatever - to ease the process 2130 s.demand.addStream(demandGenerator.Stream( 2131 None, 0, 3600, self.MAIN_FLOW * (1. - aR - aL), "2/1_to_1/1", "1/1_to_0/1", 2132 {"passenger": 1})) 2133 2134 if aR != 0: 2135 # why isn't it possible to get a network and return all 2136 # possible routes or whatever - to ease the process 2137 s.demand.addStream(demandGenerator.Stream( 2138 None, 0, 3600, self.MAIN_FLOW * aR, "0/1_to_1/1", "1/1_to_1/0", {"passenger": 1})) 2139 if aL != 0: 2140 # why isn't it possible to get a network and return all 2141 # possible routes or whatever - to ease the process 2142 s.demand.addStream(demandGenerator.Stream( 2143 None, 0, 3600, self.MAIN_FLOW * aL, "0/1_to_1/1", "1/1_to_1/2", {"passenger": 1})) 2144 if (1. - aR - aL) != 0: 2145 # why isn't it possible to get a network and return all 2146 # possible routes or whatever - to ease the process 2147 s.demand.addStream(demandGenerator.Stream( 2148 None, 0, 3600, self.MAIN_FLOW * (1. - aR - aL), "0/1_to_1/1", "1/1_to_2/1", 2149 {"passenger": 1})) 2150 2151 # why isn't it possible to get a network and return all 2152 # possible routes or whatever - to ease the process 2153 s.demand.addStream(demandGenerator.Stream( 2154 None, 0, 3600, self.MAIN_FLOW, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 2155 # why isn't it possible to get a network and return all 2156 # possible routes or whatever - to ease the process 2157 s.demand.addStream(demandGenerator.Stream( 2158 None, 0, 3600, self.MAIN_FLOW, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 2159 s.demand.build(0, 3600, s.netName, s.demandName) 2160 desc = {"scenario": "TurnIteration", "r": str(right), "l": str(left)} 2161 yield s, desc, sID 2162 2163 def getRunsMatrix(self): 2164 ret = [] 2165 ranges = [[], []] 2166 for right in range(self.getInt("rightFrom"), self.getInt("rightTo"), self.getInt("rightStep")): 2167 ret.append([]) 2168 ranges[0].append(right) 2169 for left in range(self.getInt("leftFrom"), self.getInt("leftTo"), self.getInt("leftStep")): 2170 ret[-1].append({"scenario": "TurnIteration", 2171 "r": str(right), "l": str(left)}) 2172 ranges[1].append(left) 2173 return (ret, ranges) 2174 2175 def getAverageDuration(self): 2176 return -1 # !!! 2177 2178 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2179 # adapt tls to current settings 2180 scenario.addAdditionalFile( 2181 scenario.fullPath("tls_adapted_%s_%s" % (sID, tls_algorithm))) 2182 fdo = open( 2183 scenario.fullPath("tls_adapted_%s_%s.add.xml" % (sID, tls_algorithm)), "w") 2184 fdo.write("<additional>\n") 2185 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2186 for tlsID in net._id2tls: 2187 tls = net._id2tls[tlsID] 2188 for prog in tls._programs: 2189 tls._programs[prog]._type = tls_algorithm 2190 tls._programs[prog]._id = "adapted" 2191 self.addTLSParameterFromFile( 2192 tls._programs[prog], options.tls_params) 2193 fdo.write(tls._programs[prog].toXML(tlsID)) 2194 fdo.write("</additional>\n") 2195 fdo.close() 2196 args = [] 2197 return args 2198 2199 def getXLabel(self): 2200 return "right-turning ratio [%]" 2201 2202 def getYLabel(self): 2203 return "left-turning ratio [%]"
def
iterateScenarios(self):
2105 def iterateScenarios(self): 2106 desc = {"name": "TurnIteration"} 2107 for right in range(self.getInt("rightFrom"), self.getInt("rightTo"), self.getInt("rightStep")): 2108 for left in range(self.getInt("leftFrom"), self.getInt("leftTo"), self.getInt("leftStep")): 2109 print("Computing for %s<->%s" % (right, left)) 2110 sID = "TurnIteration(%s-%s)" % (right, left) 2111 s = getScenario("BasicCrossL", {}, False) 2112 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 2113 if fileNeedsRebuild(s.demandName, "duarouter"): 2114 s.demand = demandGenerator.Demand() 2115 aL = float(left) / 100. 2116 aR = float(right) / 100. 2117 if aR != 0: 2118 # why isn't it possible to get a network and return all 2119 # possible routes or whatever - to ease the process 2120 s.demand.addStream(demandGenerator.Stream( 2121 None, 0, 3600, self.MAIN_FLOW * aR, "2/1_to_1/1", "1/1_to_1/2", {"passenger": 1})) 2122 if aL != 0: 2123 # why isn't it possible to get a network and return all 2124 # possible routes or whatever - to ease the process 2125 s.demand.addStream(demandGenerator.Stream( 2126 None, 0, 3600, self.MAIN_FLOW * aL, "2/1_to_1/1", "1/1_to_1/0", {"passenger": 1})) 2127 if (1. - aR - aL) != 0: 2128 # why isn't it possible to get a network and return all 2129 # possible routes or whatever - to ease the process 2130 s.demand.addStream(demandGenerator.Stream( 2131 None, 0, 3600, self.MAIN_FLOW * (1. - aR - aL), "2/1_to_1/1", "1/1_to_0/1", 2132 {"passenger": 1})) 2133 2134 if aR != 0: 2135 # why isn't it possible to get a network and return all 2136 # possible routes or whatever - to ease the process 2137 s.demand.addStream(demandGenerator.Stream( 2138 None, 0, 3600, self.MAIN_FLOW * aR, "0/1_to_1/1", "1/1_to_1/0", {"passenger": 1})) 2139 if aL != 0: 2140 # why isn't it possible to get a network and return all 2141 # possible routes or whatever - to ease the process 2142 s.demand.addStream(demandGenerator.Stream( 2143 None, 0, 3600, self.MAIN_FLOW * aL, "0/1_to_1/1", "1/1_to_1/2", {"passenger": 1})) 2144 if (1. - aR - aL) != 0: 2145 # why isn't it possible to get a network and return all 2146 # possible routes or whatever - to ease the process 2147 s.demand.addStream(demandGenerator.Stream( 2148 None, 0, 3600, self.MAIN_FLOW * (1. - aR - aL), "0/1_to_1/1", "1/1_to_2/1", 2149 {"passenger": 1})) 2150 2151 # why isn't it possible to get a network and return all 2152 # possible routes or whatever - to ease the process 2153 s.demand.addStream(demandGenerator.Stream( 2154 None, 0, 3600, self.MAIN_FLOW, "1/2_to_1/1", "1/1_to_1/0", {"passenger": 1})) 2155 # why isn't it possible to get a network and return all 2156 # possible routes or whatever - to ease the process 2157 s.demand.addStream(demandGenerator.Stream( 2158 None, 0, 3600, self.MAIN_FLOW, "1/0_to_1/1", "1/1_to_1/2", {"passenger": 1})) 2159 s.demand.build(0, 3600, s.netName, s.demandName) 2160 desc = {"scenario": "TurnIteration", "r": str(right), "l": str(left)} 2161 yield s, desc, sID
def
getRunsMatrix(self):
2163 def getRunsMatrix(self): 2164 ret = [] 2165 ranges = [[], []] 2166 for right in range(self.getInt("rightFrom"), self.getInt("rightTo"), self.getInt("rightStep")): 2167 ret.append([]) 2168 ranges[0].append(right) 2169 for left in range(self.getInt("leftFrom"), self.getInt("leftTo"), self.getInt("leftStep")): 2170 ret[-1].append({"scenario": "TurnIteration", 2171 "r": str(right), "l": str(left)}) 2172 ranges[1].append(left) 2173 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
2178 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2179 # adapt tls to current settings 2180 scenario.addAdditionalFile( 2181 scenario.fullPath("tls_adapted_%s_%s" % (sID, tls_algorithm))) 2182 fdo = open( 2183 scenario.fullPath("tls_adapted_%s_%s.add.xml" % (sID, tls_algorithm)), "w") 2184 fdo.write("<additional>\n") 2185 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2186 for tlsID in net._id2tls: 2187 tls = net._id2tls[tlsID] 2188 for prog in tls._programs: 2189 tls._programs[prog]._type = tls_algorithm 2190 tls._programs[prog]._id = "adapted" 2191 self.addTLSParameterFromFile( 2192 tls._programs[prog], options.tls_params) 2193 fdo.write(tls._programs[prog].toXML(tlsID)) 2194 fdo.write("</additional>\n") 2195 fdo.close() 2196 args = [] 2197 return args
2208class ScenarioSet_RealWorld(ScenarioSet): 2209 2210 def __init__(self, params): 2211 ScenarioSet.__init__(self, "RealWorld", merge( 2212 {"scaleFrom": "50", "scaleTo": "151", 2213 "scaleStep": "25", "which": "unknown"}, 2214 params)) 2215 print(params) 2216 print(self.params) 2217 2218 def getNumRuns(self): 2219 f1num = 1 + abs(self.getInt("scaleFrom") - 2220 self.getInt("scaleTo")) / self.getInt("scaleStep") 2221 return f1num 2222 2223 """ 2224 Yields returning a built scenario and its description as key/value pairs 2225 """ 2226 2227 def iterateScenarios(self): 2228 desc = {"name": "RealWorld"} 2229 which = self.params["which"] 2230 for scale in range(self.getInt("scaleFrom"), self.getInt("scaleTo"), self.getInt("scaleStep")): 2231 print("Computing for %s<->%s" % (which, scale)) 2232 sID = "RealWorld(%s-%s)" % (which, scale) 2233 s = getScenario("RealWorld", self.params) 2234 # s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 2235 desc = { 2236 "scenario": "RealWorld", "which": which, "scale": str(scale)} 2237 yield s, desc, sID 2238 2239 def getRunsMatrix(self): 2240 ret = [] 2241 ranges = [[], []] 2242 ret.append([]) 2243 ranges[0].append(self.params["which"]) 2244 for s in range(self.getInt("scaleFrom"), self.getInt("scaleTo"), self.getInt("scaleStep")): 2245 ret[-1].append({"scenario": "RealWorld", 2246 "which": self.params["which"], "scale": str(s)}) 2247 ranges[1].append(s) 2248 return (ret, ranges) 2249 2250 def getAverageDuration(self): 2251 return -1 # !!! 2252 2253 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2254 # adapt tls to current settings 2255 scenario.addAdditionalFile( 2256 scenario.fullPath("tls_adapted_%s_%s" % (sID, tls_algorithm))) 2257 fdo = open( 2258 scenario.fullPath("tls_adapted_%s_%s.add.xml" % (sID, tls_algorithm)), "w") 2259 fdo.write("<additional>\n") 2260 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2261 for tlsID in net._id2tls: 2262 tls = net._id2tls[tlsID] 2263 for prog in tls._programs: 2264 tls._programs[prog]._type = tls_algorithm 2265 tls._programs[prog]._id = "adapted" 2266 self.addTLSParameterFromFile( 2267 tls._programs[prog], options.tls_params) 2268 fdo.write(tls._programs[prog].toXML(tlsID)) 2269 fdo.write("</additional>\n") 2270 fdo.close() 2271 args = [] 2272 return args 2273 2274 def getXLabel(self): 2275 return "" 2276 2277 def getYLabel(self): 2278 return "demand scale [%]" 2279 2280 def figsize(self): 2281 return 3, 5
def
iterateScenarios(self):
2227 def iterateScenarios(self): 2228 desc = {"name": "RealWorld"} 2229 which = self.params["which"] 2230 for scale in range(self.getInt("scaleFrom"), self.getInt("scaleTo"), self.getInt("scaleStep")): 2231 print("Computing for %s<->%s" % (which, scale)) 2232 sID = "RealWorld(%s-%s)" % (which, scale) 2233 s = getScenario("RealWorld", self.params) 2234 # s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 2235 desc = { 2236 "scenario": "RealWorld", "which": which, "scale": str(scale)} 2237 yield s, desc, sID
def
getRunsMatrix(self):
2239 def getRunsMatrix(self): 2240 ret = [] 2241 ranges = [[], []] 2242 ret.append([]) 2243 ranges[0].append(self.params["which"]) 2244 for s in range(self.getInt("scaleFrom"), self.getInt("scaleTo"), self.getInt("scaleStep")): 2245 ret[-1].append({"scenario": "RealWorld", 2246 "which": self.params["which"], "scale": str(s)}) 2247 ranges[1].append(s) 2248 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
2253 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2254 # adapt tls to current settings 2255 scenario.addAdditionalFile( 2256 scenario.fullPath("tls_adapted_%s_%s" % (sID, tls_algorithm))) 2257 fdo = open( 2258 scenario.fullPath("tls_adapted_%s_%s.add.xml" % (sID, tls_algorithm)), "w") 2259 fdo.write("<additional>\n") 2260 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2261 for tlsID in net._id2tls: 2262 tls = net._id2tls[tlsID] 2263 for prog in tls._programs: 2264 tls._programs[prog]._type = tls_algorithm 2265 tls._programs[prog]._id = "adapted" 2266 self.addTLSParameterFromFile( 2267 tls._programs[prog], options.tls_params) 2268 fdo.write(tls._programs[prog].toXML(tlsID)) 2269 fdo.write("</additional>\n") 2270 fdo.close() 2271 args = [] 2272 return args
2288class ScenarioSet_RiLSA1LoadCurvesOutTLS(ScenarioSet): 2289 2290 def __init__(self, params): 2291 ScenarioSet.__init__(self, "RiLSA1LoadCurvesOutTLS", merge( 2292 {}, 2293 params)) 2294 if "other-green" not in self.params: 2295 self.params["other-green"] = 31 2296 2297 def getNumRuns(self): 2298 return 3 * 3 * 3 * 3 2299 """ 2300 Yields returning a built scenario and its description as key/value pairs 2301 """ 2302 2303 def iterateScenarios(self): 2304 # desc = {"name": "RiLSA1LoadCurvesOutTLS"} 2305 RWScurves = getRWScurves() 2306 for iWE, cWE in enumerate(RWScurves): 2307 for iNS, cNS in enumerate(RWScurves): 2308 for iEW, cEW in enumerate(RWScurves): 2309 for iSN, cSN in enumerate(RWScurves): 2310 # s, desc, sID 2311 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN) 2312 2313 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 2314 cWE = RWScurves[iWE] 2315 cNS = RWScurves[iNS] 2316 cEW = RWScurves[iEW] 2317 cSN = RWScurves[iSN] 2318 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 2319 if uID is None: 2320 sID = "RiLSA1LoadCurvesOutTLS(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 2321 else: 2322 sID = "RiLSA1LoadCurvesOutTLS(%s)" % (uID) 2323 s = getScenario("RiLSA1OutTLS", "RiLSA1LoadCurvesOutTLS", self.params) 2324 s.demandName = s.sandboxPath("routes_%s.rou.xml" % sID) 2325 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 2326 nStreams = [] 2327 for stream in s.demand.streams: 2328 if stream._departEdgeModel.startswith("nm"): 2329 nStreams.extend( 2330 extrapolateDemand(stream, 3600, cNS, 7).streams) 2331 elif stream._departEdgeModel.startswith("em"): 2332 nStreams.extend( 2333 extrapolateDemand(stream, 3600, cEW, 7).streams) 2334 elif stream._departEdgeModel.startswith("sm"): 2335 nStreams.extend( 2336 extrapolateDemand(stream, 3600, cSN, 7).streams) 2337 elif stream._departEdgeModel.startswith("wm"): 2338 nStreams.extend( 2339 extrapolateDemand(stream, 3600, cWE, 7).streams) 2340 else: 2341 print(stream._departEdgeModel) 2342 raise RuntimeError("Hmmm, unknown stream??") 2343 s.demand.streams = nStreams 2344 end = 86400 2345 sampleFactor = None 2346 if "sample-factor" in self.params: 2347 sampleFactor = self.params["sample-factor"] 2348 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 2349 desc = {"scenario": "RiLSA1LoadCurvesOutTLS", "iWE": str( 2350 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 2351 return s, desc, sID 2352 2353 def getRunsMatrix(self): 2354 ret = [] 2355 ranges = [[], []] 2356 RWScurves = getRWScurves() 2357 i = 0 2358 for iWE, cWE in enumerate(RWScurves): 2359 for iNS, cNS in enumerate(RWScurves): 2360 ret.append([]) 2361 ranges[0].append(i) 2362 i = i + 1 2363 j = 0 2364 for iEW, cEW in enumerate(RWScurves): 2365 for iSN, cSN in enumerate(RWScurves): 2366 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": 2367 str(iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurves"}) 2368 ranges[-1].append(j) 2369 j = j + 1 2370 return (ret, ranges) 2371 2372 def getAverageDuration(self): 2373 return -1 # !!! 2374 2375 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2376 # adapt tls to current settings 2377 scenario.addAdditionalFile( 2378 scenario.sandboxPath("tls_adapted_%s" % sID)) 2379 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2380 fdo.write("<additional>\n") 2381 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2382 for tlsID in net._id2tls: 2383 tls = net._id2tls[tlsID] 2384 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2385 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 2386 for prog in tls._programs: 2387 i1 = i2 = 0 2388 for i, p in enumerate(tls._programs[prog]._phases): 2389 if p[1] == 40: 2390 i1 = i 2391 elif p[1] == 12: 2392 i2 = i 2393 for t in greens: 2394 tls._programs[prog]._type = tls_algorithm 2395 tls._programs[prog]._id = "adapted" + str(t) 2396 self.addTLSParameterFromFile( 2397 tls._programs[prog], options.tls_params) 2398 tls._programs[prog]._phases[i1][1] = greens[t][1] 2399 tls._programs[prog]._phases[i2][1] = greens[t][0] 2400 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2401 fdo.write( 2402 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 2403 for t in times: 2404 fdo.write( 2405 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 2406 fdo.write("\t</WAUT>\n") 2407 fdo.write( 2408 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 2409 fdo.write("</additional>\n") 2410 fdo.close() 2411 args = [] 2412 return args 2413 2414 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 2415 # adapt tls to current settings 2416 scenario.addAdditionalFile( 2417 scenario.sandboxPath("tls_adapted_%s" % sID)) 2418 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2419 fdo.write("<additional>\n") 2420 net = sumolib.net.readNet( 2421 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 2422 for tlsID in net._id2tls: 2423 tls = net._id2tls[tlsID] 2424 if tlsID == "0": 2425 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2426 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 2427 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 2428 greens = split_by_proportions(72, (ns, we), (10, 10)) 2429 for prog in tls._programs: 2430 i1 = i2 = 0 2431 for i, p in enumerate(tls._programs[prog]._phases): 2432 if p[1] == 40: 2433 i1 = i 2434 elif p[1] == 12: 2435 i2 = i 2436 tls._programs[prog]._type = tls_algorithm 2437 self.addTLSParameterFromFile( 2438 tls._programs[prog], options.tls_params) 2439 tls._programs[prog]._phases[i1][1] = greens[1] 2440 tls._programs[prog]._phases[i2][1] = greens[0] 2441 tls._programs[prog]._id = "adapted" 2442 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2443 else: 2444 if tlsID[0] == 'e' or tlsID[0] == 'w': 2445 tls._programs[prog]._phases[0][ 2446 1] = self.params["other-green"] 2447 else: 2448 tls._programs[prog]._phases[1][ 2449 1] = self.params["other-green"] 2450 tls._programs[prog]._id = "adapted" 2451 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2452 fdo.write("</additional>\n") 2453 fdo.close() 2454 args = [] 2455 return args 2456 2457 def getXLabel(self): 2458 return "!!!RWS type" 2459 2460 def getYLabel(self): 2461 return "!!!RWS type"
def
iterateScenarios(self):
2303 def iterateScenarios(self): 2304 # desc = {"name": "RiLSA1LoadCurvesOutTLS"} 2305 RWScurves = getRWScurves() 2306 for iWE, cWE in enumerate(RWScurves): 2307 for iNS, cNS in enumerate(RWScurves): 2308 for iEW, cEW in enumerate(RWScurves): 2309 for iSN, cSN in enumerate(RWScurves): 2310 # s, desc, sID 2311 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN)
def
getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None):
2313 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 2314 cWE = RWScurves[iWE] 2315 cNS = RWScurves[iNS] 2316 cEW = RWScurves[iEW] 2317 cSN = RWScurves[iSN] 2318 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 2319 if uID is None: 2320 sID = "RiLSA1LoadCurvesOutTLS(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 2321 else: 2322 sID = "RiLSA1LoadCurvesOutTLS(%s)" % (uID) 2323 s = getScenario("RiLSA1OutTLS", "RiLSA1LoadCurvesOutTLS", self.params) 2324 s.demandName = s.sandboxPath("routes_%s.rou.xml" % sID) 2325 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 2326 nStreams = [] 2327 for stream in s.demand.streams: 2328 if stream._departEdgeModel.startswith("nm"): 2329 nStreams.extend( 2330 extrapolateDemand(stream, 3600, cNS, 7).streams) 2331 elif stream._departEdgeModel.startswith("em"): 2332 nStreams.extend( 2333 extrapolateDemand(stream, 3600, cEW, 7).streams) 2334 elif stream._departEdgeModel.startswith("sm"): 2335 nStreams.extend( 2336 extrapolateDemand(stream, 3600, cSN, 7).streams) 2337 elif stream._departEdgeModel.startswith("wm"): 2338 nStreams.extend( 2339 extrapolateDemand(stream, 3600, cWE, 7).streams) 2340 else: 2341 print(stream._departEdgeModel) 2342 raise RuntimeError("Hmmm, unknown stream??") 2343 s.demand.streams = nStreams 2344 end = 86400 2345 sampleFactor = None 2346 if "sample-factor" in self.params: 2347 sampleFactor = self.params["sample-factor"] 2348 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 2349 desc = {"scenario": "RiLSA1LoadCurvesOutTLS", "iWE": str( 2350 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 2351 return s, desc, sID
def
getRunsMatrix(self):
2353 def getRunsMatrix(self): 2354 ret = [] 2355 ranges = [[], []] 2356 RWScurves = getRWScurves() 2357 i = 0 2358 for iWE, cWE in enumerate(RWScurves): 2359 for iNS, cNS in enumerate(RWScurves): 2360 ret.append([]) 2361 ranges[0].append(i) 2362 i = i + 1 2363 j = 0 2364 for iEW, cEW in enumerate(RWScurves): 2365 for iSN, cSN in enumerate(RWScurves): 2366 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": 2367 str(iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurves"}) 2368 ranges[-1].append(j) 2369 j = j + 1 2370 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
2375 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2376 # adapt tls to current settings 2377 scenario.addAdditionalFile( 2378 scenario.sandboxPath("tls_adapted_%s" % sID)) 2379 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2380 fdo.write("<additional>\n") 2381 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2382 for tlsID in net._id2tls: 2383 tls = net._id2tls[tlsID] 2384 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2385 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 2386 for prog in tls._programs: 2387 i1 = i2 = 0 2388 for i, p in enumerate(tls._programs[prog]._phases): 2389 if p[1] == 40: 2390 i1 = i 2391 elif p[1] == 12: 2392 i2 = i 2393 for t in greens: 2394 tls._programs[prog]._type = tls_algorithm 2395 tls._programs[prog]._id = "adapted" + str(t) 2396 self.addTLSParameterFromFile( 2397 tls._programs[prog], options.tls_params) 2398 tls._programs[prog]._phases[i1][1] = greens[t][1] 2399 tls._programs[prog]._phases[i2][1] = greens[t][0] 2400 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2401 fdo.write( 2402 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 2403 for t in times: 2404 fdo.write( 2405 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 2406 fdo.write("\t</WAUT>\n") 2407 fdo.write( 2408 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 2409 fdo.write("</additional>\n") 2410 fdo.close() 2411 args = [] 2412 return args
def
adapt2TLS2(self, sID, scenario, options, tls_algorithm):
2414 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 2415 # adapt tls to current settings 2416 scenario.addAdditionalFile( 2417 scenario.sandboxPath("tls_adapted_%s" % sID)) 2418 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2419 fdo.write("<additional>\n") 2420 net = sumolib.net.readNet( 2421 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 2422 for tlsID in net._id2tls: 2423 tls = net._id2tls[tlsID] 2424 if tlsID == "0": 2425 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2426 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 2427 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 2428 greens = split_by_proportions(72, (ns, we), (10, 10)) 2429 for prog in tls._programs: 2430 i1 = i2 = 0 2431 for i, p in enumerate(tls._programs[prog]._phases): 2432 if p[1] == 40: 2433 i1 = i 2434 elif p[1] == 12: 2435 i2 = i 2436 tls._programs[prog]._type = tls_algorithm 2437 self.addTLSParameterFromFile( 2438 tls._programs[prog], options.tls_params) 2439 tls._programs[prog]._phases[i1][1] = greens[1] 2440 tls._programs[prog]._phases[i2][1] = greens[0] 2441 tls._programs[prog]._id = "adapted" 2442 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2443 else: 2444 if tlsID[0] == 'e' or tlsID[0] == 'w': 2445 tls._programs[prog]._phases[0][ 2446 1] = self.params["other-green"] 2447 else: 2448 tls._programs[prog]._phases[1][ 2449 1] = self.params["other-green"] 2450 tls._programs[prog]._id = "adapted" 2451 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2452 fdo.write("</additional>\n") 2453 fdo.close() 2454 args = [] 2455 return args
2466class ScenarioSet_RiLSA1LoadCurvesOutTLS24(ScenarioSet): 2467 2468 def __init__(self, params): 2469 ScenarioSet.__init__(self, "RiLSA1LoadCurvesOutTLS24", merge( 2470 {}, 2471 params)) 2472 if "other-green" not in self.params: 2473 self.params["other-green"] = 31 2474 2475 def getNumRuns(self): 2476 return 3 * 3 * 3 * 3 2477 """ 2478 Yields returning a built scenario and its description as key/value pairs 2479 """ 2480 2481 def iterateScenarios(self): 2482 # desc = {"name": "RiLSA1LoadCurvesOutTLS24"} 2483 RWScurves = getRWScurves() 2484 for iWE, cWE in enumerate(RWScurves): 2485 for iNS, cNS in enumerate(RWScurves): 2486 for iEW, cEW in enumerate(RWScurves): 2487 for iSN, cSN in enumerate(RWScurves): 2488 # s, desc, sID 2489 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN) 2490 2491 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 2492 cWE = RWScurves[iWE] 2493 cNS = RWScurves[iNS] 2494 cEW = RWScurves[iEW] 2495 cSN = RWScurves[iSN] 2496 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 2497 if uID is None: 2498 sID = "RiLSA1LoadCurvesOutTLS24(%s-%s-%s-%s)" % ( 2499 iWE, iNS, iEW, iSN) 2500 else: 2501 sID = "RiLSA1LoadCurvesOutTLS24(%s)" % (uID) 2502 s = getScenario( 2503 "RiLSA1OutTLS", "RiLSA1LoadCurvesOutTLS24", self.params) 2504 s.demandName = s.sandboxPath("routes_%s.rou.xml" % sID) 2505 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 2506 nStreams = [] 2507 for stream in s.demand.streams: 2508 if stream._departEdgeModel.startswith("nm"): 2509 nStreams.extend( 2510 extrapolateDemand(stream, 3600, cNS, 7).streams) 2511 elif stream._departEdgeModel.startswith("em"): 2512 nStreams.extend( 2513 extrapolateDemand(stream, 3600, cEW, 7).streams) 2514 elif stream._departEdgeModel.startswith("sm"): 2515 nStreams.extend( 2516 extrapolateDemand(stream, 3600, cSN, 7).streams) 2517 elif stream._departEdgeModel.startswith("wm"): 2518 nStreams.extend( 2519 extrapolateDemand(stream, 3600, cWE, 7).streams) 2520 else: 2521 print(stream._departEdgeModel) 2522 raise RuntimeError("Hmmm, unknown stream??") 2523 s.demand.streams = nStreams 2524 end = 86400 2525 sampleFactor = None 2526 if "sample-factor" in self.params: 2527 sampleFactor = self.params["sample-factor"] 2528 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 2529 desc = {"scenario": "RiLSA1LoadCurvesOutTLS24", "iWE": str( 2530 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 2531 return s, desc, sID 2532 2533 def getRunsMatrix(self): 2534 ret = [] 2535 ranges = [[], []] 2536 RWScurves = getRWScurves() 2537 i = 0 2538 for iWE, cWE in enumerate(RWScurves): 2539 for iNS, cNS in enumerate(RWScurves): 2540 ret.append([]) 2541 ranges[0].append(i) 2542 i = i + 1 2543 j = 0 2544 for iEW, cEW in enumerate(RWScurves): 2545 for iSN, cSN in enumerate(RWScurves): 2546 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": str( 2547 iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurvesOutTLS24"}) 2548 ranges[-1].append(j) 2549 j = j + 1 2550 return (ret, ranges) 2551 2552 def getAverageDuration(self): 2553 return -1 # !!! 2554 2555 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2556 # adapt tls to current settings 2557 scenario.addAdditionalFile( 2558 scenario.sandboxPath("tls_adapted_%s" % sID)) 2559 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2560 fdo.write("<additional>\n") 2561 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2562 for tlsID in net._id2tls: 2563 tls = net._id2tls[tlsID] 2564 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2565 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 2566 for prog in tls._programs: 2567 i1 = i2 = 0 2568 for i, p in enumerate(tls._programs[prog]._phases): 2569 if p[1] == 40: 2570 i1 = i 2571 elif p[1] == 12: 2572 i2 = i 2573 for t in greens: 2574 tls._programs[prog]._type = tls_algorithm 2575 tls._programs[prog]._id = "adapted" + str(t) 2576 self.addTLSParameterFromFile( 2577 tls._programs[prog], options.tls_params) 2578 tls._programs[prog]._phases[i1][1] = greens[t][1] 2579 tls._programs[prog]._phases[i2][1] = greens[t][0] 2580 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2581 fdo.write( 2582 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 2583 for t in times: 2584 fdo.write( 2585 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 2586 fdo.write("\t</WAUT>\n") 2587 fdo.write( 2588 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 2589 fdo.write("</additional>\n") 2590 fdo.close() 2591 args = [] 2592 return args 2593 2594 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 2595 # adapt tls to current settings 2596 scenario.addAdditionalFile( 2597 scenario.sandboxPath("tls_adapted_%s" % sID)) 2598 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2599 fdo.write("<additional>\n") 2600 net = sumolib.net.readNet( 2601 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 2602 for tlsID in net._id2tls: 2603 tls = net._id2tls[tlsID] 2604 if tlsID == "0": 2605 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2606 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 2607 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 2608 greens = split_by_proportions(72, (ns, we), (10, 10)) 2609 for prog in tls._programs: 2610 i1 = i2 = 0 2611 for i, p in enumerate(tls._programs[prog]._phases): 2612 if p[1] == 40: 2613 i1 = i 2614 elif p[1] == 12: 2615 i2 = i 2616 tls._programs[prog]._type = tls_algorithm 2617 self.addTLSParameterFromFile( 2618 tls._programs[prog], options.tls_params) 2619 tls._programs[prog]._phases[i1][1] = greens[1] 2620 tls._programs[prog]._phases[i2][1] = greens[0] 2621 tls._programs[prog]._id = "adapted" 2622 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2623 else: 2624 if tlsID[0] == 'e' or tlsID[0] == 'w': 2625 tls._programs[prog]._phases[0][ 2626 1] = self.params["other-green"] 2627 else: 2628 tls._programs[prog]._phases[1][ 2629 1] = self.params["other-green"] 2630 tls._programs[prog]._id = "adapted" 2631 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2632 fdo.write("</additional>\n") 2633 fdo.close() 2634 args = [] 2635 return args 2636 2637 def getXLabel(self): 2638 return "!!!RWS type" 2639 2640 def getYLabel(self): 2641 return "!!!RWS type"
def
iterateScenarios(self):
2481 def iterateScenarios(self): 2482 # desc = {"name": "RiLSA1LoadCurvesOutTLS24"} 2483 RWScurves = getRWScurves() 2484 for iWE, cWE in enumerate(RWScurves): 2485 for iNS, cNS in enumerate(RWScurves): 2486 for iEW, cEW in enumerate(RWScurves): 2487 for iSN, cSN in enumerate(RWScurves): 2488 # s, desc, sID 2489 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN)
def
getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None):
2491 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 2492 cWE = RWScurves[iWE] 2493 cNS = RWScurves[iNS] 2494 cEW = RWScurves[iEW] 2495 cSN = RWScurves[iSN] 2496 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 2497 if uID is None: 2498 sID = "RiLSA1LoadCurvesOutTLS24(%s-%s-%s-%s)" % ( 2499 iWE, iNS, iEW, iSN) 2500 else: 2501 sID = "RiLSA1LoadCurvesOutTLS24(%s)" % (uID) 2502 s = getScenario( 2503 "RiLSA1OutTLS", "RiLSA1LoadCurvesOutTLS24", self.params) 2504 s.demandName = s.sandboxPath("routes_%s.rou.xml" % sID) 2505 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 2506 nStreams = [] 2507 for stream in s.demand.streams: 2508 if stream._departEdgeModel.startswith("nm"): 2509 nStreams.extend( 2510 extrapolateDemand(stream, 3600, cNS, 7).streams) 2511 elif stream._departEdgeModel.startswith("em"): 2512 nStreams.extend( 2513 extrapolateDemand(stream, 3600, cEW, 7).streams) 2514 elif stream._departEdgeModel.startswith("sm"): 2515 nStreams.extend( 2516 extrapolateDemand(stream, 3600, cSN, 7).streams) 2517 elif stream._departEdgeModel.startswith("wm"): 2518 nStreams.extend( 2519 extrapolateDemand(stream, 3600, cWE, 7).streams) 2520 else: 2521 print(stream._departEdgeModel) 2522 raise RuntimeError("Hmmm, unknown stream??") 2523 s.demand.streams = nStreams 2524 end = 86400 2525 sampleFactor = None 2526 if "sample-factor" in self.params: 2527 sampleFactor = self.params["sample-factor"] 2528 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 2529 desc = {"scenario": "RiLSA1LoadCurvesOutTLS24", "iWE": str( 2530 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 2531 return s, desc, sID
def
getRunsMatrix(self):
2533 def getRunsMatrix(self): 2534 ret = [] 2535 ranges = [[], []] 2536 RWScurves = getRWScurves() 2537 i = 0 2538 for iWE, cWE in enumerate(RWScurves): 2539 for iNS, cNS in enumerate(RWScurves): 2540 ret.append([]) 2541 ranges[0].append(i) 2542 i = i + 1 2543 j = 0 2544 for iEW, cEW in enumerate(RWScurves): 2545 for iSN, cSN in enumerate(RWScurves): 2546 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": str( 2547 iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurvesOutTLS24"}) 2548 ranges[-1].append(j) 2549 j = j + 1 2550 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
2555 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2556 # adapt tls to current settings 2557 scenario.addAdditionalFile( 2558 scenario.sandboxPath("tls_adapted_%s" % sID)) 2559 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2560 fdo.write("<additional>\n") 2561 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2562 for tlsID in net._id2tls: 2563 tls = net._id2tls[tlsID] 2564 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2565 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 2566 for prog in tls._programs: 2567 i1 = i2 = 0 2568 for i, p in enumerate(tls._programs[prog]._phases): 2569 if p[1] == 40: 2570 i1 = i 2571 elif p[1] == 12: 2572 i2 = i 2573 for t in greens: 2574 tls._programs[prog]._type = tls_algorithm 2575 tls._programs[prog]._id = "adapted" + str(t) 2576 self.addTLSParameterFromFile( 2577 tls._programs[prog], options.tls_params) 2578 tls._programs[prog]._phases[i1][1] = greens[t][1] 2579 tls._programs[prog]._phases[i2][1] = greens[t][0] 2580 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2581 fdo.write( 2582 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 2583 for t in times: 2584 fdo.write( 2585 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 2586 fdo.write("\t</WAUT>\n") 2587 fdo.write( 2588 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 2589 fdo.write("</additional>\n") 2590 fdo.close() 2591 args = [] 2592 return args
def
adapt2TLS2(self, sID, scenario, options, tls_algorithm):
2594 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 2595 # adapt tls to current settings 2596 scenario.addAdditionalFile( 2597 scenario.sandboxPath("tls_adapted_%s" % sID)) 2598 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2599 fdo.write("<additional>\n") 2600 net = sumolib.net.readNet( 2601 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 2602 for tlsID in net._id2tls: 2603 tls = net._id2tls[tlsID] 2604 if tlsID == "0": 2605 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2606 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 2607 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 2608 greens = split_by_proportions(72, (ns, we), (10, 10)) 2609 for prog in tls._programs: 2610 i1 = i2 = 0 2611 for i, p in enumerate(tls._programs[prog]._phases): 2612 if p[1] == 40: 2613 i1 = i 2614 elif p[1] == 12: 2615 i2 = i 2616 tls._programs[prog]._type = tls_algorithm 2617 self.addTLSParameterFromFile( 2618 tls._programs[prog], options.tls_params) 2619 tls._programs[prog]._phases[i1][1] = greens[1] 2620 tls._programs[prog]._phases[i2][1] = greens[0] 2621 tls._programs[prog]._id = "adapted" 2622 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2623 else: 2624 if tlsID[0] == 'e' or tlsID[0] == 'w': 2625 tls._programs[prog]._phases[0][ 2626 1] = self.params["other-green"] 2627 else: 2628 tls._programs[prog]._phases[1][ 2629 1] = self.params["other-green"] 2630 tls._programs[prog]._id = "adapted" 2631 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2632 fdo.write("</additional>\n") 2633 fdo.close() 2634 args = [] 2635 return args
2646class ScenarioSet_RiLSA1LoadCurvesBothTLS(ScenarioSet): 2647 2648 def __init__(self, params): 2649 ScenarioSet.__init__(self, "RiLSA1LoadCurvesBothTLS", merge( 2650 {}, 2651 params)) 2652 if "other-green" not in self.params: 2653 self.params["other-green"] = 31 2654 2655 def getNumRuns(self): 2656 return 3 * 3 * 3 * 3 2657 """ 2658 Yields returning a built scenario and its description as key/value pairs 2659 """ 2660 2661 def iterateScenarios(self): 2662 # desc = {"name": "RiLSA1LoadCurvesBothTLS"} 2663 RWScurves = getRWScurves() 2664 for iWE, cWE in enumerate(RWScurves): 2665 for iNS, cNS in enumerate(RWScurves): 2666 for iEW, cEW in enumerate(RWScurves): 2667 for iSN, cSN in enumerate(RWScurves): 2668 # s, desc, sID 2669 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN) 2670 2671 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 2672 cWE = RWScurves[iWE] 2673 cNS = RWScurves[iNS] 2674 cEW = RWScurves[iEW] 2675 cSN = RWScurves[iSN] 2676 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 2677 if uID is None: 2678 sID = "RiLSA1LoadCurvesBothTLS(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 2679 else: 2680 sID = "RiLSA1LoadCurvesBothTLS(%s)" % (uID) 2681 s = getScenario( 2682 "RiLSA1BothTLS", "RiLSA1LoadCurvesBothTLS", self.params) 2683 s.demandName = s.sandboxPath("routes_%s.rou.xml" % sID) 2684 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 2685 nStreams = [] 2686 for stream in s.demand.streams: 2687 if stream._departEdgeModel.startswith("nm"): 2688 nStreams.extend( 2689 extrapolateDemand(stream, 3600, cNS, 7).streams) 2690 elif stream._departEdgeModel.startswith("em"): 2691 nStreams.extend( 2692 extrapolateDemand(stream, 3600, cEW, 7).streams) 2693 elif stream._departEdgeModel.startswith("sm"): 2694 nStreams.extend( 2695 extrapolateDemand(stream, 3600, cSN, 7).streams) 2696 elif stream._departEdgeModel.startswith("wm"): 2697 nStreams.extend( 2698 extrapolateDemand(stream, 3600, cWE, 7).streams) 2699 else: 2700 print(stream._departEdgeModel) 2701 raise RuntimeError("Hmmm, unknown stream??") 2702 s.demand.streams = nStreams 2703 end = 86400 2704 sampleFactor = None 2705 if "sample-factor" in self.params: 2706 sampleFactor = self.params["sample-factor"] 2707 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 2708 desc = {"scenario": "RiLSA1LoadCurvesBothTLS", "iWE": str( 2709 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 2710 return s, desc, sID 2711 2712 def getRunsMatrix(self): 2713 ret = [] 2714 ranges = [[], []] 2715 RWScurves = getRWScurves() 2716 i = 0 2717 for iWE, cWE in enumerate(RWScurves): 2718 for iNS, cNS in enumerate(RWScurves): 2719 ret.append([]) 2720 ranges[0].append(i) 2721 i = i + 1 2722 j = 0 2723 for iEW, cEW in enumerate(RWScurves): 2724 for iSN, cSN in enumerate(RWScurves): 2725 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": str( 2726 iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurvesBothTLS"}) 2727 ranges[-1].append(j) 2728 j = j + 1 2729 return (ret, ranges) 2730 2731 def getAverageDuration(self): 2732 return -1 # !!! 2733 2734 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2735 # adapt tls to current settings 2736 scenario.addAdditionalFile( 2737 scenario.sandboxPath("tls_adapted_%s" % sID)) 2738 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2739 fdo.write("<additional>\n") 2740 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2741 for tlsID in net._id2tls: 2742 tls = net._id2tls[tlsID] 2743 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2744 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 2745 for prog in tls._programs: 2746 i1 = i2 = 0 2747 for i, p in enumerate(tls._programs[prog]._phases): 2748 if p[1] == 40: 2749 i1 = i 2750 elif p[1] == 12: 2751 i2 = i 2752 for t in greens: 2753 tls._programs[prog]._type = tls_algorithm 2754 tls._programs[prog]._id = "adapted" + str(t) 2755 self.addTLSParameterFromFile( 2756 tls._programs[prog], options.tls_params) 2757 tls._programs[prog]._phases[i1][1] = greens[t][1] 2758 tls._programs[prog]._phases[i2][1] = greens[t][0] 2759 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2760 fdo.write( 2761 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 2762 for t in times: 2763 fdo.write( 2764 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 2765 fdo.write("\t</WAUT>\n") 2766 fdo.write( 2767 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 2768 fdo.write("</additional>\n") 2769 fdo.close() 2770 args = [] 2771 return args 2772 2773 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 2774 # adapt tls to current settings 2775 scenario.addAdditionalFile( 2776 scenario.sandboxPath("tls_adapted_%s" % sID)) 2777 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2778 fdo.write("<additional>\n") 2779 net = sumolib.net.readNet( 2780 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 2781 for tlsID in net._id2tls: 2782 tls = net._id2tls[tlsID] 2783 if tlsID == "0": 2784 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2785 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 2786 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 2787 greens = split_by_proportions(72, (ns, we), (10, 10)) 2788 for prog in tls._programs: 2789 i1 = i2 = 0 2790 for i, p in enumerate(tls._programs[prog]._phases): 2791 if p[1] == 40: 2792 i1 = i 2793 elif p[1] == 12: 2794 i2 = i 2795 tls._programs[prog]._type = tls_algorithm 2796 self.addTLSParameterFromFile( 2797 tls._programs[prog], options.tls_params) 2798 tls._programs[prog]._phases[i1][1] = greens[1] 2799 tls._programs[prog]._phases[i2][1] = greens[0] 2800 tls._programs[prog]._id = "adapted" 2801 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2802 else: 2803 if tlsID[0] == 'e' or tlsID[0] == 'w': 2804 tls._programs[prog]._phases[0][ 2805 1] = self.params["other-green"] 2806 else: 2807 tls._programs[prog]._phases[1][ 2808 1] = self.params["other-green"] 2809 tls._programs[prog]._id = "adapted" 2810 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2811 fdo.write("</additional>\n") 2812 fdo.close() 2813 args = [] 2814 return args 2815 2816 def getXLabel(self): 2817 return "!!!RWS type" 2818 2819 def getYLabel(self): 2820 return "!!!RWS type"
def
iterateScenarios(self):
2661 def iterateScenarios(self): 2662 # desc = {"name": "RiLSA1LoadCurvesBothTLS"} 2663 RWScurves = getRWScurves() 2664 for iWE, cWE in enumerate(RWScurves): 2665 for iNS, cNS in enumerate(RWScurves): 2666 for iEW, cEW in enumerate(RWScurves): 2667 for iSN, cSN in enumerate(RWScurves): 2668 # s, desc, sID 2669 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN)
def
getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None):
2671 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 2672 cWE = RWScurves[iWE] 2673 cNS = RWScurves[iNS] 2674 cEW = RWScurves[iEW] 2675 cSN = RWScurves[iSN] 2676 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 2677 if uID is None: 2678 sID = "RiLSA1LoadCurvesBothTLS(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 2679 else: 2680 sID = "RiLSA1LoadCurvesBothTLS(%s)" % (uID) 2681 s = getScenario( 2682 "RiLSA1BothTLS", "RiLSA1LoadCurvesBothTLS", self.params) 2683 s.demandName = s.sandboxPath("routes_%s.rou.xml" % sID) 2684 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 2685 nStreams = [] 2686 for stream in s.demand.streams: 2687 if stream._departEdgeModel.startswith("nm"): 2688 nStreams.extend( 2689 extrapolateDemand(stream, 3600, cNS, 7).streams) 2690 elif stream._departEdgeModel.startswith("em"): 2691 nStreams.extend( 2692 extrapolateDemand(stream, 3600, cEW, 7).streams) 2693 elif stream._departEdgeModel.startswith("sm"): 2694 nStreams.extend( 2695 extrapolateDemand(stream, 3600, cSN, 7).streams) 2696 elif stream._departEdgeModel.startswith("wm"): 2697 nStreams.extend( 2698 extrapolateDemand(stream, 3600, cWE, 7).streams) 2699 else: 2700 print(stream._departEdgeModel) 2701 raise RuntimeError("Hmmm, unknown stream??") 2702 s.demand.streams = nStreams 2703 end = 86400 2704 sampleFactor = None 2705 if "sample-factor" in self.params: 2706 sampleFactor = self.params["sample-factor"] 2707 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 2708 desc = {"scenario": "RiLSA1LoadCurvesBothTLS", "iWE": str( 2709 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 2710 return s, desc, sID
def
getRunsMatrix(self):
2712 def getRunsMatrix(self): 2713 ret = [] 2714 ranges = [[], []] 2715 RWScurves = getRWScurves() 2716 i = 0 2717 for iWE, cWE in enumerate(RWScurves): 2718 for iNS, cNS in enumerate(RWScurves): 2719 ret.append([]) 2720 ranges[0].append(i) 2721 i = i + 1 2722 j = 0 2723 for iEW, cEW in enumerate(RWScurves): 2724 for iSN, cSN in enumerate(RWScurves): 2725 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": str( 2726 iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurvesBothTLS"}) 2727 ranges[-1].append(j) 2728 j = j + 1 2729 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
2734 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2735 # adapt tls to current settings 2736 scenario.addAdditionalFile( 2737 scenario.sandboxPath("tls_adapted_%s" % sID)) 2738 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2739 fdo.write("<additional>\n") 2740 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2741 for tlsID in net._id2tls: 2742 tls = net._id2tls[tlsID] 2743 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2744 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 2745 for prog in tls._programs: 2746 i1 = i2 = 0 2747 for i, p in enumerate(tls._programs[prog]._phases): 2748 if p[1] == 40: 2749 i1 = i 2750 elif p[1] == 12: 2751 i2 = i 2752 for t in greens: 2753 tls._programs[prog]._type = tls_algorithm 2754 tls._programs[prog]._id = "adapted" + str(t) 2755 self.addTLSParameterFromFile( 2756 tls._programs[prog], options.tls_params) 2757 tls._programs[prog]._phases[i1][1] = greens[t][1] 2758 tls._programs[prog]._phases[i2][1] = greens[t][0] 2759 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2760 fdo.write( 2761 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 2762 for t in times: 2763 fdo.write( 2764 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 2765 fdo.write("\t</WAUT>\n") 2766 fdo.write( 2767 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 2768 fdo.write("</additional>\n") 2769 fdo.close() 2770 args = [] 2771 return args
def
adapt2TLS2(self, sID, scenario, options, tls_algorithm):
2773 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 2774 # adapt tls to current settings 2775 scenario.addAdditionalFile( 2776 scenario.sandboxPath("tls_adapted_%s" % sID)) 2777 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2778 fdo.write("<additional>\n") 2779 net = sumolib.net.readNet( 2780 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 2781 for tlsID in net._id2tls: 2782 tls = net._id2tls[tlsID] 2783 if tlsID == "0": 2784 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2785 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 2786 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 2787 greens = split_by_proportions(72, (ns, we), (10, 10)) 2788 for prog in tls._programs: 2789 i1 = i2 = 0 2790 for i, p in enumerate(tls._programs[prog]._phases): 2791 if p[1] == 40: 2792 i1 = i 2793 elif p[1] == 12: 2794 i2 = i 2795 tls._programs[prog]._type = tls_algorithm 2796 self.addTLSParameterFromFile( 2797 tls._programs[prog], options.tls_params) 2798 tls._programs[prog]._phases[i1][1] = greens[1] 2799 tls._programs[prog]._phases[i2][1] = greens[0] 2800 tls._programs[prog]._id = "adapted" 2801 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2802 else: 2803 if tlsID[0] == 'e' or tlsID[0] == 'w': 2804 tls._programs[prog]._phases[0][ 2805 1] = self.params["other-green"] 2806 else: 2807 tls._programs[prog]._phases[1][ 2808 1] = self.params["other-green"] 2809 tls._programs[prog]._id = "adapted" 2810 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2811 fdo.write("</additional>\n") 2812 fdo.close() 2813 args = [] 2814 return args
2825class ScenarioSet_RiLSA1LoadCurvesBothTLS24(ScenarioSet): 2826 2827 def __init__(self, params): 2828 ScenarioSet.__init__(self, "RiLSA1LoadCurvesBothTLS24", merge( 2829 {}, 2830 params)) 2831 if "other-green" not in self.params: 2832 self.params["other-green"] = 31 2833 2834 def getNumRuns(self): 2835 return 3 * 3 * 3 * 3 2836 """ 2837 Yields returning a built scenario and its description as key/value pairs 2838 """ 2839 2840 def iterateScenarios(self): 2841 # desc = {"name": "RiLSA1LoadCurvesBothTLS24"} 2842 RWScurves = getRWScurves() 2843 for iWE, cWE in enumerate(RWScurves): 2844 for iNS, cNS in enumerate(RWScurves): 2845 for iEW, cEW in enumerate(RWScurves): 2846 for iSN, cSN in enumerate(RWScurves): 2847 # s, desc, sID 2848 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN) 2849 2850 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 2851 cWE = RWScurves[iWE] 2852 cNS = RWScurves[iNS] 2853 cEW = RWScurves[iEW] 2854 cSN = RWScurves[iSN] 2855 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 2856 if uID is None: 2857 sID = "RiLSA1LoadCurvesBothTLS24(%s-%s-%s-%s)" % ( 2858 iWE, iNS, iEW, iSN) 2859 else: 2860 sID = "RiLSA1LoadCurvesBothTLS24(%s)" % (uID) 2861 s = getScenario( 2862 "RiLSA1BothTLS", "RiLSA1LoadCurvesBothTLS24", self.params) 2863 s.demandName = s.sandboxPath("routes_%s.rou.xml" % sID) 2864 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 2865 nStreams = [] 2866 for stream in s.demand.streams: 2867 if stream._departEdgeModel.startswith("nm"): 2868 nStreams.extend( 2869 extrapolateDemand(stream, 3600, cNS, 7).streams) 2870 elif stream._departEdgeModel.startswith("em"): 2871 nStreams.extend( 2872 extrapolateDemand(stream, 3600, cEW, 7).streams) 2873 elif stream._departEdgeModel.startswith("sm"): 2874 nStreams.extend( 2875 extrapolateDemand(stream, 3600, cSN, 7).streams) 2876 elif stream._departEdgeModel.startswith("wm"): 2877 nStreams.extend( 2878 extrapolateDemand(stream, 3600, cWE, 7).streams) 2879 else: 2880 print(stream._departEdgeModel) 2881 raise RuntimeError("Hmmm, unknown stream??") 2882 s.demand.streams = nStreams 2883 end = 86400 2884 sampleFactor = None 2885 if "sample-factor" in self.params: 2886 sampleFactor = self.params["sample-factor"] 2887 print('%s %s %s' % (s.netName, s.demandName, sampleFactor)) 2888 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 2889 desc = {"scenario": "RiLSA1LoadCurvesBothTLS24", "iWE": str( 2890 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 2891 return s, desc, sID 2892 2893 def getRunsMatrix(self): 2894 ret = [] 2895 ranges = [[], []] 2896 RWScurves = getRWScurves() 2897 i = 0 2898 for iWE, cWE in enumerate(RWScurves): 2899 for iNS, cNS in enumerate(RWScurves): 2900 ret.append([]) 2901 ranges[0].append(i) 2902 i = i + 1 2903 j = 0 2904 for iEW, cEW in enumerate(RWScurves): 2905 for iSN, cSN in enumerate(RWScurves): 2906 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": str( 2907 iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurvesBothTLS24"}) 2908 ranges[-1].append(j) 2909 j = j + 1 2910 return (ret, ranges) 2911 2912 def getAverageDuration(self): 2913 return -1 # !!! 2914 2915 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2916 # adapt tls to current settings 2917 scenario.addAdditionalFile( 2918 scenario.sandboxPath("tls_adapted_%s" % sID)) 2919 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2920 fdo.write("<additional>\n") 2921 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2922 for tlsID in net._id2tls: 2923 tls = net._id2tls[tlsID] 2924 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2925 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 2926 for prog in tls._programs: 2927 i1 = i2 = 0 2928 for i, p in enumerate(tls._programs[prog]._phases): 2929 if p[1] == 40: 2930 i1 = i 2931 elif p[1] == 12: 2932 i2 = i 2933 for t in greens: 2934 tls._programs[prog]._type = tls_algorithm 2935 tls._programs[prog]._id = "adapted" + str(t) 2936 self.addTLSParameterFromFile( 2937 tls._programs[prog], options.tls_params) 2938 tls._programs[prog]._phases[i1][1] = greens[t][1] 2939 tls._programs[prog]._phases[i2][1] = greens[t][0] 2940 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2941 fdo.write( 2942 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 2943 for t in times: 2944 fdo.write( 2945 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 2946 fdo.write("\t</WAUT>\n") 2947 fdo.write( 2948 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 2949 fdo.write("</additional>\n") 2950 fdo.close() 2951 args = [] 2952 return args 2953 2954 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 2955 # adapt tls to current settings 2956 scenario.addAdditionalFile( 2957 scenario.sandboxPath("tls_adapted_%s" % sID)) 2958 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2959 fdo.write("<additional>\n") 2960 net = sumolib.net.readNet( 2961 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 2962 for tlsID in net._id2tls: 2963 tls = net._id2tls[tlsID] 2964 if tlsID == "0": 2965 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2966 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 2967 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 2968 greens = split_by_proportions(72, (ns, we), (10, 10)) 2969 for prog in tls._programs: 2970 i1 = i2 = 0 2971 for i, p in enumerate(tls._programs[prog]._phases): 2972 if p[1] == 40: 2973 i1 = i 2974 elif p[1] == 12: 2975 i2 = i 2976 tls._programs[prog]._type = tls_algorithm 2977 self.addTLSParameterFromFile( 2978 tls._programs[prog], options.tls_params) 2979 tls._programs[prog]._phases[i1][1] = greens[1] 2980 tls._programs[prog]._phases[i2][1] = greens[0] 2981 tls._programs[prog]._id = "adapted" 2982 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2983 else: 2984 if tlsID[0] == 'e' or tlsID[0] == 'w': 2985 tls._programs[prog]._phases[0][ 2986 1] = self.params["other-green"] 2987 else: 2988 tls._programs[prog]._phases[1][ 2989 1] = self.params["other-green"] 2990 tls._programs[prog]._id = "adapted" 2991 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2992 fdo.write("</additional>\n") 2993 fdo.close() 2994 args = [] 2995 return args 2996 2997 def getXLabel(self): 2998 return "!!!RWS type" 2999 3000 def getYLabel(self): 3001 return "!!!RWS type"
def
iterateScenarios(self):
2840 def iterateScenarios(self): 2841 # desc = {"name": "RiLSA1LoadCurvesBothTLS24"} 2842 RWScurves = getRWScurves() 2843 for iWE, cWE in enumerate(RWScurves): 2844 for iNS, cNS in enumerate(RWScurves): 2845 for iEW, cEW in enumerate(RWScurves): 2846 for iSN, cSN in enumerate(RWScurves): 2847 # s, desc, sID 2848 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN)
def
getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None):
2850 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 2851 cWE = RWScurves[iWE] 2852 cNS = RWScurves[iNS] 2853 cEW = RWScurves[iEW] 2854 cSN = RWScurves[iSN] 2855 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 2856 if uID is None: 2857 sID = "RiLSA1LoadCurvesBothTLS24(%s-%s-%s-%s)" % ( 2858 iWE, iNS, iEW, iSN) 2859 else: 2860 sID = "RiLSA1LoadCurvesBothTLS24(%s)" % (uID) 2861 s = getScenario( 2862 "RiLSA1BothTLS", "RiLSA1LoadCurvesBothTLS24", self.params) 2863 s.demandName = s.sandboxPath("routes_%s.rou.xml" % sID) 2864 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 2865 nStreams = [] 2866 for stream in s.demand.streams: 2867 if stream._departEdgeModel.startswith("nm"): 2868 nStreams.extend( 2869 extrapolateDemand(stream, 3600, cNS, 7).streams) 2870 elif stream._departEdgeModel.startswith("em"): 2871 nStreams.extend( 2872 extrapolateDemand(stream, 3600, cEW, 7).streams) 2873 elif stream._departEdgeModel.startswith("sm"): 2874 nStreams.extend( 2875 extrapolateDemand(stream, 3600, cSN, 7).streams) 2876 elif stream._departEdgeModel.startswith("wm"): 2877 nStreams.extend( 2878 extrapolateDemand(stream, 3600, cWE, 7).streams) 2879 else: 2880 print(stream._departEdgeModel) 2881 raise RuntimeError("Hmmm, unknown stream??") 2882 s.demand.streams = nStreams 2883 end = 86400 2884 sampleFactor = None 2885 if "sample-factor" in self.params: 2886 sampleFactor = self.params["sample-factor"] 2887 print('%s %s %s' % (s.netName, s.demandName, sampleFactor)) 2888 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 2889 desc = {"scenario": "RiLSA1LoadCurvesBothTLS24", "iWE": str( 2890 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 2891 return s, desc, sID
def
getRunsMatrix(self):
2893 def getRunsMatrix(self): 2894 ret = [] 2895 ranges = [[], []] 2896 RWScurves = getRWScurves() 2897 i = 0 2898 for iWE, cWE in enumerate(RWScurves): 2899 for iNS, cNS in enumerate(RWScurves): 2900 ret.append([]) 2901 ranges[0].append(i) 2902 i = i + 1 2903 j = 0 2904 for iEW, cEW in enumerate(RWScurves): 2905 for iSN, cSN in enumerate(RWScurves): 2906 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": str( 2907 iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurvesBothTLS24"}) 2908 ranges[-1].append(j) 2909 j = j + 1 2910 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
2915 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 2916 # adapt tls to current settings 2917 scenario.addAdditionalFile( 2918 scenario.sandboxPath("tls_adapted_%s" % sID)) 2919 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2920 fdo.write("<additional>\n") 2921 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 2922 for tlsID in net._id2tls: 2923 tls = net._id2tls[tlsID] 2924 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2925 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 2926 for prog in tls._programs: 2927 i1 = i2 = 0 2928 for i, p in enumerate(tls._programs[prog]._phases): 2929 if p[1] == 40: 2930 i1 = i 2931 elif p[1] == 12: 2932 i2 = i 2933 for t in greens: 2934 tls._programs[prog]._type = tls_algorithm 2935 tls._programs[prog]._id = "adapted" + str(t) 2936 self.addTLSParameterFromFile( 2937 tls._programs[prog], options.tls_params) 2938 tls._programs[prog]._phases[i1][1] = greens[t][1] 2939 tls._programs[prog]._phases[i2][1] = greens[t][0] 2940 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2941 fdo.write( 2942 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 2943 for t in times: 2944 fdo.write( 2945 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 2946 fdo.write("\t</WAUT>\n") 2947 fdo.write( 2948 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 2949 fdo.write("</additional>\n") 2950 fdo.close() 2951 args = [] 2952 return args
def
adapt2TLS2(self, sID, scenario, options, tls_algorithm):
2954 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 2955 # adapt tls to current settings 2956 scenario.addAdditionalFile( 2957 scenario.sandboxPath("tls_adapted_%s" % sID)) 2958 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 2959 fdo.write("<additional>\n") 2960 net = sumolib.net.readNet( 2961 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 2962 for tlsID in net._id2tls: 2963 tls = net._id2tls[tlsID] 2964 if tlsID == "0": 2965 (streamsNS, streamsWE) = scenario.getOppositeFlows() 2966 ns = streamsNS[0] / (streamsNS[0] + streamsWE[0]) 2967 we = streamsWE[0] / (streamsNS[0] + streamsWE[0]) 2968 greens = split_by_proportions(72, (ns, we), (10, 10)) 2969 for prog in tls._programs: 2970 i1 = i2 = 0 2971 for i, p in enumerate(tls._programs[prog]._phases): 2972 if p[1] == 40: 2973 i1 = i 2974 elif p[1] == 12: 2975 i2 = i 2976 tls._programs[prog]._type = tls_algorithm 2977 self.addTLSParameterFromFile( 2978 tls._programs[prog], options.tls_params) 2979 tls._programs[prog]._phases[i1][1] = greens[1] 2980 tls._programs[prog]._phases[i2][1] = greens[0] 2981 tls._programs[prog]._id = "adapted" 2982 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2983 else: 2984 if tlsID[0] == 'e' or tlsID[0] == 'w': 2985 tls._programs[prog]._phases[0][ 2986 1] = self.params["other-green"] 2987 else: 2988 tls._programs[prog]._phases[1][ 2989 1] = self.params["other-green"] 2990 tls._programs[prog]._id = "adapted" 2991 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 2992 fdo.write("</additional>\n") 2993 fdo.close() 2994 args = [] 2995 return args
3006class ScenarioSet_BasicRiLSANet(ScenarioSet): 3007 3008 def __init__(self, params): 3009 ScenarioSet.__init__(self, "BasicRiLSANet", merge( 3010 {}, 3011 params)) 3012 if "other-green" not in self.params: 3013 self.params["other-green"] = 31 3014 3015 def getNumRuns(self): 3016 return 3 * 3 * 3 * 3 3017 """ 3018 Yields returning a built scenario and its description as key/value pairs 3019 """ 3020 3021 def iterateScenarios(self): 3022 # desc = {"name": "BasicRiLSANet"} 3023 RWScurves = getRWScurves() 3024 for iWE, cWE in enumerate(RWScurves): 3025 for iNS, cNS in enumerate(RWScurves): 3026 for iEW, cEW in enumerate(RWScurves): 3027 for iSN, cSN in enumerate(RWScurves): 3028 # s, desc, sID 3029 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN) 3030 3031 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 3032 cWE = RWScurves[iWE] 3033 cNS = RWScurves[iNS] 3034 cEW = RWScurves[iEW] 3035 cSN = RWScurves[iSN] 3036 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 3037 if uID is None: 3038 sID = "BasicRiLSANet(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 3039 else: 3040 sID = "BasicRiLSANet(%s)" % (uID) 3041 s = getScenario("BasicRiLSANet", "BasicRiLSANet", self.params) 3042 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 3043 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 3044 nStreams = [] 3045 for stream in s.demand.streams: 3046 if stream._departEdgeModel.find("/4_to") >= 0: 3047 nStreams.extend( 3048 extrapolateDemand(stream, 3600, cNS, 7).streams) 3049 elif stream._departEdgeModel.startswith("4/"): 3050 nStreams.extend( 3051 extrapolateDemand(stream, 3600, cEW, 7).streams) 3052 elif stream._departEdgeModel.find("/0_to") >= 0: 3053 nStreams.extend( 3054 extrapolateDemand(stream, 3600, cSN, 7).streams) 3055 elif stream._departEdgeModel.startswith("0/"): 3056 nStreams.extend( 3057 extrapolateDemand(stream, 3600, cWE, 7).streams) 3058 else: 3059 print(stream._departEdgeModel) 3060 raise RuntimeError("Hmmm, unknown stream??") 3061 s.demand.streams = nStreams 3062 end = 86400 3063 s.demand.build(0, end, s.netName, s.demandName, None) 3064 desc = {"scenario": "BasicRiLSANet", "iWE": str( 3065 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 3066 return s, desc, sID 3067 3068 def getRunsMatrix(self): 3069 ret = [] 3070 ranges = [[], []] 3071 RWScurves = getRWScurves() 3072 i = 0 3073 for iWE, cWE in enumerate(RWScurves): 3074 for iNS, cNS in enumerate(RWScurves): 3075 ret.append([]) 3076 ranges[0].append(i) 3077 i = i + 1 3078 j = 0 3079 for iEW, cEW in enumerate(RWScurves): 3080 for iSN, cSN in enumerate(RWScurves): 3081 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": 3082 str(iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurves"}) 3083 ranges[-1].append(j) 3084 j = j + 1 3085 return (ret, ranges) 3086 3087 def getAverageDuration(self): 3088 return -1 # !!! 3089 3090 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 3091 # adapt tls to current settings 3092 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 3093 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 3094 fdo.write("<additional>\n") 3095 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 3096 for tlsID in net._id2tls: 3097 tls = net._id2tls[tlsID] 3098 (streamsNS, streamsWE) = scenario.getOppositeFlows() 3099 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 3100 for prog in tls._programs: 3101 i1 = i2 = 0 3102 for i, p in enumerate(tls._programs[prog]._phases): 3103 if p[1] == 40: 3104 i1 = i 3105 elif p[1] == 12: 3106 i2 = i 3107 for t in greens: 3108 tls._programs[prog]._type = tls_algorithm 3109 tls._programs[prog]._id = "adapted" + str(t) 3110 self.addTLSParameterFromFile( 3111 tls._programs[prog], options.tls_params) 3112 tls._programs[prog]._phases[i1][1] = greens[t][1] 3113 tls._programs[prog]._phases[i2][1] = greens[t][0] 3114 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3115 fdo.write( 3116 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 3117 for t in times: 3118 fdo.write( 3119 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 3120 fdo.write("\t</WAUT>\n") 3121 fdo.write( 3122 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 3123 fdo.write("</additional>\n") 3124 fdo.close() 3125 args = [] 3126 return args 3127 3128 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 3129 # adapt tls to current settings 3130 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 3131 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 3132 fdo.write("<additional>\n") 3133 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 3134 for tlsID in net._id2tls: 3135 tls = net._id2tls[tlsID] 3136 """ 3137 (streamsNS, streamsWE) = scenario.getOppositeFlows2() 3138 ns = streamsNS[0] / (streamsNS[0]+streamsWE[0]) 3139 we = streamsWE[0] / (streamsNS[0]+streamsWE[0]) 3140 greens = split_by_proportions(72, (ns, we), (10, 10)) 3141 """ 3142 for prog in tls._programs: 3143 """ 3144 i1 = i2 = 0 3145 for i,p in enumerate(tls._programs[prog]._phases): 3146 if p[1]==40: 3147 i1 = i 3148 elif p[1]==12: 3149 i2 = i 3150 tls._programs[prog]._phases[i1][1] = greens[1] 3151 tls._programs[prog]._phases[i2][1] = greens[0] 3152 """ 3153 tls._programs[prog]._id = "adapted" 3154 tls._programs[prog]._type = tls_algorithm 3155 self.addTLSParameterFromFile( 3156 tls._programs[prog], options.tls_params) 3157 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3158 fdo.write("</additional>\n") 3159 fdo.close() 3160 args = [] 3161 return args 3162 3163 def getXLabel(self): 3164 return "!!!RWS type" 3165 3166 def getYLabel(self): 3167 return "!!!RWS type"
def
iterateScenarios(self):
3021 def iterateScenarios(self): 3022 # desc = {"name": "BasicRiLSANet"} 3023 RWScurves = getRWScurves() 3024 for iWE, cWE in enumerate(RWScurves): 3025 for iNS, cNS in enumerate(RWScurves): 3026 for iEW, cEW in enumerate(RWScurves): 3027 for iSN, cSN in enumerate(RWScurves): 3028 # s, desc, sID 3029 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN)
def
getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None):
3031 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 3032 cWE = RWScurves[iWE] 3033 cNS = RWScurves[iNS] 3034 cEW = RWScurves[iEW] 3035 cSN = RWScurves[iSN] 3036 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 3037 if uID is None: 3038 sID = "BasicRiLSANet(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 3039 else: 3040 sID = "BasicRiLSANet(%s)" % (uID) 3041 s = getScenario("BasicRiLSANet", "BasicRiLSANet", self.params) 3042 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 3043 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 3044 nStreams = [] 3045 for stream in s.demand.streams: 3046 if stream._departEdgeModel.find("/4_to") >= 0: 3047 nStreams.extend( 3048 extrapolateDemand(stream, 3600, cNS, 7).streams) 3049 elif stream._departEdgeModel.startswith("4/"): 3050 nStreams.extend( 3051 extrapolateDemand(stream, 3600, cEW, 7).streams) 3052 elif stream._departEdgeModel.find("/0_to") >= 0: 3053 nStreams.extend( 3054 extrapolateDemand(stream, 3600, cSN, 7).streams) 3055 elif stream._departEdgeModel.startswith("0/"): 3056 nStreams.extend( 3057 extrapolateDemand(stream, 3600, cWE, 7).streams) 3058 else: 3059 print(stream._departEdgeModel) 3060 raise RuntimeError("Hmmm, unknown stream??") 3061 s.demand.streams = nStreams 3062 end = 86400 3063 s.demand.build(0, end, s.netName, s.demandName, None) 3064 desc = {"scenario": "BasicRiLSANet", "iWE": str( 3065 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 3066 return s, desc, sID
def
getRunsMatrix(self):
3068 def getRunsMatrix(self): 3069 ret = [] 3070 ranges = [[], []] 3071 RWScurves = getRWScurves() 3072 i = 0 3073 for iWE, cWE in enumerate(RWScurves): 3074 for iNS, cNS in enumerate(RWScurves): 3075 ret.append([]) 3076 ranges[0].append(i) 3077 i = i + 1 3078 j = 0 3079 for iEW, cEW in enumerate(RWScurves): 3080 for iSN, cSN in enumerate(RWScurves): 3081 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": 3082 str(iEW), "iSN": str(iSN), "scenario": "RiLSA1LoadCurves"}) 3083 ranges[-1].append(j) 3084 j = j + 1 3085 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
3090 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 3091 # adapt tls to current settings 3092 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 3093 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 3094 fdo.write("<additional>\n") 3095 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 3096 for tlsID in net._id2tls: 3097 tls = net._id2tls[tlsID] 3098 (streamsNS, streamsWE) = scenario.getOppositeFlows() 3099 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 3100 for prog in tls._programs: 3101 i1 = i2 = 0 3102 for i, p in enumerate(tls._programs[prog]._phases): 3103 if p[1] == 40: 3104 i1 = i 3105 elif p[1] == 12: 3106 i2 = i 3107 for t in greens: 3108 tls._programs[prog]._type = tls_algorithm 3109 tls._programs[prog]._id = "adapted" + str(t) 3110 self.addTLSParameterFromFile( 3111 tls._programs[prog], options.tls_params) 3112 tls._programs[prog]._phases[i1][1] = greens[t][1] 3113 tls._programs[prog]._phases[i2][1] = greens[t][0] 3114 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3115 fdo.write( 3116 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 3117 for t in times: 3118 fdo.write( 3119 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 3120 fdo.write("\t</WAUT>\n") 3121 fdo.write( 3122 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 3123 fdo.write("</additional>\n") 3124 fdo.close() 3125 args = [] 3126 return args
def
adapt2TLS2(self, sID, scenario, options, tls_algorithm):
3128 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 3129 # adapt tls to current settings 3130 scenario.addAdditionalFile(scenario.fullPath("tls_adapted_%s" % sID)) 3131 fdo = open(scenario.fullPath("tls_adapted_%s.add.xml" % sID), "w") 3132 fdo.write("<additional>\n") 3133 net = sumolib.net.readNet(scenario.TLS_FILE, withPrograms=True) 3134 for tlsID in net._id2tls: 3135 tls = net._id2tls[tlsID] 3136 """ 3137 (streamsNS, streamsWE) = scenario.getOppositeFlows2() 3138 ns = streamsNS[0] / (streamsNS[0]+streamsWE[0]) 3139 we = streamsWE[0] / (streamsNS[0]+streamsWE[0]) 3140 greens = split_by_proportions(72, (ns, we), (10, 10)) 3141 """ 3142 for prog in tls._programs: 3143 """ 3144 i1 = i2 = 0 3145 for i,p in enumerate(tls._programs[prog]._phases): 3146 if p[1]==40: 3147 i1 = i 3148 elif p[1]==12: 3149 i2 = i 3150 tls._programs[prog]._phases[i1][1] = greens[1] 3151 tls._programs[prog]._phases[i2][1] = greens[0] 3152 """ 3153 tls._programs[prog]._id = "adapted" 3154 tls._programs[prog]._type = tls_algorithm 3155 self.addTLSParameterFromFile( 3156 tls._programs[prog], options.tls_params) 3157 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3158 fdo.write("</additional>\n") 3159 fdo.close() 3160 args = [] 3161 return args
3172class ScenarioSet_BasicRiLSANet2x2(ScenarioSet): 3173 3174 def __init__(self, params): 3175 ScenarioSet.__init__(self, "BasicRiLSANet2x2", merge( 3176 {}, 3177 params)) 3178 if "other-green" not in self.params: 3179 self.params["other-green"] = 31 3180 3181 def getNumRuns(self): 3182 return 3 * 3 * 3 * 3 3183 """ 3184 Yields returning a built scenario and its description as key/value pairs 3185 """ 3186 3187 def iterateScenarios(self): 3188 # desc = {"name": "BasicRiLSANet2x2"} 3189 RWScurves = getRWScurves() 3190 for iWE, cWE in enumerate(RWScurves): 3191 for iNS, cNS in enumerate(RWScurves): 3192 for iEW, cEW in enumerate(RWScurves): 3193 for iSN, cSN in enumerate(RWScurves): 3194 # s, desc, sID 3195 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN) 3196 3197 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 3198 cWE = RWScurves[iWE] 3199 cNS = RWScurves[iNS] 3200 cEW = RWScurves[iEW] 3201 cSN = RWScurves[iSN] 3202 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 3203 if uID is None: 3204 sID = "BasicRiLSANet(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 3205 else: 3206 sID = "BasicRiLSANet(%s)" % (uID) 3207 s = getScenario("BasicRiLSANet2x2", "BasicRiLSANet2x2", self.params) 3208 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 3209 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 3210 nStreams = [] 3211 for stream in s.demand.streams: 3212 if stream._departEdgeModel.find("/5_to") >= 0: 3213 nStreams.extend( 3214 extrapolateDemand(stream, 3600, cNS, 7).streams) 3215 elif stream._departEdgeModel.startswith("5/"): 3216 nStreams.extend( 3217 extrapolateDemand(stream, 3600, cEW, 7).streams) 3218 elif stream._departEdgeModel.find("/0_to") >= 0: 3219 nStreams.extend( 3220 extrapolateDemand(stream, 3600, cSN, 7).streams) 3221 elif stream._departEdgeModel.startswith("0/"): 3222 nStreams.extend( 3223 extrapolateDemand(stream, 3600, cWE, 7).streams) 3224 else: 3225 print(stream._departEdgeModel) 3226 raise RuntimeError("Hmmm, unknown stream??") 3227 s.demand.streams = nStreams 3228 end = 86400 3229 sampleFactor = None 3230 if "sample-factor" in self.params: 3231 sampleFactor = self.params["sample-factor"] 3232 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 3233 desc = {"scenario": "BasicRiLSANet2x2", "iWE": str( 3234 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 3235 return s, desc, sID 3236 3237 def getRunsMatrix(self): 3238 ret = [] 3239 ranges = [[], []] 3240 RWScurves = getRWScurves() 3241 i = 0 3242 for iWE, cWE in enumerate(RWScurves): 3243 for iNS, cNS in enumerate(RWScurves): 3244 ret.append([]) 3245 ranges[0].append(i) 3246 i = i + 1 3247 j = 0 3248 for iEW, cEW in enumerate(RWScurves): 3249 for iSN, cSN in enumerate(RWScurves): 3250 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": 3251 str(iEW), "iSN": str(iSN), "scenario": "BasicRiLSANet2x2"}) 3252 ranges[-1].append(j) 3253 j = j + 1 3254 return (ret, ranges) 3255 3256 def getAverageDuration(self): 3257 return -1 # !!! 3258 3259 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 3260 # adapt tls to current settings 3261 scenario.addAdditionalFile( 3262 scenario.sandboxPath("tls_adapted_%s" % sID)) 3263 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 3264 print("Hahah") 3265 fdo.write("<additional>\n") 3266 net = sumolib.net.readNet( 3267 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 3268 for tlsID in net._id2tls: 3269 tls = net._id2tls[tlsID] 3270 (streamsNS, streamsWE) = scenario.getOppositeFlows() 3271 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 3272 for prog in tls._programs: 3273 i1 = i2 = 0 3274 for i, p in enumerate(tls._programs[prog]._phases): 3275 if p[1] == 40: 3276 i1 = i 3277 elif p[1] == 12: 3278 i2 = i 3279 for t in greens: 3280 tls._programs[prog]._type = tls_algorithm 3281 tls._programs[prog]._id = "adapted" + str(t) 3282 self.addTLSParameterFromFile( 3283 tls._programs[prog], options.tls_params) 3284 tls._programs[prog]._phases[i1][1] = greens[t][1] 3285 tls._programs[prog]._phases[i2][1] = greens[t][0] 3286 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3287 fdo.write( 3288 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 3289 for t in times: 3290 fdo.write( 3291 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 3292 fdo.write("\t</WAUT>\n") 3293 fdo.write( 3294 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 3295 fdo.write("</additional>\n") 3296 fdo.close() 3297 args = [] 3298 return args 3299 3300 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 3301 # adapt tls to current settings 3302 scenario.addAdditionalFile( 3303 scenario.sandboxPath("tls_adapted_%s" % sID)) 3304 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 3305 fdo.write("<additional>\n") 3306 net = sumolib.net.readNet( 3307 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 3308 for tlsID in net._id2tls: 3309 tls = net._id2tls[tlsID] 3310 """ 3311 (streamsNS, streamsWE) = scenario.getOppositeFlows2() 3312 ns = streamsNS[0] / (streamsNS[0]+streamsWE[0]) 3313 we = streamsWE[0] / (streamsNS[0]+streamsWE[0]) 3314 greens = split_by_proportions(72, (ns, we), (10, 10)) 3315 """ 3316 for prog in tls._programs: 3317 """ 3318 i1 = i2 = 0 3319 for i,p in enumerate(tls._programs[prog]._phases): 3320 if p[1]==40: 3321 i1 = i 3322 elif p[1]==12: 3323 i2 = i 3324 tls._programs[prog]._phases[i1][1] = greens[1] 3325 tls._programs[prog]._phases[i2][1] = greens[0] 3326 """ 3327 tls._programs[prog]._id = "adapted" 3328 if tlsID in ["2/3", "3/3", "2/2", "3/2"]: 3329 tls._programs[prog]._type = tls_algorithm 3330 else: 3331 tls._programs[prog]._type = "actuated" 3332 self.addTLSParameterFromFile( 3333 tls._programs[prog], options.tls_params) 3334 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3335 fdo.write("</additional>\n") 3336 fdo.close() 3337 args = [] 3338 return args 3339 3340 def getXLabel(self): 3341 return "!!!RWS type" 3342 3343 def getYLabel(self): 3344 return "!!!RWS type"
def
iterateScenarios(self):
3187 def iterateScenarios(self): 3188 # desc = {"name": "BasicRiLSANet2x2"} 3189 RWScurves = getRWScurves() 3190 for iWE, cWE in enumerate(RWScurves): 3191 for iNS, cNS in enumerate(RWScurves): 3192 for iEW, cEW in enumerate(RWScurves): 3193 for iSN, cSN in enumerate(RWScurves): 3194 # s, desc, sID 3195 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN)
def
getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None):
3197 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 3198 cWE = RWScurves[iWE] 3199 cNS = RWScurves[iNS] 3200 cEW = RWScurves[iEW] 3201 cSN = RWScurves[iSN] 3202 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 3203 if uID is None: 3204 sID = "BasicRiLSANet(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 3205 else: 3206 sID = "BasicRiLSANet(%s)" % (uID) 3207 s = getScenario("BasicRiLSANet2x2", "BasicRiLSANet2x2", self.params) 3208 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 3209 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 3210 nStreams = [] 3211 for stream in s.demand.streams: 3212 if stream._departEdgeModel.find("/5_to") >= 0: 3213 nStreams.extend( 3214 extrapolateDemand(stream, 3600, cNS, 7).streams) 3215 elif stream._departEdgeModel.startswith("5/"): 3216 nStreams.extend( 3217 extrapolateDemand(stream, 3600, cEW, 7).streams) 3218 elif stream._departEdgeModel.find("/0_to") >= 0: 3219 nStreams.extend( 3220 extrapolateDemand(stream, 3600, cSN, 7).streams) 3221 elif stream._departEdgeModel.startswith("0/"): 3222 nStreams.extend( 3223 extrapolateDemand(stream, 3600, cWE, 7).streams) 3224 else: 3225 print(stream._departEdgeModel) 3226 raise RuntimeError("Hmmm, unknown stream??") 3227 s.demand.streams = nStreams 3228 end = 86400 3229 sampleFactor = None 3230 if "sample-factor" in self.params: 3231 sampleFactor = self.params["sample-factor"] 3232 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 3233 desc = {"scenario": "BasicRiLSANet2x2", "iWE": str( 3234 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 3235 return s, desc, sID
def
getRunsMatrix(self):
3237 def getRunsMatrix(self): 3238 ret = [] 3239 ranges = [[], []] 3240 RWScurves = getRWScurves() 3241 i = 0 3242 for iWE, cWE in enumerate(RWScurves): 3243 for iNS, cNS in enumerate(RWScurves): 3244 ret.append([]) 3245 ranges[0].append(i) 3246 i = i + 1 3247 j = 0 3248 for iEW, cEW in enumerate(RWScurves): 3249 for iSN, cSN in enumerate(RWScurves): 3250 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": 3251 str(iEW), "iSN": str(iSN), "scenario": "BasicRiLSANet2x2"}) 3252 ranges[-1].append(j) 3253 j = j + 1 3254 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
3259 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 3260 # adapt tls to current settings 3261 scenario.addAdditionalFile( 3262 scenario.sandboxPath("tls_adapted_%s" % sID)) 3263 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 3264 print("Hahah") 3265 fdo.write("<additional>\n") 3266 net = sumolib.net.readNet( 3267 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 3268 for tlsID in net._id2tls: 3269 tls = net._id2tls[tlsID] 3270 (streamsNS, streamsWE) = scenario.getOppositeFlows() 3271 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 3272 for prog in tls._programs: 3273 i1 = i2 = 0 3274 for i, p in enumerate(tls._programs[prog]._phases): 3275 if p[1] == 40: 3276 i1 = i 3277 elif p[1] == 12: 3278 i2 = i 3279 for t in greens: 3280 tls._programs[prog]._type = tls_algorithm 3281 tls._programs[prog]._id = "adapted" + str(t) 3282 self.addTLSParameterFromFile( 3283 tls._programs[prog], options.tls_params) 3284 tls._programs[prog]._phases[i1][1] = greens[t][1] 3285 tls._programs[prog]._phases[i2][1] = greens[t][0] 3286 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3287 fdo.write( 3288 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 3289 for t in times: 3290 fdo.write( 3291 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 3292 fdo.write("\t</WAUT>\n") 3293 fdo.write( 3294 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 3295 fdo.write("</additional>\n") 3296 fdo.close() 3297 args = [] 3298 return args
def
adapt2TLS2(self, sID, scenario, options, tls_algorithm):
3300 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 3301 # adapt tls to current settings 3302 scenario.addAdditionalFile( 3303 scenario.sandboxPath("tls_adapted_%s" % sID)) 3304 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 3305 fdo.write("<additional>\n") 3306 net = sumolib.net.readNet( 3307 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 3308 for tlsID in net._id2tls: 3309 tls = net._id2tls[tlsID] 3310 """ 3311 (streamsNS, streamsWE) = scenario.getOppositeFlows2() 3312 ns = streamsNS[0] / (streamsNS[0]+streamsWE[0]) 3313 we = streamsWE[0] / (streamsNS[0]+streamsWE[0]) 3314 greens = split_by_proportions(72, (ns, we), (10, 10)) 3315 """ 3316 for prog in tls._programs: 3317 """ 3318 i1 = i2 = 0 3319 for i,p in enumerate(tls._programs[prog]._phases): 3320 if p[1]==40: 3321 i1 = i 3322 elif p[1]==12: 3323 i2 = i 3324 tls._programs[prog]._phases[i1][1] = greens[1] 3325 tls._programs[prog]._phases[i2][1] = greens[0] 3326 """ 3327 tls._programs[prog]._id = "adapted" 3328 if tlsID in ["2/3", "3/3", "2/2", "3/2"]: 3329 tls._programs[prog]._type = tls_algorithm 3330 else: 3331 tls._programs[prog]._type = "actuated" 3332 self.addTLSParameterFromFile( 3333 tls._programs[prog], options.tls_params) 3334 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3335 fdo.write("</additional>\n") 3336 fdo.close() 3337 args = [] 3338 return args
3349class ScenarioSet_BasicRiLSACorridor3(ScenarioSet): 3350 3351 def __init__(self, params): 3352 ScenarioSet.__init__(self, "BasicRiLSACorridor3", merge( 3353 {}, 3354 params)) 3355 if "other-green" not in self.params: 3356 self.params["other-green"] = 31 3357 3358 def getNumRuns(self): 3359 return 3 * 3 * 3 * 3 3360 """ 3361 Yields returning a built scenario and its description as key/value pairs 3362 """ 3363 3364 def iterateScenarios(self): 3365 # desc = {"name": "BasicRiLSACorridor3"} 3366 RWScurves = getRWScurves() 3367 for iWE, cWE in enumerate(RWScurves): 3368 for iNS, cNS in enumerate(RWScurves): 3369 for iEW, cEW in enumerate(RWScurves): 3370 for iSN, cSN in enumerate(RWScurves): 3371 # s, desc, sID 3372 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN) 3373 3374 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 3375 cWE = RWScurves[iWE] 3376 cNS = RWScurves[iNS] 3377 cEW = RWScurves[iEW] 3378 cSN = RWScurves[iSN] 3379 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 3380 if uID is None: 3381 sID = "BasicRiLSACorridor3(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 3382 else: 3383 sID = "BasicRiLSACorridor3(%s)" % (uID) 3384 s = getScenario( 3385 "BasicRiLSACorridor3", "BasicRiLSACorridor3", self.params) 3386 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 3387 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 3388 nStreams = [] 3389 for stream in s.demand.streams: 3390 if stream._departEdgeModel.find("/4_to") >= 0: 3391 nStreams.extend( 3392 extrapolateDemand(stream, 3600, cNS, 7).streams) 3393 elif stream._departEdgeModel.startswith("6/"): 3394 nStreams.extend( 3395 extrapolateDemand(stream, 3600, cEW, 7).streams) 3396 elif stream._departEdgeModel.find("/0_to") >= 0: 3397 nStreams.extend( 3398 extrapolateDemand(stream, 3600, cSN, 7).streams) 3399 elif stream._departEdgeModel.startswith("0/"): 3400 nStreams.extend( 3401 extrapolateDemand(stream, 3600, cWE, 7).streams) 3402 else: 3403 print(stream._departEdgeModel) 3404 raise RuntimeError("Hmmm, unknown stream??") 3405 s.demand.streams = nStreams 3406 end = 86400 3407 sampleFactor = None 3408 if "sample-factor" in self.params: 3409 sampleFactor = self.params["sample-factor"] 3410 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 3411 desc = {"scenario": "BasicRiLSACorridor3", "iWE": str( 3412 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 3413 return s, desc, sID 3414 3415 def getRunsMatrix(self): 3416 ret = [] 3417 ranges = [[], []] 3418 RWScurves = getRWScurves() 3419 i = 0 3420 for iWE, cWE in enumerate(RWScurves): 3421 for iNS, cNS in enumerate(RWScurves): 3422 ret.append([]) 3423 ranges[0].append(i) 3424 i = i + 1 3425 j = 0 3426 for iEW, cEW in enumerate(RWScurves): 3427 for iSN, cSN in enumerate(RWScurves): 3428 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": str( 3429 iEW), "iSN": str(iSN), "scenario": "BasicRiLSACorridor3"}) 3430 ranges[-1].append(j) 3431 j = j + 1 3432 return (ret, ranges) 3433 3434 def getAverageDuration(self): 3435 return -1 # !!! 3436 3437 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 3438 # adapt tls to current settings 3439 scenario.addAdditionalFile( 3440 scenario.sandboxPath("tls_adapted_%s" % sID)) 3441 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 3442 print("Hahah") 3443 fdo.write("<additional>\n") 3444 net = sumolib.net.readNet( 3445 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 3446 for tlsID in net._id2tls: 3447 tls = net._id2tls[tlsID] 3448 (streamsNS, streamsWE) = scenario.getOppositeFlows() 3449 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 3450 for prog in tls._programs: 3451 i1 = i2 = 0 3452 for i, p in enumerate(tls._programs[prog]._phases): 3453 if p[1] == 40: 3454 i1 = i 3455 elif p[1] == 12: 3456 i2 = i 3457 for t in greens: 3458 tls._programs[prog]._type = tls_algorithm 3459 tls._programs[prog]._id = "adapted" + str(t) 3460 self.addTLSParameterFromFile( 3461 tls._programs[prog], options.tls_params) 3462 tls._programs[prog]._phases[i1][1] = greens[t][1] 3463 tls._programs[prog]._phases[i2][1] = greens[t][0] 3464 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3465 fdo.write( 3466 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 3467 for t in times: 3468 fdo.write( 3469 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 3470 fdo.write("\t</WAUT>\n") 3471 fdo.write( 3472 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 3473 fdo.write("</additional>\n") 3474 fdo.close() 3475 args = [] 3476 return args 3477 3478 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 3479 # adapt tls to current settings 3480 scenario.addAdditionalFile( 3481 scenario.sandboxPath("tls_adapted_%s" % sID)) 3482 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 3483 fdo.write("<additional>\n") 3484 net = sumolib.net.readNet( 3485 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 3486 for tlsID in net._id2tls: 3487 tls = net._id2tls[tlsID] 3488 """ 3489 (streamsNS, streamsWE) = scenario.getOppositeFlows2() 3490 ns = streamsNS[0] / (streamsNS[0]+streamsWE[0]) 3491 we = streamsWE[0] / (streamsNS[0]+streamsWE[0]) 3492 greens = split_by_proportions(72, (ns, we), (10, 10)) 3493 """ 3494 for prog in tls._programs: 3495 """ 3496 i1 = i2 = 0 3497 for i,p in enumerate(tls._programs[prog]._phases): 3498 if p[1]==40: 3499 i1 = i 3500 elif p[1]==12: 3501 i2 = i 3502 tls._programs[prog]._phases[i1][1] = greens[1] 3503 tls._programs[prog]._phases[i2][1] = greens[0] 3504 """ 3505 tls._programs[prog]._id = "adapted" 3506 if tlsID in ["2/2", "3/2", "4/2"]: 3507 tls._programs[prog]._type = tls_algorithm 3508 else: 3509 tls._programs[prog]._type = "actuated" 3510 self.addTLSParameterFromFile( 3511 tls._programs[prog], options.tls_params) 3512 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3513 fdo.write("</additional>\n") 3514 fdo.close() 3515 args = [] 3516 return args 3517 3518 def getXLabel(self): 3519 return "!!!RWS type" 3520 3521 def getYLabel(self): 3522 return "!!!RWS type"
def
iterateScenarios(self):
3364 def iterateScenarios(self): 3365 # desc = {"name": "BasicRiLSACorridor3"} 3366 RWScurves = getRWScurves() 3367 for iWE, cWE in enumerate(RWScurves): 3368 for iNS, cNS in enumerate(RWScurves): 3369 for iEW, cEW in enumerate(RWScurves): 3370 for iSN, cSN in enumerate(RWScurves): 3371 # s, desc, sID 3372 yield self.getSingle(RWScurves, iWE, iNS, iEW, iSN)
def
getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None):
3374 def getSingle(self, RWScurves, iWE, iNS, iEW, iSN, uID=None): 3375 cWE = RWScurves[iWE] 3376 cNS = RWScurves[iNS] 3377 cEW = RWScurves[iEW] 3378 cSN = RWScurves[iSN] 3379 print("Computing for %s %s %s %s" % (iWE, iNS, iEW, iSN)) 3380 if uID is None: 3381 sID = "BasicRiLSACorridor3(%s-%s-%s-%s)" % (iWE, iNS, iEW, iSN) 3382 else: 3383 sID = "BasicRiLSACorridor3(%s)" % (uID) 3384 s = getScenario( 3385 "BasicRiLSACorridor3", "BasicRiLSACorridor3", self.params) 3386 s.demandName = s.fullPath("routes_%s.rou.xml" % sID) 3387 if True: # fileNeedsRebuild(s.demandName, "duarouter"): 3388 nStreams = [] 3389 for stream in s.demand.streams: 3390 if stream._departEdgeModel.find("/4_to") >= 0: 3391 nStreams.extend( 3392 extrapolateDemand(stream, 3600, cNS, 7).streams) 3393 elif stream._departEdgeModel.startswith("6/"): 3394 nStreams.extend( 3395 extrapolateDemand(stream, 3600, cEW, 7).streams) 3396 elif stream._departEdgeModel.find("/0_to") >= 0: 3397 nStreams.extend( 3398 extrapolateDemand(stream, 3600, cSN, 7).streams) 3399 elif stream._departEdgeModel.startswith("0/"): 3400 nStreams.extend( 3401 extrapolateDemand(stream, 3600, cWE, 7).streams) 3402 else: 3403 print(stream._departEdgeModel) 3404 raise RuntimeError("Hmmm, unknown stream??") 3405 s.demand.streams = nStreams 3406 end = 86400 3407 sampleFactor = None 3408 if "sample-factor" in self.params: 3409 sampleFactor = self.params["sample-factor"] 3410 s.demand.build(0, end, s.netName, s.demandName, sampleFactor) 3411 desc = {"scenario": "BasicRiLSACorridor3", "iWE": str( 3412 iWE), "iNS": str(iNS), "iEW": str(iEW), "iSN": str(iSN)} 3413 return s, desc, sID
def
getRunsMatrix(self):
3415 def getRunsMatrix(self): 3416 ret = [] 3417 ranges = [[], []] 3418 RWScurves = getRWScurves() 3419 i = 0 3420 for iWE, cWE in enumerate(RWScurves): 3421 for iNS, cNS in enumerate(RWScurves): 3422 ret.append([]) 3423 ranges[0].append(i) 3424 i = i + 1 3425 j = 0 3426 for iEW, cEW in enumerate(RWScurves): 3427 for iSN, cSN in enumerate(RWScurves): 3428 ret[-1].append({"iWE": str(iWE), "iNS": str(iNS), "iEW": str( 3429 iEW), "iSN": str(iSN), "scenario": "BasicRiLSACorridor3"}) 3430 ranges[-1].append(j) 3431 j = j + 1 3432 return (ret, ranges)
def
adapt2TLS(self, sID, scenario, options, tls_algorithm):
3437 def adapt2TLS(self, sID, scenario, options, tls_algorithm): 3438 # adapt tls to current settings 3439 scenario.addAdditionalFile( 3440 scenario.sandboxPath("tls_adapted_%s" % sID)) 3441 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 3442 print("Hahah") 3443 fdo.write("<additional>\n") 3444 net = sumolib.net.readNet( 3445 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 3446 for tlsID in net._id2tls: 3447 tls = net._id2tls[tlsID] 3448 (streamsNS, streamsWE) = scenario.getOppositeFlows() 3449 (greens, times) = scenario.buildWAUT(streamsNS, streamsWE) 3450 for prog in tls._programs: 3451 i1 = i2 = 0 3452 for i, p in enumerate(tls._programs[prog]._phases): 3453 if p[1] == 40: 3454 i1 = i 3455 elif p[1] == 12: 3456 i2 = i 3457 for t in greens: 3458 tls._programs[prog]._type = tls_algorithm 3459 tls._programs[prog]._id = "adapted" + str(t) 3460 self.addTLSParameterFromFile( 3461 tls._programs[prog], options.tls_params) 3462 tls._programs[prog]._phases[i1][1] = greens[t][1] 3463 tls._programs[prog]._phases[i2][1] = greens[t][0] 3464 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3465 fdo.write( 3466 '\n\t<WAUT startProg="adapted1" refTime="0" id="WAUT_%s">\n' % tlsID) 3467 for t in times: 3468 fdo.write( 3469 '\t\t<wautSwitch to="adapted%s" time="%s"/>\n' % (t[1], t[0] * 3600)) 3470 fdo.write("\t</WAUT>\n") 3471 fdo.write( 3472 '\n\t<wautJunction junctionID="%s" wautID="WAUT_%s"/>\n' % (tlsID, tlsID)) 3473 fdo.write("</additional>\n") 3474 fdo.close() 3475 args = [] 3476 return args
def
adapt2TLS2(self, sID, scenario, options, tls_algorithm):
3478 def adapt2TLS2(self, sID, scenario, options, tls_algorithm): 3479 # adapt tls to current settings 3480 scenario.addAdditionalFile( 3481 scenario.sandboxPath("tls_adapted_%s" % sID)) 3482 fdo = open(scenario.sandboxPath("tls_adapted_%s.add.xml" % sID), "w") 3483 fdo.write("<additional>\n") 3484 net = sumolib.net.readNet( 3485 scenario.fullPath(scenario.TLS_FILE), withPrograms=True) 3486 for tlsID in net._id2tls: 3487 tls = net._id2tls[tlsID] 3488 """ 3489 (streamsNS, streamsWE) = scenario.getOppositeFlows2() 3490 ns = streamsNS[0] / (streamsNS[0]+streamsWE[0]) 3491 we = streamsWE[0] / (streamsNS[0]+streamsWE[0]) 3492 greens = split_by_proportions(72, (ns, we), (10, 10)) 3493 """ 3494 for prog in tls._programs: 3495 """ 3496 i1 = i2 = 0 3497 for i,p in enumerate(tls._programs[prog]._phases): 3498 if p[1]==40: 3499 i1 = i 3500 elif p[1]==12: 3501 i2 = i 3502 tls._programs[prog]._phases[i1][1] = greens[1] 3503 tls._programs[prog]._phases[i2][1] = greens[0] 3504 """ 3505 tls._programs[prog]._id = "adapted" 3506 if tlsID in ["2/2", "3/2", "4/2"]: 3507 tls._programs[prog]._type = tls_algorithm 3508 else: 3509 tls._programs[prog]._type = "actuated" 3510 self.addTLSParameterFromFile( 3511 tls._programs[prog], options.tls_params) 3512 fdo.write(tls._programs[prog].toXML(tlsID) + "\n") 3513 fdo.write("</additional>\n") 3514 fdo.close() 3515 args = [] 3516 return args
def
getScenarioSet(name, params):
3527def getScenarioSet(name, params): 3528 if name == "iterateFlowsNA": 3529 return ScenarioSet_IterateFlowsNA(params) 3530 if name == "iterateFlowsA": 3531 return ScenarioSet_IterateFlowsA(params) 3532 if name == "RiLSA1LoadCurves": 3533 return ScenarioSet_RiLSA1LoadCurves(params) 3534 if name == "RiLSA1LoadCurvesSampled": 3535 return ScenarioSet_RiLSA1LoadCurvesSampled(params) 3536 if name == "RiLSA1LoadCurvesOutTLS": 3537 return ScenarioSet_RiLSA1LoadCurvesOutTLS(params) 3538 if name == "RiLSA1LoadCurvesBothTLS": 3539 return ScenarioSet_RiLSA1LoadCurvesBothTLS(params) 3540 if name == "RiLSA1LoadCurvesOutTLS24": 3541 return ScenarioSet_RiLSA1LoadCurvesOutTLS24(params) 3542 if name == "RiLSA1LoadCurvesBothTLS24": 3543 return ScenarioSet_RiLSA1LoadCurvesBothTLS24(params) 3544 if name == "RiLSA1Outflow": 3545 return ScenarioSet_RiLSA1Outflow(params) 3546 if name == "RiLSA1PedFlow": 3547 return ScenarioSet_RiLSA1PedFlow(params) 3548 if name == "RiLSA1PTIteration": 3549 return ScenarioSet_RiLSA1PTIteration(params) 3550 3551 if name == "SinSinDemand": 3552 return ScenarioSet_SinSinDemand(params) 3553 if name == "OneSinDemand": 3554 return ScenarioSet_OneSinDemand(params) 3555 if name == "DemandStep": 3556 return ScenarioSet_DemandStep(params) 3557 if name == "TurnIteration": 3558 return ScenarioSet_TurnIteration(params) 3559 if name == "CorrFlowsDistancesA": 3560 return ScenarioSet_CorrFlowsDistancesA(params) 3561# if name == "NetFlowsA": # seems not to be implemented 3562# return ScenarioSet_NetFlowsA(params) 3563 if name == "NetFlowsDistancesA": 3564 return ScenarioSet_NetFlowsDistancesA(params) 3565 if name == "RealWorld": 3566 return ScenarioSet_RealWorld(params) 3567 if name == "BasicRiLSANet": 3568 return ScenarioSet_BasicRiLSANet(params) 3569 if name == "BasicRiLSANet2x2": 3570 return ScenarioSet_BasicRiLSANet2x2(params) 3571 if name == "BasicRiLSANet2x2_24": 3572 return ScenarioSet_BasicRiLSANet2x2(params) 3573 if name == "BasicRiLSACorridor3": 3574 return ScenarioSet_BasicRiLSACorridor3(params) 3575 if name == "BasicRiLSACorridor3_24": 3576 return ScenarioSet_BasicRiLSACorridor3(params) 3577 3578 raise RuntimeError("unknown scenario '%s'" % name)
def
getAllScenarioSets():