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