Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:ggp:mcts [2016/05/18 01:41]
msl [Monte Carlo Tree Search]
pl:dydaktyka:ggp:mcts [2019/06/27 15:50] (aktualna)
Linia 26: Linia 26:
 ==== Ćwiczenia ==== ==== Ćwiczenia ====
  
-  - bazując na kodzie z poprzednich zajęć proszę zaimplementować gracza ​''​SampleMCGamer.java''​ +  - proszę przyjrzeć się przykładowej implementacji algorytmu Monte Carlo z pliku ''​SampleMonteCarloGamer.java''​ 
-    * metoda maszyny stanowej ''​getRandomJointMove''​ może okazać się pomocna +  - proszę przeprowadzić pojedynek między algorytmem Alpha-Beta ​(lub przynajmniej zwykłym MiniMax) ​i algorytmem Monte Carlo:
-    * średni wynik powinien zostać wyliczony poprzez formułę: ${z_i + 0.5*r_i}\over{n_i}$,​ gdzie $z_i$ to liczba zwycięstw przy $i$-tym ruchu, $r_i$ to liczba remisów, a $n_i$ to liczba wszystkich symulacji z wykonaniem $i$-tego ruchu  ​ +
-  - proszę przeprowadzić pojedynek między algorytmem Alpha-Beta i algorytmem Monte Carlo:+
     * na małej grze, np. kółko i krzyżyk     * na małej grze, np. kółko i krzyżyk
     * na dużej grze, np. warcabach normalnych rozmiarów     * na dużej grze, np. warcabach normalnych rozmiarów
Linia 38: Linia 36:
 Bardziej ambitnym rozszerzeniem algorytmu Monte Carlo jest **inteligentne** próbkowanie automatów do gry. Zamiast losowo wybierać automat do gry, faworyzujemy automaty, które sprawowały się najlepiej, tj. z początku gramy zupełnie losowo, z czasem coraz bardziej przekonując się do wybierania automatów, z którymi dotychczas najczęściej wygrywaliśmy. Matematycznie,​ można to wyrazić za pomocą formuły: Bardziej ambitnym rozszerzeniem algorytmu Monte Carlo jest **inteligentne** próbkowanie automatów do gry. Zamiast losowo wybierać automat do gry, faworyzujemy automaty, które sprawowały się najlepiej, tj. z początku gramy zupełnie losowo, z czasem coraz bardziej przekonując się do wybierania automatów, z którymi dotychczas najczęściej wygrywaliśmy. Matematycznie,​ można to wyrazić za pomocą formuły:
  
-$$UCT = \overline{wynik_i} + \sqrt{{2n}\over{n_i+1}$$+$$UCT = \overline{wynik_i} + c*\sqrt{{n}\over{n_i}$$
  
 gdzie: gdzie:
   * $\overline{wynik_i}$ to dotychczasowy średni wynik $i$-tej maszyny   * $\overline{wynik_i}$ to dotychczasowy średni wynik $i$-tej maszyny
 +  * $c$ to parametr odpowiadający za to, jaką część czau algorytm poświęci na eksplorację nieznanych ruchów:
 +    * domyślna wartość wynikająca z teorii wynosi $\sqrt{2}$
   * $n$ to liczba rozegranych gier   * $n$ to liczba rozegranych gier
   * $n_i$ to liczba gier rozegranych na $i$-tej maszynie   * $n_i$ to liczba gier rozegranych na $i$-tej maszynie
-  * $+ 1$ dodane jest tylko po to, żeby uniknąć dzielenia przez zero 
  
 Formuła UCT z jednej strony faworyzuje ruchy, które mają duży średni wynik; z drugiej strony druga część formuły zwraca większe wartości dla ruchów mniej sprawdzonych. Formuła UCT z jednej strony faworyzuje ruchy, które mają duży średni wynik; z drugiej strony druga część formuły zwraca większe wartości dla ruchów mniej sprawdzonych.
Linia 51: Linia 50:
  
 Algorytm można podzielić na cztery fazy: Algorytm można podzielić na cztery fazy:
-  - wybór: jeżeli ​chociaż jeden możliwy ruch z przeszukiwanego węzła ​ma policzone statystyki (już kiedyś był zagrany) używamy formuły UCT, aby wybrać ruch. :!: **UWAGA** :!: podobnie jak w algorytmie MiniMax zakładamy, że na przemian wykonywane są ruchy nasze i wroga. Jeżeli wróg wykonuje ruch, stara się maksymalizować swoje wyniki: $\sqrt{{2n}\over{n_i+1}} + (1 - \overline{wynik_i})$. Powtarzamy to tak długo jak możemy+  - wybór: jeżeli ​wszystkie ​możliwe ruchy z przeszukiwanego węzła ​mają policzone statystyki (każdy ​już kiedyś był zagrany) używamy formuły UCT, aby wybrać ruch. Jeśli nie, przechodzimy do fazy rozrostu. 
-  - rozrost: jeżeli żaden ruch z danego węzła nie był nigdy grany, wybieramy losowy ruch.+    * :!: **UWAGA** :!: podobnie jak w algorytmie MiniMax zakładamy, że na przemian wykonywane są ruchy nasze i wroga. Jeżeli wróg wykonuje ruch, stara się maksymalizować swoje wyniki ​(lub minimalizować nasze, co jest tożsame w przypadku gier o sumie zerowej). Zatem, albo modyfikujemy formułę UCT, np. : $(1 - \overline{wynik_i}) + c*\sqrt{{n}\over{n_i}}$, albo odpowiednio zapisujemy wyniki
 +  - rozrost: jeżeli żaden ruch z danego węzła nie był nigdy grany, wybieramy losowy ​jeszcze niegrany ​ruch.
   - symulacja: z węzła wybranego w fazie rozrostu, przeprowadzamy losową symulację Monte Carlo   - symulacja: z węzła wybranego w fazie rozrostu, przeprowadzamy losową symulację Monte Carlo
-  - propagacja wyników wstecz: po wygranej lub przegranej, odpowiednio aktualizujemy statystyki odpowiednich ruchów+  - propagacja wyników wstecz: po wygranej lub przegranej, odpowiednio aktualizujemy statystyki odpowiednich ruchów ​(nie obejmuje to ruchów wykonanych w ramach symulacji).
  
 {{ :​pl:​dydaktyka:​ggp:​mcts-fazy.png?​700 |}} {{ :​pl:​dydaktyka:​ggp:​mcts-fazy.png?​700 |}}
Linia 66: Linia 66:
 ==== Ćwiczenia ==== ==== Ćwiczenia ====
  
-  - Proszę zaimplementować gracza ''​SampleMCTSGamer.java''​ +  - Bazując na graczu ''​SampleMonteCarloGamer.java'',​ proszę zaimplementować gracza ''​SampleMCTSGamer.java''​ 
-  - Proszę przeprowadzić serię pojedynków ''​SampleMCTSGamer.java''​ vs ''​SampleMCGamer.java''​ w warcaby normalnych rozmiarów, czy widać różnicę między wynikami tych botów?+      * należy zauważyć, że algorytm MCTS zakłada, że nagroda za zwycięstwo wynosi 1, a nie 100. Podobnie remis powinien być traktowany ​ jako 0,5.  
 +  - Proszę przeprowadzić serię pojedynków ''​SampleMCTSGamer.java''​ vs ''​SampleMonteCarloGamer.java''​ w warcaby normalnych rozmiarów ​lub inną grę o dużej przestrzeni przeszukiwania, czy widać różnicę między wynikami tych botów
 +  - Proszę powtórzyć serię pojedynków,​ zmieniając stałą eksploracji $c$ na wartości: 0, 1, 2, 5, 42. Która z nich daje najlepsze wyniki?  
 +  - Proszę zmodyfikować algorytm MCTS tak, żeby przed przejściem do wyboru z użyciem UCT, najpierw zagrał pewną liczbę (np. tyle, ile zdążyć przez 1/5 dozwolonego czasu) czystych symulacji Monte Carlo. Czy poprawia to jakość wyników
pl/dydaktyka/ggp/mcts.1463528462.txt.gz · ostatnio zmienione: 2019/06/27 15:52 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0