You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: technical-docs.md
+46-26Lines changed: 46 additions & 26 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,55 +1,83 @@
1
1
# Technická dokumentace
2
-
Tohle je technická dokumentace programu Mastermind - testování algoritmů
2
+
Tohle je technická dokumentace programu Mastermind - testování algoritmů. Byla vytvořena jako příloha k bakalářské práci Logik - algoritmy a strategie.
3
3
4
4
## Obsah
5
5
Dokumentace obsahuje popisy jednotlivých funkcí a jejich propojení.
6
6
-[Process](#installation)
7
-
-[Functions](#functions)
8
-
-[main_function](#main_function)
9
-
-[Global variables]
7
+
-[Proměnné](#proměnné)
8
+
-[Funkce](#funkce)
9
+
10
+
## Proměnné
11
+
len_pegs - označuje počet pozic, v bakalářské práci tuto hodnotu značíme písmenem $n$.
12
+
13
+
len_colours - určuje počet barev (v práci jako $k$).
14
+
15
+
all_scores - seznam všech ohodnocení v $H_{n,k}$
16
+
17
+
all_codes - seznam všech kódů $H_{n,k}$
18
+
19
+
start_code - volba prvního pokusu, aby algoritmus nemusel procházet všechny kódy
20
+
21
+
possible_codes - Množina kandidátů aktuálního stavu.
choose_from_candidates - proměnná, která udává, zda algoritmus vybírá kódy pro další pokusy pouze z množiny kandidátů (True), anebo z celého prostoru kódů (False)
34
+
35
+
partition_table_value - uchovává hodnotu valuace pro danou množinu kandidátů a kód.
36
+
10
37
11
38
## Funkce
12
39
13
40
#### evaluate_codes
14
-
Funkce evaluate_codes na vstupu dostane dva kódy a počet pozic a barev. Vrátí ohodnocení těchto dvou kódů. Nejprve spočítá počet černých kolíčků a pčty výskytů barev v obou kódech. Následně vypočítá počet bílých kolíčků podle definice ohodnocení.
41
+
Funkce evaluate_codes na vstupu dostane dva kódy a počet pozic a barev. Vrátí ohodnocení těchto dvou kódů. Nejprve spočítá počet černých kolíčků a počty výskytů barev v obou kódech. Následně vypočítá počet bílých kolíčků podle definice ohodnocení.
15
42
16
43
#### generate_all_codes
17
-
Funkce generate_all_codes vygeneruje seznam všech kódů podle zadaného počtu pozic a počtu barev. Prochází všechna čísla od nuly do k^n - 1 a každé číslo konvertuje do kódu, který v lexikografickém pořadí odpovídá danému číslu.
44
+
Funkce generate_all_codes vygeneruje seznam všech kódů podle zadaného počtu pozic a počtu barev. Prochází všechna čísla od nuly do $k^n - 1$ a každé číslo konvertuje do kódu, který v lexikografickém pořadí odpovídá danému číslu.
18
45
19
46
#### generate_all_scores
20
47
Tato funkce vygeneruje seznam všech možných ohodnocení pro zadaný počet pozic len_pegs. Nezohledňuje počet barev, a tedy pro dvě barvy generuje i ohodnocení, která mají lichý počet bílých kolíčků. Díky použitým valuacím a strategiím to ale na algoritmech nic nezmění.
21
48
22
49
#### find_max
23
-
Funkce pro zadané velikosti |K_{u,r}| vrátí maximální hodnotu.
50
+
Funkce pro zadané velikosti $|K_{u,r}|$ vrátí maximální hodnotu.
24
51
25
52
#### find_entropy
26
-
Funkce pro zadané velikosti |K_{u,r}| vrátí entropii tohoto rozdělení. Entropie je před vrácením výsledku zaokrouhlena na 7 desetinných míst, protože při různém pořadí výpočtu entropie se tento součet zaokrouhluje jinak a nevracel by rovnosti pro stejné rozdělení potomků.
53
+
Funkce pro zadané velikosti $|K_{u,r}|$ vrátí entropii tohoto rozdělení. Entropie je před vrácením výsledku zaokrouhlena na 7 desetinných míst, protože při různém pořadí výpočtu entropie se tento součet zaokrouhluje jinak a nevracel by rovnosti pro stejné rozdělení potomků.
27
54
28
55
#### find_number_of_parts
29
-
Funkce pro zadané velikosti |K_{u,r}| vrátí počet neprázdných potomků.
56
+
Funkce pro zadané velikosti $|K_{u,r}|$ vrátí počet neprázdných potomků.
30
57
31
58
#### lower_is_better
32
59
Tato funkce slouží na místo strategie. Porovnává hodnoty valuací a vrací pravdivostní hodnoty, zda je první množina menší než druhá. Ve výsledku napomáhá k nalezení minimální hodnoty valuace.
33
60
34
61
#### higher_is_better
35
62
Tato funkce slouží na místo strategie. Porovnává hodnoty valuací a vrací pravdivostní hodnoty, zda je první množina větší než druhá.Ve výsledku napomáhá k nalezení maximální hodnoty valuace.
36
63
37
-
------------------------------------------------------------ Find expected size - doplnit nebo vymazat ---- ------------------------------------------------------
38
-
39
64
#### create_next_partition
40
-
Tato funkce bere jako argumenty množinu kandidátů K (possible codes) a další pokus u. Vrátí počty prvků v potomcích K_{u,r} pro všechna ohodnocení r.
65
+
Tato funkce bere jako argumenty množinu kandidátů $K$ (possible codes) a další pokus $u$. Vrátí počty prvků v potomcích $K_{u,r}$ pro všechna ohodnocení $r \in S_{n,k}$.
41
66
42
67
#### find_best_guess
43
-
Tato funkce pro aktuální stav a zvolenou valuaci a strategii vrátí odpovídající další pokus.
Toto je hlavní funkce, která testuje algoritmy. Prochází stavový prostor a pro každý stav nalezne další pokus. Počty pokusů přičítá v případě, kdy zkoumá potomka s ohodnocením (len_pegs,0)
70
+
Tato funkce pro aktuální stav a zvolenou valuaci a strategii vrátí odpovídající další pokus. Vychází z proměnné possible_codes - množiny kandidátů. Projde celý prostor kódů (případně pouze množinu kandidátů) a pro každý kód (code) nalezne potomky množiny kandidátů vzhledem k tomuto kódu (temp_partition) a jejich velikosti (temp_partition_table). O to se stará funkce create_next_partition. Dále nalezne valuaci aktuálního kódu (temp_partition_table_value) a porovná ji s aktuální nejlepší hodnotou z hlediska zvolené strategie (compare_function). Ve chvíli, kdy je aktuální hodnota valuace menší, respektive větší (podle zvolené strategie) než průběžná nejlepší hodnota valuace (best_partition_table_value), program aktualizuje nejlepší hodnoty valuace, potomků a velikostí potomků. Pokud se valuace aktuálního kódu rovná průběžné nejlepší hodnotě valuace, program zkontroluje, jestli byl průběžně nejlepší kód kandidát. Pokud nebyl a aktuální kód je kandidátem, algoritmus aktualizuje nejlepší hodnoty valuace, potomků a velikostí potomků.
47
71
72
+
Díky tomu, že algoritmy vybírají lexikograficky nejmenší kódy z množiny kódů s nejlepší valuací (případně průniku této množiny s množinou kandidátů), tak stačí uchovávat pouze první kód s nejlepší hodnotou valuace. Případně stačí kontrolovat, zda náleží do množiny kandidátů.
48
73
49
-
#### solve_one_game
50
-
Tato funkce je implementací algoritmu 1 v bakalářské práci. Na vstupu vezme počet pozic a barev, tajný kód, valuaci, strategii, případný pevně stanovený první pokus a True/False hodnotu, jestli se další pokus vybírá pouze z kandidátů.
74
+
Ve chvíli, kdy program projde všechny kódy, ze kterých vybírá, vrátí zvolený nejlepší kód pro tento stav (best_next_guess). Společně s ním vrací i proměnné best_partition_table a best_partition.
51
75
52
-
Z důvodu zrychlení algoritmu je průběžný nejlepší další pokus uchováván v průběhu prohledávání všech kódů jako dalšího pokračování. Díky tomu, že další pokus je vybírán jako lexikograficky nejmenší kód, který minimalizuje/maximalizuje valuaci, stačí si uchovávat vždy aktuální nejlepší hodnotu a fakt, jestli je aktuálně nejlepší kód kandidátem.
76
+
#### get_results_of_algorithm
77
+
Toto je hlavní funkce, která testuje algoritmy. Prochází stavový prostor a pro každý stav nalezne další pokus. Počty pokusů přičítá v případě, kdy zkoumá potomka vzhledem k ohodnocení $(n ,0)$.
78
+
79
+
#### solve_one_game
80
+
Tato funkce je implementací algoritmu $1$ v bakalářské práci. Na vstupu vezme počet pozic a barev, tajný kód, valuaci, strategii, případný pevně stanovený první pokus a True/False hodnotu, jestli se další pokus vybírá pouze z kandidátů.
53
81
54
82
Pokud další pokus dostal maximální ohodnocení, shoduje se s tajným kódem a hra končí.
55
83
@@ -63,14 +91,6 @@ Tato funkce vrátí hodnotu valuace pro nějaký první pokus a zadanou valuaci.
63
91
64
92
65
93
66
-
## globální proměnné
67
-
len_pegs - tato proměnná označuje počet pozic, v práci tuto hodnotu značíme písmenem n.
68
-
len_colours - tato hodnota určuje počet barev (v práci jako k).
69
-
all_scores - seznam všech ohodnocení v H_{n,k}
70
-
all_codes - seznam všech kódů H_{n,k}
71
-
start_code - volba prvního pokusu, aby algoritmus nemusel procházet všechny kódy
72
-
possible_codes - Množina kandidátů aktuálního stavu.
0 commit comments