„SUMO” változatai közötti eltérés

Innen: GIS Wiki
(Hálózat generátor)
 
(22 közbenső módosítás, amit 2 másik szerkesztő végzett, nincs mutatva)
1. sor: 1. sor:
A SUMO egy közúti, tömegközlekedési és vasúti mikroszimulációs nyílt forráskódú szoftver. Felhasználását tekintve alkalmas kereszteződések, lokális úthálózatok, lámpabeállítások, menetrendek tervezésének támogatásához. Pontosabban ezek teszteléséhez. Lehetőséget nyújt úgynevezett online szimulációhoz, ami azt jelenti, hogy szimuláció közben megváltoztathatjuk az úthálózat adatait, például egy balesetet szimulálhatunk. Illetve a lámpa beállításokat is megváltoztathatjuk szimuláció közben, ezzel pl napszak vagy detektor alapú lámpabeállításokat is tesztelhetünk.
+
A '''SUMO''' ('''Simulation of Urban MObility''') egy közúti, tömegközlekedési és vasúti <span class="plainlinks">[https://en.wikipedia.org/wiki/Microsimulation mikroszimulációs]</span> <span class="plainlinks">[https://hu.wikipedia.org/wiki/Ny%C3%ADlt_forr%C3%A1sk%C3%B3d%C3%BA_szoftver nyílt forráskódú szoftver]</span>. Felhasználását tekintve alkalmas kereszteződések, lokális úthálózatok, lámpabeállítások, menetrendek tervezésének támogatásához, illetve teszteléséhez. Lehetőséget nyújt úgynevezett online szimulációhoz, vagyis a szimuláció közben az adatok változtatására, úgymint úthálózat (pl. baleset előidézése), forgalmi lámpák (pl. napszaktól függő lámaváltás, detektorok használata). A szoftverben a mikro modellt <span class="plainlinks">[https://hu.wikipedia.org/wiki/Szoftver_%C3%A1gens ágens alapú szimuláció]</span> valósítja meg, amely járműszinten szimulálja a forgalmat.
 +
 
 +
A SUMO széles körben használt út hálózat tervezéshez, menetrend készítéshez. Kedvelt ingyenes mivolta miatt akadémiai körökben. A felhasználására jó példa többek közt a [http://turbotraffic.mak.com TurboTraffic]. Ahol ugyan saját felhasználói felületet használnak hozzá, de a szimulációt a SUMO biztosítja.
  
  
8. sor: 10. sor:
 
==Telepítés==
 
==Telepítés==
  
A telepítendő bináris [http://sumo-sim.org/userdoc/Downloads.html ezen] linken érhető el. Elérhető Windowsra, Suse Linuxra, Fedorára, Scientific-re és Ubuntura is. Open Source jellegéből következik, hogy buildelhető tetszőleges környezetben, természetesen ehhez szükséges QT és pyton támogatás
+
Elérhető Windowsra, Suse Linuxra, Fedorára, Scientific-re és Ubuntura is. Nyílt forráskódú jellegéből következik, hogy buildelhető tetszőleges környezetben, természetesen ehhez szükséges <span class="plainlinks">[https://hu.wikipedia.org/wiki/Qt Qt]</span> és <span class="plainlinks">[https://hu.wikipedia.org/wiki/Python_(programoz%C3%A1si_nyelv) Python]</span> támogatás.
  
==Technológiai Leírása==
+
==Architektúra==
  
A SUMO alapvetően c++-ban írt szoftver, a hozzá tartozó kiegészítő eszközök pytonban írt scriptek. A grafikus felülete Qt-ben íródott. A szimulációhoz használt matematikai modell jól elkülönített modulban helyezkedik el.
+
A SUMO alapvetően <span class="plainlinks">[https://en.wikipedia.org/wiki/C%2B%2B C++]</span>-ban írt szoftver, a hozzá tartozó kiegészítő eszközök <span class="plainlinks">[https://hu.wikipedia.org/wiki/Python_(programoz%C3%A1si_nyelv) Python]</span>ban írt szkriptek. A grafikus felülete <span class="plainlinks">[https://hu.wikipedia.org/wiki/Qt Qt]</span>-ban íródott.  
  
===Matematikai háttér===
+
A szoftver <span class="plainlinks">[https://hu.wikipedia.org/wiki/Objektumorient%C3%A1lt_programoz%C3%A1s objektumorientált megvalósítású]</span>, modularizált szerkezetű, jól elkülönítve a szakértői területeket. Érdekessége viszont, hogy a különböző modulok nem minden esetben vannak össze integrálva. A rendszert felépítő modulok a következők.
  
A SUMO-ban beállítható minden jármű típushoz tartozó követési modell. A követési modell azt határozza meg, hogy egy jármű milyen sebességgel haladjon.
+
* '''microsim''': A szimuláció futtatását biztosító modul, tartalmazza többek között a járművek jármű típusok definícióját.
 +
* '''netgenerate''': Absztrakt úthálózatok generálását teszi lehetővé.
 +
* '''netbuild''': Az útvonal hálózat gráfjának elkészítését, és módosítását valósítja meg szimuláció könnyű fútatásához (pl. hurokélek transzformálása).
 +
* '''netimport''': Úthálózat importálását biztosítja.
 +
* '''od2trips''': OD mátrixból történő útgenerálást biztosít.
 +
* '''router''': Az alapértelmezett útvonal kereső modell.
 +
* '''daurouter''': Legrövidebb útvonal keresése.
 +
* '''dfrouter''': Útvonal tervezés ciklussal indukálva.
 +
* '''jtrrouter''': Útvonal tervezés "junction swiching" módszerrel.
 +
* '''polyconvert''': Az úthálózaton felülei tértképi elemek ábrázolását teszi lehetővé.
 +
* '''GUI''': A grafikus felhasználói felület modulja Qt-ban.
 +
* '''GUInetloader''': Úthálózat megjelenítése.
 +
* '''GUIsim''': Szimuláció megjelenítése.
 +
* '''foreign''': külső csomagok egységes felületét biztosítja (pl. R-fa, OpenGL támogatás).
 +
* '''utils''': globális segédfunkciók gyűjteménye.
  
====Wiedemann====
 
Ennek a modellnek két változata is létezik, a 74-es és a 99-es. Előbbi kevesebb paraméterrel dolgozik, második viszont 10 paraméterrel, így különböző sebesség tartományokban más-más viselkedéssel ruházhatjuk fel a járműveket, ezzel alkalmassá válik országúti forgalom modellezésére, de a városi forgalom esetén a túl sok paraméter miatt nehézkes a paraméterezése.
 
A modell egyszerű nulladrendű képlettel adja meg a kívánt követési távolságot. Ennek kiértékelése során kell eldönteni, hogy az adott jármű, hogyan változtassa a sebességét. Erre is ad kiszámítási módot a modell.
 
  
A modell egyetlen lineáris összefüggéssel leírható: bx= (bx_add+bx_Multi*z)* √v, a hol a bx a biztonságos távolság, v a sebesség, bx_add a biztonságos távolsági komponens, z paraméter 0 és 1 közti érték, általában 0,5 , 0,15-ös standard eltérés mellett.
+
 
Tehát az első lökhárítók közti távolság az ax+bx, ax pedig a nyugalmi távolságuk, azaz ax = L(n-1) +AXadd. Ahol az AXadd kalibrációs paraméter.
+
==Matematikai háttér==
A bx_add és a bx_multi becsülhetők a kapacitás mértékéből.
+
A SUMO matematikai modellek segítségével kezeli a járműveket és a forgalmat, így például a járművek haladási sebességét.
 +
 
 +
====Krauss modell====
 +
A Krauss modell a biztonságos sebességet adja meg, és közvetlenül megadja az új sebességet. Előnye, hogy jól paraméterezhető, akár különböző forgalmi szituációkra különböző viselkedést is definiálhatunk. Sőt a SUMO képes különböző járművek esetén is különböző paraméterezést használni. Ezzel szimulálva az agresszív és a kevésbé jártas vezetőket is. Az útviszonyok is ezen paraméterek beállításával történhet, bár a SUMO ezt nem támogatja közvetlenül.
 +
 
 +
====Wiedemann modell====
 +
A Wiedermann modellnek két változata is létezik, a 74-es és a 99-es. Utóbbival különböző sebesség tartományokban más-más viselkedéssel ruházhatjuk fel a járműveket, ezzel alkalmassá válik országúti forgalom modellezésére, de a városi forgalom esetén a túl sok paraméter miatt nehézkes a paraméterezése. A modell egyszerű nulladrendű képlettel adja meg a kívánt követési távolságot. Ennek kiértékelése során kell eldönteni, hogy az adott jármű hogyan változtassa a sebességét. Erre is ad kiszámítási módot a modell.
 +
 
 +
A modell leírható a következő lineáris összefüggéssel:
 +
<math>bx=(bx_{add}+bx_{multi}*z)*\sqrt{v},</math>
 +
 
 +
ahol
 +
* <math>v</math> a sebesség,
 +
* <math>bx</math> a biztonságos távolság,
 +
* <math>bx_{add}</math> a biztonságos távolsági komponens,  
 +
* <math>z</math> paraméter 0 és 1 közti érték, általában 0.5,0.15-ös standard eltérés mellett. Ha determinisztikus modellre van szükség, akkor a <math>z=1</math> választást használják.
 +
 
 +
Az első lökhárítók közti távolság az <math>ax+bx</math> képlettel írható le, ahol <math>ax</math> a nyugalmi távolságuk, vagyis <math>ax = L(n-1)+AX_{add}</math>, ahol <math>AX_{add}</math> kalibrációs paraméter, <math>L(n-1)</math> pedig a követett jármű hossza.
 +
A <math>bx_{add}</math> és a <math>bx_{multi}</math> értékek becsülhetők a kapacitás mértékéből.
 
A modell a szükséges követési távolságot határozza meg, tehát a sebesség meghatározása további számításokat igényel.
 
A modell a szükséges követési távolságot határozza meg, tehát a sebesség meghatározása további számításokat igényel.
  
Bizonyos implementációkban az additív kalibrációs paramétert elhagyják, a SUMO-ban, pedig fixen 1. Ha determinisztikus modellre van szükség, akkor a z=1 választást használják.
+
Bizonyos implementációkban az additív kalibrációs paramétert elhagyják, a SUMO-ban, pedig fixen 1.  
Az első lökhárítók közti távolság az ax+bx, ax pedig a nyugalmi távolságuk, azaz ax = L(n-1) +AXadd. Ahol az AXadd kalibrációs paraméter, az L(n-1) pedig a követett jármű hossza.
+
 
A bx_add és a bx_multi becsülhetők a kapacitás mértékéből. Ennek módja a kalibráció fejezetben található.
+
==Használata==
A bx értéke alapján el kell dönteni, hogy hogyan változzon a jármű sebessége, ehhez meg kell határozni jelenlegi távolság alapján. Ennek a döntésnek a meghozatalához a további mutató számokat kell meghatározni, ezek alapján lehet eldönteni, hogy követésre, közelítésre, vészfékezésre, vagy intenzív gyorsításra van szükség. Ilyen felosztásra látható példa az alábbi diagramon. Vegyük észre,hogy az ezen lévő értéken nem a számunkra rendelkezésre álló értékek, azokat ki kellene számítani. Implementációkor viszont inkább használt stratégia ezen elv visszavezetése a rendelkezésre álló értékekre.
+
 
 +
A szimuláció futtatásához meg kell adnunk egy konfigurációs fájlt, ami leírja a szimuláció paramétereit.Ebben kell meghivatkozni a további bemeneti fájlokat. A legfontosabb fájlok a hálózat és az útvonal választás, amelyek önmagukban elegendők a konfiguráció elkészítéséhez.
 +
A konfigurációs fájlban adhatjuk meg az ütemek számát (szimuláció hosszát), illetve a kimenet típusát. Egy lehetséges konfiguráció:
  
A modell tovább fejlesztett változatának (Wiedemann 99) 10 paramétere van. Ez inkább az autópályák forgalmára van kifejlesztve.
+
<configuration>
 +
    <input>
 +
        <net-file value="example.net.xml"/>
 +
        <route-files value="example.rou.xml"/>
 +
    </input>
 +
          <output>
 +
  …
 +
          </output>
 +
    <time>
 +
        <begin value="0"/>
 +
        <end value="10000"/>
 +
    </time>
 +
</configuration>
  
 +
Az útvonal választási fájl tartalmazza a járművek leírását, pl.:
 +
  <routes>
 +
    <vType accel="1.0" decel="5.0" id="Car" length="2.0" maxSpeed="100.0" sigma="0.0" />
 +
    <route id="route0" edges="1to2 out"/>
 +
    <vehicle depart="1" id="veh0" route="route0" type="Car" />
 +
  </routes>
  
====Krauss====
+
A járművekre megadhatjuk a kategória méretét, gyorsulási és fékezési kapacitását, illetve a hozzá tartozó jármű követési modellt és annak paramétereit. Lehetőség van a grafikus megjelenítés módosítására is. Láthatjuk, hogy egy jármű valójában egy jármű típus és a hozzá tartozó útvonal. További paraméterek is megadhatók opcionálisan, például a kezdeti sebesség.
  
A SUMO a Krauss modelt használja alapértelmezésként. Ez a modell a biztonságos sebességet adja meg. Itt a modell közvetlenül megadja az új sebességet. Előnye, hogy jól paraméterezhető, akár különböző forgalmi szituációkra különböző viselkedést is definiálhatunk. Sőt a SUMO képes különböző járművek esetén is különböző paraméterezést használni. Ezzel szimulálva az agrasszív és a "szőke" vezetőket is. Az útviszonyok is ezen paraméterek beállításával történhet. Bár a SUMO ezt nem támogatja közvetlenül.
+
A szimuláció futtatása a <code>sumo -c <konfigurációs fájl>.sumocfg</code> utasítással történik.
 +
Amennyiben vizualizálni is szeretnénk a szimulációt, a <code>sumo-gui -c <konfigurációs fájl>.sumocfg</code> utasítást használhatjuk.
  
===Modul szerkezet===
+
====Kimenet====
  
A modul szerkezet kialakításánál a funkciók elkülönítését tartották szemelőtt. A nyílt forráskód miatt ez igen hasznos. Két szemszögből is, az egyik, hogy az egyikben vétett hiba a másikban nem jelentkezik. A másik, hogy így szakértői területek szerint is tagolódik. Érdekessége viszont, hogy a különböző modulok nem minden esetben vannak össze integrálva.
+
A szimulációt sokféle célból tehetjük, mindegyik más és más analizálási módszert követel meg. Ezért a SUMO többféle kimenet típust is támogat.
 +
* [[VTK format]]: Minden jármű sebességét és pozíciójából készít fájlokat VTK formátumban.
 +
* [[FCD]] Floating Car Data): Minden szimulációs ütemben, minden jármű neve, típusa, sebessége, és iránya pozíciója tárolódik.
 +
* [[Detektoros mérés]]: Lehetőségünk van induktív hurokdetektorok és azonnali induktív hurokdetektorok elhelyezésére a hálózaton. Előbbi folyam adatokat is tud mérni, például a forgalom eloszlása időben.
 +
* [[Jármű utazásokról információ]]: Az egyes járművek által kibocsátott káros anyag, vagy elhasznált üzemanyag adatait kaphatjuk meg.
 +
* [[Információk a szimuláció jelenlegi állásáról]], ami online szimuláció esetén érdekes.
  
A szoftver rendszer az alábbi modulokból áll:
+
====Tömegközlekedés====
  
* '''DFRouter:''' Utvonal készítés ciklussal indukálva
+
A SUMO képes tömegközlekedést is szimulálni a menetrend és megállók megadásával. Pl.:
* '''Daurouter:''' Legrövidebb út választása
+
  <routes>
* '''Foreign:''' külső packagek interfészelése, úgy mint R fa, openGl stb…
+
    <vtype id="BUS" accel="2.6" decel="4.5" sigma="0.5" length="15" maxspeed="70" color="1,1,0"/>
* '''GUI:''' graphical itnerface in Qt
+
    <vehicle id="0" type="BUS" depart="0" color="1,1,0">
* '''GUInetLader:''' Hálózat megjeleníítése
+
        <route edges="2/0to2/1 2/1to1/1 1/1to1/2 1/2to0/2 0/2to0/1 0/1to0/0 0/0to1/0 1/0to2/0 2/0to2/1"/>
* '''GUISim:''' Szimuláció megjelenítése
+
        <stop busStop="busstop1" duration="20"/>
* '''jtrrouter:''' Útvonal készítés junction swichelési módszerrel
+
        <stop busStop="busstop2" duration="20"/>
* '''microsim:''' A simuláció futatása, ez tartalmazza pl a járművek jármű típusok definícióját
+
        <stop busStop="busstop3" duration="20"/>
* '''netbuild:''' Az útvonal hálózat gráfjának elkészítése, és módosítása szimuláció könnyű futatásához, pl hurokélek transzformálása
+
        <stop busStop="busstop4" duration="20"/>
* '''netgen:''' absztrakt network
+
    </vehicle>
* '''netimport:''' Úthálózat importálása
+
  </routes>
* '''od2trips:''' OD mátrixból generál utakat
 
* '''polyconvert:''' A „tájat” adja hozzá a hálózathoz, tehát a térkép szinezését végzi
 
* '''router:''' alapértelmezett útválasztóó modell
 
* '''utils:''' globális segéd osztályok gyüjteménye
 
  
===Projekt szervezés===
+
===Grafikus felület===
  
A SUMO egy open source szoftver, tehát nyilt repozitorival kell, hogy rendelkezzen. A ticketing rendszere is nyílt. A projekt szervezéséhez a Trac nevű eszközt használják, ez wikioldalt, ticketing rendszert és verzió kontrolt is tartalmaz.
+
A SUMO grafikus felülete független program a többi modultól, ő is csak a <code>sumo</code> parancsot hívja. Alkalmas arra, grafikus visszajelzést adjon a szimuláció aktuális állapotáról. A kirajzolása nem látványos, de könnyen értelmezhető. Lehetőséget ad a szimuláció szüneteltetésére, a forgalom megváltoztatására szimuláció közben (pl. dugó miatt az emberek későbbre halasztják a bevásárlást), illetve megadhatjuk a szimuláció sebességét.  Hibája, hogy mindig kirajzolja a teljes látható szimulációs területet, még akkor is ha a felbontás miatt nem is lehet látni a járműveket. Ez jelentős korlátot szab a SUMO-ban a vizualizált szimuláció futtatására.
 +
Nem biztosít lehetőséget a beállítások megváltoztatására, arra csak XML fájlban van lehetőség, pl. a színezés és a jármű alakzatok megadására, továbbá helyezhetünk műholdas, vagy légifelvételt is a szimuláció mögé.
 +
A moduláris felépítése lehetővé teszi a bővítést, és új menüpontok könnyű felvételét.
  
==Használata==
+
===Kiegészítő eszközök===
  
===Kiegészítő Eszközök===
+
A grafikus felületű szimulációs alkalmazás mellett a SUMO cosmagjai között találunk számos konzolos segédalkalmazást, amely elsősorban az adatokat szolgáltatják a szimuláció számára.
  
 
====Hálózat generátor====
 
====Hálózat generátor====
  
A hálózat építést a netconvert nevű program végzi.
+
A hálózat építést a '''netconvert''' modul végzi, amely XML fájlok alapján tudja felépíteni a gráfot. Ehhez három bementi fájl szükséges.  
Három inputra van szüksége:  
+
* A csúcsok leírása, ahol a <code><nodes></code> elemben kell megadni <code><node></code> elemek sorozatát. Minden elem tartalmaz egy azonosítót (<code>id</code>), illetve egy X és egy Y koordinátát. Pl.:
  
* Csúcsokat leíró xml file, pl.:  hello.nod.xml
 
 
   <nodes>
 
   <nodes>
 
     <node id="1" x="-500.0" y="0.0" />
 
     <node id="1" x="-500.0" y="0.0" />
81. sor: 135. sor:
 
   </nodes>
 
   </nodes>
  
* Utakat leíró xml file, pl: hello.edg.xml
+
* Utak leírása, ahol a <code><edges></code> elemben kell megadni <code><edge></code> elemek sorozatát. Minden elem tartalmaz egy azonosítót (<code>id</code>), forrás (<code>from</code>) és cél (<code>to</code>) csúcs azonosítókat, valamint típust (<code>type</code>).
 
   <edges>
 
   <edges>
     <edge from="1" id="1to2" to="2" type=”a” />
+
     <edge from="1" id="1to2" to="2" type=”highway.motorway” />
     <edge from="2" id="out" to="3"  type=”b”/>
+
     <edge from="2" id="out" to="3"  type=”highway.residential”/>
 
   </edges>
 
   </edges>
  
* kereszteződéseket leíró xml file
+
* Úttípusok leírása leírása, amely tartalmazza minden azonosítóhoz (<code>id</code>) az út prioritását (<code>from</code>, a magasabb prioritású utakat előnyben részesíti az útvonal tervező), a sávok számát (<code>numLanes</code>, ami legalább 1), használhatóságát (<code>allow</code>, <code>disallow</code>, amellyel korlátozhatjuk a forgalmat), egyirányúsítást (<code>oneway</code>), valamint a maximális sebességet (<code>speed</code>).
  <edges>
 
    <edge from="1" id="1to2" to="2" type=”a” />
 
    <edge from="2" id="out" to="3"  type=”b”/>
 
  </edges>
 
 
 
* kereszteződéseket leíró xml file
 
 
   <types>
 
   <types>
  <type id="a" priority="3" numLanes="3" speed="13.889"/>
+
    <type id="highway.motorway" priority="13" numLanes="2" speed="44.0" />
  <type id="b" priority="3" numLanes="2" speed="13.889"/>
+
    <type id="highway.residential" priority="4" numLanes="1" speed="13.889" />
  <type id="c" priority="2" numLanes="3" speed="13.889"/>
 
 
   </types>
 
   </types>
  
Az utakhoz rendelhetünk prioritást, és funkcionalitást. Az utat sávokra oszthatjuk. Pontosabban minden élhez kell, hogy tartozzon egy vagy több sáv.
+
A három fájlból a netconvert egy közös úthálózatot állít elő, pl.:
 +
<code>netconvert --node-files=example.nod.xml –type-files=example.typ.xml --edge-files=example.edg.xml --output-file=mynetwork.net.xml</code>
 +
 
 +
A '''netconvert''' alkalmas arra is, hogy más formátumokból töltsünk be úthálózatot, úgymint <span class="plainlinks">[https://hu.wikipedia.org/wiki/OpenStreetMap OpenStreetMap]</span>, pl.: <code>netconvert --osm-files asd.osm -o mynetwork.net.xml</code>
 +
 
 +
====Térkép megjelenítés====
 +
 
 +
A '''polyconvert''' alkalmazás lehetővé teszi az importált térképek megjelenítésének  hozzáadását a hálózathoz.
 +
Pl.: <code>polyconvert --net-file example.net.xml --osm-files map.osm --type-file typemap.xml -o mymap.poly.xml</code>
 +
 
 +
====Forgalom generálás====
  
Alább látható egy példa a netconvert használatára, ennek az outputja a generált hálózat, példánkban a hello.net.xml
+
Amennyiben a hálózatunk már rendelkezésre áll, az alábbi módokon generálhatunk hozzá forgalmat.
  netconvert --node-files=hello.nod.xml –type-files=hello.typ.xml --edge-files=hello.edg.xml --output-file=hello.net.xml
+
* Útvonalak megadásával (''trip definitions''): megadjuk a kezdeti és a végcsúcsot, illetve az indulási időt, a '''duarouter''' képes az útvonalakat utakká konvertálni, használata: <code>duarouter --flows=<FLOW_DEFS> --net=<SUMO_NET> --output-file=MySUMORoutes.rou.xml</code>.
 +
* Forgalom folyam megadásával (''flow definitions''), amely lényegében megegyezik az útvonal megadásával, azonban itt a két pont között nem egy, hanem több jármű fog közlekedni.
 +
* Véletlenszerű (''randomization'') a leggyorsabb módja, ha forgalmat akarunk generálni, de természetesen valószerűtlen szituációkat okozhat. A véletlenszerű generálást a <code>Tools/Trip#randomTrips.py</code> fájllal végezhetjük.
 +
* OD mátrixok (''OD-matrices'') alapján, amelyek gyakran elérhetőek forgalmi hatóságoktól. Az OD mátrix egy <math>(i,j)</math> eleme azt reprezentálja hogy jármű megy <math>i</math> zónából <math>j</math> zónába. A mátrixot használat előtt át kell konvertálni útvonalakká az '''od2trips''' modullal, használata: <code>od2trips -n <NET> -d <MATRIX> -o <TRIP_DEFS></code>.
 +
* Forgalmi folyam és kanyarodási szándék megadásával a kereszteződésekben. A '''jtrrouter''' alkalmazásban megadjuk a járművek haladási szándékát, illetve kanyarodási irányukat minden kereszteződésnél.
 +
* Detektorok (''detector data'') és mérési pontok (''observation points'') használatával. Indukciós hurok és egyéb eszközökkel gyakran vizsgálják a forgalmat, amely adatok alapján a '''dfrouter''' egy megfelelő forgalmat generál. Ez önmagában a gyakorlatban csak igen kis területre ad valósághű eredményt. Használata: <code>dfrouter --net-file <asdad> --detector-files <DETECTOR_FILE></code>, ahol a forrásfájl egy XML állomány, ami leírja a detektorokkal mért értékeket.
 +
* Népesség statisztikák alapján, amihez utcaszintű statisztikák szükségesek. Az '''activitygen''' alkalmazással képes népességi statisztikákból forgalmat generálni. Itt olyan adatokra kell gondolni, hogy egy utcában hány háztartás van és hány munkahely, az emberek átlagosan milyen messze és mikor járnak dolgozni, stb. Tehát ilyen hipotézisek szerint dolgozik, az emberek dolgozni, vásárolni járnak, gyereket visznek az iskolába stb. Emellett meg kell adni a városból kimenő és a városba érkező forgalmat (többnyire városra vagy kerületre értelmes). Ezekhez városkapukat is definiálnunk kell, ezeken keresztül megy ki és érkezik be a forgalom. Használata: <code>activitygen --net-file <NET> --stat-file <STATISTICS> --output-file <ROUTES> --random</code>
 +
* Kézzel, vagyis mi írjuk le pontosan a forgalmat.
  
A netconvert nem csak általunk definiált hálózat készítésére alkalmas. Ez igen hasznos funkció, mert általában egy létező topológiát akarunk használni. Azaz importálhatunk hálózatot más formátumokból. Például open streat map export fájlt a következő képen használhatjuk SUMO hálózat építésére
+
=Kapcsolódó szócikkek=
  netconvert --osm-files asd.osm -o asd.net.xml
+
* [[MATSim]]
  
===Szimuláció===
+
=Szakirodalom=
 +
* Krajzewicz, Daniel, et al. [http://elib.dlr.de/6661/ "SUMO (Simulation of Urban MObility)-an open-source traffic simulation"], ''Proceedings of the 4th Middle East Symposium on Simulation and Modelling'' (MESM20002). 2002.
 +
* Krajzewicz, Daniel. [http://link.springer.com/chapter/10.1007/978-1-4419-6142-6_7 "Traffic simulation with SUMO–simulation of urban mobility"], ''Fundamentals of traffic simulation''. Springer New York, 2010. 269-293.
 +
* Potári, Gábor, Vincellér, Zoltán , Ács, Zoltán. [http://icai.ektf.hu/icai2014/papers/ICAI.9.2014.2.41.pdf "A method for real-time adaptation of weather conditions within a trac simulation"], ''Proceedings of the 9th International Conference on Applied Informatics'' 2:41-47. 2014.
  
===Grafikus Interfész===
+
=Külső hivatkozások=
 +
* [http://sumo-sim.org/ A SUMO hivatalos honlapja]
 +
* [http://sourceforge.net/projects/sumo/ A SUMO forráskódja]
 +
* [http://www.dlr.de/ts/en/desktopdefault.aspx/tabid-9883/16931_read-41000/ DLR - Institute of Transportation Systems - SUMO]

A lap jelenlegi, 2016. július 7., 12:50-kori változata

A SUMO (Simulation of Urban MObility) egy közúti, tömegközlekedési és vasúti mikroszimulációs nyílt forráskódú szoftver. Felhasználását tekintve alkalmas kereszteződések, lokális úthálózatok, lámpabeállítások, menetrendek tervezésének támogatásához, illetve teszteléséhez. Lehetőséget nyújt úgynevezett online szimulációhoz, vagyis a szimuláció közben az adatok változtatására, úgymint úthálózat (pl. baleset előidézése), forgalmi lámpák (pl. napszaktól függő lámaváltás, detektorok használata). A szoftverben a mikro modellt ágens alapú szimuláció valósítja meg, amely járműszinten szimulálja a forgalmat.

A SUMO széles körben használt út hálózat tervezéshez, menetrend készítéshez. Kedvelt ingyenes mivolta miatt akadémiai körökben. A felhasználására jó példa többek közt a TurboTraffic. Ahol ugyan saját felhasználói felületet használnak hozzá, de a szimulációt a SUMO biztosítja.


Története

A SUMO-t 2000-ben kezték el írni, ​GPLv3-el. Az első verzió 2009-ben készült el. Jelenleg 0.13.0-ás verzió a legújabb. Célja a közúti forgalom kutatások támogatása.

Telepítés

Elérhető Windowsra, Suse Linuxra, Fedorára, Scientific-re és Ubuntura is. Nyílt forráskódú jellegéből következik, hogy buildelhető tetszőleges környezetben, természetesen ehhez szükséges Qt és Python támogatás.

Architektúra

A SUMO alapvetően C++-ban írt szoftver, a hozzá tartozó kiegészítő eszközök Pythonban írt szkriptek. A grafikus felülete Qt-ban íródott.

A szoftver objektumorientált megvalósítású, modularizált szerkezetű, jól elkülönítve a szakértői területeket. Érdekessége viszont, hogy a különböző modulok nem minden esetben vannak össze integrálva. A rendszert felépítő modulok a következők.

  • microsim: A szimuláció futtatását biztosító modul, tartalmazza többek között a járművek jármű típusok definícióját.
  • netgenerate: Absztrakt úthálózatok generálását teszi lehetővé.
  • netbuild: Az útvonal hálózat gráfjának elkészítését, és módosítását valósítja meg szimuláció könnyű fútatásához (pl. hurokélek transzformálása).
  • netimport: Úthálózat importálását biztosítja.
  • od2trips: OD mátrixból történő útgenerálást biztosít.
  • router: Az alapértelmezett útvonal kereső modell.
  • daurouter: Legrövidebb útvonal keresése.
  • dfrouter: Útvonal tervezés ciklussal indukálva.
  • jtrrouter: Útvonal tervezés "junction swiching" módszerrel.
  • polyconvert: Az úthálózaton felülei tértképi elemek ábrázolását teszi lehetővé.
  • GUI: A grafikus felhasználói felület modulja Qt-ban.
  • GUInetloader: Úthálózat megjelenítése.
  • GUIsim: Szimuláció megjelenítése.
  • foreign: külső csomagok egységes felületét biztosítja (pl. R-fa, OpenGL támogatás).
  • utils: globális segédfunkciók gyűjteménye.


Matematikai háttér

A SUMO matematikai modellek segítségével kezeli a járműveket és a forgalmat, így például a járművek haladási sebességét.

Krauss modell

A Krauss modell a biztonságos sebességet adja meg, és közvetlenül megadja az új sebességet. Előnye, hogy jól paraméterezhető, akár különböző forgalmi szituációkra különböző viselkedést is definiálhatunk. Sőt a SUMO képes különböző járművek esetén is különböző paraméterezést használni. Ezzel szimulálva az agresszív és a kevésbé jártas vezetőket is. Az útviszonyok is ezen paraméterek beállításával történhet, bár a SUMO ezt nem támogatja közvetlenül.

Wiedemann modell

A Wiedermann modellnek két változata is létezik, a 74-es és a 99-es. Utóbbival különböző sebesség tartományokban más-más viselkedéssel ruházhatjuk fel a járműveket, ezzel alkalmassá válik országúti forgalom modellezésére, de a városi forgalom esetén a túl sok paraméter miatt nehézkes a paraméterezése. A modell egyszerű nulladrendű képlettel adja meg a kívánt követési távolságot. Ennek kiértékelése során kell eldönteni, hogy az adott jármű hogyan változtassa a sebességét. Erre is ad kiszámítási módot a modell.

A modell leírható a következő lineáris összefüggéssel:

ahol

  • a sebesség,
  • a biztonságos távolság,
  • a biztonságos távolsági komponens,
  • paraméter 0 és 1 közti érték, általában 0.5,0.15-ös standard eltérés mellett. Ha determinisztikus modellre van szükség, akkor a választást használják.

Az első lökhárítók közti távolság az képlettel írható le, ahol a nyugalmi távolságuk, vagyis , ahol kalibrációs paraméter, pedig a követett jármű hossza. A és a értékek becsülhetők a kapacitás mértékéből. A modell a szükséges követési távolságot határozza meg, tehát a sebesség meghatározása további számításokat igényel.

Bizonyos implementációkban az additív kalibrációs paramétert elhagyják, a SUMO-ban, pedig fixen 1.

Használata

A szimuláció futtatásához meg kell adnunk egy konfigurációs fájlt, ami leírja a szimuláció paramétereit.Ebben kell meghivatkozni a további bemeneti fájlokat. A legfontosabb fájlok a hálózat és az útvonal választás, amelyek önmagukban elegendők a konfiguráció elkészítéséhez. A konfigurációs fájlban adhatjuk meg az ütemek számát (szimuláció hosszát), illetve a kimenet típusát. Egy lehetséges konfiguráció:

<configuration>
   <input>
       <net-file value="example.net.xml"/>
       <route-files value="example.rou.xml"/>
   </input>
          <output>
 	…
          </output>
   
</configuration>

Az útvonal választási fájl tartalmazza a járművek leírását, pl.:

 <routes>
   <vType accel="1.0" decel="5.0" id="Car" length="2.0" maxSpeed="100.0" sigma="0.0" />
   <route id="route0" edges="1to2 out"/>
   <vehicle depart="1" id="veh0" route="route0" type="Car" />
 </routes>

A járművekre megadhatjuk a kategória méretét, gyorsulási és fékezési kapacitását, illetve a hozzá tartozó jármű követési modellt és annak paramétereit. Lehetőség van a grafikus megjelenítés módosítására is. Láthatjuk, hogy egy jármű valójában egy jármű típus és a hozzá tartozó útvonal. További paraméterek is megadhatók opcionálisan, például a kezdeti sebesség.

A szimuláció futtatása a sumo -c <konfigurációs fájl>.sumocfg utasítással történik. Amennyiben vizualizálni is szeretnénk a szimulációt, a sumo-gui -c <konfigurációs fájl>.sumocfg utasítást használhatjuk.

Kimenet

A szimulációt sokféle célból tehetjük, mindegyik más és más analizálási módszert követel meg. Ezért a SUMO többféle kimenet típust is támogat.

  • VTK format: Minden jármű sebességét és pozíciójából készít fájlokat VTK formátumban.
  • FCD Floating Car Data): Minden szimulációs ütemben, minden jármű neve, típusa, sebessége, és iránya pozíciója tárolódik.
  • Detektoros mérés: Lehetőségünk van induktív hurokdetektorok és azonnali induktív hurokdetektorok elhelyezésére a hálózaton. Előbbi folyam adatokat is tud mérni, például a forgalom eloszlása időben.
  • Jármű utazásokról információ: Az egyes járművek által kibocsátott káros anyag, vagy elhasznált üzemanyag adatait kaphatjuk meg.
  • Információk a szimuláció jelenlegi állásáról, ami online szimuláció esetén érdekes.

Tömegközlekedés

A SUMO képes tömegközlekedést is szimulálni a menetrend és megállók megadásával. Pl.:

 <routes>
   <vtype id="BUS" accel="2.6" decel="4.5" sigma="0.5" length="15" maxspeed="70" color="1,1,0"/>
   <vehicle id="0" type="BUS" depart="0" color="1,1,0">
       <route edges="2/0to2/1 2/1to1/1 1/1to1/2 1/2to0/2 0/2to0/1 0/1to0/0 0/0to1/0 1/0to2/0 2/0to2/1"/>
       <stop busStop="busstop1" duration="20"/>
       <stop busStop="busstop2" duration="20"/>
       <stop busStop="busstop3" duration="20"/>
       <stop busStop="busstop4" duration="20"/>
   </vehicle>
 </routes>

Grafikus felület

A SUMO grafikus felülete független program a többi modultól, ő is csak a sumo parancsot hívja. Alkalmas arra, grafikus visszajelzést adjon a szimuláció aktuális állapotáról. A kirajzolása nem látványos, de könnyen értelmezhető. Lehetőséget ad a szimuláció szüneteltetésére, a forgalom megváltoztatására szimuláció közben (pl. dugó miatt az emberek későbbre halasztják a bevásárlást), illetve megadhatjuk a szimuláció sebességét. Hibája, hogy mindig kirajzolja a teljes látható szimulációs területet, még akkor is ha a felbontás miatt nem is lehet látni a járműveket. Ez jelentős korlátot szab a SUMO-ban a vizualizált szimuláció futtatására. Nem biztosít lehetőséget a beállítások megváltoztatására, arra csak XML fájlban van lehetőség, pl. a színezés és a jármű alakzatok megadására, továbbá helyezhetünk műholdas, vagy légifelvételt is a szimuláció mögé. A moduláris felépítése lehetővé teszi a bővítést, és új menüpontok könnyű felvételét.

Kiegészítő eszközök

A grafikus felületű szimulációs alkalmazás mellett a SUMO cosmagjai között találunk számos konzolos segédalkalmazást, amely elsősorban az adatokat szolgáltatják a szimuláció számára.

Hálózat generátor

A hálózat építést a netconvert modul végzi, amely XML fájlok alapján tudja felépíteni a gráfot. Ehhez három bementi fájl szükséges.

  • A csúcsok leírása, ahol a <nodes> elemben kell megadni <node> elemek sorozatát. Minden elem tartalmaz egy azonosítót (id), illetve egy X és egy Y koordinátát. Pl.:
 <nodes>
   <node id="1" x="-500.0" y="0.0" />
   <node id="2" x="+500.0" y="0.0" />
   <node id="3" x="+501.0" y="0.0" />
 </nodes>
  • Utak leírása, ahol a <edges> elemben kell megadni <edge> elemek sorozatát. Minden elem tartalmaz egy azonosítót (id), forrás (from) és cél (to) csúcs azonosítókat, valamint típust (type).
 <edges>
   <edge from="1" id="1to2" to="2" type=”highway.motorway” />
   <edge from="2" id="out" to="3"  type=”highway.residential”/>
 </edges>
  • Úttípusok leírása leírása, amely tartalmazza minden azonosítóhoz (id) az út prioritását (from, a magasabb prioritású utakat előnyben részesíti az útvonal tervező), a sávok számát (numLanes, ami legalább 1), használhatóságát (allow, disallow, amellyel korlátozhatjuk a forgalmat), egyirányúsítást (oneway), valamint a maximális sebességet (speed).
 <types>
    <type id="highway.motorway" priority="13" numLanes="2" speed="44.0" />
    <type id="highway.residential" priority="4" numLanes="1" speed="13.889" />
 </types>

A három fájlból a netconvert egy közös úthálózatot állít elő, pl.: netconvert --node-files=example.nod.xml –type-files=example.typ.xml --edge-files=example.edg.xml --output-file=mynetwork.net.xml

A netconvert alkalmas arra is, hogy más formátumokból töltsünk be úthálózatot, úgymint OpenStreetMap, pl.: netconvert --osm-files asd.osm -o mynetwork.net.xml

Térkép megjelenítés

A polyconvert alkalmazás lehetővé teszi az importált térképek megjelenítésének hozzáadását a hálózathoz. Pl.: polyconvert --net-file example.net.xml --osm-files map.osm --type-file typemap.xml -o mymap.poly.xml

Forgalom generálás

Amennyiben a hálózatunk már rendelkezésre áll, az alábbi módokon generálhatunk hozzá forgalmat.

  • Útvonalak megadásával (trip definitions): megadjuk a kezdeti és a végcsúcsot, illetve az indulási időt, a duarouter képes az útvonalakat utakká konvertálni, használata: duarouter --flows=<FLOW_DEFS> --net=<SUMO_NET> --output-file=MySUMORoutes.rou.xml.
  • Forgalom folyam megadásával (flow definitions), amely lényegében megegyezik az útvonal megadásával, azonban itt a két pont között nem egy, hanem több jármű fog közlekedni.
  • Véletlenszerű (randomization) a leggyorsabb módja, ha forgalmat akarunk generálni, de természetesen valószerűtlen szituációkat okozhat. A véletlenszerű generálást a Tools/Trip#randomTrips.py fájllal végezhetjük.
  • OD mátrixok (OD-matrices) alapján, amelyek gyakran elérhetőek forgalmi hatóságoktól. Az OD mátrix egy eleme azt reprezentálja hogy jármű megy zónából zónába. A mátrixot használat előtt át kell konvertálni útvonalakká az od2trips modullal, használata: od2trips -n <NET> -d <MATRIX> -o <TRIP_DEFS>.
  • Forgalmi folyam és kanyarodási szándék megadásával a kereszteződésekben. A jtrrouter alkalmazásban megadjuk a járművek haladási szándékát, illetve kanyarodási irányukat minden kereszteződésnél.
  • Detektorok (detector data) és mérési pontok (observation points) használatával. Indukciós hurok és egyéb eszközökkel gyakran vizsgálják a forgalmat, amely adatok alapján a dfrouter egy megfelelő forgalmat generál. Ez önmagában a gyakorlatban csak igen kis területre ad valósághű eredményt. Használata: dfrouter --net-file <asdad> --detector-files <DETECTOR_FILE>, ahol a forrásfájl egy XML állomány, ami leírja a detektorokkal mért értékeket.
  • Népesség statisztikák alapján, amihez utcaszintű statisztikák szükségesek. Az activitygen alkalmazással képes népességi statisztikákból forgalmat generálni. Itt olyan adatokra kell gondolni, hogy egy utcában hány háztartás van és hány munkahely, az emberek átlagosan milyen messze és mikor járnak dolgozni, stb. Tehát ilyen hipotézisek szerint dolgozik, az emberek dolgozni, vásárolni járnak, gyereket visznek az iskolába stb. Emellett meg kell adni a városból kimenő és a városba érkező forgalmat (többnyire városra vagy kerületre értelmes). Ezekhez városkapukat is definiálnunk kell, ezeken keresztül megy ki és érkezik be a forgalom. Használata: activitygen --net-file <NET> --stat-file <STATISTICS> --output-file <ROUTES> --random
  • Kézzel, vagyis mi írjuk le pontosan a forgalmat.

Kapcsolódó szócikkek

Szakirodalom

Külső hivatkozások