Allard Kamphuisen Allard Kamphuisen Hado van Hasselt Hado van Hasselt Wilco Broeders Wilco Broeders
Jan 21, 2016
Allard Kamphuisen Allard Kamphuisen
Hado van HasseltHado van Hasselt
Wilco BroedersWilco Broeders
Inhoud presentatieInhoud presentatieWilco:• Korte uitleg spelregels• Othello voor beginners
Allard:• De gebruikte heuristieken• De representaties van de heuristieken• Het zoekalgoritme
Hado:• Ervaring als heuristiek• De voor en nadelen van een simpel lerend systeem
Othello spelregelsOthello spelregels
• 2 spelers zetten om en om een steen
• Stenen veranderen van kleur door insluiting
• Iedere zet minstens één steen insluiten
• Eindsituatie: als niet meer gezet kan worden
• Winnaar: degene met dan de meeste stenen
Maximum disc Maximum disc strategiestrategie
Verkeerde strategie, gebruikt door vele beginners, waarbij men probeert in één beurt zoveel mogelijk stenen om te draaien.
Stabiele stenenStabiele stenen
Stenen die op geen enkele manier kunnen worden veranderd, bijvoorbeeld de hoekstenen
MobiliteitMobiliteit
Een speler heeft een goede mobiliteit als hij een groot aantal mogelijke zetten tot zijn beschikking heeft.
GrenzenGrenzen
De set van stenen die naast lege vakken staan.
• De gebruikte heuristieken
• De representaties van de heuristieken
• Het zoekalgoritme
De gebruikte heuristiekenDe gebruikte heuristieken
• Het verschil van de stenen
• De potentiële mobiliteit
• De werkelijke mobiliteit
• De gewogen vakjes
4 gebruikte representaties om de 4 gebruikte representaties om de heuristieken te verwezenlijkenheuristieken te verwezenlijken
• Rep1: geeft de spelsituatie weer
• Rep2: levert de potentiële mobiliteit voor speler 1
• Rep3: levert de potentiële mobiliteit voor speler 2
• Rep4: houdt de gewogen vakjes bij
Representatie 1
00000000
00000000
00200000
00011000
00012000
00011100
00020000
00000000
werkelijke situatie Rep1 (0=leeg, 1=zwart, 2=wit)
Representatie 2
00000000
01110000
01210000
01122100
00022100
00122200
00121000
00111000
werkelijke situatie Rep2 (0=leeg en geen mogelijke zet, 1=potentiële zet, 2=bezet)
Door alle éénen van rep2 bij elkaar op te tellen, kan de potentiële mobiliteit van speler 1 worden berekend
Representatie 3
00000000
00000000
00211100
00122100
00122110
00122210
00121110
00000000
werkelijke situatie Rep3 (0=leeg en geen mogelijke zet, 1=potentiële zet, 2=bezet)
Door alle éénen van rep3 bij elkaar op te tellen, kan de potentiële mobiliteit van speler 2 worden berekend
Representatie 4
3000-100200200200200-1003000
-100-1000-100-100-100-100-1000-100
200-1000000-100200
200-1000000-100200
200-1000000-100200
200-1000000-100200
-100-1000-100-100-100-100-1000-100
3000-100200200200200-1003000Merk op:
• hoeken zijn erg positief (3000)
• vakjes omgrenzend aan de hoeken zijn negatief (-100 en -1000)
• randen zijn positief (200)
De waarden van rep4 zorgen voor een grote voorkeur voor de hoeken en randen, maar een afkeur voor de vakjes daar net omheen
SamenvattingSamenvatting
• Het stenen verschil wordt dus m.b.v. rep1 berekend, de potentiële mobiliteit voor beide spelers m.b.v. rep2 en rep3, en rep4 zorgt voor de gewogen vakjes.
Note: De werkelijke mobiliteit heeft geen aparte representatie nodig maar kan m.b.v. rep1 worden berekend.
Het zoekalgoritmeHet zoekalgoritme
Om een aantal zetten vooruit te kunnen kijken wordt er gebruik gemaakt van een minimax algoritme (met Alpha-Beta pruning) welke gebruik maakt van een zoekboom.
Onderaan de boom (bij de leaves) wordt een evaluatie van de situatie (van iedere specifieke leaf) uitgevoerd m.b.v de bovengenoemde heuristieken. Hier komt een waarde uit welke vervolgens omhoog wordt geminimaxt om zo de beste zet te bepalen.
Minimax voorbeeld (matrix)Minimax voorbeeld (matrix)
H
G
F
E
D
C
B
A
87654321
Codering van de tekstvakken
Minimax voorbeeld (boom)Minimax voorbeeld (boom)
ze t A 1 : -25 30 ... ze t G 7 : + 80
ze t B 2 : -25 30 ...
.. . ze t D 3 : -2 10
ze t F4 : -2 101. Zet vooruit
(speler 1: maximum)
2. Zetten vooruit (speler 2: minimum)
Huidige situatie
Evaluatie van spel -2530 +80 -210
situatie na 2e zet
Conclusie: F4 heeft de hoogste waarde, dus is waarschijnlijk de beste zet.
Een Andere Aanpak:
Een Lerend Systeem
In een data-bestandje, bv 1.txt:
“..+00+00+00..”
“..+00-01+00..”
+35 -6 +5 -2 +0 +0 +2 +59
-10 -23 -2 +0 +0 -1 -19 -2
+2 +0 +0 +0 +0 +0 +0 +3
-2 +0 +0 +0 +0 +0 +0 +1
+3 +0 +0 +0 +0 +0 +0 +2
-4 +0 +2 +0 +0 +0 +0 +3
-5 -29 -5 +0 -1 -2 -33 -2
+24 -12 -4 +10 -4 -3 +2 +16
Voorbeeld: 50ste Zet
+1020 -120 -10 +60 +60 -10 -120 +1020
-120 -330 -30 -40 -40 -30 -330 -120
-10 -30 +60 0 0 +60 -30 -10
+60 -40 0 0 0 0 -40 +60
+60 -40 0 0 0 0 -40 +60
-10 -30 +60 0 0 +60 -30 -10
-120 -330 -30 -40 -40 -30 -330 -120
+1020 -120 -10 +60 +60 -10 -120 +1020
De cumulatieve waardes per veld voor alle zetten:
Kan deze versie goed Othello spelen?
• Tegen ieder NIET lerend systeem wint dit systeem
• Tegen willekeur is het niet zo sterk
• Tegen mensen is het niet sterk
Oplossing problemen:Een systeem met Heuristieken EN een lerend systeem
Conclusie:
Ons programma (niet-lerend) kan redelijk spelen:
- Verslaat menselijke spelers
- Redelijk tegen goede progamma’s
- Denkt (gecompileerd) 4 a 5 plies diep.