Algorytm pszczół
W informatyce i badaniach operacyjnych algorytm pszczół jest algorytmem wyszukiwania opartym na populacji , który został opracowany przez Pham, Ghanbarzadeh i in. w 2005 r. Naśladuje zachowanie kolonii pszczół miodnych w poszukiwaniu pożywienia. Algorytm w swojej podstawowej wersji wykonuje swego rodzaju przeszukiwanie sąsiedztwa połączone z przeszukiwaniem globalnym i może być stosowany zarówno do optymalizacji kombinatorycznej , jak i optymalizacji ciągłej . Jedynym warunkiem zastosowania algorytmu pszczół jest zdefiniowanie pewnej miary odległości między rozwiązaniami. Skuteczność i specyficzne możliwości algorytmu pszczół zostały udowodnione w wielu badaniach.
Metafora
Kolonia pszczół miodnych może rozprzestrzeniać się na duże odległości (ponad 14 km) iw wielu kierunkach jednocześnie, aby zbierać nektar lub pyłek z wielu źródeł pożywienia (grządki kwiatowe). Niewielka część kolonii nieustannie przeszukuje środowisko w poszukiwaniu nowych grządek kwiatowych. Te pszczoły zwiadowcze poruszają się losowo po obszarze otaczającym ul, oceniając opłacalność (wydajność energetyczną netto) napotkanych źródeł pożywienia. Po powrocie do ula zwiadowcy odkładają zebraną żywność. Osoby, które znalazły wysoce dochodowe źródło pożywienia, udają się do obszaru ula zwanego „parkietem tanecznym” i wykonują rytuał zwany tańcem machania . Poprzez taniec pszczoła zwiadowcza przekazuje miejsce swojego odkrycia bezczynnym obserwatorom, którzy przyłączają się do eksploatacji grządki kwiatowej. Ponieważ długość tańca jest proporcjonalna do oceny źródła pożywienia przez zwiadowcę, rekrutuje się więcej zbieraczy do zbierania najlepiej ocenianych grządek kwiatowych. Po tańcu zwiadowca wraca do znalezionego źródła pożywienia, aby zebrać więcej pożywienia. Tak długo, jak są oceniane jako opłacalne, bogate źródła pożywienia będą reklamowane przez zwiadowców po powrocie do ula. Zrekrutowani zbieracze mogą również tańczyć, zwiększając rekrutację do wysoko nagradzanych łat kwiatowych. Dzięki temu procesowi autokatalitycznemu rodzina pszczół jest w stanie szybko zmienić punkt ciężkości żerowania na najbardziej dochodowych grządkach kwiatowych.
Algorytm
Algorytm pszczół naśladuje strategię żerowania pszczół miodnych w poszukiwaniu najlepszego rozwiązania problemu optymalizacji. Każde rozwiązanie kandydujące jest traktowane jako źródło pożywienia (kwiat), a populacja (kolonia) n agentów (pszczół) jest wykorzystywana do przeszukiwania przestrzeni rozwiązań. Za każdym razem, gdy sztuczna pszczoła odwiedza kwiat (ląduje na roztworze), ocenia jego opłacalność (fitness).
Algorytm pszczół składa się z procedury inicjalizacji i głównego cyklu wyszukiwania, który jest powtarzany określoną liczbę T razy lub do momentu znalezienia rozwiązania o akceptowalnej sprawności. Każdy cykl wyszukiwania składa się z pięciu procedur: rekrutacji, wyszukiwania lokalnego, zmniejszania sąsiedztwa, porzucania lokalizacji i wyszukiwania globalnego.
Pseudokod standardowego algorytmu pszczół 1 dla i=1,…,ns i scout[i]=Initialise_scout() ii flower_patch[i]=Initialise_flower_patch(scout[i]) 2 wykonuj dopóki warunek_zatrzymania=TRUE i Recruitment() ii dla i =1,...,na 1 flower_patch[i]=Local_search(flower_patch[i]) 2 flower_patch[i]=Site_abandonment(flower_patch[i]) 3 flower_patch[i]=Neighbourhood_shrinking(flower_patch[i]) iii dla i = nb,...,ns 1 kwiat_patch[i]=Globalne_wyszukiwanie(kwiaty_patch[i])}
W procedurze inicjalizacji pszczoły zwiadowcze ns są losowo umieszczane w przestrzeni poszukiwań i oceniają dopasowanie rozwiązań tam, gdzie wylądują. Dla każdego rozwiązania wyznaczane jest sąsiedztwo (zwane łatą kwiatową).
W procedurze rekrutacji zwiadowcy, którzy odwiedzili nb ≤ ns najodpowiedniejsze rozwiązania (najlepsze miejsca) wykonują taniec machania. Oznacza to, że rekrutują zbieraczy, aby przeszukiwać dalej okolice najbardziej obiecujących rozwiązań. Zwiadowcy, którzy zlokalizowali najlepsze ne ≤ nb (miejsca elitarne), rekrutują każdego zbieracza nre , podczas gdy pozostali zwiadowcy nb - ne rekrutują każdego zbieracza nrb ≤ nre . Zatem liczba rekrutowanych zbieraczy zależy od rentowności źródła pożywienia.
W procedurze poszukiwania lokalnego zwerbowani zbieracze są losowo rozproszeni w grządkach kwiatowych otaczających odwiedzane przez harcerzy roztwory (eksploatacja lokalna). Jeśli któryś z zbieraczy na grządce kwiatowej wyląduje na rozwiązaniu o wyższym stopniu przydatności niż rozwiązanie odwiedzone przez zwiadowcę, ten zbieracz zostaje nowym zwiadowcą. Jeśli żaden zbieracz nie znajdzie rozwiązania o większej przydatności, rozmiar grządki kwiatowej jest zmniejszany (procedura zmniejszania sąsiedztwa). Zwykle łaty kwiatowe są początkowo definiowane na dużym obszarze, a ich rozmiar jest stopniowo zmniejszany przez procedurę zmniejszania sąsiedztwa. W rezultacie zakres lokalnej eksploracji stopniowo koncentruje się na obszarze bezpośrednio zbliżonym do lokalnej najlepszej sprawności. Jeśli nie zostanie odnotowana poprawa sprawności w danej grządce kwiatowej przez określoną liczbę cykli poszukiwań, uważa się, że znaleziono lokalne maksimum sprawności, grządka zostaje porzucona (opuszczenie miejsca) i losowo generowany jest nowy zwiadowca.
Podobnie jak w biologicznych koloniach pszczół, niewielka liczba zwiadowców wciąż eksploruje przestrzeń rozwiązań w poszukiwaniu nowych regionów o wysokiej sprawności (wyszukiwanie globalne). Globalna procedura wyszukiwania ponownie inicjalizuje ostatnie ns - nb płatów kwiatowych z losowo generowanymi rozwiązaniami.
Pod koniec jednego cyklu poszukiwań populacja zwiadowców ponownie składa się z ns zwiadowców: nr zwiadowców utworzonych przez lokalną procedurę wyszukiwania (niektóre z nich mogły zostać ponownie zainicjowane przez procedurę opuszczania terenu) oraz ns - nb zwiadowców wygenerowanych przez globalną procedurę wyszukiwania. Całkowity rozmiar sztucznej kolonii pszczół wynosi n = ne • nre +( nb - ne ) • nrb + ns (elitarne miejsca zbierania + pozostałe najlepsze miejsca zbierania + zwiadowcy) pszczół.
Warianty
Oprócz podstawowego algorytmu pszczół istnieje szereg ulepszonych lub hybrydowych wersji BA, z których każda koncentruje się na pewnych niedociągnięciach podstawowego BA. Warianty te obejmują (ale nie są do nich ograniczone) rozmyte lub wzmocnione BA (EBA), zgrupowane BA (GBA), zmodyfikowane hybrydowo BA (MBA) i tak dalej. Pseudokod dla zgrupowanego BA (GBA) jest następujący.
0
0
0
funkcja GBA %% Ustaw parametry problemu maxIteration = ..; % liczby iteracji (np. 1000-5000) maxParameters = ..; % liczba zmiennych wejściowych min = [..] ; % tablica o rozmiarze maxParameters wskazująca minimalną wartość każdego parametru wejściowego max = [..] ; % tablica o rozmiarze maxParameters wskazująca maksymalną wartość każdego parametru wejściowego %% Ustaw parametry algorytmu grupowania pszczół (GBA) R_ngh = ..; % promień płata sąsiedztwa poszukiwań pszczół z pierwszej grupy (np. 0,001 - 1) n = ..; % liczby zwiadowców (np. 4-30) nGrupy = ..; % liczba grup, z wyłączeniem grupy losowej %% automatyczne ustawienia parametrów GBA k = 3 * n / (( nGroups + 1 ) ^ 3 - 1 ); Parametr % GBA do ustawienia liczby pszczół zwiadowczych w każdej grupie groups = zera ( 1 , nGroups ) ; % Tablica do przechowywania liczby pszczół zwiadowczych dla każdej grupy zrekrutowane_pszczoły = zera ( 1 , nGroups ); % Tablica do przechowywania liczby rekrutowanych pszczół dla każdej grupy a = ((( max - min ) ./ 2 ) - R_ngh ) ./ ( nGroups ^ 2 - 1 ); % Parametr GBA do ustawiania promieni sąsiedztwa b = R_ngh - a ; % Parametr GBA do ustawiania promieni sąsiedztwa dla i = 1 : nGroups % Dla każdej grupy groups ( i ) = floor ( k * i ^ 2 ) ; % określ liczbę pszczół zwiadowczych w każdej grupie, jeśli grupy ( i ) == grupy ( i ) = 1 ; % musi być co najmniej jedna pszczoła zwiadowcza na każdą grupę end rekruted_bees = ( nGroups + 1 - i ) ^ 2 ; % ustaw liczbę rekrutowanych pszczół dla każdej grupy ngh ( i ) = a * i * i + b ; % ustawia promień poprawki dla każdej grupy end group_random = n - sum ( groups ); % przypisz pozostałe pszczoły (jeśli istnieją) do losowego wyszukiwania group_random = max ( group_random , ); % upewnij się, że nie jest to liczba ujemna %% zainicjuj macierz populacji populacja = zera ( n , maxParameters + 1 ); % Populacja n pszczół, w tym wszystkie zmienne wejściowe i ich dopasowanie do i = 1 : n populacji ( i , 1 : maxParameters )= generowanie_losowego_rozwiązania ( maxParameters , min , max ); % losowej inicjalizacji zmiennych maxParameters pomiędzy max i min populacja ( i , maxParameters + 1 ) = evalulate_fitness ( populacja ( i ,:)); % ocena przydatności każdego rozwiązania i zapisanie jej pod ostatnim indeksem macierzy populacji end sorted_population = sortrows ( populacja ); % sortuje populację na podstawie jej sprawności %% Iteracje algorytmu pogrupowanych pszczół dla i = 1 : maxIteration % Główna pętla GBA beeIndex = ; % śledź wszystkie pszczoły (tj. łatki) dla g = 1 : nGrupy % dla każdej grupy pszczół zwiadowczych dla j = 1 : grupy ( g ) % wykorzystują każdy łat w każdej grupie beeIndex = beeIndex + 1 ; % zwiększ licznik na każdą łatę dla i = 1 : zrekrutowane_pszczoły ( g ) % dla każdej zrekrutowanej pszczoły z grupy rozwiązanie = bee_waggle_dance ( sorted_population ( beeIndex , 1 : maxParameters ), ngh ( g )); % szukaj okolicy wokół wybranej poprawki/rozwiązania w promieniu ngh fit = ewaluacja_fitness ( rozwiązanie ); % ocenia przydatność ostatnio znalezionego rozwiązania , jeśli pasuje < sorted_population ( beeIndex , maxParameters + 1 ) % Problem minimalizacji: jeśli rekruter znajdzie lepszą lokalizację/poprawkę/rozwiązanie bee sorted_population ( beeIndex , 1 : maxParameters + 1 ) = [ rozwiązanie ( 1 : maxParameters ), dopasowanie ]; % kopiowania nowego rozwiązania i jego dopasowania do posortowanej macierzy populacji koniec koniec koniec koniec dla i = 1 : group_random % Dla pozostałych losowych pszczół beeIndex = beeIndex + 1 ; rozwiązanie ( beeIndex , 1 : maxParameters ) = wygeneruj losowe_rozwiązanie ( maxParameters , min , max ); % generuje nowe losowe rozwiązanie w indeksie rozwiązanie beeIndex ( beeIndex , maxParameters + 1 )= ocena_fitness ( rozwiązanie ); % ocenia jego przydatność sorted_population ( beeIndex ,:) = [ rozwiązanie ( 1 : maxParameters ), fit ]; % kopiuje nowe rozwiązanie losowe i jego dopasowanie do macierzy populacji posortowanej end sorted_population = sortrows ( sorted_population ); % sortuje populację na podstawie jej sprawności Best_solution_sofar = sorted_population ( 1 ,:); disp ( 'Najlepszy:' ); disp ( Najlepsze_rozwiązanie_daleko ); % Wyświetl najlepsze rozwiązanie bieżącej iteracji koniec % koniec pętli głównej GBA koniec % koniec funkcji main %% Funkcja Bee Waggle Dance function new_solution = bee_waggle_dance ( solution, ngh, maxParameters ) new_solution ( 1 : maxParameters ) = ( rozwiązanie - ngh ) + ( 2 * ngh .* Rand ( 1 , maxParameters )); koniec
Zobacz też
- Algorytmy optymalizacji kolonii mrówek
- Algorytm sztucznej kolonii pszczół
- Obliczenia ewolucyjne
- Hipoteza żerowania w locie Lévy'ego
- Centrum Inżynierii Produkcji
- Optymalizacja matematyczna
- Metaheurystyka
- Optymalizacja roju cząstek
- Inteligencja roju
Linki zewnętrzne
- Strona algorytmu pszczół
- Boffins zmuszają tańczące pszczoły do pracy – BBC News
- Warsztaty algorytmiczne pszczół