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}
|
---|