Przejdź do treści
coden

Optymalizacja rojem cząstek: bezwładność, własne doświadczenie i doświadczenie roju

Boidy i stada, algorytm PSO, trzy składowe prędkości, przebieg na funkcji Rastrigina w porównaniu ze strategią ewolucyjną, rola bezwładności, stabilność cząstki, topologia roju i twierdzenie o braku darmowych obiadów.

13 minut Matěj Žalmánek 2026-10-15

Seria Podstawy AI Część 30 z 52
  1. Mapa sztucznej inteligencji: co jest czym i jak to do siebie pasuje
  2. Krótka historia sztucznej inteligencji: od Turinga do modeli językowych
  3. Dane, model, trening, inferencja: podstawowe pojęcia na jednym przykładzie
  4. Jak czytać zapis matematyczny: symbole, indeksy, sumy i kwantyfikatory
  5. Zbiory i relacje: klocki, z których składają się definicje w AI
  6. Funkcje i odwzorowania: dlaczego każdy model AI jest funkcją
  7. Logika i dowody: reguły, według których rozumuje AI
  8. Grafy i drzewa: struktura, na której opierają się przeszukiwanie i sieci neuronowe
  9. Algebra liniowa dla uczenia maszynowego: wektory, macierze i dlaczego AI głównie mnoży
  10. Pochodne, gradient i reguła łańcuchowa: jak model ustala, w którą stronę się uczyć
  11. Spadek gradientu: jak uczy się model
  12. Czym jest prawdopodobieństwo: od rzutu kostką do aksjomatów Kołmogorowa
  13. Prawdopodobieństwo warunkowe i twierdzenie Bayesa: jak zmienić ocenę, gdy dowiesz się czegoś nowego
  14. Zmienna losowa i dystrybuanta: jedna funkcja, która mówi o rozkładzie wszystko
  15. Funkcja gęstości i funkcja prawdopodobieństwa: dlaczego zmienna ciągła ma w punkcie prawdopodobieństwo zero
  16. Wartość oczekiwana, wariancja i kowariancja: gdzie leży rozkład, jak jest szeroki i co z czym się wiąże
  17. Przegląd rozkładów prawdopodobieństwa: Bernoulliego, dwumianowy, Poissona, jednostajny, normalny i wykładniczy
  18. Prawo wielkich liczb i centralne twierdzenie graniczne: dlaczego średnie zachowują się tak przewidywalnie
  19. Statystyka i estymacja parametrów: największa wiarygodność, MAP i przedziały ufności
  20. Teoria informacji: entropia, entropia krzyżowa i dywergencja KL — skąd się biorą funkcje straty
  21. Przeszukiwanie przestrzeni stanów: BFS, DFS, UCS i A* z animacjami
  22. Gry i przeciwnik: minimax, przycinanie alfa-beta i Monte Carlo tree search
  23. Spełnianie ograniczeń: backtracking, propagacja ograniczeń i AC-3 na sudoku i mapie czeskich krajów
  24. Logika i systemy z bazą wiedzy: wnioskowanie w przód i wstecz, rezolucja i systemy ekspertowe
  25. Planowanie: STRIPS, świat klocków, heurystyki z relaksacji i planowanie w agentach AI
  26. Przeszukiwanie lokalne i symulowane wyżarzanie: komiwojażer przez czeskie miasta wojewódzkie
  27. Algorytmy genetyczne: populacja, krzyżowanie, mutacja i selekcja na plecaku na wycieczkę
  28. Strategie ewolucyjne i programowanie genetyczne: od reguły jednej piątej do prawa Keplera
  29. Optymalizacja kolonią mrówek: jak ślad feromonowy znajduje krótką drogę
  30. Optymalizacja rojem cząstek: bezwładność, własne doświadczenie i doświadczenie roju
  31. Neuroewolucja: ewolucja wag i kształtu sieci neuronowych oraz algorytm NEAT
  32. Zbiory rozmyte i funkcje przynależności: jak zapisać „trochę ciepło”
  33. Logika rozmyta a prawdopodobieństwo: dlaczego „trochę ciepło” nie znaczy „prawdopodobnie ciepło”
  34. Logika rozmyta: t-normy, implikacje i reguły JEŻELI–TO
  35. Sterowanie rozmyte: Mamdani i Sugeno od wentylatora po wahadło na wózku
  36. Klasteryzacja rozmyta: algorytm fuzzy c-means i punkty między skupieniami
  37. Systemy neuro-rozmyte (ANFIS): reguły rozmyte, które uczą się z danych
  38. Łańcuchy Markowa: macierz przejścia, rozkład stacjonarny i PageRank
  39. Ukryte modele Markowa: algorytm Viterbiego i nieuczciwe kasyno
  40. Sieci bayesowskie: dlaczego trawa jest mokra i co z tego wynika dla zraszacza
  41. Filtr Kalmana: jak z niedokładnych pomiarów oszacować, gdzie jest samochód i jak szybko jedzie
  42. Rodzaje uczenia maszynowego: nadzorowane, nienadzorowane, półnadzorowane i inne
  43. Prompty, kontekst i RAG: jak dać modelowi właściwe informacje
  44. Wariacyjne autoenkodery (VAE): nowe obrazki z ciągłej przestrzeni latentnej
  45. Generatywne sieci przeciwstawne (GAN): fałszerz kontra detektyw
  46. Modele dyfuzyjne: jak z czystego szumu powstaje obraz
  47. Procesy decyzyjne Markowa: stany, akcje, nagrody i równania Bellmana
  48. Q-learning i DQN: uczenie się wartości akcji od tabeli po sieć neuronową
  49. Policy gradient i PPO: uczenie się bezpośrednio polityki
  50. Jak działa agent AI: model językowy w pętli z narzędziami
  51. Programowanie z agentami AI: zadanie, testy i kontrola
  52. Ocena i bezpieczeństwo systemów AI: jak mierzyć i jak pilnować

Pełny program serii Gotowe: 52 z 83 tematów

Czego się dowiesz
  • Jak cząstka roju łączy bezwładność, własne najlepsze miejsce i najlepsze miejsce roju.
  • Dlaczego bezwładność i równowaga składowych mają znaczenie i kiedy rój się zatrzymuje.
  • Dlaczego nie istnieje optymalizator najlepszy do wszystkiego i na co uważać przy algorytmach „inspirowanych naturą”.

Warto wiedzieć wcześniej: Strategie ewolucyjne i programowanie genetyczne: od reguły jednej piątej do prawa Keplera

Stado szpaków nad wieczornym miastem przelewa się jak jedno żywe stworzenie — a przecież nie ma przywódcy. Każdy ptak obserwuje tylko kilku najbliższych sąsiadów. W 1995 roku psycholog społeczny James Kennedy i inżynier elektryk Russell Eberhart zadali sobie pytanie: co by było, gdyby ptaki oprócz położenia sąsiadów przekazywały sobie również to, gdzie znalazły najwięcej pożywienia? Z ich symulacji wyłonił się jeden z najprostszych i najczęściej używanych algorytmów optymalizacyjnych w ogóle — optymalizacja rojem cząstek (particle swarm optimization, PSO).

Nawiązuje do części Strategie ewolucyjne i programowanie genetyczne oraz Optymalizacja kolonią mrówek. Wypuścimy rój na tę samą funkcję Rastrigina co strategię ewolucyjną, z tym samym startem i budżetem.

1. Stada w przyrodzie i w komputerze

Już w 1987 roku Craig Reynolds pokazał, że do wiarygodnego ruchu stada wystarczą trzy lokalne reguły. Jego „boidy” unikają zderzeń z najbliższymi sąsiadami, wyrównują z nimi kierunek lotu i trzymają się środka grupy. Nikt nie steruje całością; kształt stada wyłania się z lokalnych reguł. Kennedy z Eberhartem dodali czwartą rzecz — pamięć dobrych miejsc — i z animacji powstał optymalizator.

Definicja — trzy reguły boidów (w uproszczeniu)

Reynolds opisał reguły słownie; dziś zapisuje się je zwykle tak. Boid i ma położenie xi, prędkość vi i sąsiedztwo Si — boidy bliższe niż zadany promień. Do swojej prędkości dodaje ważoną sumę trzech wektorów:

  • separacja −∑j ∈ Si (xj − xi) / ‖xj − xi‖2 — odpychanie, tym silniejsze, im bliżej jest sąsiad;
  • wyrównanie v̄i − vi, gdzie v̄i to średnia prędkość sąsiadów;
  • spójność x̄i − xi, gdzie x̄i to średnie położenie sąsiadów.

Każdy boid korzysta więc tylko z informacji ze swojego sąsiedztwa. Równania PSO poniżej mają ten sam kształt „prędkość ← prędkość + przyciąganie do celów”, tyle że celami nie są sąsiedzi, lecz najlepsze znalezione miejsca.

2. Algorytm

Definicja — optymalizacja rojem cząstek

Minimalizujemy f : ℝn → ℝ. Rój tworzy N cząstek; cząstka i ma położenie xi, prędkość vi i swoje dotychczas najlepsze położenie pi. Rój zna najlepsze położenie spośród wszystkich, g. W każdej iteracji dla każdej cząstki:

vi ← w · vi + c1 r1 (pi − xi) + c2 r2 (g − xi),

xi ← xi + vi,

gdzie r1, r2 to liczby losowe z [0, 1) losowane osobno dla każdej współrzędnej. Jeśli f(xi) < f(pi), aktualizuje się pi, ewentualnie także g.

Typowe wartości (Clerc i Kennedy, 2002): w = 0,7298, c1 = c2 = 1,49618.

Mówiąc prościej

Każda cząstka to ptak, który leci nad krajobrazem i pamięta, gdzie było mu najlepiej. Do tego słyszy, gdzie najlepiej było całemu stadu. Jego następny krok to kompromis trzech rzeczy: lecieć dalej tam, dokąd leciał, wrócić do swojego najlepszego miejsca i skierować się do najlepszego miejsca stada. Liczby losowe r sprawiają, że każdy ptak zawiera ten kompromis trochę inaczej.

vi ← w · vi + c1 r1 (pi − xi) + c2 r2 (g − xi)

vi po lewej
nowa prędkość — o tyle cząstka przesunie się w tym kroku (xi ← xi + vi); rój nie steruje położeniem bezpośrednio, lecz przez prędkość, i dzięki temu ruch jest płynny
w · vi
bezwładność — część starej prędkości zostaje; w < 1 jednocześnie ją tłumi, aby ruch z czasem się uspokoił
c1 r1, c2 r2
siła przyciągania — c ustala średnią siłę, losowe r z [0, 1) za każdym razem inaczej ją skraca, więc cząstka nie ląduje dokładnie w celu i po drodze próbuje też miejsc dookoła
pi − xi
wektor od cząstki do jej najlepszego miejsca — im dalej, tym mocniej ciągnie ją z powrotem (jak sprężyna)
g − xi
wektor do najlepszego miejsca roju — jedyny kanał, którym do cząstki dociera cudze doświadczenie
Różnice p − x i g − x czynią z celów punkty przyciągające: siła przyciągania rośnie z odległością, a w celu jest zerowa.
Definicja — ograniczenie prędkości

Po obliczeniu każda współrzędna prędkości zostaje przycięta do przedziału [−vmax, vmax]: vid ← min(vmax, max(−vmax, vid)). Nasza implementacja przyjmuje vmax = 5,12, czyli połowę szerokości przeszukiwanego kwadratu [−5,12; 5,12]2 — cząstka nie przeleci w jednym kroku więcej niż pół mapy.

Przykład — jeden krok jednej cząstki

Cząstka stoi w x = (4,2; −3,8) z prędkością v = (0,5; 0,4). Jej najlepsze miejsce to p = (4,0; −3,1), najlepsze miejsce roju g = (1,1; −2,0). Wylosowano liczby r1 = (0,6; 0,3) i r2 = (0,5; 0,8). Pierwsza współrzędna:

  • bezwładność 0,7298 · 0,5 = 0,365,
  • poznawcza 1,49618 · 0,6 · (4,0 − 4,2) = −0,180,
  • społeczna 1,49618 · 0,5 · (1,1 − 4,2) = −2,319,
  • nowa prędkość 0,365 − 0,180 − 2,319 = −2,134, nowe położenie 4,2 − 2,134 = 2,066.

Druga współrzędna tak samo: 0,292 + 0,314 + 2,154 = 2,761, nowe położenie −3,8 + 2,761 = −1,039. Obie składowe prędkości są poniżej vmax, ograniczenie nie działa. Wartość funkcji (Rastrigina, zob. niżej) spadła z 45,90 do 6,51. Składowa społeczna jest tu największa, bo g jest daleko; poznawcza jest mała, bo p leży tuż obok cząstki.

import random

def pso(f, n, castic=40, iteraci=200, w=0.7298, c1=1.49618, c2=1.49618):
    x = [[random.uniform(-5, 5) for _ in range(n)] for _ in range(castic)]
    v = [[0.0] * n for _ in range(castic)]
    p = [xi[:] for xi in x]                              # najlepsze miejsce każdej cząstki
    g = min(p, key=f)[:]                                 # najlepsze miejsce roju
    for _ in range(iteraci):
        for i in range(castic):
            for d in range(n):
                v[i][d] = (w * v[i][d]
                           + c1 * random.random() * (p[i][d] - x[i][d])
                           + c2 * random.random() * (g[d] - x[i][d]))
                x[i][d] += v[i][d]
            if f(x[i]) < f(p[i]):
                p[i] = x[i][:]
                if f(p[i]) < f(g):
                    g = p[i][:]
    return g

Koszt algorytmu mierzy się liczbą ewaluacji f — w prawdziwych zadaniach każda jest droga (symulacja, trening modelu). Każda cząstka jest oceniana na starcie, a potem raz na iterację, łącznie N + N · T = 40 + 40 · 200 = 8 040 dla N = 40 cząstek i T = 200 iteracji. (Pseudokod powyżej wywołuje f dla przejrzystości wielokrotnie; prawdziwa implementacja zapamiętuje wartości f(pi).)

3. Trzy siły

własne najlepsze p najlepsze roju g cząstka x
Jeden krok jednej cząstki: trzy składowe i wypadkowa prędkość bezwładność poznawcza społeczna nowa prędkość
  • Bezwładność w · v — cząstka nie chce gwałtownie zmieniać kierunku. Dzięki niej rój przelatuje nad płytkimi dołkami, zamiast wpadać do każdego.
  • Składowa poznawcza c1 r1 (p − x) — własne doświadczenie: „tam było mi dobrze”. Utrzymuje różnorodność, bo każda cząstka pamięta coś innego.
  • Składowa społeczna c2 r2 (g − x) — doświadczenie roju: „tam jest najlepsze, co ktokolwiek znalazł”. Ściąga rój w jedno miejsce.

W odróżnieniu od algorytmów genetycznych nikt tu nie umiera i nic się nie krzyżuje. Informacja rozchodzi się tylko dzięki temu, że cząstki widzą cudzy sukces. A w odróżnieniu od strategii ewolucyjnych cząstka ma prędkość — pęd, który niesie ją dalej, nawet gdy akurat się nie wiedzie.

4. Rój na funkcji Rastrigina

Funkcja Rastrigina z poprzedniej części: misa z regularną siatką dołków, minimum globalne w początku układu. 40 cząstek startuje wokół punktu (4,2; −3,8), gdzie f ≈ 45,9 — tam, gdzie startowała strategia ewolucyjna:

Definicja — funkcja Rastrigina

Dla x = (x1, …, xn) ∈ [−5,12; 5,12]n

f(x) = 10n + ∑d=1n (xd2 − 10 cos(2πxd)).

Minimum globalne to f(0, …, 0) = 0; minima lokalne leżą w pobliżu każdego punktu o współrzędnych całkowitych, w obrębie kwadratu jest ich w dwóch wymiarach 11 · 11 = 121.

f(x) = 10n + ∑d (xd2 − 10 cos(2πxd))

f(x)
wartość, którą rój minimalizuje — testowy krajobraz, którego minimum znamy, więc potrafimy rozpoznać sukces
10n
przesunięcie — w początku układu cosinus wynosi 1 i każda współrzędna daje −10; ten składnik to wyrównuje, aby minimum miało wartość dokładnie 0
∑d
suma po współrzędnych — każda wnosi wkład niezależnie, więc liczba dołków rośnie z wymiarem wykładniczo (11n)
xd2
misa — ogólne nachylenie ku początkowi układu; bez niej wszystkie dołki byłyby jednakowo głębokie i nie byłoby żadnego minimum globalnego
− 10 cos(2πxd)
falowanie o okresie 1 — wydrąża dołek przy każdej liczbie całkowitej, a amplitudą 10 czyni je dość głębokimi, by metoda lokalna w nich utknęła
Przykład — wartość w punkcie startowym

Dla x = (4,2; −3,8): cos(2π · 4,2) = cos(8,4π) = cos(0,4π) ≈ 0,309 i cos(2π · (−3,8)) = cos(7,6π) = cos(1,6π) ≈ 0,309. Zatem

f = 20 + (17,64 − 3,090) + (14,44 − 3,090) = 20 + 14,550 + 11,350 ≈ 45,9.

Start leży na zboczu dołka przy (4; −4), gdzie f = 20 + (16 − 10) + (16 − 10) = 32; prawdziwe dno jest o włos bliżej początku układu, z wartością około 31,84. Wartość 31,9 po pierwszej iteracji (niżej) oznacza więc, że rój zjechał prawie na dno startowego dołka. Dalej w stronę minimum dostanie się tylko przez grzbiety między dołkami.

−5−50055 współrzędna x₁ (bez jednostki) współrzędna x₂ (bez jednostki) iteracja 0 iteracja 3 iteracja 10 iteracja 25 iteracja 60 iteracja 200
Rój 40 cząstek; gwiazda to najlepsze miejsce roju, krzyżyk minimum globalne

Po pierwszej iteracji najlepsze miejsce roju ma wartość 31,9. Potem dzieje się coś, czego strategia ewolucyjna nie robiła: rój się rozlatuje. Rozrzut cząstek rośnie z 0,7 do 1,3 w dziesiątej iteracji — cząstki przestrzeliwują swoje najlepsze miejsca i po drodze odkrywają nowe dołki. W 25. iteracji najlepsze miejsce ma wartość 1,06, jeden dołek obok minimum, a w 50. iteracji rój znajduje minimum globalne. Potem ściąga się wokół niego.

Definicja — rozrzut roju i udany przebieg

Rozrzut roju to pierwiastek ze średniego kwadratu odległości cząstek od ich środka ciężkości x̄ = (1/N) ∑i xi:

σ = √( (1/N) ∑i=1N ‖xi − x̄‖2 ).

Przebieg znalazł minimum globalne, jeśli na końcu f(g) < 0,01. Najbliższe minima lokalne mają wartość około 1 (dlatego 1,06 w 25. iteracji oznacza „sąsiedni dołek”), więc ten próg wyraźnie je odróżnia.

σ = √( (1/N) ∑i ‖xi − x̄‖2 )

σ
jedna liczba mówiąca „jak bardzo rój się rozleciał” — w jednostkach współrzędnych, więc można ją porównać z odległością dołków (1)
(1/N) ∑i
średnia po cząstkach — wynik nie zależy od wielkości roju
‖xi − x̄‖2
kwadrat odległości od środka ciężkości — mierzymy od środka roju, a nie od minimum, bo interesuje nas kształt roju, a nie to, gdzie jest; kwadrat nadaje większą wagę odległym zwiadowcom, a pierwiastek przywraca potem pierwotne jednostki

Śledzenie tego samego przebiegu po iteracjach:

IteracjaNajlepsza wartość f(g)Rozrzut σ
131,9270,70
231,9270,74
331,9270,53
525,6250,75
105,9041,29
251,0641,01
500,0070,96
100< 0,0010,51
200< 0,0010,28

Przez cztery iteracje najlepsza wartość się nie rusza, a rój w tym czasie ściąga się do startowego dołka (w trzeciej iteracji σ wynosi tylko 0,53); potem bezwładność i przyciąganie do g znów go rozciągają, a najlepsza wartość spada dołek po dołku — 31,9, 25,6, 5,9, 1,06. Minimum zostaje znalezione w 50. iteracji, ale σ wynosi wtedy wciąż 0,96: rój skupia się wokół minimum dopiero później.

Ze stu przebiegów z różnymi ziarnami rój znalazł minimum globalne w 97 — przy budżecie 8 040 ewaluacji. Strategia ewolucyjna (15, 100) z 8 000 ewaluacji tego samego zadania odniosła sukces w 32 przypadkach. Gdy rój zamiast z rogu startuje rozproszony po całym kwadracie, udaje mu się we wszystkich stu.

5. Bezwładność i równowaga sił

Co się stanie, gdy zmienimy tylko bezwładność? Wykres pokazuje, jak daleko od siebie są cząstki (oś pionowa jest logarytmiczna):

10010-210-410-610-8 050100150200 iteracja (numer) rozrzut roju σ (skala log.)
Rozrzut roju w zależności od bezwładności w w = 0,4w = 0,7298w = 0,9

Przy w = 0,4 rój zapada się w jeden punkt, zanim zdąży się rozejrzeć — utyka w dołku o wartości 24,9. Przy w = 0,9 pozostaje cały czas rozproszony: minimum znajduje, ale nigdy nie skupia się wokół niego i go nie dopracowuje. Ze stu przebiegów dla każdego ustawienia:

UstawienieZnalazł minimumŚrednia najlepsza wartość
w = 0,7298, c1 = c2 = 1,4961897 ze 1000,18
w = 0,993 ze 1000,003
w = 0,40 ze 10024,2
tylko społeczna (c1 = 0)55 ze 1003,0
tylko poznawcza (c2 = 0)0 ze 10018,6

Bez składowej społecznej rój to tylko czterdziestu samotnych wspinaczy, którzy nic o sobie nie wiedzą — żaden nie wydostanie się z rogu. Bez poznawczej wszyscy gonią za jednym przywódcą i przez połowę czasu utykają razem z nim. Dopiero obie składowe razem dają równowagę między eksploracją a eksploatacją, którą spotkaliśmy już przy wyżarzaniu.

6. Dlaczego rój nie szaleje

Prędkość wciąż się sumuje. Dlaczego nie rośnie do nieskończoności? Odpowiedź daje analiza jednej cząstki, gdy na chwilę zapomnimy o losowości.

Twierdzenie — stabilność cząstki

Rozważmy jednowymiarową cząstkę ze stałymi p i g oraz, zamiast c1r1, c2r2, stałe liczby o sumie φ. Położenie podlega wtedy liniowej rekurencji

xt+1 = (1 + w − φ) xt − w xt−1 + const

a cząstka jest zbieżna (do średniej ważonej p i g) wtedy i tylko wtedy, gdy |w| < 1 i 0 < φ < 2 (1 + w).

Mówiąc prościej

Cząstka zachowuje się jak ciężarek na sprężynie z tłumieniem: przyciąga ją punkt między jej a rojowym najlepszym miejscem, bezwładność przenosi ją przez ten punkt i potem z powrotem. Gdy tłumienie jest wystarczające, a sprężyna niezbyt sztywna, drgania maleją i cząstka się zatrzymuje. Przy wartościach w = 0,7298 i c1 + c2 ≈ 2,99 warunek jest spełniony (2 · 1,7298 ≈ 3,46), więc rój stopniowo się skupia — ale na tyle powoli, by po drodze się rozejrzeć. Do tego prędkość zwykle ogranicza się od góry, aby cząstka nie wyleciała poza przeszukiwany obszar.

Dowód — skąd się biorą rekurencja i warunki

Bez losowości jednowymiarowy krok to vt+1 = wvt + φ1(p − xt) + φ2(g − xt) oraz xt+1 = xt + vt+1. Oznaczmy φ = φ1 + φ2 i P = (φ1p + φ2g)/φ (średnia ważona obu najlepszych miejsc). Wtedy φ1(p − x) + φ2(g − x) = φ(P − x), a po podstawieniu vt = xt − xt−1:

xt+1 = (1 + w − φ) xt − w xt−1 + φP.

Odchylenie et = xt − P spełnia tę samą rekurencję bez stałej, więc et = aλ1t + bλ2t, gdzie λ1,2 to pierwiastki równania charakterystycznego λ2 − (1 + w − φ)λ + w = 0. Cząstka zatrzymuje się w P wtedy i tylko wtedy, gdy |λ1|, |λ2| < 1. Dla równania kwadratowego λ2 + aλ + b = 0 zachodzi to dokładnie wtedy, gdy |b| < 1 i 1 ± a + b > 0 (kryterium Jury’ego). Tutaj b = w, a = −(1 + w − φ):

  • |w| < 1,
  • 1 − (1 + w − φ) + w = φ > 0,
  • 1 + (1 + w − φ) + w = 2(1 + w) − φ > 0. ∎

xt+1 = (1 + w − φ) xt − w xt−1 + φP

xt+1
następne położenie — zależy od dwóch poprzednich, bo prędkość jest różnicą dwóch położeń; dlatego cząstka zachowuje się jak drgające ciało, a nie jak kula tocząca się po zboczu
(1 + w − φ) xt
bieżące położenie przesunięte bezwładnością (+w) i ściągnięte przyciąganiem (−φ) — pojedynek „lecieć dalej” z „wrócić”
− w xt−1
pamięć poprzedniego kroku — ten składnik wnosi pęd; jego współczynnik w jest iloczynem pierwiastków, dlatego tłumienie wyznacza właśnie bezwładność
φP
kotwica — przyciąganie średniej ważonej p i g; wokół niej cząstka drga i w niej się zatrzymuje

Jak szybko się zatrzyma? Dla typowych φ oba pierwiastki wychodzą zespolone (cząstka drga) i mają tę samą wartość bezwzględną √w, bo ich iloczyn wynosi w. Amplituda odchylenia jest więc w każdej iteracji mnożona przez √w i spada o połowę po ln 2 / (−ln √w) iteracjach. Przy średnim φ = (c1 + c2)/2 = 1,49618 (losowe r ma średnią ½):

Bezwładność wTłumienie na iterację √wCzas połowicznego zaniku odchylenia
0,40,6321,5 iteracji
0,72980,8544,4 iteracji
0,90,94913,2 iteracji

Dokładnie odpowiada to wykresowi rozrzutu powyżej: przy w = 0,4 rój skupia się w kilka iteracji, przy w = 0,9 drgania wygasają przez dziesiątki iteracji. To uproszczenie — prawdziwe r losuje się w każdym kroku, a p, g się zmieniają — ale rząd wielkości się zgadza. I uwaga: przy w = 0,4 granica 2(1 + w) = 2,8 jest mniejsza niż największe możliwe φ = c1 + c2 ≈ 2,99, więc wyjątkowo silne losowe przyciąganie rozkołysze cząstkę na jeden krok (tłumienie 1,280 > 1).

7. Kto kogo słyszy: topologia

Definicja — topologia roju

Topologia to graf, który określa, czyje najlepsze miejsca widzi cząstka. W topologii globalnej (gbest) każda widzi wszystkie, a g jest wspólne. W pierścieniowej (lbest) cząstki leżą w pierścieniu, a cząstka i widzi tylko i − 1, i oraz i + 1; zamiast g używa najlepszego miejsca swojego sąsiedztwa.

Mówiąc prościej

W topologii globalnej każdy od razu wie o najlepszym znalezisku — rój jest szybki, ale łatwo daje się jednemu szczęściarzowi pociągnąć do minimum lokalnego. W pierścieniu wiadomość rozchodzi się od sąsiada do sąsiada; różne części roju w tym czasie badają różne miejsca. Wolniej, ale ostrożniej.

Formalnie każda cząstka i ma sąsiedztwo S(i) i w regule prędkości zamiast wspólnego g używa gi = pk, gdzie k = arg minj ∈ S(i) f(pj). Topologia globalna ma S(i) = {1, …, N}, pierścieniowa S(i) = {i − 1, i, i + 1} (indeksy modulo N). Ile iteracji trwa, zanim wiadomość o nowym znalezisku dotrze do wszystkich? W topologii globalnej jedna. W pierścieniu przesuwa się na iterację najwyżej o jednego sąsiada w każdą stronę, a najdalsza cząstka w pierścieniu 40 cząstek jest 20 miejsc dalej — wiadomość dotrze do niej najwcześniej po 20 iteracjach. Tak długo odległe części roju mogą badać na własną rękę.

W naszym dwuwymiarowym zadaniu pierścień znalazł minimum we wszystkich 100 przebiegach, topologia globalna w 97. Różnica jest wyraźniejsza w dziesięciu wymiarach, gdzie dołków jest astronomicznie wiele: po 2 000 iteracji topologia globalna skończyła średnio na wartości 5,84, pierścieniowa na 4,57. Minimum globalnego nie znalazła żadna — dziesięciowymiarowa funkcja Rastrigina jest dla 40 cząstek naprawdę trudna.

8. Uwaga na metafory

Twierdzenie — nie ma darmowych obiadów (Wolpert i Macready, 1997)

Uśrednione po wszystkich możliwych funkcjach celu na zbiorze skończonym wszystkie algorytmy, które nie oceniają tego samego punktu dwa razy, mają taką samą oczekiwaną skuteczność.

Dokładniej: niech X i Y będą zbiorami skończonymi, f : X → Y funkcją celu, a dmy ciągiem wartości, które algorytm zobaczy podczas m różnych ewaluacji. Wtedy dla dowolnych dwóch algorytmów a1, a2

∑f P(dmy | f, m, a1) = ∑f P(dmy | f, m, a2),

gdzie sumuje się po wszystkich |Y||X| funkcjach. Każda miara skuteczności, która zależy tylko od zobaczonych wartości (na przykład najlepszej znalezionej), ma więc po wszystkich funkcjach taką samą średnią.

Mówiąc prościej

Nie istnieje uniwersalnie najlepszy optymalizator. Algorytm, który błyszczy na jednym rodzaju zadań, musi być gdzie indziej gorszy. Rój jest świetny na gładkich funkcjach o regularnej strukturze, jak funkcja Rastrigina; na komiwojażerze bez modyfikacji by się nie sprawdził.

Po sukcesie mrówek i roju posypały się algorytmy „inspirowane naturą”: świetliki, kukułki, nietoperze, szare wilki, harmonia w zespole jazzowym. Kenneth Sörensen zwrócił uwagę w 2015 roku, że wiele z nich to stare pomysły w nowym kostiumie — metafora zastąpiła opis matematyczny i utrudniła porównanie. Dobre pytanie przy każdym nowym algorytmie nie brzmi więc „czym jest inspirowany”, lecz „co robi inaczej niż te znane i po czym to widać”.

9. Roje w praktyce

  • Strojenie parametrów. PSO jest popularne tam, gdzie parametrów jest mało, gradientu nie znamy, a jedna ewaluacja to symulacja: nastawy regulatorów, kształt anten, sterowanie sieciami energetycznymi czy hiperparametry modeli uczenia maszynowego.
  • Roboty w roju. Na Harvardzie w 2014 roku 1 024 małe roboty Kilobot ułożyły według lokalnych reguł zadane kształty — bez centralnego sterowania, tylko dzięki komunikacji z sąsiadami.
  • A co z dronami na pokazach sztucznych ogni? Pokazy świetlne z tysiącami dronów to nie inteligencja roju: każdy dron leci po z góry obliczonej trasie z centralnego planu. Rój w prawdziwym sensie decyduje sam, według sąsiadów.

10. Podsumowanie

  • Cząstka w PSO zmienia prędkość według bezwładności, własnego najlepszego miejsca i najlepszego miejsca roju.
  • Na funkcji Rastrigina rój znalazł minimum w 97 na 100 przebiegów — strategia ewolucyjna z tym samym startem i budżetem w 32.
  • Bezwładność decyduje, jak długo rój bada: przy małej zapada się przedwcześnie, duża nie pozwala mu dopracować wyniku. Bez składowej społecznej i bez poznawczej rój zawodzi.
  • Cząstka jest jak tłumiona sprężyna; dla |w| < 1 i 0 < φ < 2(1 + w) się zatrzymuje.
  • Topologia pierścieniowa rozprzestrzenia informację wolniej i w trudnych zadaniach bywa odporniejsza; a zgodnie z twierdzeniem o braku darmowych obiadów nie istnieje optymalizator najlepszy do wszystkiego.

Chcesz to wypróbować? Poproś agenta AI, żeby napisał PSO z wizualizacją roju, i daj mu własny krajobraz — na przykład funkcję z dwiema odległymi dolinami — a potem obserwuj, czy rój się podzieli.

Masz inne zdanie? Napisz na support@coden-app.com.

Agent na twoim komputerze, sterowany z telefonu