Introduktion till Genetiska algoritmer CT3620 – Vetenskapsmetodik 2005-10-15 Ylva Degerfeldt [email protected] SAMMANFATTNING Denna rapport är tänkt som en introduktion till Genetiska algoritmer. Först förklaras ämnet översiktligt, inklusive en kort Historik. Sedan följer en mer ingående beskrivning av de olika ingående begreppen: En Genetisk algoritm har en population av individer, eller kromosomer. Kromosomerna består i sin tur av gener. Varje gen är en del av en möjlig lösning och en kromosom ger en hel lösning. En fitnessfunktion sätter ett värde på varje individ och detta värde används sedan för att avgöra vilka kromosomer som får korsas och skapa en avkomma. Att kromosomerna korsas brukar kallas för Crossover. Sedan finns det en liten chans att avkomman muteras, vilket innebär att en förändring sker i dess gener. Senare i rapporten tar jag också upp ett exempel: 8 damer-problemet, vilket kan lösas med hjälp av en Genetisk algoritm. Slutligen kommer en liten diskussion där jag tar upp några fördelar med Genetiska algoritmer och lite om vad de kan användas till. 1 Innehållsförteckning (Ska fixas snarast. Jag fick det inte att fungera korrekt.) 2 INLEDNING Genetiska algoritmer är inspirerade av Darwins evolutionsteori [http://cs.felk.cvut.cz/~xobitko/ga/]. Detta innebär att man kan lösa ett problem genom att skapa en population av olika (mer eller mindre bra) lösningar, vilka kallas kromosomer eller individer. Sedan låter man en ny generation lösningar utvecklas från den gamla genom att man väljer ut flera par av individer vilka får korsas med varandra så att de får en avkomma. Och precis som i naturen är det bara de ”bästa” individerna som lyckas fortplanta sig. Hur ”bra” en individ är bestäms av något som kallas fitnessvärde och följaktligen har individer med bättre fitnessvärde en större chans att få para sig än individer med sämre fitnessvärde. När en avkomma har skapats finns det också en chans att denna muteras, precis som i naturen. D.v.s. att det sker en liten genförändring hos individen. Denna kan antingen vara positiv och då leder den till att den förändrade genen med hög sannolikhet förs vidare genom generationerna, eller negativ, vilket innebär att sannolikheten för att genen ska föras vidare är väldigt låg. Efter att mutation skett på vissa utvalda individer ersätts den gamla populationen med alla individer från den nya generationen och eventuellt får några ”gamla” individer vara med i den nya generationen också. De nya individerna får också fitnessvärden och så fortsätter urvalet och fortplantningen tills ett visst villkor är uppfyllt. Mer om detta villkor följer senare. Historik Genetiska algoritmer är det första Evolutionary Computing-paradigmet (algoritmer som bygger på Evolutionsteorin) som utvecklades och användes. Och den som utvecklade det var amerikanen John Henry Holland (född 1929), som var professor i psykologi, electrical engineering och datavetenskap. [http://en.wikipedia.org/wiki/John_Henry_Holland] 3 INTRODUKTION TILL GENETISKA ALGORITMER Utseende hos en generell Genetisk algoritm Nedan följer pseudokod för en generell genetisk algoritm. Sedan kommer en översiktlig förklaring till koden och i nästa avsnitt mer ingående förklaringar på de olika delarna. Genetisk algoritm 1) Initiera startpopulationen P(0). 2) Sätt G = 0. 3) Gör tills stoppvillkoret har uppnåtts a) Beräkna fitness för varje individ b) Välj ut individer till föräldrapar, beroende av fitness. c) Skapa avkomma A(G) med hjälp av Crossover-funktion (med viss sannolikhet) d) Mutera avkomma (med viss sannolikhet) e) Välj ut individer till ny population P(G + 1), från den gamla P(G) och alla A(G). f) Sätt G = G + 1. 4) Returnera den bästa lösningen (individen med bäst fitness) Startpopulationen P(0) tillhör generation 0 och brukar oftast slumpas fram. D.v.s. att de ingående kromosomerna får slumpmässiga utseenden och fitnessvärden. En kromosom består av gener och hur det kan se ut förklaras i nästa avsnitt. Variabeln G håller reda på vilken generation algoritmen har hunnit till. Stoppvillkoret kan vara antingen att det har dykt upp en tillräckligt bra lösning bland individerna (kromosomerna) i populationen, att det har skapats ett visst antal generationer, eller att den bästa individen, under ett visst antal generationsbyten, inte har förbättrats. Det sistnämnda villkoret används lättast tillsammans med Elitism. D.v.s. att man hela tiden kopierar den eller de bästa individerna (oförändrade) från en generation till nästa. På så vis riskerar man inte att förlora den bästa lösningen. Antalet föräldrapar man väljer ut är beroende av populationens storlek och hur man vill lösa problemet. Föräldrarna väljs genom olika Selektionsmetoder, vilka förklaras i nästa avsnitt. A(G) är avkomman som skapades av föräldrar tillhörande generation G. Denna avkomma skapas med hjälp av en Crossover-funktion, vilken kombinerar gener från båda föräldrarna för att skapa en ny kromosom. Vilka olika typer av Crossover-funktioner som finns förklaras i nästa avsnitt. När en ny population skapas tar man med alla ”barnen” och noll eller flera från föräldragenerationen, beroende på om tillämpar elitism och vilken urvalsmetod man använder. I nästa avsnitt följer djupare förklaringar av de ingående delarna i en Genetisk algoritm. 4 Ingående begrepp i en GA Kromosom Varje population består som tidigare nämnts av kromosomer. En kromosom representeras ofta av en binär sträng, där varje bit motsvarar en gen. (Ett exempel på en sådan kromosom syns i Figur 1.) Och varje gen motsvarar en liten del av en potentiell lösning till problemet. Fast det kan också vara så att alla generna tillsammans representerar ett heltal. Kromosom 1 110010100101 Kromosom 2 010101011000 Figur 1. Ett exempel på hur binära kromosomer kan se ut Kromosomernas längd kan vara samma för alla eller olika beroende på vilket problem man försöker lösa. En kromosom kan också representeras av en sträng av heltal eller av realtal. (Figur 2 visar ett exempel på en kromosom med realtalsrepresentation.) Ett exempel på ett problem som kan lösas med hjälp av en G.A. med realtalskromosomer: Att hitta maxvärdet hos en funktion; t.ex. f(w,x,y,z) = (wx – y) * z Figur 2 nedan visar hur en kromosom för detta problem kan se ut. Cellerna motsvarar gener och möjliga värden på w, x, y och z, i den ordningen (uppifrån). -1,567231 2,5 17,2397 3 Figur 2. Ett exempel på EN kromosom med realtalsrepresentation (3 ingående gener) Fitnessfunktion Varje kromosoms värde, eller fitness, bestäms av en s.k. fitnessfunktion. Och hur man väljer att denna ska se ut beror på vilken typ av problem det är man ska lösa. Det är mycket viktigt att man väljer en fitnessfunktion som verkligen modellerar problemet man ska lösa. [Engelbrecht2002] Vi återgår till exemplet om maxvärdet hos funktionen f(w,x,y,z) = (wx – y) * z. För detta problem kan fitnessfunktionen bli mycket enkel: Man räknar helt enkelt ut funktionens värde för varje kromosom. Då blir det naturligt så att kromosomer med högre fitness ger en bättre lösning än de med lägre. (Men det är också tillåtet för en G.A. att ha en fitnessfunktion där lägre värden är bättre.) 5 Selektionsmetoder Selektion innebär urval, vilket man behöver göra när man ska välja ut föräldrar och när man ska välja vilken kromosom som ska muteras. Selektionsmetod innebär sättet man gör urvalet på. Här följer en beskrivning av några olika Selektionsmetoder: SLUMPMÄSSIG SELEKTION Detta är ingen lämplig selektionsmetod egentligen för en Genetisk algoritm eftersom denna metod väljer föräldrar helt slumpmässigt, utan att ta hänsyn till kromosomernas fitness. Och en av grundidéerna med Genetiska algoritmer är att individernas chans att få föröka sig ska vara större för individer med bättre fitness. TURNERINGSSELEKTION Denna form av urval innebär att man slumpmässigt väljer ut x individer, vilka sedan får ”turnera mot varandra”. Detta medför i praktiken att den individ som har bäst fitness av dessa blir vald. Man brukar göra en turnering per förälder som ska väljas ut och det är möjligt för samma individ att bli vald flera gånger. En individ kan alltså bli ”både pappa och mamma” till sin avkomma, men om detta ska vara tillåtet eller inte är upp till programmeraren. RANGBASERAD SELEKTION Denna urvalsmetod bygger på att man rangordnar alla fitnessvärden först och sedan använder denna rangordning för att välja ut kromosomer. Fördelen med detta är att då dominerar inte de kromosomer som har bäst fitness i urvalet. Men urvalet blir också helt oberoende av fitnessvärdena. 6 PROPORTIONELL SELEKTION Denna urvalsoperator kallas även Rouletthjulsselektion och innebär att de individer som har bättre fitnessvärde har proportionellt större chans att bli valda. Tanken här är att man har ett rouletthjul där varje kromosom har sin sektion, vilkens storlek är proportionell mot kromosomens fitness. Sedan tänker man sig att man kastar en kula i rouletthjulet och den kromosom vars sektion kulan stannar på blir vald. Figur 3 visar tydligt att den kromosom som har bäst fitness och därmed störst roulettsektion, har lättast att bli vald. Kromosom 1 Kromosom 2 Kromosom 3 Kromosom 4 Kromosom 5 Figur 3. Ett exempel på Roulettehjulsprincipen med fem kromosomer med olika fitnessvärden Elitism Som tidigare nämnts innebär Elitism att man hela tiden sparar den eller de bästa kromosomerna. D.v.s. att dessa kopieras från en generation till nästa, vilket kan göra att algoritmen snabbare konvergerar mot lösningar som matchar det man är ute efter. Men å andra sidan kan Elitismen göra att algoritmen fastnar i ett lokalt maximum och aldrig hittar den bästa lösningen. Dock används Elitism ofta i Genetiska algoritmer, så det måste uppfattas som mer positivt än negativt. 7 Crossover-metoder Crossover innebär som tidigare nämnts att två kromosomer korsas med varandra och skapar en avkomma. Någon form av Crossover brukar nästan alltid genomföras i en G.A., på de utvalda föräldrarna. Men det brukar finnas en liten sannolikhet att ingen Crossover genomförs, vilket då innebär att kromosomerna kopieras som de är till nästa generation. Det finns olika typer av Crossover-metoder och nedan presenteras några av dem: SINGLE POINT CROSSOVER En slumpmässig position på kromosomsträngen väljs ut och delar in föräldrakromosomerna i två halvor. Sedan får det ena barnet en kopia av den ena förälderns första halva, följd av den andra förälderns andra halva. Och för det andra barnet blir det tvärtom. Figur 4 visar hur det kan gå till för binära kromosomer. 1 0 0 1 1 0 1 0 1 1 0 0 1 1 1 0 1 1 0 1 0 1 1 1 0 1 1 0 1 0 1 1 0 1 0 1 Figur 4. Ett exempel på Single Point Crossover mellan binära kromosomer TWO POINT CROSSOVER Denna Crossover-metod fungerar som Single Point Crossover förutom att det är runt två punkter man ”byter plats på gener”. UNIFORM CROSSOVER Den här Crossover-metoden leder till större variationer hos avkomman, eftersom den inte har en speciell Crossover-punkt utan flera, vilka bestäms slumpmässigt. 8 Mutation Om man endast använder Crossover när man skapar nya kromosomer så finns det en risk att man missar några bra lösningar på grund av att det var svårt att kombinera ihop dessa från endast de gener som finns i nuvarande population. Man kan också säga att algoritmen utforskar för lite. En lösning på detta är mutation. Detta innebär att vissa gener hos vissa kromosomer (som nyligen har skapats) väljs ut för att förändras (muteras) på något sätt. Mutation är bra på så vis att den får algoritmen att utforska mer och ger en större variation på kromosomerna. Men för mycket mutation är inte bra heller. Då blir algoritmen slumpmässig på grund av allt för många förändringar av gener. Det är alltså bäst att ha en ganska låg sannolikhet för att kromosomer ska muteras. Men forskning har visat att om man startar en G.A. med en hög mutationssannolikhet, som sedan minskar exponentiellt med antalet generationer, så får man en säkrare och snabbare algoritm. [Engelbrecht2002] Man kan också säga att det ofta är bättre att mutera individer med dålig fitness än de vars fitness är bra, eftersom man inte vill riskera att försämra de ”bästa” individerna. Mutation är också viktig när initialpopulationen saknar en viktig bit av lösningen. [Luger2002] Det finns olika mutationsmetoder. Nedan följer en beskrivning av några av dem: SLUMPMÄSSIG MUTATION Denna mutationsmetod gäller binärt representerade kromosomer och fungerar så att gener slumpmässigt väljs ut för mutation. Själva mutationen består av att man inverterar det valda värdet (1 blir 0 och tvärtom). INORDERMUTATION Denna mutationsmetod gäller också binärt representerade kromosomer och fungerar som Slumpmässig mutation förutom att de gener som muteras befinner sig inom ett område som avgränsas av två punkter. Dessa punkter bestäms slumpmässigt. PERMUTATIONSMUTATION Denna typ av mutation kan man använda till permutationsproblem. D.v.s. problem där det gäller att kombinera ihop vissa saker i rätt ordning. Varje kromosom i ett sådant problem består av olika heltal och mutationen görs genom att man väljer ut två heltal som får byta plats med varandra. MUTATION MED REALTALSREPRESENTATION När man representerar en kromosom med en mängd olika realtal, så brukar mutationen göras lite annorlunda: Man väljer ut några olika gener från kromosomen och muterar dessa genom att addera eller subtrahera ett litet realtal från genens värde. 9 Ett exempel på ett problem: 8 damer-problemet Detta problem är välkänt och passar bra för att lösas med en Genetisk algoritm. Beskrivning: Man har en vanlig schackspelplan (8 x 8 rutor) och åtta damer, vilka får röra sig enligt vanliga schackregler. Problemet är hur man ska placera ut dessa åtta damer så att ingen dam attackerar någon annan. Figur 5 visar ett (misslyckat) försök till en lösning på detta. D D D D D D D D Figur 5. Ett exempel på 8 damer-problemet. Färgmarkeringarna visar vilka damer som blir attackerade av någon annan. Kromosomrepresentation I detta problem utgör varje kromosom ett sätt att placera ut alla åtta damerna på schackbrädet. Och eftersom en av reglerna man måste följa är att ingen dam får stå i samma kolumn som en annan, brukar man göra så att varje dam står i en egen kolumn. Sedan kan man låta varje gen representeras av vilken rad som varje dam står på. Figur 6 visar ett exempel på en sådan kromosom (och motsvarar Figur 5). 1 3 6 2 4 8 5 7 Figur 6. Kromosomen som motsvarar damuppställningen i Figur 5. Fitnessfunktion En tänkbar fitnessfunktion för detta problem kan vara en funktion som räknar ut hur många damer som inte blir attackerade av eller attackerar någon annan. Detta medför att algoritmen kan ha som stoppvillkor att minst en kromosom med fitness 8 har skapats. Selektionsmetod Jag har valt Rangbaserad selektion, för att inte riskera att en kromosom dominerar över de andra. Crossover-metod Jag har valt Single Point Crossover för att det är en enkel metod som passar för problemet. 10 Mutationsmetod För detta problem har jag valt att använda en domänspecifik mutation. Jag sätter en låg sannolikhet för mutation för alla kromosomer och för varje utvald kromosom gör jag följande: Jag tar en slumpvis vald position på kromosomsträngen och slumpar fram ett nytt värde på dess gen. (Värdena ligger mellan 1 – 8.) Elitism Jag föredrar att använda elitism för det här problemet eftersom det oftast medför en positiv effekt och jag tror att algoritmen hittar en lösning snabbare med hjälp av detta. AVSLUTANDE DISKUSSION I denna rapport har jag försökt ta upp de grundläggande begreppen som hör till ämnet Genetiska algoritmer. Sist skulle jag vilja ta upp några fördelar med genetiska algoritmer: Man kan säga att genetiska algoritmer till stor del har sin styrka i Crossover-metoden. Det beror på dess förmåga att kombinera stora block av gener som har utvecklats oberoende av varandra, för att skapa en ny lösning vilken med stor sannolikhet är bättre än dess ”förfäder”. En GA passar bra för problem där sökrymden är alltför stor för att kunna gås igenom i sin helhet. Och den hittar oftast en bra lösning, men inte säkert en optimal. I praktiken så har Genetiska algoritmer haft en bred påverkan på lösningen av optimeringsproblem som t.ex. layoutproblem av kretskort och schemaläggning. [Russel/Norvig2003] Men det går ännu inte att peka ut något område där Genetiska algoritmer utan tvekan är den bästa lösningen. Framtiden får utvisa hur det blir med den frågan. 11 REFERENSER [Engelbrecht2002] Andries P. Engelbrecht, „Computational intelligence – An introduction“, sidorna 123-154, 2002. [Luger2002] George F Luger, “ARTIFICIAL INTELLIGENCE – Structures and Strategies for Complex Problem Solving”, 4:e upplagan, sidorna 469-481, 2002. [Russel/Norvig] Stuart Russel och Peter Norvig, “Artificial Intelligence – A Modern Approach”, 2:a utgåvan, sidorna 116-119, 2003. Referenser från Internet: Obitko, Marek. ”GENETIC ALGORITMS”. Skriven på Czech Technical University, handledare: Assoc. Professor Pavel Slavík <http://cs.felk.cvut.cz/~xobitko/ga/> (11 okt 2005) Elektroniskt uppslagsverk, http://en.wikipedia.org/wiki/John_Henry_Holland/ (10 okt 2005) Yen, Gory G, School of Electrical and Computer Engineering Intelligent Systems and Control Laboratory, http://www.okstate.edu/elecengr/faculty/yen/5773-lecture-06.pdf (11 okt 2005) 12