Artificial evolution

Door Tom Bonte, 13. Januari 2009, 11:10

Één van de interessantere vakken die ik vorig jaar voorgeschoteld kreeg was objectgericht programmeren in Java. In één van de lessen werd er gesproken over genetische algoritmes en artificiële evolutie - ik weet niet meer of de termen gevallen zijn, maar daar ging het in feite over.

Genetische algoritmes en artificiële evolutie zijn eigenlijk moeilijker uit te leggen dan ze te begrijpen zijn, maar ik zal een poging wagen, zodat je een beeld kunt vormen bij deze termen.

Wanneer personen in videospelletjes gesimuleerd worden, dan zijn dat objecten waaraan bepaalde opdrachten worden toegekend. Wanneer een speler in Fifa vb.een tackle maakt, of een mannetje in een ander videospel tegen iets opbotst, dan zal dat figuur steeds dezelfde beweging uitvoeren. Het karakter kan dus slechts een eindig aantal voorgeprogrammeerde bewegingen uitvoeren. Dat is natuurlijk geen goede weergave van de werkelijkheid, iets wat een simulatie bij definitie zo goed mogelijk hoort te doen.

Een oplossing voor dat probleem ligt nu net in genetische algoritmes. Deze doen - sterk vereenvoudigd - het volgende: Wanneer je bijvoorbeeld een figuur wilt laten wandelen, dan maak je eerst een zeer grote populatie objecten aan die je willekeurig laat bewegen. Het algoritme selecteert dan de objecten die het wandelen het beste benaderen en zorgt ervoor dat die objecten nakomelingen krijgen. Door mutaties zullen er tussen de nakomelingen objecten zitten die beter kunnen wandelen dan hun "ouders". Het algoritme selecteert opnieuw de beste objecten en kruist die met elkaar. Zo gaat het verder tot je een object hebt dat probleemloos kan wandelen. Het kruisen van objecten met elkaar en waarbij er mutaties optreden heet artificiële evolutie.

Het filmpje hieronder dateert al uit 1994, maar illustreert wel mooi wat ik net uitgelegd heb. Wat je te zien krijgt zijn enkele van de eindresultaten die bekomen werden nadat aan objecten een bepaalde opdracht zoals zwemmen of springen was toegekend. De maker van de software, Karl Sim is één van de pioniers op het gebied van artificiële evolutie.

Hieronder een ander filmpje, uit 2005, waarin men een vliegende vogel probeert te simuleren.

Een mooie toepassing om artificiële evolutie helemaal te snappen kan je hier downloaden. Het is een klein programmaatje, Gene Pool, dat een vijver vol "diertjes" simuleert. De diertjes moeten eten en kunnen zich voortplanten door te paren. Bij de nakomelingen treden er af en toe mutaties op waardoor er na enkele generaties een resem aan soorten kan ontstaan. Omdat een diertje dat niet tijdig aan voedsel raakt sterft, zullen de snellere zwemmers voor meer nakomelingen zorgen en zo hun genen doorgeven, zodat na verloop van tijd de snelste soorten overleven. Het is dus een erg vereenvoudigde weergave van het principe 'Survival of the Fittest'. Je kan ook een voorkeur voor liefde instellen, vb: groot, hyperactief, ander kleur, ... , zodat je bijvoorbeeld erg grote soorten krijgt. Het wordt allemaal wel duidelijk wanneer je het "spelletje" speelt. Je kan je er gerust enkele uurtjes mee experimenteren vooraleer het gaat vervelen.

Een ander voorbeeld dat erg goed bij deze post past, is de volgende video waarin Torsten Reil uitleg geeft bij deze termen. Meteen worden de vele toepassingen duidelijk en raken jullie hopelijk ook geboeid door deze vorm van programmeren. Ook deze film is al 5 jaar oud, maar iets recenter kon ik helaas niet vinden. Geniet van de video en ga desnoods zelf verder op zoek naar informatie.


Reacties

Voeg reactie toe
 authimage

Reacties