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