Kunstmatige intelligentie
Programmeeropgave 1 van 2024 — Tetris

Tetris De eerste programmeeropgave (in het voorjaar van 2024) behorende bij het vak Kunstmatige intelligentie gaat over het eenpersoons spel Tetris. Het is de bedoeling een eenvoudig programma te schrijven dat dit spel speelt. Er mag hierbij maximaal één zet vooruit gekeken worden. (Dus: wat gebeurt er als het huidige stuk op verschillende manieren valt?) Het is niet de bedoeling een (zelf)lerend programma te maken. Wat wel de bedoeling is: enerzijds zien hoeveel moeite het kost met menselijke regels beter te gaan spelen, anderzijds verbaasd erover zijn dat een programmai met eenvoudige Monte Carlo techniek, dat niets begrijpt, het toch heel goed kan.
Voor meer informatie over Tetris: hier, daar (in PDF) en Tetris (wiki).

Gebruik het C++-voorbeeldprogramma van de website, dat een random spelletje Tetris speelt. Dit programma is geschreven in eenvoudig C++, zoals behandeld bij het college Programmeermethoden. Daar staan ook korte video's, bijvoorbeeld over het installeren van een C++-compiler: Code::Blocks OF Mac (zie ook hier) OF Linux; aanbevolen: Windows met Windows Subsystem for Linux (WSL2). En een stoomcursus C++ met bijbehorende sheets.

Het programma genereert random Tetris-stukken, die naar beneden vallen in een put. Geheel gevulde regels verdwijnen. Je algoritme moet het zolang mogelijk hier tegen volhouden — als er namelijk (gedeeltes van) stukken boven de rand van de "put" uitsteken stopt het proces. Het enige wat het programma moet doen is het kiezen van 1. de oriëntatie van het huidige stuk en 2. de kolommen waarin het stuk valt (positie). In het programma gebeurt dit met één getal dat oriëntatie en positie codeert. Er mag — in tegenstelling tot bij het "echte" spel — daarna niet meer geroteerd of geschoven worden. Informatie over het volgende stuk mag niet gebruikt worden. Er mag hooguit één zet vooruit gekeken worden, dat wil zeggen: je mag kijken wat er gebeurt als je het huidige stuk op alle mogelijke manieren zou laten vallen.

Gebruik nu een drietal AI-componenten:

Laat deze drie spelers spelen, en rapporteer de bevindingen. Kortom: maak diverse simulaties. Varieer onder meer de hoogte en breedte van het bord, bijvoorbeeld tussen 5 en 20, en toon de resultaten in een grafiek. Er mag vrijelijk —met bronvermelding— gebruik gemaakt worden van de voorbeeld-code. Voeg zeker niet meer dan 200 regels toe!
Er wordt niet gevraagd om een programma dat aan alle software engineering standaards voldoet. Houd het programma dus eenvoudig — maar wel netjes!

Gebruik bijvoorbeeld gnuplot om voor het verslag enkele grafieken te plotten. Een ander plot-programma mag ook.
Je kunt gnuplot onder Windows eenvoudig installeren van hier. Binnen gnuplot moet je misschien het "loadpath" goed zetten, met zoiets als gunplot> set loadpath "C:\\JeMap\\" om de files die je wilt plotten te kunnen vinden.
In Ubuntu / WSL2 is het ook eenvoudig te installeren. Op internet staat alles en meer over gnuplot, bijvoorbeeld via de Wayback machine.

De resultaten van je experimenten moet je onder andere weergeven in een grafiek. Tips: maak een plot-file plot.gpi met daarin bijvoorbeeld
     # plot-file voor gnuplot
     set xrange [0:10]
     set yrange [17:42]
     set xlabel "iets"
     set ylabel "iets anders"
     plot "mijnfile.txt" using 1:2 with lines notitle
en roep deze binnen gnuplot aan met load "plot.gpi". En dan het resulterende PDF-plaatje in je LaTeX-file binnenhalen.
Als je een file met resultaten hebt (zeg iets.uit; twee getallen per regel):
     1 24
     2 31
     3 56
     4 7

kun je deze eenvoudig met gnuplot in een grafiek printen met plot "iets.uit" with lines.

Deadline: woensdag 28 februari 2024, 13:15 uur.
In te leveren per ";team" (tweetal, eventueel eental): een geprint exemplaar van het verslag (alleen eigen C++-code in de appendix) tijdens het college, en de C++-code van het programma via Brightspace => Assignments; maak eerst een "Group". Het verslag moet aan verschillende eisen voldoen. Geef, zoals gezegd, in de appendix van het verslag alleen de wijzigingen / aanvullingen op de bestaande voorbeeld-code. Probeer ook kort een relatie te leggen met de theorie zoals die behandeld wordt tijdens de colleges.

Er is een klein skelet voor de verslagen: verslag.tex, dat deze PDF-versie op kan leveren. Zie ook diverse opmerkingen.


Vragen en/of opmerkingen kunnen worden gestuurd naar: aicollege@liacs.leidenuniv.nl.

5 februari 2024 — http://www.liacs.leidenuniv.nl/~kosterswa/AI/teet2024.html