# Aplet symulujący ruch drogowy

Napisałem tę symulację ruchu drogowego na podstawie artykułu „Und nun die Stauvor-hersage” opublikowanego w niemieckim magazynie Die Zeit 7 czerwca 1996 roku. Artykuł ten zawierał opis prac prowadzonych przez profesora Michaela Schreckenbergera z Uniwersytetu w Duisburgu i niewymienionych z nazwiska współpracowników z Uniwersytetu Kolońskiego i Los Alamos National Laboratory. Naukowcy ci stworzyli model ruchu drogowego na podstawie kilku prostych reguł:

- Autostradę reprezentuje szereg punktów na siatce.
- Każdy samochód zajmuje jeden punkt siatki. Każdy taki punkt może być zajmowany przez najwyżej jeden samochód.
- Prędkość samochodu może wynosić od 0 do 5 punktów siatki na jednostkę czasu.
- Samochód poruszający się z prędkością mniejszą niż 5 zwiększa swoją prędkość o jednostkę w każdej jednostce czasu, aż do osiągnięcia prędkości maksymalnej.
- Jeśli odległość jednego samochodu od pojazdu znajdującego się przed nim wynosi d punktów, to jego prędkość zostaje zmniejszona do d-1, jeżeli jest to niezbędne, aby uniknąć zderzenia.
- Istnieje pewne prawdopodobieństwo, że w każdej jednostce czasu niektóre samochody będą zwalniać bez wyraźnej przyczyny.

Niniejszy aplet stanowi model tych reguł. Każda linia przedstawia obraz tego odcinka drogi. Każdy kwadrat reprezentuje jeden samochód. Pierwszy suwak służy do ustawiania prawdopodobieństwa zwalniania przez samochody. Jeśli zostanie przesunięty do końca w lewo, żaden samochód nie zwolni. Jeśli zostanie przesunięty do końca w prawo, wszystkie samochody zwolnią o jednostkę. Typowe ustawienie powoduje, że zwalnia od 10 do 20% samochodów. Drugi suwak służy do ustawiania szybkości przybywania samochodów. Kiedy jest przesunięty do końca w lewo, na autostradę nie wjeżdżają żadne nowe samochody. Jeśli jest przesunięty do końca w prawo, na jezdni pojawia się nowy samochód w każdej jednostce czasu, ale pod warunkiem, że droga nie jest zablokowana.

Przeprowadź następujące eksperymenty. Zmniejsz prawdopodobieństwo zwalniania do 0. Ustaw szybkość przybywania nowych samochodów na 1, co będzie oznaczało przybycie nowego samochodu w każdej jednostce czasu. Przyjrzyj się, jak wygląda ruch na drodze przy takim obciążeniu.

Teraz zwiększ prawdopodobieństwo zwalniania przez niektóre samochody. Zauważ, że prawie natychmiast powstaje korek.

Morał: gdyby nie ciekawscy podziwiacze widoków, użytkownicy telefonów komórkowych i paniusie, które muszą w samochodzie poprawiać makijaż, wszyscy docieralibyśmy do pracy na czas.

Zwróć uwagę, że korek stoi w miejscu, a nawet się cofa, mimo że poszczególne pojazdy cały czas się poruszają. Pierwszy samochód, który wywołał zator, już dawno odjechał w siną dal, zanim sytuacja na drodze stała się fatalna. (Aby ułatwić śledzenie samochodów, co dziesiąty pojazd ma czerwony kolor).

Więcej informacji na temat apletów, programowania grafiki i wielowątkowości w Javie znajduje się w książce Core Java.