Skip to content

Commit 5c9d0ee

Browse files
authored
Merge pull request #6 from Wwarrior1/comments-refactor
Removed unnecessary debug stage comments
2 parents 634bb7a + 4b47b4d commit 5c9d0ee

File tree

3 files changed

+16
-65
lines changed

3 files changed

+16
-65
lines changed

README.md

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,19 @@
22
[Operational Research] University project of distributed server caching using Pham's bee algorithm
33

44
# Running
5-
```python main.py```, providing the file name in the source code
5+
```python main.py [-h] [-i I] [-o O] [-n N] [-m M] [-e E] [-nep NEP] [-nsp NSP]
6+
[-ngh NGH] [-max MAX] [-s S]
7+
8+
opcjonalne argumenty:
9+
-h, --help display help
10+
-i I, -input_file I input file path
11+
-o O, -output_file O output file path
12+
-n N, -bees N number of bees
13+
-m M, -good_solutions M number of good solutions
14+
-e E, -elite_solutions E number of elite solutions
15+
-nep NEP number of solutions in elite neighbourhood
16+
-nsp NSP number of solutions in good solutions' neighbourhood
17+
-ngh NGH neighbourhood radius
18+
-max MAX, -iterations MAX number of iterations
19+
-s S, -save_solution S save solution to the output file? (true/false)
20+
```

algorithm/algorithm.py

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -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]

algorithm/utils.py

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ class AlgorithmUtils:
66

77
@staticmethod
88
def random_solution(data):
9-
"""
10-
Nie jest do doskonaly sposob, ale na nic lepszego nie wpadlismy
11-
"""
129

1310
res = dict()
1411
avg_video_size = sum(data.videos_sizes)/len(data.videos_sizes)
@@ -28,28 +25,13 @@ def random_solution(data):
2825
@staticmethod
2926
def random_neighbour(data, solution, radius):
3027

31-
"""
32-
Na razie to dziala tak, ze 'radius' razy losujemy sasiada w odleglosci 1
33-
Potencjalnie mozemy wyladowac w odleglosci radius lub mniejszej (w szczegolnosci wrocic do solution) - to chyba
34-
nie szkodzi?
35-
Nie ma tez gwarancji, ze sie nie powtorza - to chyba nie szkodzi?
36-
Prawdopodobienstwo wylosowania kazdego rozwiazania niekoniecznie jest rowne. Ale watpie czy da sie lepiej.
37-
38-
TODO or not TODO? Zostawiamy to, czy ktos ma lepszy pomysl? Ja nie. :)
39-
"""
40-
4128
res = AlgorithmUtils.solution_copy(solution)
4229
if radius == 0:
4330
return res
4431

45-
# licze to wczesniej, zeby nie robic tego wielokrotnie w list comprehension
4632
free_space_on_server = \
4733
[AlgorithmUtils.free_space(data, solution, s) for s in range(data.amount_of_cache_servers)]
4834

49-
# generujemy liste moliwych do wykonania elementarnych modyfikacji rozwiazania
50-
# sa to operacje dwoch typow: dodaj albo usun
51-
# dodac mozemy te filmy, ktore sie smieszcza
52-
# usunac mozemy te, ktore sa aktualnie w rozwiazaniu
5335
acceptable_ops = [(s, v)
5436
for s in range(data.amount_of_cache_servers)
5537
for v in range(len(data.videos_sizes))
@@ -69,15 +51,6 @@ def random_neighbour(data, solution, radius):
6951
@staticmethod
7052
def best_in_neighbourhood(data, solution, radius, number_of_bees):
7153

72-
"""
73-
Wysylamy losowo 'number_of_bees' pszczol do zbadania obszaru o promieniu radius.
74-
Zwracamy najlepsze z tych rozwiazan.
75-
76-
TODO Staralem sie wyliczac score od razu, zeby potem nie robic tego ponownie przy max(...) i w ostatnim ifie
77-
Stad taka dziwna lista krotek: neighbours = [(solution, score(solution)), ...]
78-
Da sie to bardziej zoptymalizowac?
79-
"""
80-
8154
neighbours = []
8255
for _ in range(number_of_bees):
8356
neighbour = AlgorithmUtils.random_neighbour(data, solution, radius)
@@ -87,20 +60,11 @@ def best_in_neighbourhood(data, solution, radius, number_of_bees):
8760

8861
@staticmethod
8962
def free_space(data, solution, server):
90-
91-
"""
92-
Ile wolnych MB na danym serwerze (do sprawdzania, czy mozna dodac film)
93-
"""
94-
9563
return data.cache_size - sum([data.videos_sizes[v] for v in solution[server]])
9664

9765
@staticmethod
9866
def solution_copy(solution):
9967

100-
"""
101-
Bo python.
102-
"""
103-
10468
res = dict()
10569
for s in solution:
10670
res[s] = solution[s][:]

0 commit comments

Comments
 (0)