@@ -8,41 +8,57 @@ class Algorithm:
88 def execute (data ):
99
1010 """
11- :return: score of the best solution found
11+ Pomaga myslenie o rozwiazaniach jako o kwiatkach. Kazda pszczola siedzi w danym momencie na jednym konkretnym
12+ kwiatku, czyli pszczola jest reprezentacja konkretnego rozwiazania.
13+
14+ n - liczba pszczol, czyli rozwiazan w puli w kazdej iteracji. Ta liczba nigdy sie nie zmieni!
15+ m - liczba rozwiazan dobrych (w tym elitarnych)
16+ e - liczba rozwiazan elitarnych (czyli najlepszych)
17+ nep - kazda pszczola elitarna wybierze nep zblizonych rozwiazan, zeby wybrac jedno najlepsze
18+ jesli wszystkie beda gorsze, zostanie na tym samym kwiatku, na ktorym jest teraz.
19+ nsp - j.w., tylko dla rozwiazan dobrych, a nie elitarnych.
20+ ngh - promien sasiedztwa, czyli jak dalekie rozwiazania rozpatrujemy po elitarnych/dobrych
21+ max_iter - liczba iteracji
1222 """
1323
14- n = 4 # nr of bees == solutions
24+ n = 4
1525 m = 3
1626 e = 1
17- nep = 4 # 1 elite bee goes to 4 different places
18- # from these 4 places chooses exactly 1
19- nsp = 2 # 2 good bees goes to 2 different places
20- # from these 4 places chooses exactly 1
21- ngh = 4 # max distance from center (e.g. elite solution)
27+ nep = 4
28+ nsp = 2
29+ ngh = 4
2230 max_iter = 8
2331
24- # n losowych rozwiazan (pszczol)
32+ # inicjalizujemy pule losowymi rozwiazaniami
2533 pool = [AlgorithmUtils .random_solution (data ) for _ in range (n )]
2634
2735 for i in range (max_iter ):
2836 print ("Iter " , i )
2937
30- # calcuate all solutions and sort them all
38+ # dla kazdego rozwiazania obliczamy wynik - ukladamy je od najlepszych do najgorszych
3139 solutions_ranking = sorted (pool , key = lambda s : calculate_score (data , s ), reverse = True )
32- # choose 1 elite
40+ # najlepsze e rozwiazan to elitarne...
3341 elite_solutions = solutions_ranking [0 :e ]
42+ # ... a kolejne (m-e) to po prostu dobre
3443 good_solutions = solutions_ranking [e :m ]
3544
45+ # tworzymy nowa pule rozwiazan
3646 pool = []
37- # choose 1 solution from each elite solutions
47+ # kazde elitarne rozwiazanie zastepujemy jednym, najlepszym sposrod nep wybranych z sasiedztwa
48+ # UWAGA: to ze np. nep=4, nie znaczy ze dostajemy 4 nowe pszczoly. Po prostu sprawdzamy 4 rozwiazania, ale
49+ # tylko do najlepszego z nich poleci pszczola. Jedna pszczola tu przyleciala i jedna tu zostanie!
50+ # Nie jest powiedziane, ze ta pszczola bedzie znowu elitarna w kolejnej itreracji - to moze sie zmienic
3851 for es in elite_solutions :
3952 pool .append (AlgorithmUtils .best_in_neighbourhood (data , es , ngh , nep ))
40- # choose 1 solution from each good solutions
53+ # to samo dla dobrych rozwiazan
4154 for gs in good_solutions :
4255 pool .append (AlgorithmUtils .best_in_neighbourhood (data , gs , ngh , nsp ))
43- # dla pszczol ktore byly slabe wybieramy dla nich nowe rozwiazania (leca gdzie indziej)
56+ # dla pszczol ktore byly slabe wybieramy dla nich nowe, calkowicie losowe rozwiazania (leca gdzie indziej)
4457 for _ in range (n - m ):
4558 pool .append (AlgorithmUtils .random_solution (data ))
4659
60+ # podsumowujac - jesli np. n=5, m=3, e=1, to zawsze na koniec iteracji 1 pszczola pochodzi z obszaru
61+ # elitarnego, 2 z dobrych, a 2 sa losowane od nowa.
62+
4763 print (max (pool , key = lambda s : calculate_score (data , s )))
4864 return calculate_score (data , pool [0 ])
0 commit comments