Gewinnstrategie bei einem zweidimensionalen Nim-Spiel Eine Arbeit für Jugend forscht 2011 im Fachgebiet Mathematik von Nemanja Sandic (Robert-Bosch-Gesamtschule Hildesheim) und Tan Vu Pham (Goethegymnasium Hildesheim) Inhaltsverzeichnis 1 Einleitung..........................................................................................2 2 Spiele.................................................................................................2 3 xor-Summe von ganzen Zahlen........................................................3 4 Grundy-Zahl......................................................................................4 5 Das zweidimensionale Nim-Spiel.....................................................4 6 Berechnung der Grundy-Zahlen.......................................................5 7 Weitere rechteckige Spielstellungen.................................................7 8 Formeln für die Grundy-Zahlen........................................................8 9 Zusammenfassung.............................................................................9 Quellenverzeichnis................................................................................9 1 Einleitung Im Internet (z.B. [Al]) gibt es viele Möglichkeiten, das bekannte Nim-Spiel [Wi2] gegen ein Computerprogramm zu spielen. Das Programm zieht dabei nach einer Gewinnstrategie, bei der die Größe der Nim-Haufen als Binärzahlen nach einer bestimmten Rechenregel „addiert“ werden. Diese Gewinnstrategie ist vielen Leuten bekannt. Unsere Idee war, Nim in zwei Dimensionen zu spielen. Statt aus eindimensionalen Haufen ist eine Spielposition aus zweidimensionalen Rechtecken zusammengesetzt. Außerdem ändern wir die Spielregeln so ab, dass beim Wegnehmen eines Teiles aus einem Rechteck zwei Rechtecke entstehen können. Zu diesem Spiel konnten wir noch keine bereits bekannten Ergebnisse finden. Für unser Spiel wollen wir eine Gewinnstrategie finden. Dabei stützen wir uns auf die Theorie der Grundy-Zahlen [Wi1]. Nach dieser Theorie ist es ausreichend, die Grundy-Zahlen von unseren Rechtecken zu bestimmen, um eine Gewinnstrategie zu erhalten. Dies tun wir für Rechtecke bis zu einer Seitenlänge von 13 (s. Tabellen 2 und 3). Die Grundy-Zahlen berechnen wir ausgehend von kleinen Rechtecken für immer größere Rechtecke und hoffen, dabei auf eine Regelmäßigkeit zu stoßen. Für Rechtecke der Breite 1 und 2 können wir die Grundy-Zahl über eine einfache Formel berechnen. Für breitere Rechtecke konnten wir keine Regelmäßigkeit entdecken. 2 Spiele In der kombinatorischen Spieltheorie beschäftigt man sich mit Zwei-Personen-Spielen. Bei unseren Zwei-Personen-Spielen spielt der Zufall keine Rolle, es gibt keine verborgenen Informationen für den Spieler. Dazu wird nach jedem Zug gewechselt. Ein Spiel endet nach einer endlichen Zahl von Zügen, und es gewinnt der Spieler, der den letzten Zug machen kann. Diese Spiele nennt man in der Literatur (s. z.B.[Wi1]) neutrale Spiele. Wir nennen sie in dieser Arbeit einfach Spiele. Die Schreibweise S → T soll bedeuten: Man kommt durch einen erlaubten Zug von der Spielposition S zu der Spielposition T. Für jede Spielposition trifft genau eine der folgenden beiden Möglichkeiten zu. ➢ Entweder der Spieler, der am Zug ist, hat eine Gewinnstrategie. Das heißt, er kann auf jeden möglichen Zug des Gegenspielers geeignet antworten und dadurch das Spiel gewinnen. ➢ Oder jeder mögliche Zug des Spielers am Zug führt zu einer Spielposition, in der der Gegner eine Gewinnstrategie hat. Das bekannteste Beispiel eines Spiels ist das (eindimensionale) Nim-Spiel (s. [Wi2]), das aus einem oder mehreren Streichholzhaufen besteht. Ein Spielzug besteht darin, von einem der Haufen beliebig viele Streichhölzer wegzunehmen. Dieses Spiel kann man online auf [Al] spielen. Das Spiel, in dem kein Zug mehr möglich ist, heißt Nullspiel und wird mit 0 bezeichnet. Das Spiel S1 ⊕··· ⊕ Sn bezeichnet man als die Summe der Spiele S1,...,Sn . Ein Zug in diesem Summenspiel besteht darin, dass man eines der Spiele S1,...,Sn auswählt und in diesem Spiel einen erlaubten Spielzug durchführt. Beispiel 1. Ein Summenspiel ist beispielsweise ein Nim-Spiel N mit mehren Haufen, welches als Summe der einzelnen Haufen betrachtet werden kann. ⊕ ⊕ ⊕ ⊕ 3 xor-Summe von ganzen Zahlen Zur Berechnung der Grundy-Zahl (s.u.) einer Summe von Spielen führen wir die xorAddition ⊕ von Zahlen ein. Dazu benutzt man das binäre Zahlensystem. Dieses Zahlensystem verwendet nur zwei Ziffern, gekennzeichnet durch 0 und 1. Eine binäre Ziffer nennt man auch ein Bit. Die ersten elf binären Zahlen sehen wie folgt aus: dezimal binär oktal dezimal binär oktal 0 0 0 6 110 6 1 1 1 7 111 7 2 10 2 8 1000 O10 3 11 3 9 1001 O11 4 100 4 10 1010 O12 101 5 11 1011 Tabelle 1: Darstellung in verschiedenen Zahlensystemen O13 5 Im Oktalsystem werden immer drei Bits zu einer Oktalziffer (0 bis 7) zusammengefasst. Für die xor-Summe zweier Zahlen schreibt man die Zahlen rechtsbündig untereinander. Die untereinander stehenden Ziffern werden addiert. Zwei gleiche Ziffern ergeben 0 und zwei verschiedene Ziffern ergeben 1. Zur Verdeutlichung dieser Rechenvorschrift geben wir ein Beispiel mit den Oktalzahlen 01332 und 0634 an. 1011011010 = 01332 110011100 = 0634 -----------------------------------01332 ⊕ 0634 = 1101000110 = 01506 An dem Beispiel sieht man, dass die Binärzahlen ziemlich unübersichtlich werden. Darum verwenden wir das Oktalsystem, wo man auch einfach nur die untereinander stehenden Ziffern richtig zusammenrechnet. Die Oktalzahlen unterscheiden wir von Dezimalzahlen durch eine vorangestellte 0. Für beliebige nicht negative ganze Zahlen m und n gilt die Formel m ⊕ n ≤ m+ n. (Formel 1) 4 Grundy-Zahl Die Grundy-Zahlen spielen eine wesentliche Rolle für Spiele. Jeder Spielposition S wird eine so genannte Grundy-Zahl g(S) zugeordnet. Sie ist eine nicht negative, ganze Zahl. Dem Nullspiel 0 wird die Grundy-Zahl g(0) = 0 zugeordnet. Für jedes andere Spiel erfolgt die Berechnung der Grundy-Zahl über die Gesamtheit aller in einem Spielzug erreichbaren Positionen. Ermittelt wird sie als die kleinste natürliche Zahl, die in den Nachfolgeposition noch nicht vorgekommen ist. Fortsetzung von Beispiel 1. Wenn man laut der oben genannten Rechnung vorgeht, ergibt sich die Grundy-Zahl für einen Nim-Haufen mit n Streichhölzern als die Zahl n. Die einzelnen Haufen des Nim-Spiels N von oben haben also die Grundy-Zahlen 6, 3, 5, 2 und 7. Die Grundy-Zahl besitzt folgende Eigenschaften (vgl. [Wi1]): (1) Der Spieler am Spielzug besitzt nur eine Gewinnstrategie, wenn die Grundy-Zahl ungleich „Null“ ist. (2) Die Grundy-Zahl einer Summe von Spielen berechnet man durch xor-Addition der einzelnen Grundy-Zahlen: g(S1⊕S2) = g(S1) ⊕ g(S2). Dabei ist ⊕ die oben eingeführte xor-Summe. Fortsetzung von Beispiel 1. Das Nim-Spiel N von oben hat mit der Rechenregel (2) die Grundy-Zahl 6 ⊕ 3 ⊕ 5 ⊕ 2 ⊕ 7 = 7. 5 Das zweidimensionale Nim-Spiel Eine Stellung in unserem zweidimensionalen Nim-Spiel besteht aus einem oder mehreren Rechtecken. Für ein einzelnes Rechteck mit m Zeilen und n Spalten schreiben wir (m,n). Beispiel 2. Abbildung 1: Beispiel eines zweidimensionalen Nim-Spiels Zu beachten sind die Spielregeln: (1) Man darf in seinem Spielzug von einem der Rechtecke eine oder mehrere benachbarte Spalten oder Zeilen wegnehmen. Das könnten in Beispiel 2 die beiden grau schattierten Spalten in dem Rechteck (2,9) sein. Das betreffende Rechteck kann dabei in maximal zwei Rechtecke zerfallen, hier (2,9) → (2,6) ⊕ (2,1). (2) Es wird nach jedem Spielzug gewechselt. (3) Es gewinnt der Spieler, der den letzten Zug machen kann. (4) Es gibt kein Zeitlimit. Das Spiel S oben kann man deshalb als S = (7,3) ⊕ (4,4) ⊕ (3,6) ⊕ (2,9) ⊕ (5,4) schreiben. Um für unser Spiel eine Gewinnstrategie zu aufzustellen, bedarf es der Berechnung der Grundy-Zahlen. Man berechnet die Grundy-Zahl zuerst einmal nur für Rechtecke (siehe folgender Abschnitt). Für ein Spiel aus mehreren Rechtecken erhält man die Grundy-Zahl dann durch die xor-Summe, für unser Beispiel also durch die Rechnung g(S) = g(7,3) ⊕ g(4,4) ⊕ g(3,6) ⊕ g(2,9) ⊕ g(5,4). 6 Berechnung der Grundy-Zahlen In der unten dargestellten Tabelle haben wir die Grundy-Zahlen aller Spielpositionen von (1,1) bis (3,32) berechnet. Dabei haben wir uns für die oktale Schreibweise entschieden, um die xor-Summen einfacher bestimmen und Regelmäßigkeiten der Grundy-Zahlen leichter erkennen zu können. Zuerst haben wir die Gundy-Zahlen g(1,n) in der ersten Spalte bestimmt. Dabei ist uns aufgefallen, dass die von (1,n) aus in einem Zug erreichbaren Spiele alle Grundy-Zahl g < n haben. Andererseits kann man von (1,n) nach (1,k) ziehen, wenn k kleiner als n ist. Dadurch ergibt sich g(1,n) = n, wie in der Tabelle zu sehen ist. Bei g(2,n) gibt es zwei Möglichkeiten. Entweder man zieht nach (1,n) oder nach (2,k) ⊕ (2,ℓ) mit k+ ℓ < n. Die kleinste Zahl, die dabei nicht als Grundy-Zahl auftritt, ist dann g(2,n). Bei g(3,n) haben wir vier Möglichkeiten. Man kann nach (1,n), nach (1,n) ⊕( 1,n), nach (2,n) oder nach (3,k) ⊕ (3,ℓ) mit k+ ℓ < n ziehen. In der fünften Spalte stehen die GrundyZahlen, die man durch eine Zerlegung von (3,n) in (3,k) ⊕ (3,ℓ) erreichen kann. Man kann dafür die meisten Grundy-Zahlen aus der darüber liegenden Zeile übernehmen. Für n = 9 zum Beispiel sind das die Grundy-Zahlen 0−012 und g(3,8) = 014. Hinzu kommen die Grundy-Zahlen von (3,k) ⊕ (3,ℓ) mit k + ℓ = 8. Auf diese Weise treten noch zusätzlich die beiden Zahlen g(3,1) ⊕ g(3,7) = 3 ⊕ 010 = 013 und g(3,2) ⊕ g(3,6) = 4 ⊕ 011 = 015 auf, die in der Tabelle fett hervorgehoben sind. Daraus ergibt sich schließlich g(3,9) = 016. n g(1,n) g(2,n) g(3,n) 1 1 2 3 0 2 2 1 4 0,3 3 3 4 1 0, 3, 4 4 4 5 2 0, 1, 3, 4, 7 5 5 7 6 0−4, 7 6 6 010 011 0−4, 6, 7, 5 7 7 011 010 0−7, 011 8 010 013 014 0−011, 012 9 011 014 016 0−012, 014, 013, 015 10 012 015 020 0−015, 016, 017 11 013 017 021 0−020, 12 014 020 022 0−021, 023 13 015 021 025 0−023, 024 14 016 023 026 0−025 15 017 024 027 0−026 16 020 025 030 0−027 17 021 027 031 0−030 18 022 030 032 0−031, 033 19 023 031 035 0−033, 034 20 024 033 037 0−035, 036 21 025 034 040 0−037 22 026 035 041 0−040 23 027 037 042 0−041, 043 24 030 040 045 0−043, 044 25 031 041 046 0−045 26 032 043 047 0−046 27 033 044 050 0−047 28 034 045 052 0−050, 051 29 035 047 054 0−052, 053 30 036 050 055 0−054 31 037 051 060 0−055, 057, 056 32 040 053 061 0−060 Tabelle 2: Grundy-Zahlen für die Spielstellungen (1,1) bis (3,32) Regelmäßigkeiten in Tabelle 2. Für g(2,n) erkennen wir eine Regelmäßigkeit. Und zwar erhöht sich die Grundy-Zahl in dieser Spalte ab n = 3 immer in zwei Einerschritten und einem darauf folgenden Zweierschritt. Dies lässt sich auch in einer Formel ausdrücken, die wir in Abschnitt 8 angeben. g(3,n) ist ab n = 6 unabhängig von (1,n) und ab n = 9 unabhängig von (2,n). Allerdings lassen sich trotz dieser Unabhängigkeit keine Regelmäßigkeiten bei (3,n) erkennen. Im Laufe der Tabelle finden in unregelmäßiger Folge Sprünge in Einer-, Zweier- und Dreierschritten statt. 7 Weitere rechteckige Spielstellungen Die bisher errechneten Ergebnisse aus der vorigen Tabelle haben wir in die folgende Tabelle eingetragen, um sie für die Berechnung der anderen Positionen zu verwenden. Sie enthält alle Spielstellungen von (1,1) bis (13,13). m\n 1 2 3 4 5 6 7 8 1 1 2 3 4 5 6 7 010 011 012 013 014 015 2 2 1 4 5 7 010 011 013 014 015 017 020 021 3 3 4 1 2 6 011 010 014 016 020 021 022 025 4 4 5 2 3 010 012 013 011 020 021 022 023 027 5 5 7 6 010 1 4 012 020 013 014 023 021 022 6 6 010 011 012 4 2 3 5 021 022 7 7 011 010 013 012 3 4 6 022 8 010 013 014 011 020 5 6 012 017 023 024 026 030 9 011 014 016 020 013 021 022 017 10 11 12 13 7 025 020 5 020 024 023 1 4 3 012 024 5 023 4 3 6 010 013 7 020 024 3 6 5 011 012 10 012 015 020 021 014 022 11 013 017 021 022 023 9 12 014 020 022 023 021 025 024 026 012 010 011 013 016 13 015 021 025 027 022 020 023 030 024 013 012 016 010 Tabelle 3: Grundy-Zahlen für die Spielstellungen (1,1) bis (13,13) Am Beispiel (6,5) werden wir die Grundy-Zahl bestimmen: Man berechnet die xor-Summe aus jeweils zwei Zahlen in der fünften Spalte oder aus jeweils zwei Zahlen in der sechsten Zeile, die bei einem Spielzug möglich sind. Die kleinste nicht bestimmbare Zahl ist somit die Grundy-Zahl. Um im genannten Beispiel diese Zahl zu errechnen, haben wir folgende Rechnung angewandt: g(2,5) ⊕ g(2,5) ⊕ g(1,5) ⊕ g(1,5) ⊕ (2,5) = 7 ⊕ (3,5) = 7 ⊕ (2,5) = 5 ⊕ (2,5) = 5 ⊕ 7=0 6=1 7=2 6=3 Die Grundy-Zahl 4 lässt sich durch die xor-Addition nicht erzeugen und kommt auch als einzelne Grundy-Zahl eines kleineren Spiels nicht in der fünften Spalte oder sechsten Zeile vor. Dadurch kommen wir zu dem Schluss, dass die Spielposition (6,5) die Grundy-Zahl 4 besitzt. Fortsetzung von Beispiel 2. Für das Beispiel des zweidimensionalen Nim-Spiels von oben wollen wir herausfinden, ob der Spieler am Zug eine Gewinnstrategie hat und welchen Zug er dann machen kann. Als erstes lesen wir hierfür die Grundy-Zahlen für die einzelnen Rechtecke aus den Tabellen 2 und 3 ab und bilden ihre xor-Summe. Dadurch erhalten wir die Grundy-Zahl für das gesamte Spiel S: g(S) = g(7,3) ⊕ g(4,4) ⊕ g(3,6) ⊕ g(2,9) ⊕ g(5,4) = 010 ⊕ 03 ⊕ 011 ⊕ 014 ⊕ 010 = 06 Um nun unsere Gewinnstrategie erfolgreich durchzuführen, müssen wir den Gegenspieler zur Grundy-Zahl 0 bringen. Dies gelingt, indem wir aus dem Rechteck (2,9) die zwei oben grau markierten Spalten (s. Abbildung 1) entnehmen. Dieser Spielzug S = (7,3) ⊕ (4,4) ⊕ (3,6) ⊕ (2,9) ⊕ (5,4) → S' = (7,3) ⊕ (4,4) ⊕ (3,6) ⊕ (2,1) ⊕ (2,6) ⊕ (5,4) ergibt die Grundy-Zahl g(S') = 010 ⊕ 03 ⊕ 011 ⊕ 002 ⊕ 010 ⊕ 010 = 0. Somit hat der Gegenspieler keine Möglichkeit mehr, seine eigene Gewinnstrategie durchzusetzen. 8 Formeln für die Grundy-Zahlen Die von uns in Tabelle 2 beobachteten Regelmäßigkeiten wollen wir als Formeln aufschreiben. Wie wir bereits oben bemerkt haben gilt g(1,n) = n für alle n≥0. Beweis. Wir beweisen die Behauptung durch Induktion nach n. Induktionsanfang: Für n = 0 ist (1,n) = (1,0) das Nullspiel und somit ist nach der Definition die Bestimmung der Grundy-Zahl g(1,n) = g(1,0) = 0 = n. Wenn n>0 ist, wird die Menge G(n) := {g(S) : (1,n) → S } benötigt. Induktionsvoraussetzung: Wir legen fest, dass g(1,k) = k ist, wenn k < n erfüllt ist. Induktionsschritt: Wenn k<n gilt, kann man von (1,n) nach (1,k) ziehen. Das ist durch Wegnehmen am Rand möglich. Nach Induktionsvoraussetzung enthält die Menge G(n) also die Grundy-Zahlen 0,1,...,n-1. Durch die Wegnahme einer oder mehrerer Spalten oder Zeilen aus der Mitte in einem Spielzug entsteht ein Summenspiel (1,r) ⊕ (1,s) mit r + s < n. Wir berechnen nun die GrundyZahl dieses Summenspiels. Aus Formel 1 von Abschnitt 3 oben ergibt sich g((1,r)⊕(1,s)) = g(1,r)⊕g(1,s) = r ⊕s ≤ r + s < n. Damit ist gezeigt, dass G(n) = {0,1,...,n-1} und g(1,n) = n ist. Die in Abschnitt 6 beschriebene Regelmäßigkeit für g(2,n) lässt sich folgendermaßen als Formel schreiben. Für k>0 gilt g(2, 3k) = 4k, g(2, 3k+1) = 4k+1 und g(2, 3k+2) = 4k+3. Um die Grundy-Zahl zu bestimmen, teilt man also die Anzahl an Spalten und durch die Zahl 3. Der bei der Division entstehende Rest entscheidet über die zu verwendende Formel. Beispiele. Zur Demonstration dienen folgende Beispiele: g(2,32) = g(2, 3·10+2) = 4·10+3 = 43 g(2,55) = g(2, 3·18+1) = 4·18+1 = 73 g(2,78) = g(2, 3·26) = 4·26 = 104 9 Zusammenfassung Vor unseren Rechnungen hatten wir uns erhofft, dass wir eine Formel für g(m,n) und damit eine allgemeine Gewinnstrategie formulieren können. Eine solche allgemeine Formel konnten wir nicht herausfinden, aber zumindest eine für g(1,n) und g(2,n). Außerdem haben wir ein Verfahren entwickelt, um die Grundy-Zahlen für immer größere Rechtecke zu bestimmen. Die Tabellen liefern uns eine Gewinnstrategie für zweidimensionale Nim-Spiele mäßiger Größe. Quellenverzeichnis [Wi1] Wikipedia: Kombinatorische Spieltheorie, http://de.wikipedia.org/wiki/Kombinatorische_Spieltheorie#Sonderfall:_Neutrale_Spiele (05.01.2011) [Wi2] Wikipedia: Nim-Spiel, http://de.wikipedia.org/wiki/Nim-Spiel (05.01.2011) [Al] Alraft: Nim-Spiel, http://www.alraft.de/altenhein/nim.htm (05.01.2011) Erklärung Wir versichern hiermit, dass wir diese Arbeit selbständig und nur unter Verwendung der angegebenen Literatur und Hilfsmittel verfasst haben. Auf die Theorie der Grundy-Zahlen hat uns unser Betreuer, Herr Miyamoto, hingewiesen. _____________________ Nemanja Sandic _____________________ Tan Vu Pham