@@ -6,48 +6,20 @@ class Algorithm:
66 @staticmethod
77 def execute (data , n , m , e , nep , nsp , ngh , iterations ):
88
9- """
10- Pomaga myslenie o rozwiazaniach jako o kwiatkach. Kazda pszczola siedzi w danym momencie na jednym konkretnym
11- kwiatku, czyli pszczola jest reprezentacja konkretnego rozwiazania.
12-
13- n - liczba pszczol, czyli rozwiazan w puli w kazdej iteracji. Ta liczba nigdy sie nie zmieni!
14- m - liczba rozwiazan dobrych (w tym elitarnych)
15- e - liczba rozwiazan elitarnych (czyli najlepszych)
16- nep - kazda pszczola elitarna wybierze nep zblizonych rozwiazan, zeby wybrac jedno najlepsze
17- jesli wszystkie beda gorsze, zostanie na tym samym kwiatku, na ktorym jest teraz.
18- nsp - j.w., tylko dla rozwiazan dobrych, a nie elitarnych.
19- ngh - promien sasiedztwa, czyli jak dalekie rozwiazania rozpatrujemy po elitarnych/dobrych
20- max_iter - liczba iteracji
21- """
22-
23- # inicjalizujemy pule losowymi rozwiazaniami
249 pool = [AlgorithmUtils .random_solution (data ) for _ in range (n )]
2510
2611 for i in range (iterations ):
27- # dla kazdego rozwiazania obliczamy wynik - ukladamy je od najlepszych do najgorszych
2812 solutions_ranking = sorted (pool , key = lambda s : calculate_score (data , s ), reverse = True )
29- # najlepsze e rozwiazan to elitarne...
3013 elite_solutions = solutions_ranking [0 :e ]
31- # ... a kolejne (m-e) to po prostu dobre
3214 good_solutions = solutions_ranking [e :m ]
3315
34- # tworzymy nowa pule rozwiazan
3516 pool = []
36- # kazde elitarne rozwiazanie zastepujemy jednym, najlepszym sposrod nep wybranych z sasiedztwa
37- # UWAGA: to ze np. nep=4, nie znaczy ze dostajemy 4 nowe pszczoly. Po prostu sprawdzamy 4 rozwiazania, ale
38- # tylko do najlepszego z nich poleci pszczola. Jedna pszczola tu przyleciala i jedna tu zostanie!
39- # Nie jest powiedziane, ze ta pszczola bedzie znowu elitarna w kolejnej itreracji - to moze sie zmienic
4017 for es in elite_solutions :
4118 pool .append (AlgorithmUtils .best_in_neighbourhood (data , es , ngh , nep ))
42- # to samo dla dobrych rozwiazan
4319 for gs in good_solutions :
4420 pool .append (AlgorithmUtils .best_in_neighbourhood (data , gs , ngh , nsp ))
45- # dla pszczol ktore byly slabe wybieramy dla nich nowe, calkowicie losowe rozwiazania (leca gdzie indziej)
4621 for _ in range (n - m ):
4722 pool .append (AlgorithmUtils .random_solution (data ))
4823
49- # podsumowujac - jesli np. n=5, m=3, e=1, to zawsze na koniec iteracji 1 pszczola pochodzi z obszaru
50- # elitarnego, 2 z dobrych, a 2 sa losowane od nowa.
51-
5224 pool = sorted (pool , key = lambda s : calculate_score (data , s ), reverse = True )
5325 return pool [0 ]
0 commit comments