Wszystkie artykuły

Jak zbudowaliśmy symulator ruchu

Monte Carlo w analizie zakłóceń na drodze

Jedno zakłócenie może obciążyć kolejne odcinki sieci. W Pracowni Kodu przygotowaliśmy dla klienta program, który pozwala badać takie zależności i porównywać reakcje systemu w wielu symulowanych scenariuszach.

Jak zbadać skutki zakłócenia bez eksperymentowania na drodze?

Kolizja, roboty drogowe czy chwilowe ograniczenie przejazdu mogą zmniejszyć przepustowość odcinka. Skutki takiej zmiany nie muszą kończyć się w miejscu zdarzenia: obciążenie może przenieść się na sąsiednie trasy, a przeciążenie objąć większą część sieci.

Klient zajmujący się analizą ruchu potrzebował programu do badania podobnych zależności. Przygotowaliśmy dla niego symulator, w którym można zmieniać warunki, uruchamiać powtarzalne eksperymenty i porównywać sposoby wyznaczania tras. Celem było stworzenie środowiska do sprawdzania hipotez o zachowaniu ruchu.

Sieć dróg zapisana jako model

Program opisuje sieć za pomocą grafu: 21 węzłów i 30 skierowanych połączeń tworzy cztery korytarze z dwoma ujściami. Węzły oznaczają punkty połączeń, a krawędzie — odcinki, po których kierowany jest ruch. Każdy odcinek ma określoną przepustowość i koszt wykorzystywany przy wyborze trasy. Schemat zachowuje topologię programu; nie przedstawia geografii konkretnego miasta.

W kolejnych krokach symulacji do sieci trafia zmienny popyt na przejazdy. Model uwzględnia losowe wahania, nagłe wzrosty obciążenia oraz zakłócenia ograniczające przepustowość wybranych odcinków. Pozwala też obserwować, jak przeciążenie przenosi się wstecz na wcześniejsze fragmenty sieci.

Przykładowy eksperyment może polegać na ograniczeniu przepustowości jednej drogi i sprawdzeniu, co zmieni się na pozostałych połączeniach. W ten sposób można modelować wybrany skutek kolizji lub prac drogowych: utrudnienie przepływu ruchu. Program nie odtwarza samego zderzenia pojazdów.

Jeden eksperyment, krok po kroku

Te obrazy powstały ze stanów zapisanych podczas uruchomienia programu. Pokazujemy wariant bazowy, ziarno 982 — przebieg najbliższy medianie łącznego przeciążenia po zakłóceniu wśród 1000 prób.

Sieć 21 węzłów i 30 połączeń w kroku 9. Łączne przeciążenie wynosi zero.
Przed zakłóceniem. W kroku 9 żaden odcinek nie przekracza przepustowości. Kolory pokazują udział wykorzystanej przepustowości, a strzałki — dozwolony kierunek przepływu.
Powiększ wynik

Co to jest metoda Monte Carlo?

Monte Carlo to metoda obliczeniowa, która bada wiele możliwych scenariuszy przez wielokrotne losowanie danych wejściowych. Program powtarza obliczenia dla każdego z nich, a następnie zestawia wyniki. Dzięki temu można oszacować, jakie rezultaty są typowe, jak bardzo się różnią i jak często pojawiają się niekorzystne sytuacje przy przyjętych założeniach.

W naszym symulatorze losowo zmieniają się między innymi obciążenie sieci i skala ograniczenia przepustowości. Jeden przebieg może pokazać spokojny ruch, a inny — wzrost liczby przejazdów połączony z utrudnieniem na ważnym odcinku. Seria takich eksperymentów pozwala sprawdzić, jak wybrana strategia radzi sobie w różnych warunkach.

W planowaniu transportu Monte Carlo pomaga odpowiedzieć na pytanie: jak wybrana trasa zachowa się przy niepewnych warunkach? Samo wyznaczanie tras według określonego celu jest zadaniem algorytmu optymalizacji. Połączenie obu metod pozwala szukać dobrego planu i oceniać jego odporność na opóźnienia.

Powtarzalność eksperymentów zapewniają ziarna generatora liczb losowych. Dzięki nim można wrócić do konkretnego przebiegu, odtworzyć go po zmianie programu i sprawdzić, skąd wzięła się różnica.

Dwie strategie w tych samych warunkach

W symulatorze zestawiliśmy strategię bazową, wybierającą trasy według kosztu, ze strategią adaptacyjną. Ta druga uwzględnia informacje o obciążeniu z poprzedniego kroku i na tej podstawie koryguje wybór tras. Korzysta więc z danych już dostępnych w modelu.

Oba warianty można uruchomić dla tego samego scenariusza. Takie porównanie pozwala oddzielić wpływ strategii od różnic wynikających z losowania innych warunków.

Przy ocenie liczą się między innymi skala i czas trwania przeciążenia oraz czas powrotu do stabilnego stanu. Rozkłady wyników pomagają sprawdzić, czy zmiana przynosi korzyść w wielu przebiegach, czy tylko w wybranych przypadkach. Wykres pojedynczego eksperymentu ułatwia z kolei prześledzenie reakcji sieci krok po kroku.

Wykres przeciążenia dla ziarna 982. Po zakłóceniu w kroku 12 oba warianty mają identyczne wyniki; maksimum 43,05 przypada na krok 13. Przeciążenie wraca w kroku 31.
Przebieg jednego eksperymentu. Po zakłóceniu linie obu strategii nakładają się. Suma przeciążeń to nadwyżka obciążenia ponad przepustowość, zsumowana po odcinkach. To jednostki modelu, a kroki na osi czasu nie oznaczają minut.
Powiększ wykres

Co pokazuje 1000 eksperymentów?

W serii 1000 par przebiegów mediana czasu stabilizacji wyniosła 2 kroki dla obu strategii. Warunek stabilizacji nie wystąpił przed końcem symulacji w 58 przebiegach bazowych i 55 adaptacyjnych. Program rozumie stabilizację jako początek trzech kolejnych kroków bez przeciążenia — kolejne zakłócenie tego stanu jest nadal możliwe.

Rozkład czasu stabilizacji dla 1000 par. Mediana obu strategii: 2 kroki. Brak stabilizacji do końca przebiegu: 58 prób bazowych oraz 55 adaptacyjnych.
Pełna seria, wspólne przedziały. Każda strategia ma 1000 przebiegów. Ostatnia grupa oznacza brak spełnienia warunku stabilizacji w badanym horyzoncie, a nie zmierzony długi czas powrotu.
Powiększ wykres

Średnia suma przeciążeń po zakłóceniu wyniosła 187,76 dla wariantu bazowego i 181,10 dla adaptacyjnego — o około 3,5% mniej w tej konfiguracji. Poprawa wystąpiła w 198 parach, a w 802 wynik tej miary był taki sam. To wynik eksperymentu na uproszczonym modelu, nie pomiar poprawy ruchu na rzeczywistej drodze.

Parametry eksperymentu i dane do pobrania

Użyliśmy parametrów domyślnych wersji v2, zwiększając liczbę prób do 1000: ziarna 0–999, po 40 kroków, zakłócenie w kroku 12, okno stabilizacji 3 kroki. Każda para miała to samo ziarno oraz identyczne wylosowane zakłócenia. Nie dobieraliśmy parametrów pod korzystny wynik.

Przykład 982 wybraliśmy jako najbliższy medianie sumy przeciążeń wariantu bazowego po zakłóceniu. Kolory i podpisy wykresów dopasowaliśmy do artykułu; wartości pochodzą z programu. Zmiana przepustowości i przeciążenie są osobnymi wielkościami.

Wyniki 1000 par (CSV) · Stany sieci i parametry przykładu (JSON)

Oryginalny eksport topologii z programu · Oryginalny eksport przebiegu

Do czego przydaje się takie narzędzie?

Wartością symulatora jest możliwość zadawania konkretnych pytań i porównywania odpowiedzi przy kontrolowanych założeniach. Taki program może wspierać:

  • Badanie zakłóceń: jak sieć reaguje na ograniczenie przepustowości w różnych miejscach i przy różnym obciążeniu?
  • Porównywanie strategii: kiedy adaptacyjna zmiana tras pomaga, a kiedy przenosi przeciążenie na inne odcinki?
  • Szukanie wąskich gardeł: które połączenia okazują się szczególnie wrażliwe na zmianę warunków?
  • Wstępną ocenę pomysłów: które rozwiązania warto poddać bardziej szczegółowej analizie?

Optymalizacja tras w firmie transportowej

Firma transportowa może wykorzystać połączenie optymalizacji matematycznej i symulacji do planowania przejazdów swojej floty. Najpierw określamy, co ma być optymalne: łączny koszt, czas realizacji lub liczba przejechanych kilometrów. Następnie uwzględniamy punkty dostaw, dostępne pojazdy, ich ładowność i wymagane godziny odbioru lub doręczenia.

Algorytm szuka tras, które najlepiej spełniają ten cel przy zadanych ograniczeniach. Symulacja Monte Carlo pozwala dodatkowo sprawdzić różne warianty czasów przejazdu i zakłóceń, oszacować ryzyko spóźnień oraz porównać plany także wtedy, gdy warunki odbiegają od przewidywanych. Dzięki temu decyzja może uwzględniać zarówno koszt, jak i niezawodność dostaw.

W Pracowni Kodu możemy zaprojektować i wykonać taki system dla firmy transportowej — dopasowany do jej floty, zleceń i zasad planowania. Dobieramy model matematyczny, algorytmy i źródła danych do konkretnego problemu. Opisany tutaj symulator pokazuje warsztat potrzebny do budowy takiego rozwiązania; system do planowania dostaw przygotowujemy jako odrębne narzędzie dla danego klienta.

Program napisaliśmy w Pythonie. Połączenie modelu sieci, powtarzalnych eksperymentów i analizy wyników daje klientowi narzędzie, które można rozwijać wraz z kolejnymi pytaniami badawczymi.

Wynik zawsze zależy od założeń

W tej realizacji model opisuje zbiorcze obciążenia odcinków. Nie odwzorowuje zachowania każdego kierowcy, zmiany pasa ani fizyki kolizji. Schemat otwierający artykuł pokazuje rzeczywiste połączenia z konfiguracji programu. Obrazy kolejnych kroków i wykresy przedstawiają wyniki symulacji, nie pomiary z ulic.

Wnioski z eksperymentu dotyczą przyjętej sieci, parametrów i reguł. Zastosowanie modelu do konkretnego układu drogowego wymagałoby danych o tej sieci i ruchu, kalibracji oraz porównania wyników z obserwacjami.

Ta realizacja pokazuje, jak przekładamy problem analityczny na działający program: od opisania zależności, przez automatyzację eksperymentów, po wyniki, które można odtworzyć i porównać.

Wszystkie artykułyWróć na górę

Potrzebujesz sprawdzić różne scenariusze?

Tworzymy systemy do symulacji, analizy i optymalizacji tras. Porozmawiajmy o Twojej flocie, zleceniach lub innym problemie, który chcesz rozwiązać obliczeniowo.

Porozmawiajmy o projekcie
PRACOWNIA KODU

Twoja prywatność

Ty decydujesz, czy możemy mierzyć korzystanie ze strony. Zmiana zgody jest dostępna w stopce pod przyciskiem „Ustawienia prywatności”.

Niezbędne

Zapamiętanie wyboru prywatności oraz działanie formularza, planera projektu oraz czatu.

Zawsze aktywne
Jakie dane zapisujemy i na jak długo?

Administratorem danych jest Pracownia Kodu. Kontakt w sprawach prywatności: kontakt@pracowniakodu.com.

Analityka działa wyłącznie na podstawie Twojej zgody. Zapisujemy nazwę podstrony (bez parametrów adresu), rodzaj działania, czas, ogólną kategorię źródła wejścia i urządzenia oraz losowy identyfikator sesji. Sesja w tej karcie wygasa po 30 minutach bezczynności. Identyfikator nie zawiera Twojego imienia, e-maila ani telefonu.

Nie nagrywamy ekranu ani wpisywanych treści. W bazie analityki nie zapisujemy adresu IP, pełnego adresu odsyłającego ani treści formularzy. Dane analityczne przechowujemy na własnych serwerach w systemie strony i Matomo do 90 dni; dostęp ma administrator panelu.

Po zaakceptowaniu aktualnych ustawień możemy też odbierać ogólny rodzaj błędu i przybliżony czas ładowania strony. Do raportów nie przesyłamy treści błędów, adresów z parametrami ani identyfikatora odwiedzającego. Przechowujemy błędy do 30 dni, a pomiary czasów do 14 dni na własnym serwerze. Wycofanie zgody zatrzymuje wysyłkę; już przekazane raporty nie są powiązane z Twoją zgodą ani osobą.

Wybór prywatności i potwierdzenie zgody przechowujemy do 180 dni. W przeglądarce korzystamy z localStorage (wybór) i sessionStorage (sesja analityczna po zgodzie). Odmowa wyłącza pomiar. Po wycofaniu zgody blokujemy dalszy pomiar i zlecamy usunięcie powiązanych zdarzeń z aktywnych baz strony i Matomo. Jeśli nie ma połączenia, zlecenie ponowimy po jego odzyskaniu.

Możesz wycofać zgodę, zażądać dostępu do danych, ich usunięcia, sprostowania, ograniczenia przetwarzania lub przeniesienia, gdy mają zastosowanie odpowiednie przesłanki. Masz prawo złożyć skargę do Prezesa UODO. Wycofanie zgody nie wpływa na zgodność wcześniejszego przetwarzania z prawem.

Token czatu i szkic zapisujemy w pamięci tej witryny, aby umożliwić powrót do rozmowy i bezpieczne ponowienie wiadomości. Bez podania e-maila odpowiedź odczytasz w tej samej przeglądarce. Treść rozmowy służy obsłudze zapytania i nie trafia do analityki.

Formularz i planer działają także bez analityki. Zakres planera zapamiętujemy w tej karcie przeglądarki przez maksymalnie 24 godziny od ostatniej zmiany; dane kontaktowe nie są tam zapisywane. Dane przekazane w zapytaniu służą jego obsłudze i są przechowywane oddzielnie od statystyk.