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