Modelowanie Oparte na Agentach — Stada, Epidemie, Kolonie Mrówek i Emergentny Ruch Uliczny

Mrumuracja szpaków nie ma choreografa. Korek uliczny powstaje bez jednego kierowcy, który zdecydował się zatrzymać. Wirus rozprzestrzenia się w populacji zgodnie z równaniami wymyślonymi przez epidemiologów stulecie temu. Modelowanie oparte na agentach (ABM) to dyscyplina, która wyjaśnia, jak lokalne reguły między prostymi agentami tworzą złożone zachowanie globalne — a sześć interaktywnych symulacji czyni każde pojęcie widocznym w czasie rzeczywistym.

Modelowanie oddolne kontra odgórne

Klasyczne modele matematyczne opisują systemy odgórnie: zapisz równania dla wielkości zagregowanych (całkowita liczba zakażonych, średnia prędkość, średnia temperatura), rozwiąż je i odczytaj zachowanie. To podejście jest potężne i efektywne. Ale zawodzi, gdy liczy się heterogeniczność jednostek, gdy struktura przestrzenna jest istotna albo gdy agenci mają pamięć lub adaptacyjne strategie.

Modelowanie oparte na agentach (ABM) przyjmuje odwrotne podejście: definiuje reguły dla każdego pojedynczego agenta, uruchamia tysiące agentów jednocześnie i pozwala zbiorowemu zachowaniu wyłonić się. Globalny wzorzec nigdy nie jest zaprogramowany jawnie — powstaje z lokalnych interakcji. Prawdziwa moc ABM bierze się z luki między tymi dwoma podejściami: wiele systemów generuje zachowanie zagregowane, które jest matematycznie równoważne odgórnym równaniom różniczkowym pod pewnymi warunkami, ale odbiega od nich, gdy tylko założenia (jednorodne mieszanie, nieskończona populacja, brak struktury przestrzennej) przestają być spełnione.

Część 1: Stadność

Symulacja Boids — trzy reguły, nieskończona złożoność

W 1986 roku Craig Reynolds opublikował pracę, która na zawsze zmieniła grafikę komputerową. Pokazał, że realistyczne zachowanie stadne — wzorce mrumuracji szpaków, ciasne kule ławic ryb — wyłania się z zaledwie trzech lokalnych reguł zastosowanych do każdego agenta: separacji, wyrównania i kohezji. Bez globalnej choreografii, bez centralnej kontroli, bez jawnej struktury stada.

Algorytm Boids — trzy reguły sterujące

Dla każdego boida i rozważ sąsiadów w promieniu R:

1. Separacja (unikanie ścisku):
   f_sep = -Σⱼ (p_j - p_i) / |p_j - p_i|²   dla |p_j-p_i| < r_sep
   Steruje z dala od pobliskich boidów

2. Wyrównanie (skręt w stronę średniego kierunku):
   f_ali = (Σⱼ v_j / |N|) - v_i              dla j ∈ sąsiedzi
   Steruje w stronę średniej prędkości sąsiedztwa

3. Kohezja (skręt w stronę środka masy):
   f_coh = (Σⱼ p_j / |N|) - p_i - v_i        dla j ∈ sąsiedzi
   Steruje w stronę średniej pozycji sąsiedztwa

Łączne przyspieszenie:
   a_i = w_sep·f_sep + w_ali·f_ali + w_coh·f_coh

Aktualizacja prędkości:
   v_i += a_i · dt;   |v_i| = clamp(|v_i|, v_min, v_max)
   p_i += v_i · dt

Hasz przestrzenny dla wyszukiwania sąsiadów w O(1) na boida:
  Naiwnie: O(n²) porównań; Hasz przestrzenny: O(n·k), k=śr. liczba sąsiadów
  Krytycznie: 500 boidów → 125 000 par → 5×: 15 625 000 (~nieużywalne)

Z tych trzech reguł symulacja Boids tworzy każdy znak rozpoznawczy prawdziwego stadowania: ciasny lot formacyjny, rozdzielanie i łączenie wokół przeszkód, falopodobne zmarszczki przez stado oraz wydłużony kształt „kolumny" podczas przelotu. Dostosuj wagę każdej reguły niezależnie — podkręć separację wysoko, a stado eksploduje; podkręć kohezję do maksimum, a zapadnie się w ciasną kulę. Punkt równowagi tworzy zjawiskowe, skoordynowane zachowanie widziane w naturze.

Rozszerzenie — Birds Flock: Symulacja Birds Flock dodaje unikanie drapieżnika — czwartą regułę, która tworzy szybkie, skoordynowane manewry ucieczki filmowane w prawdziwych mrumuracjach szpaków. Gdy drapieżnik się zbliża, stado kurczy się, obraca i rozszerza w sposób, który myli pościg — piękna emergentna strategia obronna, której żaden pojedynczy ptak nie zaplanował.

Część 2: Rozprzestrzenianie się epidemii

Model SIR — matematyka epidemii

Model SIR, sformułowany przez Kermacka i McKendricka w 1927 roku, jest fundamentem matematycznej epidemiologii. Każdy model reakcji na pandemię — rozszerzenia SIR dla COVID-19, SEIR dla grypy, modele metapopulacyjne dengi — wywodzi się z tych trzech równań. Zrozumienie SIR oznacza zrozumienie progów odporności zbiorowej, kształtu krzywych epidemicznych i tego, dlaczego szczepienie na poziomie 70% pokrycia może zapobiec wybuchom epidemii, mimo że 30% ludzi pozostaje podatnych.

Model SIR — równania i kluczowe parametry

Zmienne stanu (ułamki populacji):
  S = Podatni       dS/dt = -β·S·I
  I = Zakażeni      dI/dt =  β·S·I - γ·I
  R = Ozdrowiali    dR/dt =  γ·I
  S + I + R = 1

Parametry:
  β = współczynnik transmisji  [kontakty⁻¹·dzień⁻¹]
  γ = współczynnik zdrowienia  [dzień⁻¹]  ≡ 1/D, D = okres zakaźności

Podstawowa liczba reprodukcji:
  R₀ = β/γ = β·D
  R₀ > 1   → epidemia rośnie       (każdy przypadek zakaża >1 innych)
  R₀ < 1   → epidemia wygasa
  R₀ = 1   → równowaga endemiczna

Próg odporności zbiorowej:
  p_c = 1 - 1/R₀   (potrzebny odsetek zaszczepionych)
  Odra (R₀≈15):        p_c = 93%
  COVID-19 (R₀≈2,5):   p_c = 60%

Wielkość końcowa (ułamek ostatecznie zakażonych):
  r_∞ spełnia: ln(1-r_∞)/r_∞ = -R₀

Rozszerzenie SEIR:
  Dodaj E (eksponowani/utajeni): dE/dt = β·S·I - σ·E
  σ = współczynnik przejścia z eksponowanych do zakaźnych (1/okres utajenia)

Symulacja SIR wyświetla zarówno rozwiązanie równań różniczkowych (krzywe zagregowane), jak i wersję opartą na agentach, w której poszczególne osoby poruszają się po siatce i zakażają sąsiadów przy kontakcie. Te dwie reprezentacje rozchodzą się, gdy liczy się klastrowanie przestrzenne: w wersji opartej na agentach gęste skupiska osób podatnych tworzą zlokalizowane ogniska, które utrzymują się nawet po spłaszczeniu zagregowanej krzywej SIR. Przesuń R₀ poniżej 1, aby zobaczyć, jak epidemia sama się wygasza, zanim dotrze do całej populacji.

Część 3: Stygmergia — optymalizacja mrowiskowa

Symulacja mrówek — komunikacja feromonowa

Kolonia mrówek nie ma centralnego planisty, a mimo to rozwiązuje problem najkrótszej ścieżki między gniazdem a źródłem pożywienia z niezwykłą skutecznością. Mechanizmem jest stygmergia: agenci modyfikują wspólne środowisko (poprzez wydzielanie feromonu), a pozostali agenci reagują na te modyfikacje środowiska. Ta pośrednia komunikacja, zapośredniczona przez środowisko, a nie bezpośredni kontakt, tworzy globalnie optymalne rozwiązania z lokalnie prostych reguł.

Optymalizacja mrowiskowa (ACO) — dynamika feromonów

Reguła aktualizacji feromonu:
  τᵢⱼ ← (1-ρ)·τᵢⱼ + Σᵏ Δτᵢⱼᵏ
  ρ     = współczynnik parowania ∈ (0,1)    (zapominanie)
  Δτᵢⱼᵏ = Q/Lᵏ jeśli mrówka k użyła krawędzi (i,j), inaczej 0
  Q     = stała siły feromonu
  Lᵏ    = całkowita długość ścieżki mrówki k

Probabilistyczny wybór ścieżki:
  P(krawędź j | w węźle i) = [τᵢⱼ]^α · [η᷊ⱼ]^β / Σₗ [τᵢₗ]^α · [ηᵢₗ]^β
  η᷊ⱼ = 1/dᵢⱼ (heurystyka: preferuj krótkie krawędzie)
  α   = waga ważności feromonu
  β   = waga ważności heurystyki

Dodatnie sprzężenie zwrotne (pętla skracania):
  Krótsza ścieżka → więcej przejść na jednostkę czasu → więcej feromonu
  → wyższe prawdopodobieństwo wyboru przez przyszłe mrówki →
  → jeszcze krótsza efektywna ścieżka wybierana → ...

Zbieżność:
  Zbyt wysokie ρ: mrówki nie podążają za utrwaloną ścieżką (losowość)
  Zbyt niskie ρ:  nieświeży feromon uwięzia mrówki na podoptymalnych ścieżkach
  Optimum: ρ ≈ 0,1–0,3 dla większości problemów

W symulacji mrówek obserwuj, jak szlaki feromonowe powstają w czasie rzeczywistym, gdy mrówki eksplorują losowo, znajdują jedzenie i wracają do gniazda. Pierwsza mrówka, która znajdzie jedzenie, obiera losową, krętą trasę. Kolejne mrówki, które natkną się na jej szlak feromonowy, są skłonne go podążać. Z czasem pętla dodatniego sprzężenia zwrotnego wybiera niemal optymalną trasę — taką, która eksperymentalnie okazuje się zbliżona do najkrótszej ścieżki z dokładnością do kilku procent. Wprowadź ścianę w połowie szlaku i obserwuj, jak kolonia ją omija.

Część 4: Cykle populacyjne — dynamika drapieżnik-ofiara

Symulacja drapieżnik-ofiara — Lotka-Volterra w dwóch wymiarach

Dane o populacjach rysia i zająca amerykańskiego zbierane przez Hudson's Bay Company w latach 1845–1935 pokazują regularne oscylacje z okresem około 10 lat. Vito Volterra i Alfred Lotka, pracując niezależnie w latach dwudziestych XX wieku, wyprowadzili prostą parę równań różniczkowych, która tworzy dokładnie takie oscylacje — bez znajomości danych o zającach. Równania Lotki-Volterry są jednym z najbardziej znanych modeli w ekologii i pozostają fundamentem współczesnej dynamiki populacji.

Równania Lotki-Volterry — dynamika drapieżnik-ofiara

Klasyczne równania:
  dN/dt = αN - βNP       (ofiara: rośnie, ginie zjadana)
  dP/dt = δNP - γP       (drapieżnik: rośnie karmiony, ginie naturalnie)

  N = populacja ofiar;  P = populacja drapieżników
  α = tempo wzrostu ofiar
  β = tempo drapieżnictwa (na spotkanie drapieżnik-ofiara)
  δ = efektywność drapieżnika (ofiary przekształcane w drapieżniki)
  γ = tempo śmiertelności drapieżników

Punkt równowagi:
  N* = γ/δ   (ofiary w równowadze)
  P* = α/β   (drapieżnicy w równowadze)

Wielkość zachowana (całka pierwsza):
  V = δN - γ·ln(N) + βP - α·ln(P) = stała
  → Zamknięte orbity na płaszczyźnie fazowej (stabilność neutralna)

Paradoks Lotki-Volterry:
  Zwiększenie tempa wzrostu ofiar α → podnosi równowagę drapieżnika, nie ofiary
  „Paradoks wzbogacenia": dodanie składników odżywczych destabilizuje cykl

Rozszerzenia rzeczywiste:
  Wzrost logistyczny: α → α(1-N/K)     (pojemność środowiska)
  Typy Hollinga II/III: nasycająca odpowiedź funkcjonalna
  Rosenzweig-MacArthur: prowadzi do cykli granicznych, chaosu

Symulacja drapieżnik-ofiara uruchamia równania Lotki-Volterry obok wersji przestrzennej opartej na agentach, w której poszczególne ofiary i drapieżnicy poruszają się na siatce. Rozwiązanie równań różniczkowych pokazuje idealnie zamknięte orbity w przestrzeni fazowej; wersja oparta na agentach pokazuje nieregularne oscylacje z okazjonalnymi wymarciami — dokładnie różnicę między wyidealizowanymi modelami a rzeczywistymi systemami ekologicznymi. Wprowadź strukturę przestrzenną (mozaikowate siedlisko, korytarze) i obserwuj dynamikę metapopulacji, która pozwala ocalałym ponownie zasiedlić wymarłe płaty.

Część 5: Dynamika miejska — zlepianie się autobusów i wzrost miast

Zlepianie się autobusów — dlaczego autobusy jeżdżą w parach

Zlepianie się autobusów (bus bunching) jest jednym z najbardziej eleganckich przykładów emergentnej dysfunkcji w systemach miejskich. Nawet gdy autobusy są zaplanowane w idealnie równych odstępach, niewielkie losowe opóźnienia powodują, że jadący z tyłu autobus zabiera więcej pasażerów (bo odstęp się powiększył), spowalniając go jeszcze bardziej i powodując, że autobus jadący z przodu porusza się szybciej (bo ma mniej przystanków). Rezultat jest nieunikniony: autobusy zlepiają się w pary. Żaden kierowca nie zachowuje się źle — zlepianie jest właściwością systemu, nie agentów.

Zlepianie się autobusów — dynamika odstępów czasowych

Odstęp czasowy (headway) między autobusami:
  h_i = czas od poprzedniego autobusu na tym samym przystanku

Czas wsiadania zależy od odstępu:
  T_wsiadanie(i) = λ · h_i   (λ = tempo przybywania pasażerów na jednostkę czasu)

Czas postoju autobusu na przystanku s:
  d_s(i) = d_min + T_wsiadanie(i)/μ   (μ = tempo wsiadania na sekundę)

Wzmocnienie zaburzenia:
  Jeśli autobus i jest opóźniony o δ:
    - h_i rośnie → więcej pasażerów → dłuższy postój na każdym przystanku
    - h_{i+1} maleje → mniej pasażerów → krótszy postój
  Kolejna pętla: h_i rośnie dalej → niestabilna ucieczka

Kryterium zlepiania:
  System zlepia się, jeśli ∂h_i/∂(opóźnienie) > 1  (zaburzenia się wzmacniają)
  Zachodzi to zawsze, gdy λ/μ jest wystarczająco duże

Strategie kontroli:
  Zatrzymywanie oparte na odstępie: zatrzymaj prowadzący autobus, jeśli h < h_min
  Kontrola optymalna (Daganzo 2009): minimalizacja całkowitego czasu oczekiwania pasażerów
  Dyspozycja GPS w czasie rzeczywistym: nowoczesne systemy transportu to wykorzystują

Symulacja zlepiania się autobusów daje ci kontrolę nad okrężną linią autobusową. Obserwuj, jak idealnie rozstawione autobusy nieuchronnie zbiegają się w pary po kilku okrążeniach. Włącz strategię kontroli poprzez zatrzymywanie oparte na odstępach i patrz, jak autobusy się stabilizują — ale kosztem okazjonalnych celowych opóźnień, które wydają się sprzeczne z intuicją sfrustrowanym pasażerom.

Symulacja wzrostu miasta — ekonomia przestrzenna

Miasta rosną według logiki samowzmacniającej się: działalność gospodarcza przyciąga pracowników, pracownicy tworzą popyt, popyt przyciąga więcej firm, gęstość biznesowa podnosi wartość gruntu, a wartość gruntu koncentruje zabudowę. Ta pętla sprzężenia zwrotnego, sformalizowana w ekonomii miejskiej, tworzy skalowanie potęgowe rozkładu wielkości miast (prawo Zipfa), fraktalną strukturę sieci drogowych oraz koncentryczną strukturę pierścieniową użytkowania gruntów.

Wzrost miasta — prawo Zipfa i skalowanie miejskie

Prawo Zipfa (reguła rangi-rozmiaru):
  Populacja miasta o randze r: P(r) = P₁ / r^α
  Empirycznie: α ≈ 1 dla większości krajów
  USA (2020): NYC≈8,3M, LA≈3,9M, Chicago≈2,7M → ranga×populacja ≈ stała

Skalowanie Kleibera metabolizmu miejskiego:
  Y ∝ N^β     (Y = wynik gospodarczy, N = populacja)
  β > 1:      superliniowe → miasta stają się nieproporcjonalnie produktywne
  β ≈ 1,15    (patenty, PKB, płace)
  β ≈ 0,85    (infrastruktura: drogi, rury)

Model monocentryczny Alonso-Muth-Millsa:
  Gradient czynszu: R(x) = R(0) - t·x  (R maleje wraz z odległością x od CBD)
  t = koszt dojazdu na jednostkę odległości
  Wynik: gęstość osiąga szczyt w centrum, maleje wykładniczo na zewnątrz

Automat komórkowy użytkowania gruntów (model SLEUTH):
  Prawdopodobieństwo rozprzestrzeniania miejskiego:
    P = f(nachylenie, wykluczenia, zurbanizowani sąsiedzi, odległość od dróg)
  Kalibrowany do rzeczywistych miast przy użyciu historycznych zdjęć satelitarnych

Symulacja wzrostu miasta implementuje model użytkowania gruntów oparty na automacie komórkowym, w którym komórki przechodzą od stanu wiejskiego przez podmiejski do miejskiego na podstawie gęstości sąsiedztwa, dostępu do dróg i nachylenia terenu. Umieść początkowe ziarno gospodarcze (port, węzeł kolejowy) i obserwuj, jak miasto nukleuje, rozprzestrzenia się wzdłuż korytarzy transportowych i samoorganizuje się w charakterystyczną strukturę pierścieniową — wszystko z lokalnych reguł, bez żadnego globalnego planu.

Kolekcja modelowania opartego na agentach

Połączenia między kolekcjami

Myślenie oparte na agentach łączy całą platformę. Algorytm Boids jest bezpośrednim przodkiem Symulacji tłumu — te same trzy reguły sterujące zastosowane do pieszych poruszających się w korytarzach i przez wyjścia. Model epidemii SIR dzieli swoją matematyczną formę z równaniami drapieżnik-ofiara — oba są dwuzmiennymi, nieliniowymi systemami z zachowaniem cykli granicznych. Feromony mrówek są biologiczną implementacją zejścia gradientowego, które napędza trenowanie sieci neuronowych: oba systemy podążają za gradientami stężenia, by znaleźć optima. Emergencja wzrostu miasta łączy się z symulacją perkolacji — rozprzestrzenianie miejskie jest ukierunkowanym procesem perkolacji na siatce użytkowania gruntów, a granica miasta w symulacji wzrostu jest dokładnie frontem klastra perkolacji. Wszystkie te systemy ilustrują tę samą głęboką zasadę: lokalne reguły, iterowane przez wielu agentów i wiele kroków czasowych, niezawodnie tworzą globalny porządek, który nigdy nie został jawnie zaprojektowany.

Algorytmy i metody w tej kolekcji

Siły sterujące Reynoldsa Zapytanie o sąsiadów z haszem przestrzennym Ograniczanie prędkości Integracja Eulera Runge-Kutta 4 Model przedziałowy SIR Rozszerzenie SEIR Mapa parowania feromonu Selekcja ruletkowa ACO Portret fazowy Lotki-Volterry Ruch agenta na siatce Statystyczne wykrywanie wymarcia Zatrzymywanie autobusów oparte na odstępie Reguły przejścia użytkowania gruntów CA Dopasowanie rozkładu Zipfa Monocentryczny gradient czynszu