<<

Universitat Politecnica` de Catalunya

Grau en Enginyeria Informatica`

Especialitat en Computacio´

TFG - Treball Final de Grau

Estudi de l’algoritme NEAT aplicat als videojocs

Autor: Mario Fernandez´ Villalba

Director: Codirector: Luis Antonio Belanche Munoz˜ Ren`e Alquezar Mancho Dept. de Ciencies` de la Dept. de Ciencies` de la Computacio´ Computacio´

Data de defensa: 23 d’octubre de 2018 Agra¨ıments

Voldria agrair aquest projecte primerament a tots els professors de la Facultat d’Inform`aticade Barcelona que varen aconseguir convertir un home perdut en la vida a un inform`aticde cap a peus.

Tamb´evoldria agrair-lo als meus amics i companys de la facultat: Carlos, Juan Miguel, Carlota, David, Jordi, Didac, ... S´eque no esteu tots per`oja sabeu qui sou!

I en ´ultimlloc per`ono menys important, a la meva fam´ılia,que van tenir que aguantar el so que produ¨ıaal teclejar a altes hores de la nit durant setmanes.

Gr`aciesa tots pel vostre suport!

1 ´Index

1 Introducci´o 4

1.1 Context...... 4

1.2 Actors implicats...... 7

1.3 Abast...... 7

2 Gesti´odel projecte9

2.1 Metodologia de treball...... 9

2.2 Eines utilitzades...... 9

2.3 M`etode de validaci´o...... 9

2.4 Planificaci´o...... 10

2.5 Integraci´ode coneixements...... 17

2.6 Lleis i regulacions...... 19

3 El videojoc i la seva implementaci´o 20

3.1 Descripci´odel joc...... 20

3.2 Accions disponibles...... 20

3.3 Elements del joc...... 20

3.4 Sistema de puntuaci´oi nivells...... 22

3.5 Game Over...... 23

3.6 Implementaci´odel joc Tetris...... 23

4 Funcionament d’una xarxa neuronal i implementaci´od’una xarxa neuronal simple 28

4.1 Processament de les dades...... 28

4.2 Entrenament de la xarxa neuronal...... 28

4.3 La import`anciadel bias...... 29

4.4 Implementaci´od’una xarxa neuronal simple...... 29

5 L’algoritme NEAT i la seva implementaci´o 31

5.1 Definicions dels elements propis d’un algoritme gen`etic...... 31

2 5.2 Representaci´ogen`etica...... 31

5.3 Operadors gen`eticsi la innovaci´o...... 32

5.4 Especiaci´o...... 34

5.5 Generaci´ode nova poblaci´o...... 34

5.6 Implementaci´ode l’algoritme NEAT...... 35

6 Experimentaci´oamb l’algoritme NEAT 39

6.1 Bucle principal d’execuci´o...... 39

6.2 Experimentaci´osobre la entrada...... 40

6.3 Experiments sobre els par`ametresde l’algoritme...... 40

7 Pressupost i sostenibilitat 48

7.1 Pressupost...... 48

7.2 Sostenibilitat...... 53

8 Conclusions, possibles millores i opini´opersonal 55

8.1 Conclusions...... 55

8.2 Possibles millores...... 55

8.3 Opini´opersonal...... 56

3 1 Introducci´o

Un dels temes recurrents a les pel·l´ıculesde ci`encia-ficci´o´esla intel·lig`enciaartificial. Podem veure en aquestes pel·l´ıculesIAs que es rebel·len contra els humans, altres que recullen escom- braries... Aleshores, podria ser capa¸cun ordinador d’aprendre a jugar des de zero a un videojoc? L’objectiu d’aquest treball ´esrespondre aquesta pregunta.

Per fer aix`oes vol estudiar l’algoritme gen`eticNEAT al videojoc Tetris. Concretament, es volen estudiar la influ`enciadels par`ametresde l’algoritme en l’acompliment d’aquest a l’hora de jugar. Aix´ımateix, tamb´ees vol implementar tant l’algoritme NEAT com el joc Tetris.

S’ha aconseguit implementar de manera satisfact`oriatant NEAT com el videojoc Tetris utilit- zant Visual Studio i Unity. Respecte als par`ametres,s’ha comprovat mitjan¸cant l’experimentaci´o que par`ametrescom el nombre d’individus de la poblaci´oi les probabilitats de mutaci´otenen un gran impacte en la generaci´od’individus capa¸cosde jugar de manera satisfact`oriaal joc.

1.1 Context

Abans d’anar en profunditat amb les explicacions del videojoc i de l’algoritme es necessari obtenir una mica de context.

1.1.1 Evol·luci´ode la IA en els jocs

Durant els ´ultimsanys la intel·lig`enciaartificial (IA a partir d’ara) ha passat de ser un concepte cl`assicde la ci`encia-ficci´oa estar arrelada a les nostres vides. Les seves aplicacions s´onquasi infinites, i no paren de cr´eixercada dia. D’entre elles, cal destacar l’aplicaci´oen els jocs i posteriorment, videojocs.

Una de les primeres vegades de la que es t´econst`anciaque la IA va ser aplicada als jocs va ser sobre l’any 1950, quan un programa d’escacs d’ordinador podia presentar un bon desafiament a un jugador experimentat [1]. Un altre exemple destacable de la IA aplicada als videojocs s´onels jocs arcade com Space Invaders, on els enemics alteraven els seus patrons de moviment dependent del nivell de dificultat; o Pac-Man, que va introduir diferents IAs als enemics, els fantasmes.

Molt ha passat des d’aleshores; l’any 2017 una IA desenvolupada per Google anomenada AlphaGo, va ser capa¸cde v`encer al campi´omundial del Go, un joc tradicional xin`esen un confrontament a 3 partides [2]. Una de les eines utilitzades per aquesta eina son les ben conegudes xarxes neuronals, les quals introduirem en breu. Per`oabans d’aix`o...Com ha sigut l’evoluci´ode NEAT als videojocs?

El mateix creador de l’algoritme NEAT, Kenneth O. Stanley, va fer una demostraci´opr`actica d’aquest en un videojoc programat per ell anomenat Neuroevolving Robotic Operatives (NERO) l’any 2005. En aquest joc, el jugador entrena un equip de robots virtuals per a competir contra altres equips controlats per altres jugadors. Va concloure que aquest joc demostrava la possibilitat de crear videojocs amb agents que evolucionen i s’adapten a temps real. [3].

Un altre joc desenvolupat per Stanley va ser Galactic Arms Race. En aquest joc el jugador controla una nau que va adquirint armes que han evolucionat a partir d’altres utilitzant infor- maci´odel jugador i NEAT. Aquest joc va ser llen¸cata la coneguda plataforma online Steam, demostrant aix´ıque ´espossible crear videojocs que generen el seu propi contingut per satisfer als jugadors, a la mateixa hora que es redueixen els costos de producci´oi s’augmenta la rejugabilitat

4 dels jocs [4].

L’any 2015 l’usuari de Youtube SethBling va postejar el v´ıdeo”MarI/O - Machine Learning for Video Games”[5], en el qual mostra l’aplicaci´ode l’algoritme NEAT en el videojoc Super Mario World. Sense cap coneixement previ d’aquest joc, la xarxa neuronal va ser capa¸cde superar el nivell Donut Plains 1 de l’esmenat joc despr´esde 34 generacions de poblacions.

Hi ha molts m´esexemples d’aplicacions de NEAT als videojocs, per`oal ser totes similars no cal incloure-les en aquest document.

1.1.2 Bases de les xarxes neuronals

Una xarxa neuronal ´esun model computacional que busca imitar el comportament dels cervells animals [6]. A l’igual que les xarxes neuronals que componen els nostres cervells, les xarxes neuronals artificials estan compostes per neurones. Una neurona ´esuna unitat b`asicade c`alcul de la xarxa neuronal que genera una sortida a trav´esd’una entrada assignada. Aquestes estan connectades entre si amb connexions ponderades i s’organitzen en forma de capes dins de la xarxa neuronal, de les quals es destaquen la d’entrada i la de sortida. A les capes restants interm`edies se les anomena capes ocultes. Anomenem topologia al conjunt de neurones i les connexions que les connecten. Podem veure aquesta estructura a la Figura1.

Figura 1: Estructura d’una xarxa neuronal

La seg¨uent pregunta que ens podem fer ´escom funcionen les xarxes neuronals? Es t´ecom a hip`otesique les persones aprenem per repetici´o,i ´esen aix`oen el que es basen les xarxes. Normalment, el proc´esde funcionament d’una xarxa neuronal es compon per dues parts, la d’aprenentatge i la de testing.

Durant la part d’aprenentatge la xarxa es sotmesa a una gran quantitat de dades d’entrada per tal d’aprendre, o en altres paraules, ajustar els par`ametresinterns com les ponderacions de les connexions de la xarxa; per tal d’aconseguir el millor resultat en una tasca encomanada. Durant la part de testing es prova la xarxa entrenada en conjunts de dades diferents dels de l’aprenentatge, per tal d’estudiar el comportament d’aquestes en un cas general. Com a exemple il·lustratiu, AlphaGo va ser entrenat amb 30 milions de posicions de partides jugades per humans per tal d’aprendre a jugar al Go [7].

5 Si encara voleu saber m´essobre les xarxes neuronals, trobareu una explicaci´om´esexhaustiva d’aquestes a la Secci´o4.

Les xarxes neuronals s´onestudiades per un gran nombre de cient´ıfics, on cadasc´ubusca aportar el seu granet de sorra. Durant els diversos anys d’estudi han sorgit diversos models de xarxes neuronals i diversos algoritmes que les modifiquen. Com ja s’ha comentat, en aquest projecte ens centrarem en l’estudi de l’algoritme gen`eticNEAT. Que ´esaleshores un algoritme gen`etic?

1.1.3 Algoritmes gen`etics

Els algoritmes gen`eticss´onuna fam´ıliad’algoritmes d’optimitzaci´oque basen la seva heur´ıstica en la selecci´onatural [8][9]. Concretament, utilitzen les operacions biol`ogiquesde mutaci´o, encreuament i selecci´o.

Aquests algoritmes requereixen dos components principals: una representaci´ogen`eticadel domini de solucions i una funci´ode fitness que avaluar`ael domini de solucions. Un cop satisfets els dos requeriments, el funcionament dels algoritmes ´essimple.

Primerament s’inicialitza una poblaci´ode manera aleat`oria. A continuaci´o,comencem un bucle on s’avalua la poblaci´ogenerada mitjan¸cant la funci´ode fitness, es seleccionen als millors individus i seguidament se li apliquen les operacions biol`ogiquesanteriorment esmentades per tal de generar una poblaci´ofilla, i es torna a repetir el proc´es. Aix`oes far`afins a aconseguir una soluci´o`optimao fins a arribar a un threshold pr`eviament establert per nosaltres. Aquest proc´es ´esvisible a la Figura2.

Figura 2: Cos principal dels algoritmes gen`etics.

1.1.4 Algoritme NEAT

Aplicant els algorismes gen`eticsa les xarxes neuronals el professor Kenneth O. Stanley va desen- volupar l’any 2002 l’algoritme NEuroevolution of Augmenting Topologies, tamb´econegut com a NEAT [10].

Aquest algoritme genera poblacions de genomes que representen topologies de xarxes neu- ronals, i les va alterant durant l’execuci´omitjan¸cant les operacions biol`ogiques dels algoritmes

6 gen`etics.Amb la mutaci´oaconsegueix generar nous nodes o connexions a les topologies, mentre que amb l’encreuament genera una nova topologia a partir de dues topologies pares.

Per a una descripci´oexhaustiva de l’algoritme NEAT consulteu la Secci´o5.

1.2 Actors implicats

1.2.1 Desenvolupador

El desenvolupador del projecte ´esl’encarregat de desenvolupar aquest en tots els seus `ambits: programaci´o,documentaci´o,estudi, etc. Aix´ımateix ´esresponsable de l’organitzaci´odel projecte i de complir totes les dates d’entrega, aix´ımateix com mantenir una bona comunicaci´oamb el director del projecte. En aquest projecte Mario Fern´andezVillalba, estudiant de quart d’any de la Facultat d’Inform`aticade Barcelona exerceix el rol de desenvolupador.

1.2.2 Director

El director del projecte ´esl’encarregat d’assessorar el desenvolupador en tot all`orelatiu al desen- volupament de les compet`enciest`ecniquesi transversals associades al projecte, de fer el seguiment i monitorar el projecte i d’avaluar les fites que li corresponguin. Concretament Luis Antonio Be- lanche Mu˜noz,professor de la Facultat d’Inform`aticade Barcelona especialitzat en Machine Learning, ha actuat com a director del projecte.

1.2.3 Codirector

El codirector del projecte ´esl’encarregat de fer les funcions del director del projecte en cas que aquest no pugui realitzarles. Concretament Ren`eAlquezar Mancho, cap d’estudis de la Facultat d’Inform`aticade Barcelona ha actuat com a codirector del projecte.

1.2.4 Beneficiaris

Com que en aquest projecte no s’est`adesenvolupant cap producte no existeix la figura de bene- ficiari per se. Tot i aix`o,fer que una xarxa neuronal aprengu´es aut`onomament a jugar a un joc donat sense cap coneixement previ d’aquest podria proporcionar als creadors de videojocs noves possibilitats, com per exemple implementar companys d’equip que evolucionessin a mesura que ho va fent el jugador, la creaci´od’enemics infal·libles, etc.

1.3 Abast

1.3.1 Abast original

En la primera part del projecte es va pensar en implementar dos jocs senzills sobre els quals provar l’algoritme. Aquests jocs eren un scroller 2D tipus Mario Bros i un joc de carreres amb vista ocell. La implementaci´os’anava a fer mitjan¸cant el motor gr`afic Unity.

7 Aquests jocs anaven a disposar d’un nivell b`asicper entrenar i evolucionar les xarxes i nivells de testing, que idealment serien generats proceduralment.

Un cop implementats els jocs i testejat el seu funcionament, es passaria a la segona fase del projecte. En aquesta s’escollirien les entrades i les sortides de la xarxa neuronal. Com a exemple, les entrades podien ser les posicions dels diversos agents d’un joc (enemics, jugador, escenari, etc.) en un moment donat i les sortides el control (moviment, atacar, etc.) a introduir al joc en resposta a l’entrada. A continuaci´os’anava a dissenyar una xarxa neuronal simple no evolutiva per testejar el correcte funcionament del bucle principal (extracci´ode l’entrada, c`alcul de la sortida, redirecci´ode la sortida al joc). Aquesta podria ser implementada en el llenguatge de Unity C, o be es podrien haver estudiat opcions per executar codi escrit en altres llenguatges de programaci´o.

A la tercera fase primerament s’establirien diferents elements de l’algoritme NEAT: la funci´o de fitness, la condici´ode parada, etc. I posteriorment es passaria a la seva implementaci´o.Una vegada implementat, es passaria a provar l’execuci´ode l’algoritme. Idealment aquesta s’execu- taria en una m`aquinaamb alta pot`enciade c`alcul,com per exemple un cl´usterproporcionat per la facultat.

A la fase final del projecte s’anava a estudiar els par`ametresde l’algoritme NEAT que maxi- mitzaven el seu acompliment en els diferents jocs. S’anava a respondre preguntes b`asiquescom ”Estic utilitzant les entrades correctes?”, ”Es´ correcte la funci´ode fitness escollida?”, etc.

1.3.2 Abast final

En la primera part del projecte es va implementar el videojoc Tetris utilitzant el llenguatge de programaci´oC# i Unity. Aquest joc consisteix en un nivell infinit en el qual el jugador ha de sobreviure el m`aximpossible.

Un cop implementat el joc i testejat el seu funcionament, es va passar a la segona fase del projecte. En aquesta fase es van escollir les entrades i sortides de la xarxa neuronal. Les entrades escollides van ser el contingut de les diferents caselles del joc, la pe¸caactual i la seva posici´o.Les sortides escollides van ser els diferents controls del joc. A continuaci´oes va dissenyar una xarxa neuronal simple no evolutiva per testejar el correcte funcionament del bucle principal (extracci´o de l’entrada, c`alcul de la sortida, redirecci´ode la sortida al joc). Aquesta va ser implementada en el llenguatge de programaci´oC++ utilitzant la llibreria Eigen, que facilita operacions amb matrius.

A la tercera fase es van establir els diferents elements de l’algoritme NEAT: la funci´ode fitness, la condici´ode parada, etc. I posteriorment es va passar a la seva implementaci´o. Una vegada implementat, es va passa a provar el seu funcionament. Finalment va ser executat al ordinador personal del desenvolupador, en comptes de a un cl´usterproporcionat per la facultat.

A la fase final del projecte es van estudiar l’acompliment de NEAT en aprendre a jugar al Tetris. Es van respondre preguntes b`asiquescom ”Estic utilitzant les entrades correctes?”, ”Es´ correcte la funci´ode fitness escollida?”, etc. Mitjan¸cant l’estudi de la influ`enciadels diferents par`ametresdel problema.

8 2 Gesti´odel projecte

2.1 Metodologia de treball

Durant aquest projecte es van utilitzar les metodologies `agils,ja que el temps assignat per aquest ´esbastant limitat; i gr`acies a aquests tipus de metodologies s’aconsegueix detectar errors en la implementaci´or`apidament que en altre cas podrien afectar greument a la planificaci´oi endarrerir el projecte.

Les iteracions en la primera fase del projecte varen ser de duraci´ocurta-mitjana, en cada iteraci´oes buscava desenvolupar una funcionalitat del joc i testejar-la. Durant les posteriors fases les iteracions varen ser m´escurtes, ja que es requeria una base s`olidatant a la implementaci´ode xarxes neuronals com de l’algoritme NEAT degut seu alt cost computacional, i el fet de repetir execucions per errors pot ser molt cost´osen q¨uestions de temps.

2.2 Eines utilitzades

2.2.1 Eines de seguiment

• Git i Github: Es va utilitzar git per mantenir tot el codi i controlar l’evoluci´od’aquest. Aquest ultim punt es va aconseguir sense grans esfor¸cosgr`aciesa la interf´ıciegr`aficade Github. • Trello: Es va utilitzar aquesta aplicaci´oweb per controlar f`acilment les tasques a dur a terme aix´ıcom la planificaci´otemporal.

2.2.2 Eines de desenvolupament

• LATEX: Es va utilitzar Latex per generar tota la documentaci´opertanyent al projecte, ja que aquest proporciona eines per generar textos elegants i uniformes (e.g aquest document). • Unity: Es va utilitzar aquest motor gr`aficper desenvolupar el videojoc degut que aquest incorpora una gran varietat d’eines que agilitzen el desenvolupament de videojocs. • Visual Studio 11: Es va utilitzar aquesta eina per desenvolupar el joc, la xarxa neuronal i l’algoritme NEAT de manera f`acili `agil.A m´es,compta amb potents eines de depuraci´o que varen permetre debuggar r`apidament. • Llibreria Eigen: Es va utilitzar aquesta llibreria per facilitar les operacions matricials re- querides per implementar la xarxa neuronal. • Llibreria Pandas: Es va utilitzar aquesta llibreria per facilitar el processament de les dades obtingudes als experiments, aix´ıcom per mostrar-les de manera gr`afica.

2.3 M`etode de validaci´o

La correcta implementaci´odels jocs es va fer mitjan¸cant l’experi`enciapersonal del propi desen- volupador i d’agents externs jugant a aquest.

La correcta implementaci´ode la xarxa neuronal es va comprovar creant xarxes molt simples amb poques connexions i observant com aquestes activaven correctament les sortides connectades.

9 Les diferents parts que composen l’algoritme NEAT varen ser testejades individualment amb petits tests on es coneixia el comportament esperat. L’entrenament de l’algoritme es va validar mitjan¸cant la funci´ode fitness anteriorment definida, ja que la incrementalitat d’aquesta es un bon indicador de que les xarxes estan aprenent a jugar. Addicionalment, es varen validar els resultats de l’entrenament de NEAT mitjan¸cant el monitoratge d’una partida jugada per aquest.

La validaci´odels estudis dels par`ametresde l’algoritme van ser gr`aficsexhaustius, on es mostren clarament l’influencia dels par`ametresen l’acompliment de NEAT amb diferents com- binacions de par`ametres.

2.4 Planificaci´o

Aquest projecte va comen¸carel 19 de febrer del 2018, i va tenir com a data de fi el dia abans de la defensa d’aquest mateix. En un principi la data de fi estava planificada per a finals de Juny i donava al projecte una durada estimada de 5 mesos. Degut a canvis en la planificaci´o del projecte, la data final d’aquest es va posposar per al 22 d’Octubre. Per tant, la durada del projecte ´esaproximadament 9 mesos.

La planificaci´ooriginal de les diferents tasques a realitzar s’adaptava a als 5 mesos estimats, i en el cas ideal permetia finalitzar el projecte la primera setmana de Juny per tal de tenir un marge per resoldre possibles entrevistos. Per`ocom ja s’ha comentat, degut a motius personals del desenvolupador i a una planificaci´opoc realista del projecte aquesta es va tenir que modificar. Amb la nova planificaci´oles tasques es van distribuir en marges de temps m´esextensos per tal de reduir la carrega de treball per mes.

Per assegurar un desenvolupament s`olidi fluid del projecte es va decidir utilitzar les metodo- logies `agils[11], que destaquen en la detecci´opreco¸cd’errors durant el desenvolupament gr`acies a les iteracions, i d’aquesta manera poder estalviar temps que amb altres metodologies s’hauria invertit en la soluci´od’aquests possibles errors. A m´es,s’ha demostrat que aquest tipus de meto- dologies afavoreixen positivament al desenvolupament de videojocs [12]. Aixi havent-hi allargat la duraci´odel projecte, aquestes han sigut utilitzades durant el desenvolupament d’aquest.

2.4.1 Descripci´ode les tasques

El projecte es divideix en 5 tasques principals: Treball inicial, implementar els videojocs sobre els quals s’aplicar`al’algoritme NEAT, la implementaci´ode la xarxa neuronal, la implementaci´o de l’algoritme NEAT i finalment l’estudi d’aquest.

Treball inicial

En aquesta tasca es va realitzar tot el treball requerit en l’assignatura de GEP. Concretament les subtasques a realitzar seg¨uents:

• Definici´ode l’abast i contextualitzaci´odel projecte • Planificaci´otemporal del projecte • Descripci´ode la gesti´oecon`omicai de la sostenibilitat del projecte • Presentaci´opreliminar

• Plec de condicions

10 • Treball final

B`asicament, el que es busca ´estreballar en tots els aspectes relacionats amb la gesti´oi organitzaci´odel projecte per tal de finalitzar-lo amb `exitdins del temps assignat. Aquesta tasca va comen¸carel dia 19 de Febrer juntament amb el projecte i va finalitzar el dia 9 d’abril de 2018, quan es va dur a terme la presentaci´ooral de GEP.

Els recursos utilitzats en aquesta tasca van ser els seg¨uents:

• Recursos humans – Desenvolupador del projecte: Va ser l’encarregat de definir el projecte, de pla- nificar el temps i de tractar la part econ`omicai sostenible d’aquest. Tamb´eva ser l’encarregat de documentar tot el treball fet. • Recursos de hardware – Ordinador personal: Intel(R) Core(TM) i5-6600 CPU @ 3.30GHz, 8GB RAM, 250GB SSD. Aquest equip es va utilitzar en la totalitat d’aquesta tasca. • Recursos de software – Google Scholar: Aquest buscador va ser utilitzat per la cerca de refer`enciesdurant la tasca. –LATEX: Aquest sistema de preparaci´ode documents va ser utilitzat per documentar tot el treball realitzat en aquesta tasca.

Implementaci´odels videojocs

Inicialment, en aquesta tasca s’anaven a implementaran dos jocs senzills sobre els quals provar l’algoritme. Per`odesgraciadament, aquest era un objectiu poc realista i que requeria de molt treball. Aixi doncs, es va sofrir el risc descrit a la Secci´o ??. Per tal d’arreglar aix`oes va decidir implementar un ´unicjoc, el Tetris.

En aquest conegut joc, el jugador ha d’intentar encaixar diferent peces que van caient de la part superior del nivell. El joc acaba un cop les peces toquen el sostre de la pantalla. Per tal d’evitar aix`o,el jugador ha d’intentar crear una l´ıniade blocs. D’aquesta manera, esmentada l´ıniadesapareixer`a.

Com desenvolupar el joc no ´esl’objectiu principal del projecte, no es va gastar temps en el disseny de la part art´ısticad’aquest. Tot els recursos art´ısticsvaren ser importats del joc oficial de Tetris per a GameBoy.

En la planificaci´ooriginal els jocs anaven a disposar d’un nivell b`asic per entrenar i evolucionar la xarxa neuronal; i de nivells de testing on provar el funcionament de la xarxa i estudiar-la, que idealment anaven a ser generats proceduralment. Amb el joc del Tetris aix`ono te sentit, ja que l’objectiu d’aquest es sobreviure el m`aximtemps possible en un nivell infinit.

Aquesta tasca anava a comen¸carel dia 19 de Febrer juntament amb el projecte i anava a finalitzar el dia 30 de mar¸cde 2018. Amb la nova planificaci´ola tasca va comen¸carel dia 1 de Maig del 2018 i va acabar el dia 1 de Juny del 2018.

Per a una descripci´omes detallada de la implementaci´odel joc, consulteu la Secci´o 3.6.

Els recursos utilitzats en aquesta tasca varen ser els seg¨uents:

11 • Recursos humans

– Desenvolupador del projecte: Va ser l’encarregat d’implementar els dos jocs i de comprovar el seu correcte funcionament. • Recursos de hardware – Ordinador personal: Intel(R) Core(TM) i5-6600 CPU @ 3.30GHz, 8GB RAM, 250GB SSD. Aquest equip va ser l’utilitzat en la totalitat d’aquesta tasca. • Recursos de software

–LATEX: Aquest sistema de preparaci´ode documents va ser utilitzat per documentar tot el treball realitzat en aquesta tasca. – Visual Studio 11: Es va utilitzar aquesta eina per desenvolupar el joc de manera f`acil i `agil.A m´es,compta amb potents eines de depuraci´oque varen permetre debuggar el joc durant el seu desenvolupament. – Unity: Va ser el motor gr`aficutilitzat en desenvolupar el videojoc degut a la amplia varietat d’eines que ofereix per a a quest prop`osit.

Implementaci´ode la xarxa neuronal

En aquesta tasca es va portar a terme la implementaci´od’una xarxa neuronal simple incapa¸c d’aprendre. L’objectiu d’aix`oera provar el correcte funcionament del bucle principal, on s’ex- treuen les entrades de la xarxa d’el videojoc per produir una sortida que es redirigida a aquest mateix videojoc. Concretament, les subtasques a realitzar varen ser les seg¨uents:

• Escollir les entrades i sortides de la xarxa neuronal: Les entrades escollides van ser les diferents altures de les columnes que composen el tauler del joc, la pe¸caactual i la seva posici´o.Les sortides escollides van ser els diferents controls del joc. • Estudiar diferents implementacions de xarxes neuronals: En aquesta tasca es varen adquirir coneixements sobre les diferents maneres d’implementar una xarxa neuronal. Es varen trobar dos possibles: com a operacions entre matrius o com a un graf. Finalment, en aquesta tasca es va decidir implementar-la com a operacions de matrius. • Implementar la xarxa neuronal: Despr´esd’escollir la implementaci´ode la xarxa neuronal es va passar a fer-la efectiva. La xarxa va ser implementada en el llenguatge de programaci´o C++ utilitzant la llibreria Eigen, que facilita operacions entre matrius.

• Testejar el correcte funcionament de la xarxa: Un cop implementada la xarxa es va com- provar el seu funcionament amb xarxes molt simples amb una/cap capa oculta. Aquestes xarxes nom´estenien una sortida activa. D’aquesta manera, estudiar el que estava passant en cada va moment va ser molt simple. Tamb´ees funcionava b´een el bucle principal deixant que jugu´esuna partida sense aprendre.

Aquesta tasca estava planificada per comen¸carel dia 2 d’Abril del 2018 i finalitzar el dia 16 d’Abril del 2018. Amb la nova planificaci´oaquesta tasca va comen¸carel 1 de Juny del 2018 i va acabar el 1 de Juliol del 2018.

Per a una descripci´om´esdetallada de la implementaci´ode la xarxa neuronal utilitzant matrius consulteu la Secci´o 4.4.

Els recursos utilitzats en aquesta tasca van ser els seg¨uents:

12 • Recursos humans – Desenvolupador del projecte: Va ser l’encarregat de dissenyar i implementar la xarxa i la interacci´od’aquesta amb el videojoc. Tamb´eva ser l’encarregat de docu- mentar tot el treball fet. – Director del projecte: Va ser l’encarregat d’assistir al desenvolupador del projecte en el disseny i la implementaci´ode la xarxa neuronal no evolutiva. – Codirector del projecte: Juntament amb el director, va ser l’encarregat d’assistir al desenvolupador del projecte en el disseny i la implementaci´ode la xarxa neuronal no evolutiva. • Recursos de hardware – Ordinador personal: Intel(R) Core(TM) i5-6600 CPU @ 3.30GHz, 8GB RAM, 250GB SSD. Aquest equip va ser utilitzat en la totalitat d’aquesta tasca. • Recursos de software

–LATEX: Aquest sistema de preparaci´ode documents va ser utilitzat per documentar tot el treball realitzat en aquesta tasca. – Visual Studio 11: Es va utilitzar aquesta eina per la xarxa neuronal de manera f`acil i `agil.A m´es,compta amb potents eines de depuraci´oque varen permetre debuggar r`apidament. – Llibreria Eigen: Es va utilitzar aquesta llibreria per facilitar les operacions matri- cials requerides per implementar la xarxa neuronal.

Implementaci´ode l’algoritme NEAT

En aquesta tasca es va dissenyar, implementar i testejar l’algoritme NEAT. Concretament, les subtasques a realitzar varen ser les seg¨uents:

• Establir els elements b`asicsd’un algoritme gen`etic:En aquesta subtasca es van establir els diferents elements b`asicsd’un algoritme gen`etic.Aquests elements s´onla funci´ode fitness, la condici´ode parada i la representaci´ode la poblaci´o.

– La funci´ode fitness determina com de bona ´esun organisme d’una poblaci´o.En efectes pr`acticssobre una xarxa neuronal, indica com de bon ´esl’acompliment d’aquesta en el joc. – La condici´ode parada d’un algoritme gen`eticdetermina en quin punt s’ha de deixar de generar noves generacions. Per al nostre algoritme indica en quin moment cal parar de modificar la topologia de les xarxes. – La representaci´ode la poblaci´oindica com es codifica cada organisme de la poblaci´oi conseq¨uentment com evoluciona durant l’execuci´od’un algoritme gen`etic.Cal destacar que l’algoritme NEAT la caracter´ısticaa evolucionar ´esla topologia.

• Estudiar diferents implementacions de l’algoritme NEAT: En aquesta fase es varen estudiar les diferents implementacions existents de l’algoritme NEAT. • Implementar l’algoritme NEAT: Malauradament, no es va escollir cap implementaci´oi es va tenir que fer des de zero. • Testejar el correcte funcionament de la xarxa: Finalment, es va passar a provar el correcte funcionament de l’algoritme. Concretament es van fer proves curtes on es comprovava la correcta evoluci´ode les esp`eciesque aconsegueixin m´espuntuaci´ode la funci´ode fitness.

13 Estava previst que aquesta tasca comen¸car`ael dia 17 d’Abril del 2018 i finalitzar`ael dia 1 de Maig del 2018. Finalment, aquesta tasca va comen¸carel dia 1 de Setembre del 2018 i va finalitzar el dia 20 de Setembre del 2018.

Per a una descripci´om´esdetallada de la implementaci´ode l’algoritme NEAT consulteu la Secci´o 5.6.

Els recursos utilitzats en aquesta tasca s´onels seg¨uents:

• Recursos humans – Desenvolupador del projecte: Va ser l’encarregat de dissenyar, implementar i testejar l’algoritme NEAT. Tamb´eva ser l’encarregat de documentar tot el treball fet. • Recursos de hardware – Ordinador personal: Intel(R) Core(TM) i5-6600 CPU @ 3.30GHz, 8GB RAM, 250GB SSD. Aquest equip va ser utilitzat per a la implementaci´oi documentaci´o pertanyent a aquesta tasca. • Recursos de software – Google Scholar: Aquest buscador va ser utilitzat per la cerca de refer`enciesdurant la tasca. –LATEX: Aquest sistema de preparaci´ode documents va ser utilitzat per documentar tot el treball realitzat en aquesta tasca. – Visual Studio 11: Es va utilitzar aquesta eina per desenvolupar l’algoritme NEAT de manera f`acili `agil. A m´es,compta amb potents eines de depuraci´oque varen permetre debuggar r`apidament.

Estudi de l’algoritme NEAT

A la tasca final del projecte es varen estudiar els diferents par`ametresde l’algoritme NEAT. Es van respondre preguntes b`asiquescom ”Estic utilitzant les entrades correctes?”, ”Es´ correcte la funci´ode fitness escollida?”, etc. Concretament, les subtasques a realitzar varen ser les seg¨uents:

• Dissenyar experiments: En aquesta subtasca es van dissenyar una s`eried’experiments, en els quals es van intentar resoldre q¨uestionscom per exemple, quina influ`enciat´el’entrada de les xarxes neuronals en el seu acompliment. • Executar els experiments: Un cop dissenyats els experiments es va passar a la seva execuci´o. Es va estudiar com influ¨ıendiferents par`ametresa diferents poblacions en l’acompliment de la xarxa en arribar a la puntuaci´om`aximapossible. • Analitzar els resultats dels experiments: Un cop executats els experiments, es van recopilar els resultats i es va passar al seu posterior an`alisi. Aquests van ser realitzats mitjan¸cant el llenguatge de programaci´oPython i la llibreria pandas. Es van representar els resultats gr`afiquesil·lustratives i es van extraure conclusions d’aquests. Per a m´esdetalls sobre els experiments consulteu la Seccio6.

Estava previst que aquesta tasca comen¸car`ael dia 2 de maig del 2018 i finalitzar`ael dia 31 de maig del 2018. Finalment, aquesta tasca va comen¸carel dia 20 de Setembre del 2018 i va durar fins al final del projecte.

Els recursos utilitzats en aquesta tasca s´onels seg¨uents:

14 • Recursos humans

– Desenvolupador del projecte: Va ser l’encarregat de dissenyar i implementar els diferents experiments aix´ıcom interpretar els resultats d’aquests. Tamb´eva ser l’en- carregat de documentar tot el treball fet. – Director del projecte: Va ser l’encarregat d’assistir al desenvolupador del projecte en el disseny, implementaci´oi interpretaci´odels experiments.

• Recursos de hardware – Ordinador personal: Intel(R) Core(TM) i5-6600 CPU @ 3.30GHz, 8GB RAM, 250GB SSD. Aquest equip es va utilitzar per a la implementaci´oi documentaci´o pertanyent a aquesta tasca.

• Recursos de software – Google Scholar: Aquest buscador va ser utilitzat per la cerca de refer`enciesdurant la tasca. –LATEX: Aquest sistema de preparaci´ode documents va ser utilitzat per documentar tot el treball realitzat en aquesta tasca. – Visual Studio 11: Es va utilitzar aquesta eina per desenvolupar els experiments de manera f`acili `agil. A m´es,compta amb potents eines de depuraci´oque permetran debuggar r`apidament. – Llibreria pandas: Es va utilitzar aquesta llibreria de Python per tractar les dades i mostrar-les en gr`afiques.

2.4.2 Temps estimat

A la Taula1 podem observar una estimaci´otemporal en hores de les diferents tasques.

Tasca Temps estimat (h) Treball inicial 80 Implementaci´odel videojoc 60 Implementaci´ode la xarxa neuronal 120 Implementaci´ode l’algoritme NEAT 120 Estudi de l’algoritme NEAT 100 Total 480

Taula 1: Temps estimat per a cada tasca.

15 2.4.3 Diagrama de Gantt

A la Figura3 podem observar un diagrama de Gantt on estan representada la planificaci´ooriginal, mentres que a la Figura4 est`arepresentada la planificaci´oactual.

Figura 3: Diagrama de Gantt de la planificaci´ooriginal del projecte

Figura 4: Diagrama de Gantt de la planificaci´oactual del projecte

2.4.4 Valoraci´od’alternatives i pla d’acci´o

Durant el desenvolupament d’un projecte ´esnormal que puguin oc´orrercerts imprevistos i des- viacions que afectin la planificaci´otemporal del projecte. A continuaci´oes parlar`asobre algunes d’aquestes situacions i de quin pla d’acci´oes va preveure seguir per tal de solucionar-lo.

Bugs

Que els bugs i el desenvolupament software vagin lligats ´esun fet inq¨uestionable.Durant el desenvolupament varen sorgir bugs que van estancar el projecte fins que van ser solucionats. Ja

16 que ´esimpossible programar sense cometre errors, aquest problema es va solucionar parcialment amb l’´usde metodologies `agils.Aquestes fan que el desenvolupament es porti a terme en petites iteracions, que faciliten la detecci´oi correcci´ode bugs.

Limitacions t`ecniquesa l’hora d’implementar els videojocs

Pel fet que el desenvolupament dels videojocs es fa sense la supervisi´od’un expert en la mat`eria,ja que el desenvolupament d’aquests no ´esel target principal del projecte, podrien haver sorgit certes limitacions t`ecniques.Donat el cas es buscaria ajut de professors de la universitat amb coneixements en videojocs; aix´ıcom en tutorials online. En cas que l’ajut extra no fos suficient i no es pogu´esassolir la planificaci´otemporal, s’estudiaria reduir el nombre de jocs de dos a un de sol.

Aquest problema va sorgir. La soluci´ova ser reduir el nombre de jocs a un. A m´es,tamb´ees va tenir que sol·lucionar un problema de memory leaks de punters mitjan¸cant les eines de debug de Visual Studio 11.

Limitacions computacionals a l’hora d’entrenar la xarxa neuronal

Es´ ben conegut que les xarxes neuronals requereixen una pot`enciade c`alcul elevada, cosa que no est`aa l’abast de tothom. En cas que per culpa de les limitacions computacionals dels recursos utilitzats no es pogu´esentrenar la xarxa neuronal en un temps raonable, es buscaria el perm´ısper poder entrenar aquesta en equips externs tals com el supercomputador del Barcelona Supercomputing Center o similars. Tamb´ees valoraria la possibilitat de llogar equips remots en plataformes web tals com Google Cloud.

Problemes personals amb algun dels actors implicats en el projecte

Un escenari que ´esva donar es que algun dels actors implicats en el projecte, tals com el desenvolupador o el director, va tenir problemes personals (indisposici´oper baixa m`edica, problemes familiars, etc.) i conseq¨uentment no va poder exercir el seu rol. Es va estudiar l’opci´o de demanar una ampliaci´oen el termini del lliurament del projecte i la adhesi´od’un codirector.

2.5 Integraci´ode coneixements

Durant aquest projecte s’han integrat els coneixements obtinguts en diverses assignatures cur- sades durant el Grau en Enginyeria Inform`atica.A continuaci´os’explicaran quins coneixements s’han utilitzat i en quines fases del projecte.

2.5.1 Matem`atiques1 i 2

En la assignatura de Matem`atiques2 s’ensenya les diferents maneres d’operar amb matrius i vectors. Aquests coneixements van ser utilitzats per implementar la xarxa neuronal no evolutiva. Aix´ı mateix, en la assignatura de Matem`atiques1 s’ensenya teoria b`asica de grafs. Aquests coneixements van ser utilitzats per implementar les xarxes neuronals en l’algoritme NEAT.

17 2.5.2 Estructures de dades y algoritmes

En la assignatura d’EDA s’ensenya com representar diferents estructures de dades i diferents algoritmes ´utilsque es poden aplicar en aquestes. En particular, s’ensenya com representar grafs amb llistes d’adjac`enciai l’ordenaci´otopol`ogica. Aquests dos coneixements van ser utilitzats durant la implementaci´ode les xarxes neuronals de l’algoritme NEAT.

2.5.3 Gr`afics

En l’assignatura de Gr`aficss’ensenyen diferents t`ecniquesi algoritmes per representar models virtuals a la pantalla dels nostres ordinadors; i aix´ımateix, s’explica com poder interactuar amb les diferents escenes representades amb el teclat o el ratol´ı.Tots aquests coneixements formen la base per poder crear un videojoc.

Aquests coneixements van ser utilitzats a l’hora de desenvolupar el videojoc involucrat en el projecte. Com a exemple d’aquests coneixements tenim el desenvolupament dels diferents shaders (vertex, fragment, geometry) o l’aplicaci´ode geometria b`asicaper simular les f´ısiquesals videojocs.

2.5.4 Intel·lig`enciaArtificial

D’entre tots els coneixements adquirits en l’assignatura d’Intel·lig`enciaArtificial es destaquen la resoluci´ode problemes mitjan¸cant cerca i la introducci´oa la representaci´oconeixement.

Dintre de la resoluci´ode problemes mitjan¸cant la cerca trobem els algoritmes gen`etics,grup al qual pertany l’algoritme NEAT. Es´ per aix`oque les bases apresses d’algoritmes gen`eticsa l’assignatura de IA van ser molt ´utilsa l’hora de comprendre l’algoritme NEAT.

En la introducci´oa la representaci´odel coneixement s’ensenyen diverses maneres de ”traduirl- la informaci´odel m´onreal al m´ondigital per tal d’aplicar els diversos algoritmes que componen la intel·lig`enciaartificial. Gr`aciesa aix`oes va fer una representaci´oacurada de l’estat del videojoc per tal d’introduir-lo a l’entrada de la xarxa neuronal.

2.5.5 Aprenentatge Autom`atic

En l’assignatura d’Aprenentatge Autom`atics’ensenyen les bases de l’extens camp del Machine Learning. Concretament, s’explica la base te`oricai el funcionament dels diferents m`etodes actuals tals com Na¨ıve Bayes, Support Vector Machines, ...

D’entre tots aquests m`etodes ensenyats el m´esbenefici´ospel projecte s´on`obviament les xarxes neuronals. D’aquestes es van aprendre conceptes com les neurones, el nombre de capes, les ponderacions.. Que van fer que el temps invertit a implementar l’algoritme NEAT sigu´es redu¨ıtconsiderablement.

18 2.6 Lleis i regulacions

Aquest projecte es sost´esobre dos pilars b`asics:el videojoc Tetris i l’algoritme NEAT. Degut a que aquests son propietats intel·lectuals d’altres persones, poden sorgir certs riscos legals a l’hora d’utilitzar-los.

En el mon dels videojocs no es possible registrar mec`aniquesde joc tals com ”joc d’estrat`egia”, per`osi es possible registrar logos, noms de marques, art, etc. Aleshores, si qualsevol persona utilitzes aquests assets en un altre joc tant amb fins comercials com fins no comercials, estaria infringint el copyright. Degut a que en aquest projecte s’utilitzen els assets del Tetris original de Gameboy tenim una infracci´olegal. Per`o,el projecte nom´esser`aentregat a la universitat aix´ı que es molt improbable que sigui denunciat per l’empresa a c`arrecde la marca Tetris.

L’algoritme NEAT est`aprotegit amb University of Texas Research License. Aquesta no per- met retirar cap llicencia, copyright, etc. de l’algoritme aixi com utilitzar-lo amb fins comercials. Com no es el cas, per aquesta part no hi ha cap problema legal.

19 3 El videojoc Tetris i la seva implementaci´o

Com ja s’ha mencionat a la Seccio 2.4.1, durant el transcurs d’aquest projecte es va implementar el videojoc Tetris. Per tal d’aconseguir aix`o,es va seguir al document oficial 2009 Tetris Design Guideline. Abans d’entrar amb m´esdetalls de d’implementaci´od’aquest farem una ullada als conceptes b`asics del joc.

3.1 Descripci´odel joc

Tetris es un joc del genere puzle. EL tauler del joc consisteix en una quadricula de tiles d’amplada per tiles d’altura. Durant el transcurs del joc una successi´ode peces anomenades Tetrominos va caient de la part superior del tauler. Un cop els Tetrominos entren amb contacte amb la part inferior del tauler o amb altres Tetrominos aquests deixen de caure i fixen la seva posici´o. Aleshores, poc a poc les peces es van emmagatzemant fins a arribar a la part superior del tauler. Just en el moment que un Tetromino toca la part superior del tauler es considera Game Over.

3.2 Accions disponibles

Per evitar el final de la partida el jugador haur`ad’intentar omplir l´ıniessenceres de tauler amb tiles dels diferents Tetrominos; ja que cada cop que se n’omple una aquesta desapareix. Les accions disponibles per aconseguir aix`oson 4:

• Moure Tetromino d’esquerra a dreta: El Tetromino actual es mou horitzontalment sempre que no xoqui amb una paret del tauler. • Soft-drop: El Tetromino actual descendeix un tile en el tauler sempre que li sigui possible. • Hard-drop: El Tetromino actual descendeix tots els tiles que li siguin possibles de manera instant`aniafins arribar a la part inferior del tauler o a un altre Tetromino.

• Girar Tetromino: El Tetromino actual gira un angle de 90o en sentit horari.

3.3 Elements del joc

3.3.1 Tetrominos

Les diferents peces del joc son anomenades Tetroinos. Aquests estan composats per 4 tiles distribu¨ıtsen diverses formes. Si anomenem als Tetrominos segons la seva silueta, obtenim un total de 7 diferents Tetrominos com es mostra a la Figura5: l’I-Tetromino, el J-Tetromino, l’L-Tetromino, l’O-Tetromino, l’S-Tetromino, el T-Tetromino i el Z-Tetromino.

20 Figura 5: Diferents Tetrominos segons la seva silueta.

Aquests es generaran al tauler del joc en la cua de generaci´o. Aquesta cua s’omple creant una permutaci´oaleat`oriade les 7 peces descrites. Aleshores, es va buidant agafant peces d’en una en una fins a quedar-se sense, que es quan es repeteix la generaci´od’una permutaci´o.

3.3.2 Tauler de joc

El tauler de joc esta format per 3 parts: la matriu principal, la skyline i la zona de buffer; tal i com es mostra a la Figura6.

La matriu principal es una quadricula de tiles de 10 blocs d’ample per 20 blocs d’al¸cadaon s’emmagatzemaran els Tetrominos que han quedat fixes. Es la ´unicapart del tauler visible per al jugador.

La skyline es la l´ınia que separa la matriu principal i la zona de buffer. Els Tetrominos apareixien a la tile central que hi ha just al sobre d’aquesta l´ınia.

La zona de buffer es una zona extra del tauler on el jugador pot provar de manipular els Tetrominos, encara que no els vegi. El joc acabar`aquan la totalitat d’un Tetromino quedi fixat en aquesta zona.

21 Figura 6: Tauler de joc del joc Tetris.

3.4 Sistema de puntuaci´oi nivells

Durant el joc es puntua el jugador depenent les seves accions. Les accions que poden fer guanyar punts al jugador son el soft-drop, el hard-drop i eliminar l´ınies. Cada acci´oaporta una quantia variable de punts depenent de la seva dificultat, fins a arribar a un m`aximde 99999 punts.

A m´es,cada cop que el jugador elimina un total de 10 l´ıniespujara un nivell. El nivell actual influeix en la velocitat de caiguda dels Tetrominos, a m´esnivell m´esr`apidament cauran les peces. Concretament, la velocitat de caiguda de les peces ve donada per la seg¨uent formula:

fall speed = (0.8 − ((level − 1) ∗ 0.007))(level−1)

22 3.5 Game Over

El joc arriba al seu final o be perqu`eun Tetromino no s’ha pogut generar degut a que un bloc d’un Tetromino fixat ocupa l’espai de generaci´oo be perqu`eel jugador a fixat la totalitat d’un Tetromino a la zona de buffer. Aquests dos esdeveniments s’anomenen Block Out i Lock Out respectivament, tal i com es mostra a la Figura7.

Figura 7: Condicions de fi de la partida del joc Tetris.

3.6 Implementaci´odel joc Tetris

El joc va ser desenvolupat en el llenguatge de programaci´oC utilitzant Unity.

3.6.1 Bucle principal d’un videojoc

Tots els videojocs actuals es desenvolupen seguint una estructura molt ben definida de 3 fases: el processament de l’entrada, la actualitzaci´oi la renderitzaci´o;tal i com es pot veure a la Figura8

23 Figura 8: Bucle principal dels videojocs.

Durant el processament de l’entrada el sistema comprova els inputs rebuts pel sistema i els processa de manera adient. A continuaci´o,modifica els diferents elements del joc amb aquests inputs rebuts i el temps durant la fase de actualitzaci´o. Finalment, renderitza a pantalla tots els elements del joc amb la nova informaci´o. Una iteraci´ocompleta d’aquest bucle es lo que anomenem un frame.

Com es d’esperar, aquest videojoc ah estat implementat seguint aquest bucle. Inicialment, els frames es produ¨ıena un ritme constant de 30 fps (frames per segon). Per`o,aix`oprovocava temps d’entrenament de NEAT extremadament llargs, ja que aquest tenia que esperar a diversos events tals com la caiguda de les peces. Es per aix`opel qual es va decidir d’executar els frames de manera continua a mesura que s’anaven rebent inputs de la xarxa neuronal. Per mes detalls, consulteu la Secci´o 5.6.

Les diferents accions o inputs del joc poden ser introdu¨ıdeso be directament utilitzant el teclat o be des de la xarxa neuronal. L’actualitzaci´ode l’estat del joc es tractar`aamb profunditat en la Secci´o 3.6.2, i respecte a la fase de renderitzaci´ocomentar que es fa en una finestra de tamany fixa per tal d’evitar tractar l’aspect ratio.

3.6.2 Bucle principal del joc Tetris

En cada fase d’actualitzaci´oel joc segueix un bucle de la Figura9. A continuaci´otenim una descripci´odetallada de les diferents fases d’aquest bucle.

• Fase de generaci´o: A la fase de generaci´oes genera un nou Tetromino tal i com s’explica a la Secci´o 3.3.1. • Fase de caiguda: A la fase de caiguda el Tetromino actual es mou cap a la part inferior del tauler. Aquest moviment dependr`ade si el jugador ha fet un soft-drop, un hard-drop o no ha introdu¨ıtcap entrada. • Fase de fixaci´o: A la fase de fixaci´oel Tetromino actual deixa de caure i es fixa a la posici´oque esta ocupant en el mateix moment en que s’entra a aquesta fase. Per tal d’entrar en aquesta fase el Tetromino ha de estar amb contacte amb altre superf´ıcie,per`o cal destacar que no s’entra directament. Un cop el Tetromino actual entra amb contacte amb una superf´ıcieel jugador disposa de molt pocs frames per tal de moure el Tetromino abans de que es fixi completament. • Fase de patrons: Un cop fixat el Tetromino actual es passa a comprovar quins patrons segueix la ”massa”de peces fixes actuals. Un patr´opot ser per exemple, una l´ınea sencera omplerta. • Fase d’iteraci´o: En aquesta fase es comprova tota la matriu per tal d’aplicar un script iteratiu. Cal destacar que aquesta fase es implementada per poques variants del Tetris, i en el nostre cas no es necess`aria.Per tant, no ha sigut implementada.

24 • Fase de animaci´o: A la fase d’animaci´os’activa una animaci´ode eliminar l´ıniesdespr´es de que es reconeguin els patrons adients a la fase de patrons. Degut a que el prop`osit d’aquesta fase es purament est`etici consumeix temps s’ha decidit no implementar-la. • Fase de eliminaci´o: A la fase d’eliminaci´os’eliminen les l´ıniesseleccionades per eliminar a la fase de patrons.

• Fase de completaci´o: En aquesta fase s’actualitzen diversos camps del tauler com la puntuaci´o,el temps, el numero de l´ınieseliminades, etc.

25 Figura 9: Bucle principal del joc Tetris. 26 3.6.3 Sistema de rotaci´ode Tetrominos

Per tal de rotar Tetrominos hi ha dos sistemes de rotaci´o:el sistema cl`assici el sistema de super rotaci´o,tal i com es representa a la Figura 10. El sistema cl`assicno deixa rotar peces si la potencial nova posici´od’aquestes despr´esde rotar interseca amb altre element del tauler. Per una altra banda el sistema de super rotaci´osi que ho permet en casos especials. Degut a que la implementaci´odel sistema de super rotaci´oes complexa s’ha decidit no implementar-lo ja que el sistema de rotaci´oescollit no afecta en gran mesura a l’acompliment de les xarxes al joc.

Figura 10: Sitemes de rotaci´odel joc Tetris.

3.6.4 Implementaci´ode la part art´ıstica

A m´es de ser divertits els videojocs han de contenir una bona part art´ısticaper tal d’atreure i submergir al jugador. Podem separar la part art´ısticaen so i imatge.

El so d’un videojoc est`acomposat per tota la musica, efectes, veus, etc. que apareix durant l’experi`enciajugable. En aquest projecte s’ha decidit no implementar cap tipus de so al videojoc ja que no es necessari per a la xarxa neuronal.

L’imatge d’un videojoc est`acomposada per tots els recursos visuals tals com els sprites, els backgrounds, etc. que apareixen durant l’experi`encia jugable. En aquest projecte es va decidir no malgastar temps en aquesta part, ja que no influeix en l’aprenentatge de la xarxa neuronal, i copiar els assets del videojoc original Tetris de GameBoy. Per a m´esdetalls de les conseq¨u`encies legals d’aix`oconsulteu la Secci´o 2.6.

27 4 Funcionament d’una xarxa neuronal i implementaci´od’u- na xarxa neuronal simple

Com ja s’ha comentat a la Secci´o 1.1.2, una xarxa neuronal es un model computacional que intenta imitar el cervell hum`a.Aquesta est`acomposta per neurones que s’organitzen en capes, de les quals es destaquen la capa d’entrada, que ´es per on s’introduir`ala informaci´oa la xarxa; i la de sortida, que ´esla que extraur`ala ”decisi´o”dela xarxa en funci´oa la entrada introdu¨ıda. Aleshores ens podem preguntar, com aconsegueix la xarxa prendre una decisi´o?

4.1 Processament de les dades

Tot comen¸caamb la capa d’entrada. Aquesta est`aformada per un conjunt de neurones que reben la informaci´oa computar. Aleshores, es decideix si cada neurona d’aquesta capa es activada o no mitjan¸cant la funci´od’activaci´o.Un exemple de funci´ode funci´od’activaci´oes la sigmoide, que agafa el valor introdu¨ıta cada neurona i el comprimeix entre 0 i 1. Tenim doncs que les neurones d’entrada amb valors d’activaci´opropers a 1 es consideren actives, mentre que les que tenen valors propers a 0 es consideren inactives.

Un cop calculat els valors d’activaci´ode la capa d’entrada, aquests es passen a les capes ocultes mitjan¸cant connexions ponderades amb pesos. Aleshores, cada neurona i de les capes ocultes computa el seu valor d’activaci´o yj mitjan¸cant la seg¨uent formula:

n X yi = σ( xjwij) j=0

On σ es la funci´osigmoide, n ´esel nombre de neurones de la capa anterior a la neurona i, i xj es el valor d’activaci´ode la neurona j connectada a la neurona i ponderat amb el pes wij.

Aquest proc´eses va repetint fins a arribar a les neurones de la capa de sortida, que no alimenten a cap neurona m´es.Finalment, la sortida de la nostra xarxa ser`ael valor obtingut a les neurones de sortida.

4.2 Entrenament de la xarxa neuronal

Per tal de que la xarxa ”aprengui”a prendre decisions correctes es necessari disposar d’una gran quantitat de dades. Cada dada estar`acomposada per una entrada amb la que alimentar la xarxa i per la sortida esperada per a aquesta entrada. Per comen¸carl’entrenament cal executar la xarxa neuronal amb cada una d’aquestes entrades.

Aleshores, cal comparar les sortides aconseguides al introduir les diferents entrades a la xarxa amb les sortides esperades i estimar l’error com´es.Un cop estimat l’error es passa a ajustar els diferents par`ametres de la xarxa tals com els pesos de les connexions. Hi ha diferents algoritmes que aconsegueixen aix`ocom el conegut backpropagation, per`oen aquest projecte s’utilitzar`a NEAT.

28 4.3 La import`anciadel bias

A vegades entrenar no ´essuficient per aconseguir les sortides desitjades. En aquest casos cal introduir un nou element a la xarxa, el bias. El bias es un valor constant introdu¨ıt a cada neurona que no dep`end’altres neurones. A la Figura 11 queda il·lustrat aix`o.El que aconseguim amb el bias es ”shiftarl.la funci´od’activaci´ohoritzontalment. Aleshores, si modifiquem l’equaci´o del calcul del valor d’activaci´od’una neurona obtenim:

n X yi = σ( xjwij + bi) j=1

On bi ´esel bias de la neurona i.

Figura 11: Neurona amb diverses entrades i bias

4.4 Implementaci´od’una xarxa neuronal simple

En el projecte va ser necessari implementar una xarxa neuronal simple sense la capacitat d’entre- nar per tal de provar el correcte funcionament del bucle principal. A m´es,el fet d’implementar la xarxa neuronal va ajudar al desenvolupador a posar en pr`acticaels coneixements adquirits sobre les xarxes. Despr´esd’estudiar diverses opcions es va decidir fer la implementaci´od’aquesta xarxa utilitzant la representaci´omitjan¸cant matrius.

4.4.1 Representaci´omitjan¸cant matrius

Tenim que el calcul del valor d’activaci´od’una neurona i ve donat com:

n X yi = σ( xjwj + bi) j=1

Aleshores, podem simplificar aix`ocom a:

29   wi1 wi2     yi = σ(X ∗ Wi) = σ( x1 x2 ... xn 1 ∗  ... )   win bi

On X ´esel vector que cont´eels valors d’activaci´ode la capa anterior a la neurona i i Wi ´es el vector que cont´eels pesos per a les connexions de la neurona i. Cal notar que en el vector X ha sigut introdu¨ıtel bias, ponderat amb el pes 1 per tal de mantenir-lo constant.

Amb aquesta nova f´ormula doncs, podem definir els m valors d’activaci´o Y d’una capa sencera com a:

Y = σ(Z) Y = σ(X ∗ W )   w11 w21 ... wm1 w12 w22 ... wm2      y1 y2 ... ym = σ( x1 x2 ... xn 1 ∗  ...... )   w1n w2n ... wmn b1 b2 ... bm

Amb aquesta ultima igualtat es com es pot implementar una xarxa neuronal utilitzant ma- trius. Per a cada capa (a excepci´ode la d’entrada) de la xarxa nom´estenim que guardar la matriu W . Aleshores, per tal de processar l’entrada nom´escal executar aquesta formula iterativament fins a arribar a la capa de sortida.

Es va triar aquesta representaci´oper implementar la xarxa simple degut a que quasi no requereix esfor¸cper ser implementada al tenir a l’abast llibreries com Eigen que implementen operacions amb vectors.

30 5 L’algoritme NEAT i la seva implementaci´o

L’algoritme NEAT ´esun dels eixos sobre el qual gira aquest projecte, juntament amb el videojoc Tetris. Tal com indica el seu nom NEuroevolution of Augmenting Topologies, aquest aconse- gueix ”entrenar”xarxes neuronals modificant les seves topologies mitjan¸cant algoritmes gen`etics. Al ser un algoritme complex s’explicara pas per pas els diferents conceptes d’aquest.

5.1 Definicions dels elements propis d’un algoritme gen`etic

Recordem que els algoritmes gen`eticsvan evolucionant un conjunt d’individus, tamb´eanome- nat poblaci´o,mitjan¸cant diversos operadors gen`etics. Per tal de poder executar els algoritmes gen`eticstenim que representar cada individuu de la poblaci´oamb una seq¨uenciade gens ano- menada genotip. El que esta essent representat, el concepte, es anomenat fenotip. En NEAT, el fenotip ´esuna xarxa neuronal.

Un altre element necessari per executar un algoritme gen`etic´esla funci´ode fitness. Aquesta ´esl’encarregada d’avaluar l’acompliment d’un individu de la poblaci´o. En NEAT, la funci´ode fitness es pot considerar com el s´ımilde l’error com´esper una xarxa neuronal.

5.2 Representaci´ogen`etica

A NEAT un genoma ´esla representaci´olineal de la connectivitat d’una xarxa neuronal. Aquest est`aformat per una llista de dos tipus de gens: els gens node i els gens connexi´o.

Els gens node representen les neurones d’una xarxa neuronal i indiquen de quin tipus s´on (entrada, sortida, capa oculta). A m´es,guarden un n´umerod’innovaci´odel qual parlarem m´es endavant a la Secci´o 5.3.2. Els gens de connexi´orepresenten una connexi´ode la xarxa neuronal; per fer aix`oespecifiquen el node de entrada, el node de sortida, el pes de la connexi´o,si aquesta ´esactiva o no i el n´umerod’innovaci´o.

L’esquema de la representaci´ogen`eticaest`apensat per facilitar l’operaci´od’encreuament, ja que els genomes s´onmolt f`acils d’alinear al ser llistes ordenades de gens. Aquest esquema es mostrat a la Figura 12.

Figura 12: Representaci´ogen`eticade l’algoritme NEAT.

31 5.3 Operadors gen`eticsi la innovaci´o

5.3.1 Mutaci´o

La mutaci´oa NEAT pot o be canviar els valors dels pesos de la xarxa o b´ela seva topologia. La mutaci´odels pesos pot o be alterar en un petit percentatge tots els pesos de la xarxa o be canviar-los completament per nous pesos generats aleat`oriament. Les mutacions a l’estructura de la xarxa poden ser de dos tipus: mutaci´ode nova neurona o mutaci´ode nova connexi´o.

En la mutaci´ode nova neurona s’afegeix una nova neurona a la xarxa. Per fer aix`oprime- rament es selecciona aleat`oriament una connexi´oexistent de la xarxa. A continuaci´oaquesta es divideix en dues connexions noves ficant una neurona entre mig. La connexi´oantiga es desactiva, i finalment a la connexi´oque entra el nou node se li assigna el pes 1 i a la que surt se li assigna el pes de la connexi´odesactivada.

A la mutaci´ode nova connexi´oes selecciona aleat`oriament dos nodes o be no connectats directament o be amb una connexi´odesactivada. Si no existia cap connexi´os’afegeix una de nova amb un pes aleatori. Per altre banda si ja existia per`oaquesta estava desactivada, s’activa de nou.

A la Figura 13 podem veure il·lustrades ambd´ostipus de mutaci´o.

Figura 13: Diferents tipus de mutacions de l’algoritme NEAT.

Mitjan¸cant la mutaci´oels genomes van creixent m´esi m´esen mida. Aix`oens porta a que dos genomes de diferent mida poden tenir a la mateixa posici´ogens diferents. Aleshores ens podem preguntar: Com fa NEAT per encreuar dos genomes de mida diferent d’una manera eficient? A continuaci´otenim una explicaci´od’aix`o.

32 5.3.2 Innovaci´o

Recordeu el n´umerod’innovaci´oguardat en cada gen? Doncs be, aquest l’element clau que permet a NEAT identificar les mateixes estructures en dos individus qualsevol de la poblaci´o. Podem interpretar aquest nombre com el origen hist`oricde cada gen. Aleshores, es molt important tenir sempre controlat la innovaci´oa les poblacions.

Per fer aix`oNEAT implementa una ”base de dades”que relaciona cada gen i el seu n´umero d’innovaci´ocorresponent. Aleshores, cada cop que es crea un nou gen per mutaci´oNEAT com- prova si aquest ja ha sigut creat abans consultant la base de dades. Si ho ha sigut, se li assignar`a el n´umerod’innovaci´ocorresponent al nou gen. En cas contrari, s’assignara un nou n´umero d’innovaci´oal gen, s’incrementar`ael comptador global d’innovaci´o,i es guardara el nou gen a la base de dades de NEAT.

5.3.3 Encreuament

Per encreuar dos individus diferents NEAT agafa els seus genotips i els ordena mitjan¸cant el n´umerod’innovaci´o. Aleshores, tindrem que hi haur`agens que coincidiran als dos individus i gens que no. Els gens no coincidents poden ser o b´eper difer`enciao b´eper exc´es,depenent de si apareixen dins o fora del rang d’innovaci´odels pares. Aleshores, per construir el nou individuu fill es van seleccionant els gens coincidents de manera aleat`oriad’un dels pares, i tots els gens no coincidents del pare que amb m´espuntuaci´ode fitness. Aquest proc´eses visible a la Figura 14.

Figura 14: Operaci´od’encreuament de l’algoritme NEAT.

33 Ja hem vist com NEAT augmenta les topologies de les xarxes que composen la poblaci´omit- jan¸cant les innovacions. Per´o,existeix un problema amb aquestes, i ´esque no es poden mantenir per molt de temps. Aix`oes degut a que les xarxes m´essimples, ´esa dir les que tenen menys innovacions, s’optimitzen de manera molt m´esrapida que les xarxes m´escomplexes. Alesho- res les xarxes grans tendiran a desapar`eixer amb el pas del temps perdent aixi les innovacions corresponents. Per adre¸caraquest problema NEAT utilitza l’especiaci´ode la poblaci´o.

5.4 Especiaci´o

El que s’aconsegueix amb l’especiaci´oes que els organismes nom´escompeteixin contra altres organismes semblants a ells, ´esa dir de la seva esp`ecie.D’aquesta manera, les diferents topologies queden protegides dins de la seva especie i tenen temps suficient per desenvolupar-se. Per tal d’agrupar els individus en esp`eciesutilitzarem de nou el n´umerod’innovaci´o.

Primerament definirem la dist`anciaentre topologies. Aquesta dist`ancia ens indica com de diferents s´ondos genomes de dos individus de la poblaci´o. Per tal de mesurar-la utilitzarem el nombre de gens no coincidents entre els dos genomes, ja que a major nombre de gens no coincidents menys antecessors compartiran els genomes i per tant m´esdiferent seran. Aleshores, podem definir la distancia entre topologies δ com una combinaci´olineal del nombre de gens no coincidents en exc´es E i el nombre de gens de diferencia D, aix´ıcom la mitjana de les diferencies dels pesos dels gens coincidents W : C1 E C2 D δ = + + C3 W N N

On C1, C2, i C3 son par`ametresque ens permeten ajustar la import`anciade cada factor, i N ´esel nombre de gens del genoma m´esgran.

Un cop definida aquesta distancia, definim el threshold de especiaci´o.Aquest indica la dis- tancia m´ınimaa la que han de ser dos organismes diferents per tal de ser considerat com a organismes de especies distintes. Aleshores, al final de cada generaci´os’especiar`ala poblaci´oi es creara la seg¨uent en funci´ode les diferents especies.

Per tal d’especiar els genomes s’iterar`asobre ells i es far`ael seg¨uent: per a cada genoma es calcular`ala distancia d’aquest amb la del representant de la primera especie existent (el representant d’una especie es el organisme amb major fitness de la generaci´oanterior). Si aquesta distancia es menor que el threshold, s’assignara el genoma a aquesta especie. En cas contrari, s’iterara seguint el mateix proc´esper la resta d’esp`ecies.Si al final el genoma no ha sigut assignat a cap especie es considerar`aque es d’una nova esp`eciei ser`aescollit com a representant d’aquesta.

5.5 Generaci´ode nova poblaci´o

Com ja s’ha dit en la secci´oanterior, al final de cada generaci´os’especia la poblaci´oactual. Un cop fet aix`opodem passar a generar la nova poblaci´o.Per tal de fer aix`oNEAT defineix el fitness compartit.

El fitness compartit no es m´esque el fitness assignat durant l’execuci´od’una xarxa neuronal dividit pel nombre d’individus de l’especia on ha sigut assignada la xarxa. D’aquesta manera s’aconsegueix penalitzar a especies molt grans i estimular a les noves especies petites. Un cop calculat el fitness compartit de cada individuu de la poblaci´oes calcula els fitness compartits totals per a cada especie, i ´esdivideixen pel fitness compartit de tota la poblaci´o. Els valors obtinguts al fer aix`oindican el nombre d’individus que cada especie pot generar.

34 Per generar nous individus es fa el seg¨uent per a cada especie: primerament s’eliminen els individus m´esd`ebils,o en altres paraules, els que tenen els valors de fitness m´esbaix. A conti- nuaci´os’escolleix el individu amb m´esfitness i es passa a la seg¨uent iteraci´oper tal d’aconseguir elitisme. Finalment, ´esgeneren individus utilitzant els operadors gen`eticsdescrits a la Secci´o 5.3 fins a arribar al nombre d’individus perm`escalculat abans.

Pot ser que despr´esd’aquest proc´ess’hagin generat m´eso menys individus que el nombre d’individus per poblaci´o. Aix`opot ser causat per un error al arrodoniment. En cas de tenir menys, els mancants seran seleccionats de la poblaci´ototal mitjan¸cant una selecci´oper torneig. En cas de tenir m´es,s’eliminaran els ´ultimsindividus generats fins no tenir exc´esde poblaci´o.

5.5.1 Generaci´ode la primera poblaci´o

Cal comentar que la primera poblaci´oesta composada per xarxes amb una mateixa estructura molt simple. Aquesta nom´esdisposa dels nodes d’entrada i els de sortida amb un nombre molt petit de connexions. D’aquesta manera, els diferents canvis que sorgiran a les estructures seran deguts a la funci´ode fitness, i per tant estaran justificats. A m´es,aconseguirem reduir l’espai de solucions.

5.6 Implementaci´ode l’algoritme NEAT

L’algoritme NEAT va ser implementat al projecte utilitzant el llenguatge de programaci´oC, ja que ´esl’utilitzat als scripts de Unity. La implementaci´oes va fer seguint les pautes descrites a la secci´oanterior. Tot i aix´ı,van haver dificultats a superar. En aquesta secci´oanirem explicant-les una a una i quines solucions es van implementar.

5.6.1 Implementaci´odel fenotip

Durant la implementaci´ode NEAT va ser necessari implementar el fenotip, o en altres paraules, la xarxa neuronal; per tal de poder obtenir un valor de fitness. Es podria haver utilitzat la implementaci´ode xarxes neuronals mitjan¸cant matrius tal i com es descriu a la Secci´o 4.4, per`o degut a la naturalesa de les xarxes generades per NEAT no va ser possible. La ra´od’aix`oes que a les xarxes neuronals generades per l’algoritme les capes no estan ben definides. Per tant, es fa impossible establir una classificaci´ode neurones per capes que ens permeti representar els pesos d’una capa a una matriu. Per tant, es va decidir solucionar aquest problema implementant les xarxes neuronals com a grafs dirigits.

En aquesta representaci´ocada node del graf representa una neurona. Una aresta que va del node a al node b representa una connexi´oentre la neurona a i la neurona b; amb la condici´ode que a alimenta a b. Tot aix`ova ser implementat amb llistes d’adjac`encies.

Per tal de processar una entrada de la xarxa ´esfa el mateix calcul a cada neurona que el descrit a la Secci´o 4.4 amb una petita difer`encia. En comptes d’utilitzar la funci´osigmoide s’utiltiza la funci´otangent hiperb´olica tanh, que ve donada per la seg¨uent formula:

ex − e−x tanh(x) = ex + e−x

El domini d’aquesta funci´oes [-1,1], i t´ecom a caracter´ısticaque accelera els temps d’entrena-

35 ment a les xarxes neuronals. Aleshores, per processar una entrada ´esnecessari saber pr`eviament en quin ordre es calcularan els valors d’activaci´ode cada neurona, ja que ´espot donar el cas de que s’intenti calcular el valor d’una neurona desconeixent el valor d’activaci´od’una neurona que l’alimenta. Hi ha un tipus d’ordenaci´oespecial als grafs que soluciona aquest problema a la perfecci´o:la ordenaci´otopologica.

Donat un graf dirigit, la ordenaci´otopologica ens indica l’ordre en que s’han de visitar els nodes del graf de manera que per a tota aresta uv que va des de el node u fins al node v; u sempre apareixer`aabans a l’ordre. D’aquesta manera ens assegurarem de que tota neurona de la xarxa sigui alimentada per neurones amb valors d’activaci´ocalculats. L’ordenaci´otopol`ogica tamb´ees molt ´utilper detectar cicles als grafs.

Degut al a naturalesa de les mutacions al algoritme NEAT es possible obtenir xarxes neuro- nals recurrents, ´esa dir, xarxes que contenen neurones que es retroalimenten o que alimenten a neurones anteriors. Aix`ocrea estructures molt complexes i dificulta els c`alculsdels valors d’acti- vaci´o.Es per aixo que s’ha decidit que en aquest projecte l’algoritme no generi xarxes recurrents. Aleshores, cada cop que muta l’estructura de la xarxa l’algoritme comprova si aquesta a generat una xarxa recurrent mitjan¸cant l’ordenaci´otopologica. Si ´esel cas, es descarta la mutaci´o.

Les entrades de la xarxa seran explicades amb detall a la Secci´o6. Pel que fa a les sortides, es va decidir de tenir-ne 6 a cada xarxa. Aquestes representen les diferents accions que poden realitzar els jugadors quan juguen al Tetris. Concretament, aquestes son moure la pe¸caactual a la dreta, moure la pe¸ca actual a l’esquera, rotar la pe¸caactual, soft drop, hard drop, no fer res. Degut aix`o,tenim que les xarxes neuronals estan resolent un problema de classificaci´odonada una entrada. Per tal d’escollir l’acci´os’utilitza la funci´o softmax, que t´ela seg¨uent definici´oper a una neurona de sortida j amb un valor d’activaci´o zj:

ezj softmax(z)j = K P zk k=1 e

On K es el nombre de neurones de sortida. La caracter´ısticaprincipal d’aquesta funci´oes que agafa totes les entrades i normalitza els seus valors en el rang [0,1], amb la peculiaritat de que totes els valors sumen 1. Es podria dir que el que fa ´esdir-nos com de ”probable”es que l’entrada quedi classificada en les diferents categories, o en el nostre cas; com de probable ´esque una entrada generi una acci´oo una altre. Aleshores, per escollir l’acci´oa realitzar s’agafa la que t´ela probabilitat m´esalta.

5.6.2 Implementaci´ode la funci´ode fitness

En aquest projecte la funci´ode fitness ha de ser capa¸cd’avaluar l’acompliment d’una xarxa neuronal jugant al Tetris. Per fer aix`oprimerament hem de pensar que significa ser un bon jugador de Tetris.

Degut a la naturalesa del joc el m´esimportant durant una partida es construir l´ıniessenceres de bloc per tal d’eliminar-les. Per fer aix`oes important col·locar les peces de manera que formin una estructura rectangular consistent sense forats amb la superf´ıciesuperior plana, tal i com es mostra a la Figura 15. D’aquesta manera es facilita la col·locaci´ode peces posteriors aix´ıcom l’eliminaci´odel nombre m`aximpossible de lin´ıes.

36 Figura 15: Disposici´oideal de peces en una partida de Tetris.

Aleshores, a la funci´ode fitness es va intentar premiar a les xarxes que aconseguien disposar les peces d’aquesta manera eliminant el m`aximnumero de peces a cada partida. Concretament, la funci´ode fitness es calcula com:

fitness = 10 · #linees + 2 · #peces − 0.1 · punxabilitat − 0.2 · #forats

El factor #linees indica quantes l´ınieshan sigut eliminades a la partida. Es´ multiplicat per 10 ja que s’ha considerat que es l’objectiu m´esimportant del Tetris.

El factor #peces indica el nombre de peces col·locades durant la partida. Aquest factor ha sigut introdu¨ıta la funci´ode fitness per estimular en les primeres generacions la disposici´ode peces per tot el tauler de manera uniforme. D’aquesta manera, s’evita la construcci´od’estructures en forma de torre.

El factor punxabilitat indica com es de punxeguda l’estructura de blocs generada per la xarxa en la partida. Com ja s’ha comentat, es busca fer estructures planes per facilitar la introducci´o de noves peces. El que mesura la punxabilitat ´esla suma de les diferencies d’altures entre cada columna del tauler. A l’exemple de la Figura 16 aquesta seria de 17.

37 Figura 16: Disposici´ode peces amb punxabilitat 17.

El factor #forats indica quants forats han quedat a l’estructura de blocs final generada per una xarxa neuronal durant una partida. Es considera un forat com qualsevol regi´oque est`a totalment acotada per blocs. Per tal de calcular el nombre de forats s’executa l’algoritme BFS sobre les caselles buides del tauler. Despr´esd’aix`o,es compta el nombre de caselles buides que no han sigut visitades per l’algoritme i es retorna com el nombre de forats.

38 6 Experimentaci´oamb l’algoritme NEAT

6.1 Bucle principal d’execuci´o

Per tal d’experimentar amb l’algoritme NEAT es va dissenyar un bucle principal d’execuci´oque implementa la interacci´oentre el joc i l’algoritme. Vegem-ho amb m´esdetall.

Abans del bucle principal hi a una fase pr`eviade inicialitzaci´ode l’algoritme NEAT. Aquesta inicialitzaci´ocarrega els diferents par`ametresde l’algoritme i crea la poblaci´oinicial. Despr´es d’aix`oes passa directament a iterar sobre el bucle principal.

Al principi de cada iteraci´odel bucle principal s’inicialitza el joc. Aquesta inicialitzaci´o consisteix en deixar les puntuacions i el tauler net, aix´ıcom en inicialitzar la cua de generaci´o de Tetrominos. Per tal de que els diferents genomes s’entrenin utilitzant els mateixos escenaris s’inicialitza la cua amb el numero de generaci´oactual. Seguidament es passa al bucle d’interacci´o entre Tetris i NEAT, que avaluara un a un els genomes de la poblaci´oactual.

En aquest bucle primerament es genera la informaci´odel frame actual, que ser`al’entrada de la xarxa neuronal del genoma que est`aessent avaluant actualment. A continuaci´os’alimentar`a al fenotip del genoma amb l’entrada i s’obtindr`al’acci´om´esprobable. Aquesta ser`aintrodu¨ıda al joc i s’iterar`ade nou fins que es perdi la partida.

Un cop arribi la condici´ode fi de la partida s’avalua el acompliment del genoma mitjan¸cant la funci´ode fitness, que es desa al genoma i seguidament es torna a iterar sobre el bucle principal amb el seg¨uent genoma. Si s’avalua l’ultim genoma de la poblaci´o´espassara a la fase de generar una nova poblaci´o. En aquesta fase es generar`auna nova poblaci´otal i com es descriu a la Secci´o5.

El bucle principal acabar`ala seva execuci´osi passa una de les dues condicions seg¨uents: S’arriba al nombre m`aximde generacions generades perm`eso el valor de fitness m`aximde la generaci´oconvergeix. Es considerar`aque el valor ha convergit si no ha millorat m´esd’un 10% el valor m`aximanterior en 20 generacions. Si es compleix alguna d’aquestes condicions l’execuci´o termina. En cas contrari, es torna a iterar sobre el bucle principal.

A la Figura 17 hi ha il·lustrat el pseudocodi del bucle principal.

39 NEAT initialization while num generations < max num generations and num generations no improvement < 20 do game initialization get next genome while !gameover do generate frame information feed current genome inputate action end while compute fitness set genome fitness if last genome in population then generate next population end if end while

Figura 17: Bucle principal d’execuci´o.

6.2 Experimentaci´osobre la entrada

Per tal d’obtenir la seg¨uent acci´oa realitzar d’una xarxa neuronal es necessari definir la seva entrada. Com en aquest projecte les xarxes neuronals juguen a un joc, es natural pensar que les entrades d’aquestes seran l’estat actual de joc.

Per tal de passar l’estat actual primerament es va considerar passar l’altura de cada columna del tauler, el tipus de pe¸ca que s’esta jugant (indicat amb un numero del 1 al 7), les components de la posici´ode la pe¸caactual, i la rotaci´od’aquesta (indicat amb un numero del 1 al nombre de rotacions de la pe¸caactual). Fent aix`ova resultar que les xarxes no aprenien degut a la falta d’informaci´oi al final sempre acabaven donant la mateixa acci´oper a qualsevol entrada. Es´ per aix`oque es va decidir incrementar el nombre d’entrades dr`asticament. La informaci´otransmesa a les xarxes s´onel contingut de cada posici´odel tauler, la graella que defineix la pe¸caactual, i les components de la seva posici´o.

Aix`ova millorar el proc´esd’aprenentatge, per`ocom a contra partida, es va passar de tenir 14 neurones de entrada (10 per les altures de la graella + 1 per la pe¸caactual + 2 per la posici´o de la pe¸caactual + 1 per la rotaci´oactual) a 296 neurones d’entrada (10*18 per al tauler, + 4*4 per a la pe¸caactual + 2 per la posici´ode la pe¸caactual).

6.3 Experiments sobre els par`ametresde l’algoritme

Els par`ametresjuguen un paper crucial en els algoritmes de Machine Learning. Diferents com- binacions de valors d’aquests poden provocar resultats d’entrenament totalment diferents. Es´ per aix`oque es molt important intentar estudiar la seva influ`encia en el problema que es tracta i intentar ajustar-los. En el nostre cas, els par`ametresde l’algoritme s´onels seg¨uents:

• POPULATION SIZE: Indica el tamany de la poblaci´oa NEAT. • MAX GENERATIONS: Indica el n´umero maxim de generacions que es poden generar. • CROSSOVER PROBABILITY: Indica la probabilitat de que ´es generi un genoma per creuament,

40 • MUTATION ADDNODE PROBABILITY: Indica la probabilitat de que es produeixi una mutaci´ode nova neurona. • MUTATION LINK PROBABILITY: Indica la probabilitat de que es produeixi una muta- ci´ode nova connexi´o. • MUTATION WEIGHT PROBABILITY: Indica la probabilitat de que es produeixi una mutaci´osobre els pesos de la xarxa.

• MUTATION WEIGHT REPLACAMENT PROBABILITY: Indica la probabilitat de que un pes de la xarxa sigui cambiat totalment per un aleatori. • SPECIES THRESHOLD: Indica el threshold per al qual dos genomes poden ser considerats de diferents especies.

• C1: Indica la import`anciadels gens no coincidents en exc´esen el c`alculde la dist`ancia entre genomes. • C2: Indica la import`anciadels gens difer`enciaen el c`alculde la dist`anciaentre genomes. • C3: Indica la import`anciade la mitjana de les diferencies dels pesos dels gens coincidents en el c`alculde la dist`anciaentre genomes.

Durant el projecte es va estudiar com influ¨ıenaquests par`ametresen l’acompliment de NEAT en jugar al Tetris. Per fer aix`oes va definir una inicialitzaci´ode par`ametresarbitraria mostrada a la Figura 18. Aleshores, en cada experiment es va definir una hip`otesii es van variar par`ametres d’aquesta combinaci´oper tal d’intentar demostrar aquesta hip`otesi. Un cop fet aix`oes van executar dos simulacions, una amb els par`ametresoriginals (anomenada control) i altre amb els par`ametresmodificats (anomenada test). Finalment, es van comparar diferents indicadors de ambdues execucions i es van tomar conclusions.

• POPULATION SIZE: 20, • MAX GENERATIONS: 100,

• CROSSOVER PROBABILITY: 50, • MUTATION ADDNODE PROBABILITY: 20, • MUTATION LINK PROBABILITY: 20, • MUTATION WEIGHT PROBABILITY: 20,

• MUTATION WEIGHT REPLACAMENT PROBABILITY: 10, • SPECIES THRESHOLD: 0.1, • C1: 10,

• C2: 10, • C3: 1

Figura 18: Inicialitzaci´ode par`ametresde l’algoritme NEAT.

41 Tots els resultats es poden trobar a l’ap`endix.Cal notar que tot i que els experiments s’han executat sobre el mateix set de Tetrominos, la inicialitzaci´ode les xarxes varia. Es´ per aix`oque alguns resultats es troben normalitzats. A continuaci´oveurem els experiments m´esinteressants.

6.3.1 Influ`enciade la mida de la poblaci´o

• Hip`otesi: El nombre d’individus de la poblaci´ode l’algoritme NEAT influeix en el nombre d’esp`ecies. • Metodologia: Reduir el nombre d’individus de la poblaci´ode 20 a 10.

L’idea aqu´ı´es que al tenir menys individus a la poblaci´oestem reduint la probabilitat de que apareguin noves estructures; ja que tot i aixi que les probabilitats de mutaci´oi encreuament son la mateixa al grup de control i al experimental, hi haur`amenys individus que activin aquestes probabilitats. Aleshores, al haver-hi menys diversitat gen`eticales dist`anciesentre genomes seran petites i no apareixeran noves especies.

Si observem la Figura 19 veiem que aquesta hip`otesies confirma, ja que el grup de control genera moltes m´esespecies que el grup de test. Per confirmar que aquest increment de especies no es causat per les difer`enciesde l’estructura inicial, tamb´evarem comparar el nombre d’esp`ecies normalitzat tal i com es mostra la Figura 20.

Nombre d'espècies per generació

10 Control Test

8

6 # espècies

4

2

0 10 20 30 40 50 Generació

Figura 19: Nombre d’esp`eciesper generaci´oa l’estudi de la influ`enciade la mida de la poblaci´o

42 Nombre d'espècies normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 # espècies normalitzat

0.2

0.0

0 10 20 30 40 50 Generació

Figura 20: Nombre d’esp`ecies per generaci´onormalitzat a l’estudi de la influ`enciade la mida de la poblaci´o

6.3.2 Influ`enciadel nombre m`aximde generacions

• Hip`otesi: El nombre m`aximde generacions de l’algoritme NEAT influeix en el nombre d’esp`eciesi en el fitness mitj`a. • Metodologia: Incrementar el nombre m`aximde generacions de 100 a 200.

La nostra suposici´o´esque al haver-hi m´esgeneracions disponibles sobre les que iterar, l’algo- ritme tindr`ames oportunitats de augmentar la diversitat gen`eticai per tant el nombre d’esp`ecies. A m´es,tamb´em´esoportunitats per optimitzar-se i aix´ıaugmentar el fitness mitj`a.

Curiosament, observem a les Figures 21i 22 veiem que en aquest experiment la hip`otesino ´escerta, ja que tant el nombre d’esp`eciescom el fitness mitj`atenen valors molt similars tant al test com al control. La principal causa d’aix`o´esque en ambd´oscasos l’algoritme a convergit abans d’arribar a un nombre gran de generacions.

43 Nombre d'espècies normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 # espècies normalitzat

0.2

0.0

0 10 20 30 40 Generació

Figura 21: Nombre d’esp`eciesper generaci´onormalitzat a l’estudi de la influ`enciadel nombre m`aximde generacions

Fitness mitjà normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 Fitness mitjà normalitzat

0.2

0.0

0 10 20 30 40 Generació

Figura 22: Fitness mitj`anormalitzat per generaci´oa l’estudi de la influ`enciadel nombre m`axim de generacions

44 6.3.3 Influ`enciade la probabilitat de mutacions estructurals

• Hip`otesi: La probabilitat de mutacions estructurals de l’algoritme NEAT influeix en el nombre d’esp`ecies. • Metodologia: Incrementar la probabilitat de mutacions estructurals de 20 a 70.

L’idea aqu´ı´esque si augmentem la probabilitat de mutacions estructurals estarem provocant una gran diversitat gen`eticaa la poblaci´o.Aix`ofar`aque la dist`anciaentre els genomes augmenti, i per tant tamb´eho far`ael nombre d’esp`ecies.

Aquesta hip`otesiqueda confirmada a la Figura 23 veiem que aquesta hip`otesies confirma, ja que el grup de control genera moltes m´esespecies que el grup de test. Es´ interessant veure que aquest nombre es dispara a la quarta generaci´oal grup de test a causa de la gran diversitat gen`etica. Tamb´ees pot observar a la Figura 24 que el fitness mitj`aes molt baix al grup de test. La causa d’aix`opot ser que al haver-hi tanta diversitat gen`eticales xarxes aconsegueixen puntuacions de fitness amb molta vari`ancia.

Nombre d'espècies per generació

14 Control Test

12

10

8 # espècies 6

4

2

0 5 10 15 20 25 30 35 Generació

Figura 23: Nombre d’esp`eciesper generaci´oa l’estudi de la influ`enciade la probabilitat de mutacions estructurals

45 Fitness mitjà per generació 30 Control Test

40

50

60 Fitness mitjà

70

80

0 5 10 15 20 25 30 35 Generació

Figura 24: Fitness mitj`aper generaci´oa l’estudi de la influ`enciade la probabilitat de mutacions estructurals

6.3.4 Influ`enciadel threshold de especiaci´o

• Hip`otesi: El threshold de especiaci´oinflueix de l’algoritme NEAT influeix en el nombre d’esp`ecies. • Metodologia: Augmentar el threshold d’especiaci´ode 0.1 a 0.5.

En aquest experiment volem provar que al augmentar el threshold d’especiaci´oes reduir`ael nombre d’esp`ecies.Aix`o´esde sentit com´u,ja que els genomes tindran que estar m´esdistanciats per poder ser considerats de diverses esp`ecies.Tamb´ees vol estudiar quin efecte t´eaix`osobre el fitness mitj`a.

Observant la Figura 25 veiem que el nou threshold ha sigut massa gran, perqu`enom´ess’ha generat una ´unicaesp`ecie. Aix`oha provocat que tota la poblaci´ocompet´ısentre si i nom´es sobrevisquessin els m´esforts, que han sigut els ´unicsque han pogut millorar el seu threshold. Aix`oa redu¨ıtl’espai de solucions i ha fet que l’algoritme converg´ısmolt r`apidament. Podem confirmar aix`oa la Figura 26, on veiem que el test acaba l seva execuci´oabans de 40 generacions.

46 Nombre d'espècies per generació

10 Control Test

8

6 # espècies

4

2

0 20 40 60 80 100 Generació

Figura 25: Nombre d’esp`eciesper generaci´oa l’estudi de la influ`enciadel threshold de especiaci´o

Fitness mitjà normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 Fitness mitjà normalitzat

0.2

0.0

0 20 40 60 80 100 Generació

Figura 26: Fitness mitj`aper generaci´onormalitzat a l’estudi de la influ`enciadel threshold de especiaci´o

47 7 Pressupost i sostenibilitat

7.1 Pressupost

Tot projecte necessita finan¸cament econ`omic per poder portar-se a terme. En aquesta secci´o es descriur`ade manera detallada el pressupost d’aquest projecte. Concretament, es far`auna estimaci´odel pressupost i es comentaran els diferents elements a considerar en l’estimaci´o,tals com els costos directes per activitat, costos indirectes, amortitzacions, etc.

7.1.1 Costos directes

Els costos directes es calcularan individualment per a cada fase del projecte, i es desglossaran els tres tipus de recursos implicats en cada fase (humans, hardware, software). Per l’estimaci´o de l’amortitzaci´odels recursos hardware i software s’utilitzar`ala seg¨uent formula:

T empsUsprod(h) Amortitzacioprod = P reuprod(e) ∗ V idaUtilprod(h)

Treball inicial

Recursos humans

Actor Salari (e/h) Temps (h) Cost Desenvolupador del projecte 10 80 800e Total 800e

Taula 2: Pressupost dels recursos humans emprats en el treball inicial.

Recursos hardware

Producte Unitats Preu per unitat Temps d’´us Vida ´util Amortitzaci´o Ordinador personal 1 1000e 80h 5 anys 1.83e Total 1.83e

Taula 3: Pressupost dels recursos hardware emprats en el treball inicial.

Recursos software

Producte Preu Temps d’´us Vida ´util Amortitzaci´o Google Scholar 0e 80h - 0e LATEX 0e 80h - 0e Total 0e

Taula 4: Pressupost dels recursos software emprats en el treball inicial.

48 Implementaci´odels videojocs

Recursos humans

Actor Salari (e/h) Temps (h) Cost Desenvolupador del projecte 10 60 600e Total 600e

Taula 5: Pressupost dels recursos humans emprats en la implementaci´odels videojocs.

Recursos hardware

Producte Unitats Preu per unitat Temps d’´us Vida ´util Amortitzaci´o Ordinador personal 1 1000e 60h 5 anys 1.37e Total 1.37e

Taula 6: Pressupost dels recursos hardware emprats en la implementaci´odels videojocs.

Recursos software

Producte Preu Temps d’´us Vida ´util Amortitzaci´o Visual Studio 11 0e 60h - 0e Unity 0e 60h - 0e LATEX 0e 60h - 0e Total 0e

Taula 7: Pressupost dels recursos software emprats en la implementaci´odels videojocs.

Implementaci´ode la xarxa neuronal

Recursos humans

Actor Salari (e/h) Temps (h) Cost Desenvolupador del projecte 10 120 1200e Director del projecte 20 120 2400e Total 3600e

Taula 8: Pressupost dels recursos humans emprats en la implementaci´ode la xarxa neuronal.

Recursos hardware

Producte Unitats Preu per unitat Temps d’´us Vida ´util Amortitzaci´o Ordinador personal 1 1000e 120h 5 anys 2.74e Total 2.74e

Taula 9: Pressupost dels recursos hardware emprats en la implementaci´ode la xarxa neuronal.

49 Recursos software

Producte Preu Temps d’´us Vida ´util Amortitzaci´o Visual Studio 11 0e 120h - 0e LATEX 0e 120h - 0e Total 0e

Taula 10: Pressupost dels recursos software emprats en la implementaci´ode la xarxa neuronal.

Implementaci´ode l’algoritme NEAT

Recursos humans

Actor Salari (e/h) Temps (h) Cost Desenvolupador del projecte 10 120 1200e Director del projecte 20 120 2400e Total 3600e

Taula 11: Pressupost dels recursos humans emprats en la implementaci´ode l’algoritme NEAT.

Recursos hardware

Producte Unitats Preu per unitat Temps d’´us Vida ´util Amortitzaci´o Ordinador personal 1 1000e 120h 5 anys 2.74e Total 2.74e

Taula 12: Pressupost dels recursos hardware emprats en la implementaci´ode l’algoritme NEAT.

Recursos software

Producte Preu Temps d’´us Vida ´util Amortitzaci´o Google Scholar 0e 120h - 0e Visual Studio 11 0e 120h - 0e LATEX 0e 120h - 0e Total 0e

Taula 13: Pressupost dels recursos software emprats en la implementaci´ode l’algoritme NEAT.

50 Estudi de l’algoritme NEAT

Recursos humans

Actor Salari (e/h) Temps (h) Cost Desenvolupador del projecte 10 100 1000e Director del projecte 20 100 2000e Total 3000e

Taula 14: Pressupost dels recursos humans emprats en l’estudi de l’algoritme NEAT.

Recursos hardware

Producte Unitats Preu per unitat Temps d’´us Vida ´util Amortitzaci´o Ordinador personal 1 1000e 100h 5 anys 2.29e Total 2.29e

Taula 15: Pressupost dels recursos hardware emprats en l’estudi de l’algoritme NEAT.

Recursos software

Producte Preu Temps d’´us Vida ´util Amortitzaci´o Google Scholar 0e 100h - 0e Visual Studio 11 0e 100h - 0e LATEX 0e 100h - 0e Total 0e

Taula 16: Pressupost dels recursos software emprats en l’estudi de l’algoritme NEAT.

7.1.2 Costos indirectes

En aquest apartat es desglossen els costos que no poden ser catalogats en l’apartat anterior. Concretament, aquests costos son l’electricitat i la connexi´oa Internet.

Producte Preu Temps d’´us Cost Electricitat 0.10 (e/kWh) 480h 48e Connexi´oInternet 53 (e/mes) 9 mesos 477e Total 525e

Taula 17: Costos indirectes del projecte.

7.1.3 Control de gesti´o

Tot projecte pot patir desviacions en la planificaci´oestablerta, cosa que pot portar a un augment de pressupost. En aquest apartat s’estudiaran diversos tipus de desviacions i els plans d’acci´oa seguir per tal de minimitzar l’impacte d’aquestes en el projecte; i finalment es far`ael c`alculdel pressupost destinat a aquestes desviacions.

51 Desviacions en costos Primerament parlarem de les desviacions en els costos, que sorgeixen quan els costos estimats s´onmenors que els costos reals. Afortunadament, en aquest projecte es coneixen els costos reals dels diferents recursos. Per tant, no existeixen desviacions en costos.

Desviacions en consum A continuaci´oes tractaran les desviacions en consum, que apa- reixen quan el consum estimat ´esmenor que el consum real. En aquest projecte es pot donar aquesta desviaci´oen l’estimaci´ode temps consumit pels recursos humans a les diferents fases, que pot ser incorrecta per una mala previsi´oo per algun problema que pugui sorgir durant el desenvolupament. Per solucionar aix`o,s’augmentar`ael nombre d’hores treballades de l’actor desenvolupador del projecte en un 10%. Aleshores:

DesviacionsConsum = DesviacionsConsumdesenvolupador

= Salaridesenvolupador ∗ (T empsRealdesenvolupador − T empsEstimatdesenvolupador) = 10e/h ∗ (528h − 480h) = 480e

Desviacions totals

Tipus de desviaci´o Cost Desviacions en costos 0e Desviacions en consum 480e Total 480e

Taula 18: Pressupost en desviacions del projecte.

7.1.4 Pressupost total

En la Taula 19 es pot observar el pressupost total del projecte.

Cal notar que s’afegit una fila extra amb els costos de conting`encia,els quals s´onun 5% del pressupost original. Aquests costos seran utilitzats per cobrir qualsevol imprevist que pugui sortir durant la realitzaci´odel projecte.

Fase del projecte Cost recursos humans Cost recursos hardware Cost recursos software Cost total Treball inicial 800e 1.83e 0e 801.83e Implementaci´odels videojocs 600e 1.37e 0e 601.37e Implementaci´ode la xarxa neuronal 3600e 2.74e 0e 3602.74e Implementaci´ode l’algoritme NEAT 3600e 2.74e 0e 3602.74e Estudi de l’algoritme NEAT 3000e 2.29e 0e 3002.29e Costos directes 11600e 10.97e 0e 11610.97e Costos indirectes 525e Desviacions 480e Subtotal 12615.97e Conting`encia(5%) 630.8e Total 13246.77e

Taula 19: Pressupost total del projecte.

52 7.2 Sostenibilitat

7.2.1 Autoavaluaci´odel domini actual de la compet`enciade sostenibilitat

A continuaci´ojo, Mario Fern´andezVillalba, com a desenvolupador del projecte presentar´euna autoavaluaci´osobre el meu domini actual de la compet`enciade sostenibilitat.

A mesura que responia a l’enquesta proporcionada pels professors de l’assignatura GEP m’he assabentat que el meu coneixement sobre el tema de la sostenibilitat ´esm´esaviat esc`as.Durant tota la carrera nosaltres els alumnes, hem participat en diverses activitats per conscienciar-nos en la sostenibilitat, tals com les Jornades Reutilitz`ao la visualitzaci´odel documental Comprar, tirar, comprar. Tot i aix`o,a causa de la meva baixa motivaci´opel tema vaig adquirir nom´espart dels coneixements oferts en les corresponents activitats.

Com a exemple, he d’aprendre a dissenyar i desenvolupar projectes de manera sostenible, aix´ı com saber mesurar l’impacte d’aquest en el planeta. Tamb´ehe d’aprendre els principis deontol`ogicsrelacionats amb la sostenibilitat. Per tant, considero que encara em queda un llarg cam´ıper tal d’estar ben conscienciat de com afecta la ind´ustriainform`aticaal planeta i a la societat.

Destaco que malgrat no tenir una bona base en la sostenibilitat, les meves accions fins al dia d’avui han buscat causar el m´ınimimpacte possible en el medi ambient i la m`aximaqualitat que contribueixi al ben com´ude la societat.

7.2.2 Sostenibilitat econ`omica

A la Secci´o7 s’ha fet un estudi exhaustiu del consum econ`omical PPP, en el qual hi ha inclosos els recursos humans i materials. Aquest pressupost podria ser el pressupost total del projecte, ja que aquest est`asent realitzat per una ´unicapersona, el desenvolupador.

Com ja s’ha comentat, el problema d’estudiar l’aplicaci´ode l’algoritme NEAT als videojocs ja ha sigut solucionat amb anterioritat[3]. En aquestes solucions generalment varen treballar equips de m´esd’una persona.

La soluci´oproposada en aquest projecte pot ser millor econ`omicament que en les ja proposades ja que aquesta disposa de menys recursos humans, i per tant de menys pressupost invertit en aquests.

7.2.3 Sostenibilitat ambiental

L’´unicimpacte ambiental que podria tenir aquest projecte ´esel causat pel consum d’electricitat. Suposant que un ordinador normal consumeix 0,2kW/h i que la duraci´ototal del projecte ´esde 480h, tenim que en total el consum el`ectric´esde 36kW.

El projecte ha estat plantejat de manera que aquest consumeixi el m´ınimnombre de recursos possible, per aix`o´esmolt dif´ıcilminimitzar l’impacte ambiental o reutilitzar els recursos.

Tamb´ecal afegir que es desconeix l’impacte ambiental de les solucions existents, per tant ´es dif´ıcilfer una comparativa i destacar els punts forts de la soluci´oproposada en aquest projecte respecte a la sostenibilitat ambiental.

53 7.2.4 Sostenibilitat social

Aquest projecte unifica dues de les meves grans passions a la vida: els ordinadors i els videojocs. En l’`ambit personal m’aportar`aun major aprofundiment en aquestes dues `areesi satisfacci´oper haver sigut capa¸cd’implementar videojocs i una intel·lig`enciaartificial que els jugui.

Com ja s’ha comentat, aquest problema ja ha sigut resolt i s’ha demostrat que aplicar l’algorit- me NEAT als videojocs pot aportar la possibilitat de crear videojocs amb agents que evolucionen i s’adapten a temps real, al mateix temps que generen el seu propi contingut per satisfer als ju- gadors. La soluci´oproposada en aquest projecte busca optimitzar el rendiment de l’algoritme mitjan¸cant un estudi exhaustiu en els par`ametresi generar solucions m´eseficients.

Realment no existeix una necessitat real d’aquest projecte, ja que l’aplicaci´ode xarxes neu- ronals en temps real als videojocs ´esmolt costosa computacionalment i no ´esun model que es faci servir. Pot ser que en un futur arribem a un punt on els ordinadors siguin m´espotents i conseq¨uentment aquest projecte sigui viable.

7.2.5 Matriu de sostenibilitat

PPP Vida ´util Ambiental 7/10 15/20 Econ`omic 8/10 18/20 Social 9/10 16/20

Taula 20: Matriu de sostenibilitat del projecte.

54 8 Conclusions, possibles millores i opini´opersonal

8.1 Conclusions

L’algoritme NEAT ha sigut demostrat en diverses ocasions com una bona soluci´opel problema de programar un agent que aprengui a jugar a un joc sense coneixement d’aquest. En el cas del nostre projecte aix`oha sigut veritat a mitges, ja que tot i aix´ıque l’algoritme aprenia certes maneres de jugar (e.g distribuir peces per tot el tauler) no ha aconseguit jugar d’una manera estable sense perdre en un interval relativament gran de temps. A m´es,podr´ıem afirmar que aquest objectiu es impossible, ja que altres estudis han acabat tenint el mateix problema [13][14]. La possible causa d’aix`oes que Tetris es un joc molt complex, ja que aquest disposa de molta informaci´oi ´esdif´ıcildeterminar quins son els millors moviments a realitzar en un moment donat.

L’entrada de les xarxes neuronals ha sigut un factor molt determinant en l’acompliment de l’algoritme. S’ha vist a l’experiment de la Secci´o 6.2 que passant entrades pobres com l’altura de cada columna o un n´umeroque indica el tipus de pe¸caactual, la xarxa no ´escapa¸cd’obtenir la informaci´osuficient per prendre diverses decisions. S’ha comprovat que ´esmillor augmentar la el nombre d’entrades i que cal passar informaci´omes rellevant com per exemple el contingut de cada casella.

A l’experiment de la Secci´o 6.3.1 s’ha vist que ´esnecessari tenir un nombre d’individus per poblaci´oprou gran per estimular la diversitat gen`etica.D’aquesta manera s’augmenta l’espai de solucions i conseq¨uentment la probabilitat de trobar un individu que jugui de manera acceptable al joc.

Per altra banda s’ha observat a l’experiment de la Secci´o 6.3.3 que deixar que les xarxes mutin d’una manera indiscriminada ´esmala idea, ja que els genomes es distanciaran molt generant aix´ı esp`eciesd’un sol individu. Ja que els genomes nom´eses creuen amb genomes de la seva esp`ecie, tenim que els genomes que s´onmembres ´unicsd’una esp`ecieno tindran altres genomes amb els quals creuar-se. Aleshores, es redueix l’espai de solucions perqu`eno hi ha diversitat gen`etica dins de les esp`ecies.

8.2 Possibles millores

Com ja s’ha comentat, l’algoritme no ha apr´esa jugar de manera 100% correcta al joc Tetris. Una possible millora del projecte seria continuar l’estudi dels par`ametresper tal de trobar els millors par`ametresper tal de que l’algoritme aprengui a jugar b´eal joc. Per fer aix`oes podrien estudiar els diferents algoritmes d’ajust d’hiperpar`ametres.

Una altra millora molt interessant ´esla de construir una funci´ode fitness m´escomplexa. Pot ser que amb una millor funci´ode fitness l’algoritme aconsegueixi aprendre a jugar millor, ja que aquest tindria encara m´esinformaci´ode quines son les millors moviments a realitzar.

Tamb´e´es podria implementar un joc completament diferent i veure com es desenvolupa NEAT en aquest. Podria estudiar-se si la simplesa del joc influeix en l’acompliment de l’algoritme. Un joc potencial sobre el que provar aix`oseria Flappy Bird.

55 8.3 Opini´opersonal

Com a conclusi´opersonal, he apr´esen aquest projecte que fer un projecte d’aquestes dimensions no ´esgens f`acil.Requereix d’una molt bona organitzaci´oi const`ancia per ser realitzat de manera satisfact`oriai amb resultats de bona qualitat.

Tamb´eha sigut molt divertit implementar un joc ja existent, el Tetris, i veure que aquest fun- cionava correctament. Aix´ımateix, ha sigut molt satisfactori veure com despr´esd’implementar l’algoritme NEAT aquest aprenia a jugar aut`onomament al joc.

Aquest projecte tamb´em’ha aportat m´esconeixements que els apressos a les assignatures de la universitat sobre xarxes neuronals, aix´ıcom d’algoritmes evolutius.

Tamb´epenso que aquest projecte ha sigut una molt bona oportunitat en la qual possar en pr`acticaels diferents coneixements apressos durant la carrera.

56 Refer`encies

[1] Jonathan Schaeffer. One jump ahead: challenging human supremacy in checkers. Springer Science & Business Media, 2013. Cap. 6. [2] Paul Mozur. Google’s AlphaGo Defeats Chinese Go Master in Win for A.I. Maig de 2017. url: https://www.nytimes.com/2017/05/23/business/google-deepmind-alphago- go-champion-defeat.html. [3] Kenneth O Stanley, Bobby D Bryant i Risto Miikkulainen. “Real-time neuroevolution in the NERO video game”. A: IEEE transactions on evolutionary computation 9.6 (2005), p`ag.653 - 668. [4] Erin J Hastings, Ratan K Guha i Kenneth O Stanley. “Evolving content in the galactic arms race video game”. A: Computational Intelligence and Games, 2009. CIG 2009. IEEE Symposium on. IEEE. 2009, p`ag.241 - 248. [5] SethBling. MarI/O - Machine Learning for Video Games. Youtube. 2015. url: https: //youtu.be/qv6UVOQ0F44. [6] M van Gerven i S Bohte. “Artificial Neural Networks as Models of Neural Information Processing.” A: Frontiers in computational neuroscience 11 (2017), p`ag.114. [7] David Silver et al. “Mastering the game of Go with deep neural networks and tree search”. A: nature 529.7587 (2016), p`ag.484 - 489. [8] Charles Darwin. On the Origin of Species. Vol. 71. 6. LWW, 1951. [9] Melanie Mitchell. An introduction to genetic algorithms. MIT press, 1998. [10] Kenneth O Stanley i Risto Miikkulainen. “Evolving neural networks through augmenting topologies”. A: Evolutionary computation 10.2 (2002), p`ag.99 - 127. [11] Mike Cohn. Agile estimating and planning. Pearson Education, 2005. [12] Jussi Koutonen i Mauri Lepp¨anen.“How are agile methods and practices deployed in video game development? A survey into Finnish game studios”. A: International Conference on Agile Software Development. Springer. 2013, p`ag.135 - 149. [13] Daniel Gordon. “Learning to Perform a Tetris with Deep Reinforcement Learning”. A: (). [14] Dan Cohen. Tetris and AI: Next Steps After a Failed Experiment. Gen. de 2018. url: https://dzone.com/articles/tetris-failed-experiment-next-steps.

57 Ap`endix: Resultats complets sobre els par`ametresde l’al- goritme

Influ`encia de la mida de la poblaci´o

Nombre d'espècies per generació

10 Control Test

8

6 # espècies

4

2

0 10 20 30 40 50 Generació

Figura 27: Nombre d’esp`eciesper generaci´oa l’estudi de la influ`enciade la mida de la poblaci´o. La poblaci´oa control ´esde 20 individus, a test ´esde 10 individus.

58 Nombre d'espècies normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 # espècies normalitzat

0.2

0.0

0 10 20 30 40 50 Generació

Figura 28: Nombre d’esp`ecies per generaci´onormalitzat a l’estudi de la influ`enciade la mida de la poblaci´o.La poblaci´oa control ´esde 20 individus, a test ´esde 10 individus.

Fitness mitjà per generació

Control 10 Test

20

30

40

50 Fitness mitjà

60

70

80

90 0 10 20 30 40 50 Generació

Figura 29: Fitness mitj`aper generaci´oa l’estudi de la influ`enciade la mida de la poblaci´o.La poblaci´oa control ´esde 20 individus, a test ´esde 10 individus.

59 Fitness mitjà normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 Fitness mitjà normalitzat

0.2

0.0

0 10 20 30 40 50 Generació

Figura 30: Fitness mitj`aper generaci´onormalitzat a l’estudi de la influ`enciade la mida de la poblaci´o.La poblaci´oa control ´esde 20 individus, a test ´esde 10 individus.

Fitness màxim per generació

Control 0 Test

5

10 Fitness màxim 15

20

0 10 20 30 40 50 Generació

Figura 31: Fitness m`aximper generaci´oa l’estudi de la influ`enciade la mida de la poblaci´o.La poblaci´oa control ´esde 20 individus, a test ´esde 10 individus.

60 Fitness màxim normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 Fitness màxim normalitzat

0.2

0.0

0 10 20 30 40 50 Generació

Figura 32: Fitness m`aximper generaci´onormalitzat a l’estudi de la influ`enciade la mida de la poblaci´o.La poblaci´oa control ´esde 20 individus, a test ´esde 10 individus.

61 Influ`encia del nombre m`aximde generacions

Nombre d'espècies per generació

14 Control Test

12

10

8 # espècies 6

4

2

0 10 20 30 40 Generació

Figura 33: Nombre d’esp`eciesper generaci´oa l’estudi de la influ`enciadel nombre m`aximde generacions. El nombre m`aximde generacions a control ´esde 200, a test ´esde 100.

Nombre d'espècies normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 # espècies normalitzat

0.2

0.0

0 10 20 30 40 Generació

Figura 34: Nombre d’esp`eciesper generaci´onormalitzat a l’estudi de la influ`enciadel nombre m`aximde generacions. El nombre m`aximde generacions a control ´esde 200, a test ´esde 100.

62 Fitness mitjà per generació 30 Control Test

40

50

60 Fitness mitjà

70

80

0 10 20 30 40 Generació

Figura 35: Fitness mitj`aper generaci´oa l’estudi de la influ`enciadel nombre m`aximde genera- cions. El nombre m`aximde generacions a control ´esde 200, a test ´esde 100.

Fitness mitjà normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 Fitness mitjà normalitzat

0.2

0.0

0 10 20 30 40 Generació

Figura 36: Fitness mitj`aper generaci´onormalitzat a l’estudi de la influ`enciadel nombre m`axim de generacions. El nombre m`aximde generacions a control ´esde 200, a test ´esde 100.

63 Fitness màxim per generació

Control

5 Test

10

15

20

Fitness màxim 25

30

35

40

0 10 20 30 40 Generació

Figura 37: Fitness m`aximper generaci´oa l’estudi de la influ`enciadel nombre m`axim de genera- cions. El nombre m`aximde generacions a control ´esde 200, a test ´esde 100.

Fitness màxim normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 Fitness màxim normalitzat

0.2

0.0

0 10 20 30 40 Generació

Figura 38: Fitness m`aximper generaci´onormalitzat a l’estudi de la influ`enciadel nombre m`axim de generacions. El nombre m`aximde generacions a control ´esde 200, a test ´esde 100.

64 Influ`encia de la probabilitat d’encreuament

Nombre d'espècies per generació

Control

12 Test

10

8

# espècies 6

4

2

0 10 20 30 40 50 Generació

Figura 39: Nombre d’esp`eciesper generaci´oa l’estudi de la influ`enciade la probabilitat d’encre- uament. La probabilitat d’encreuament a control ´esdel 50%, a test ´esdel 70%.

Nombre d'espècies normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 # espècies normalitzat

0.2

0.0

0 10 20 30 40 50 Generació

Figura 40: Nombre d’esp`eciesper generaci´onormalitzat a l’estudi de la influ`encia de la proba- bilitat d’encreuament. La probabilitat d’encreuament a control ´esdel 50%, a test ´esdel 70%.

65 Fitness mitjà per generació 30 Control Test

40

50

60 Fitness mitjà

70

80

0 10 20 30 40 50 Generació

Figura 41: Fitness mitj`aper generaci´oa l’estudi de la influ`enciade la probabilitat d’encreuament. La probabilitat d’encreuament a control ´esdel 50%, a test ´esdel 70%.

Fitness mitjà normalitzat per generació

1.0

0.8

0.6

0.4 Fitness mitjà normalitzat

0.2

Control 0.0 Test

0 10 20 30 40 50 Generació

Figura 42: Fitness mitj`aper generaci´onormalitzat a l’estudi de la influ`enciade la probabilitat d’encreuament. La probabilitat d’encreuament a control ´esdel 50%, a test ´esdel 70%.

66 Fitness màxim per generació

Control Test

5

10 Fitness màxim 15

20

0 10 20 30 40 50 Generació

Figura 43: Fitness m`aximper generaci´oa l’estudi de la influ`enciade la probabilitat d’encreua- ment. La probabilitat d’encreuament a control ´esdel 50%, a test ´esdel 70%.

Fitness màxim normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 Fitness màxim normalitzat

0.2

0.0

0 10 20 30 40 50 Generació

Figura 44: Fitness m`aximper generaci´onormalitzat a l’estudi de la influ`enciade la probabilitat d’encreuament. La probabilitat d’encreuament a control ´esdel 50%, a test ´esdel 70%.

67 Influ`encia de la probabilitat de mutacions estructurals

Nombre d'espècies per generació

14 Control Test

12

10

8 # espècies 6

4

2

0 5 10 15 20 25 30 35 Generació

Figura 45: Nombre d’esp`eciesper generaci´oa l’estudi de la influ`enciade la probabilitat de mutacions estructurals. Les probabilitats de mutacions estructural a control s´ondel 20%, a test s´ondel 70%.

68 Nombre d'espècies normalitzat per generació

1.0

0.8

0.6

0.4 # espècies normalitzat

0.2

Control 0.0 Test

0 5 10 15 20 25 30 35 Generació

Figura 46: Nombre d’esp`eciesper generaci´onormalitzat a l’estudi de la influ`encia de la proba- bilitat de mutacions estructurals. Les probabilitats de mutacions estructural a control s´ondel 20%, a test s´ondel 70%.

Fitness mitjà per generació 30 Control Test

40

50

60 Fitness mitjà

70

80

0 5 10 15 20 25 30 35 Generació

Figura 47: Fitness mitj`aper generaci´oa l’estudi de la influ`enciade la probabilitat de mutacions estructurals. Les probabilitats de mutacions estructural a control s´ondel 20%, a test s´ondel 70%.

69 Fitness mitjà normalitzat per generació

1.0

0.8

0.6

0.4 Fitness mitjà normalitzat

0.2

Control 0.0 Test

0 5 10 15 20 25 30 35 Generació

Figura 48: Fitness mitj`aper generaci´onormalitzat a l’estudi de la influ`enciade la probabilitat de mutacions estructurals. Les probabilitats de mutacions estructural a control s´ondel 20%, a test s´ondel 70%.

Fitness màxim per generació 0 Control Test

10

20

30 Fitness màxim 40

50

60

0 5 10 15 20 25 30 35 Generació

Figura 49: Fitness m`aximper generaci´oa l’estudi de la influ`enciade la probabilitat de mutacions estructurals. Les probabilitats de mutacions estructural a control s´ondel 20%, a test s´ondel 70%.

70 Fitness màxim normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 Fitness màxim normalitzat

0.2

0.0

0 5 10 15 20 25 30 35 Generació

Figura 50: Fitness m`aximper generaci´onormalitzat a l’estudi de la influ`enciade la probabilitat de mutacions estructurals. Les probabilitats de mutacions estructural a control s´ondel 20%, a test s´ondel 70%.

71 Influ`encia de la probabilitat de mutacions als pesos

Nombre d'espècies per generació

12 Control Test

10

8

6 # espècies

4

2

0 10 20 30 40 Generació

Figura 51: Nombre d’esp`eciesper generaci´oa l’estudi de la influ`enciade la probabilitat de mutacions als pesos. La probabilitat de mutaci´oa control ´es del 20%, a test ´esdel 70%.

72 Nombre d'espècies normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 # espècies normalitzat

0.2

0.0

0 10 20 30 40 Generació

Figura 52: Nombre d’esp`eciesper generaci´onormalitzat a l’estudi de la influ`encia de la proba- bilitat de mutacions als pesos. La probabilitat de mutaci´oa control ´esdel 20%, a test ´esdel 70%.

Fitness mitjà per generació

Control Test 30

40

50

Fitness mitjà 60

70

80

0 10 20 30 40 Generació

Figura 53: Fitness mitj`aper generaci´oa l’estudi de la influ`enciade la probabilitat de mutacions als pesos. La probabilitat de mutaci´oa control ´esdel 20%, a test ´esdel 70%.

73 Fitness mitjà normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 Fitness mitjà normalitzat

0.2

0.0

0 10 20 30 40 Generació

Figura 54: Fitness mitj`aper generaci´onormalitzat a l’estudi de la influ`enciade la probabilitat de mutacions als pesos. La probabilitat de mutaci´oa control ´esdel 20%, a test ´esdel 70%.

Fitness màxim per generació

Control 20 Test

0

20 Fitness màxim

40

60

0 10 20 30 40 Generació

Figura 55: Fitness m`aximper generaci´oa l’estudi de la influ`enciade la probabilitat de mutacions als pesos. La probabilitat de mutaci´oa control ´esdel 20%, a test ´esdel 70%.

74 Fitness màxim normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 Fitness màxim normalitzat

0.2

0.0

0 10 20 30 40 Generació

Figura 56: Fitness m`aximper generaci´onormalitzat a l’estudi de la influ`enciade la probabilitat de mutacions als pesos. La probabilitat de mutaci´oa control ´esdel 20%, a test ´esdel 70%.

75 Influ`encia del threshold de especiaci´o

Nombre d'espècies per generació

10 Control Test

8

6 # espècies

4

2

0 20 40 60 80 100 Generació

Figura 57: Nombre d’esp`eciesper generaci´oa l’estudi de la influ`enciadel threshold de especiaci´o. El threshold a control ´esde 0.1, a test ´esde 0.5.

Nombre d'espècies normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 # espècies normalitzat

0.2

0.0

0 5 10 15 20 25 30 35 Generació

Figura 58: Nombre d’esp`eciesper generaci´onormalitzat a l’estudi de la influ`enciadel threshold de especiaci´o.El threshold a control ´esde 0.1, a test ´esde 0.5.

76 Fitness mitjà per generació 0 Control Test

20

40 Fitness mitjà

60

80

0 20 40 60 80 100 Generació

Figura 59: Fitness mitj`aper generaci´oa l’estudi de la influ`enciadel threshold de especiaci´o.El threshold a control ´esde 0.1, a test ´esde 0.5.

Fitness mitjà normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 Fitness mitjà normalitzat

0.2

0.0

0 20 40 60 80 100 Generació

Figura 60: Fitness mitj`aper generaci´onormalitzat a l’estudi de la influ`enciadel threshold de especiaci´o.El threshold a control ´esde 0.1, a test ´esde 0.5.

77 Fitness màxim per generació

Control Test 2.5

5.0

7.5

10.0 Fitness màxim

12.5

15.0

17.5

0 20 40 60 80 100 Generació

Figura 61: Fitness m`aximper generaci´oa l’estudi de la influ`enciadel threshold de especiaci´o. El threshold a control ´esde 0.1, a test ´esde 0.5.

Fitness màxim normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 Fitness màxim normalitzat

0.2

0.0

0 20 40 60 80 100 Generació

Figura 62: Fitness m`aximper generaci´onormalitzat a l’estudi de la influ`enciadel threshold de especiaci´o.El threshold a control ´esde 0.1, a test ´esde 0.5.

78 Influ`encia de la import`anciade la diferencia de pesos a la dist`anciaentre genomes

Nombre d'espècies per generació

Control 16 Test

14

12

10

8 # espècies

6

4

2

0 10 20 30 40 50 60 Generació

Figura 63: Nombre d’esp`eciesper generaci´oa l’estudi de la influ`enciade la import`anciade la diferencia de pesos a la dist`anciaentre genomes. La import`anciaa control ´esde 1, a test ´esde 5.

79 Nombre d'espècies normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 # espècies normalitzat

0.2

0.0

0 10 20 30 40 50 60 Generació

Figura 64: Nombre d’esp`eciesper generaci´onormalitzat a l’estudi de la influ`enciade la im- port`anciade la diferencia de pesos a la dist`anciaentre genomes. La import`anciaa control ´es de 1, a test ´esde 5.

Fitness mitjà per generació 30 Control Test

40

50

60

Fitness mitjà 70

80

90

0 10 20 30 40 50 60 Generació

Figura 65: Fitness mitj`aper generaci´oa l’estudi de la influ`enciade la import`ancia de la diferencia de pesos a la dist`anciaentre genomes. La import`anciaa control ´esde 1, a test ´esde 5.

80 Fitness mitjà normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 Fitness mitjà normalitzat

0.2

0.0

0 10 20 30 40 50 60 Generació

Figura 66: Fitness mitj`aper generaci´onormalitzat a l’estudi de la influ`enciade la import`ancia de la diferencia de pesos a la dist`anciaentre genomes. La import`anciaa control ´esde 1, a test ´esde 5.

Fitness màxim per generació

Control

5 Test

10

15

20

Fitness màxim 25

30

35

40

0 10 20 30 40 50 60 Generació

Figura 67: Fitness m`aximper generaci´oa l’estudi de la influ`enciade la import`anciade la diferencia de pesos a la dist`anciaentre genomes. La import`anciaa control ´esde 1, a test ´esde 5.

81 Fitness màxim normalitzat per generació

1.0 Control Test

0.8

0.6

0.4 Fitness màxim normalitzat

0.2

0.0

0 10 20 30 40 50 60 Generació

Figura 68: Fitness m`aximper generaci´onormalitzat a l’estudi de la influ`enciade la import`ancia de la diferencia de pesos a la dist`anciaentre genomes. La import`anciaa control ´esde 1, a test ´esde 5.

82