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():
57def getRWScurves():
58    RWScurves = [[], [], []]
59    for line in RWS:
60        RWScurves[0].append(line[1])
61        RWScurves[1].append(line[2])
62        RWScurves[2].append(line[3])
63    return RWScurves
def merge(defaultParams, setParams):
66def merge(defaultParams, setParams):
67    ret = {}
68    for p in defaultParams:
69        ret[p] = defaultParams[p]
70        if p in setParams:
71            ret[p] = setParams[p]
72    return ret
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
ScenarioSet(name, params)
77    def __init__(self, name, params):
78        self.name = name
79        self.params = params
name
params
def getNumRuns(self):
81    def getNumRuns(self):
82        raise NotImplementedError("virtual ScenarioSet/getNumRuns")
def getAverageDuration(self):
84    def getAverageDuration(self):
85        raise NotImplementedError("virtual ScenarioSet/getAverageDuration")
def iterate(self):
87    def iterate(self):
88        raise NotImplementedError("virtual ScenarioSet/iterate")
def getRunsMatrix(self):
90    def getRunsMatrix(self):
91        raise NotImplementedError("virtual ScenarioSet/getRunsMatrix")
def getInt(self, name):
93    def getInt(self, name):
94        return int(self.params[name])
def getFloat(self, name):
96    def getFloat(self, name):
97        return float(self.params[name])
def addTLSParameterFromFile(self, tlsProg, paramFile):
 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()
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
def getAdditionalDivider(self):
162    def getAdditionalDivider(self):
163        return []
def halfX(self):
165    def halfX(self):
166        return True
def orientationX(self):
168    def orientationX(self):
169        return 0
def ticksSize(self):
171    def ticksSize(self):
172        return 16
def figsize(self):
174    def figsize(self):
175        return None
def adjust(self, fig):
177    def adjust(self, fig):
178        return
class ScenarioSet_IterateFlowsNA(ScenarioSet):
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]"
ScenarioSet_IterateFlowsNA(params)
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))
def getNumRuns(self):
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
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 getAverageDuration(self):
249    def getAverageDuration(self):
250        return -1  # !!!
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
def getXLabel(self):
273    def getXLabel(self):
274        return "horizontal demand [vehicles/h]"
def getYLabel(self):
276    def getYLabel(self):
277        return "vertical demand [vehicles/h]"
class ScenarioSet_IterateFlowsA(ScenarioSet):
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]"
ScenarioSet_IterateFlowsA(params)
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))
def getNumRuns(self):
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
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 getAverageDuration(self):
351    def getAverageDuration(self):
352        return -1  # !!!
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
def getXLabel(self):
382    def getXLabel(self):
383        return "horizontal demand [vehicles/h]"
def getYLabel(self):
385    def getYLabel(self):
386        return "vertical demand [vehicles/h]"
class ScenarioSet_RiLSA1LoadCurves(ScenarioSet):
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        ]
ScenarioSet_RiLSA1LoadCurves(params)
393    def __init__(self, params):
394        ScenarioSet.__init__(self, "RiLSA1LoadCurves", merge(
395            {},
396            params))
def getNumRuns(self):
398    def getNumRuns(self):
399        return 3 * 3 * 3 * 3
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 getAverageDuration(self):
478    def getAverageDuration(self):
479        return -1  # !!!
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
def getXLabel(self):
548    def getXLabel(self):
549        return "RWS type (west-east)/RWS type (north-south)"
def getYLabel(self):
551    def getYLabel(self):
552        return "RWS type (east-west)/RWS type (south-north)"
def halfX(self):
554    def halfX(self):
555        return False
def getAdditionalDivider(self):
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        ]
class ScenarioSet_RiLSA1LoadCurvesSampled(ScenarioSet):
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        ]
ScenarioSet_RiLSA1LoadCurvesSampled(params)
570    def __init__(self, params):
571        ScenarioSet.__init__(self, "RiLSA1LoadCurvesSampled", merge(
572            {},
573            params))
def getNumRuns(self):
575    def getNumRuns(self):
576        return 3 * 3 * 3 * 3
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 getAverageDuration(self):
649    def getAverageDuration(self):
650        return -1  # !!!
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
def getXLabel(self):
684    def getXLabel(self):
685        return "RWS type (west-east)/RWS type (north-south)"
def getYLabel(self):
687    def getYLabel(self):
688        return "RWS type (east-west)/RWS type (south-north)"
def halfX(self):
690    def halfX(self):
691        return False
def getAdditionalDivider(self):
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        ]
class ScenarioSet_BasicOutflow(ScenarioSet):
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
ScenarioSet_BasicOutflow(params)
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))
def getNumRuns(self):
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
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 getAverageDuration(self):
769    def getAverageDuration(self):
770        return -1  # !!!
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
def getXLabel(self):
800    def getXLabel(self):
801        return "horizontal demand [vehicles/h]"
def getYLabel(self):
803    def getYLabel(self):
804        return "vertical demand [vehicles/h]"
def getAdditionalDivider(self):
806    def getAdditionalDivider(self):
807        return []
def orientationX(self):
809    def orientationX(self):
810        return 90
def halfX(self):
812    def halfX(self):
813        return False
class ScenarioSet_RiLSA1Outflow(ScenarioSet_RiLSA1LoadCurvesSampled):
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
ScenarioSet_RiLSA1Outflow(params)
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))
def getNumRuns(self):
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
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 getAverageDuration(self):
896    def getAverageDuration(self):
897        return -1  # !!!
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
def getXLabel(self):
944    def getXLabel(self):
945        return "horizontal green time [s]"
def getYLabel(self):
947    def getYLabel(self):
948        return "vertical green time [s]"
def getAdditionalDivider(self):
950    def getAdditionalDivider(self):
951        return []
def halfX(self):
953    def halfX(self):
954        return False
class ScenarioSet_RiLSA1PedFlow(ScenarioSet_RiLSA1LoadCurvesSampled):
 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 []
ScenarioSet_RiLSA1PedFlow(params)
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))
def getNumRuns(self):
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
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 getAverageDuration(self):
1043    def getAverageDuration(self):
1044        return -1  # !!!
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
def getXLabel(self):
1081    def getXLabel(self):
1082        return "horizontal pedestrian flow [pedestrians/hour]"
def getYLabel(self):
1084    def getYLabel(self):
1085        return "vertical pedestrian flow [pedestrians/hour]"
def getAdditionalDivider(self):
1087    def getAdditionalDivider(self):
1088        return []
class ScenarioSet_RiLSA1PTIteration(ScenarioSet_RiLSA1LoadCurvesSampled):
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)
ScenarioSet_RiLSA1PTIteration(params)
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))
def getNumRuns(self):
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
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 getAverageDuration(self):
1182    def getAverageDuration(self):
1183        return -1  # !!!
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
def getXLabel(self):
1218    def getXLabel(self):
1219        return "pt period [s]"
def getYLabel(self):
1221    def getYLabel(self):
1222        return "pt period [s]"
def getAdditionalDivider(self):
1224    def getAdditionalDivider(self):
1225        return []
def orientationX(self):
1227    def orientationX(self):
1228        return 90
def halfX(self):
1230    def halfX(self):
1231        return False
def adjust(self, fig):
1235    def adjust(self, fig):
1236        fig.subplots_adjust(bottom=0.2)
class ScenarioSet_SinSinDemand(ScenarioSet):
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")
MEAN = 700.0
AMPLITUDE = 300.0
offsets
frequencies
def getNumRuns(self):
1261    def getNumRuns(self):
1262        return len(self.offsets) * len(self.frequencies)
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 getAverageDuration(self):
1342    def getAverageDuration(self):
1343        return -1  # !!!
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
def getXLabel(self):
1364    def getXLabel(self):
1365        return "offset"
def getYLabel(self):
1367    def getYLabel(self):
1368        return "frequency [s]"
class ScenarioSet_OneSinDemand(ScenarioSet):
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")
MAIN_FLOW = 1000.0
amplitudes
frequencies
def getNumRuns(self):
1392    def getNumRuns(self):
1393        return len(self.amplitudes) * len(self.amplitudes)
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 getAverageDuration(self):
1466    def getAverageDuration(self):
1467        return -1  # !!!
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
def getXLabel(self):
1488    def getXLabel(self):
1489        return "!!!amplitude"
def getYLabel(self):
1491    def getYLabel(self):
1492        return "frequency [s]"
class ScenarioSet_DemandStep(ScenarioSet):
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 getAverageDuration(self):
1616    def getAverageDuration(self):
1617        return -1  # !!!
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 getXLabel(self):
1647    def getXLabel(self):
1648        return "initial flow#1 [veh/h] / initial flow#2 [veh/h]"
def getYLabel(self):
1650    def getYLabel(self):
1651        return "final flow#2 [veh/h] /\nchange duration [s]"
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
def halfX(self):
1677    def halfX(self):
1678        return False
def orientationX(self):
1680    def orientationX(self):
1681        return 90
def ticksSize(self):
1683    def ticksSize(self):
1684        return 12
def figsize(self):
1686    def figsize(self):
1687        return 8, 8
def adjust(self, fig):
1689    def adjust(self, fig):
1690        fig.subplots_adjust(bottom=0.2, left=0.2)
class ScenarioSet_CorrFlowsDistancesA(ScenarioSet):
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)
ScenarioSet_CorrFlowsDistancesA(params)
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))
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 getAverageDuration(self):
1774    def getAverageDuration(self):
1775        return -1  # !!!
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
def getXLabel(self):
1805    def getXLabel(self):
1806        return "distance [m] / flow#1 [veh/h]"
def getYLabel(self):
1808    def getYLabel(self):
1809        return "flow#2 [veh/h]"
def figsize(self):
1811    def figsize(self):
1812        return 10, 4
def orientationX(self):
1814    def orientationX(self):
1815        return 90
def ticksSize(self):
1817    def ticksSize(self):
1818        return 12
def halfX(self):
1820    def halfX(self):
1821        return False
def getAdditionalDivider(self):
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
def adjust(self, fig):
1829    def adjust(self, fig):
1830        fig.subplots_adjust(bottom=0.2)
class ScenarioSet_NetFlowsDistancesA(ScenarioSet):
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")
offsets
def getNumRuns(self):
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)
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 getAverageDuration(self):
1914    def getAverageDuration(self):
1915        return -1  # !!!
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
def getXLabel(self):
1945    def getXLabel(self):
1946        return "offset [m] / flow#1 [vehicles/h]"
def getYLabel(self):
1948    def getYLabel(self):
1949        return "flow#2 [vehicles/h]"
def figsize(self):
1951    def figsize(self):
1952        return 10, 4
def orientationX(self):
1954    def orientationX(self):
1955        return 90
def ticksSize(self):
1957    def ticksSize(self):
1958        return 12
def halfX(self):
1960    def halfX(self):
1961        return False
def getAdditionalDivider(self):
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
class ScenarioSet_TurnIteration(ScenarioSet):
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 [%]"
ScenarioSet_TurnIteration(params)
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))
MAIN_FLOW = 800
def getNumRuns(self):
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
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 getAverageDuration(self):
2050    def getAverageDuration(self):
2051        return -1  # !!!
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
def getXLabel(self):
2074    def getXLabel(self):
2075        return "right-turning ratio [%]"
def getYLabel(self):
2077    def getYLabel(self):
2078        return "left-turning ratio [%]"
class ScenarioSet_TurnIterationINIT(ScenarioSet):
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 [%]"
ScenarioSet_TurnIterationINIT(params)
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))
MAIN_FLOW = 800
def getNumRuns(self):
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
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 getAverageDuration(self):
2175    def getAverageDuration(self):
2176        return -1  # !!!
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
def getXLabel(self):
2199    def getXLabel(self):
2200        return "right-turning ratio [%]"
def getYLabel(self):
2202    def getYLabel(self):
2203        return "left-turning ratio [%]"
class ScenarioSet_RealWorld(ScenarioSet):
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
ScenarioSet_RealWorld(params)
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)
def getNumRuns(self):
2218    def getNumRuns(self):
2219        f1num = 1 + abs(self.getInt("scaleFrom") -
2220                        self.getInt("scaleTo")) / self.getInt("scaleStep")
2221        return f1num
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 getAverageDuration(self):
2250    def getAverageDuration(self):
2251        return -1  # !!!
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
def getXLabel(self):
2274    def getXLabel(self):
2275        return ""
def getYLabel(self):
2277    def getYLabel(self):
2278        return "demand scale [%]"
def figsize(self):
2280    def figsize(self):
2281        return 3, 5
class ScenarioSet_RiLSA1LoadCurvesOutTLS(ScenarioSet):
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"
ScenarioSet_RiLSA1LoadCurvesOutTLS(params)
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
def getNumRuns(self):
2297    def getNumRuns(self):
2298        return 3 * 3 * 3 * 3
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 getAverageDuration(self):
2372    def getAverageDuration(self):
2373        return -1  # !!!
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
def getXLabel(self):
2457    def getXLabel(self):
2458        return "!!!RWS type"
def getYLabel(self):
2460    def getYLabel(self):
2461        return "!!!RWS type"
class ScenarioSet_RiLSA1LoadCurvesOutTLS24(ScenarioSet):
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"
ScenarioSet_RiLSA1LoadCurvesOutTLS24(params)
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
def getNumRuns(self):
2475    def getNumRuns(self):
2476        return 3 * 3 * 3 * 3
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 getAverageDuration(self):
2552    def getAverageDuration(self):
2553        return -1  # !!!
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
def getXLabel(self):
2637    def getXLabel(self):
2638        return "!!!RWS type"
def getYLabel(self):
2640    def getYLabel(self):
2641        return "!!!RWS type"
class ScenarioSet_RiLSA1LoadCurvesBothTLS(ScenarioSet):
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"
ScenarioSet_RiLSA1LoadCurvesBothTLS(params)
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
def getNumRuns(self):
2655    def getNumRuns(self):
2656        return 3 * 3 * 3 * 3
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 getAverageDuration(self):
2731    def getAverageDuration(self):
2732        return -1  # !!!
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
def getXLabel(self):
2816    def getXLabel(self):
2817        return "!!!RWS type"
def getYLabel(self):
2819    def getYLabel(self):
2820        return "!!!RWS type"
class ScenarioSet_RiLSA1LoadCurvesBothTLS24(ScenarioSet):
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"
ScenarioSet_RiLSA1LoadCurvesBothTLS24(params)
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
def getNumRuns(self):
2834    def getNumRuns(self):
2835        return 3 * 3 * 3 * 3
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 getAverageDuration(self):
2912    def getAverageDuration(self):
2913        return -1  # !!!
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
def getXLabel(self):
2997    def getXLabel(self):
2998        return "!!!RWS type"
def getYLabel(self):
3000    def getYLabel(self):
3001        return "!!!RWS type"
class ScenarioSet_BasicRiLSANet(ScenarioSet):
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"
ScenarioSet_BasicRiLSANet(params)
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
def getNumRuns(self):
3015    def getNumRuns(self):
3016        return 3 * 3 * 3 * 3
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 getAverageDuration(self):
3087    def getAverageDuration(self):
3088        return -1  # !!!
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
def getXLabel(self):
3163    def getXLabel(self):
3164        return "!!!RWS type"
def getYLabel(self):
3166    def getYLabel(self):
3167        return "!!!RWS type"
class ScenarioSet_BasicRiLSANet2x2(ScenarioSet):
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"
ScenarioSet_BasicRiLSANet2x2(params)
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
def getNumRuns(self):
3181    def getNumRuns(self):
3182        return 3 * 3 * 3 * 3
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 getAverageDuration(self):
3256    def getAverageDuration(self):
3257        return -1  # !!!
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
def getXLabel(self):
3340    def getXLabel(self):
3341        return "!!!RWS type"
def getYLabel(self):
3343    def getYLabel(self):
3344        return "!!!RWS type"
class ScenarioSet_BasicRiLSACorridor3(ScenarioSet):
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"
ScenarioSet_BasicRiLSACorridor3(params)
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
def getNumRuns(self):
3358    def getNumRuns(self):
3359        return 3 * 3 * 3 * 3
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 getAverageDuration(self):
3434    def getAverageDuration(self):
3435        return -1  # !!!
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 getXLabel(self):
3518    def getXLabel(self):
3519        return "!!!RWS type"
def getYLabel(self):
3521    def getYLabel(self):
3522        return "!!!RWS type"
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():
3581def getAllScenarioSets():
3582    return ";".join(["iterateFlowsNA", "iterateFlowsA2",
3583                     "RiLSA1LoadCurves", "RiLSA1LoadCurvesOutTLS",
3584                     "SinSinDemand", "OneSinDemand", "DemandStep",
3585                     "TurnIteration"])