- von Spielbäumen und anderen Wäldern
Vom Amateur zum Großmeister
Dr. Marco BlockSommersemester 2009
ProInformatik - Funktionale Programmierung
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
von Spielbäumen und anderen Wäldern -
Vom Amateur zum Großmeister
1Dr. Marco Block-Berlitz
Funktionale Programmierung
1) Es war einmal ... Tic-Tac-Toe!
2) Das unbesiegbare Tic-Tac-Toe-Programm
3) Spiele komplexer als das Weltall?
4) Ohne menschliche Experten geht es nicht
5) Schach ist Tic-Tac-Toe sehr ähnlich
Übersicht zum Inhalt
6) Suche allein genügt nicht - auch das Brett ist wichtig
7) Mensch versus Maschine
8) Das Schachprogramm FUSc#
9) Programme können selbständig Spiele lernen
Sommersemester 2009 Dr. Marco Block
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
Programm
4) Ohne menschliche Experten geht es nicht
auch das Brett ist wichtig
9) Programme können selbständig Spiele lernen
Dr. Marco Block-Berlitz 2
Zunächst betrachten wir die speziellen Eigenschaften undTic-Tac-Toe.
Tic-Tac-Toe – Eigenschaften und Komplexität
alternierendesZwei-Spieler-Spiel
vollständige Information
Sommersemester 2009 Dr. Marco Block
Zwei-Spieler-Spielmit Spieler X und O
Spielablauf
x
x
...
x
x O
x O
...x
O
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
und Spielregeln vom Spielklassiker
Eigenschaften und Komplexität
Information Nullsummenspiel
Dr. Marco Block-Berlitz 3
des einen Gewinn ist des anderen Verlust
Komplexität
Damit ist die Komplexität von Tic-Tac-Toe relativklein und die Lösung sehr einfach.
Mögliche Spielverläufe: 9*8*7*...*2*1 = 9!das entspricht 362.880
Legale Wege gibt es sogar nur 255.168.
Ohne Rotation und Spiegelung gibt es sogar nur 765 unterschiedliche Spielsituationen.
Wir benötigen eine Bewertungsfunktion, die besagt, welcherob eine Partie unentschieden endete.
Tic-Tac-Toe - Bewertungsfunktion
Bewertungsfunktion
-1 0
x OO
O
O xxx x
x O
Ox x
Sommersemester 2009 Dr. Marco Block
Spieler O gewinnt Unentschieden
Suchbaum
0 -1 -1 1 -1 0Spielbewertungen
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
welcher Spieler gewonnen hat oder
10
xxO
xx O O
x O
OOxx
Dr. Marco Block-Berlitz 4
Unentschieden Spieler X gewinnt
X am Zug
O am Zug
X am Zug
0 1 1 -1 ?
Betrachten wir die folgende Spielsituation für den Spieler O
Tic-Tac-Toe – lokale Betrachtung für Spieler O
1 0 1 1
Sommersemester 2009 Dr. Marco Block
1 0 1 1
Spieler O wird sich für den vielversprechendsten Zug entscheiden und wählt das stehenden Möglichkeiten..
1 0 1 1
0
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
O
lokale Betrachtung für Spieler O
X am Zug
O am Zug
X am Zug ?
Dr. Marco Block-Berlitz 5
?Zug entscheiden und wählt das Minimum der zur Verfügung
X am Zug
O am Zug
X am Zug
Betrachten wir die folgende Spielsituation für den Spieler X
Tic-Tac-Toe – lokale Betrachtung für Spieler X
-1 1 0
Sommersemester 2009 Dr. Marco Block
-1 1 0
Auch Spieler X wird sich für den vielversprechendsten Zug entscheiden und wählt in diesem Fall das der zur Verfügung stehenden Möglichkeiten..
-1 1 0
1
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
X
lokale Betrachtung für Spieler X
O am Zug
X am Zug
O am Zug ?
Dr. Marco Block-Berlitz 6
?Zug entscheiden und wählt in diesem Fall das Maximum
O am Zug
X am Zug
O am Zug
Wenn wir davon ausgehen, dass jeder Spieler immer denkönnen wir die MinMax-Strategie (Claude Elwood Shannon
Tic-Tac-Toe – MinMax-Strategie
-1 -1
0X am ZugMaximieren
Sommersemester 2009 Dr. Marco Block
0 -1 -1 1 -1
-1 -1O am Zug
X am Zug
Minimieren
Formal läßt sich MinMax, wie folgt beschreiben:
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
für sich aktuell besten Zug spielt, dannShannon 1950) formulieren:
0
Hauptvariante
Dr. Marco Block-Berlitz 7
1 0 1 1 0
0
Tic-Tac-Toe – MinMax-Strategie
Formal läßt sich MinMax, wie folgt beschreiben:
maxKnoten(n)
Pseudocode:
Sommersemester 2009 Dr. Marco Block
maxKnoten(n)
if n ist terminaler Zustand
return eval(n)
w = -∞∞∞∞für jedes Kind m of n
v = minKnoten(m)
if v > w then w = v
return w
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
Dr. Marco Block-Berlitz 8
minKnoten(n)
if n ist terminaler Zustand
return eval(n)
w = ∞∞∞∞für jedes Kind m of n
v = maxKnoten(m)
if v < w then w = v
return w
Tic-Tac-Toe – MinMax-Strategie
Haskell [3]:
maximiere :: (Ord n) => (Baum n) -
maximiere (Knoten x []) = x
maximiere (Knoten x c) = maximum (map minimiere c)
data Baum a = Knoten a [Baum a]
minimiere :: (Ord n) => (Baum n) -
minimiere (Knoten x []) = x
Sommersemester 2009 Dr. Marco Block
minimiere (Knoten x []) = x
minimiere (Knoten x c) = minimum (map maximiere c)
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
-> n
maximiere (Knoten x c) = maximum (map minimiere c)
-> n
Dr. Marco Block-Berlitz 9
minimiere (Knoten x c) = minimum (map maximiere c)
Mit Hilfe der MinMax-Strategie können wir für Spiele, mit den
Unbesiegbares Programm
alternierendesZwei-Spieler-Spiel
vollständige Information
Sommersemester 2009 Dr. Marco Block
Zwei-Spieler-Spielmit Spieler X und O
... ein Programm schreiben, das unbesiegbar ist, wenn das
John Forbes Nash1994 Nobelpreis für Wirtschaftswissenschaften
Spieltheorie: Nash-Equilibrium
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
den folgenden Eigenschaften ...
Nullsummenspiel Geringe Komplexität
Dr. Marco Block-Berlitz 10
das Spiel ausgeglichen ist.
• Das Spiel Dame (checkers) gilt seit 2007 als „weakly solved“. Chinook ist nicht zu besiegen.
Suchraumkomplexität von Spielen
• Im Schach sind Maschinen den menschlichen Großmeistern seit den 1990‘ern ebenwürdig. Bestes Programm: Rybka
• Go ist die neue Drosophila melanogaster der Künstlichen Intelligenz, aktuelle Programme haben aber nur Amateur
Sommersemester 2009 Dr. Marco Block
Im Vergleich dazu: Anzahl Atome der Erde (51) und Anzahl Atome im Weltall (78)
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
als „weakly solved“.
Im Schach sind Maschinen den menschlichen Großmeistern Rybka
der Künstlichen Intelligenz, aktuelle Programme haben aber nur Amateur-Niveau
Dr. Marco Block-Berlitz 11
Im Vergleich dazu: Anzahl Atome der Erde (51) und Anzahl Atome im Weltall (78)
Angenommen ein Spiel hat einen konstanten Verzweigungsfaktor von und eine durchschnittliche Tiefe von 50 Zügen.
Was bedeutet eine hohe Komplexität?
Der entsprechende Suchbaum hätte Knoten.
Angenommen wir hätten 10.000 Computer, die jeweils eine Milliarde und man könnte die Arbeit ohne Verluste auf alle Rechner verteilen, dann beläuft sich die Rechenzeit auf ca.
Sommersemester 2009 Dr. Marco Block
Dies ist „zum Glück“ nur 1043 mal so lange wie unser Universum alt ist.
Wie kann es dann sein, dass ein Schachcomputer gegen einen menschlichen Weltmeister gewinnt?
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
Angenommen ein Spiel hat einen konstanten Verzweigungsfaktor von 30 (30 Aktionsmöglichkeiten pro Stellung)
Der entsprechende Suchbaum hätte Knoten.
eine Milliarde Suchschritte pro Sekunde schaffen, und man könnte die Arbeit ohne Verluste auf alle Rechner verteilen, dann beläuft sich die Rechenzeit auf ca.
Dr. Marco Block-Berlitz 12
mal so lange wie unser Universum alt ist.
Wie kann es dann sein, dass ein Schachcomputer gegen einen menschlichen Weltmeister gewinnt?
Die einzige Möglichkeit trotz einer hohen Komplexität einebesteht darin, die Suchtiefe zu begrenzen.
Suchtiefe begrenzen
Sommersemester 2009 Dr. Marco Block
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
eine vernünftige Zugauswahl zu treffen,
t fest
Dr. Marco Block-Berlitz 13
Es werden unterschiedliche Bewertungskriterien als Funktionengewichtet aussummiert. Das funktioniert auf Grund derNullsummenspiel handelt.
Allgemeine Bewertungsfunktion
Diese Funktionen werden unabhängig voneinander bestimmt,Weiß. Die Differenz ergibt den Funktionswert.
Sommersemester 2009 Dr. Marco Block
Weiß. Die Differenz ergibt den Funktionswert.
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
Funktionen beschrieben und dieseder Tatsache, da es sich um ein
bestimmt, jeweils für Schwarz und für
Dr. Marco Block-Berlitz 14
Aus der Schachliteratur sind viele Muster bekannt,entsprechend bewertet werden.
Bewertungsfunktion im Schach
BishopPair
Knight_Outpost
Supported_Knight_Outpost
Connected_Rooks
Opposite_Bishops
Opening_King_Advance
King_Proximity
Blocked_Knight
Draw_Value
Sommersemester 2009 Dr. Marco Block
No_Material
Bishop_XRay
Rook_Pos
Pos_Base
Pos_Queenside
Bishop_Mobility
Queen_Mobility
Knight_SMobility
Rook_SMobility
King_SMobility
Threat
Overloaded_Penalty
Q_King_Attack_Opponent
NoQ_King_attack_Opponent
NoQueen_File_Safty
Attack_Value
Unsupported_Pawn
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
bekannt, diese können nun lokalisiert und
Passed_Pawn_Control
Doubled_Pawn
Odd_Bishop_Pawn_Pos
King_Passed_Pawn_Supported
Passed_Pawn_Rook_Supported
Blocked_EPawn
Pawn_Advance
King_Passed_Pawn_Defence
Pawn_Defence
Bishop_SMobility
Queen_SMobility
Piece_Values
Opponents_Threat
Q_King_Attack_Computer
NoQ_King_Attack_Computer
Queen_File_Safty
Piece_Trade_Bonus
Pawn_Trade_Bonus
Dr. Marco Block-Berlitz 15
Mega_Weak_Pawn
Castle_Bonus
Bishop_Outpost
Supported_Bishop_Outpost
Seventh_Rank_Rooks
Early_Queen_Movement
Mid_King_Advance
Trapped_Step
Useless_Piece
Near_Draw_Value
Mating_Positions
Ending_King_Pos
Knight_Pos
Pos_Kingside
Knight_Mobility
Rook_Mobility
King_Mobility
Adjacent_Pawn
Unstoppable_Pawn
Weak_Pawn
Blocked_Pawn
Passed_Pawn_Rook_Attack
Blocked_DPawn
Pawn_Advance
Pawn_Advance2
Pawn_Pos
Isolated_Pawn
Weak_Pawn_Attack_Value
... und viele mehr!
Die MinMax-Strategie läßt sich auch mit beschränkter Tiefeproblemlos ausführen, um den besten Zug zu bestimmen.
MinMax-Strategie mit Bewertungsfunktion
-8 0
1X am ZugMaximieren
Sommersemester 2009 Dr. Marco Block
-8 0O am Zug
X am Zug
Minimieren
12 4 -8 9 0
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
Tiefe und einer Bewertungsfunktion.
Strategie mit Bewertungsfunktion
1
Dr. Marco Block-Berlitz 16
1
10 5 11 1 Bewertungsfunktion
Es gibt jedoch Situationen im Spielbaum, bei denen einzelnewerden müssen, da sie ein Maximum/Minimum am Elternknoten
Das Alpha-Beta-Pruning nutzt dies aus um unnötige Äste
MinMax-Strategie und Alpha-Beta-Pruning
Minimieren
Sommersemester 2009 Dr. Marco Block
Maximieren
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
einzelne Zweige nicht mehr betrachtetElternknoten nicht mehr verändern.
im Baum abzuschneiden.
Pruning
Dr. Marco Block-Berlitz 17
Pseudocode:
Alpha-Beta-Pruning
alpha-beta-maxKnoten(n, tiefe, αααα, ββββif (tiefe==0)
return eval(n)
für jedes Kind m of n
wert = alpha-beta-minKnoten(m, tiefe
if wert ≥≥≥≥ ββββreturn ββββ
if wert>αααααααα=wert
Sommersemester 2009 Dr. Marco Block
αααα=wertreturn αααα
alpha-beta-minKnoten(n, tiefe, αααα, ββββif (tiefe==0)
return eval(n)
für jedes Kind m of n
wert = alpha-beta-maxKnoten(m, tiefe
if αααα ≥≥≥≥ wert
return ααααif ββββ>wert
beta=wert
return ββββ
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
ββββ):
minKnoten(m, tiefe-1, αααα, ββββ)
Beta-Cutoff
Dr. Marco Block-Berlitz 18
ββββ):
maxKnoten(m, tiefe-1, αααα, ββββ)}
Alpha-Cutoff
Pseudocode:
Alpha-Beta-Pruning
alpha-beta(n, tiefe, αααα, ββββ):if (tiefe==0)
return eval(n)
für jedes Kind m of n
wert = -alpha-beta(m, tiefe-
if wert ≥≥≥≥ ββββreturn ββββ
if wert>αααααααα=wert
Sommersemester 2009 Dr. Marco Block
αααα=wertreturn αααα
Wir können durch vertauschen und negieren der ParameterFunktionen vertauschen.
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
-1, -ββββ, -αααα)
Dr. Marco Block-Berlitz 19
Parameter alpha und beta, beide
Alpha-Beta-Pruning
[-∞∞∞∞,
[-∞∞∞∞, ∞∞∞∞]
1
0
0
[0,
Sommersemester 2009 Dr. Marco Block
1 -1
0 5 -2
[-∞∞∞∞, ∞∞∞∞]
1
-2 < α (= 0)
αααα-Cutoff
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
, ∞∞∞∞]
[αααα, ββββ]
hat blau sicher hat rot sicher
Blau will maximierenRot will minimieren
, ∞∞∞∞]
5
[0, ∞∞∞∞]
1
Dr. Marco Block-Berlitz 20
-5 1 2
[0, ∞∞∞∞]
1
[0, 1]
2 > β (= 1)
ββββ-Cutoff
Alpha-Beta-PruningHaskell [3]:
maximiere = maximum . maximiere‘
maximiere‘ (Knoten x c) = mapmin (map minimiere‘ c)
data Baum a = Knoten a [Baum a]
minimiere = minimum . minimiere‘
minimiere‘ (Knoten x c) = mapmax (map maximiere‘ c)
mapmin, mapmax :: (Ord a) => [[a]]
Sommersemester 2009 Dr. Marco Block
mapmin, mapmax :: (Ord a) => [[a]]
mapmin (h:t) = (minimum h) : (verwerfeKleinere (minimum h) t)
mapmax (h:t) = (maximum h) : (verwerfeGroessere (maximum h) t)
verwerfeKleinere :: (Ord a) => a -
verwerfeKleinere n [] = []
verwerfeKleinere n (h:t)
| any (n > ) h = verwerfeKleinere n t
| otherwise = (minimum h) : (verwerfeKleinere (minimum h) t)
verwerfeGroessere :: (Ord a) => a
verwerfeGroessere n [] = []
verwerfeGroessere n (h:t)
| any (n < ) h = verwerfeGroessere n t
| otherwise = (maximum h) : (verwerfeGroessere (maximum h) t)
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
maximiere‘ (Knoten x c) = mapmin (map minimiere‘ c)
minimiere‘ (Knoten x c) = mapmax (map maximiere‘ c)
mapmin, mapmax :: (Ord a) => [[a]] -> [a]
liefert True, wenn min. ein Element die Bedingung erfüllt
Dr. Marco Block-Berlitz 21
mapmin, mapmax :: (Ord a) => [[a]] -> [a]
mapmin (h:t) = (minimum h) : (verwerfeKleinere (minimum h) t)
mapmax (h:t) = (maximum h) : (verwerfeGroessere (maximum h) t)
-> [[a]] -> [a]
| any (n > ) h = verwerfeKleinere n t
| otherwise = (minimum h) : (verwerfeKleinere (minimum h) t)
verwerfeGroessere :: (Ord a) => a -> [[a]] -> [a]
| any (n < ) h = verwerfeGroessere n t
| otherwise = (maximum h) : (verwerfeGroessere (maximum h) t)
Zu einer guten Suche wird eine brauchbare Stellungsrepräsentationbenötigt.
Repräsentation und Zuggenerator
-4 -2 -3 -5 -6 -3 -2 -4
-1 -1 -1 -1 -1 -1 -1 -1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
8x8-Spielbrett Bitboards
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
Sommersemester 2009 Dr. Marco Block
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
4 2 3 5 6 3 2 4
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
1 1 1 1 1
0 0 0 0 0
11100
11000
64 BIT-Wort
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
Stellungsrepräsentation mit schnellem Zuggenerator
0 0 0
0 0 0
0 0 0
0 0 0
ToPiecesBoard
Dr. Marco Block-Berlitz 22
0 0 0
0 0 0
0 0 0 0
1 1 1 1
0 0 0
0 ... 00
1 ... 00
>> 1 =
Es gibt zahlreiche Möglichkeiten, die Suchtiefe von Schachprogrammendamit entsprechend spielstärker zu machen.
Optimierungen der Suche
Eröffnungsbuch undEndspieldatenbank
Transpositions-tabellen
Sommersemester 2009 Dr. Marco Block
Desweiteren kommen folgende Optimierungen zumHistorieheuristik, Ruhesuche, ...
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
Schachprogrammen zu erhöhen und sie
Iterative Tiefensuche
t=1
Nullmoves
Dr. Marco Block-Berlitz 23
t=1
t=2
t=3
t=4
Einsatz: Zugsortierungen, Hauptvarianten, Killer- und
Es gab bereits viele Matches zwischen Maschinen undein paar legendäre aufgelistet
Mensch versus Maschine
Kasparov
Kasparov
Kasparov
Kramnik
Deep Blue
Deep(er) Blue
X3D Fritz
Deep Fritz
1996
1997
2003
2006
vs
vs
vs
vs
4 –
2.5
2 –
2 –
Sommersemester 2009 Dr. Marco Block
Das aktuell stärkste Programm ist Rybka (geschätzt 3200Schach gegen dieses Programm abschneiden wird.
V. Topalov (2813) W. Anand (2788) M. Carlsen (2772)
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
menschlichen Weltmeistern. Hier sind
– 2
2.5 – 3.5
– 2
– 4
G. Kasparov (2851)
Dr. Marco Block-Berlitz 24
3200 Elo), es bleibt abzuwarten wie die Weltelite im
L. Aronian (2768) W.Kramnik (2759) P. Leko (2756)
G. Kasparov (2851)
Seit 2002 wird das Schachprogramm FUSc# an der Freienhartem Training und vielen Lines-of-Code, ist FUSc# in derSchachpartien zu bezwingen.
So spielte FUSc# im Jahr 2004 gegen FideMeister Ilja Brener
Das Schachprogramm FUSc#
Sommersemester 2009 Dr. Marco Block
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
Freien Universität Berlin entwickelt. Nachder Lage, auch deutsche Titelträger in
Brener Remis.
Alpha-Beta-PruningIterative SucheDiverse Pruning-TechnikenTranspositionstabellenNullmovesEröffnung- und Endspielbücher
Dr. Marco Block-Berlitz 25
FM Ilja Brener14 Jahre altElo: 2375
Eröffnung- und Endspielbücher...
Die Bewertungskoeffizienten lassen sich automatisch anpassendem Schachserver von Chessbase.
Nach jeder Partie analysiert das Programm die Stellen derhatte und korrigiert die entsprechenden Parameter.
Bewertungskoeffizienten trainieren
Eine untrainierte FUSc#-Version erreichte nach 120 Partien
Sommersemester 2009 Dr. Marco Block
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
anpassen [1]. So geschehen bei FUSc# auf
der Partie, bei denen er falsch bewertet
Koeffizienten lassen sich mit
Partien mehr als 2000 Elo-Punkte.
Dr. Marco Block-Berlitz 26
Koeffizienten lassen sich mit Reinforcement Learningjustieren und optimieren
Mehrspielervarianten
Um Min-Max für mehrere Spieler anwenden zu können, müssen einige vorgenommen werden:
• Für jede Ebene muss gespeichert werden, welcher Spieler an der Reihe ist
• Die Bewertungsfunktion darf nicht mehr einen Wert zurückliefern, sondern erstellen, welche die Bewertungen für alle Spieler aus ihrer Sicht enthalten
Sommersemester 2009 Dr. Marco Block
Es existieren nun jedoch mehrere Möglichkeiten die beste Alternative zu wählen.
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
Max für mehrere Spieler anwenden zu können, müssen einige Anpassungen
Für jede Ebene muss gespeichert werden, welcher Spieler an der Reihe ist
Die Bewertungsfunktion darf nicht mehr einen Wert zurückliefern, sondern muss einen Nutzenvektorerstellen, welche die Bewertungen für alle Spieler aus ihrer Sicht enthalten
Dr. Marco Block-Berlitz 27
Es existieren nun jedoch mehrere Möglichkeiten die beste Alternative zu wählen.
Mehrspielervarianten - maxN
Eine Variante wäre, wenn sich alle Spieler optimistisch verhalten und jeweils versuchen eigenen Nutzen im Nutzenvektor stets zu maximieren:
Sommersemester 2009 Dr. Marco Block
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
Eine Variante wäre, wenn sich alle Spieler optimistisch verhalten und jeweils versuchen ihren
Dr. Marco Block-Berlitz 28
Mehrspielervarianten - paranoid
Im Gegensatz zu maxN können sich die Spieler aber auch pessimistisch verhalten und Annahme treffen, dass sich alle Gegenspieler zu einer Allianz gegen sich selbst haben. Die Annahme ist, dass sich die Gegner verbünden und vorhaben den stets zu minimieren:
Sommersemester 2009 Dr. Marco Block
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
können sich die Spieler aber auch pessimistisch verhalten und die treffen, dass sich alle Gegenspieler zu einer Allianz gegen sich selbst geschlossen
. Die Annahme ist, dass sich die Gegner verbünden und vorhaben den eigenen Nutzen
Selber Suchbaum wie vorhin. Eingetragen ist nur der Nutzenwert vom suchenden Spieler A
Dr. Marco Block-Berlitz 29
Literatur- und Abbildungsquellen
Block M., Bader M., Tapia E., Ramírez M., Gunnarsson K., Cuevas E., Zaldivar D., Rojas R.:
"Using Reinforcement Learning in Chess Engines
Research in Computing Science: Special Issue in Electronics and Biomedical Engineering,
Computer Science and Informatics, ISSN:1870-4069, Vol.35, pp.31
2008
Millington I.: „Artificial Intelligence for Games“, Morgan Kaufmann, Elsevier, 2006
Baur M.: „Lazy Evaluation“, Dezember 2008
http://www.mathematik.uni-ulm.de/~m_baur/pdf/lazy/lazy.pdf
[1]
[2]
[3]
Sommersemester 2009 Dr. Marco Block
http://www.mathematik.uni-ulm.de/~m_baur/pdf/lazy/lazy.pdf
Vielen Dank für die
Aufmerksamkeit ...
ProInformatik – Funktionale Programmierung
Freie Universität Berlin
E., Ramírez M., Gunnarsson K., Cuevas E., Zaldivar D., Rojas R.:
Using Reinforcement Learning in Chess Engines", CONCIBE SCIENCE 2008, In Journal
Research in Computing Science: Special Issue in Electronics and Biomedical Engineering,
4069, Vol.35, pp.31-40, Guadalajara/Mexico,
“, Morgan Kaufmann, Elsevier, 2006
ulm.de/~m_baur/pdf/lazy/lazy.pdf
Dr. Marco Block-Berlitz 30
ulm.de/~m_baur/pdf/lazy/lazy.pdf