Genetiska Algoritmer 10 mars 2014 Johan Sandberg [email protected] Niklas Strömberg [email protected] 1 SAMMANFATTNING Genetiska algoritmer är en sorts sökalgoritm som är till för att söka upp lösningen på ett specifikt problem eller att optimera fram den bästa lösningen på ett problem. Genetiska algoritmer härmar den biologiska evolutionen genom att ta koncept som gener, arv, selektion, mutation, crossover och gör motsvarigheter i data-algoritmer. Rapporten går igenom de viktigaste elementen i uppbyggnaden av genetiska algoritmer och förklarar för och nackdelar med olika metoder och tillvägagångssätt som används när man hanterar genetiska algoritmer. Genetiska algoritmers viktigaste delar som rapporten går igenom är kromosomer, fitness, selektion och crossover. Historien om genetiska algoritmer tas upp och även lite kort om vad framtiden kan komma att erbjuda. Ett praktiskt exempel där en gräsklippares optimala väg räknas ut med hjälp av en genetisk algoritm redovisas i slutet av rapporten och författarnas egna tankar om genetiska algoritmer redovisas under slutsater. Innehållsförteckning SAMMANFATTNING .............................................................................................................. 2 2 INLEDNING .............................................................................................................................. 3 Metod ......................................................................................................................................... 4 Genetiska algoritmer ............................................................................................................... 5 Uppbyggnad & funktionalitet .............................................................................................. 5 Kromosomer ..................................................................................................................... 5 Fitness ............................................................................................................................... 6 Selektion............................................................................................................................ 6 Crossover .......................................................................................................................... 7 Praktisk användning ............................................................................................................ 9 Algoritmens steg ............................................................................................................ 10 Kromosomerna............................................................................................................... 10 Crossover och mutation ................................................................................................ 11 Slutfasen ......................................................................................................................... 12 SLUTSATSER ........................................................................................................................ 13 REFERENSER ....................................................................................................................... 14 INLEDNING Genetiska algoritmer används inom datavetenskap som en metod för att söka efter och optimera fram den bästa lösningen på ett specifikt problem, man kan säga att algoritmen söker upp lösningen på problemet [Melanie 96]. Genetiska algoritmer ingår i området artificiell intelligens och härmar evolutionens naturliga selektion, man har tagit tekniker såsom arv, selektion, korsning, mutation och gjort motsvarigheter i data-algoritmer. 3 Genetiska algoritmer är byggda genom att man skapar en population av potentiella lösningar, dessa kallas kromosomer eller individer. Varje kromosom är i sin tur byggd av ett antal gener. Algoritmen stegar framåt, vilket kan liknas vid att en ny generation barn föds. Vilka nya barn som föds beror på vilka individer som parat sig i den tidigare generationen, detta beror i sin tur på individernas fitness (hur bra individen är för det specifika problemet). Desto bättre fitness desto större chans att få en avkomma. Detta innebär att om man stegar tillräckligt många gånger kommer individera alla likna den individ med bäst fitness till slut. För att algoritmen ska kunna söka ett större område efter den bästa individen finns det något som kallas för mutation, detta innebär att varje barn har en liten chans att slumpmässigt ändra sina gener. Om denna slumpmässiga mutation visar sig öka individens fitness kommer den nya genen att spridas. Tack vare mutation kan man öka chansen att hitta det bästa svaret på sitt problem. Lösningen på sitt problem hittar man då dom bästa individerna är oförändrade ett visst antal generationer. Antalet generationer är dock varierande. Genetiska algoritmer kan användas i ett väldigt brett område. Eftersom det är en simulering med målet att optimera eller söka efter bästa lösningen kan man hitta användning inom dom flesta ämnena. Vanliga områden är matematik, fysik, kemi, ekonomi, ingenjörskonst, datavetenskap, biologi, tillverkning och medicin [Wikipedia]. Historia Man började använda datorsimulationer för att simulera evolutionen redan så tidigt som 1950 och på 1960-talet blev denna typ av simulationer relativt vanliga. Under denna tid började man använda de viktigaste delarna i genetiska algoritmer, alltså samma delar vi även använder idag. Tack vare Ingo Rechenberg och Hans-Paul Schwefel lyckades man på 1960 och tidigt 1970-talet lösa svåra ingenjörsproblem genom evolutionära strategier (genetiska algoritmer) [Rechenberg 73]. Tack vare detta fick världen upp ögonen för genetiska algoritmer som en metod för att optimera olika lösningar. Som så många andra nya upptäckter hölls genetiska algoritmer till största delen teoretiskt i början. Intresset växte och i mitten av 1980-talet hade man världens första internationella konferens om genetiska algoritmer i Pittsburgh, Pennsylvania, USA. När datorkraften ökade dramatiskt för skrivbordsdatorer kunde man använda teorierna man byggt till att lösa problem med hjälp av genetisk algoritmer. I slutet av 1980-talet började general electric sälja världens första program som använder genetiska algoritmer, ett program gjort för industriella proccesser. År 1989 kom världens först kommersiella produkt för användning av genetiska algoritmer på skrivbordsdatorer, produkten släpptes av Axcelis, Inc och hette Evolver. Evolver var den ända kommersiella produkten för genetiska algoritmer fram till 1995. Idag är Evolver på sin sjätte version [Wikipedia]. Metod Information för att skapa denna rapport har hittats genom sökningar på Google. För att få en grundläggande förståelse för ämnet har wikipedia granskats. Värdefull information om genetiska algoritmers historia och tillämpningar har hittats där. 4 Många hemsidor från högskolor, universitet och andra utbildande hemsidor i Sverige och även internationellt har givit bra information om hur man praktiskt använder genetiska algoritmer och detta har använts i denna rapport. För att kunna skriva på en grundläggande nivå har det inte krävts allt för mycket grävande i akademisk litteratur och forskningartiklar. Detta har endast krävts för att få bra källor för vissa påståenden och för att försäkra sig om att man fått rätt information då det funnits motstridiga eller omdiskuterade uppgifter. En av rapportskribenterna har tidigare erfarenhet av AI och genetiska algoritmer då denne gått en högskolekurs dedikerad till detta ämne. Rapportskribenten har även erfarenhet av implementation av genetiska algoritmer. Denna kunskap har använts till att kunna formulera ett problem som sedan löses med hjälp av en genetisk algoritm. Genetiska algoritmer Uppbyggnad & funktionalitet En genetisk algoritm startar med att slumpa fram en population av individer som senare ska modifieras och förbättras genom iterationer i algoritmen. Storleken på populationen kan variera och bestäms oftast utifrån problemets komplexitet. Kromosomer En individ är uppbyggd av så kallade kromosomer som är en representation av en lösning på ett problem, dessa kromosomer är traditionellt valda slumpmässigt i starten av algoritmen. Detta då man vill ha så många lösningar på problemet som möjligt för att sedan välja ut de 5 som är bättre och även generera nya individer som kan vara bättre än de man hade från början. En kromosom är en behållare där den genetiska informationen lagras. Vanligen är en kromosom uppbyggd av binära strängar, alltså en behållare med ettor och nollor. Varje bit i en kromosom motsvarar en gen som i sin tur representerar ett steg i det givna problemet. Figur 1: illustrerar en kromosom representerad av en binär sträng. Kromosomer kan också vara uppbyggda med andra datatyper än binära strängar, några andra vanliga typer är heltal och trädstrukturer [Darrel 94]. Längden på kromosomerna kan variera och kromosomerna i en population behöver inte nödvändigtvis ha samma längd på sina kromosomer. Fitness En individs fitness är ett mått på individens förmåga att lösa ett givet problem och det är viktigt att beräkningen av detta värde är bra då man oftast vill att den mest optimala lösningen ska hittas. Det går att räkna ut om individen har ett bra startvärde direkt och sålla ut de som inte uppfyller ett visst krav, på så vis kan start-populationen få en bättre utgångspunkt men även det motsatta då variationen i population kan bli för liten och framtida lösningar blir svårare att hittas då den i starten haft dåliga gener[Rennard00]. Selektion En av huvudfunktionen med att ha en fitness är att kunna räkna ut sannolikheten för individens överlevnad till nästgående generation, delmomentet för att välja ut de mest lämpade individerna kallas selektion. Det finns ett flertal metoder som används till detta, två av de vanligaste är roulettehjuls selektion och trunkerings selektion. 6 Roulettehjuls selektion Roulettehjuls selektion fungerar så att på samtliga individer räknas deras fitness ut och sedan normaliseras dessa värden så att varje individ får ett värde mellan 0-100, ju högre värde en viss individ har desto större chans kommer den ha att överleva. Detta kan liknas med ett roulettebord där varje nummer i hjulet representerar en individ och ju större nummer individen har desto större yta på hjulet vilket i sin tur gör att kulan har större chans att hamna på en individ med bättre fitness. Figur 2: Den individ med bäst fitness har en större andel av hjulets yta för kulan att hamna på. Trunkerad selektion Trunkerad selektion fungerar så att man helt enkelt väljer en viss del av samtliga individer, oftast väljer man ut den delen av individer som har bäst värden. Problemet med denna metod är att variationen i individerna kan bli för små och sannolikheten för förbättring mindre vilket i sin tur gör att det blir svårare att komma närmare en optimal lösning på problemet man försöker lösa. Crossover När selektionen av individer har utförts är det dags att skapa en ny generation vilket utförs med hjälp av så kallade crossover och mutations-metoder. 7 Crossover metoder fungerar genom att man korsar två individer med varandra och precis som i verkligheten så förs deras DNA vidare till “barnet”. Det finns flera olika metoder som används för att göra en så kallad crossover. Single point crossover är en vanlig crossover metod som tar gener från en slumpmässig position från föräldrarna och delar upp barnet i två halvor. Första halvan hos barnet får den första halvan hos en förälder och den andra halvan får den andra halvan av generna från den andra föräldern. Hos det andra barnet är det tvärtom. Figur 3: illustrerar single point crossover-metoden Two point crossover fungerar likadant som Single point crossover bara det att man använder två platser där man byter gener istället för en. På detta sätt blir det bättre blandat och mer slumpmässigt. Uniform crossover innebär att man använder ännu fler crossover-punkter än både single och two point crossover. I uniform crossover bestäms crossover-punkterna slumpmässigt vilket får till följd att avkomman får mycket större variationer. Mutationer Mutationer i en genetisk algoritm fungerar liknande mutationer inom biologin. Alltså att en slumpmässig gen får ett nytt värde. Mutationer används i genetiska algoritmer för att behålla populationens mångfald och att snabbare komma fram till kromosomer med så bra fitness som möjligt [surprise 96]. Att endast använda crossover selection brukar fylla populationen med kopior av den bästa individen från populationen. Detta gör att individerna brukar ha hög fitness, men att de skulle kunna nå en ännu högre fitness om mutation användes [surprise 96]. 8 Mutationer bör heller inte förekomma allt för ofta, då detta skulle innebära att individerna blir mer slumpmässiga. En balans måste hittas där selektionen får arbeta fram bästa lösningen och mutationer gör att ingen potentiell lösning förbises. Slumpmässig mutation kan användas på binära kromosomer och går ut på att man inverterar värdet eller värden på flera positioner så att en nolla blir en etta och tvärtom. Inordermutation fungerar likt slumpmässig mutation. I inordermutation väljs ett område mellan två punkter ut slumpmässigt och gener inuti området muteras. Permutationsmutation kan användas för permutations problem, problem där man vill ha gener i en viss sekvens. Kromosomerna består då av heltal och en mutation går ut på att byta plats på två heltal i den egna kromosomen [Engelbrecht07]. Praktisk användning För att visa hur en genetisk algoritm kan fungera så beskrivs här ett problem som kan lösas med hjälp av en genetisk algoritm. Problemet är för en gräsklippare att hitta den kortaste vägen att klippa en gräsmatta som är en 6x6 rutor stor kvadrat. 9 Figur 4:. Gräsmattan med 36st kvadrater. Algoritmens steg Algoritmens steg ser ut på följande vis: • • • • • • • • • • En individs kromosomer slumpas ut tills samtliga gräsplättar är klippta. Individens fitness räknas ut. Lägg till i en lista av individer. Upprepa tills 5000 individer finns i listan. Normalisera och sortera listan med individer. Kör roulettehjuls-selektion på varje individ. Varje individ har en 60% chans att köras i crossover och 3% chans att muteras om den blir vald i roulettehjuls-selektionen. Om individen varken körs i crossover eller muteras men blir utvald i selektionen så läggs den till i listan med nästa generations individer. Processen går tillbaka till normaliseringen och körs om 200ggr. Individen med högst fitness väljs ut som optimal lösning. Kromosomerna En individs kromosomer kan visualiseras ut på följande vis: 10 Figur 5: Exempel på en individs kromosomuppbyggnad. Där varje pil motsvarar ett steg i en viss riktning på gräsmattan. Individen har även följande egenskaper: int poäng - Beräknas genom att individen får ett poäng för varje oklippt gräsplätt. int steg - Antalet steg gräsklipparen måste ta för att klippa samtliga gräsplättar. int fitness - Fitness värdet som beräknas genom poäng/steg. int normaliseringsvärde - används i roulettehjuls selektionen. Antalet steg beror på hur effektivt individen kan slutföra uppgiften och kan vara hur många som helst. Dessa kromosomer bestäms genom att slumpmässigt välja ut en riktning den skall åka dvs upp, ner, höger eller vänster och när individens poäng är 36(6*6) så läggs den till i listan. Antalet individer i listan är i detta fall 200 då det gav en bra kompromiss mellan tiden det tar för algoritmen att köras och effektivitet på slutgiltig lösning. Det kan även påpekas att antalet individer i listan har stor betydelse för hastigheten i algoritmen och ju fler desto mer variation av lösningar får man ut i både starten och slutet. I detta fall användes 5000st individer. Crossover och mutation Som crossover användes two-points typen, denna kan visualiseras på detta vis: 11 Figur 6: Crossover på två individer. På figur 6 kan man se hur gröna delarna tas från båda individerna och sammanflätas ihop till en ny. De blå kromosomerna är de som ändras. Punkten där man delar DNA:t på individerna är slumpmässigt valda och en individ som valts ut i roulette-hjuls selektionen har en 70% chans att genomgå detta. Mutationen fungerar så att en individs kromosom slumpmässigt byts ut mot en ny slumpmässigt vald kromosom. En individ har en 3% chans att muteras efter selektionen. Figur 7: Mutation på en individ. Slutfasen När listan med individer har genomgått dessa steg 200 gånger så tas den individ med bäst fitness ut för att utvärdera resultatet. 12 Figur 8: Lösningen med en individ som hade högst fitness. I ett testfall som gjordes hade den individ med bäst lösning en uppsättning kromosomer som såg ut på följande vis: [U,H,N,H,H,U,U,H,H,N,N,V,U,U,U,H,U,U,V,V,V,V,V,H,N,V,N,N,H,U,H,U,H,H,V,N,V,N, N] Där U står för Upp, N för Ned,V för Vänster och H för Höger. Individen tog 39 steg och gjorde sammanlagt 4 st misstag vilket gav den ett fitness-värde på 36/39 dvs 0.92. En individ börjar alltid med ett poäng vilket betyder att den mest optimala lösningen skulle vara att individen gick 35 steg och hade ett fitness-värde på 1. SLUTSATSER Artificiell intelligens är ett väldigt intressant ämne och något som vi tror att mycket forskning kommer att handla om i framtiden. 13 Genetiska algoritmer försöker på något vis att få en dator att fungera som naturen och som vi kan se i exemplet kan det fungera hyfsat bra. Det som är det svåra är inte algoritmen i sig självt utan det är i vår åsikt designen och parametrarna som gör det svårt att bygga ett bra program. Som vi kan se i exemplet så användes 5000st framslumpade individer som itererade igenom algoritmen 200ggr med en chans på 70% att genomgå en crossover och 3% att bli muterad. Dessa parametrar kan justeras och det är väldigt svårt att veta vad som kommer att ge den mest tillfredställande lösningen. I exemplet är problemet väldigt enkelt för en människa att lösa och en optimal lösning kan räknas ut för hand och på så vis vet vi om en uträknad lösning är den bästa men om problemet skulle vara mer komplex så vet vi kanske inte detta och då blir det genast mycket svårare att utvärdera algoritmens resultat. Skrivandet av denna rapport har varit mycket givande och har fått oss att förstå hur svårt det kan vara att skapa en AI. REFERENSER [Engelbrecht 07] Andries P. Engelbrecht, “Computational Intelligence: An Introduction”, Second Edition, John Wiley & Sons, ISBN 978-0-470-03561-0, 2007. [Darrel 94] Whitley, Darrell (1994). "A genetic algorithm tutorial". Statistics and Computing, sida 65-85. [Rechenberg 73] Rechenberg, Ingo, ”Evolutionsstrategie”. Stuttgart: Holzmann-Froboog. ISBN 3-7728-0373-3, 1973. [Rennard 73] http://www.rennard.org/alife/english/gavintrgb.html [Melanie 96] Mitchell, Melanie (1996). An Introduction to Genetic Algorithms. Cambridge, MA: MIT Press. ISBN 9780585030944. [Surprise 96] http://www.doc.ic.ac.uk/~nd/surprise_96/journal/vol1/hmw/article1.html#mutation [Wikipedia] http://en.wikipedia.org/wiki/Genetic_algorithm 14