Boids: jak 3 proste reguły tworzą zachowanie stadne

Murmuracja szpaków, ławica ryb, rój pszczół — wydają się być koordynowane przez jakąś centralną inteligencję. Nie są. Każdy osobnik podąża za tymi samymi trzema lokalnymi regułami, a stado wyłania się oddolnie.

Craig Reynolds i narodziny Boids

W 1986 roku badacz grafiki komputerowej Craig Reynolds postawił sobie za cel animowanie stada ptaków do filmu. Zamiast ręcznie animować każdego ptaka albo pisać skrypt kontrolujący ich pozycje, zadał inne pytanie: jakich reguł faktycznie przestrzega każdy pojedynczy ptak?

Opublikował wynik w 1987 roku w pracy SIGGRAPH zatytułowanej „Flocks, Herds, and Schools: A Distributed Behavioral Model”. Symulowane agenty nazwano Boids — skrótem od „bird-oid objects” (obiekty ptakopodobne). Praca stała się jedną z najczęściej cytowanych w grafice komputerowej, a opisany w niej algorytm jest używany do dziś, blisko cztery dekady później.

Głębokie odkrycie było takie: nie potrzeba złożonych reguł koordynacji, by wytworzyć złożone, skoordynowane zachowanie. Trzy proste lokalne reguły wystarczają, by wygenerować realistycznie wyglądające zachowanie stadne z dowolnej liczby niezależnych agentów.

Trzy reguły

Każdy boid patrzy na swoich sąsiadów w promieniu percepcji i stosuje jednocześnie trzy siły sterujące:

Reguła 1: Separacja

Steruj z dala od zbyt bliskich sąsiadów.

Dla każdego boida znajdź wszystkich sąsiadów w promieniu „zbyt bliskim” (zwykle mniejszym niż promień percepcji). Oblicz wektor odpychania skierowany od każdego takiego sąsiada, ważony tym, jak blisko się znajduje — bliżsi sąsiedzi popychają mocniej. Zsumuj te wektory, by uzyskać siłę sterującą separacją.

Bez separacji boidy zapadają się w jeden punkt. Przy samej separacji boidy dryfują od siebie w nieskończoność. Reguła ta utrzymuje przestrzeń osobistą i zapobiega kompresji stada w nierealistycznie gęstą masę.

Reguła 2: Wyrównanie

Steruj w kierunku średniego kierunku pobliskich sąsiadów.

Każdy boid oblicza średni wektor prędkości wszystkich boidów w swoim promieniu percepcji. Następnie kieruje swoją własną prędkość w stronę tej średniej. Siła sterująca jest proporcjonalna do różnicy między obecną prędkością a docelową średnią.

Wyrównanie sprawia, że stado porusza się jako spójna grupa, a nie chmura osobników idących w losowych kierunkach. Bez niego boidy klastrują się razem, ale poruszają się chaotycznie.

Reguła 3: Kohezja

Steruj w kierunku średniej pozycji pobliskich sąsiadów.

Każdy boid oblicza środek masy swoich widocznych sąsiadów i delikatnie kieruje się w jego stronę. To reguła, która utrzymuje stado razem — bez kohezji separacja i wyrównanie produkują dryfujące małe grupy, które nigdy się nie łączą.

Te trzy siły są sumowane i ważone, tworząc ostateczny wektor sterujący każdego boida w każdym kroku czasowym. Względne wagi są głównymi parametrami dostrajania — spróbuj dostosować je sam w symulacji pod adresem /boids/.

Implementacja reguł w kodzie

Podstawowa pętla aktualizacji dla pojedynczego boida wygląda tak:

dla każdego boida b:
    sąsiedzi = znajdź_sąsiadów(b, promień_percepcji)

    sep = siła_separacji(b, sąsiedzi)
    ali = siła_wyrównania(b, sąsiedzi)
    coh = siła_kohezji(b, sąsiedzi)

    b.prędkość += sep * w_sep
                + ali * w_ali
                + coh * w_coh

    b.prędkość = ogranicz(b.prędkość, max_prędkość)
    b.pozycja += b.prędkość * dt

Prostota jest uderzająca. Bez centralnego kontrolera, bez przekazywania wiadomości, bez stanu globalnego. Każdy boid zna tylko swoje najbliższe otoczenie. A mimo to uruchom to dla 500 boidów i otrzymasz zachowanie nie do odróżnienia od prawdziwej murmuracji.

Emergentna złożoność z lokalnych reguł

Filozoficzne znaczenie Boids sięga poza animację. Zademonstrowało ono ogólną zasadę, obecnie centralną dla nauki o złożoności: emergencję — pojawienie się wzorców na dużą skalę z interakcji na małą skalę, bez żadnej kontroli odgórnej.

Stado nie jest zaprogramowane. Stado jest zbiorowym zachowaniem osobników podążających za lokalnymi regułami. Nie znajdziesz „stada” w kodzie żadnego pojedynczego boida. Istnieje ono tylko na poziomie agregatu.

Ta sama zasada pojawia się w całej przyrodzie i nauce:

Dostrajanie parametrów

Klasyczny model Boids ma kilka parametrów dostrajalnych, które dramatycznie zmieniają charakter stada:

Zastosowania poza animacją

Pierwotnym celem Reynoldsa była animacja filmowa, a Boids były używane w niezliczonych produkcjach — roje nietoperzy w Batman Returns, stado gnu w Lion King i wielu innych. Ale zastosowania sięgają dziś daleko poza rozrywkę.

Robotyka i roje dronów stanowią być może najbardziej bezpośrednie zastosowanie. Systemy wielorobotowe w magazynach, wojskowe formacje UAV i floty dronów poszukiwawczo- ratowniczych — wszystkie czerpią z tych samych zasad rozproszonego stada. Każdy robot podejmuje niezależne decyzje na podstawie lokalnych danych sensorycznych; skoordynowane zachowanie wyłania się bez centralnej koordynacji.

Algorytmy optymalizacji inspirowane Boids obejmują optymalizację rojem cząstek (PSO), gdzie populacja rozwiązań-kandydatów porusza się przez przestrzeń poszukiwań, używając analogów separacji, wyrównania i kohezji. PSO konkuruje z algorytmami genetycznymi w problemach optymalizacji ciągłej i ma przewagę bardzo niewielkiej liczby hiperparametrów do dostrojenia.

Symulacja ruchu drogowego używa modeli wywodzących się z Boids dla dynamiki tłumu pieszych — ewakuacji, tłumów festiwalowych, wyjścia ze stadionów. Paradygmat „osobnik podążający za lokalnymi regułami” naturalnie wychwytuje sposób, w jaki ludzie poruszają się w tłumie.

AI w grach — od nawigacji jednostek w RTS przez zachowanie tłumów NPC po ławice ryb w grach eksploracji podwodnej — w dużej mierze opiera się na algorytmach stadnych wywodzących się z pracy Reynoldsa.

Rozszerzanie Boids

Oryginalny trzy-regułowy model to punkt wyjścia. Badacze i twórcy dodali wiele rozszerzeń:

Najczęściej zadawane pytania

Czym są Boids?

Boids to symulacja sztucznego życia stworzona przez Craiga Reynoldsa w 1986 roku, modelująca stadne zachowanie ptaków, ryb w ławicy i zwierząt stadnych. Każdy „boid” (obiekt bird-oid) podąża za trzema prostymi regułami — separacją, wyrównaniem i kohezją — które razem tworzą realistyczne emergentne zachowanie rojowe.

Jakie są trzy reguły Boids?

Trzy podstawowe reguły Boids to: Separacja (steruj z dala od zbyt bliskich sąsiadów, unikając kolizji), Wyrównanie (steruj tak, by dopasować się do średniego kierunku pobliskich sąsiadów) i Kohezja (steruj w kierunku średniej pozycji pobliskich sąsiadów, pozostając w grupie). Te trzy reguły wystarczają, by wytworzyć realistyczne stado.

Czym jest zachowanie emergentne?

Zachowanie emergentne to złożone, skoordynowane zachowanie grupowe, które powstaje z prostych reguł indywidualnych bez żadnej centralnej kontroli czy planu. W Boids żaden pojedynczy boid nie zna kształtu stada — wzorzec stadny wyłania się automatycznie, gdy każdy agent niezależnie podąża za trzema lokalnymi regułami.

Jak promień percepcji wpływa na stadne zachowanie?

Promień percepcji determinuje, jak daleko każdy boid może „widzieć” swoich sąsiadów. Zbyt mały promień powoduje rozdrobnione małe klastry; zbyt duży powoduje, że wszystkie boidy zachowują się jak jedna sztywna masa. Promień pośredni produkuje kaskadowy, falowy ruch widziany w naturalnych murmuracjach szpaków.

Czy Boids mogą być użyte w prawdziwych zastosowaniach?

Tak. Boids i pokrewne algorytmy są używane w animacji i filmie do symulacji tłumów, w robotyce do koordynacji rojów, w AI gier do ruchu grupowego, w modelowaniu przepływu ruchu drogowego, a nawet w badaniu prawdziwego zbiorowego zachowania zwierząt. Algorytm zademonstrował, że złożona inteligencja zbiorowa nie wymaga centralnego kontrolera.

Jaka jest różnica między Boids a automatami komórkowymi?

Boids to agenty w przestrzeni ciągłej z wektorami prędkości, poruszające się w przestrzeni 2D lub 3D, podążające za lokalnymi regułami dotyczącymi sąsiadów. Automaty komórkowe działają na dyskretnej siatce, gdzie każda komórka aktualizuje się na podstawie stanów swoich stałych sąsiadów siatki. Oba produkują emergentne wzorce z lokalnych reguł, ale Boids modelują mobilnych agentów, podczas gdy CA modelują przestrzenne wzorce stanów.

Jak dodać unikanie przeszkód do Boids?

Unikanie przeszkód dodaje czwartą siłę sterującą, która odpycha boidy od statycznych przeszkód. Boidy mogą rzucać promienie skierowane do przodu, by wykrywać przeszkody, i stosować ważoną siłę odpychania prostopadłą do powierzchni przeszkody. Waga odpychania zwykle skaluje się z bliskością, rosnąc w miarę zbliżania się boida do przeszkody.

Czym jest murmuracja szpaków?

Murmuracja to spektakularny, skoordynowany pokaz powietrzny tysięcy szpaków zwyczajnych latających w synchronii, tworzących płynne, ciągle zmieniające się kształty trójwymiarowe. Badania pokazują, że szpaki podążają za regułami odległości topologicznej, a nie metrycznej — każdy ptak śledzi swoich 6-7 najbliższych sąsiadów niezależnie od ich bezwzględnej odległości, co pozwala stadu zachować spójność przy zmiennych gęstościach.

Jak szum lub losowość poprawiają realizm Boids?

Dodanie małych losowych zaburzeń do sił sterujących produkuje bardziej naturalny, nieregularny ruch. Bez szumu boidy zbiegają się do idealnie uporządkowanych formacji, które wyglądają mechanicznie. Mały stochastyczny komponent wprowadza niewielką indywidualną wariancję widoczną u prawdziwych zwierząt, co daje bardziej organicznie wyglądające zachowanie stadne.

Jakie rozszerzenia istnieją poza klasycznymi trzema regułami Boids?

Rozszerzenia obejmują: podążanie za liderem (niektóre boidy śledzą wyznaczonego lidera), dążenie do celu (stado kieruje się w stronę celu), podążanie ścieżką (boidy podążają za predefiniowaną trasą), unikanie drapieżnika (zachowanie rozproszenia, gdy wykryty jest drapieżnik) oraz ograniczenie terenu (boidy pozostają w zdefiniowanym regionie). Te rozszerzenia pozwalają Boids modelować konkretne scenariusze biologiczne lub sztuczne.