Difference between revisions of "Dopravní situace ve Vietnamu"
(→Pravidla jízdy) |
(→když dojdou) |
||
Line 173: | Line 173: | ||
====Vznik kolizí==== | ====Vznik kolizí==== | ||
− | ==== | + | ====Výjezd z křižovatky==== |
+ | |||
+ | V případě, že dopravní prostředek úspěšně projede křižovatkou a dosáhne tedy v jedné ze souřadnic hodnoty -25 nebo 25, je "zabit" a místo něj je na kraji světa vytvořen nový dopravní prostředek stejného typu. Počet prostředků v křižovatce je tedy pro zjednodušení simulace stále konstantní. | ||
+ | Stejné chování je nastaveno v případě, že se dopravní prostředek dostane mimo vozovku (do černého pole) - to je možno interpretovat jako zaparkování. | ||
+ | <code> | ||
+ | ask turtles with [breed != pedestrians and (( pxcor = 25 or pycor = 25 or pxcor = -25 or pycor = -25) or [pcolor] of patch-ahead 1 != white)] | ||
+ | [hatch 1 [allocate-traffic set turn 0 ] die ] | ||
+ | </code> | ||
== Externí odkazy == | == Externí odkazy == |
Revision as of 19:56, 12 June 2012
Ú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 náhodný čas, po který chodec čeká 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 umístěna k pravé straně vozovky, ale menší část i vlevo (pojedou v protisměru). Může tedy nastat 8 situací (vždy 2 pro každou světovou stranu - s větší pravděpodobností bude vozidlo umístěno doprava, s menší doleva) Dále je podle výsledného umístění nastaven heading, tedy směr umístění agenta.
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]
if head = 4 [set head 90 set cory random-interval 0 6 set corx random-interval -25 -20]
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]
Poté je agentovi nastavena výsledná souřadnice a směr (ten je ukládán dvakrát - do atributu heading, který se však v průběhu jízdy může měnit, a do atributu cilheading, který udává výslednou trasu vozidla
set cilheading head
set heading head
set xcor corx
set ycor cory
Dále musí být zaručeno, aby se dopravní prostředek neumístil na místo, kde už nějaký je. V tom případě je agent posunut a procedura allocate-traffic spuštěna znovu.
if any? other turtles-here
[ fd 1
allocate-traffic ]
Rozmisťování chodců
Chodci jsou náhodně umísťováni na všechny kraje vozovky. Opět tedy může pro umístění jednotlivého chodce nastat 8 možností:
let i random 8
if i = 0 [ set xcor random-interval -18 -8 set ycor 8 set heading 180 set cilheading 180 ] ;;vlevo nahore vodorovne
if i = 1 [ set xcor -8 set ycor random-interval 8 18 set heading 90 set cilheading 90 ] ;;vlevo nahore svisle
if i = 2 [ set xcor 8 set ycor random-interval 8 18 set heading 270 set cilheading 270 ] ;;vpravo nahore svisle
if i = 3 [ set xcor random-interval 8 18 set ycor 8 set heading 180 set cilheading 180 ] ;;vpravo nahore vodorovne
if i = 4 [ set xcor -8 set ycor random-interval -18 -8 set heading 90 set cilheading 90] ;;vlevo dole svisle
if i = 5 [ set xcor random-interval -18 -8 set ycor -8 set heading 0 set cilheading 0] ;;vlevo dole vodorovne
if i = 6 [ set xcor random-interval 8 18 set ycor -8 set heading 360 set cilheading 360 ] ;;vpravo dole vodorovne
if i = 7 [ set xcor 8 set ycor random-interval -18 -8 set heading 270 set cilheading 270] ;;vpravo dole svisle
Chování dopravních prostředků po spuštění simulace
Pravidla jízdy
V každém "ticku" je testováno, zda má vozidlo před sebou volnou cestu. Pokud se na následujícím políčku již něco vyskytuje, vozidlo může zahnout doleva nebo doprava (opět v případě, že je zde volno). Pokud zatočit nelze, musí vozidlo zpomalit nebo zastavit. V případě zatočení je v následujícím ticku nastaven zpět původní směr jízdy z atributu cilheading.
ifelse (not any? other turtles-on patch-ahead 1) [ if (speed < speed-limit) [set speed speed-limit] ] [
let car-ahead one-of turtles-on patch-ahead 1
ifelse (patch-left-and-ahead 70 1 != nobody and any? other turtles-on patch-left-and-ahead 70 1)
[ifelse (patch-right-and-ahead 70 1 != nobody and any? other turtles-on patch-right-and-ahead 70 1)
[ifelse (heading = [heading] of car-ahead) [set speed ([speed] of car-ahead - 0.1)] [set speed 0]]
[set heading heading + random 70]]
[set heading heading - random 70]
]
]
fd speed
]
Zatáčení dopravních prostředků
Pokud se dopravní prostředek dostane doprostřed křižovatky, nemusí jet vždy rovně, ale může zatočit o 90 stupňů doleva nebo doprava. To je určováno náhodně po celou dobu průjezdu středem křižovatky. Atribut turn slouží k tomu, aby dopravní prostředek, který již zatočil (změnil se jeho atribut cilheading) nezatočil znovu.
ask turtles with [pxcor < 7 and pxcor > -7 and pycor < 7 and pycor > -7 and turn = 0]
let i random 100
if i = 0 [ set cilheading cilheading + 90 set turn 1]
if i = 1 [ set cilheading cilheading - 90 set turn 1]
Vznik kolizí
Výjezd z křižovatky
V případě, že dopravní prostředek úspěšně projede křižovatkou a dosáhne tedy v jedné ze souřadnic hodnoty -25 nebo 25, je "zabit" a místo něj je na kraji světa vytvořen nový dopravní prostředek stejného typu. Počet prostředků v křižovatce je tedy pro zjednodušení simulace stále konstantní.
Stejné chování je nastaveno v případě, že se dopravní prostředek dostane mimo vozovku (do černého pole) - to je možno interpretovat jako zaparkování.
ask turtles with [breed != pedestrians and (( pxcor = 25 or pycor = 25 or pxcor = -25 or pycor = -25) or [pcolor] of patch-ahead 1 != white)]
[hatch 1 [allocate-traffic set turn 0 ] die ]