sumolib.scenario.scenarios.basic_rilsanet

  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    basic_rilsanet.py
 14# @author  Daniel Krajzewicz
 15# @date    2014-09-01
 16
 17from __future__ import absolute_import
 18from __future__ import print_function
 19
 20
 21from . import fileNeedsRebuild, Scenario
 22import os
 23import shutil
 24import sumolib.net.generator.grid as netGenerator
 25import sumolib.net.generator.demand as demandGenerator
 26from sumolib.net.generator.network import Edge, Lane
 27
 28
 29flowsRiLSA1 = [
 30    ["nmp", [
 31        ["ms", 359, 9],
 32        ["me", 59, 9],
 33        ["mw", 64, 12]
 34    ]],
 35
 36    ["wmp", [
 37        ["me", 508, 10],
 38        ["mn", 80, 14],
 39        ["ms", 130, 2]
 40    ]],
 41
 42    ["emp", [
 43        ["mw", 571, 10],
 44        ["mn", 57, 9],
 45        ["ms", 47, 3]
 46    ]],
 47
 48    ["smp", [
 49        ["mn", 354, 2],
 50        ["me", 49, 2],
 51        ["mw", 92, 2]
 52    ]]
 53
 54]
 55
 56
 57class Scenario_BasicRiLSANet(Scenario):
 58    NAME = "BasicRiLSANet"
 59    THIS_DIR = os.path.join(os.path.abspath(os.path.dirname(__file__)), NAME)
 60    TLS_FILE = "tls.add.xml"
 61    NET_FILE = "network.net.xml"
 62
 63    def __init__(self, name, params, withDefaultDemand=True):
 64        Scenario.__init__(self, self.NAME)
 65        self.params = params
 66        self.demandName = self.fullPath("routes.rou.xml")
 67        self.netName = self.fullPath(self.NET_FILE)
 68        # network
 69        if fileNeedsRebuild(self.fullPath(self.NET_FILE), "netconvert"):
 70            print("Network in '%s' needs to be rebuild" % self.netName)
 71            # , Lane(dirs="l", disallowed="pedestrian")]
 72            lanes = [Lane(dirs="s", allowed="pedestrian"), Lane(
 73                dirs="rs", disallowed="pedestrian")]
 74            defaultEdge = Edge(numLanes=2, maxSpeed=13.89, lanes=lanes)
 75            defaultEdge.addSplit(100, 0, 1)
 76            defaultEdge.lanes[-1].dirs = "l"
 77            netGen = netGenerator.grid(3, 3, None, defaultEdge)
 78            for n in netGen._nodes:
 79                nid = n.split("/")
 80                nid[0] = int(nid[0])
 81                nid[1] = int(nid[1])
 82                if nid[0] > 0 and nid[0] < 4 and nid[1] > 0 and nid[1] < 4:
 83                    netGen._nodes[n].addCrossing(
 84                        "%s/%s_to_%s.-100" % (nid[0] - 1, nid[1], n), "%s_to_%s/%s" % (n, nid[0] - 1, nid[1]))
 85                    netGen._nodes[n].addCrossing(
 86                        "%s/%s_to_%s.-100" % (nid[0] + 1, nid[1], n), "%s_to_%s/%s" % (n, nid[0] + 1, nid[1]))
 87                    netGen._nodes[n].addCrossing(
 88                        "%s/%s_to_%s.-100" % (nid[0], nid[1] - 1, n), "%s_to_%s/%s" % (n, nid[0], nid[1] - 1))
 89                    netGen._nodes[n].addCrossing(
 90                        "%s/%s_to_%s.-100" % (nid[0], nid[1] + 1, n), "%s_to_%s/%s" % (n, nid[0], nid[1] + 1))
 91            # not nice, the network name should be given/returned
 92            netGen.build(self.netName)
 93            fdow = open(self.fullPath(self.TLS_FILE), "w")
 94            fdow.write('<additional>\n\n')
 95            for y in range(1, 4):
 96                for x in range(1, 4):
 97                    eedge = "%s/%s_to_%s/%s.-100" % (x - 1, y, x, y)
 98                    wedge = "%s/%s_to_%s/%s.-100" % (x + 1, y, x, y)
 99                    nedge = "%s/%s_to_%s/%s.-100" % (x, y + 1, x, y)
100                    sedge = "%s/%s_to_%s/%s.-100" % (x, y - 1, x, y)
101                    fdow.write(
102                        '   <tlLogic id="%s/%s" type="static" programID="adapted" offset="0">\n' % (x, y))
103                    fdow.write(
104                        ('      <phase duration="31" state="rrrrrGGgrrrrrGGgGrGr" minDur="10" maxDur="50" ' +
105                         'type="target;decisional" targetLanes="%s_1 %s_2 %s_1 %s_2"/>\n') % (
106                            eedge, eedge, wedge, wedge))
107                    fdow.write(
108                        '      <phase duration="4"  state="rrrrryygrrrrryygrrrr" type="transient"/>\n')
109                    fdow.write(
110                        ('      <phase duration="6"  state="rrrrrrrGrrrrrrrGrrrr" minDur="2" maxDur="20" ' +
111                         'type="decisional" targetLanes="%s_2 %s_2"/>\n') % (eedge, wedge))
112                    fdow.write(
113                        '      <phase duration="4"  state="rrrrrrryrrrrrrryrrrr" type="transient"/>\n')
114                    fdow.write(
115                        '      <phase duration="4"  state="rrrrrrrrrrrrrrrrrrrr" type="transient;commit"/>\n')
116                    fdow.write(
117                        ('      <phase duration="31" state="rGGgrrrrrGGgrrrrrGrG" minDur="10" maxDur="50" ' +
118                         'type="target;decisional" targetLanes="%s_1 %s_2 %s_1 %s_2"/>\n') % (
119                            sedge, sedge, nedge, nedge))
120                    fdow.write(
121                        '      <phase duration="4"  state="ryygrrrrryygrrrrrrrr" type="transient"/>\n')
122                    fdow.write(
123                        ('      <phase duration="6"  state="rrrGrrrrrrrGrrrrrrrr" minDur="2" maxDur="20" ' +
124                         'type="decisional" targetLanes="%s_2 %s_2"/>\n') % (sedge, nedge))
125                    fdow.write(
126                        '      <phase duration="4"  state="ryryrrrrryryrrrrrrrr" type="transient"/>\n')
127                    fdow.write(
128                        '      <phase duration="4"  state="rrrrrrrrrrrrrrrrrrrr" type="transient;commit"/>\n')
129                    fdow.write('   </tlLogic>\n\n')
130            fdow.write('</additional>\n')
131        # demand
132        if withDefaultDemand:
133            self.demand = demandGenerator.Demand()
134            for f in flowsRiLSA1:
135                for oe, rel in enumerate(f[1]):
136                    flow = int(rel[1] * .75)
137                    prob = rel[2] / 100.
138                    iprob = 1. - prob
139                    pkwEprob = iprob * self.params["equipment-rate"]
140                    pkwNprob = iprob - pkwEprob
141                    lkwEprob = prob * self.params["equipment-rate"]
142                    lkwNprob = prob - lkwEprob
143                    for ie in range(1, 4):  # over input
144                        via = []
145                        if f[0] == "nmp":
146                            iedge = "%s/4_to_%s/3" % (ie, ie)
147                            for ve in range(4, 0, -1):
148                                via.append("%s/%s_to_%s/%s" %
149                                           (ie, ve, ie, ve - 1))
150                        if f[0] == "smp":
151                            iedge = "%s/0_to_%s/1" % (ie, ie)
152                            for ve in range(0, 4, 1):
153                                via.append("%s/%s_to_%s/%s" %
154                                           (ie, ve, ie, ve + 1))
155                        if f[0] == "wmp":
156                            iedge = "0/%s_to_1/%s" % (ie, ie)
157                            for ve in range(0, 4, 1):
158                                via.append("%s/%s_to_%s/%s" %
159                                           (ve, ie, ve + 1, ie))
160                        if f[0] == "emp":
161                            iedge = "4/%s_to_3/%s" % (ie, ie)
162                            for ve in range(4, 0, -1):
163                                via.append("%s/%s_to_%s/%s" %
164                                           (ve, ie, ve - 1, ie))
165                        if oe == 0:
166                            if rel[0] == "mn":
167                                oedge = "%s/3_to_%s/4.-100" % (ie, ie)
168                            if rel[0] == "ms":
169                                oedge = "%s/1_to_%s/0.-100" % (ie, ie)
170                            if rel[0] == "mw":
171                                oedge = "1/%s_to_0/%s.-100" % (ie, ie)
172                            if rel[0] == "me":
173                                oedge = "3/%s_to_4/%s.-100" % (ie, ie)
174                            self.demand.addStream(demandGenerator.Stream(iedge + "__" + oedge, 0, 3600, flow, iedge,
175                                                                         oedge,
176                                                                         {"passenger": pkwEprob,
177                                                                          "COLOMBO_undetectable_passenger": pkwNprob,
178                                                                          "hdv": lkwEprob,
179                                                                          "COLOMBO_undetectable_hdv": lkwNprob}))
180                            continue
181                        for oee in range(1, 4):
182                            if rel[0] == "mn":
183                                oedge = "%s/3_to_%s/4.-100" % (oee, oee)
184                            if rel[0] == "ms":
185                                oedge = "%s/1_to_%s/0.-100" % (oee, oee)
186                            if rel[0] == "mw":
187                                oedge = "1/%s_to_0/%s.-100" % (oee, oee)
188                            if rel[0] == "me":
189                                oedge = "3/%s_to_4/%s.-100" % (oee, oee)
190                            print("%s %s " % (oee, via))
191                            self.demand.addStream(demandGenerator.Stream(iedge + "__" + oedge, 0, 3600, int(flow / 3.),
192                                                                         iedge, oedge,
193                                                                         {"passenger": pkwEprob,
194                                                                          "COLOMBO_undetectable_passenger": pkwNprob,
195                                                                          "hdv": lkwEprob,
196                                                                          "COLOMBO_undetectable_hdv": lkwNprob}))
197            if fileNeedsRebuild(self.demandName, "duarouter"):
198                self.demand.build(0, 86400, self.netName, self.demandName)
199
200        shutil.copy(self.NET_FILE, self.sandboxPath(self.NET_FILE))
201        shutil.copy(self.TLS_FILE, self.sandboxPath(self.TLS_FILE))
flowsRiLSA1 = [['nmp', [['ms', 359, 9], ['me', 59, 9], ['mw', 64, 12]]], ['wmp', [['me', 508, 10], ['mn', 80, 14], ['ms', 130, 2]]], ['emp', [['mw', 571, 10], ['mn', 57, 9], ['ms', 47, 3]]], ['smp', [['mn', 354, 2], ['me', 49, 2], ['mw', 92, 2]]]]
class Scenario_BasicRiLSANet(sumolib.scenario.scenarios.Scenario):
 58class Scenario_BasicRiLSANet(Scenario):
 59    NAME = "BasicRiLSANet"
 60    THIS_DIR = os.path.join(os.path.abspath(os.path.dirname(__file__)), NAME)
 61    TLS_FILE = "tls.add.xml"
 62    NET_FILE = "network.net.xml"
 63
 64    def __init__(self, name, params, withDefaultDemand=True):
 65        Scenario.__init__(self, self.NAME)
 66        self.params = params
 67        self.demandName = self.fullPath("routes.rou.xml")
 68        self.netName = self.fullPath(self.NET_FILE)
 69        # network
 70        if fileNeedsRebuild(self.fullPath(self.NET_FILE), "netconvert"):
 71            print("Network in '%s' needs to be rebuild" % self.netName)
 72            # , Lane(dirs="l", disallowed="pedestrian")]
 73            lanes = [Lane(dirs="s", allowed="pedestrian"), Lane(
 74                dirs="rs", disallowed="pedestrian")]
 75            defaultEdge = Edge(numLanes=2, maxSpeed=13.89, lanes=lanes)
 76            defaultEdge.addSplit(100, 0, 1)
 77            defaultEdge.lanes[-1].dirs = "l"
 78            netGen = netGenerator.grid(3, 3, None, defaultEdge)
 79            for n in netGen._nodes:
 80                nid = n.split("/")
 81                nid[0] = int(nid[0])
 82                nid[1] = int(nid[1])
 83                if nid[0] > 0 and nid[0] < 4 and nid[1] > 0 and nid[1] < 4:
 84                    netGen._nodes[n].addCrossing(
 85                        "%s/%s_to_%s.-100" % (nid[0] - 1, nid[1], n), "%s_to_%s/%s" % (n, nid[0] - 1, nid[1]))
 86                    netGen._nodes[n].addCrossing(
 87                        "%s/%s_to_%s.-100" % (nid[0] + 1, nid[1], n), "%s_to_%s/%s" % (n, nid[0] + 1, nid[1]))
 88                    netGen._nodes[n].addCrossing(
 89                        "%s/%s_to_%s.-100" % (nid[0], nid[1] - 1, n), "%s_to_%s/%s" % (n, nid[0], nid[1] - 1))
 90                    netGen._nodes[n].addCrossing(
 91                        "%s/%s_to_%s.-100" % (nid[0], nid[1] + 1, n), "%s_to_%s/%s" % (n, nid[0], nid[1] + 1))
 92            # not nice, the network name should be given/returned
 93            netGen.build(self.netName)
 94            fdow = open(self.fullPath(self.TLS_FILE), "w")
 95            fdow.write('<additional>\n\n')
 96            for y in range(1, 4):
 97                for x in range(1, 4):
 98                    eedge = "%s/%s_to_%s/%s.-100" % (x - 1, y, x, y)
 99                    wedge = "%s/%s_to_%s/%s.-100" % (x + 1, y, x, y)
100                    nedge = "%s/%s_to_%s/%s.-100" % (x, y + 1, x, y)
101                    sedge = "%s/%s_to_%s/%s.-100" % (x, y - 1, x, y)
102                    fdow.write(
103                        '   <tlLogic id="%s/%s" type="static" programID="adapted" offset="0">\n' % (x, y))
104                    fdow.write(
105                        ('      <phase duration="31" state="rrrrrGGgrrrrrGGgGrGr" minDur="10" maxDur="50" ' +
106                         'type="target;decisional" targetLanes="%s_1 %s_2 %s_1 %s_2"/>\n') % (
107                            eedge, eedge, wedge, wedge))
108                    fdow.write(
109                        '      <phase duration="4"  state="rrrrryygrrrrryygrrrr" type="transient"/>\n')
110                    fdow.write(
111                        ('      <phase duration="6"  state="rrrrrrrGrrrrrrrGrrrr" minDur="2" maxDur="20" ' +
112                         'type="decisional" targetLanes="%s_2 %s_2"/>\n') % (eedge, wedge))
113                    fdow.write(
114                        '      <phase duration="4"  state="rrrrrrryrrrrrrryrrrr" type="transient"/>\n')
115                    fdow.write(
116                        '      <phase duration="4"  state="rrrrrrrrrrrrrrrrrrrr" type="transient;commit"/>\n')
117                    fdow.write(
118                        ('      <phase duration="31" state="rGGgrrrrrGGgrrrrrGrG" minDur="10" maxDur="50" ' +
119                         'type="target;decisional" targetLanes="%s_1 %s_2 %s_1 %s_2"/>\n') % (
120                            sedge, sedge, nedge, nedge))
121                    fdow.write(
122                        '      <phase duration="4"  state="ryygrrrrryygrrrrrrrr" type="transient"/>\n')
123                    fdow.write(
124                        ('      <phase duration="6"  state="rrrGrrrrrrrGrrrrrrrr" minDur="2" maxDur="20" ' +
125                         'type="decisional" targetLanes="%s_2 %s_2"/>\n') % (sedge, nedge))
126                    fdow.write(
127                        '      <phase duration="4"  state="ryryrrrrryryrrrrrrrr" type="transient"/>\n')
128                    fdow.write(
129                        '      <phase duration="4"  state="rrrrrrrrrrrrrrrrrrrr" type="transient;commit"/>\n')
130                    fdow.write('   </tlLogic>\n\n')
131            fdow.write('</additional>\n')
132        # demand
133        if withDefaultDemand:
134            self.demand = demandGenerator.Demand()
135            for f in flowsRiLSA1:
136                for oe, rel in enumerate(f[1]):
137                    flow = int(rel[1] * .75)
138                    prob = rel[2] / 100.
139                    iprob = 1. - prob
140                    pkwEprob = iprob * self.params["equipment-rate"]
141                    pkwNprob = iprob - pkwEprob
142                    lkwEprob = prob * self.params["equipment-rate"]
143                    lkwNprob = prob - lkwEprob
144                    for ie in range(1, 4):  # over input
145                        via = []
146                        if f[0] == "nmp":
147                            iedge = "%s/4_to_%s/3" % (ie, ie)
148                            for ve in range(4, 0, -1):
149                                via.append("%s/%s_to_%s/%s" %
150                                           (ie, ve, ie, ve - 1))
151                        if f[0] == "smp":
152                            iedge = "%s/0_to_%s/1" % (ie, ie)
153                            for ve in range(0, 4, 1):
154                                via.append("%s/%s_to_%s/%s" %
155                                           (ie, ve, ie, ve + 1))
156                        if f[0] == "wmp":
157                            iedge = "0/%s_to_1/%s" % (ie, ie)
158                            for ve in range(0, 4, 1):
159                                via.append("%s/%s_to_%s/%s" %
160                                           (ve, ie, ve + 1, ie))
161                        if f[0] == "emp":
162                            iedge = "4/%s_to_3/%s" % (ie, ie)
163                            for ve in range(4, 0, -1):
164                                via.append("%s/%s_to_%s/%s" %
165                                           (ve, ie, ve - 1, ie))
166                        if oe == 0:
167                            if rel[0] == "mn":
168                                oedge = "%s/3_to_%s/4.-100" % (ie, ie)
169                            if rel[0] == "ms":
170                                oedge = "%s/1_to_%s/0.-100" % (ie, ie)
171                            if rel[0] == "mw":
172                                oedge = "1/%s_to_0/%s.-100" % (ie, ie)
173                            if rel[0] == "me":
174                                oedge = "3/%s_to_4/%s.-100" % (ie, ie)
175                            self.demand.addStream(demandGenerator.Stream(iedge + "__" + oedge, 0, 3600, flow, iedge,
176                                                                         oedge,
177                                                                         {"passenger": pkwEprob,
178                                                                          "COLOMBO_undetectable_passenger": pkwNprob,
179                                                                          "hdv": lkwEprob,
180                                                                          "COLOMBO_undetectable_hdv": lkwNprob}))
181                            continue
182                        for oee in range(1, 4):
183                            if rel[0] == "mn":
184                                oedge = "%s/3_to_%s/4.-100" % (oee, oee)
185                            if rel[0] == "ms":
186                                oedge = "%s/1_to_%s/0.-100" % (oee, oee)
187                            if rel[0] == "mw":
188                                oedge = "1/%s_to_0/%s.-100" % (oee, oee)
189                            if rel[0] == "me":
190                                oedge = "3/%s_to_4/%s.-100" % (oee, oee)
191                            print("%s %s " % (oee, via))
192                            self.demand.addStream(demandGenerator.Stream(iedge + "__" + oedge, 0, 3600, int(flow / 3.),
193                                                                         iedge, oedge,
194                                                                         {"passenger": pkwEprob,
195                                                                          "COLOMBO_undetectable_passenger": pkwNprob,
196                                                                          "hdv": lkwEprob,
197                                                                          "COLOMBO_undetectable_hdv": lkwNprob}))
198            if fileNeedsRebuild(self.demandName, "duarouter"):
199                self.demand.build(0, 86400, self.netName, self.demandName)
200
201        shutil.copy(self.NET_FILE, self.sandboxPath(self.NET_FILE))
202        shutil.copy(self.TLS_FILE, self.sandboxPath(self.TLS_FILE))
Scenario_BasicRiLSANet(name, params, withDefaultDemand=True)
 64    def __init__(self, name, params, withDefaultDemand=True):
 65        Scenario.__init__(self, self.NAME)
 66        self.params = params
 67        self.demandName = self.fullPath("routes.rou.xml")
 68        self.netName = self.fullPath(self.NET_FILE)
 69        # network
 70        if fileNeedsRebuild(self.fullPath(self.NET_FILE), "netconvert"):
 71            print("Network in '%s' needs to be rebuild" % self.netName)
 72            # , Lane(dirs="l", disallowed="pedestrian")]
 73            lanes = [Lane(dirs="s", allowed="pedestrian"), Lane(
 74                dirs="rs", disallowed="pedestrian")]
 75            defaultEdge = Edge(numLanes=2, maxSpeed=13.89, lanes=lanes)
 76            defaultEdge.addSplit(100, 0, 1)
 77            defaultEdge.lanes[-1].dirs = "l"
 78            netGen = netGenerator.grid(3, 3, None, defaultEdge)
 79            for n in netGen._nodes:
 80                nid = n.split("/")
 81                nid[0] = int(nid[0])
 82                nid[1] = int(nid[1])
 83                if nid[0] > 0 and nid[0] < 4 and nid[1] > 0 and nid[1] < 4:
 84                    netGen._nodes[n].addCrossing(
 85                        "%s/%s_to_%s.-100" % (nid[0] - 1, nid[1], n), "%s_to_%s/%s" % (n, nid[0] - 1, nid[1]))
 86                    netGen._nodes[n].addCrossing(
 87                        "%s/%s_to_%s.-100" % (nid[0] + 1, nid[1], n), "%s_to_%s/%s" % (n, nid[0] + 1, nid[1]))
 88                    netGen._nodes[n].addCrossing(
 89                        "%s/%s_to_%s.-100" % (nid[0], nid[1] - 1, n), "%s_to_%s/%s" % (n, nid[0], nid[1] - 1))
 90                    netGen._nodes[n].addCrossing(
 91                        "%s/%s_to_%s.-100" % (nid[0], nid[1] + 1, n), "%s_to_%s/%s" % (n, nid[0], nid[1] + 1))
 92            # not nice, the network name should be given/returned
 93            netGen.build(self.netName)
 94            fdow = open(self.fullPath(self.TLS_FILE), "w")
 95            fdow.write('<additional>\n\n')
 96            for y in range(1, 4):
 97                for x in range(1, 4):
 98                    eedge = "%s/%s_to_%s/%s.-100" % (x - 1, y, x, y)
 99                    wedge = "%s/%s_to_%s/%s.-100" % (x + 1, y, x, y)
100                    nedge = "%s/%s_to_%s/%s.-100" % (x, y + 1, x, y)
101                    sedge = "%s/%s_to_%s/%s.-100" % (x, y - 1, x, y)
102                    fdow.write(
103                        '   <tlLogic id="%s/%s" type="static" programID="adapted" offset="0">\n' % (x, y))
104                    fdow.write(
105                        ('      <phase duration="31" state="rrrrrGGgrrrrrGGgGrGr" minDur="10" maxDur="50" ' +
106                         'type="target;decisional" targetLanes="%s_1 %s_2 %s_1 %s_2"/>\n') % (
107                            eedge, eedge, wedge, wedge))
108                    fdow.write(
109                        '      <phase duration="4"  state="rrrrryygrrrrryygrrrr" type="transient"/>\n')
110                    fdow.write(
111                        ('      <phase duration="6"  state="rrrrrrrGrrrrrrrGrrrr" minDur="2" maxDur="20" ' +
112                         'type="decisional" targetLanes="%s_2 %s_2"/>\n') % (eedge, wedge))
113                    fdow.write(
114                        '      <phase duration="4"  state="rrrrrrryrrrrrrryrrrr" type="transient"/>\n')
115                    fdow.write(
116                        '      <phase duration="4"  state="rrrrrrrrrrrrrrrrrrrr" type="transient;commit"/>\n')
117                    fdow.write(
118                        ('      <phase duration="31" state="rGGgrrrrrGGgrrrrrGrG" minDur="10" maxDur="50" ' +
119                         'type="target;decisional" targetLanes="%s_1 %s_2 %s_1 %s_2"/>\n') % (
120                            sedge, sedge, nedge, nedge))
121                    fdow.write(
122                        '      <phase duration="4"  state="ryygrrrrryygrrrrrrrr" type="transient"/>\n')
123                    fdow.write(
124                        ('      <phase duration="6"  state="rrrGrrrrrrrGrrrrrrrr" minDur="2" maxDur="20" ' +
125                         'type="decisional" targetLanes="%s_2 %s_2"/>\n') % (sedge, nedge))
126                    fdow.write(
127                        '      <phase duration="4"  state="ryryrrrrryryrrrrrrrr" type="transient"/>\n')
128                    fdow.write(
129                        '      <phase duration="4"  state="rrrrrrrrrrrrrrrrrrrr" type="transient;commit"/>\n')
130                    fdow.write('   </tlLogic>\n\n')
131            fdow.write('</additional>\n')
132        # demand
133        if withDefaultDemand:
134            self.demand = demandGenerator.Demand()
135            for f in flowsRiLSA1:
136                for oe, rel in enumerate(f[1]):
137                    flow = int(rel[1] * .75)
138                    prob = rel[2] / 100.
139                    iprob = 1. - prob
140                    pkwEprob = iprob * self.params["equipment-rate"]
141                    pkwNprob = iprob - pkwEprob
142                    lkwEprob = prob * self.params["equipment-rate"]
143                    lkwNprob = prob - lkwEprob
144                    for ie in range(1, 4):  # over input
145                        via = []
146                        if f[0] == "nmp":
147                            iedge = "%s/4_to_%s/3" % (ie, ie)
148                            for ve in range(4, 0, -1):
149                                via.append("%s/%s_to_%s/%s" %
150                                           (ie, ve, ie, ve - 1))
151                        if f[0] == "smp":
152                            iedge = "%s/0_to_%s/1" % (ie, ie)
153                            for ve in range(0, 4, 1):
154                                via.append("%s/%s_to_%s/%s" %
155                                           (ie, ve, ie, ve + 1))
156                        if f[0] == "wmp":
157                            iedge = "0/%s_to_1/%s" % (ie, ie)
158                            for ve in range(0, 4, 1):
159                                via.append("%s/%s_to_%s/%s" %
160                                           (ve, ie, ve + 1, ie))
161                        if f[0] == "emp":
162                            iedge = "4/%s_to_3/%s" % (ie, ie)
163                            for ve in range(4, 0, -1):
164                                via.append("%s/%s_to_%s/%s" %
165                                           (ve, ie, ve - 1, ie))
166                        if oe == 0:
167                            if rel[0] == "mn":
168                                oedge = "%s/3_to_%s/4.-100" % (ie, ie)
169                            if rel[0] == "ms":
170                                oedge = "%s/1_to_%s/0.-100" % (ie, ie)
171                            if rel[0] == "mw":
172                                oedge = "1/%s_to_0/%s.-100" % (ie, ie)
173                            if rel[0] == "me":
174                                oedge = "3/%s_to_4/%s.-100" % (ie, ie)
175                            self.demand.addStream(demandGenerator.Stream(iedge + "__" + oedge, 0, 3600, flow, iedge,
176                                                                         oedge,
177                                                                         {"passenger": pkwEprob,
178                                                                          "COLOMBO_undetectable_passenger": pkwNprob,
179                                                                          "hdv": lkwEprob,
180                                                                          "COLOMBO_undetectable_hdv": lkwNprob}))
181                            continue
182                        for oee in range(1, 4):
183                            if rel[0] == "mn":
184                                oedge = "%s/3_to_%s/4.-100" % (oee, oee)
185                            if rel[0] == "ms":
186                                oedge = "%s/1_to_%s/0.-100" % (oee, oee)
187                            if rel[0] == "mw":
188                                oedge = "1/%s_to_0/%s.-100" % (oee, oee)
189                            if rel[0] == "me":
190                                oedge = "3/%s_to_4/%s.-100" % (oee, oee)
191                            print("%s %s " % (oee, via))
192                            self.demand.addStream(demandGenerator.Stream(iedge + "__" + oedge, 0, 3600, int(flow / 3.),
193                                                                         iedge, oedge,
194                                                                         {"passenger": pkwEprob,
195                                                                          "COLOMBO_undetectable_passenger": pkwNprob,
196                                                                          "hdv": lkwEprob,
197                                                                          "COLOMBO_undetectable_hdv": lkwNprob}))
198            if fileNeedsRebuild(self.demandName, "duarouter"):
199                self.demand.build(0, 86400, self.netName, self.demandName)
200
201        shutil.copy(self.NET_FILE, self.sandboxPath(self.NET_FILE))
202        shutil.copy(self.TLS_FILE, self.sandboxPath(self.TLS_FILE))
NAME = 'BasicRiLSANet'
THIS_DIR = '/home/delphi/gcc/sumo/tools/sumolib/scenario/scenarios/BasicRiLSANet'
TLS_FILE = 'tls.add.xml'
NET_FILE = 'network.net.xml'
params
demandName
netName