Kunstmatige intelligentie
Programmeeropgave 1 van 2015 — Tetris

Tetris De eerste programmeeropgave (in het voorjaar van 2015) 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. Voor meer informatie over Tetris: hier, daar (in PDF) en Tetris (wiki).

Gebruik het C++-voorbeeldprogramma van de website. Dit genereert random Tetris-stukken, die naar beneden vallen. Geheel gevulde regels verdwijnen. Je algoritme moet het zolang mogelijk hier tegen volhouden — als er (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). 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 grootte 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 gnuplot om voor het verslag enkele grafieken te plotten.
De resultaten moet je onder andere weergeven in een grafiek. je kan daarbij gebruik maken van gnuplot. 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"
     set terminal jpeg
     # of: set terminal postscript eps enhanced color
     set output "file.jpg"
     # en dan hier: set output "file.eps"
     plot "mijnfile.txt" using 1:2 with lines notitle
en roep deze binnen gnuplot aan met load "plot.gpi".
Op internet staat alles en meer over gnuplot, bijvoorbeeld hier of [wie heeft deze geweldige site weggehaald?] daar (Wayback machine).
Voor de MS Office liefhebbers: je kunt ook een grafiek maken in Excel en dan exporteren als eps en die toevoegen aan je paper.
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.
Kijk verder in de LaTeX-handleiding (Hoofdstuk 4.1) hoe je PostScript-files in LaTeX kunt importeren.

Deadline: dinsdag 3 maart 2015, 11:00 uur.
In te leveren: een geprint exemplaar van het verslag tijdens het college, en de C++-code van het programma naar onderstaand adres. Het verslag moet aan verschillende eisen voldoen. Probeer in het verslag ook kort een relatie te leggen met de theorie zoals die behandeld is 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: w.a.kosters@liacs.leidenuniv.nl.

21 januari 2015 — http://www.liacs.leidenuniv.nl/~kosterswa/AI/teet2015.html