17
Proyecto Final de Inteligencia Artificial: Miguel Angel Piña Avelino Facultad de Ciencias U.N.A.M. 1 de diciembre de 2010 Resumen En la actualidad los videojuegos forman una parte muy importante de la vida diaria, los cuales son creados para ofrecer un entretenimiento en general y basado en la interacción entre una o más personas y un aparato que ejecute dicho video- juego. La inteligencia artificial juega un papel importante dentro de los videojuegos, ya que sus métodos abren nuevas posibilidades en el arte de desarrollo de un videojue- go, permitiendo que se realicen experiencias ricas en interaccion y entretenimiento para el usuario. En este documento se hara un pequeño analisis de una tecnica de inteligencia ar- tificial en videojuegos en especifico, la cuál será: el aprendizaje, en particular los algoritmos genéticos. 1. Introducción Los juegos son parte integral de todas las culturas humanas conocidas. Estos son una forma de interacción social, además de proveernos modelos de situaciones conflic- tivas y cooperativas en las que podemos reconocer situaciones y pautas que se repiten con frecuencia en el mundo real. Un videojuego es un software creado para el entrenimiento en general y basado en la interacción entre una o más personas y un aparato que ejecuta dicho videojuego.[1] Los videojuegos se encuentran en varios géneros y formatos, como la nueva forma de los viejos métodos de la interacción social dentro de los juegos. Esta nueva expresión de juegos permite a los investigadores en inteligencia artificial probar nuevos métodos para el desarrollo de la misma. La inteligencia artificial es un elemento importante en los videojuegos, aunque es- ta sea muy sencilla o muy compleja, sirve para controlar a los NPC’s -Non Playing Characters- (Personajes No Controlados por un jugador), establecer nuevas narrativas dentro de los videojuegos, es decir, “no solo el manejo de dialogos sencillos y unas cuantas decisiones, sino de una genuina cuestion sentimental en la que el jugador se ve completamente sumergido, gracias al poder que los programadores otorgan a los susodichos NPC’s”.[2] En este artículo se hará un pequeño análisis de una técnica de inteligencia artificial que será el aprendizaje, en particular, los algoritmos genéticos para proveer aprendizaje a 1

Proyecto final

Embed Size (px)

Citation preview

Page 1: Proyecto final

Proyecto Final de Inteligencia Artificial:

Miguel Angel Piña AvelinoFacultad de Ciencias U.N.A.M.

1 de diciembre de 2010

Resumen

En la actualidad los videojuegos forman una parte muy importante de la vidadiaria, los cuales son creados para ofrecer un entretenimiento en general y basadoen la interacción entre una o más personas y un aparato que ejecute dicho video-juego.La inteligencia artificial juega un papel importante dentro de los videojuegos, yaque sus métodos abren nuevas posibilidades en el arte de desarrollo de un videojue-go, permitiendo que se realicen experiencias ricas en interaccion y entretenimientopara el usuario.En este documento se hara un pequeño analisis de una tecnica de inteligencia ar-tificial en videojuegos en especifico, la cuál será: el aprendizaje, en particular losalgoritmos genéticos.

1. IntroducciónLos juegos son parte integral de todas las culturas humanas conocidas. Estos son

una forma de interacción social, además de proveernos modelos de situaciones conflic-tivas y cooperativas en las que podemos reconocer situaciones y pautas que se repitencon frecuencia en el mundo real.Un videojuego es un software creado para el entrenimiento en general y basado en lainteracción entre una o más personas y un aparato que ejecuta dicho videojuego.[1]Los videojuegos se encuentran en varios géneros y formatos, como la nueva forma delos viejos métodos de la interacción social dentro de los juegos. Esta nueva expresiónde juegos permite a los investigadores en inteligencia artificial probar nuevos métodospara el desarrollo de la misma.La inteligencia artificial es un elemento importante en los videojuegos, aunque es-ta sea muy sencilla o muy compleja, sirve para controlar a los NPC’s -Non PlayingCharacters- (Personajes No Controlados por un jugador), establecer nuevas narrativasdentro de los videojuegos, es decir, “no solo el manejo de dialogos sencillos y unascuantas decisiones, sino de una genuina cuestion sentimental en la que el jugador seve completamente sumergido, gracias al poder que los programadores otorgan a lossusodichos NPC’s”.[2]En este artículo se hará un pequeño análisis de una técnica de inteligencia artificial queserá el aprendizaje, en particular, los algoritmos genéticos para proveer aprendizaje a

1

Page 2: Proyecto final

NPC’s, y el problema será dentro de un pequeño juego cuya temática versará sobre unapocalipsis zombie, que constará de unos cuantos niveles y al avanzar en los nivelesproveer una mayor dificultad para eliminar a los zombies.Para estos NPC’s (zombies) se les proveerá de unas habilidades iniciales que al avan-zar de nivel, los que más acercaron, permitiran generar una nueva población con suscaracterísticas aumentando un poco su dificultad para eliminarlos.

2. Inteligencia ArtificialLa inteligencia artificial es una rama de las Ciencias de la Computación que se de-

dica al desarrollo de agentes racionales no vivos.Un agente es cualquier cosa que pueda ser capaz de percibir el entorno en el que sedesenvuelve(percibir entradas), procesar dichas entradas, y realizar acciones en su en-torno; la racionalidad es la “característica que poseé una elección ser correcta”, másen concreto, la capacidad de tender a maximizar un resultado esperado. Entonces, enpalabras de la Wikipedia:

“Por lo tanto, y de manera más específica la inteligencia artificial es la dis-ciplina que se encarga de construir procesos que al ser ejecutados sobreuna arquitectura física producen acciones o resultados que maximizan unamedida de rendimiento determinada, basándose en la secuencia de entra-das percibidas y en el conocimiento almacenado en tal arquitectura.”[3]

En la inteligencia artificial, existen distintos tipos de conocimiento y representación delconocimiento, los cuales pueden ser dados por el diseñador del agente y/o aprendidospor el agente durante la fase de ejecución utilizando diversas técnicas de aprendizaje.Actualmente, la inteligencia artificial puede dividirse en 2 escuelas de pensamiento:

Inteligencia Artificial Convencional

Inteligencia Computacional

2.1. Inteligencia Artificial ConvencionalEsta basada en el análisis formal y estadistico del comportamiento humano ante

diversos problemas. Entre los cuales podemos citar a los siguiente:

Razonamiento basado en casos: Ayuda a tomar decisiones mientras se resuelvenciertos problemas concretos y aparte que son muy importantes requieren de unbuen funcionamiento.

Sistemas expertos: Infieren una solución a través del conocimiento previo delcontexto en que se aplica y ocupa de ciertas reglas o relaciones.

Redes bayesianas: Propone soluciones mediante inferencia estadística.

Inteligencia artificial basada en comportamientos: que tienen autonomía y pue-den auto-regularse y controlarse para mejorar.

2

Page 3: Proyecto final

Smart process management: facilita la toma de decisiones complejas, proponien-do una solución a un determinado problema al igual que lo haría un especialistaen la actividad.

2.2. Inteligencia Artificial ComputacionalLa inteligencia computacional esta basada en el desarrollo o aprendizaje interacti-

vo. Este aprendizaje se realiza basándose en datos empíricos. Este tipo de inteligenciaartificial se centra en el estudio de mecanismos adaptativos para permitir el comporta-miento racional del agente en sistemas complejos o cambiantes. Dentro de la inteligen-cia artificial computacional podemos encontrar técnicas como las siguientes:

Redes Neuronales: Es un paradigma de aprendizaje y procesamiento automáticoinspirado en la forma en que funciona el sistema nervioso de los animales. Setrata de un sistema de interconexión de neuronas en una red que colabora paraproducir un estímulo de salida.

Computación Evolutiva: Es un paradigma de la inteligencia artificial, que involu-cran problemas de optimización combinatoria. Esta inspirada en los mecanismosde evolución biológica. En la actualidad hay tres corrientes principales que con-forman la computación evolutiva:

• Programación evolutiva: es una variante de los algoritmos genéticos, dondelo que cambia es la representación de individuos. En el caso de la progra-mación evolutiva los individuos son ternas que cuyos valores representanestados de un autómata finito.

• Estrategias Evolutivas: son métodos computacionales que trabajan con unapoblación de individuos que pertenecen al dominio de los números reales,que mediante los procesos de mutación y de recombinación evolucionanpara alcanzar el óptimo de la función objetivo.

• Algoritmos genéticos: Estos algoritmos hacen evolucionar una poblaciónde individuos sometiéndola a acciones aleatorias semejantes a las que ac-túan en la evolución biológica (mutaciones y recombinaciones genéticas),así como también a una selección de acuerdo con algún criterio, en funcióndel cual se decide cuáles son los individuos más adaptados, que sobreviven,y cuáles los menos aptos, que son descartados. También es denominado al-goritmos evolutivos, e incluye las estrategias evolutiva, la programaciónevolutiva y la programación genética.

3. Algoritmos GenéticosLos algoritmos genéticos están inspirados en la evolución biológica y su base

genético-molecular.Estos algoritmos hacen evolucionar una población de individuossometiéndola a acciones aleatorias semejantes a las que actúan en la evolución bioló-gica (mutaciones y recombinaciones genéticas), así como también a una selección deacuerdo con algún criterio, en función del cual se decide cuáles son los individuos más

3

Page 4: Proyecto final

adaptados, que sobreviven, y cuáles los menos aptos, que son descartados. También esdenominado algoritmos evolutivos, e incluye las estrategias evolutiva, la programaciónevolutiva y la programación genética.Un algoritmo genético es un método de busqueda dirigida basada en probabilidad. Bajouna condición muy débil (que el algoritmo mantenga elitismo, es decir, guarde siem-pre al mejor elemento de la población sin hacerle ningún cambio) se puede demostrarque el algoritmo converge en probabilidad al óptimo. En otras palabras, al aumentarel número de iteraciones, la probabilidad de tener el óptimo en la población tiende a 1(uno)1.

3.1. FuncionamientoLos algoritmos genéticos imitan a la evolución biológica para resolver distintos

tipos de problemas. Dado el problema a resolver, el algoritmo genético toma comoconjunto de entrada un conjunto de potenciales soluciones a ese problema codificán-dolas de alguna manera, y una métrica llamada función de aptitud(fitness) que permiteevaluar cuantitatívamente a cada candidata. Estás candidatas pueden ser soluciones queya se saben que funcionan, con el objetivo que el algoritmo genético las mejore, perogeneralmente son generadas aleatoriamente.Luego el AG evalúa cada candidata de acuerdo con la función de aptitud(fitness). En unacervo de candidatas generadas aleatoriamente, por supuesto, la mayoría no funciona-rán en absoluto, y serán eliminadas. Sin embargo, por puro azar, unas pocas pueden serprometedoras -pueden mostrar actividad, aunque sólo sea actividad débil e imperfecta,hacia la solución del problema-.

Estas candidatas prometedoras se conservan y se les permite reproducirse. Se rea-lizan múltiples copias de ellas, pero las copias no son perfectas; se introducen cambiosaleatorios durante el proceso de copia. Luego, esta descendencia digital prosigue conla siguiente generación, formando un nuevo acervo de soluciones candidatas, y son so-metidas a una ronda de evaluación de aptitud. Las candidatas que han empeorado o nohan mejorado con los cambios en su código son eliminadas de nuevo; pero, de nuevo,por puro azar, las variaciones aleatorias introducidas en la población pueden haber me-jorado a algunos individuos, convirtiéndolos en mejores soluciones del problema, máscompletas o más eficientes. De nuevo, se selecionan y copian estos individuos vence-dores hacia la siguiente generación con cambios aleatorios, y el proceso se repite. Lasexpectativas son que la aptitud media de la población se incrementará en cada ron-da y, por tanto, repitiendo este proceso cientos o miles de rondas, pueden descubrirsesoluciones muy buenas del problema.

3.2. Representación (Esquemas)Antes de iniciar con una posible representación del conocimiento que puedan tener,

es conveniente, determinar cuando usar estos algoritmos:

1La demostración de la convergencia al óptimo la encontrarán en [9]

4

Page 5: Proyecto final

Si la función a optimizar tiene muchos máximos/mínimos locales se requeriránmás iteraciones del algoritmo para “asegurar” el máximo/mínimo global.

Si la función a optimizar contiene varios puntos muy cercanos en valor al ópti-mo, solamente podemos “asegurar” que encontraremos uno de ellos (no necesa-riamente el óptimo).

Un enfoque común para representar el conocimiento de entrada, es el establecerlascomo cadenas binarias (es decir cadenas de 1’s y 0’s), donde cada posición determinael valor de algún aspecto de la solución.Otro método similar, consiste en codificar las soluciones como cadenas de enteros onúmeros flotantes, de igual manera que en el método anterior, cada posición determinaalgun valor de la solución. Este método tiene mayor ventaja que el anterior, ya quepermite codificar las soluciones con una mayor precisión y complejidad.

3.3. Algoritmo genético simple (AGS)El algoritmo genético simple, es el nombre popular del algoritmo de Holland[7]

retomada por Goldberg[8]2 El algoritmo es el siguiente:

1. Decidir como codificar el dominio del problema.

2. Generar un conjunto aleatorio (población inicial) de N posibles soluciones.

3. Calificar cada posible solución (individuo) de la población actual.

4. Seleccionar dos individuos de la población actual con una probabilidad propor-cional a su calificación.

5. Lanzar una moneda al aire (con probabilidad pc caé cara).

6. Si cayó cara mezclar los códigos de los dos individuos seleccionados para formardos híbridos, a los que llamaremos nuevos individuos

7. Si cayó cruz llamamos a los individuos seleccionados nuevos individuos.

8. Por cada gen de cada nuevo individuo lanzar otra moneda al aire (con probabili-dad pm cae cara.

9. Si cae cara cambiar el gen en turno por otro aleatorio, cuyo valor este definidoen el intervalo de codificación del problema.

10. Si cae cruz el gen permanece inalterado.

11. Incluir a los dos nuevos individuos en una nueva población.

12. Si la nueva población tiene ya N individuos, llamarla población actual, y regresaral paso 3, a menos que se cumpla alguna condición de terminación.

2Para el siguiente algoritmo se modifica principalmente, la forma en que se toman los códigos genéticospara poder utilizar en nuestro problema, el cual generalizaremos a un tipo de dato Numeric.

5

Page 6: Proyecto final

13. Si no regresar al paso 4.

Dentro del algoritmo, cuando se hace referencia a lanzar una moneda al aire, se refierea realizar un experimento de Bernoulli, es decir, aquel que solo se tiene dos eventosposible, uno con probabilidad p y otro con probabilidad 1-p. Nuestra condición determinación en nuestro problema particular será el de la terminación del juego, es decir,cuando nuestro jugador haya “muerto” o cierre la ventana del juego.

4. ProblemaEl juego desarrollado tendrá la siguiente temática: crear una serie de agentes que

tienen como único objetivo perseguir a una presa (el usuario) y asi obtener diferentestipos de comportamientos ante los posibles comportamientos de los agentes.Al inicio del juego se crearán 30 individuos con un conjunto de habilidades, y al trans-currir 7 segundos del juego, se tomarán los más aptos de acuerdo con la función fitnessdel algoritmo genético para así crear una nueva generación de individuos que conten-drán ciertas habilidades de sus antecesores.Con lo anterior se podrá obtener una nueva generación de individuos con una mayorprobabilidad de ser mejor que sus padres, con ésto se “debería” ir aumentando las pro-babilidades de poder atrapar a su presa (esto será una selección natural, en la que solotendrán descendencia aquellos que mostraron un mejor desempeño).Además, durante el juego, cada dos generaciones se creará un nuevo agente generadopor el azar, un agente que puede tener mejores características o habilidades que losagentes que existen en ese momento, o tal vez las mismas características de la pobla-ción base. Así podemos obtener un agente más apto que cualquier otro (mutación deganancia de función) o podría resultar en un agente con características inferiores a losde las generaciones que la preceden (mutación letal o deletérea).Lo anterior se realizará durante toda la ejecución del juego hasta el alcance del objetivo.

4.1. Etapas del proyectoEl desarrollo del videojuego consta de tres etapas significativas para el desarrollo y

aplicación de cada una.

1. La función crossover de la aplicación, que en este caso es la única al principio

2. Como el crossover no es suficiente, es necesario agregar una función de muta-ción.

3. La última etapa es de optimización, la cual es la más dificil de implementar, estano se pudo desarrollar, dado que aún faltan muchas cosas por conocer respecto acoordinación entre agentes; ésta tiene mejores funciones de fitness(más específi-cas, claras, complejas) y estrategias y coordinación entre agentes.

6

Page 7: Proyecto final

Figura 1: Ejecución del juego

7

Page 8: Proyecto final

5. DesarrolloEn ésta sección se mostrará como se implemento el videojuego en C#.

Primero se mostrará los atributos de los enemigos con base al diseño UML que se mos-trará enseguida:Y éste es el código de la implentación en C# para los atributos del agente:

Figura 2: Enemigo

//atributo de la generacionpublic float escala;//atributo de la generacionpublic float velocidad;//atributo de la generacionpublic float aceleracion;//atributo de la generacionpublic Color color;//atributo de la generacionpublic int ataq;

Lo anterior es la parte de codificación del dominio de nuestro problema, lo cual esta-mos restrigiendo a las habilidades del agente, éstos nos servirán como genes para poderoperar sobre ellos.Descripción de los colores.

public static Color[] c ={Color.AliceBlue, Color.Azure,Color.YellowGreen, Color.Turquoise,Color.Violet, Color.Tomato,Color.SteelBlue, Color.Snow,Color.SkyBlue, Color.Peru,Color.PaleVioletRed, Color.Olive,Color.Navy, Color.MintCream,Color.Magenta, Color.Linen,Color.Lime, Color.Ivory,Color.Gold, Color.Crimson,

8

Page 9: Proyecto final

Color.Bisque, Color.LightSalmon,Color.LightSlateGray, Color.MediumSeaGreen,Color.MidnightBlue, Color.SeaShell,Color.Silver};

Descripción del ataque:

public void Update(GameTime theGameTime, Vector2 pos){

switch (ataq){

case 0:mueveteXY();break;

case 1:persigue(pos);break;

case 2:mueveteX();break;

case 3:mueveteY();break;

case 4:nada();

break;

default:break;

}

}

En el código anterior se crean cinco tipos de comportamiento o ataque de los agentes,los cuales listaré enseguida:

Perseguir jugador

No se mueve

9

Page 10: Proyecto final

Moverse sobre eje X

Moverse sobre eje Y

Moverse sobre XY

Lo siguiente a mostrar es la función prefitness, pero antes de ello es necesarioexplicar en que consiste.La función prefitness lo que hace es que, antes de que uun agente pueda ser evaluadopor la función fitness tiene necesariamente que pasar por un pre-fitness, en el cual serequiere que el agente haya sobrevivido los 7 segundos antes de poder ser evaluado enel fitness.Un agente es eliminado si:

Se sale de la pantalla.

Colisiona con el jugador.

Ya que se tiene esto ahora es pasarlo por una función fitness, para volverlo candidato aser parte de la población base para entrar dentro del algoritmo genético.En el siguiente porción de código se ve de manera sencilla la función fitness

//paso de los elementos por la función fitnessif(enemigos.ElementAt(i).fitness(p.Position) >550){enemigos.RemoveAt(i);......}//Función fitnesspublic float fitness(Vector2 pos)

{return Vector2.Distance(Position, pos);

}

Como se vé, la función fitness solo pide una distancia menor de 550 pixeles de dis-tancia hacia el jugador, si esto no se cumple cuando han transcurrido 7 segundos(unageneración), el agente es eliminado del juego.Ya que hemos mostrado esencialmente las características propias del enemigo, es mo-mento de mostrar las caractetísticas del usuario:

Figura 3: Usuario

10

Page 11: Proyecto final

Controlado por humano

5 vidas disponibles

Desplazamiento X-Y (7 pixeles)

La implementación para dar el comportamiento deseado del usuario es la siguiente:

public void Update(GameTime theGameTime){

KeyboardState aCurrentKeyboardState =Keyboard.GetState();if(aCurrentKeyboardState.IsKeyDown(Keys.Left)== true){

Position.X -= 7;}else if(aCurrentKeyboardState.IsKeyDown(Keys.Right)== true){

Position.X += 7;}

if (aCurrentKeyboardState.IsKeyDown(Keys.Up)== true)

{Position.Y -= 7;

}else if(aCurrentKeyboardState.IsKeyDown(Keys.Down)== true){

Position.Y += 7;}inScreen();

}

5.1. CrossoverYa se comentó sobre las características de los enemigos y el usuario, entonces, aho-

ra se mostrará la forma de operar el crossover entre los individuos.Se describirá de la forma de descendencia normal, donde solo los que cumplan conla función fitness serán conservados y podrán tener descendencia. Éstos podrán teneralgunas características en especial.

11

Page 12: Proyecto final

if(generacion % 500 == 0){for (byte i = 0; i < 10; i++)

{enemigos.Add(new Enemigo(enemigos.ElementAt(

r1.Next(enemigos.Count)).Position+new Vector2(30, 30),enemigos.ElementAt(r1.Next(enemigos.Count)).velocidad,enemigos.ElementAt(r1.Next(enemigos.Count)).aceleracion,

enemigos.ElementAt(r1.Next(enemigos.Count)).color,

imagen,enemigos.ElementAt(r1.Next(enemigos.Count)).escala,enemigos.ElementAt(r1.Next(enemigos.Count)).ataq));}}

La siguiente imagen se da de manera gráfica la forma de obtener el crossover.

5.2. MutaciónDado que ahora ya pasamos la parte del crossover, claramente se nota que no es su-

ficiente para resolver nuestro problema. Tenemos a nuestros agentes que sobrevivan ypasen la función fitness tendrán descendencia, pero su descendencia tendrá solamentecaracterísticas de sus antecesores, entonces, ahí es donde entra una nueva de tratar deresolver nuestro problema; la solución dada es la mutación, la cual podrá darle ventajao desventaja respecto a sus habilidades actuales, lo cual implica que, o bien gana me-jores aptitudes respecto a la población o solo empeora.Para esto analicemos varios escenarios:

Inmóviles: Claramente estos agentes desaparecerán en la primera iteración delalgoritmo, ya que estos no tendrán descendencia.

Siguen una sola dirección: Éstos también se extinguirán ya que el usuario sepuede mover en cualquier dirección y estos tendrán una distancia mayor, lo cualconllevará a no ser tomados en cuenta por el pre-fitness.

Persiguen por toda la pantalla: Éstos agentes tendrán mayor probabilidad dedejar descendencia, ya que se estarán aproximando al usuario en mayor medidaque los anteriores.

12

Page 13: Proyecto final

Figura 4: Crossover

13

Page 14: Proyecto final

Figura 5: fig: Juego

Pero en el transcurso del juego, los agentes en su intento de alcanzar al usuario iránformando una fila. Entonces para el usuario solo le será suficiente utilizar las orillaspara mantenerse a salvo. Ahora si el usuario es lo suficientemente ágil, entonces sepodrían acercar a los agentes a una orilla y esperar el momento de la selección e irtratando de ir al otro lado ocasionando la desaparición de todos. ¿Pero si el usuario eslo suficientemente hábil para ir desapareciendo a los que se mueven e ir dejando solo alos que están estáticos?Entonces, es ahí cuando se implementa la mutación para los agentes; la mutación esun proceso biológico que consiste en alterar la información genética de un ser vivoy que, por lo tanto, va a producir un cambio en sus caracteríticas, que se presenta demanera súbita y espontánea, y que se pueden transmitir a su descendencia. La mayo-ría de las ocasiones este tipo de mutaciones son maléficas para el ser vivo que tieneésta mutación, pero hay ocasiones en que es benéfica cuando el ambiente en el que sedesenvuelven, un claro ejemplo es el de la Biston betularia, o mariposa del abedul esun lepidóptero nocturno que durante el día descansa en las ramas o troncos de los árbo-les cubiertos de líquenes de color grisáceo. El color blanco sucio de las alas contribuyea que sean confundidas con la base sobre la que se posan. Pero en los últimos 200 años

14

Page 15: Proyecto final

el color de la gran mayoría se tornó grisáceo y oscuro, dado que los líquenes de losárboles en los que descansaban también se tornó oscuro y las convirtió a las maripo-sas de color claro en presas fáciles de los animales insectívoros. Entonces para nuestroproyecto es una buena idea el de implementar una mutación para poder cambiar ciertosaspectos que mantienen las generaciones en el transcurso del juego.De esta manera podriamos tener mejores características para un momento dado, peroque ya no funcionen para generaciones posteriores, o que características que no fun-cionaban para un momento dado no significa que no sirva tampoco en generaciones aposteriori, así que en la simulación vemos si sobreviven los más agresivos o los máscautos. Esto podría implicar en el éxito o fracaso de estos.Así que la solución de a este problemas que se están mostrando está basada en el re-troceso mismo. Igual que antes cuando se haga la selección y la descendencia de losagentes, se escogerán habilidades de estos, pero cada ciertas generaciones un descen-diente tendrá características que tal vez ya no se utilizaban. Como ejemplo supongamosque llegamos de nuevo al momento en que ya ninguno se mueve. Esta vez mientras unoespera que se termine el ciclo de vida de la generación y se aleja lo suficiente podríaaparecer un agente que base su ataque en algún tipo de movimiento. Así lograría acer-carse lo suficiente al usuario para mantener a la especie con vida durante otra genera-ción y esperando que su descendencia conserve la habilidad de moverse. En el caso enque todos los agentes persigan, la creación de uno estático o que se mueva hacia el ladocontrario de donde están los demás, también podría culminar en la conservación de losagentes. Claro todo esto se da por probabilidades y siempre existirá la probabilidad deque este agente no presente ninguna característica nueva, ocasionando así el fracaso yexterminio de todos. Lo siguiente muestra como se crea un agente con posibilidades detener genes recesivos.

if (generacion % 1000 == 0){enemigos.Add(new Enemigo(new Vector2(r1.Next(900), r1.Next(600)),velocidad[r.Next(velocidad.Length)],aceleracion[r.Next(aceleracion.Length)],Enemigo.c[r1.Next(Enemigo.c.Length)],imagen,escala[r.Next(escala.Length)],r.Next(6)));

Aquí finaliza la segunda etapa. Y todo lo que corresponde a código y partes implemen-tadas.

5.3. OptimizaciónLas principales cosas que hacen falta para esto son varias.

Entre las principales cosas se encuentran:

Comunicación para los agentes.

Estrategias entre los agentes.

15

Page 16: Proyecto final

Entre otros problemas de naturaleza estadística.

Para esto se propone lo siguiente:

Para hacer la evaluación se darían 30 segundos, en los cuales se guardarían losrecorridos del usuario y de los agentes.

Se cambiarían las vidas por una barra de puntos, para poder tener el daño inflin-gido por los agentes al usuario.

Añadir funciones estadísticas, para tener un mejor análisis de puntos de coli-sión, distribución sobre el área de juego, desempeño de los agentes dadas por lasdistancias obtenidas, etc.

Como esto ya sale de alcance del diseño del juego solo se quedan por ahora comopropuestas de mejoramiento.

6. ConclusionesLos algoritmos genéticos en particular y la computación evolutiva en general son de

las lineas más prometedoras en el campo de la inteligencia artificial, ya que proponenmejores métodos para la resolución de problemas no algoritmicos, permitiendo que sehaga una analogía con la naturaleza en la busqueda de soluciones probabilísticas.Bajo condiciones muy simples (mantener elitismo) se puede demostrar que los algorit-mos genéticos siempre convergen al óptimo de la soluciones propuestas.En este proyecto se puede notar que no siempre es fácil el simular procesos naturalescomo parece en un principio. Cuando se modelan problemas, no siempre es posibletomar todas las características que estan juego, solo es posible, actualmente, el tomarsolo las necesarias para tener mejores restricciones y aproximaciones para resolver elproblema.Nuestro agentes en un principio solo eran entidades monótonas que facilmente podría-mos eliminarlas, entonces, para resolver éste problema fue necesario meter los concep-tos de mutación y evolución, lo cual lleva a tener agentes con características distintasen cada paso de la ejecución, introduciendo una especie de “efecto caótico” para poderasí tener una mejor dificultad en contra del usuario.Cuando se aplican los conceptos antes dichos, los agentes tienden a tener leves mejo-rías conforme avanzan en las generaciones.Al tratar de meter una capacidad de optimización para nuestro programa, se puede no-tar que la complejidad para desarrollarse es cada vez mayor; pero los resultados crecenpara tener mejores capacidades en el desempeño de los agentes.Por lo que los algoritmos genéticos representan una alternativa de bajo costo para laresolución de diversos problemas. Los algoritmos genéticos representan una forma detener mejores modelos para el diseño de solución de diversos problemas no solo paranuestro caso particular que es el desarrollar un videojuego sino para problemas de dis-tinta índole que requieran que los datos no se mantengan estáticos y evolucionen en eltiempo sin necesidad de observalos de manera constante.

16

Page 17: Proyecto final

Referencias[1] Wikipedia (Videojuegos)

http://es.wikipedia.org/wiki/Videojuegos

[2] Gamers (articulo “La nueva narrativa de los videojuegos”). Revista. Marzo 2009.

[3] Wikipedia (Inteligencia Artificial).http://es.wikipedia.org/wiki/inteligencia_artificial

[4] Game Design Workshop. Tracy Fulleron, Christopher Swain, Steven Hoffman.CMP Books. 2005.

[5] Wikipedia (Algoritmos Genéticos).http://es.wikipedia.org/wiki/Algoritmos_genéticos

[6] Algoritmos Genéticos. Ángel Kuri Morales, José Galaviz Casas. Fondo de Cultu-ra Económica. 2002.

[7] Adaptation In Natural And Artificial Systems, Holland J. H., 2a. edición, MITPress, 1992.

[8] Genetic Algorithms In Search, Optimization And Machine Learning, GoldbergD., Addison Wesley, 1989.

[9] ALGORITMOS GENÉTICOS: ALGUNOS RESULTADOS DE CONVERGEN-CIA.Mario Alberto Villalobos AriasDepartamento de Matemáticas Centro de Investigación y de Estudios Avanzadosde I.P.N.http://semana.mat.uson.mx/Memorias/villalobos.pdf

17