Dopravní situace ve Vietnamu
Úvodní odstavec
Contents
Definice problému
Předmětem simulace je křižovatka ve tvaru X v centru vietnamského velkoměsta, kde řidiči nedodržují žádné dopravní předpisy, většina řidičů jezdí po pravé straně, ale v rámci zkrácení si cesty je běžné jezdit i vlevo, proti proudu ostatních vozidel. Na silnici jezdí převážná většina motocyklů, ale také automobily, autobusy, nákladní vozidla, jízdní kola. Rychlostní limity se pohybují mezi 30 a 40 km/h, ale běžně jsou ignorovány. Počet jízdních pruhů je neomezený, závisí na šířce současně jedoucích vozidel. Dopravní nehody jsou na denním pořádku a denně na jejich následky zemře nejméně 30 lidí, většinou chodců. Cílem je nasimulovat přechod chodců přes ulici (mohou přecházet kdekoliv) a ověřit tvrzení, že nejbezpečnější strategií pro přechod ulice je plynulá chůze, kdy řidiči chodce objedou zleva či zprava, a zvolit její nejvhodnější rychlost. http://www.youtube.com/watch?v=LlyOom0bwwY http://www.youtube.com/watch?v=_RmDhlq9yrk
Metoda
Model
Simulační model je vytvořen v prostředí NetLogo 5.0.1. Základem je čtvercový svět o rozměru 51x51px (max. pxcor a pycor je 25), v němž je bílou barvou vyznačena křižovatka ve tvaru x.
Druhy agentů a jejich atributy
Svět obsahuje následující druhy agentů:
- motorcycles
- bicycles
- cars
- trucks
- buses
- pedestrians
Agenti motorcycles, bicycles, cars, trucks a buses představují jednotlivé typy dopravních prostředků vyskytujících se v křižovatce. Mají atributy speed (okamžitá rychlost), speed-limit (maximální rychlost), cilheading (daný směr jízdy) a turn (příznak zda dopravní prostředek uprostřed křižovatky zatočil) Tyto typy agentů se liší pouze rychlostí, tvarem a velikostí; souhrnně jsou označovány jako traffic.
Agenti pedestrians představují chodce, kteří přecházejí přes křižovatku. Kromě atributů speed, speed-limit a cilheading mají navíc atribut wait-before-go, který označuje čas před vkročením do křižovatky.
Nastavení počátečního stavu
Pro nastavení počátečního stavu simulace je vytvořeno tlačítko setup volající stejnojmennou proceduru. Tato procedura vymaže předchozí data a počítadlo ticků a spustí proceduru setup-road pro vykreslení silnice a dále procedury pro vytvořejí jednotlivých typů agentů a nastavení jejich počátečních dat.
Počty vytvořených agentů je možné nastavit pomocí posuvníků. Atributy speed a speed-limit agentů dopravních prostředků sou nastaveny podle následující tabulky:
Maximální rychlosti dopravních prostředků a chodců v modelu
Název | Rychlost v km/h | Rychlost v m/s | Rychlost v NetLogu |
---|---|---|---|
Motocykl | 72 km/h | 20 m/s | 2 steps/tick |
Automobil | 61 km/h | 17 m/s | 1,7 steps/tick |
Autobus | 54 km/h | 15 m/s | 1,5 steps/tick |
Nákladní automobil | 36 km/h | 10 m/s | 1 step/tick |
Jízdní kolo | 18 km/h | 5 m/s | 0,5 steps/tick |
Chůze | 5,4 km/h | 1,5 m/s | 0,15 steps/tick |
Nejedná se však o stejnou hodnotu pro každého agenta. Rychlost je vždy počítána náhodně z intervalu maximální hodnoty a hodnoty snížené o 0,5 steps/tick (u jízdních kol je interval 0,2 - 0,5 steps/tick).
U typu pedestrians je rychlost nastavována posuvníkem.
Po nastavení rychlosti je pro každého agenta volána procedura allocate-traffic, resp. allocate-pedestrians, která náhodně rozmisťuje dopravní prostředky a chodce do křižovatky podle následujících pravidel:
Rozmisťování dopravních prostředků
Vozidla jsou v počátečním stavu umístěna do všech čtyř krajů světa (na čtyři silnice vstupující do křižovatky). Většina vozidel je k pravé straně vozovky, ale menší část i vlevo (pojedou v protisměru)
let head random 20
if head = 0 or head = 1 or head = 2 or head = 3 [set head 90 set cory random-interval -6 0 set corx random-interval -25 -20] ;;pravy jizdni pruh
if head = 4 [set head 90 set cory random-interval 0 6 set corx random-interval -25 -20] ;;levy jizdni pruh
if head = 5 or head = 6 or head = 7 or head = 8 [set head 0 set corx random-interval 0 6 set cory random-interval -25 -20]
if head = 9 [set head 0 set corx random-interval -6 0 set cory random-interval -25 -20]
if head = 10 or head = 11 or head = 12 or head = 13 [set head 270 set cory random-interval 0 6 set corx random-interval 20 25]
if head = 14 [set head 270 set cory random-interval -6 0 set corx random-interval 20 25]
if head = 15 or head = 16 or head = 17 or head = 18 [set head 180 set corx random-interval -6 0 set cory random-interval 20 25]
if head = 19 [set head 180 set corx random-interval 0 6 set cory random-interval 20 25]