Sie sind auf Seite 1von 29

Computer-Supported Learning Research Group Prof. Dr. U.

Schroeder RWTH Aachen

Schlau gewinntund wir zeigen wie! Einfhrung in die Spieltheorie


Ein Modul fr das Schlerlabor Informatik InfoSphere- an der RWTH Aachen
Verfasser:
Kurz-Info: Informatischer Inhalt: Spieltheorie Jahrgangsstufe: Q1 bis Q2 Vorwissen: Java-Kenntnisse, Matrizen

Christian Tetz Julian Schrkes Frank Weidler

Kurzinformation fr die Lehrkraft


Titel: Schlau gewinntund wir zeigen wie! Einfhrung in die Spieltheorie

Schulstufe: Oberstufe optimale Jahrgangsstufe: Q1-Q2

Themenbereich: Lsungskonzepte der Spieltheorie wie bspw. Nash-Gleichgewicht, Min-Max-Algorithmus; ein Teilbereich der theoretischen Informatik.

EINORDNUNG IN GESETZLICHE RAHMENBEDINGUNGEN Lehrplan NRW: Konzepte des objektorientierten Modellierens als zielgerichtetes Vereinfachen und strukturiertes Darstellen der Wirklichkeit am Beispiel von einfachen Spielen. Die Darstellungen erfordern zum Teil Baumstrukturen, die den Bereich Datenstrukturen tangieren. Ebenso werden Methoden in vordefinierten Klassen implementiert. Bildungsstandards der GI: Die Schlerinnen und Schler (SuS) knnen mit Hilfe von verschiedenen Darstellungsformen die spieltheoretischen Problemstellungen modellieren und analysieren, wie es im Prozessbereich Darstellen und Interpretieren gefordert wird. Darber hinaus werden Algorithmen zur Lsung von Problemen erarbeitet und getestet. Einbindung in den Unterricht: Als Ausblick nach dem Erwerb von Java-Grundlagen in die Welt der theoretischen Informatik. Vorkenntnisse: Java Programmierkenntnisse (Variablen, Schleifen und Abfragen, Arrays), das mathematische Konstrukt der Matrizen kennen (keine weiteren Kenntnisse wie bspw. Gauverfahren erforderlich) Dauer: 4 Stunden Inhaltsbeschreibung: In diesem Modul lernen die SuS anhand von vielen kleinen Problemen die grundlegenden Konzepte der Spieltheorie kennen und wenden diese direkt an. Dabei werden unter anderem die Themen wie das Nash-Gleichgewicht und die Dominanz an einfachen Alltagsproblemen oder Spielen erschlossen. Zum Ende werden die erlernten Strategien und Konzepte auf ein komplexeres Problem, wie Tic Tac Toe angewandt. So entwickeln die SuS nach und nach ein Gefhl, wie man an solche Probleme herangehen und einzelne erlernte Strategien miteinander verknpfen kann, um somit auch ein Problem, das mit einer Strategie alleine nicht lsbar wre, zu bewltigen.

Seite 1

LERNZIELE
Die SuS sollen einen allgemeinen Einblick in die Spieltheorie erhalten und zwischen den verschiedenen Arten unterscheiden knnen. Die SuS sollen verschiedene Lsungskonzepte verstehen und eine Auswahl dieser, wie beispielsweise das Nash-Gleichgewicht, Dominanz etc. anwenden knnen. Die SuS sollen die Darstellungsformen extensiv und Normalform von Spielen differenzieren knnen. Die SuS sollen einen Einblick in die verschiedenen Informationsarten, auf denen die Lsungskonzepte aufbauen, bekommen. Die SuS knnen verschiedene Lsungskonzepte verknpfen, um komplexere Probleme zu lsen.

FACHLICHE ANALYSE
In diesem Modul werden die unterschiedlichen Lsungskonzepte der Spieltheorie (Nash-Gleichgewicht, Dominanz, Minimax-Algorithmus) behandelt und die unterschiedlichen Arten der Spieltheorie (2-PersonenNullsummenspiel, nicht-kooperative Spieltheorie) behandelt. Mit Hilfe des Verstndnisses fr Strategien werden kleine Java-Programme geschrieben, die zum einen Vertiefungscharakter haben und zum anderen aufzeigen wie Probleme automatisiert abgehandelt werden knnen. 2-Personen-Nullsummenspiel: Nullsummenspiele beschreiben in der Spieltheorie Situationen, also Spiele im verallgemeinerten Sinne, bei denen die Summe der Gewinne und Verluste aller Spieler zusammengenommen gleich null ist. Alle Strategiespiele fr zwei Spieler, bei denen es im Ergebnis nur auf Sieg, Unentschieden und Verlust ankommt, kann man als Nullsummenspiele auffassen, wenn man einen Sieg mit +1 Punkt, ein Unentschieden mit 0 Punkten und einen Verlust mit -1 Punkt wertet. Am Ende eines solchen Spiels ist die Summe immer null (A gewinnt und B verliert: 1+(-1) = 0; oder unentschieden: 0+0 = 0; oder A verliert und B gewinnt: -1+1 = 0). Nash-Gleichgewicht: Das Nash-Gleichgewicht ist ein zentraler Begriff der mathematischen Spieltheorie. Es beschreibt in nichtkooperativen Spielen eine Kombination von Strategien, eine fr jeden Spieler, von der ausgehend kein einzelner Spieler fr sich einen Vorteil erzielen kann, indem er einseitig von seiner Strategie abweicht. In einem Nash-Gleichgewicht bereut daher kein Spieler seine Strategiewahl. Die Strategien der Spieler sind wechselseitig beste Antworten. Dominanz: Eine Strategie dominiert eine Andere strikt, wenn ihre Auszahlung (z.B. 1 fr gewinnen und -1 fr verlieren) IMMER besser ist als die der Anderen. Dominiert eine Strategie die andere schwach, dann ist die Auszahlung IMMER besser oder gleich gro. Minimax-Algorithmus: Der Minimax-Algorithmus ist ein Algorithmus zur Ermittlung der optimalen Spielstrategie fr endliche ZweiPersonen-Nullsummenspiele. Eine mit dem Minimax-Algorithmus berechnete Strategie wird MinimaxStrategie genannt. Sie sichert dem betreffenden Spieler den hchstmglichen Gewinn, der unabhngig von der Spielweise des Gegners zu erzielen ist. Das aus den Minimax-Strategien beider Spieler gebildete Strategie-Paar bildet ein Nash-Gleichgewicht. Bei Nicht-Nullsummenspielen, bei denen die Niederlage des Gegners nicht

Seite 2

zwangslufig mit dem eigenen Gewinn zusammenfllt, liefert der Minimax-Algorithmus nicht unbedingt eine optimale Strategie. Nicht-kooperative Spieltheorie: Die Spieler knnen keine bindenden Vertrge abschlieen oder sich absprechen.

EINORDNUNG IN GESETZLICHE RAHMENBEDINGUNGEN LEHRPLAN INFORMATIK


Sind im Unterricht einmal Algorithmen und Datenstrukturen behandelt und ist Java als Programmiersprache erlernt worden, bietet sich dieses Modul gut an, dieses Wissen hier in einem Bereich der Spieltheorie anzuwenden und zu vertiefen. Spiele werden von ihrer Problematik her logisch zerlegt, analysiert und in verschiedenen Darstellungsformen beschrieben. Nach dem Erarbeiten eines Lsungsalgorithmus, wird dieser von den SuS in der Programmiersprache Java implementiert.

VORGABEN ZUM ZENTRALABITUR


In diesem Modul werden grundlegende Strategien wie beispielsweise Dominanz und das Nash-Gleichgewicht verwendet, um Spielsituationen zum bestmglichen eigenen Nutzen zu verndern. Diese Strategien werden theoretisch erlutert und sollen an kleinen Beispielen programmiert werden. Damit das gelingt sind Kenntnisse aus dem Bereich I.1 "Konzepte des objektorientierten Modellierens" zwingend erforderlich. Gleichzeitig vertiefen die Programmierbungen auch die Fertigkeiten dort. Abstrakte Theorien werden immer leichter verstndlich, wenn sie veranschaulicht werden. So werden auch hier die Lsungsstrategien auf Basis von Grundinformationen, die aus der Spielsituation heraus entnommen werden, in Form von Bumen, Graphen oder Diagrammen dargestellt. Dabei steht das "Lesen" und die Interpretation der Bume etc. im Vordergrund. Die SuS sind damit zustzlich auch selbst in der Lage diese aufzustellen. Durch dieses erworbene Verstndnis knnen dann Lsungswege erkannt und analysiert werden, um im Anschluss daran die wie oben bereits erwhnte beste Mglichkeit auszuwhlen. Durch die Verwendung von Graphen und Bumen kann hier eine weitere Einordnung in den Bereich I.2 "Datenstrukturen" vorgenommen werden. Die Mglichkeit, mit verschiedenen Strategien manchmal zum selben Ziel zu gelangen, kann unter anderem dem besseren Verstndnis der verschiedenen Mglichkeiten von Suchalgorithmen dienlich sein. Zuletzt finden sich in diesem Model auch Inhalte aus dem Bereich III "Endliche Automaten und formale Sprachen" wieder. Die SuS arbeiten in manchen Fllen auch mit Entscheidungsbumen, deren grundlegendes Prinzip dem eines nichtdeterministischen Automaten gleich kommt, in denen fr jeden Zustand eine richtige Entscheidung gefllt werden muss.

BENTIGTE UNTERRICHTLICHE VORAUSSETZUNGEN


Java Programmierkenntnisse (Variablen, Schleifen und Abfragen, Arrays) das mathematische Konstrukt der Matrizen (keine weiteren Kenntnisse wie bspw. Gauverfahren erforderlich)

EINBETTUNG IN DEN SCHULUNTERRICHT


Dieses Modul eignet sich vertiefend auf die bereits gelernte Programmiersprache Java aufzusetzen. Es werden dabei nur grundlegende programmiertechnische Elemente verwendet wie Variablen Deklarationen, Schleifen, Seite 3

Kontrollstrukturen und Datenstrukturen wie Arrays. Kenntnisse zur Objektorientierung werden nicht bentigt. Im Folgenden sind hier nun Anregungen zur Wiederholung der verwendeten Fertigkeiten sowie Aufgaben angegeben.

DIDAKTISCH/METHODISCHE SCHWERPUNKTSETZUNG
Beschreibung: Das Modul ist in drei Phasen (Einstieg, Mini-Spiele und Abschluss) aufgeteilt. Zu Beginn wird das Einstiegsspiel 3D-Tic-Tac-Toe in Zweiergruppen gespielt, damit die SuS spielerisch an das Thema herangefhrt werden und einen kurzen Einblick bekommen. Anschlieend folgt eine Phase, in der die SuS grundlegende Strategien in Mini-Spielen erlernen und anwenden. In kurzen Prsentationen wird Theoriewissen erlutert und mit Hilfe dessen anschlieend Aufgaben zu dieser Strategie bearbeitet werden. Da die Prsentationen den SuS in einem Moodle-Kurs zur Verfgung stehen, ist es mglich, dass die SuS in einem unterschiedlichen Lerntempo arbeiten knnen. Durch die Unabhngigkeit der einzelnen Mini-Spiele knnen die Unterschiede des Lerntempos aufgefangen werden. Das Modul wird von der Programmierung einer KI des Spiels Tic-Tac-Toe abgeschlossen. Dort werden die Strategien der Mini-Spiele aufgegriffen. Somit knnen die SuS ihr erlerntes Wissen anwenden und kombinieren, um ein komplexeres Problem zu lsen. Einstieg: Die SuS spielen in Zweiergruppen das Online-Spiel 3D-Tic-Tac-Toe gegeneinander. Einer spielt mit einer Anleitung, in der die perfekte Strategie beschrieben wird, der Andere spielt hingegen ohne Anleitung. Dabei sollen die SuS an das Thema herangefhrt werden und schon einmal den Sinn und Nutzen von Spielstrategien erkennen, da der Spieler mit Anleitung besser abschneidet. Mini-Spiele: Die SuS lernen in vier Minispielen einige Lsungsstrategien der Spieltheorie (Nash-Gleichgewicht, Dominanz, Minimax-Algorithmus). 1. Schnick-Schnack-Schnuck mit Brunnen: In diesem Spiel sollen die SuS das Prinzip der Dominanz erlernen. Zuerst sollen sie eine Spielmatrix aufstellen und anhand dieser erkennen, ob ein Element ein anderes Element dominiert. Dadurch sollen die SuS sich eigene Gedanken zum Thema Dominanz machen und werden gleichzeitig auf die Programmieraufgabe vorbereitet, da sie die einzelnen Elemente vergleichen, so wie es im Code spter auch umgesetzt wird. Anschlieend erstellen die SuS unter Anleitung ein Programm, mit dem man jede Spielmatrix auf Dominanz untersuchen kann. Die Anleitung ist in mehrere Teilaufgaben aufgeteilt, damit die SuS immer genau wissen, was sie wo machen mssen. Nun sollen die SuS berprfen was passiert, wenn das dominante Element entfernt wird. Daran sollen sie sehen, dass aus einem Spiel mit Dominanz auch ein Spiel ohne dominantes Element entstehen kann. Anschlieend folgt eine Star-Wars-Edition, die die SuS mit Hilfe des Programms auf Dominanz untersuchen. So knnen die SuS ihr geschriebenes Programm nochmals anwenden und sehen, dass dies universell einsetzbar ist. 2. Gefangenendilemma: Dieses Spiel beschftigt sich mit dem Nash-Gleichgewicht. Anfangs spielen die SuS zu dritt das Spiel selbst durch, um die Regeln und die Problematik zu verinnerlichen. Nachdem ihnen erklrt wurde, was ein Nash-Gleichgewicht ist und wie man es bestimmt, bestimmen die SuS es fr dieses Beispiel. So Seite 4

wird das gerade erlernte Theoriewissen gefestigt. Anschlieend erstellen die SuS wieder unter Anleitung ein Programm, das fr alle 2x2 Matrizen das Nash-Gleichgewicht bestimmt. Die Anleitung ist wie im ersten Spiel in mehrere Unterpunkte unterteilt. Abschlieend wenden die SuS ihr Programm auf andere Strafen an. Dies hat wieder den Nutzen, dass die SuS erkennen, dass das Programm jede Strafenkombination lsen kann. 3. Marktkampf: Dieses Spiel ist thematisch eine Fortfhrung des Gefangenendilemmas. Die SuS beschftigen sich also weiter mit dem Nash-Gleichgewicht. Bevor sie dieses allerdings berechnen knnen, mssen sie die gegebenen Daten aus der Baumdarstellung (Extensivform) in die Matrixdarstellung (Normalform) umwandeln. So erkennen die SuS, dass es nicht nur eine Darstellungsform gibt und dass man die Daten von einer Darstellungsform in eine andere berfhren kann. Dann mssen die SuS erkennen, dass man dieses Problem auch mit dem Nash-Gleichgewicht lsen kann. So wird berprft, ob die SuS gelernt haben, dass man solche Probleme mit dieser Strategie lst. Anschlieend wird das im zweiten Spiel geschrieben Programm auf 3x3 Matrizen erweitert, damit das gegebene Problem mit dem Programm gelst werden kann. So sehen die SuS, dass man vorhandene Programme leicht erweitern kann. Abschlieend wird das Problem mit anderen Firmen und Gewinnen gestellt und von den SuS gelst. 4. Nim-Spiel: In diesem Spiel werden die SuS an den Minimax-Algorithmus herangefhrt. Zuerst stellen die SuS den Spielbaum fr das Nim-Spiel mit gegebenem Anfangswert auf. Anschlieend beantworten die SuS zum besseren Verstndnis des Baumes ein Paar Fragen in einem Moodle-Quiz. Nun folgt eine Erklrung des Minimax-Algorithmus, der danach auf den Spielbaum angewendet wird. Es folgt zur Ergebnissicherung wieder ein Quiz. Abschluss: Die SuS programmieren am Ende des Moduls einen Teil einer KI zum Spiel Tic-Tac-Toe. Dabei werden auch die in den Mini-Spielen erlernten Strategien (wie der Minimax-Algorithmus) verwendet. Dies erfolgt wieder in einer kleinschrittigen Anleitung. Auerdem werden groe Teile des Programms vorgegeben, damit SuS sich nur auf die KI konzentrieren knnen und sich nicht mit der Darstellung beschftigen mssen.

Seite 5

VERLAUFSPLAN DES MODULS

Zeit
5 Min.

Phase
Erster Einblick in die Spieltheorie durch ein Spiel mit Anleitung Erarbeitung und Festigung des Theoriewissens anhand von Minispielen Anwendung der gelernten Lsungskonzep te auf TicTacToe

Inhalt
Begrung Ziel der Spieltheorie und Nutzen direkt am Spiel erkennen

Medium

Sozialfor m
Lehrervortrag, Partnerarbeit

20 Min.

3D-TicTacToe

40 Min. (wird fr jedes der 4 Minispiele wiederholt, also insges. 160 Min.)

Lsungsstrategien der Spieltheorie

Arbeitsbltter: ABSSS,ABGD,ABMK, PowerPoint Prsentation und Nimspiel im Moodle

Partnerarbeit

60 Min.

Vernetzen der gelernten Konzepte

Arbeitsblatt: TicTacToe

Partnerarbeit

QUELLENVERZEICHNIS
Min Max Algorithmus TicTacToe: http://cvpr.uni-muenster.de/teaching/ss12/KI/script/KI03-Spiele.pdf Java Kenntnisse: http://openbook.galileocomputing.de/javainsel/ Bild Marktkampf: http://www.fuechse.info/faq/images/Schumann_kampf.jpg Bild Gefangenendilemma: http://www.alteapotheke-online.de/images/gefangener.gif Abschlussspiel: http://vincentloy.files.wordpress.com/2011/04/thinking_7_tnb.png Bild Schnick Schnack Schnuck: http://view.stern.de/de/picture/1405190/Schere-Stein-Papier-Grau-Digiart-510.jpg

Seite 6

ANHANG

Modulvorbereitende Aufgaben:
GESCHACHTELTE SCHLEIFEN
Schleifen, und das gilt insbesondere fr for-Schleifen, knnen verschachtelt werden. Syntaktisch ist das auch logisch, da sich innerhalb des Schleifenrumpfs beliebige Anweisungen aufhalten drfen. Um fnf Zeilen von Sternchen auszugeben, wobei in jeder Zeile immer ein Stern mehr erscheinen soll, schreiben wir: for ( int i = 1; i <= 5; i++ ) { for ( int j = 1; j <= i; j++ ) System.out.print( "*" ); System.out.println(); } Als besonderes Element ist die Abhngigkeit des Schleifenzhlers j von i zu werten. Es folgt die Ausgabe: * ** *** **** ***** Die bergeordnete Schleife nennt sich uere Schleife, die untergeordnete innere Schleife. In unserem Beispiel wird die uere Schleife die Zeilen zhlen und die innere die Sternchen in eine Zeile ausgeben, also fr die Spalte verantwortlich sein. Da Schleifen beliebig tief geschachtelt werden knnen, muss besonderes Augenmerk auf die Laufzeit gelegt werden. Die inneren Schleifen werden immer so oft ausgefhrt, wie die uere Schleife durchlaufen wird. Aufgabe 1: Gestalte die obige Ausgabe so um, dass folgendes Bild entsteht: ***** **** *** ** *

ARRAYS
Ein Array (auch Feld oder Reihung genannt) ist ein spezieller Datentyp, der mehrere Werte zu einer Einheit zusammenfasst. Er ist mit einem Setzkasten vergleichbar, in dem die Pltze durchnummeriert sind. Angesprochen werden die Elemente ber einen ganzzahligen Index. Jeder Platz (etwa fr Schlmpfe) nimmt immer Werte des gleichen Typs auf (nur Schlmpfe und keine Pokmons). Normalerweise liegen die Pltze eines Arrays (seine Elemente) im Speicher hintereinander, doch ist dies ein fr Programmierer nicht sichtbares Implementierungsdetail der virtuellen Maschine.

Seite 7

Jedes Array beinhaltet Werte nur eines bestimmten Datentyps bzw. Grundtyps. Dies knnen sein: elementare Datentypen wie int, byte, long und so weiter Referenztypen Referenztypen anderer Arrays, um mehrdimensionale Arrays zu realisieren

GRUNDBESTANDTEILE
Fr das Arbeiten mit Arrays mssen wir drei neue Dinge kennenlernen: 1. das Deklarieren von Array-Variablen 2. das Initialisieren von Array-Variablen, Platzbeschaffung 3. den Zugriff auf Arrays. Das umfasst den Lesenden Zugriff ebenso wie den schreibenden.

Beispiel 1. Deklariere eine Variable randoms, die ein Array referenziert: double[] randoms; 2. Initialisiere die Variable mit einem Array-Objekt der Gre 10: randoms = new double[ 10 ]; 3. Belege das erste Element mit einer Zufallszahl und das zweite Element mit dem Doppelten des ersten Elements: randoms[ 0 ] = Math.random(); randoms[ 1 ] = randoms[ 0 ] * 2; Schauen wir uns den ersten und dritten Punkt nun noch einmal genauer an.

DEKLARATION VON ARRAYS


Eine Array-Variablendeklaration hnelt einer gewhnlichen Deklaration, nur dass nach dem Datentyp die Zeichen [ und ] gesetzt werden.

Beispiel Deklariere zwei Feld-Variablen: int[] primes; Point[] points; Eine Variable wie primes hat jetzt den Typ ist Feld und speichert int-Elemente, also eigentlich zwei Typen.

Seite 8

Hinweis Die eckigen Klammern lassen sich bei der Deklaration einer Array-Variablen auch hinter den Namen setzen, doch ganz ohne Unterschied ist die Deklaration nicht. Das zeigt sich sptestens dann, wenn mehr als eine Variable deklariert wird: int []primes, matrix[], threeDimMatrix[][]; Das entspricht dieser Deklaration : int primes[], matrix[][], threeDimMatrix[][][]; Damit Irrtmer dieser Art ausgeschlossen werden, sollten Sie in jeder Zeile nur eine Deklaration eines Typs schreiben. Nach reiner Java-Lehre gehren die Klammern jedenfalls hinter den Typbezeichner, so hat es der Java-Schpfer James Gosling gewollt.

ARRAYS MIT INHALT FLLEN


Die bisherigen Deklarationen von Array-Variablen erzeugen noch lange kein ArrayObjekt, das die einzelnen Array-Elemente aufnehmen kann. Wenn allerdings die Eintrge direkt mit Werten belegt werden sollen, gibt es in Java eine Abkrzung, die ein ArrayObjekt anlegt und zugleich mit Werten belegt.

Beispiel Wertebelegung eines Felds: int[] primes = { 2, 3, 5, 7, 7 + 4 }; String[] strings = { "Haus", "Maus", "dog".toUpperCase(), // DOG new java.awt.Point().toString(), }; In diesem Fall wird ein Feld mit passender Gre angelegt, und die Elemente, die in der Aufzhlung genannt sind, werden in das Feld kopiert. Innerhalb der Aufzhlung kann abschlieend ein Komma stehen, wie die Aufzhlung bei strings demonstriert.

MEHRDIMENSIONALE ARRAYS
Java realisiert mehrdimensionale Arrays durch Arrays von Arrays. Sie knnen etwa fr die Darstellung von mathematischen Matrizen oder Rasterbildern Verwendung finden. Dieser Abschnitt lehrt, wie Objekte fr mehrdimensionale Felder initialisiert, aufgebaut und abgegrast werden. FELD-OBJEKTE MIT NEW AUFBAUEN Seite 9

Die folgende Zeile deklariert ein zweidimensionales Feld mit Platz fr 32 Zellen, die in vier Zeilen und acht Spalten angeordnet sind: int[][] A = new int[ 4 ][ 8 ]; Obwohl mehrdimensionale Arrays im Prinzip Arrays mit Arrays als Elementen sind, lassen sie sich leicht deklarieren. Zwei alternative Deklarationen (die Position der eckigen Klammern ist verschoben) sind: int A[][] = new int[ 4 ][ 8 ]; int[] A[] = new int[ 4 ][ 8 ]; ANLEGEN UND INITIALISIEREN IN EINEM SCHRITT Ebenso wie bei eindimensionalen Feldern lassen sich mehrdimensionale Felder gleich beim Anlegen initialisieren: int[][] A3x2 = { {1, 2}, {2, 3}, {3, 4} }; int[][] B = { {1, 2}, {2, 3, 4}, {5} }; Der zweite Fall lsst erkennen, dass das Feld nicht unbedingt rechteckig sein muss. Dazu gleich mehr. ZUGRIFF AUF ELEMENTE Einzelne Elemente spricht der Ausdruck A[i][j] an.(Die

in Pascal bliche Notation A[i,j] wird in Java nicht untersttzt. Die Notation wre im Prinzip mglich, da Java im Gegensatz zu C(++) den Komma-Operator nur in for-Schleifen zulsst.) Der Zugriff erfolgt mit so vielen Klammerpaaren, wie die Dimension des
Arrays angibt.

Beispiel Der Aufbau von zweidimensionalen Feldern (und der Zugriff auf sie) ist mit einer Matrix beziehungsweise Tabelle vergleichbar. Dann lsst sich der Eintrag im Feld a[x][y] in folgender Tabelle ablesen: a[0][0] a[1][0] a[2][0] ... a[0][1] a[1][1] a[2][1] a[0][2] a[1][2] a[2][2] a[0][3] a[1][3] a[2][3] a[0][4] a[1][4] a[2][4] a[0][5] a[1][5] a[2][5] ...

Aufgabe 2: Du hast nun gelernt wie ein- und zweidimensionale Arrays funktionieren. Lege jetzt eine 3x3 Matrix mit den Zahlen 1-9 an. Verwende das oben aufgefrischte Wissen zu Schleifen, um alle Elemente der Matrix aufzuaddieren. Gebe das Ergebnis aus. Es sollte dir bekannt sein ;-) Zusatzaufgabe(Partner): Ihr braucht fr diese Aufgabe vier Namen, vier Verben und vier Adverbien und schreibt sie auf. Nun deklariert ihr drei 2-dimensionale Arrays vom Typ String mit dem Namen n, v, a und initialisiert sie mit den jeweiligen Worten. Damit habt ihr nun drei 2x2 Matrizen. Durchlauft sie genau wie in der Aufgabe davor und addiert die Elemente der Matrix in dieser Art: Seite 10

n[0][0] + v[0][0] + a[0][0] n[0][1] + v[0][1] + a[0][1] n[1][0] + Somit entstehen lustige Stze wie Leopold popelt oft. Viel Spa! :-)

Seite 11

Arbeitsbltter
3D TicTacToe

Beschreibung: Jeder von euch kennt wahrscheinlich das Spiel Tic-Tac-Toe. Wer drei Kreuze in einer Reihe hat, gewinnt. 3D-Tic-Tac-Toe ist eine Erweiterung ins Dreidimensionale. So hat man drei normale Tic-Tac-Toe Spielfelder bereinander, sodass drei Ebenen entstehen. Man gewinnt bei dieser Version ebenfalls, wenn man drei Kugeln in einer Reihe hat, dabei kann man allerdings die verschiedenen Ebenen benutzen.

Seite 12

Aufgabe: Spielt das Spiel zu zweit gegeneinander. Ruft dazu den Link im Moodle auf. Einer von euch bekommt eine Spielanleitung mit einer Spielstrategie. Wiederholt das Spiel mehrmals und achtet darauf, ob derjenige mit der Spielstrategie fters gewinnt.

Siege Spieler 1

Siege Spieler 2

Seite 13

Schnick-Schnack-Schnuck mit Brunnen:

Quelle: http://view.stern.de/de/picture/1405190/Schere-Stein-Papier-Grau-Digiart-510.jpg

Regeln: Zwei Spieler whlen gleichzeitig eine der vier mglichen (Schere, Stein, Papier, Brunnen) Symbole. Dabei gelten folgende Regeln: Schere schlgt Papier und verliert gegen Brunnen und Stein. Stein schlgt Schere und verliert gegen Brunnen und Papier. Papier schlgt Stein und Brunnen und verliert gegen Schere. Brunnen schlgt Schere und Stein und verliert gegen Papier. Aufgabe 1: Veranschaulicht das Spiel grafisch in einer 4x4 Matrix und entwickelt mit Hilfe dieser Veranschaulichung eine Strategie, welches Element man am besten whlt und welches lieber nicht. Stellt euch dabei folgende Fragen: Gibt es ein Element, das nie besser ist als ein Anderes? Gibt es ein Element, das besser ist als alle Anderen? Gibt es ein Element, das man nie whlen sollte?

Ruft nun die Powerpoint-Prsentation zur Dominanz auf, in der euch erklrt wird, wie man herausfinden kann, ob ein Element besser ist als ein Anderes und wenn ja, welches.

Aufgabe 2: Programmiert mit Hilfe der grafischen Darstellung aus Aufgabe 1 ein Programm, das berprft, ob eine Strategie eine andere schwach dominiert und das Ergebnis ausgibt. Benutzt dazu die Programmvorlage im Moodle.

2.1 bertragt die Matrix in das zweidimensionale Array Spielmatrix 2.2 Deklariert zwei Variablen DominatorA und DominatorB, die als Zhler dienen, wie oft z.B. die Strategie Schere besser ist als die Strategie Stein.

Seite 14

2.3 Erstellt ein String-Array der Lnge vier in dem die vier Auswahlmglichkeiten stehen. 2.4 berprft die Matrix mit Hilfe von verschachtelten Schleifen auf Dominanz. berlegt euch vorher per Hand, wie ihr am besten alle Elemente der Matrix miteinander vergleichen knnt und bertragt dieses Prinzip in 3 For-Schleifen (siehe Code). 2.5 Gebt aus, ob eine Strategie die Andere dominiert. Falls ja, gebt aus welche Strategien dies sind.

Aufgabe 3: Da kein Spieler ein dominiertes Element whlt, kann man es auch aus dem Spiel streichen, da es niemand mehr whlen wird, wenn er intelligent spielt. Stellt eine Matrix ohne das Element, das dominiert wird auf. Gibt es noch ein dominantes Element? Vergleicht abschlieend diese neue Version mit SchnickSchnack-Schnuck ohne Brunnen. Was fllt euch auf?

Aufgabe 4: Schnick-Schnack-Schnuck Starwars-Edition. Wir betrachten nun eine Version des Spiels, in der man anstatt die vier blichen Elemente vier Charaktere von Starwars whlt. Dabei gelten folgende Regeln:

Luke siegt gegen Darth Vader und verliert gegen Yoda und den Imperator...

Luke

Darth Vader

Yoda

Imperator

Luke

+1

-1

-1

Darth Vader

-1

+1

+1

Yoda

+1

-1

-1

Imperator

+1

-1

+1

Seite 15

ndert euer Programm so, dass es nun berprft, ob bei dieser Variante auch ein Element dominiert. Gebt die Antwort wieder in der Konsole aus. Speichert die nderungen in einem anderen neuen Dokument, damit euer Programm fr die erste Version nicht verloren geht.

Seite 16

Marktkampf

Quelle: http://www.fuechse.info/faq/images/Schumann_kampf.jpg

Beschreibung: Zwei Unternehmen (z.B. Adidas und Puma) berlegen, wie stark sie sich in Zukunft auf dem Markt engagieren (z.B. Werbung schalten) wollen. Dabei hngt ihr Gewinn auch vom Engagement des anderen Unternehmens ab. Der folgende Baum beschreibt, welche Gewinne sich aus den unterschiedlichen Entscheidungen ergeben.

Seite 17

Aufgabe 1: bertragt den Baum in eine 3x3 Matrix.

Aufgabe 2: Mit welcher euch bereits bekannten Spielstrategie lsst sich dieses Problem (welche Werbeausrichtung beide Unternehmen am besten whlen, um fr sich selbst den maximalen Gewinn zu erhalten) lsen? Lst das Problem, indem ihr die bereits bekannte Spielstrategie zu diesem Lsungskonzept anwendet.

Aufgabe 3: Erweitert das Programm zum Gefangenendilemma so, dass auch dieses Problem damit zu lsen ist. Wenn ihr den vernderten Code speichert, dann whlt einen neuen Dateinamen aus, damit eure alte Lsung nicht verloren geht.

Aufgabe 4: Wir betrachten nun die beiden Unternehmen Apple und Samsung . Welche Werbeausrichtung sollten die Unternehmen whlen, wenn folgende Matrix die Gewinne beschreibt? Gebt hierfr die neuen Werte und Namen in euer Programm ein.

Engagement dem Markt:

auf gering (120,140) (130,120) (160,100)

Samsung mittel (100,160) (130,155) (140,150) stark (80,170) (120,140) (110,120)

Gering Mittel Stark Apple

(x,y) mit x = Gewinn von Apple in Mio. und y = Gewinn von Samsung in Mio.

Seite 18

Quelle: http://www.alteapotheke-online.de/images/gefangener.gif

Gefangenendilemma:

Spielregeln:

Zwei Gefangene werden verdchtigt, gemeinsam eine Straftat begangen zu haben. Beide Gefangene werden in getrennten Rumen verhrt und haben keine Mglichkeit, sich zu beraten bzw. ihr Verhalten abzustimmen. Die Hchststrafe fr das Verbrechen betrgt sechs Jahre. Wenn die Gefangenen sich entscheiden zu schweigen, werden beide wegen kleinerer Delikte zu je zwei Jahren Haft verurteilt. Gestehen jedoch beide die Tat, erwartet beide eine Gefngnisstrafe, wegen der Zusammenarbeit mit den Ermittlungsbehrden jedoch nicht die Hchststrafe, sondern lediglich von vier Jahren. Gesteht nur einer und der andere schweigt, bekommt der erste als Kronzeuge eine symbolische einjhrige Bewhrungsstrafe und der andere bekommt die Hchststrafe von sechs Jahren.

Aufgabe 1: Fertigt zuerst eine Matrix an, in der die Strafen fr beide Gefangenen fr alle Spielausgnge stehen. Spielt nun zu viert das Spiel nach. Setzt euch zu zweit zusammen, wobei einer jeweils den Verdchtigen spielt und der andere den Kommissar. Anschlieend treffen sich beide Kommissare und stellen aufgrund der gewhlten Strategien die Strafe ihres Verdchtigen fest und teilen ihm diese mit.

Aufgabe 2: Wir wollen nun wissen, wie sich beide Gefangenen entscheiden, wenn sie das beste Ergebnis fr sich selbst erreichen wollen. Dies finden wir heraus, indem wir das Nash-Gleichgewicht bestimmen. Das Vorgehen dazu wird euch in der Powerpoint-Prsentation "Nash-Gleichgewicht" erklrt. Ruft diese nun im Moodle auf. Ermittelt anschlieend mit Hilfe der Matrix die optimale Seite 19

Spielstrategie, indem ihr den Algorithmus zur Bestimmung eines Nash-Gleichgewichts, der euch in der Powerpoint-Prsentation erklrt wurde, ausfhrt.

Sammlung der Ergebnisse an der Tafel/Smartboard

Aufgabe 3: Programmiert einen Algorithmus, mit dem zu einer gegebenen Matrix das NashGleichgewicht ermittelt werden kann. ffnet dafr den Programmcode im Moodle und erarbeitet folgende Unterpunkte:

3.1 Legt zwei Arrays an, in denen die Strafen vom Gefangenen A und Gefangenen B stehen. 3.2 Fr den Algorithmus msst ihr die jeweiligen Maxima bestimmen. Beim Durchlaufen der Matrizen msst ihr euch die Maxima merken und auch an welcher Stelle sie gefunden wurden. Legt euch hierfr 4 Variablen an, die diese Informationen fr euch speichern. 3.3 berlegt euch zunchst wie ihr in Aufgabe 2 vorgegangen seid, um die optimale Strategie zu ermitteln. bertragt dieses Vorgehen dann in die Schleifen und beachtet dabei die Hinweise aus Aufgabe 3.2. 3.4 berprft ob euer Programm funktioniert, indem ihr das Ergebnis aus der Konsole mit dem aus Aufgabe 2 vergleicht.

Aufgabe 4: Die Staatsanwaltschaft entscheidet sich dazu, die Strafen zu verndern. Wie sollten sich die Gefangenen verhalten, wenn nun folgende Strafen gelten? Benutzt hierfr euer Programm aus Aufgabe 3 und passt die Werte an.

(-x,-y) mit x = Jahre im Gefngnis fr Gefangenen 1 und y = Jahre im Gefngnis fr Gefangenen 2 Seite 20

Nim-Spiel

Beschreibung: Zwei Spieler sollen einen Stapel mit Mnzen solange in unterschiedlich groe Teile aufteilen, bis es nicht mehr mglich ist. Ein Spielzug besteht somit aus dem Aufteilen des Stapels. Man gewinnt das Spiel, wenn der Gegner am Zug ist, aber der Stapel nicht mehr aufteilbar ist.

Hier seht ihr die Darstellung fr den Startwert 5. Spieler A hat den Stapel in Stapel der Hhe 4 und 1 aufgeteilt und Spieler B anschlieend den Stapel der Hhe 4 in zwei Stapel mit der Hhe 3 und 1. Es gibt also nun 3 Stapel. Einen Stapel mit der Hhe 3 und zwei Stapel mit der Hhe 1. Dies ist nur ein Teil des Baumes fr den Startwert 5.

Seite 21

Da Spieler B den Stapel nur noch in 2 gleiche Teile aufteilen kann, endet der Baum hier, weil es keine weitere Mglichkeit gibt.

Aufgabe 1: Erstellt einen Spielbaum, in dem alle Spielmglichkeiten dargestellt werden. Das Spiel wird mit sieben Mnzen gespielt. ffnet nun das Quiz zum Nim-Spiel, in dem euch ein paar Fragen zu dem Baum gestellt werden und spielt es durch.

Wie viele verschiedene Spielverlufe gibt es? Wie viele Spielzge kann es maximal/minimal geben? Was bedeuten die einzelnen Ebenen des Baumes? Wann gewinnt A und wann gewinnt B? Gibt es eine Beziehung zu den Ebenen?

Seite 22

Aufgabe 2: Man kann mit Hilfe eines Algorithmus bestimmen, welcher Spielzug fr Spieler A der Beste ist. Je nach Spiel kann man sogar direkt den Spielausgang erkennen. Dies geschieht mit Hilfe des MinimaxAlgorithmus. Ruft nun die Powerpoint-Prsentation zum Minimax-Algorithmus auf. Wendet anschlieend den Minimax-Algorithmus, der euch in der Powerpoint-Prsentation erklrt wurde, auf den Spielbaum an. Beschriftet die Bltter, bei denen A gewinnt, mit +1 und die Bltter, bei denen A verliert, mit -1. Untersucht das Ergebnis im Hinblick auf folgende Fragen:

Wie geht das Spiel aus, wenn beide optimal spielen? Wie geht das Spiel aus, wenn der Stapel in (6,1) und dann in (5,1,1) aufgeteilt wurde und ab dann beide optimal spielen? Kann man mit Hilfe des Baumes direkt fr jede Spielsituation sagen, wie das Spiel ausgeht?

Seite 23

Tac Tic

Toe

als knstliche Intelligenz


Tic Tac Toe ist ein Spiel, das jeder von euch kennt und auch sehr einfach zu verstehen ist. Bestimmt hat der eine oder andere auch seine persnliche Strategie oder Vorgehensweise, wie man am schnellsten gewinnt oder seinem Mitspieler eine Falle stellt, dass wenn er einen dummen Zug macht und danach keine Chance mehr hat zu gewinnen. Wre es nicht toll, wenn der Computer einem diese Arbeit abnimmt? ;-) 1996 gelang es Deep Blue als erstem Computer der Welt den damals amtierenden Weltmeister im Schach in einem Match zu besiegen. Doch heute wollen wir keine Weltmeister zu Fall bringen, sondern eine K.I. (knstliche Intelligenz) schreiben, die ein cleveres TicTacToe Match spielt.

Dazu bentigen wir den in diesem Modul bereits erwhnten Min-Max-Algorithmus. Ihr werdet auf diesem Blatt Stck fr Stck lernen wie der Algorithmus am Beispiel TicTacToe funktioniert und seid dann in der Lage dies im Java Editor Eclipse in einem eigenen Programm zu verwirklichen. In den vorgefertigten Code-Dateien findet ihr noch weitere Hinweise wie ihr vorgehen knnt um eure K.I. zu programmieren. Also keine Angst das wird schon ;-) 1. Schritt: Stellt euch vor ihr seid jetzt der Computer und bekommt vom Spieler eine Spielsituation als Eingabe. Diese knnte dann in etwa so aussehen: Du als Computer hast dein X in die Mitte gesetzt und der Spieler, hier als Kreis, hat mit einem Zug auf das Feld oben in der Mitte geantwortet.

Seite 24

Wir schauen uns nun alle mglichen Felder an auf die wir noch ein X setzen knnen. Das wren in diesem Fall sieben Mglichkeiten Unter all diesen Mglichkeiten mssen wir uns nun entscheiden, welche die Beste ist und um das bewerten zu knnen machen wir nun weiter mit dem

2. Schritt: Wir errechnen fr jede mgliche Position eine sogenannte Gewichtung aus, die angibt wie gut oder schlecht der Zug fr den Spieler ist. Dafr betrachten wir aber nicht allein unseren eigenen Zug, sondern zustzlich noch den des Gegners, damit wir mehr Informationen fr unsere Analyse haben. Ein Beispiel:

Angenommen wir setzen unser X nach oben links. Dann kann der Spieler zwischen 6 Positionen entscheiden, was ihr nun hier unten sehen knnt.

Hier beginnt es nun spannend zu werden. Fr jeden der sechs mglichen Zge, die der Spieler unternehmen kann, wird eine Gewichtung berechnet. Nehmen wir den Fall ganz links. Der Computer hat bei dieser Spielsituation 4 Mglichkeiten zu gewinnen nmlich zwei Mal diagonal, sowie einmal waagerecht (unten) und senkrecht (rechts).

Der Gegner hat nur die beiden Mglichkeiten waagerecht (unten) und senkrecht (rechts). Daher bekommt dieser den Wert 2. Das Gewicht ist somit die Differenz zwischen der mglichen Anzahl der Spalten, Zeilen und Diagonalen, die der Computer noch einnehmen kann(4) und der Anzahl der Spalten, Zeilen und Diagonalen, die der Spieler noch vollstndig einnehmen kann(2). Deswegen bekommt dieser Zug des Computers das Gewicht 2. Wie ihr oben seht werden die Gewichte fr alle Antworten des Spielers
Seite 25

ausgerechnet. Eine kleine Zahl bedeutet nach unserer Rechnung also, dass der Spieler die meisten Siegchancen hat, wohingegen eine groe Zahl fr eine bessere Chance des Computers steht. Da der Spieler natrlich nicht dumm ist, wird er sich fr die Antwort entscheiden, die ein mglichst kleines Gewicht hat (Minimum). Somit bekommt die Mglichkeit des Computers oben links sein X zu setzen den Wert 1 zugewiesen, da dies der kleinste Wert unter den Gewichten darstellt.

3. Schritt: Nach dem die Berechnungen aus Schritt 2 alle gemacht wurden sieht das Ergebnis schematisch veranschaulicht so aus:

Seite 26

Nun whlt der Computer aus seiner Sicht die Mglichkeit mit dem grtmglichen Gewicht aus (Maximum). Diese wurde oben rot markiert und stellt den Zug des Computers dar.Dann antwortet der Spieler seinerseits wiederum auf diesen Zug, welche die neue Spielsituation als Eingabe des Computers fr den Min-Max-Algorithmus ist. Aufgabe 1) Ihr werdet nun die elementaren Teile, die fr diesen Algorithmus ntig sind selber programmieren und am Ende ein lauffhiges Spiel starten knnen. Also ffnet zunchst Eclipse. Unter dem Projektnamen Spieltheorie findet ihr bei den Sources das Paket endspielSchuelerVersion und die drei Klassen: Gameloop, Spielbrett, TicTacToeKI. Fr diese Aufgabe ffnet ihr die Klasse Spielbrett und klickt euch durch bis zur Funktion gueltigerZug(int zug). Es ist im Code aber auch noch mal deutlich gemacht wo sich Aufgabe 1 befindet, genau wie die anderen Aufgaben. Diese Funktion ist wichtig fr den Schritt 1 der oben erlutert wurde. Sie prft, ob ich berhaupt in das Kstchen mit der Nummer zug setzen darf. Anders ausgedrckt: prft ob das Kstchen frei ist. Erst dann ist dies nmlich ein gltiger Zug. Implementiert also diese Funktion und gebt ein true oder false zurck, je nachdem, ob der Zug gemacht werden darf oder nicht. Das Feld mit der gleichnamigen Klassenvariablen ist so durchnummeriert: 0 3 6 1 4 7 2 5 8

Aufgabe 2) Ebenfalls in der Klasse Spielbrett findet ihr die Funktion berechneGewicht(). Diese errechnet die oben im Schritt 2 erwhnten Gewichte fr eine Spielsituation wie beispielsweise hier. Falls ihr nicht mehr wisst wie die Zahlen zustande kommen, lest es oben noch mal nach. Die X und O sind in der Klassenvariablen feld gespeichert. Programmiert das Prinzip aus Schritt 2 hier nach und gebt als Ergebnis eine Integer Zahl als das Gewicht (in diesem Fall 1) zurck.

Aufgabe 3) Hier soll noch der letzte Schritt programmiert werden, in dem der Computer den fr sich besten Zug whlt. In der Klasse TicTacToeKI seht ihr die Funktion besterZug(Spielbrett aktuellesBrett) bei der ihr euch nur auf die else-Bedingung der for-Schleife konzentrieren msst. Die Schleife geht alle
Seite 27

mglichen Zge des Computers durch, prft erst das schon zum Sieg reicht, falls nicht bekommt dieser Zug mit der Funktion gegnerGewichte() eine Zahl. Wie im Schritt 3 knnt ihr in der Abbildung die eingekreisten Zahlen fr jeden Zu sehen (1,0,1,0 von links gelesen), die die Minima darstellen. Das sind die Gegnergewichte. Ziel in dieser Aufgabe ist es unter den Zgen zuege, den Zug mit dem maximalsten Wert zu finden und in besterCompiZug zu speichern. Wenn die Aufgaben von euch korrekt gelst wurden, knnt ihr die Gameloop.java ffnen, auf den grnen Play-Button drcken und das Spiel startet ;-)

Quelle: http://vincentloy.files.wordpress.com/2011/04/thinking_7_tnb.png

Weiterfhrende Links: Min-Max Algorithmus http://de.wikipedia.org/wiki/Minimax-Algorithmus Alpha-Beta-Suche als Optimierung des Min-Max-Algorithmus http://de.wikipedia.org/wiki/Alpha-Beta-Suche Dazu noch eine gute Prsentation von der Uni Mnster http://cvpr.unimuenster.de/teaching/ss12/KI/script/KI03-Spiele.pdf Expliziter Java Code fr Min-Max mit Alpha-Beta Suche http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaGame_TicTacToe_AI.html

Seite 28