MATSim labor

Közúti forgalom szimuláció

A közúti forgalom számítógpes szimulációja egyike a számítógépek első felhasználási módjának: az 1960-as évektől segítik az út- és várostervezők munkáját. Azóta a fokozódó urbanizáció, a matematikai modellek és a számítógépes hardware-ek és fejlesztőeszközök fejlődése egyre nagyobb méretű és egyre komplexebb szimulációkat hívott életre. Megjelentek a forgalom-szimulációs rendszerek, melyek különböző léptékben egy kereszteződéstől egy országos úthálózatig modellezik a közlekedőket.

MATSim

A MATSim egy nyílt forráskódú, forgalomszimulációs keretrendszer. Java nyelven fejlesztették, és fel van készítve rá, hogy Java nyelven kiterjesztésekkel egészítse ki a felhasználó. Mára sok ilyen kiterjesztés része lett a hivatalos disztribúciónak.

A működés során a keretrendszer ágensek viselkedését szimulálja egy megadott hálózat fölött. A rendszer minden paramétere finomhangolható, a felhasználók céljaitól, preferenciáitól és lehetőségeitől az úthálózaton át a különböző közlekedési módok működéséig. A különböző kiegészítő funkciók segítségével modellezhetőek a kommunikáció hatásai a közlekedésre, katasztrófák, akár egy zombi-apokalipszis első napja is. A MATSim ugyanis a résztvevők napi rutinját szimulálja: egy szimulációs iteráció 24 órát ölel fel. A keretrendszer több 24 órás iterációban próbálja meg a felhasználók viselkedését a közlekedési hálózathoz és a megadott korlátozásokhoz igazítani. Ehhez először különböző lehetőségeket kell definiálni minden felhasználó számára: korábban vagy később indul-e, elviszi-e a gyereket az iskolába, ebédszünetben vagy munka után vásárol-e, stb. Ezt követően a keretrendszer kiválasztja a felhasználó számára az aznapi tervet, ennek a mentén szimulálja a populáció egy napját, majd egyesével kiértékeli a napok sikerességét, és az egymást követő iterációk nyomán rangsorolja a terveket. A szimuláció megadott számú iterációig folyik, jó esetben a globális optimum felé konvergálva.

A Scenario Gallery oldalon van egy pár példa arra, hogy a MATSim szimulátor segítségével hogyan optimalizálták egy-egy város vagy régió közlekedési rendszerét.

A MATSim rövid dokumentációja elérhető User Guide néven, letölthető pdf formátumban. Ez a nagy MATSim könyvből (aminek a publikus verziója 2016-ban frissült utoljára) összeszedi a fejezeteket, amik egy kezdő számára a leghasznosabbak. Az ebben a segédletben található ábrák a MATSim könyv ResearchGate-en elérhető részletéből származnak.

Bemenő paraméterek

A bemenő paraméterek közül a két legfontosabb, a hálózat és a populáció. A populáció tartalmazza a felhasználói igényeket, míg a hálózat a rendelkezésre álló lehetőségeket. A szimuláció során a rendszer az egyéb kapott paraméterek alapján próbálja meg maximálisan kielégíteni a felhasználói igényeket az adott lehetőségekhez igazodva.

A hálózat lehet egy fiktív hálózat, de lehetőség van az Open Street Map adatbázisából importálni úthálózat-részleteket. A hálózatot a MATSim egy irányított gráf formájában ábrázolja. A csomópontok koordinátáit euklideszi térben kell megadni. Az utak ezek közt a csomópontok közt feszülő élek, melyeknek a hossza legalább a végpontok koordinátáiból adódó hossz, de értelemszerűen lehetnek hosszabbak is.

A populáció igényeit már nem ennyire könnyű a valóságból meríteni, mivel minden felhasználó napi tervéhez pontos címeket kell használni. Ehhez tudni kellene személyre lebontva, hogy a felhasználó hol lakik, hova jár dolgozni, hol vásárol, hol ebédel, stb. Emellett tudni kellene azt is, hogy mennyi időt tölt naponta a különböző tevékenységekkel. Ilyen adathalmazok egyelőre legfeljebb a Google-nél és a Tencent-nél állnak rendelkezésre, ezért ezeket a lehetőségek szerint kell közelíteni.

Szintén a bemeneti paraméterek közt kell meghatározni, hogy az egyes közlekedési módokhoz és tevékenységekhez milyen hasznosság tartozik, hogy milyen stratégia szerint kell a lehetséges tervek közül választani, és hogy milyen újratervezési lehetőségek megengedettek. Ezeket az adatokat nem felhasználónként, hanem a teljes populációra kell megadni.

Terv kiválasztása

Egy felhasználóhoz különböző tervek rögzíthetőek a konfigurációs file-ban, e mellett az iteráció végén a keretrendszer új terveket is származtathat az elérhetőekből. A keretrendszer minden iteráció elején minden felhasználónak választ egyet a tervei közül, melyet aznap végre fog hajtani. A konfiguráció során megadható, hogy melyik terv kerüljön kiválasztásra. Első futás esetén ez véletlenszerűen kerül meghatározásra, mivel minden terv egyenrangú. A későbbi iterációk során már rendelkezésre áll az adott tervvel korábban elért pontszám, és ez is figyelembe vehető a választásnál. A konfigurációban meghatározható, hogy egy választási stratégiát milyen valószínűséggel használjon a rendszer. A választási stratégiák az alábbiak.

KeepLastSelected

Megtartja a legutóbb használt tervet

BestScore

A legjobb eredményt elért tervet használja újra.

SelectExpBeta

A pontszámok alapján egy bonyolult modellt használva rendel valószínűségeket a tervekhez, és majd véletlenszerűen választ.

ChangeExpBeta

Mint a SelectExpBeta, de nem az abszolút pontszámokat használja a valószínűségek meghatározásához, hanem a legutolsó futás során elért pontszámhoz képest számolt különbséget.

SelectRandom

Egyenlő valószínűséggel választ a különböző tervek közül.

Mobilitás szimuláció

A MATSim keretrendszer különböző részletességű mobilitás modelleket támogat. Az alapértelmezett mobilitás szimulátor a QSim, mely nagy számú jármű kezeléséhez optimalizált, folyam-megközelítést használ. A modell topológiai felbontása link-szintű, a felhasználók akkor érnek célba, amikor megérkeznek a célponthoz legközelebbi linkhez, és annak a linknek az elején folytatják útjukat a tevékenység végeztével. A mozgás modellezésének alapegysége is a link, a járművek linken belüli mozgását, követési távolságot, sávváltást, előzést a QSim nem modellez, csak a linkek váltásával kapcsolatos eseményeket kezeli a szimulátor. A link váltások sem tartalmazzák a forgalomirányítási szabályokat. Nincsenek lámpaváltások, minden linknek meg van határozva a kimeneti kapacitása, ezzel a kapacitással hagyhatják el a közlekedők a linket, függetlenül attól, hogy az adott csomópont milyen kereszt- vagy szembeirányú forgalmat bonyolít, vagy hogy melyik irányba haladnak tovább az autósok. Ezek az elhanyagolások teszik lehetővé, hogy a QSim akár több százezer járművet is tudjon kezelni egyidőben.

A linkre belépő jármű a link hosszának megfelelő időt tölt a linken, mielőtt megérkezik a link elhagyására váró járművek sorába.

A mobilitás-szimuláció kimenete a QSim által kezelt események sorozata. Ennek tartalma igazodik a QSim által kezelt modellhez.

Pontozás

Miután lezajlott a felhasználók szimulálása, kerül sor az iteráció kiértékelésére. A kiértékelés egy határhasznosság modell alapján történik. Az iterációban elért hasznosság a felhasználó által végzett tevékenységek hasznosságának összege lesz, melyhez hozzáadódik az aktivitások közti utazás hasznossága (ez a gyakorlatban a hasznosság csökkenését jelenti, mert az utazást a felhasználó számára nem hasznos része a napnak).

Aktivitás hasznossága

Az aktivitások hasznosságát a hosszukon kívül további paraméterek is meghatározzák. Büntetést vagy jutalmat vonhat maga után a korai érkezés, például fagyoskodni kell a bezárt ajtó előtt de más esetekben át lehet még nézni a késve kiadott segédletet. Az esetek nagy részében büntetést von maga után a késői érkezés. Ahogyan a tevékenység közben korán elmenni sem feltétlenül előnyös. Mivel a tevékenység hasznosságát a használt módszer egy logaritmikus függvénnyel közelíti, ezért a túl rövid ideig végzett tevékenységre is bevezetésre került egy külön korrekciós tényező (például elmenni egy edzésre, és aztán átöltözés után lelépni kiemelten haszontalan).

Mivel 24 órás ciklust kezel a rendszer, a nap utolsó aktivitása (jellemzően otthon töltött idő) a kiértékeléskor összevonásra kerül a nap első aktivitásával (ami szintén otthon töltött idő). Ez azért fontos, mert a tevékenység hasznossága, és a tevékenységgel egyhuzamban töltött idő közt nem-lineáris az összefüggés. Kétszer öt otthon töltött óránál sokkal jobb egyben 10 órát otthon tölteni, és aludni egy nagyot.

Utazás hasznossága

Az utazás hasznosságát (valójában költségét) az utazott távolság, az utazással töltött idő és az utazás módja határozza meg. Mivel a megtett távolság és az utazás egyszeri költsége sok esetben közvetlenül kifejezhető pénzben is (például benzinköltség, buszjegy ára), ezért ez külön is megjelenik a rendszerben. A pénz és a hasznosság közt ebben a modellben lineáris az összefüggés.

Újratervezés

A napi ciklus végén a keretrendszer végigmegy minden szereplőn, és kialakítja azoknak a terveknek a halmazát, amelyekből a további iterációkban az adott szereplő választhat majd. A tervek új halmazának kialakításához a keretrendszer különböző stratégiák szerint bővítheti az elérhető tervek halmazát. Választhat egy tervet és módosíthatja azt, vagy törölhet az elérhető tervekből, ha azok száma meghaladja a konfigurációban megadott maximális számot.

TimeAllocationMutator

Egy tervet úgy módosít, hogy a különböző indulási időket véletlenszerűen eltolja. A rendszer nem képes rá, hogy teendők sorrendjét megváltoztatva alakítson ki új terveket (például a fodrász után vagy előtt megy a felhasználó a postára), vagy hogy alternatív helyszínek közül válasszon (például különböző bevásárlási vagy sportolási lehetőségek). Szintén nem próbálja meg úgy javítani egy terven a keretrendszer, hogy egy tevékenységet kihagy.

ReRoute

Új útvonalat választ a felhasználó számára a napi útjain. Ehhez olyan útválasztó algoritmust kell megadni a kontrollerben, ami erre lehetőséget ad.

ChangeTripMode, ChangeSingleTripMode

Megváltoztatja a választott közlekedési módot. A ChangeTripMode stratégia a teljes napra változtatja meg a használt közlekedési módot, így egy nap során csak egyféle eszközt használ a felhasználó. A ChangeSingleTripMode egyetlen útnak (például ebédszünetben oda és vissza az étterembe) cseréli le a közlekedési eszközét. Utóbbi figyelembe veszi az autó, busz elérhetőségét is.

MATSim használata

A MATSim keretrendszer egy Java alkalmazásból és annak kiterjesztéseiből áll. Használatának legegyszerűbb módja konfigurációs file-okban meghatározott scenáriók futtatása, és az eredmények elemzése.

Konfigurációs file-ok

A konfigurációs file-ok XML formátumúak. A scenáriót egy file fogja össze, mely hivatkozást tartalmaz a hálózatra és a populációra. Egy minimális konfigurációs file tartalma:

<?xml version="1.0" ?>
<!DOCTYPE config SYSTEM "http://www.matsim.org/files/dtd/config_v2.dtd">
<config>
    <module name="network">
        <param name="inputNetworkFile" value="./network.xml" />
    </module>
    <module name="plans">
        <param name="inputPlansFile" value="./plans.xml" />
    </module>

    <module name="controler">
        <param name="outputDirectory" value="./output" />
        <param name="firstIteration" value="0" />
        <param name="lastIteration" value="0" />
    </module>
    <module name="planCalcScore" >
        <parameterset type="activityParams" >
            <param name="activityType" value="home" />
            <param name="typicalDuration" value="12:00:00" />
        </parameterset>
        <parameterset type="activityParams" >
            <param name="activityType" value="work" />
            <param name="typicalDuration" value="08:00:00" />
        </parameterset>
    </module>
</config>

A fenti konfigurációs file-ban a hivatkozásokon kívül látható tervek kiértékeléséhez szükséges minimális információ: a különböző tevékenységek javasolt hosszúsága. A populáció leírójában ugyanezekkel a nevekkel (home, work) kell majd megjelölni a tevékenységeket, hogy a keretrendszer össze tudja rendelni őket.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE network SYSTEM "http://www.matsim.org/files/dtd/network_v1.dtd">
<network name="square network">
    <nodes>
        <node id="1" x="-40000" y="-40000"/>
        <node id="2" x="40000" y="-40000"/>
        <node id="3" x="40000" y="40000"/>
        <node id="4" x="-40000" y="40000"/>
    </nodes>
    <links capperiod="01:00:00">
        <link id="1" from="1" to="2" length="80000.00" capacity="36000" freespeed="27.78" permlanes="1" />
        <link id="2" from="2" to="3" length="80000.00" capacity="36000" freespeed="27.78" permlanes="1" />
        <link id="3" from="3" to="4" length="80000.00" capacity="36000" freespeed="27.78" permlanes="1" />
        <link id="4" from="4" to="1" length="80000.00" capacity="36000" freespeed="27.78" permlanes="1" />
    </links>
</network>

A második konfigurációs file a hálózat-leíró file. Itt a csúcsokat és az azokat összekötő irányított éleket kell megadni. Kétirányú útvonal esetén mindkét irányt külön linkként kell felvenni. A link paraméterei a kapacitása (hány autó tudja elhagyni a linket a capperiod alatt), a link hossza méterben, a link utazási sebessége m/s-ban, a párhuzamos sávok száma, és természetesen a forrás és célcsomópont.

Végül a populációt leíró file. Az itt mellékelt példa egyetlen felhasználót ír le, nem egy felhasználó fajtát. Minden szimulált felhasználóhoz külön bejegyzést kell felvenni a file-ban.

<?xml version="1.0" ?>
<!DOCTYPE plans SYSTEM "http://www.matsim.org/files/dtd/plans_v4.dtd">
<plans>
    <person id="1">
        <plan>
            <act type="home" x="-40000" y="-40000" end_time="06:00"/>
            <leg mode="car">
            </leg>
            <act type="work" x="40000" y="40000" dur="08:00" />
            <leg mode="car">
            </leg>
            <act type="home" x="-40000" y="-40000" />
        </plan>
    </person>
</plans>

Ennek a felhasználónak egyetlen terve van, otthonról 6-kor elindulva 8 órát tölt bent a munkahelyén. Annak ellenére, hogy a konfigurációs file-ban megadott hasznosságokból analitikus módon meg lehetne határozni, hogy mi az optimális megosztás a munkahelyen és otthon töltött idő közt, meg kell adni a tervben ezeknek a tervezett értékét, különben a MATSim nem tudja futtatni a szimulációt.

Az aktivitások helyszíninek koordinátáit nem kell feltétlenül a hálózat valamelyik csomópontjára tenni, de fontos, hogy az úthálózat segítségével megközelíthető koordinátákat adjunk meg.

Mután elkészültek a konfigurációs file-ok, le lehet futtatni a szimulációt a MATSim GUI segítségével. Ez az alapértelmezetten induló osztály a MATSim futtatható JAR file-ában. A felületen be kell tölteni a konfigurációs file-t, majd elindítani a szimulációt. A szimuláció követhető a log ablakban.

A szimuláció sikeres futása során a keretrendszer létrehoz egy kimeneti könyvtárat. Ez tartalmazza az összefoglaló információkat: a használt konfigurációs file-okat, a futási időket, a futás során elért pontszámot és a futás során utazással töltött távolságot. Az egyes iterációk pontos lefutásai az ITERS könyvtárban találhatóak. Ez tartalmazza a futás eseményeit, valamint idődiagrammokat a különböző közlekedési módok használatáról.

Futási eredmények vizualizációja

A szimuláció kétféleképpen vizualizálható. Az OTFVis program futás közben mutatja meg az eseményeket, míg a Via-val a lefuttatott szimulációk eredményét utólag lehet megtekinteni, visszajátszani lassítva, gyorsítva. A Via egy meglehetősen drága szoftver, azonban 500 szimulált felhasználóig lehet ingyenes licenccel is használni. A Via egyrészt animálja felhasználók mozgását, másrészt megtekinthetőek vele a felhasználók tervei.

A Via első indulásakor kér egy érvényes licencet. Ezt mindenkinek igényelnie kell a licenses oldalról. Az email-ben kapott license.xml.zip állományt le kell tölteni a VM-be, és ezt megadni neki a dialógusablakban, majd alul a Close gombra kattintani.

A Via indítása után a szimuláció eredményeit az output könyvtárból egyesével kell betölteni a rendszerbe. A futás menetét leíró események és tervek az egyes iterációkhoz tartozó könyvtárakban találhatóak. A Via-ba importálni kell a hálózatot (network.xml.gz) és az eseményeket (ITERS/it.0/0.events.xml.gz): vagy File > Add data, vagy a baloldali sávon kiválasztani az adatforrás lapot (három szürke papír) és file kezelőből ide drag&drop.

Ezután hozzá kell adni a megjelenítéshez a rétegeket. File > Add layer, és a dialógusablakban Network, itt automatikusan kitölti a forrás mezőt ha a hálózat jól be lett töltve, alul Add. Ekkor a hálózat láthatóvá válik a fő ablakban, lehet zoomolni az egérgörgővel stb. Még egyszer File > Add layer, a dialógusablakban Vehicles from Events, erre is Add. Ezután a baloldali sávon átváltani a rétegekre (három színes lap), és a Vehicles résznél Load data. Ekkor alul az idővonal csúszka aktívvá válik, és lehet vele állítani az időt. A lejátszási idő sebességét is be lehet állítani. Amikor elérte a nap utolsó eseményét, akkor újrakezdi a napot az elején.

Ha egy másik szimulációs futás eredményét akarjuk megnézni Via-ban, akkor lehetőség van kihúzni a betöltött adatokat, és betölteni újakat, de sokszor egyszerűbb újraindítani a Via-t.

Linkek

Mérési feladatok

MATSim User Guide

Via Manual