Kunstmatige intelligentie
Programmeeropgave 3 van 2017 — Meer Clobber
De derde programmeeropgave (in het voorjaar van 2017) behorende bij het vak
Kunstmatige intelligentie gaat over het
spel Clobber, net als de eerste opgave.
Daar zijn de spelregels te vinden.
De voorbeeldcode is iets aangepast, zie hier.
Voor de huidige opgave kijken we voornamelijk naar de tweepersoons-versie, maar voel je vrij om meer dan twee spelers te onderzoeken.
Het is de bedoeling een zoekalgoritme te schrijven dat, gegeven een
spelconfiguratie, een zo goed mogelijke zet vindt. We gebruiken
hiervoor het minimax-algoritme,
met alpha-beta pruning.
Er moeten verschillende (member-)functies geschreven worden:
- int evaluatie (short speler) evalueert de huidige positie
voor speler (die niet noodzakelijk zelf aan de beurt is!)
- int minimax (short speler, int diepte, int & dezet)
rekent de minimax-waarde voor speler uit, tot en met diepte,
en levert een beste zet in bestezet
(als diepte = 0, moet het volledig random zijn,
bij diepte = 1 worden alleen de kinderen bekeken, etcetera)
- idem: alpha-beta
— wat dezelfde waardes zou moeten opleveren
- void slimmezet (int param) doet een slimme zet
met alpha-beta;
aangenomen mag worden dat er minstens één zet mogelijk is;
param is een parameter die (bijvoorbeeld) de diepte
aangeeft, zie verderop
- eigen functies naar believen
De eerder genoemde functies mogen worden aangevuld met
meer geavanceerde technieken of heuristieken zoals:
quiescence search, null-moves,
transpositie-tabellen, etc. Ook stellen we interessante
evaluatiefuncties op prijs (let op de executiesnelheid;
denk: 1 minuut voor 100 tweepersoons spelletjes random tegen alpha-beta met diepte 6, 6 bij 6 bord).
Een paar opmerkingen:
-
Beschrijf in het verslag duidelijk hoe de evaluatiefunctie werkt.
-
Maak met een experiment aannemelijk dat de geimplementeerde minimax
en alpha-beta dezelfde resultaten opleveren.
-
Onderzoek het verschil tussen het aantal door minimax en alpha-beta
bezochte knopen. Maak een grafiek die dit illustreert.
- Rapporteer over de verhouding tot andere spelers:
random, Monte-Carlo, verschillende zoekdieptes, programma's van collega's, ...
- Rapporteer in het bijzonder over een experiment waarin tegen een
programma van iemand anders wordt gespeeld.
Je mag in plaats hiervan ook tegen je eigen programma spelen, met een andere evaluatie-functie.
Deadline: donderdag 20 april 2017, 11:00 uur.
In te leveren: een geprint exemplaar van het verslag
(alleen eigen C++-code in de appendix)
tijdens
het college, en de C++-code van het programma naar onderstaand adres.
Het verslag moet aan verschillende
eisen voldoen.
Vragen en/of opmerkingen kunnen worden gestuurd naar:
w.a.kosters@liacs.leidenuniv.nl.
27 maart 2017 —
http://www.leidenuniv.liacs.nl/~kosterswa/AI/clobberop32017.html