Simulace emisi spalovacich motoru
Tato stránka je slouží jako Výzkumná zpráva simulace "Doprava na semaforové křižovatce a kruhové křižovatce" k semestrálnímu projektu pro předmět 4IT495 Simulace systémů (LS 2022/2023) na VŠE v Praze.
Definice problému
Jelikož jsme si mohli všimnout, že se v České republice děly protesty proti aktuálnímu limitu rychlosti 50 km/h, kde skupina "30 pro Prahu" bojuje za to, aby byly nastaveny limity na 30 km/h. Jedním z jejich cílů je snížení emisí. Rozhodl jsem se tedy sestavit simulaci, která znázorňuje jak by v aktuální dopravě vypadaly emise, kdyby byla nastavena maximální rychlost na 30 oproti 50 km/h. Budu porovnávat, zda jet pomaleji, spotřebovávat méně a generovat méně emisí je výhodnější oproti vyšší rychlosti, spotřebě a emisím.
Metoda
Pro simulaci dopravy na semaforové zvolíme aplikaci NetLogo, která je díky svému specializovanému prostředí pro modelování a simulaci komplexních systémů velmi vhodná. Pomocí programovacího jazyka v NetLogu můžeme přesně definovat chování vozidel, semaforů a dopravních pravidel. Real-time vizualizace nám umožní sledovat pohyb vozidel a změny na semaforech, což poskytne důležité informace o dopravním chování. NetLogo také umožňuje zkoumat různé dopravní scénáře a parametry, což nám dává příležitost analyzovat a optimalizovat provoz na křižovatkách. Celkově je NetLogo ideálním nástrojem pro simulaci dopravy na semaforové křižovatce díky svému specializovanému prostředí, programovacímu jazyku a možnostem vizualizace a analýzy.
Model
Samotný model má rozměry 81x81.
Agenti
Simulace obsahuje dva typy agentů a to vozidla (turtles), roads + intersections (patches).
Vozidla
Vozidla obsahují proměnné které udávají jejich rychlost, směr, délku po jakou čekají na křižovatce nebo zácpě, jejich délku života, ujetou vzdálenost a počet vygenerovaných emisí (při jízdě a v klidu).
Ujetá vzdálenost slouží k výpočtu celkových vyprodukovaných emisí.
speed ;; the speed of the turtle up-car? ;; true if the turtle moves downwards and false if it moves to the right wait-time ;; the amount of time since the last time a turtle has moved lifetime ;; how many tics the turtle has until it dies distance-traveled ;; distance traveled by the car emissions ;; emissions generated by the car emissions-idle ;; emissions generated by the car on idle
Spawn a nastavení vozidla
K nastavení slouží funkce setup-cars, která nastaví počáteční hodnoty speed, wait-time a lifetime na 0.
Následně je zavolána funkce, která auto spawne na cestu (jedná se o jednoduchý kód, který postaví auto na patch (road), který na sobě nemá žádné jiné vozidlo.
Poslední část se zabývá počátečním natočením vozidla. Pokud pojede vertikálně nebo horizontálně. Pokud se vozidlo spawne na křižovatce, tak je jedno, kudy pojede, proto necháme rozhodnout náhodu, která vygeneruje číslo 0 nebo 1. Pokud je vybráno číslo 0, tak vozidlo pojede vertikálně.
V případě, že je vozidlo spawnuto na silnici, tak je potřeba ověřit, zda se jedná o silnici vertikální, či horizontální. To zjistíme pomocí podmínky, která určuje, zda je vozidlo zarovnáno se vertikálním gridem na základě jeho souřadnice x (pxcor). Pokud je podmínka pravdivá, nastaví se hodnota up-car? na true (což znamená, že se auto bude pohybovat vertikálně). V opačném případě je hodnota up-car? nastavena na false (což znamená, že se auto bude pohybovat horizontálně).
;; Initialize the turtle variables to appropriate values and place the turtle on an empty road patch. to setup-cars ;; turtle procedure set speed 0 set wait-time 0 set lifetime 0 put-on-empty-road ;; Determine the initial direction of a car. ifelse intersection? [ ifelse random 2 = 0 [ set up-car? true ] [ set up-car? false ] ] [ ; if the turtle is on a vertical road (rather than a horizontal one) ifelse (floor((pxcor + max-pxcor + floor(grid-x-inc - 1)) mod grid-x-inc) = 0) [ set up-car? true ] [ set up-car? false ] ] ifelse up-car? [ set heading 180 ] [ set heading 90 ] end ;; Find a road patch without any turtles on it and place the turtle there. to put-on-empty-road ;; turtle procedure move-to one-of roads with [not any? turtles-on self] end
Rychlost vozidla Regulace rychlosti vozidla je tvořena ze čtyř částí, akcelerace, decelerace a hlídání si vozidel před sebou a zastavení na semaforech. Akcelerace a decelerace jsou poměrně jednoduché, jedná se o postupné navyšování/snižování rychlosti o malé části (acceleration) každý běh (go). Limity jsou maximální rychlost (proměnná speed-limit) a 0, tudíž stav, kdy auto stojí. Zastavení na semaforech také, funkce hlídá pokud je vozidlo na červené, tak instantně zastaví. Jinak nastaví počáteční rychlost 1. Samotné hlídání vozidel před sebou zjišťuje, zda je před vozidlem další vozidlo, pokud ano, tak auto zpomaluje, pokud je cesta (road) volná, auto zrychluje.
;; set the turtles' speed based on whether they are at a red traffic light or the speed of the ;; turtle (if any) on the patch in front of them to set-car-speed ;; turtle procedure ifelse pcolor = red [ set speed 0 ] [ ifelse up-car? [ set-speed 0 -1 ] [ set-speed 1 0 ] ] end ;; set the speed variable of the car to an appropriate value (not exceeding the ;; speed limit) based on whether there are cars on the patch in front of the car to set-speed [ delta-x delta-y ] ;; turtle procedure ;; get the turtles on the patch in front of the turtle let turtles-ahead turtles-at delta-x delta-y ;; if there are turtles in front of the turtle, slow down ;; otherwise, speed up ifelse any? turtles-ahead [ ifelse any? (turtles-ahead with [ up-car? != [up-car?] of myself ]) [ set speed 0 ][ set speed [speed] of one-of turtles-ahead slow-down ] ] [ speed-up ] end ;; decrease the speed of the turtle to slow-down ;; turtle procedure ifelse speed <= 0 ;;if speed < 0 [ set speed 0 ] [ set speed speed - acceleration ] end ;; increase the speed of the turtle to speed-up ;; turtle procedure ifelse speed > speed-limit [ set speed speed-limit ] [ set speed speed + acceleration ] end