source: liacs/ai/graaf/report.tex@ 291

Last change on this file since 291 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)

  • Property svn:executable set to *
File size: 13.9 KB
RevLine 
[2]1%
2% $Id: report.tex 614 2008-05-14 11:58:06Z tsteenbe $
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\usepackage{amssymb,amsmath}
15\parindent0ex
16
17\author{Rick van der Zwet & Thomas Steenbergen, Universiteit Leiden}
18\title{Kunstmatige Intelligentie 2008 --- opdracht 4 \\
19\large{Genetische algoritmen}}
20\author{Rick van der Zwet~~~~~Thomas Steenbergen \\
21 \texttt{hvdzwet@liacs.nl}~~~~\texttt{tsteenbe@liacs.nl}\\
22 \\
23 LIACS\\
24 Leiden University\\
25 Niels Bohrweg 1\\
26 2333 CA Leiden\\
27 The Netherlands}
28\date{\today}
29
30\begin{document}
31
32\maketitle
33
34\section{Inleiding}
35Dit verslag gaat over de vierde opdracht~\cite{assignment} voor het
36vak Kunstmatige Intelligentie~\cite{course}, welke over genetische
37algoritmen gaat als besproken in het collegeboek~\cite{aibook}.
38Een \emph{Genische Algoritme} is een zoek techniek dat gebruikt maakt
39van Darwin's evolutietheorie~\cite{darwin} om complexe problemen op te
40lossen. Darwin's theorie stelt dat ontwikkeling van elke soort levend
41organisme op aarde word bepaald door natuurlijke selectie. Diegenen die
42zich het best aanpassen aan hun omgeving en daardoor overleven zullen
43een groter aandeel krijgen in genetische variatie van een populatie,
44simpel gezegd voor elke organisme geldt 'surival of the fittest'. In
45het genetische algoritme van deze opdracht wordt dit mechnisme gebruikt
46om vanuit een populatie van mogelijke probleem oplossingen uiteindelijk
47te evolueren naar een correct antwoord.
48
49\section{Probleem}
50Gegeven een graaf, schrijf een genetisch algoritme dat in een
51coordinatenstelsel \emph{X, Y} de knopen van deze graaf zo plaats dat er
52zo min mogelijke kruisende takken zijn en zodat de schaal tussen de
53knopen zo goed mogelijk behouden blijft.
54
55\begin{table}
56\begin{center}
57\begin{tabular}{c c c c}
58 4 & & & \\
59 0 & 8 & 0 & 3 \\
60 8 & 0 & 2 & 5 \\
61 0 & 2 & 0 & 0 \\
62 3 & 5 & 0 & 0 \\
63\end{tabular}
64\end{center}
65\caption{Voorbeeld van input graaf in adjacency-matrix representatie
66\label{tab:example-graph}}
67\end{table}
68
69\noindent
70Bovenstaand Tabel~\ref{tab:example-graph} bevat een eenvoudige representie van
71een graaf. De eerste regel heeft het aantal knopen dat de graaf heeft,
72in dit geval $4$.
73De adjacency-matrix er onder geeft aan of er een tak tussen de knoop $i$
74en $j$ zit en wat hiervan de lengte is. $0$ betekend geen tak. In de
75$i$-de rij / $j$-de kolom staat dat er dan een tak tussen knopen $i$ en
76$j$ is met een afstand gelijk aan het getal.
77Tevens is er gegeven dat de graaf geen lussen bevat en dat alle
78afstanden tussen de knopen positieve gehele getallen zijn.
79
80\section{Theorie}
81%XXX: Wiskundige uitleg genetische algoritmen
82% -> zoveel wiskunde komt er ook weer niet bij kijken
83Een genetisch algoritme is gebaseerd op de evolutie theorie en gebruikt
84natuurlijke selectie om optimalisatie- en zoekproblemen op te lossen.
85Een genetisch algoritme doorloopt de volgende stappen generatie op generatie
86om tot een oplossing te komen of totdat het een stopconditie heeft bereikt:
87
88\subsection{Initialisatie}
89De eerste stap in elk genetisch algoritme is om een ouder generatie te
90cre\"{e}eren, welke uit een voorafgesproken grootte bestaat.
91Deze generatie bestaat in de meeste implementaties uit sets van
92willekeurige getallen waarbij elke set een mogelijke oplossing voor het
93probleem bevat.
94
95\subsection{Selectie}
96Voor elk item uit de ouder generatie wordt met behulp van een
97\emph{fitnessfunctie} bepaald hoeveel deze ouder afwijkt van de eisen
98die we aan de probleemoplossing hebben gesteld. Deze fitnessfunctie is
99te zien als maatstaf van de kwaliteit. Vervolgens worden de twee beste
100ouders geselecteerd en deze gaan na kruising of mutatie door naar
101de volgende generatie.
102
103\subsection{Kruising}
104De twee ouders worden in deze kruising of ook wel \emph{crossover} stap
105gerecombineerd zodat er twee unieke kinderen uit ontstaan. Hiervoor zijn
106verschillende crossover methodes beschikbaar, onder andere
107\emph{single-point} of \emph{two-point} of \emph{uniform} kruising
108gebruiken. Bij \emph{single-point} of \emph{two-point} wordt elke ouder
109op respectievelijk \'{e}\'{e}n of twee plaatsen opgesplist en daarna
110worden de delen zo hergecombioneerd dat er twee nieuwe kinderen ontstaan
111met dezelfde lengte als de ouders. Bij \emph{uniform} crossover wordt
112er per element in \'{e}\'{e}n van de twee ouders met een bepaalde kans
113bekeken of dit element met het corresponderende element in de andere
114ouder verwisseld dient te worden. Kruising zorgt voor meer spreiding in
115de ouder generatie, positieve eigenschappen van verschillende ouders
116komen bij elkaar.
117
118\subsection{Mutatie}
119De kinderen die ontstaan zijn uit de kruising worden gemuteerd om de diversiteit
120van de kinderen te bevorderen. De waarde van elk element in een ouder wordt met
121een bepaald kans veranderd naar een willekeurige waarde. Om bepaalde
122positieve eigenschappen die misschien nog niet in de ouder generatie
123zaten toe te voegen aan de generatie wordt mutatie toegepast.
124
125\subsection{Stopconditie}
126In tegenstelling tot evoluatie in de natuur die oneindig voortduurt dienen bij
127genetische algoritmen het eveolutie process op een gegeven moment te stoppen om
128conclusies te kunnen trekken.
129Het is een goed moment om te stoppen als de fitness waarde gedurende een lange
130periode gelijk blijft of langzaam naar een bepaalde waarde toe convergeerd.
131Het simpelweg stoppen van de berekening na een vooraf vastgesteld aantal
132generaties is een andere stopconditie die veel wordt gebruikt vanwege
133praktische redenen, bijvoorbeeld als men een beperkte rekentijd heeft op een
134supercomputer.
135
136
137\section{Aanpak}
138%XXX: Welke keuzes zijn genomen en met welke reden, wat is de
139%achterliggende gedachte
140Er is gekozen gebruik te maken van het voorbeeld implementatie raamwerk gegeven
141in de sheet\cite{aisheet} tijdens het college kunstmatige
142intelligentie welke een pseudo beschrijving geeft voor het programmeren
143van een genetisch algoritme.
144\pagebreak
145\begin{verbatim}
146Initialiseer populatie
147Evalueer populatie
148while not klaar do
149 Selecteer ouders
150 Genereer met crossover kinderen (recombineer)
151 Muteer kinderen
152 Evalueer kinderen
153 Bepaal nieuwe populatie
154return beste element uit populatie
155\end{verbatim}
156\noindent
157Er is gekozen om te beginnen met populatie van een vooraf gedefineerde
158grootte, deze wordt tijdens de initialisatie gevuld met grafen met
159random gekozen punten.
160
161De evaluatie van de populatie wordt gedaan met behulp van een fitness
162functie, welke de fitheid van elke graaf berekend aan de hand van twee criteria;
163het aantal kriuisende takken en de lengte van de takken ten opzichte van
164de invoer adjacency-matrix.
165Om het aantal kruisende takken te bepalen dienen we de snijpunten tussen elke
166bestaande tak in de adjency-matrix en alle andere takken uit te
167rekenen, dit wordt gedaan door de lijn vergelijkingen op te lossen en
168daarna te controleren of de gevonden oplossing in het vlak ligt welke
169bekeken wordt. Als voorbeeld implementatie is het topcoder
170artikel~\cite{line-intersect} gebruikt, welke in de opdracht als
171referentie wordt gemeld.
172
173Voor het selecteren van de ouders is \emph{roulettewheel} selectie een
174zeer geschikte methode, welke als eigenschap heeft dat een element dat
175goed is meer kans heeft op gekozen te worden, omdat het een groter deel
176van het `wiel' zal beslaan.
177
178Voor de creatie van de nieuwe populatie wordt \emph{steady state}
179gebruikt, dit houdt in dat steeds de beste van de ouders en de kinderen
180doorgaan naar de volgende ronde.
181
182
183
184\section{Implementatie}
185%XXX: Versie nummers en eventuele hulptalen
186Het genetisch algoritme is geschreven in C$\stackrel{++}{}$, gebruik
187makend van struct op een instantie van een graaf te representeren en
188dynamische arrays.
189
190Om de executie-snelheid van het genetisch algoritme te verhogen is het
191domein waarin de random punten gekozen kunnen worden te verminderen tot
192\emph{aantal knopen} x \emph{grootst gevonden lengte van een tak} mits
193dit een domein oplevert kleiner dan 1000 x 1000.
194
195\section{Experimenten}
196Tijdens de experimenten wordt er een random nummer generatie gebruikt,
197welke het onmogelijk maakt waardes van experimenten te vergelijken. Door
198een random initalisatie seed van $0$ te gebruiken kan in elke run
199dezelfde random nummers gebruikt worden om in elke run dezelfde random
200waardes te laten spelen. Er zijn 3 typen variaties in de parameters van
201het genetisch algoritmes gemodificeerd om te onderzoeken wat deze voor
202invloed hebben op de kwaliteit van de grafiek. Verder is er gebruik
203gemaakt van een special typen grafiek. De cirkel grafiek, welke slechts
204een domein heeft van 30 x 30 en 10 nodes grafiek met een domein van
205200 x 200.
206Als eerste de de loop duur gevarieerd en de tijd gemeten hoe lang het
207programma uitvoerd, welke de resultaten in tabel~\ref{tab:loops}
208oplevert.
209
210\begin{table}
211\begin{tabular}{c|c|c|c}
212Loops $10^x$ & fitness cirkel & fitness 10 nodes \\
213\hline
2144 & 17 & 260 \\
2155 & 2 & 260 \\
2166 & 2 & 146 \\
2177 & 2 & 118 \\
218\end{tabular}
219\caption{Experimenten met verschillende loop groottes \label{tab:loops}}
220\end{table}
221
222Om experimenten snel te laten verlopen is gekozen om de rest van de
223experimenten met groottes $10^6$ uit te voeren. Er wordt gebruik gemaakt
224van 2 fitness functies in het GA algoritme. De eerste is op basis van
225afstandverschillen tussen de nodes, de tweede rekend het aantal
226snijpunten uit. Om te kijken welke resultaten het oplevert als we de
227fitness getallen in verschillende houdingen bij elkaar optellen, is de
228code telkens aangepast en opnieuw gecompileerd. De resultaten hiervan
229staan in tabel~\ref{tab:verhoudingen}.
230\begin{table}
231\begin{tabular}{c|c|c|c}
232gewicht snijpunt & gewicht afstand & fitness cirkel & fitness 10 nodes \\
233\hline
2341 & 1 & 2/0/2 & 18/128/146 \\
2351 & 0 & 26/0/0 & 213/50/50 \\
2361 & 2 & 0/15/15 & 64/117/245 \\
2371 & 10 & 0/26/26 & 17/193/363 \\
2382 & 1 & 0/0/0 & 66/77/214 \\
23910 & 1 & 0/0/0 & 159/54/699 \\
240\end{tabular}
241\caption{Experimenten met verschillende fitness berekeningen fitness
242weergegeven als fitness intersection/distance/overall
243\label{tab:verhoudingen}}
244\end{table}
245
246\begin{table}
247\begin{tabular}{c|c|c}
248$MUT\_LEVEL$ & fitness cirkel & fitness 10 nodes \\
249\hline
250 1 & 14/16/30 & 213/97/310 \\
25110 & 0/4/4 & 79/114/193 \\
25225 & 5/7/12 & 59/108/167 \\
25350 & 0/2/2 & 18/128/146 \\
25475 & 13/9/22 & 25/131/156 \\
25590 & 10/8/18 & 29/112/141 \\
25699 & 0/0/0 & 23/116/139 \\
257\end{tabular}
258\caption{Experimenten met verschillende mutatie niveaus weergegeven als
259fitness intersection/distance/overall \label{tab:mutaties}}
260\end{table}
261
262Het derde experiment veranderd de mutatie snelheid van het algoritme,
263dit is gedaan door de $MUT\_LEVEL$ aan te passen. \\De resultaten hiervan
264zijn te vinden in tabel~\ref{tab:mutaties}.
265
266Voor de visualisatie zijn de programma's graphviz~\cite{graphviz} en
267imagemagick~\cite{imagemagick} gebruikt. Graphviz heeft door middel
268van het subprogramma $neato$ een ingebouwd algoritme om het beste plaatje
269te plotten en kan tevens `dom' gemaakt worden met de vlag $-n2$ zodat onze
270uitvoer geplot kan worden. \\
271Imagemagick zorgt voor het samenvoegen van de
272plaatjes en toevoegen van de labels. In figuur~\ref{fig:beste-cirkel} is de
273beste uitvoer van $input-circular.txt$ geplot.
274Figuur~\ref{fig:beste-10nodes} heeft de beste uitvoer van $input10.txt$.
275
276\begin{center}
277\begin{figure}
278\includegraphics[width=\textwidth]{beste-cirkel.ps}
279\caption{Beste uitvoer $input-circular.txt$, $fitness=0$}
280\label{fig:beste-cirkel}
281\end{figure}
282\end{center}
283
284\begin{center}
285\begin{figure}
286\includegraphics[width=\textwidth]{beste-10nodes.ps}
287\caption{Beste uitvoer $input10.txt$, $fitness=139$}
288\label{fig:beste-10nodes}
289\end{figure}
290\end{center}
291
292
293\section{Conclusies}
294De implementatie van het GA algoritme lijkt niet perfect te werken en te
295selectief te werk te gaan, vanwege de optimatisatie is het mogelijk met
296een hoger $MUT\_LEVEL$ nummer bijna alle oplossingen af te gaan waardoor
297de optimale oplossing eruit komt vallen. Het zoeken naar betere
298combinatie functies zou een oplossing kunnen bieden.
299
300Verder valt op dat de generereerde plaatjes met een bepaalde belangrijke
301eigenschap geen rekening is gehouden, namelijk om de afstand tussen elke
302node zo groot mogelijk te maken. Hierdoor vallen nodes over elkaar geen
303en is de grafische implementatie zeer slecht, terwijl de oplossing toch
304als optimaal aangeboden worden.
305
306De random seed is in alle gevallen hetzelfde gezet (namelijk $0$),
307onderzocht kan worden of het wijzigen van de seed nog invloed heeft op
308de resultaten.
309
310
311\begin{thebibliography}{XX}
312
313\bibitem{assignment}
314W.A.~Kosters, Kunstmatige intelligentie Programmeer-opgave 4 van 2008
315-- Genetische Algorithmen, \url{http://www.liacs.nl/home/kosters/AI/ga08.html}
316
317\bibitem{course}
318W.A.~Kosters, Kunstmatige intelligentie, \url{http://www.liacs.nl/home/kosters/AI.html}
319
320\bibitem{darwin}
321Darwin, Charles, On the Origin of Species by Means of Natural Selection,
322or the Preservation of Favoured Races in the Struggle for Life, John
323Murray, London, 1859,
324\url{http://www.literature.org/authors/darwin-charles/the-origin-of-species/index.html}
325
326\bibitem{aibook}
327S.J. Russell en P. Norvig, Artificial Intelligence, A Modern Approach,
328Second ediion, Prentice Hall, 2003.
329
330\bibitem{aisheet}
331W.A.~Kosters, Kunstmatige intelligentie College neurale netwerken 2008,
332\url{http://www.liacs.nl/~kosters/AI/genetisch.pdf}
333
334\bibitem{line-intersect}
335lbackstrom, Geometry Concepts: Line Intersection and its Applications,
336\url{http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=geometry2}
337
338\bibitem{graphviz}
339Graphviz, homepage, \url{http://graphviz.org}
340
341\bibitem{imagemagick}
342Imagemagick, homepage, \url{http://imagemagick.org}
343
344\end{thebibliography}
345
346\newpage
347\advance\textwidth by 8cm
348\advance\oddsidemargin by -3cm
349\advance\evensidemargin by -3cm
350\advance\topmargin by -2cm
351\advance\textheight by 4cm
352\advance\footskip by -4cm
353\marginparwidth 0cm
354\twocolumn
355\section*{Appendix}
356De GA code en de test arrays zagen er als volgt uit:
357\newline
358\tiny
359%preformatted with `source-highlight -n -f latex bridge.cc`
360\input{ga.cpp}
361\input{input-circular.txt}
362\input{input10.txt}
363\onecolumn
364\end{document}
Note: See TracBrowser for help on using the repository browser.