source: liacs/ai/bridge/report.tex@ 84

Last change on this file since 84 was 2, checked in by Rick van der Zwet, 15 years ago

Initial import of data of old repository ('data') worth keeping (e.g. tracking
means of URL access statistics)

File size: 10.6 KB
RevLine 
[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
34Dit verslag gaat over de eerste programmeer-opgave van het vak
35kunstmatige intelligentie\cite{bridge-opdracht}. Welke als opdracht heeft het kaartspel
36\emph{simpleBridge} te onderzoeken. Tijdens dit onderzoek zal
37uitgezocht worden of met simpele regels te voorspellen is wat de uitslag
38wordt van een spelletje \emph{simpleBridge}.
39Als tweede wordt gekeken of het mogelijk is om met behulp van een aantal
40simpele regels een zeer eenvoudige reflex-agent te construeren die
41winnend speelt tegenover zijn willekeurige tegenhangers.
42
43\section{Uitleg probleem}
44
45\emph{simpleBridge} is zeer versimpelde versie bridge\footnote{Kijk voor
46de volledige spelregels van bridge op Bridge pagina van Wikipedia\cite{bridge-wiki}}
47met 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{
53Voor de duidelijkheid zijn in het verslag heten de spelers
54Noord, 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}
58Er wordt gespeeld met een normaal kaartspel, dit bestaat uit 52 unieke
59kaarten, welke een kleur hebben (Schoppen, Harten, Klaveren, Ruiten) en
60een van de 13 unieke oplopende waardes. Er zijn van elke kleur dus 13
61uniek oplopende kaarten in het spel. \cite{kaartspel-wiki}
62
63Elke speler krijgt willekeurig 13 kaarten toegewezen en heeft geen zicht
64op de kaarten van de andere spelers, nu wordt er willekeurig een team
65toegewezen die de \emph{troefkleur} mag kiezen en het aantal slagen dat
66ze denken te gaan halen, dit wordt het \emph{contract} genoemd. Tijdens
67deze keuze hebben ze zicht op alle kaarten van het team, maar niet op de
68kaarten van het andere team. Na het maken van het contract wordt er
69afgespeeld, hierbij is voor elke speler niet meer bekend wat de andere
70spelers voor kaarten in handen hebben.
71
72Het \emph{afspelen} gaat als volgt:
73
74Er wordt willekeurig een speler gekozen die een kaart naar keuze
75opgegooid. De rest van de spelers gooien om de beurt (met de klok mee) een
76kaart mee, welke van dezelfde kleur is als de eerste kaart die
77opgegooid is. Als deze niet in bezit is volstaat een het willekeurige
78andere kaart.
79
80Nadat alle vier de spelers een kaart hebben gespeeld wordt er gekeken
81welke kaart de winnaar is. De hoogst gespeelde troef wint en als deze
82niet present zijn dan is de hoogste kaart van de kleur die als eerste
83kaart gespeeld is de winnaar en heeft het team van de speler die deze
84kaart gespeeld heeft een \emph{slag}
85
86De speler van de winnende kaart is nu aan de beurt en mag een kaart
87naar keuze opgooien en wordt het spel weer hetzelfde afgespeeld als
88hierboven. Dit gaat door tot alle kaarten gespeeld zijn en er dus 13
89slagen verdeeld zijn tussen de 2 teams.
90
91Het aantal verwachte slagen (het contract) wordt nu vergeleken met het
92aantal daadwerkelijk gehaalde slagen. Als deze gelijk zijn levert dit 20
93punten op, elk slag te weinig kost 20 punten en elk slag teveel kost 10
94punten.
95
96Het meeste aantal punten zijn dus te halen door het beste te bieden en
97daarop het slimste te spelen. Als extra randvoorwaarde zal er geprobeerd
98worden zoveel mogelijk slagen te halen, dit komt echter niet terug in de
99punten aantallen.
100
101\section{Theorie}
102
103Als het kiezen van het bod en het afspelen volledig willekeurig gebeurt zal
104het contract zelden behaald worden door de grote hoeveelheid kaart
105mogelijkheden.
106
107Tijdens de keuze van het contract word gebruik gemaakt van de informatie
108die beschikbaar is en van de regels die gesteld zijn. Er wordt niet in
109het het `geheim' het spel afgespeeld om ervoor te zorgen dat een goed
110contract gemaakt wordt. Aan ditzelfde gedrag voordoet de kaartspeel
111agent. Dit gedrag is ook te zien bij een simpele reflex agent (zie
112Figuur~\ref{fig:agent}, bron figuur
113Wikipedia~\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{
121De simpele reflex agenten kan je vergelijken met een simpele actie en
122reactie mechanisme als het menselijke instinct. Zonder dat er bij
123nagedacht wordt over het doel/nut wordt er overgegaan tot actie na
124invoer van de buitenwereld}
125\label{fig:agent}
126\end{figure}
127
128\section{Aanpak}
129Voor zowel de contract agent en de afspeel agent zijn simpele regels
130verzonnen die respectievelijk het bieden of het afspelen proberen te
131voorspellen.
132
133\subsection{Contract agent}
134Troef levert de meeste slagen op, dus de kleur waar de meeste kaarten
135van beschikbaar zijn wordt troef en levert een slag op. Als volgende
136zijn de hoogste kaarten aan de beurt. Eerst wordt er bijvoorbeeld
137gekeken of de aas present is, dan de heer, enzovoort. Dit wordt
138gekeken per bepaalde kleur. Alle aansluitende hoge kaarten leveren ook
139een slag op.
140
141\subsection{Afspeel agent}
142De tactiek wordt om zo snel mogelijk de hoge kaarten uit het spel te
143krijgen. Dit wordt tewerkstelligd door op moment dat de speler uit mag
144komen de hoogste kaart uit zijn kaarten te spelen, bij gelijke waarden
145heeft een troef de voorkeur. Als er bijgespeeld moet worden (dus niet als
146eerste aan de beurt) dan de hoogste kaart van de kleur meespelen, of de
147laagste (troef)kaart bij het niet in handen hebben van de meespeel kleur.
148
149\section{Implementatie}
150
151Er is gekozen om als basis het aangeboden skelet
152programma\cite{bridge-skelet} te gebruiken welke in de programmeertaal
153C$\stackrel{++}{}$ versie 4.0.1 geschreven is.
154De structuur/werking van de code is niet veranderd, maar de opzet van
155bijvoorbeeld de uitvoer code wel.
156
157\section{Experimenten}
158Om de experimenten zo eerlijk mogelijk te laten verlopen is ervoor
159gekozen om de randvoorwaarden gelijk te houden. Onder de randvoorwaarden
160valt het aantal kaarten dat zichtbaar is tijdens contract keuze en het
161niet kunnen zijn van de kaarten op tafel. Verder zijn de opstellingen
16210000 keer gespeeld om uitersten te elimineren. De opstellingen speelden
163met dezelfde random begin seed om zo de kaarten die gegeven worden
164hetzelfde te laten zijn.
165
166Elke opstelling is in de code ingevoerd en daarna is de code opnieuw
167gecompileerd en uitgevoerd. Tijdelijke (object) bestanden zijn
168tussentijds weggegooid.
169
170De resultaten van de experimenten zijn te vinden in
171Tabel~\ref{tab:resultaten}.
172\begin{center}
173\begin{table}[h]
174\caption{Opstelling is gecodeerd als Noord,Oost,Zuid,West welke Random
175of Slim zijn. De contract agent is Random of Slim. Tekort, Correct en
176Teveel en Score zijn de uitkomsten na 10000 spel rondes, met random seed
177getal 1203969568. Hoe hoger de Score hoe beter}
178\begin{tabular}{l|l|l|l|l|l}
179Opstelling & 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}
195De score is enkel afhankelijk van het type contract agent gebruikt. De
196random agent levert een score van $-56760$ t/m $-545350$, de random
197afspeel agent een betere score dan de slimme agent. De slimme agent
198levert een score van $-339580$ t/m $-297840$ en ook hier geld weer hoe
199de random afspeel agent een betere score dan de slimme agent.
200
201Nader onderzoek aan de code wijst uit dat er twee factoren aangewezen
202kunnen worden die dit gedrag kunnen verklaren. Tijdens het maken van het
203contract wordt het paar volledig random gekozen en hiervan wordt de
204score bepaald. Het kan dus zijn dat tijdens de combinatie $S,R,S,R$
205waarbij de $NZ$ dus slim spelen een contract keuze $R$ toegewezen
206krijgen. Deze mogelijkheid is onderzocht door het slimme contract altijd
207voor paar $NZ$ te laten gelden en leverde de waardes op $6215,
2081549, 2236, -342270$. De score is zelfs nog slechter.
209
210Of de slimme speler is te `dom' of het slimme contract is te hoog
211ingeschat. Dit laatste is het meest aannemelijk want tijdens het bepalen
212van het contract word er geen rekening gehouden met verschillende
213feiten. Als speler $A$ een hoge kaart heeft van een bepaalde kleur en
214speler $B$ ook. Dan zullen ze tijdens het spelen van dit slag beiden hun
215hoge kaart tegelijk moeten opgooien en zal er maar een slag gehaald
216worden. Verder wordt een hoge troefkaart twee keer geteld als slag.
217Zowel in de troef ronde als in de hoge kaarten ronde.
218
219Verder heeft de slimme speelagent geen gebruikt gemaakt van het contract
220wat geboden is in het geval van de random contract agent en zijn er in
221bijna 40\% van de gevallen teveel slagen gehaald.
222
223Als laatste is de score niet geheel betrouwbaar, omdat elk gemaakt
224contract even zwaar telt, terwijl beide agenten van het meeste aantal
225slagen uitgaan. Een score factor bij een gehaald contract van $aantal
226gehaalde slagen * 10$ zou dit beter reflecteren.
227
228\begin{thebibliography}{XX}
229
230\bibitem{bridge-opdracht}
231W.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}
235W.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}
239Wikipedia, the free Encyclopedia, Bridge, latest version
240\url{http://nl.wikipedia.org/wiki/Bridge}
241
242\bibitem{kaartspel-wiki}
243Wikipedia, the free Encyclopedia, Speelkaart, as of 25 Februari 2008,
244\url{http://nl.wikipedia.org/wiki/Speelkaart}
245
246\bibitem{collegeboek}
247S.J. Russell en P. Norvig, Artificial Intelligence, A Modern Approach,
248Second ediion, Prentice Hall, 2003.
249\end{thebibliography}
250
251\section*{Appendix}
252Het 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}
Note: See TracBrowser for help on using the repository browser.