NeuroEvolving Robotic Operatives - IDA.LiU.se

LINKÖPINGS UNIVERSITET
NeuroEvolving Robotic Operatives
Implementering av genetiska algoritmer i RTT-spel
Johan Felixsson
10/3/2010
Spel i dag styrs till stor del utav förskrivna skript. NERO är ett spel som implementerar genetiska
algoritmer med metoden reNEAT för att i realtid utveckla sina agenters agerande och göra dem mer
flexibla och intressanta att spela mot
Johan Felixsson
johfe709
Innehåll
1.
Inledning ............................................................................................................................................... 3
2.
Skriptade agenter.................................................................................................................................. 4
3.
Neurala nätverk .................................................................................................................................... 4
2.1 Neuroevolution ................................................................................................................................... 5
2.2 NEAT .................................................................................................................................................... 5
2.2.1 Genetisk kodning ......................................................................................................................... 5
2.2.2 Skydda nya genom ....................................................................................................................... 6
2.2.3 Minimera sökdjup ........................................................................................................................ 7
4.
reNEAT .................................................................................................................................................. 7
5.
NERO ..................................................................................................................................................... 8
5.1 Robotic Operatives.............................................................................................................................. 9
5.2 Kontroller ............................................................................................................................................ 9
5.3 Träning ................................................................................................................................................ 9
5.4 Battle mode....................................................................................................................................... 10
6. Avslutning................................................................................................................................................ 12
Litteraturförteckning................................................................................................................................... 13
Artiklar .................................................................................................................................................... 13
Internet ................................................................................................................................................... 13
2
Johan Felixsson
johfe709
1. Inledning
Inom dataspel ställs man ofta upp mot olika fiender och motspelare, som utgörs av agenter i
spelvärlden. Deras syfte är att försvåra för spelaren från att uppnå sina mål i spelet och är grunden för
själva utmaningen i spelet. Dessa motståndares presenteras i många spel som utomjordingar, robotar
eller människor och förväntas därför kunna agera på ett relativt rationellt vis. Det finns finns även
vänligt inställda karaktärer som ska hjälpa spelaren. Ett samlingsnamn för dessa datastyrda karaktärer,
både vänliga och fientliga, är NPCer (Non-player Character). Dessa styrs vanligtvis av skript, som är
förhandsbestämda och kan ge karaktärerna ett ganska stelt beteende. Men genom att implementera
genetiska algoritmer så spelen så kan man få karaktärer att agera mer dynamiskt.
3
Johan Felixsson
johfe709
2. Skriptade agenter
I nuläget så är NPCers beteende bundna till skriptade sekvenser som aktiveras av olika ageranden från
spelaren. Det kan exempelvis vara var i spelets värld spelaren befinner sig, var i förhållande till
motståndaren spelaren står eller helt enkelt hur lång tid som spelet har pågått. Dessa skriptade
sekvenser styr direkt agerandet hos NPCer, vilket varierar beroende på vad det är för spel. Exempelvis i
ett förstapersonsskjutspel kan skripten bestämma att när motståndaren, i detta fall en fientlig
utomjording, ser spelaren så ska den beskjuta spelaren. I ett strategispel så ska NPCn, som här kan
representeras som en hel nation, hantera resurser, bygga byggnader och enheter samt anfalla eller
alliera sig med spelaren. I ett sportspel så utgör NPCer alla spelare förutom spelaren, både på det egna
och på motståndar laget. Alla dessa ageranden från NPCer har som syfte att simulera rationellt
beteende.
Dessa har med tiden blivit mer sofistikerade i takt med att spelen blivit mer avancerade. När grafik, ljud
och andra mekanismer i spelen, som miljöer och gravitation, blir allt mer realistiska så ställer det större
krav på de datastyrda agenterna, eller NPC. Dessa måste agera realistiskt för att inte förstöra illusionen
av en realistisk artificiell värld. Detta är ett stort problem då de datorstyrda karaktärerna helt enkelt är
för dumma. De flesta människor kan, med viss träning, överlista en datastyrd karaktär. De saknar
innovation, kan inte lära sig av spelarens beteende eller lära sig av egna misstag. Detta har lett till att
man i spel måste ta till lösningar som kan anses som fusk t ex att de datastyrda spelarna har fördelar i
själva spelmekanismen för att få en överhand över spelaren. Exempelvis i vissa stratergispel så har den
datastyrda motståndaren tillgång till större mängder med resurser och bygger enheter snabbare. I
förstapersonsskjutspel så kan fienden ha tillgång till oändliga mängder soldater att skicka mot spelaren
eller attackerar spelaren och ingen annan trots att de finns andra, datasryra mål de skulle kunna
fokusera på. I racingspel så har den ökända gummibandseffekten implementerats, vilket innebär att om
spelare kommer för långt före NPCerna i spelet så kan de helt enkelt bryta mot reglerna fullständigt och
köra betydligt snabbare än de ska kunna göra.
Dessa brister i de datastyrda karaktärerna och spelen överhuvudtaget kan vara en av anledningarna till
att flerspelarläge nästan är ett krav i spel idag. Människor går kommunicera med, de anpassar sig bättre
till situationern och har möjligheten att lära sig av sina misstag.
Detta problem kan man lösa genom att låta NPCer uppdatera, eller evolvera, sig själv med hjälp av
genetiska algoritmer. Problmet har varit att implementera dessa i en realtidmiljö. rtNEAT är ett försök
att lösa neuroevolution i realtid.
3. Neurala nätverk
Neutrala nätverk har sitt ursprung i den tidiga AI-forskningen och bygger på idéen att simulera den
mänskliga hjärnan genom att bygga en datoriserad modell av neuronen i hjärnan och på detta vis kunna
simulera hur olika processer i hjärnan fungerar. Detta har varit och är fortfarande en av de vanligare
metoderna för att studera inlärning.
4
Johan Felixsson
johfe709
Nätverket är uppbyggt av noder som har en inputfunktion, en aktivieringsfunktion och ett output.
Noderna är sammanlänkade och dessa länkar har olika vikter, som bestämmer styrkan på inputen en
nod kräver för att aktiveras samt hur mycket styrka noden ger ut i outputen. Noderna ligger i olika lager
där den mest simpla formen endast har ett lager där input är direkt kopplat till output. Strukturen på
nätet gör att ett antal noder kan agera tillsammans för att ge en aktivering och output i en annan nod
och möjligheten att lägga till dolda lager som påverkar signalerna ger möjlighet att konstruera mer
avancerade simuleringar med fler noder som påverkar outputen. Mer komplexa nätverk kräver dock
mer tid och resurer att söka igenom.
2.1 Neuroevolution
Med hjälp av genetiska algoritmer så kan man låta det artificiella nätverket evolvera och förändras.
Detta kan ske på olika sätt, där det enklaste har varit att förändra vikterna i kopplingarna mellan
noderna, men låtit strukturen eller topologin på nätverket bibehållas. Metoder finns som evolvera både
topologin och vikterna samtidigt. Dessa metoder kallas för Topology and Wight Evolving Artificial Nueral
Networks och förkortas som TWEANN. Att förändra topologin gör sökningarna mer komplexa, men kan
samtidigt ge möjlighet att ta bort onödiga sökningar genom att förenkla topologin på nätverken.
2.2 NEAT
NEAT, eller NeuroEvolution of Augmenting Topologies är utvecklat av Kenneth O. Stanley och Risto
Miikkulainen vid University of Texas i Austin USA. NEAT arbetar med att nyttja strukturen på ett sådant
sätt att man minimerar sökningen av de olika viktade kopplingarna och stegvis bygger ut nätverket och
på detta sätt öka prestandan hos systemet. Att förändra strukturen när man ska evolvera ett nätverk
leder till ett antal olika problem. För det första så måste det finnas information i genomet för att kunna
korsa två noder och få ut ett fungerande resultat. Genom är den informationen som styr hur noder som
ska byggas ska se ut. Det andra problemet är hur man bibehåller gener, det vill säga förändringar i
genomet, som behöver längre tid för att utvecklas och på så sätt ger dem en chans att förbättra
nätverket. Det tredje problemet är hur man minimera komplexiteten i nätverket under evolutionen utan
att direkt behöva mäta just komplexiteten.
2.2.1 Genetisk kodning
Det första problemet har man löst genom att koda in en lista med kopplingsgener. Varje kopplingsgen
innehåller information om vilka två kodgener som kopplas samman. Kopplingsgenen specificerar input,
output och vikten av kopplingarna. Kopplingsgenen innehåller också en binär status huruvida koppingen
i fråga används eller inte. Strukturen på nätverket kan förändras på två sätt; antingen så läggs en gen för
att lägga till koppling som då kopplar samman två nodkopplingar där sammankoppling saknas. Den kan
också lägga till en nod då en ny nod placeras istället för en koppling och två nya kopplingar läggs till i
genomet. Detta gör det möjligt att direkt lägga till nya noder i nätverket. Denna möjlighet att utöka
genomen med kopplingar och noder gör att olika genom kan skilja sig i storlek.
Detta skulle kunna leda till problem när man ska korsa gener, och av denna anledning har man lagt till
ett globalt innovationsnummer i varje ny gen. Varje gång en koppling eller ny nod skapas så får genen
för förändringen ett nummer som är unikt i just det genomet. Detta ger skapar information om varje
genoms historia och gör det möjligt att följa dess utveckling. Detta gäller för alla genom, så individer
5
Johan Felixsson
johfe709
med samma antal gener i sina genom kan matchas mot varandra. I genom som inte matchar varandra
markeras gener som disjoint om de ligger innanför den det mindre genomets högsta
innovationsnummer och som excess om det ligger utanför. Dessa gener saknas alltså och i dessa fall tas
alltid genen från det genom som har genen. Om de olika genomen är matchade så tas dom
slumpmässigt från det båda generna det vill säga föräldrarna. Avkomman kommer då ha antingen en
mer komplett uppsättning gener i genomet eller bara en blandning av gener från föräldrarna. Denna
metod gör gen matchning enkel och kräver ingen större analys. Då innovationsnumren tillförs vid varje
förändring i alla genom så kommer förändringarna med samma nummer i olika genom påverka samma
sak i individen.
2.2.2 Skydda nya genom
Denna metod ger en stor variation i genomen hos individerna i populationen. Detta leder dock till ett
problem då det försvårar innovation när spridning i genomen storlek förekommer. Nya gener gör ofta en
individ mindre lämpad än den var innan genen tillfördes, eller gör att den har lägre fitness med ett annat
ord. Den har helt enkelt inte fått en chans att anpassa sig än. Så gener som skulle kunna vara viktiga för
populationens utveckling kan försvinna för att individer på låg fitness väljs bort. För att förhindra att
detta händer så har man även artbildning i NEAT. Med hjälp av de globala innovationsnumren och
antalet gener som är disjoint och excess kan man med nedanstående formel räkna ut hur lämpade två
genom är att bilda en avkomma. Genom som ligger nära varandra har lättare att paras och på detta vis
så har små genom en större chans att få utvecklas i en långsammare takt, och det finns också ett
tröskelvärde som hindrar genom som skiljer sig för mycket att bildar en avkomma tillsammans.
δ är skillnaden mellan de olika genomen, E är excess, D är disjoint,
är den genomsnittliga vikten
hos de matchade vikterna. c1, c2 och c3 används för att justera de olika faktorernas vikt i uträkningen. N
är storleken på det större genomet och används för att normalisera genomstorleken. δt sätts som
tröskelvärde för att avgöra om de olika genomen kan bilda en avkomma
När NEAT avkommor bildas i NEAT så används explicit fitness sharing, vilket innebär att hela
populationen av en art delar på fitness. Ju fler individer en viss art har desto lägre blir artens fitness.
Detta förhindrar att en art med hög fitness slår ut alla andra arter och på så sätt försämrar
möjligheterna till vidare utveckling av alla arter. När själva avkomman bildas så slås slumpmässiga
genom från en viss procentsats av de mest lämpade individerna i en art ihop och ersätter hela artens
population. Antalet individer som ska tillsättas i en art bestäms av följande formel:
är den genomsnittliga fitnessen hos den aktuella arten,
den genomsnittliga fitnessen
hos hela populationen av alla arter och |P| är antalet individer i den totala mängden individer i hela
k
6
tot är
Johan Felixsson
johfe709
populationen av alla arter. På detta sätt får man ut en lämplig mängd individer för en vis art utan att den
totala populations fitness faller för lågt.
2.2.3 Minimera sökdjup
NEAT utgår alltid från enkla neurala nätverk där input direkt påverkar output utan några mellanliggande
dolda noder. Nya noder tillkommer allt eftersom genomet utvecklas och sturkturerna utvärderas
kontinuelligt och plockas bort om de är olämpliga. Detta till skillnad från andra TWEANN-metoder som
börjar med ett slumpmässigt antal noder och därför kan få onödiga strukturer, utan möjlighet att på ett
smidigt sätt kunna minska komplexiteten. NEAT har därför alltid enklare strukturer att arbeta med i
jämförelse med andra metoder som förändrar topologi och vikter.
4. reNEAT
reNEAT, som står för Real-Time Neuroevolution of Augumenting Topologies är vidareutvecklad version
av NEAT som är gjord för att fungera i realtidsmiljöer. För detta så har vissa saker ändrats. I NEAT byts
hela populationen ut vid varje ny generation och den nya generationen är baserad på de individer med
bäst fitness i den tidigare generationen. I rtNEAT så sker generationsskiftet mindre dramtiskt, där den
individ med sämst fitness plockas bort ur populationen och ersätts med en avkomma från de individer i
populationen med bäst fitness. Livslängden för en generation eller, i rtNEAT, en individ bestäms av en
klocka. När en viss tid gått så skapas en avkomma och den sämsta individen plockas bort. rtNEAT sköter
detta med hjälp av en bestämd process och ett antal formler som presenteras nedanför.
Steg 1: Avlägsna den sämsta avkomman
För att kunna bibehålla möjligheterna för vidare utveckling av genomen så måste vissa regler följas när
man väljer ut vilken individ som ska avlägsnas från populationen. Individernas nivå av fitness delas
mellan alla i arten, så individen som ska tas bort måste ha den sämsta fitnessen efter att detta
justrerats, då storleken på individens artpopulation spelar in. Detta är, som tidigare nämnt, för att
förhindra att nya individer plockas bort för tidigt. rtNEAT tar också hänsyn till hur länge individen har
levt, då unga individer annars skulle plockas bort utan att få en chans att visa hur lämpad den är. När
dess krav är uppfyllda och den sämst lämpade individen är lokaliserad tas den bort.
Steg 2: Räkna om artens fitnessmedelvärde
Eftersom fitness delas mellan alla individer i en arts population så är det viktigt att uppdatera denna, då
föräldrarna till den nya avkomma bestäms utifrån fitnessvärdet.
Steg 3: Välja föräldrarnas art
Formeln för att räkna ut en arts population som används i NEAT fungerar inte riktigt på samma sätt. Då
hela populationen ersätts vid generationsskiftet i NEAT och endast en individ i taget fungerar inte
formeln
7
Johan Felixsson
johfe709
Istället används formeln
S k är i denna formel antalet individer i en viss art. Med denna kan man med hjälp av sannolikhet få fram
från vilken art föräldrarna bör väljas. Detta för att ge den spridningen och möjligheten innovation och
utveckling som NEAT ger, även i realtid.
Steg 4: Dynamisk kompatibilitetströskel
δt som används som tröskelvärde i NEAT för att avgöra om två genom skiljer sig för mycket från varandra
är i som en variabel. rtNEAT försöker att hålla antalet arter konstant, vilket det gör genom att justera δt .
Är det för många arter så öka tröskelvärdet för att låta individer ansluta sig till en art, medan om det är
få arter så sjunker tröskelvärdet för att tvinga fram nya arter, då nya arter skapas om en individ inte
passar in i någon av de existerande arterna. Den ändring av artstrukturen börjar inte verka förrän hela
populationen går igenom denna beräkning.
Steg 5: Ersätt den borttagna individen
Individen som tog bort kan nu ersättas. Hur detta
sker variera från miljö till miljö. Det nya genomet kan
i ett spel aningen ersätta ”hjärnan” i det gamla
genomet kropp, eller helt enkel döda kroppen och
återvända i en ny. I spelet NERO som ska beskrivas
har nedanför så ersätt både hjärna och kropp
samtidigt.
Förutom dessa skillnader så måste även tiden mellan
varje generationsbyte bestämmas då detta sker i
realtid. Detta kan göras av spelaren. Det bör has i
åtanke hur länge varje generation ska leva; har man
för kort tid hinner inte nya individer utvecklas och har
man för lång så tar utvecklingen av populationen för
lång tid.
Figur 1 Illustration av uppkomsten av en ny individ. Den sämsta
i populationen tar bort och två av de bästa får bli föräldrar till
en ny individ
5. NERO
NeuroEvolving Robotic Operatives är ett RTT-spel baserat helt och hållet på maskininlärning. RTT står för
Realtime Tactical och fokuserar på enheternas rörelse på slagfältet och saknar resurshantering som finns
i mer traditionella Realtime Strategy-spel . I NERO tar spelaren rollen som tränare eller instruktör och
ska träna en grupp med robotar att lära sig gå, skjuta och senare avancerade stridstaktiker.
8
Johan Felixsson
johfe709
5.1 Robotic Operatives
Robotarna är spelet representation av agenter och varje robot innehåller ett genom som kan evolvera
individuellt. Roboten har ett antal sinnen eller sensorer som ger dem information om omgivningen, det
vill säga inputvärden. Totalt har de fyra sensorer:
Radar som gör att det kan känna av var fienden är i
360° runt roboten. Radarn är uppdelad i sektorer och
kan känna av avståndet till fienden. Ju närmare en
fiende är desto starkare input ger sensorn, vilket kan
påskynda aktiveringen av eventuell nod som den är
kopplad till.
Objektdetektor med avståndsmätare som skicka ut i
ett antal strålar från roboten. Med hjälp av dessa kan
roboten veta om det finns väggar eller andra hinder och Figur 2. Ett exempel på ett nätverk I en av agenterna,
med input från sensorerna near och de olika outputen
navigerar i världen.
uppe
Målangivare som berättar om de har en fiende i sin
skottlinje.
Sensorer för fiendens skottlinje och eld som används för att veta när de kan bli beskjutna. Den
känner även vilken bana de närmaste fiendens kulor har, vilket kan vara vitalt för att undvika
dessa.
Utifrån dessa kan robotarnas agera på fem olika sätt; gå fram, bak, vänster, höger eller skjuta. Dessa är
alltså agenternas outputs.
5.2 Kontroller
Spelare kan inte direkt kontrollera sina
robotar mer än att man kan sätta ut en flagga
som i sig är ganska meningslös.
Istället kontrollerar denne ett antal reglage
som antingen belönar eller bestraffar
agenterna för ett visst beteende. Beteende som
kan belönas eller bestraffas är; undvikande av
inkommande eld, eldgivning, rörelse,
framryckning mot flaggan, sammanhållning
med robotar på det egna laget samt
framryckning mot fienden.
Figur 3. Kontrollerna för NERO. De gröna reglagen kontrollerar hur
olika beteenden från agenterna ska belönas eller bestraffas dvs få
högre eller lägre fitness. Från vänster: undvikande av inkommande
eld, eldgivning, rörelse, framryckning mot flaggan,
sammanhållning med robotar på det egna laget samt
framryckning mot fienden.
5.3 Träning
Spelet delas in i två olika lägen, där det första är träningsläget. Här har spelaren ett öppet fält utan
fiender eller hinder. Här kan han placera sin fabrik som är den punkten som hans robotar kommer dyka
9
Johan Felixsson
johfe709
upp. Antalet robotar bestämmer spelaren, då det beror på hur kraftig datorn denne har. Normalt brukar
det ligga mellan 50 upp till 200. När robotarna anländer har det endast den enklaste formen av neurala
nätverk, vilket visar sig genom att de springer runt fullständigt planlöst. Här måste spelaren träna sina
robotar till att göra vissa basala handlingar där en lämplig att börja med är att få dem att gå till en
bestämd punkt. Detta görs lättast genom att placera ut flaggan och höja reglaget som ger högre fitness
för att avancera mot flaggan. Efter ett par minuter kommer det ha kommit nya generationer robotar ha
anlänt till slagfältet som kommer vara avkommor utav de robotar som hade högst fitness, alltså de
robotar som avancerade mot flaggan. Detta kommer leda att efter ett par generationer kommer alla
robotar avancera mot flaggan. Här ifrån kan man fortsätta träna sina robotar. Till spelaren förfogande
har han väggar han kan sätta upp för att träna dem att navigera kring hinder och även olika typer av
fiender. Dessa fiender kan antingen vara stationära mål som inte gör något motstånd, eller mer
avancerade som rör sig i bestämda mönster eller siktar in sig på spelaren robotar. Genom att konstruera
mer och mer avancerade övningar kan spelare få sina robotar att agera på ett önskat vis. Robotarna kan
belönas för att skjuta på fienden och hålla sig i rörelse vilket ger spelaren robotar som på avstånd
beskjuter fienden samtidigt som de försöker undvika att bli beskjutna. Han kan också skapa robotar som
avancerar rakt mot fienden utan tanke på självbevarelse. Möjligheten att både belöna och bestraffa
robotarna ger en mängd möjligheter. Spelare kan till exempel träna robotar som får låg fitness av att
avancera mot flaggan och får då möjligheten att markera farliga områden med flaggan för att robotarna
inte ska gå dit.
Spelaren har också möjlighet att själv döda en robot som uppvisar ett icke önskvärt beteende. Han kan
även ersätta alla robotar samtidigt med genomet från en robot som presterar särskilt väl. Genom att
göra detta så klonas robotens genom till samtliga robotar och ger en nu utgångspunkt i evolutionen.
Spelet erbjuder även möjligheten till att använda milestoning method. Denna funktion gör att gener från
gamla robotar kan sparas och blandas in i genomet för robotar flera generationer senare. En jämförelse
skulle vara att en människa skulle gå tillbaka och ta gener från en grottmänniska för att bättre kunna
hantera kallt klimat. Denna funktion gör det möjligt att på ett bra sätt kunna träna robotarna till att
genomföra flera olika handlingar som annars skulle vara svåra att få fram, då robotarna tenderar till att
glömma bort ett visst beteende när det ska lära sig ett annat.
När spelaren har fått fram robotar han är nöjd med kan han spara dessa och gå vidare till Battle mode.
5.4 Battle mode
Detta läge är själva spelet. Spelaren får här sätta ihop fyra grupper om fem robotar som ska forma en
pluton, det vill säga 20 robotar totalt. Det kan antingen vara olika robotar som agerar olika eller kopior
på samma robot om spelaren är särskilt nöjd med någon särskild. Med denna pluton med robotar kan
han antingen kämpa mot de robotar som programmerarna skicka med i spelet eller mot en annan
spelare via nätverk eller internet. Matcherna är ganska enkla och vinnaren bestäms av den som
överlever eller, i scenariot att robotarna bekämpar varandra, den som har flest robotar kvar när
matchen är slut. Under matcherna kan spelarna inte göra mer än placera ut deras enda flagga och
hoppas robotarnas träning är tillräcklig.
10
Johan Felixsson
johfe709
11
Johan Felixsson
johfe709
6. Avslutning
NERO är ett mycket intressant sätt att visa möjligheterna med genetiska algoritmer, samtidigt som det
är ett mycket underhållande spel. Min personliga bedömning är att de fortfarande är en bit kvar innan
metoder som rtNEAT kan slå på den vanliga marknaden mot de traditionella metoderna att skapa spel,
men det öppnar upp nya möjligheter och intressanta tankar.
12
Johan Felixsson
johfe709
Litteraturförteckning
Böcker
Russell, S., & Norwig, P. (2003). Artificial Intelligence: A modern approach. New Jersey: Pearson
Education, Inc.
Artiklar
D´Silva, T., Janik, R., Chrien, M., Stanley, K. O., & Miikkulainen, R. (2005). Retaining Learn Behavior
During Real-time Neuroevolution. Austin, Texas, USA.
Stanley, K. O., & Miikkulainen, R. (2002). Effcient Reinforcement Learning through Evolving Neural
Network Topologies. Austin, Texas, USA.
Stanley, K. O., Miikkulainen, R., & Bryant, B. D. (2005). Evolving Neural Network Agents in the NERO
Video Game. Austin, Texas, USA.
Internet
http://nn.cs.utexas.edu/index.php
http://www.nerogame.org
13