Game states and nim game

This commit is contained in:
Antti H S Laaksonen 2017-01-15 20:42:46 +02:00
parent d4b814dcea
commit ae2715d567
1 changed files with 216 additions and 196 deletions

View File

@ -1,92 +1,101 @@
\chapter{Game theory} \chapter{Game theory}
Tässä luvussa keskitymme kahden pelaajan peleihin, In this chapter, we will focus on games where
joissa molemmat pelaajat tekevät two players make alternate moves and that
samanlaisia siirtoja eikä pelissä ole satunnaisuutta. do not contain random elements.
Tavoitteemme on etsiä strategia, jota käyttäen Our goal is to find a strategy that we can
pelaaja pystyy voittamaan pelin toisen pelaajan follow to win the game
toimista riippumatta, jos tämä on mahdollista. no matter what the opponent does,
if such a strategy exists.
Osoittautuu, että kaikki tällaiset pelit ovat It turns out that there is a general strategy
pohjimmiltaan samanlaisia ja niiden analyysi on for all such games,
mahdollista \key{nim-teorian} avulla. and we can analyze the games using the \key{nim theory}.
Perehdymme aluksi yksinkertaisiin tikkupeleihin, First, we analyze simple games where
joissa pelaajat poistavat tikkuja kasoista, players remove sticks from heaps,
ja yleistämme sitten näiden pelien teorian kaikkiin peleihin. and after this, we generalize the strategy
for those games to all other games.
\section{Pelin tilat} \section{Game states}
Tarkastellaan peliä, jossa kasassa on $n$ tikkua. Let's consider a game where there is initially
Pelaajat $A$ ja $B$ siirtävät vuorotellen ja a heap of $n$ sticks.
pelaaja $A$ aloittaa. Players $A$ and $B$ move alternatively,
Jokaisella siirrolla pelaajan tulee poistaa and player $A$ begins.
1, 2 tai 3 tikkua kasasta. On each move, the player has to remove
Pelin voittaa se pelaaja, joka poistaa viimeisen tikun. 1, 2 or 3 sticks from the heap.
The player who removes the last stick wins.
Esimerkiksi jos $n=10$, peli saattaa edetä seuraavasti: For example, if $n=10$, the game may proceed as follows:
\begin{enumerate}[noitemsep] \begin{enumerate}[noitemsep]
\item Pelaaja $A$ poistaa 2 tikkua (jäljellä 8 tikkua). \item Player $A$ removes 2 sticks (8 sticks left).
\item Pelaaja $B$ poistaa 3 tikkua (jäljellä 5 tikkua). \item Player $B$ removes 3 sticks (5 sticks left).
\item Pelaaja $A$ poistaa 1 tikun (jäljellä 4 tikkua). \item Player $A$ removes 1 stick (4 sticks left).
\item Pelaaja $B$ poistaa 2 tikkua (jäljellä 2 tikkua). \item Player $B$ removes 2 sticks (2 sticks left).
\item Pelaaja $A$ poistaa 2 tikkua ja voittaa. \item Player $A$ removes 2 sticks and wins.
\end{enumerate} \end{enumerate}
Tämä peli muodostuu tiloista $0,1,2,\ldots,n$, This game consists of states $0,1,2,\ldots,n$,
missä tilan numero vastaa sitä, montako tikkua where the number of the state corresponds to
kasassa on jäljellä. the number of sticks left.
Tietyssä tilassa olevan pelaajan valittavana on, The player must always choose how many sticks
montako tikkua hän poistaa kasasta. they will remove from the heap.
\subsubsection{Voittotila ja häviötila} \subsubsection{Winning and losing states}
\index{voittotila@voittotila} \index{winning state}
\index{hxviztila@häviötila} \index{losing state}
\key{Voittotila} on tila, jossa oleva pelaaja voittaa A \key{winning state} is a state where
pelin varmasti, jos hän pelaa optimaalisesti. the player wins the game if they
Vastaavasti \key{häviötila} on tila, play optimally.
jossa oleva pelaaja häviää varmasti, jos vastustaja Correspondingly, a \key{losing state} is a state
pelaa optimaalisesti. where the player loses if the
Osoittautuu, että pelin tilat on mahdollista luokitella opponent plays optimally.
niin, että jokainen tila on joko voittotila tai häviötila. It turns out that we can classify all states
in a game so that each state is either
a winning state or a losing state.
Yllä olevassa pelissä tila 0 on selkeästi häviötila, In the above game, state 0 is clearly a
koska siinä oleva pelaaja häviää pelin suoraan. losing state, because the player can't make
Tilat 1, 2 ja 3 taas ovat voittotiloja, any moves.
koska niissä oleva pelaaja voi poistaa States 1, 2 and 3 are winning states,
1, 2 tai 3 tikkua ja voittaa pelin. because we can remove 1, 2 or 3 sticks
Vastaavasti tila 4 on häviötila, koska mikä tahansa and win the game.
siirto johtaa toisen pelaajan voittoon. State 4, in turn, is a losing state,
because any move leads to a state that
is a winning state for the opponent.
Yleisemmin voidaan havaita, että jos tilasta on More generally, if there is a move that leads
jokin häviötilaan johtava siirto, niin tila on voittotila, from the current state to a losing state,
ja muussa tapauksessa tila on häviötila. the current state is a winning state,
Tämän ansiosta voidaan luokitella kaikki pelin tilat and otherwise it is a losing state.
alkaen varmoista häviötiloista, joista ei ole siirtoja Using this observation, we can classify all states
mihinkään muihin tiloihin. in a game beginning from losing states where
there are no possible moves.
Seuraavassa on pelin tilojen $0 \ldots 15$ luokittelu The states $0 \ldots 15$ of the above game
($V$ tarkoittaa voittotilaa ja $H$ tarkoittaa häviötilaa): can be classified as follows
($W$ means winning state, and $L$ means losing state):
\begin{center} \begin{center}
\begin{tikzpicture}[scale=0.7] \begin{tikzpicture}[scale=0.7]
\draw (0,0) grid (16,1); \draw (0,0) grid (16,1);
\node at (0.5,0.5) {$H$}; \node at (0.5,0.5) {$L$};
\node at (1.5,0.5) {$V$}; \node at (1.5,0.5) {$W$};
\node at (2.5,0.5) {$V$}; \node at (2.5,0.5) {$W$};
\node at (3.5,0.5) {$V$}; \node at (3.5,0.5) {$W$};
\node at (4.5,0.5) {$H$}; \node at (4.5,0.5) {$L$};
\node at (5.5,0.5) {$V$}; \node at (5.5,0.5) {$W$};
\node at (6.5,0.5) {$V$}; \node at (6.5,0.5) {$W$};
\node at (7.5,0.5) {$V$}; \node at (7.5,0.5) {$W$};
\node at (8.5,0.5) {$H$}; \node at (8.5,0.5) {$L$};
\node at (9.5,0.5) {$V$}; \node at (9.5,0.5) {$W$};
\node at (10.5,0.5) {$V$}; \node at (10.5,0.5) {$W$};
\node at (11.5,0.5) {$V$}; \node at (11.5,0.5) {$W$};
\node at (12.5,0.5) {$H$}; \node at (12.5,0.5) {$L$};
\node at (13.5,0.5) {$V$}; \node at (13.5,0.5) {$W$};
\node at (14.5,0.5) {$V$}; \node at (14.5,0.5) {$W$};
\node at (15.5,0.5) {$V$}; \node at (15.5,0.5) {$W$};
\footnotesize \footnotesize
\node at (0.5,1.4) {$0$}; \node at (0.5,1.4) {$0$};
@ -108,32 +117,37 @@ Seuraavassa on pelin tilojen $0 \ldots 15$ luokittelu
\end{tikzpicture} \end{tikzpicture}
\end{center} \end{center}
Tämän pelin analyysi on yksinkertainen: It's easy to analyze this game:
tila $k$ on häviötila, jos $k$ on jaollinen 4:llä, a state $k$ is a losing state if $k$ is
ja muuten tila $k$ on voittotila. divisible by 4, and otherwise it
Optimaalinen tapa pelata peliä on is winning state.
valita aina sellainen siirto, että vastustajalle An optimal way to play the game is
jää 4:llä jaollinen määrä tikkuja, to always choose a move after which
kunnes lopulta tikut loppuvat ja vastustaja on hävinnyt. the number of sticks in the heap
is divisible by 4.
Finally, there are no sticks left and
the opponent has lost.
Tämä pelitapa edellyttää luonnollisesti sitä, Of course, this strategy requires that
että tikkujen määrä omalla siirrolla \emph{ei} ole the number of sticks is \emph{not} divisible by 4
4:llä jaollinen. Jos näin kuitenkin on, mitään ei ole when it is our move.
tehtävissä vaan vastustaja voittaa If it is, there is nothing we can do,
pelin varmasti, jos hän pelaa optimaalisesti. but the opponent will win the game if
they play optimally.
\subsubsection{Tilaverkko} \subsubsection{State graph}
Tarkastellaan sitten toisenlaista tikkupeliä, Let's now consider another stick game,
jossa tilassa $k$ saa poistaa minkä tahansa where in state $k$, it is allowed to remove
määrän tikkuja $x$, kunhan $k$ on jaollinen $x$:llä any number $x$ of sticks such that $x$
ja $x$ on pienempi kuin $k$. is smaller than $x$ and divides $x$.
Esimerkiksi tilassa 8 on sallittua poistaa For example, in state 8 we may remove
1, 2 tai 4 tikkua, mutta tilassa 7 1, 2 or 4 sticks, but in state 7 the only
ainoa mahdollinen siirto on poistaa 1 tikku. allowed move is to remove 1 stick.
Seuraava kuva esittää pelin tilat $1 \ldots 9$ \key{tilaverkkona}, jossa solmut ovat pelin tiloja The following picture shows the states
ja kaaret kuvaavat mahdollisia siirtoja tilojen välillä: $1 \ldots 9$ of the game as a \key{state graph},
where nodes are states and edges are moves between them:
\begin{center} \begin{center}
\begin{tikzpicture}[scale=0.9] \begin{tikzpicture}[scale=0.9]
@ -164,23 +178,25 @@ ja kaaret kuvaavat mahdollisia siirtoja tilojen välillä:
\end{tikzpicture} \end{tikzpicture}
\end{center} \end{center}
Tämä peli päättyy aina tilaan 1, joka on häviötila, The final state in this game is always state 1,
koska siinä ei voi tehdä mitään siirtoja. which is a losing state, because there are no
Pelin tilojen $1 \ldots 9$ luokittelu on seuraava: valid moves.
The classification of states $1 \ldots 9$
is as follows:
\begin{center} \begin{center}
\begin{tikzpicture}[scale=0.7] \begin{tikzpicture}[scale=0.7]
\draw (1,0) grid (10,1); \draw (1,0) grid (10,1);
\node at (1.5,0.5) {$H$}; \node at (1.5,0.5) {$L$};
\node at (2.5,0.5) {$V$}; \node at (2.5,0.5) {$W$};
\node at (3.5,0.5) {$H$}; \node at (3.5,0.5) {$L$};
\node at (4.5,0.5) {$V$}; \node at (4.5,0.5) {$W$};
\node at (5.5,0.5) {$H$}; \node at (5.5,0.5) {$L$};
\node at (6.5,0.5) {$V$}; \node at (6.5,0.5) {$W$};
\node at (7.5,0.5) {$H$}; \node at (7.5,0.5) {$L$};
\node at (8.5,0.5) {$V$}; \node at (8.5,0.5) {$W$};
\node at (9.5,0.5) {$H$}; \node at (9.5,0.5) {$L$};
\footnotesize \footnotesize
\node at (1.5,1.4) {$1$}; \node at (1.5,1.4) {$1$};
@ -195,84 +211,89 @@ Pelin tilojen $1 \ldots 9$ luokittelu on seuraava:
\end{tikzpicture} \end{tikzpicture}
\end{center} \end{center}
Yllättävää kyllä, tässä pelissä kaikki Surprisingly enough, in this game,
parilliset tilat ovat voittotiloja ja all even-numbered states are winning states,
kaikki parittomat tilat ovat häviötiloja. and all odd-numbered states are losing states.
\section{Nim-peli} \section{Nim game}
\index{nim-peli} \index{nim game}
\key{Nim-peli} on yksinkertainen peli, The \key{nim game} is a simple game that
joka on tärkeässä asemassa peliteoriassa, has an important role in game theory,
koska monia pelejä voi pelata samalla because many games can be played using
strategialla kuin nim-peliä. the same strategy.
Tutustumme aluksi nim-peliin ja yleistämme First, we focus on nim,
strategian sitten muihin peleihin. and then we generalize the strategy
to other games.
Nim-pelissä on $n$ kasaa tikkuja, There are $n$ heaps in nim,
joista kussakin on tietty määrä tikkuja. and each heap contains some number of sticks.
Pelaajat poistavat kasoista tikkuja vuorotellen. The players move alternatively,
Joka vuorolla pelaaja valitsee yhden kasan, and on each turn, the player chooses
jossa on vielä tikkuja, a heap that still contains sticks
ja poistaa siitä minkä tahansa määrän tikkuja. and removes any number of sticks from it.
Pelin voittaa se, joka poistaa viimeisen tikun. The winner is the player who removes the last stick.
Nim-pelin tila on muotoa $[x_1,x_2,\ldots,x_n]$, The states in nim are of the form
jossa $x_k$ on tikkujen määrä kasassa $k$. $[x_1,x_2,\ldots,x_n]$,
Esimerkiksi $[10,12,5]$ tarkoittaa peliä, where $x_k$ denotes the number of sticks in heap $k$.
jossa on kolme kasaa ja tikkujen määrät ovat 10, 12 ja 5. For example, $[10,12,5]$ is a game where
Tila $[0,0,\ldots,0]$ on häviötila, there are three heaps with 10, 12 and 5 sticks.
koska siitä ei voi poistaa mitään tikkua, The state $[0,0,\ldots,0]$ is a losing state,
ja peli päättyy aina tähän tilaan. because it's not possible to remove any sticks,
and this is always the final state.
\subsubsection{Analyysi} \subsubsection{Analysis}
\index{nim-summa} \index{nim sum}
Osoittautuu, että nim-pelin tilan luonteen
kertoo \key{nim-summa} $x_1 \oplus x_2 \oplus \cdots \oplus x_n$,
missä $\oplus$ tarkoittaa xor-operaatiota.
Jos nim-summa on 0, tila on häviötila,
ja muussa tapauksessa tila on voittotila.
Esimerkiksi tilan $[10,12,5]$ nim-summa on
$10 \oplus 12 \oplus 5 = 3$, joten tila on voittotila.
Mutta miten nim-summa liittyy nim-peliin? It turns out that we can easily find out
Tämä selviää tutkimalla, miten nim-summa muuttuu, the type of any nim state by calculating
kun nim-pelin tila muuttuu. a \key{nim sum} $x_1 \oplus x_2 \oplus \cdots \oplus x_n$,
where $\oplus$ is the xor operation.
The states with nim sum 0 are losing states,
and all other states are winning states.
For example, the nim sum for
$[10,12,5]$ is $10 \oplus 12 \oplus 5 = 3$,
so the state is a winning state.
But how is the nim sum related to the nim game?
We can explain this by studying how the nim
sum changes when the nim state changes.
~\\ ~\\
\noindent \noindent
\textit{Häviötilat:} \textit{Losing states:}
Pelin päätöstila $[0,0,\ldots,0]$ on häviötila, The final state $[0,0,\ldots,0]$ is a losing state,
ja sen nim-summa on 0, kuten kuuluukin. and its nim sum is 0, as expected.
Muissa häviötiloissa mikä tahansa siirto johtaa In other losing states, any move leads to
voittotilaan, koska yksi luvuista $x_k$ muuttuu a winning state, because when a single value $x_k$ changes,
ja samalla pelin nim-summa muuttuu the nim sum also changes, so the nim sum
eli siirron jälkeen nim-summasta tulee jokin muu kuin 0. is different from 0 after the move.
~\\ ~\\
\noindent \noindent
\textit{Voittotilat:} \textit{Winning states:}
Voittotilasta pääsee häviötilaan muuttamalla We can move to a losing state if
jonkin kasan $k$ tikkujen määräksi $x_k \oplus s$, there is any heap $k$ for which $x_k \oplus s < x_k$.
missä $s$ on pelin nim-summa. In this case, we can remove sticks from
Vaatimuksena on, että $x_k \oplus s < x_k$, heap $k$ so that it will contain $x_k \oplus s$ sticks,
koska kasasta voi vain poistaa tikkuja. which will lead to a losing state.
Sopiva kasa $x_k$ on sellainen, There is always such a heap, where $x_k$
jossa on ykkösbitti samassa kohdassa kuin has a one bit in position of the leftmost
$s$:n vasemmanpuoleisin ykkösbitti. one bit in $s$.
~\\ ~\\
\noindent \noindent
Tarkastellaan esimerkkinä tilaa $[10,2,5]$. As an example, let's consider the state $[10,2,5]$.
Tämä tila on voittotila, This state is a winning state,
koska sen nim-summa on 3. because its nim sum is 3.
Täytyy siis olla olemassa siirto, Thus, there has to be a move which
jolla tilasta pääsee häviötilaan. leads to a losing state.
Selvitetään se seuraavaksi. Next we will find out such a move.
\begin{samepage} \begin{samepage}
Pelin nim-summa muodostuu seuraavasti: The nim sum of the state is as follows:
\begin{center} \begin{center}
\begin{tabular}{r|r} \begin{tabular}{r|r}
@ -285,11 +306,10 @@ Pelin nim-summa muodostuu seuraavasti:
\end{center} \end{center}
\end{samepage} \end{samepage}
Tässä tapauksessa In this case, the heap with 10 sticks
10 tikun kasa on ainoa, is the only heap that has a one bit
jonka bittiesityksessä on ykkösbitti in the position of the leftmost
samassa kohdassa kuin one bit in the nim sum:
nim-summan vasemmanpuoleisin ykkösbitti:
\begin{center} \begin{center}
\begin{tabular}{r|r} \begin{tabular}{r|r}
@ -301,12 +321,11 @@ nim-summan vasemmanpuoleisin ykkösbitti:
\end{tabular} \end{tabular}
\end{center} \end{center}
Kasan uudeksi sisällöksi täytyy saada The new size of the heap has to be
$10 \oplus 3 = 9$ tikkua, $10 \oplus 3 = 9$,
mikä onnistuu poistamalla 1 tikku so we will remove just one stick.
10 tikun kasasta. After this, the state will be $[9,12,5]$,
Tämän seurauksena tilaksi tulee $[9,12,5]$, which is a losing state:
joka on häviötila, kuten pitääkin:
\begin{center} \begin{center}
\begin{tabular}{r|r} \begin{tabular}{r|r}
@ -318,31 +337,32 @@ joka on häviötila, kuten pitääkin:
\end{tabular} \end{tabular}
\end{center} \end{center}
\subsubsection{Misääripeli} \subsubsection{Misère game}
\index{misxxripeli@misääripeli} \index{misère game}
\key{Misääripelissä} nim-pelin tavoite on käänteinen, In a \key{misère game}, the goal is opposite,
eli pelin häviää se, joka poistaa viimeisen tikun. so the player who removes the last stick
Osoittautuu, että misääripeliä pystyy pelaamaan lähes samalla loses the game.
strategialla kuin tavallista nim-peliä. It turns out that a misère nim game can be
optimally played almost like the standard nim game.
Ideana on pelata misääripeliä aluksi kuin tavallista The idea is to first play the misère game
nim-peliä, mutta muuttaa strategiaa pelin like a standard game, but change the strategy
lopussa. Käänne tapahtuu silloin, kun seuraavan at the end of the game.
siirron seurauksena kaikissa pelin kasoissa olisi 0 tai 1 tikkua. The new strategy will be used when after the next move,
each heap would contain at most one stick.
Tavallisessa nim-pelissä tulisi nyt tehdä siirto, In the standard game, we should choose a move
jonka jälkeen 1-tikkuisia kasoja on parillinen määrä. after which there is an even number of heaps with one stick.
Misääripelissä tulee kuitenkin tehdä siirto, However, in the misère game, we choose a move so that
jonka jälkeen 1-tikkuisia kasoja on pariton määrä. there is an odd number of heaps with one stick.
Tämä strategia toimii, koska käännekohta tulee aina This strategy works because the state where the
vastaan jossakin vaiheessa peliä, strategy changes always appears in a game,
ja kyseinen tila on voittotila, and this state is a winning state, because
koska siinä on tarkalleen yksi kasa, it contains exactly one heap that has more than one stick,
jossa on yli 1 tikkua, so the nim sum is not 0.
joten nim-summa ei ole 0.
\section{SpragueGrundyn lause} \section{SpragueGrundyn lause}