Eindproject

Theorie

Als eindproject heb ik ervoor gekozen om te proberen evoluerende robots te maken. Het idee is om de robots een set variabelen mee te geven die samen het gedrag van de robot bepalen. Deze variabelen veranderen niet tijdens de levensduur van een robot maar kunnen wel lichtelijk aangepast worden in de volgende generaties. De robots zouden op deze manier een vorm van optimalisatie bekend als “hillclimbing” moeten uitvoeren waarbij de robots sterven en de meest geschikte robot kinderen krijgt die doorleven met een kleine willekeurige aanpassing op de waarden van zijn variabelen. Alle mogelijke waarden van de variabelen van de robots vormen een probleem ruimte waarin de meest effectieve combinatie van variabele waarden gevonden kan worden via een evolutie proces dat gebruik maakt van hillclimbing.

Het principe van hillclimbing in een notendop. Je kiest een willekeurige oplossing binnen een probleemruimte. Vervolgens pas je die oplossing een klein beetje op een willekeurige manier aan en je kijkt of hij dan efficiënter is dan de oude oplossing, zo ja dan onthoud je de nieuwe oplossing en probeer je weer een betere te vinden. Is de nieuwe oplossing niet beter dan de oude oplossing dan zoek je weer verder vanuit de oude oplossing. Het effect van hillclimbing is dat je langzaam maar zeker toe werkt naar de meest efficiënte oplossing voor een probleem.

Fig.1: Hillclimbing.
Verticaal staat de tijd en horizontaal de mogelijke waarden van een variabele.
Richting de top wordt de ideale waarde steeds dichter benaderd.

Deze robots hebben geen enkel idee van wat ze aan het doen zijn omdat ze niets onthouden of zelfs maar leren. De robots hebben een vastgestelde manier van reageren op prikkels uit de omgeving en deze manier veranderd alleen maar met een nieuwe generatie. Deze gegevens houden in dat de robots voldoen aan de eisen van de moderne artificiële intelligentie (MAI).

Het verschil tussen MAI en klassieke artificiële intelligentie (KAI) is als volgt: In KAI probeert men intelligentie te maken die “denkt” zoals een mens. Dit houdt in dat de intelligentie zoiets heeft als een interne representatie van de wereld die beschrijft het met symbolen en voert daarop bewerkingen uit. MAI echter, probeert het denken zoveel mogelijk weg te laten en de representaties al helemaal. MAI probeert een zo direct mogelijke koppeling te maken tussen de invoer en de uitvoer van een programma, ook wel situated cognition. Dit leidt er toe dat MAI programma's er vaak heel erg simpel uit zien maar enorm complex gedrag vertonen. Soms is dit gedrag zelfs geheel onverwacht voor wat er geprogrammeerd is, dit fenomeen noemt men emergence. Een voorbeeld hiervan kun je terug vinden in de resultaten sectie.

Praktisch

Er wordt een afgesloten ruimte gemaakt van vier planken met daaromheen aluminium folie. In deze ruimte worden twee witte stippen op de grond bevestigd. Deze stippen staan symbool voor het voedsel van de robots en om te overleven is het noodzakelijk voor de robots om een dergelijk stip te bereiken. De robots bestaan uit een CPU, twee voelsensoren (een links en een rechts), twee motoren en een lichtsensor. Met de lichtsensor wordt waargenomen of het eten al dan niet gevonden wordt. De voelsensoren nemen waar of de robot obstakels tegen komt. En de motoren zorgen voor mobiliteit.

Softwarematig worden drie variabelen gemaakt die zoiets voorstellen als de genen van de robot. Bij overleving worden de waarden van de variabelen doorgegeven. De variabelen staan voor drie eigenschappen, namelijk: de tijd dat de robot rechtdoor gaat rijden, de scherpte van de bochten die de robot gaat maken en de hoek waarop de robot zal draaien als hij ergens tegenaan rijd.

De rechtdoor en de bocht variabelen vormen samen een zogenaamd wiggelwaggel gedrag. Dit betekent dat de robot een stuk vooruit rijd, dan een bocht naar rechts zal maken, dan weer een stuk vooruit rijd en dan een bocht naar links zal maken. Dit gedrag zal herhaald worden tot voedsel gevonden wordt of de robot een obstakel tegen komt.

Als de robot een obstakel tegen komt zal hij een klein stukje achteruit rijden en dan een hoek naar links of rechts maken van de grootte aangegeven door de hoek variabele.

Uiteindelijk zal de robot natuurlijk voedsel vinden en stoppen met rijden. Als hij gestopt is zal hij een infrarood signaal naar de andere robot geven zodat die weet dat hij verloren heeft. Vervolgens stuurt de winnende robot zijn genen via infrarood naar de andere robot en dan passen beide robots de genen op willekeurige wijze een klein beetje aan. De twee nieuwe resulterende robots zijn als het ware kinderen geworden van de originele succesvolle robot. Ze zullen verder gaan zoeken met de iets aangepaste versie van de originele robot.

Resultaat

Het resultaat van dit hele theorie, bouw en programmeer proces zijn twee robots die geleidelijk veranderend gedrag vertonen. De robots zoeken met een continu veranderend gedrag naar het voedsel binnen de box. Dit volgende Excel plaatje geeft aan wat de waarden van de genen waren binnen een aantal generaties.

Zoals je kunt zien komt er geen concreet leergedrag naar voren in die zin dat de robots geleidelijk aan meer toe werken naar een ideale waarde voor iedere variabele. Het is wel in de gegevens te zien dat de robots toe werken naar een bepaalde configuratie van waarden. Echter aan het daadwerkelijke gedrag van de robots is niet te zien dat ze sneller zoeken naar het voedsel. Voor deze situatie zijn een aantal verklaringen te geven, deze zijn beschreven in het terugblik gedeelte.

Een vreemd voorbeeld van emergence is nog te geven in dit verhaal. Een van de robots maakte een nogal vreemde hoek met een obstakel in de ruimte waardoor de voorwielen van de robot van de grond kwamen. Doordat de voedselsensor van de robot de bovenkant van het obstakel kon waarnemen ontdekte de robot “voedsel”op de bovenkant van het obstakel.

Klik hier voor een filmpje van de robots in de omgeving (11.5Mb)

Terugblik

Er zijn een aantal verklaringen voor het inefficiënte leergedrag van de robots. Ten eerste kunnen we zeggen dat het niet efficiënt is dat de robots geen willekeurige start positie hebben. Volgens hillclimbing theorieën moet het algoritme op een willekeurige plek starten, dit zou tot gevolg hebben dat de kans dat de pieken in de probleemruimte gevonden worden vergroot wordt. Ten tweede, en dit is waarschijnlijk de cruciale fout geweest, was het onverstandig om de “ouder” bij het succesvol vinden van eten ook te laten sterven. Volgens hillclimbing mag het algoritme eigenlijk geen oplossing binnen de probleem ruimte aannemen die minder efficiënt is dan de tot nu toe bereikte oplossingen. Door zowel de onsuccesvolle robot als de succesvolle robot te laten sterven wordt er niet meer vergeleken met de meest efficiënte genen maar met twee variaties daarop die in principe allebei minder efficiënt kunnen zijn. Helaas zit er ook bij deze beredenering nog een addertje onder het gras. Het is namelijk maar de vraag of de beoordeling op efficiëntie wel een juiste was (Het enige beoordelingscriterium was namelijk eten vinden voor de andere of geen eten vinden). Dit is een nogal zwart-wit oplossing. Misschien was het slimmer geweest om een tijdslimiet aan het zoeken van eten te stellen en de robots te laten sterven als ze niet sneller dan de tot dan toe snelste tijd waren. Dit zou het efficiëntie criterium namelijk per levens cyclus aanscherpen. Met deze beredenering zouden de robots wel voldoen aan het hillclimbing principe, houd er alleen wel rekening mee dat als je het parcours veranderd je in feite de probleemruimte ook veranderd en je de robots dus helemaal vanaf het begin opnieuw zult moeten laten beginnen met klimmen.

Klik hier voor een Word versie van deze tekst