Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Traffic Light Simulation

Inteligentna symulacja skrzyżowania napisana w Javie wraz z JavaFX, która dostosowuje cykle świateł do natężenia ruchu w czasie rzeczywistym. Projekt łączy w sobie klasyczną maszynę stanów z zaawansowaną logiką unikania korków i zagłodzenia pasów ruchu.

Algorytm Sterowania

Sercem symulacji jest klasa Intersection, która w każdym ticku podejmuje decyzje o zmianie świateł. Algorytm symuluje realne przepisy ruchu drogowego:

  • pojazdy skręcające w lewo na pełnym zielonym ustępują pierwszeńśtwa autom jadącym z naprzeciwka.
  • ruch na zielonej strzałce jest warunkowy - pojazd ustępuje każdem, kto wjeżdża na pas na pełnym zielonym świetle

Algorytm nie opiera się na prostym timerze, lecz na dynamicznym wyborze celu (Target State Selection). Kiedy nie zostaje wykryty żaden ze specjalnych scenariuszy drogowych opisanych niżej, skrzyżowanie przyznaje zielone światło przeciwgległym drogom, a pozostałym dwóm przyznaje czerwone światło ze strzałką warunkową w prawo.

Warstwy Decyzyjne

Logika podzielona jest na dwie niezależne warstwy:

  • Warstwa Planowania (determineTargetState): Analizuje licznik pojazdów na każdej drodze i decyduje, kto powinien otrzymać zielone światło.

  • Warstwa Wykonawcza (handleTransitions): Realizuje bezpieczne przejście do celu poprzez sekwencję: Zielone → Żółte → Czerwone → Czerwono-Żółte → Zielone.

Zaawansowane Funkcje Logiczne

  • Tryb dużego natężenia ruchu w pojedynczej drodze: Jeśli liczba aut na konkretnym pasie przekroczy próg 6 pojazdów i stanowi większość ruchu, system izoluje ten kierunek, nadając mu priorytetowy stan.

  • Zapobieganie zagłodzeniu : Aby uniknąć sytuacji, w której boczna uliczka nie dostaje zielonego światła, wprowadzono licznik stepsInCurrentTarget. Po osiągnięciu przez niego 15 kroków system wymusza zmianę fazy, nawet jeśli ulica mające zielone nie zostałą rozładowana.

  • Tryb nocny: Gdy skrzyżowanie pozostaje puste przez 5 kroków symulacji, przechodzi w tryb ostrzegawczy. Wszystkie sygnalizatory migają na żółto, a pojazdy mogą przejeżdżać natychmiast po sprawdzeniu konfliktów kolizyjnych. Powrót do normalnego trybu następuje dopiero po dwóch krokach symulacji pod rząd z oczekującymi samochodami.

Przykłady Przejazdów

Prosta zmiana świateł

basictraffic

Duże stężenie ruchu od północnej strony

heavytraffic

Włączenie się i wyłączenie trybu nocnego

nightmode

Uruchomienie

Projekt korzysta z Gradle. Aby uruchomić symulację z własnym plikiem konfiguracji wykonaj:

./gradlew run --args="input.json output.json"

gdzie input.json to zadany plik wejściowy, a output.json to plik wyjściowy, który symulacja stworzy.

W głównym folderze projektu znajdują się 3 przykładowe pliki wejściowe do przetestowania działania symulacji.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages