Kunstmatige intelligentie
Programmeeropgave 3 van 2020 — Othello

Zie de video's: Othello: derde programmeeropgaveOthello: tips

van www.othello.nl van www.othello.nl van www.othello.nl De derde programmeeropgave (in het voorjaar van 2020) behorende bij het vak Kunstmatige intelligentie gaat over het twee-persoons spel Othello. Het is de bedoeling het minimax-algoritme, en ook het alpha-beta-algoritme, te implementeren, voor een geschikte evaluatie-functie.

Op een rechthoekig m bij n bord bevatten de niet-lege vakjes een witte of zwarte schijf. Standaard-Othello is op een 8-bij-8 bord. De beginstand is die zoals in het linker groene plaatje.
Als een speler aan de beurt is (ze spelen om en om) moet hij/zij een steen van de eigen kleur plaatsen, zodanig dat er "geslagen" wordt. Dat laatste betekent dat er één of meer stenen van de tegenstander nu direct ingesloten raken, horizontaal, verticaal of diagonaal; deze klappen allemaal om van kleur na het slaan (zie tweede en derde plaatje, na zetten op plek A). Als je bij Othello niet kunt, moet je passen; als beide spelers niet meer kunnen, stopt het spel, en wint degene met de meeste eigen stenen; remise is hier ook mogelijk, namelijk als beide spelers evenveel stenen hebben. Als het bord vol is, houdt het zeker op, maar het kan ook eerder zijn.

Er is voorbeeldcode [Let op: kleine fout ontdekt en verbeterd, zie aankondiging BlackBoard 10 april 2020] beschikbaar, waarin diverse functies zitten om het spel te spelen, en zelfs een randomspeler, een "gretige links-boven speler" en een Monte Carlo speler. Elke speler zit in een eigen file. De code stelt je in staat om twee verschillende spelers = programma's het spel tegen elkaar te laten spelen. Lees eerst het commentaar en bestudeer de meegeleverde spelers. Wijzig in de file othello.cc alleen daar waar in de code "beginTODO...eindeTODO" staat, om daarmee verschillende spelers aan te roepen. En excuses voor het gebruik van Nederlands en Engels door elkaar.

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. Denk er aan dat er soms gepast moet worden. Er moeten verschillende (member-)functies geschreven worden:

De eerder genoemde functies mogen natuurlijk worden aangevuld met meer geavanceerde technieken of heuristieken zoals: quiescence search, null-moves, transpositie-tabellen, etc. Ook stellen we interessante evaluatie-functies op prijs. Let ook op de executiesnelheid en rapporteer daarover.

Een paar opmerkingen:

Deadline: donderdag 23 april 2020, 11:00 uur.
In te leveren: e-mail met het verslag (alleen eigen C++-code in de appendix) en C++-code. Het verslag moet aan verschillende eisen voldoen.


Vragen en/of opmerkingen kunnen worden gestuurd naar: w.a.kosters@liacs.leidenuniv.nl.

4 maart 2020 — http://www.leidenuniv.liacs.nl/~kosterswa/AI/othello2020.html