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