[2] | 1 | %
|
---|
| 2 | % $Id: report.tex 525 2008-03-18 15:38:34Z rick $
|
---|
| 3 | %
|
---|
| 4 |
|
---|
| 5 | \documentclass[12pt,a4paper]{article}
|
---|
| 6 |
|
---|
| 7 | \frenchspacing
|
---|
| 8 | \usepackage[english,dutch]{babel}
|
---|
| 9 | \selectlanguage{dutch}
|
---|
| 10 | \usepackage{graphicx}
|
---|
| 11 | \usepackage{url}
|
---|
| 12 | \usepackage{multicol}
|
---|
| 13 | \usepackage{fancybox}
|
---|
| 14 |
|
---|
| 15 | \author{Rick van der Zwet, Universiteit Leiden}
|
---|
| 16 | \title{Kunstmatige Intelligentie 2008 --- opdracht 1 \\
|
---|
| 17 | \large{simpleBridge}}
|
---|
| 18 | \author{Rick van der Zwet\\
|
---|
| 19 | \texttt{<hvdzwet@liacs.nl>}\\
|
---|
| 20 | \\
|
---|
| 21 | LIACS\\
|
---|
| 22 | Leiden University\\
|
---|
| 23 | Niels Bohrweg 1\\
|
---|
| 24 | 2333 CA Leiden\\
|
---|
| 25 | The Netherlands}
|
---|
| 26 | \date{\today}
|
---|
| 27 |
|
---|
| 28 | \begin{document}
|
---|
| 29 |
|
---|
| 30 | \maketitle
|
---|
| 31 |
|
---|
| 32 | \section{Inleiding}
|
---|
| 33 |
|
---|
| 34 | Dit verslag gaat over de eerste programmeer-opgave van het vak
|
---|
| 35 | kunstmatige intelligentie\cite{bridge-opdracht}. Welke als opdracht heeft het kaartspel
|
---|
| 36 | \emph{simpleBridge} te onderzoeken. Tijdens dit onderzoek zal
|
---|
| 37 | uitgezocht worden of met simpele regels te voorspellen is wat de uitslag
|
---|
| 38 | wordt van een spelletje \emph{simpleBridge}.
|
---|
| 39 | Als tweede wordt gekeken of het mogelijk is om met behulp van een aantal
|
---|
| 40 | simpele regels een zeer eenvoudige reflex-agent te construeren die
|
---|
| 41 | winnend speelt tegenover zijn willekeurige tegenhangers.
|
---|
| 42 |
|
---|
| 43 | \section{Uitleg probleem}
|
---|
| 44 |
|
---|
| 45 | \emph{simpleBridge} is zeer versimpelde versie bridge\footnote{Kijk voor
|
---|
| 46 | de volledige spelregels van bridge op Bridge pagina van Wikipedia\cite{bridge-wiki}}
|
---|
| 47 | met 4 spelers die in 2 teams tegen elkaar spelen.
|
---|
| 48 | \begin{figure}[!ht]
|
---|
| 49 | \begin{center}
|
---|
| 50 | \includegraphics[scale=1]{speelbord}
|
---|
| 51 | \end{center}
|
---|
| 52 | \caption{
|
---|
| 53 | Voor de duidelijkheid zijn in het verslag heten de spelers
|
---|
| 54 | Noord, Oost, Zuid en West. En speelt Noord samen met Zuid in team
|
---|
| 55 | \emph{NZ} en bevat team \emph{OW} de spelers Oost en West.
|
---|
| 56 | }
|
---|
| 57 | \end{figure}
|
---|
| 58 | Er wordt gespeeld met een normaal kaartspel, dit bestaat uit 52 unieke
|
---|
| 59 | kaarten, welke een kleur hebben (Schoppen, Harten, Klaveren, Ruiten) en
|
---|
| 60 | een van de 13 unieke oplopende waardes. Er zijn van elke kleur dus 13
|
---|
| 61 | uniek oplopende kaarten in het spel. \cite{kaartspel-wiki}
|
---|
| 62 |
|
---|
| 63 | Elke speler krijgt willekeurig 13 kaarten toegewezen en heeft geen zicht
|
---|
| 64 | op de kaarten van de andere spelers, nu wordt er willekeurig een team
|
---|
| 65 | toegewezen die de \emph{troefkleur} mag kiezen en het aantal slagen dat
|
---|
| 66 | ze denken te gaan halen, dit wordt het \emph{contract} genoemd. Tijdens
|
---|
| 67 | deze keuze hebben ze zicht op alle kaarten van het team, maar niet op de
|
---|
| 68 | kaarten van het andere team. Na het maken van het contract wordt er
|
---|
| 69 | afgespeeld, hierbij is voor elke speler niet meer bekend wat de andere
|
---|
| 70 | spelers voor kaarten in handen hebben.
|
---|
| 71 |
|
---|
| 72 | Het \emph{afspelen} gaat als volgt:
|
---|
| 73 |
|
---|
| 74 | Er wordt willekeurig een speler gekozen die een kaart naar keuze
|
---|
| 75 | opgegooid. De rest van de spelers gooien om de beurt (met de klok mee) een
|
---|
| 76 | kaart mee, welke van dezelfde kleur is als de eerste kaart die
|
---|
| 77 | opgegooid is. Als deze niet in bezit is volstaat een het willekeurige
|
---|
| 78 | andere kaart.
|
---|
| 79 |
|
---|
| 80 | Nadat alle vier de spelers een kaart hebben gespeeld wordt er gekeken
|
---|
| 81 | welke kaart de winnaar is. De hoogst gespeelde troef wint en als deze
|
---|
| 82 | niet present zijn dan is de hoogste kaart van de kleur die als eerste
|
---|
| 83 | kaart gespeeld is de winnaar en heeft het team van de speler die deze
|
---|
| 84 | kaart gespeeld heeft een \emph{slag}
|
---|
| 85 |
|
---|
| 86 | De speler van de winnende kaart is nu aan de beurt en mag een kaart
|
---|
| 87 | naar keuze opgooien en wordt het spel weer hetzelfde afgespeeld als
|
---|
| 88 | hierboven. Dit gaat door tot alle kaarten gespeeld zijn en er dus 13
|
---|
| 89 | slagen verdeeld zijn tussen de 2 teams.
|
---|
| 90 |
|
---|
| 91 | Het aantal verwachte slagen (het contract) wordt nu vergeleken met het
|
---|
| 92 | aantal daadwerkelijk gehaalde slagen. Als deze gelijk zijn levert dit 20
|
---|
| 93 | punten op, elk slag te weinig kost 20 punten en elk slag teveel kost 10
|
---|
| 94 | punten.
|
---|
| 95 |
|
---|
| 96 | Het meeste aantal punten zijn dus te halen door het beste te bieden en
|
---|
| 97 | daarop het slimste te spelen. Als extra randvoorwaarde zal er geprobeerd
|
---|
| 98 | worden zoveel mogelijk slagen te halen, dit komt echter niet terug in de
|
---|
| 99 | punten aantallen.
|
---|
| 100 |
|
---|
| 101 | \section{Theorie}
|
---|
| 102 |
|
---|
| 103 | Als het kiezen van het bod en het afspelen volledig willekeurig gebeurt zal
|
---|
| 104 | het contract zelden behaald worden door de grote hoeveelheid kaart
|
---|
| 105 | mogelijkheden.
|
---|
| 106 |
|
---|
| 107 | Tijdens de keuze van het contract word gebruik gemaakt van de informatie
|
---|
| 108 | die beschikbaar is en van de regels die gesteld zijn. Er wordt niet in
|
---|
| 109 | het het `geheim' het spel afgespeeld om ervoor te zorgen dat een goed
|
---|
| 110 | contract gemaakt wordt. Aan ditzelfde gedrag voordoet de kaartspeel
|
---|
| 111 | agent. Dit gedrag is ook te zien bij een simpele reflex agent (zie
|
---|
| 112 | Figuur~\ref{fig:agent}, bron figuur
|
---|
| 113 | Wikipedia~\footnote{\url{http://en.wikipedia.org/wiki/Image:IntelligentAgent-SimpleReflex.png}}).
|
---|
| 114 |
|
---|
| 115 |
|
---|
| 116 | \begin{figure}[!ht]
|
---|
| 117 | \begin{center}
|
---|
| 118 | \includegraphics[height=60mm]{simple-agent.eps}
|
---|
| 119 | \end{center}
|
---|
| 120 | \caption{
|
---|
| 121 | De simpele reflex agenten kan je vergelijken met een simpele actie en
|
---|
| 122 | reactie mechanisme als het menselijke instinct. Zonder dat er bij
|
---|
| 123 | nagedacht wordt over het doel/nut wordt er overgegaan tot actie na
|
---|
| 124 | invoer van de buitenwereld}
|
---|
| 125 | \label{fig:agent}
|
---|
| 126 | \end{figure}
|
---|
| 127 |
|
---|
| 128 | \section{Aanpak}
|
---|
| 129 | Voor zowel de contract agent en de afspeel agent zijn simpele regels
|
---|
| 130 | verzonnen die respectievelijk het bieden of het afspelen proberen te
|
---|
| 131 | voorspellen.
|
---|
| 132 |
|
---|
| 133 | \subsection{Contract agent}
|
---|
| 134 | Troef levert de meeste slagen op, dus de kleur waar de meeste kaarten
|
---|
| 135 | van beschikbaar zijn wordt troef en levert een slag op. Als volgende
|
---|
| 136 | zijn de hoogste kaarten aan de beurt. Eerst wordt er bijvoorbeeld
|
---|
| 137 | gekeken of de aas present is, dan de heer, enzovoort. Dit wordt
|
---|
| 138 | gekeken per bepaalde kleur. Alle aansluitende hoge kaarten leveren ook
|
---|
| 139 | een slag op.
|
---|
| 140 |
|
---|
| 141 | \subsection{Afspeel agent}
|
---|
| 142 | De tactiek wordt om zo snel mogelijk de hoge kaarten uit het spel te
|
---|
| 143 | krijgen. Dit wordt tewerkstelligd door op moment dat de speler uit mag
|
---|
| 144 | komen de hoogste kaart uit zijn kaarten te spelen, bij gelijke waarden
|
---|
| 145 | heeft een troef de voorkeur. Als er bijgespeeld moet worden (dus niet als
|
---|
| 146 | eerste aan de beurt) dan de hoogste kaart van de kleur meespelen, of de
|
---|
| 147 | laagste (troef)kaart bij het niet in handen hebben van de meespeel kleur.
|
---|
| 148 |
|
---|
| 149 | \section{Implementatie}
|
---|
| 150 |
|
---|
| 151 | Er is gekozen om als basis het aangeboden skelet
|
---|
| 152 | programma\cite{bridge-skelet} te gebruiken welke in de programmeertaal
|
---|
| 153 | C$\stackrel{++}{}$ versie 4.0.1 geschreven is.
|
---|
| 154 | De structuur/werking van de code is niet veranderd, maar de opzet van
|
---|
| 155 | bijvoorbeeld de uitvoer code wel.
|
---|
| 156 |
|
---|
| 157 | \section{Experimenten}
|
---|
| 158 | Om de experimenten zo eerlijk mogelijk te laten verlopen is ervoor
|
---|
| 159 | gekozen om de randvoorwaarden gelijk te houden. Onder de randvoorwaarden
|
---|
| 160 | valt het aantal kaarten dat zichtbaar is tijdens contract keuze en het
|
---|
| 161 | niet kunnen zijn van de kaarten op tafel. Verder zijn de opstellingen
|
---|
| 162 | 10000 keer gespeeld om uitersten te elimineren. De opstellingen speelden
|
---|
| 163 | met dezelfde random begin seed om zo de kaarten die gegeven worden
|
---|
| 164 | hetzelfde te laten zijn.
|
---|
| 165 |
|
---|
| 166 | Elke opstelling is in de code ingevoerd en daarna is de code opnieuw
|
---|
| 167 | gecompileerd en uitgevoerd. Tijdelijke (object) bestanden zijn
|
---|
| 168 | tussentijds weggegooid.
|
---|
| 169 |
|
---|
| 170 | De resultaten van de experimenten zijn te vinden in
|
---|
| 171 | Tabel~\ref{tab:resultaten}.
|
---|
| 172 | \begin{center}
|
---|
| 173 | \begin{table}[h]
|
---|
| 174 | \caption{Opstelling is gecodeerd als Noord,Oost,Zuid,West welke Random
|
---|
| 175 | of Slim zijn. De contract agent is Random of Slim. Tekort, Correct en
|
---|
| 176 | Teveel en Score zijn de uitkomsten na 10000 spel rondes, met random seed
|
---|
| 177 | getal 1203969568. Hoe hoger de Score hoe beter}
|
---|
| 178 | \begin{tabular}{l|l|l|l|l|l}
|
---|
| 179 | Opstelling & Contract agent & Tekort & Correct & Teveel & Score\\
|
---|
| 180 | \hline
|
---|
| 181 | $R,R,R,R$ & $R$ & $5020$ & $793 $ & $4187$ & $-545350$ \\
|
---|
| 182 | $S,R,R,R$ & $R$ & $5072$ & $741 $ & $4187$ & $-554260$ \\
|
---|
| 183 | $S,R,S,R$ & $R$ & $5020$ & $770 $ & $4210$ & $-551230$ \\
|
---|
| 184 | $S,S,S,S$ & $R$ & $5039$ & $756 $ & $4205$ & $-567600$ \\
|
---|
| 185 | $R,R,R,R$ & $S$ & $6075$ & $1751$ & $2174$ & $-297840$ \\
|
---|
| 186 | $S,R,R,R$ & $S$ & $6127$ & $1686$ & $2187$ & $-307010$ \\
|
---|
| 187 | $S,R,S,R$ & $S$ & $6031$ & $1651$ & $2318$ & $-319270$ \\
|
---|
| 188 | $S,S,S,S$ & $S$ & $5889$ & $1497$ & $2614$ & $-339580$
|
---|
| 189 | \end{tabular}
|
---|
| 190 | \label{tab:resultaten}
|
---|
| 191 | \end{table}
|
---|
| 192 | \end{center}
|
---|
| 193 |
|
---|
| 194 | \section{Conclusie}
|
---|
| 195 | De score is enkel afhankelijk van het type contract agent gebruikt. De
|
---|
| 196 | random agent levert een score van $-56760$ t/m $-545350$, de random
|
---|
| 197 | afspeel agent een betere score dan de slimme agent. De slimme agent
|
---|
| 198 | levert een score van $-339580$ t/m $-297840$ en ook hier geld weer hoe
|
---|
| 199 | de random afspeel agent een betere score dan de slimme agent.
|
---|
| 200 |
|
---|
| 201 | Nader onderzoek aan de code wijst uit dat er twee factoren aangewezen
|
---|
| 202 | kunnen worden die dit gedrag kunnen verklaren. Tijdens het maken van het
|
---|
| 203 | contract wordt het paar volledig random gekozen en hiervan wordt de
|
---|
| 204 | score bepaald. Het kan dus zijn dat tijdens de combinatie $S,R,S,R$
|
---|
| 205 | waarbij de $NZ$ dus slim spelen een contract keuze $R$ toegewezen
|
---|
| 206 | krijgen. Deze mogelijkheid is onderzocht door het slimme contract altijd
|
---|
| 207 | voor paar $NZ$ te laten gelden en leverde de waardes op $6215,
|
---|
| 208 | 1549, 2236, -342270$. De score is zelfs nog slechter.
|
---|
| 209 |
|
---|
| 210 | Of de slimme speler is te `dom' of het slimme contract is te hoog
|
---|
| 211 | ingeschat. Dit laatste is het meest aannemelijk want tijdens het bepalen
|
---|
| 212 | van het contract word er geen rekening gehouden met verschillende
|
---|
| 213 | feiten. Als speler $A$ een hoge kaart heeft van een bepaalde kleur en
|
---|
| 214 | speler $B$ ook. Dan zullen ze tijdens het spelen van dit slag beiden hun
|
---|
| 215 | hoge kaart tegelijk moeten opgooien en zal er maar een slag gehaald
|
---|
| 216 | worden. Verder wordt een hoge troefkaart twee keer geteld als slag.
|
---|
| 217 | Zowel in de troef ronde als in de hoge kaarten ronde.
|
---|
| 218 |
|
---|
| 219 | Verder heeft de slimme speelagent geen gebruikt gemaakt van het contract
|
---|
| 220 | wat geboden is in het geval van de random contract agent en zijn er in
|
---|
| 221 | bijna 40\% van de gevallen teveel slagen gehaald.
|
---|
| 222 |
|
---|
| 223 | Als laatste is de score niet geheel betrouwbaar, omdat elk gemaakt
|
---|
| 224 | contract even zwaar telt, terwijl beide agenten van het meeste aantal
|
---|
| 225 | slagen uitgaan. Een score factor bij een gehaald contract van $aantal
|
---|
| 226 | gehaalde slagen * 10$ zou dit beter reflecteren.
|
---|
| 227 |
|
---|
| 228 | \begin{thebibliography}{XX}
|
---|
| 229 |
|
---|
| 230 | \bibitem{bridge-opdracht}
|
---|
| 231 | W.A.~Kosters, Kunstmatige intelligentie Programmeer-opgave 1 van 2008
|
---|
| 232 | -- Bridge, \url{http://www.liacs.nl/~kosters/AI/bridge.html}
|
---|
| 233 |
|
---|
| 234 | \bibitem{bridge-skelet}
|
---|
| 235 | W.A.~Kosters, Kunstmatige intelligentie Programmeer-opgave 1 van 2008
|
---|
| 236 | -- Bridge -- skelet programma, \url{http://www.liacs.nl/~kosters/AI/bridge.cc}
|
---|
| 237 |
|
---|
| 238 | \bibitem{bridge-wiki}
|
---|
| 239 | Wikipedia, the free Encyclopedia, Bridge, latest version
|
---|
| 240 | \url{http://nl.wikipedia.org/wiki/Bridge}
|
---|
| 241 |
|
---|
| 242 | \bibitem{kaartspel-wiki}
|
---|
| 243 | Wikipedia, the free Encyclopedia, Speelkaart, as of 25 Februari 2008,
|
---|
| 244 | \url{http://nl.wikipedia.org/wiki/Speelkaart}
|
---|
| 245 |
|
---|
| 246 | \bibitem{collegeboek}
|
---|
| 247 | S.J. Russell en P. Norvig, Artificial Intelligence, A Modern Approach,
|
---|
| 248 | Second ediion, Prentice Hall, 2003.
|
---|
| 249 | \end{thebibliography}
|
---|
| 250 |
|
---|
| 251 | \section*{Appendix}
|
---|
| 252 | Het programma gebruikt voor de experimenten ziet er als volgt uit:
|
---|
| 253 | \tiny
|
---|
| 254 | \advance\textwidth by 8cm
|
---|
| 255 | \advance\oddsidemargin by -3cm
|
---|
| 256 | \advance\evensidemargin by -3cm
|
---|
| 257 | \advance\topmargin by -2cm
|
---|
| 258 | \advance\textheight by 2cm
|
---|
| 259 | \advance\footskip by -2cm
|
---|
| 260 | \marginparwidth 0cm
|
---|
| 261 | \twocolumn
|
---|
| 262 | %c++ input preformatted with `source-highlight -n -f latex bridge.cc`
|
---|
| 263 | \include{bridge.cc}
|
---|
| 264 | \onecolumn
|
---|
| 265 | \end{document}
|
---|