La Mejor Solución Evolutiva al Dilema del Prisionero Iterado Jesús Gutiérrez García Centro de Investigación en Computación Instituto Politécnico Nacional México D.F. [email protected] Angel Kuri Morales Centro de Investigación en Computación Instituto Politécnico Nacional México D.F. [email protected] Resumen En este trabajo hacemos una presentación del programa que resultó ganador del concurso del Dilema del Prisionero Iterado (DPI) que fue abierto a la comunidad internacional durante el evento Congress on Evolutionary Computation 2000 (CEC2000), celebrado en la ciudad de San Diego, California del 16 al 19 de julio del 2000. En la primera parte de nuestro trabajo hacemos una introducción al problema del DPI. En la segunda parte describimos el algoritmo que se usó para atacar el problema planteado durante CEC2000. Este algoritmo está basado en técnicas de Algoritmos Genéticos coevolutivos. En la tercera parte se presentan algunas conclusiones y se plantean trabajos futuros. Palabras Clave. Cooperación, dilema, algoritmos genéticos, coevolución, CEC2000. 1. Planteamiento y Antecedentes En este trabajo tratamos un problema clásico de la teoría de juego que vierte una nueva luz en muchos de los problemas que han ocupado a filósofos éticos y políticos [1][2] a través de la historia. El interés que ha despertado permite, incluso, plantear una ética que se puede encontrar expuesta en Internet [3][4]. Este problema se refiere a una situación en la cual hay que decidir cuál es la opción racional para un individuo como parte de un grupo y para el grupo en su totalidad. Nos ayuda a entender cómo tales dilemas se pueden resolver para obtener el mayor beneficio individual y colectivo. Aunque el planteamiento del problema se hace en términos de un juego, sus implicaciones van mucho más allá de éste. Por ejemplo, a la luz del DPI se ha analizado el problema de la carrera armamentista [5], la correcta selección de proveedores de bienes y servicios en una economía de libre mercado [6] y la política de asignación de fondos para el desarrollo de la ciencia [7], entre otros. 1.1 El dilema del prisionero iterado El problema denominado Dilema del Prisionero toma su nombre de la siguiente situación hipotética: “En una celda la policía mantiene a dos presos políticos. El interrogador está intentando persuadirlos a confesar que son miembros de un partido ilegal de la oposición. Los presos saben que si ninguno de ellos confiesa, el investigador no podrá levantar cargos pero éste podría proseguir el interrogatorio durante tres meses antes de dejarlos ir. Si uno de ellos confiesa implicando al otro, el primero (que confesó) será liberado inmediatamente y 1 el otro será condenado a ocho meses de prisión. Por otra parte, si ambos confiesan será tomada en cuenta su ayuda y tendrán cinco meses de prisión cada uno. Los prisioneros son interrogados por separado. No saben si el otro a confesado o no, pero a ambos se les informa del trato que, por separado, se ha ofrecido a cada uno. El dilema es: ¿Cuál es la mejor estrategia? ¿Confesar (abandonar a la contraparte) o no confesar (cooperar con la contraparte)?” Este dilema puede plantearse como un “juego” en el que se califica a los jugadores de acuerdo con la siguiente tabla de ponderación. Dependiendo de la respuesta de ambos prisioneros cada uno de ellos obtendrá una puntuación. En el caso que ha sido descrito, esta puntuación refleja las pérdidas derivadas de una posible respuesta., tal como se muestra en la tabla T.1.1.1. En este caso el objetivo es minimizar la pérdida. Alternativamente, el problema puede plantearse como la obtención de un beneficio, en cuyo caso buscaríamos maximizar la ganancia. Jugada Puntos Prisionero Prisionero Prisionero Prisionero 1 2 1 2 Coopera Abandona 8 0 Coopera Coopera 3 3 Abandona Abandona 5 5 Abandona Coopera 0 8 Tabla T.1.1.1. Tabla de Ponderación del DP Este problema se denomina “Dilema del Prisionero Iterado” si el proceso se repite varias veces. El verdadero interés de este problema está, precisamente, en iterar las acciones arriba planteadas. Cuando esto ocurre es que los participantes pueden aprender a ajustar su comportamiento en función del comportamiento del segundo participante. Los puntos de cada jugador son la suma de los puntos que obtuvo en cada jugada. Así, un juego entre dos participantes podría ser como sigue: Jugadas 1 2 3 4 5 6 7 8 Puntuación C A C C A C C A 8+5+3+3+0+8+3+5=35 Prisionero 1 0+5+3+3+8+0+3+5=27 Prisionero A A C C C A C A 2 Tabla T.1.1.2. Ejemplo de una Secuencia del DPI En el juego iterado del dilema del prisionero se desea encontrar la estrategia que minimiza los daños (o maximiza las ganancias) dado que se lleva el registro de las últimas n jugadas. En el ejemplo anterior el jugador 1 recibe un daño de 35, mientras el daño recibido por el jugador 2 es de solamente 27: el jugador 2 ha ganado. La solución minimax dada por la teoría de juegos busca minimizar el daño máximo que el oponente puede infringir. Este se determina comparando el máximo daño bajo cooperación contra el máximo daño bajo abandono. Si el primer jugador Coopera (C,-) el máximo daño es cuando el segundo jugador Abandona (CA) originando un daño de 8 para 2 el primer jugador. Si el primer jugador abandona (A,-), el máximo daño ocurre, nuevamente, cuando el jugador 2 hace la respuesta A (AA). Ahora el daño al jugador uno es de 5. Así que el primer jugador sufre un daño mínimo siempre abandonando. Este razonamiento es simétrico así que (AA) es la mejor solución minimax. Es fácil ver, sin embargo, que la mejor estrategia es aquella en la que ambos jugadores cooperan. Por ejemplo, en una secuencia de longitud 4 (4 iteraciones) la estrategia minimax indica que la mejor estrategia sería AA;AA;AA;AA. La pérdida para el jugador 1 (y para el jugador 2, también) es de 5+5+5+5=20. Pero, claramente, la estrategia CC;CC;CC;CC induce una pérdida para el jugador 1 de 3+3+3+3=12; mucho mejor que el óptimo minimax. En general es más común plantear la tabla de ponderación del DPI como una tabla de ganancias y no como una de pérdidas. Para ese caso, es posible generalizar el juego con una tabla con valores variables que, para preservar el espíritu del juego, deberán de cumplir con las restricciones indicadas como se muestra en la tabla T.1.1.3. Estas restricciones se identifican con las siglas en inglés: C (cooperate); L (low); H (high) y D (defect). Mi movimiento C C A A Movimiento del oponente C A C A L< D<C <H H + L <= 2C Puntuación C L H D Tabla T.1.1.3. Tabla de Ponderación de DPI con Valores Variables Por ejemplo, los valores C=3, L=0, H=5 y D=1 indican que el jugador 1 ganará 3 puntos si ambos jugadores cooperan (CC), 0 puntos si solamente él lo hace (CA), 5 puntos si él abandona y el jugador 2 coopera (AC) y 1 punto si ambos abandonan. Aquí, obviamente, 0<1<3<5 y 5+0<6, satisfaciendo las restricciones. Para esta tabla de ponderación la estrategia minimax de abandono sostenido se traduce en ganancias constantes de 1 punto. En el ejemplo ilustrado arriba (de 4 iteraciones), cada jugador ganaría 4 puntos. La estrategia de cooperación constante, por otra parte, induciría una ganancia de 12 puntos para cada jugador. Se han estudiado diversas variantes a este problema [3]. Por ejemplo, cuando se tienen múltiples movimientos por jugador, puntuación no simétrica en la tabla, múltiples jugadores, etc. 1.2 Estrategias Se le llama estrategia a una o varias reglas que nos indican cómo debemos jugar el DPI. Tenemos algunas estrategias simples como: Siempre Cooperar (SC) o Siempre Abandonar (SA). Una de las estrategias comunes (y simples) es la llamada Tit-For-Tat (Uno-por-Otro [TT]). En esta estrategia el jugador empieza cooperando. Después repite el último movimiento del oponente. Sorprendentemente, TT resulta ser muy eficiente. Si ejecutamos 3 juegos de 5 iteraciones con las estrategias TT, SA y SC usando los valores C=3, L=0, H=5 y D=1, tendríamos los resultados que se muestran en la tabla T.1.2.1. Otra estrategia es la denominada estrategia de Pavlov (EP) y se muestra en la figura F.1.2.1 como un autómata de 2 estados. El estado inicial está dado por la flecha con un solo extremo en uno de los círculos. El resto de las flechas están etiquetadas con la jugada del oponente y la respuesta correspondiente. Estrategia TT SA C A 0 5 A A 1 1 TT SC C C 3 3 C C 3 3 SA SC Acción/Puntos A 1 A 1 A A 1 1 A A 1 1 Total 4 9 C C 3 3 C C 3 3 15 15 A 5 A 5 A 5 A 5 A 5 C 0 C 0 C 0 C 0 C 0 Tabla T.1.2.1. Resultado de Confrontar las Estrategias TT, SA y SC. 25 0 C C 3 3 A/C 2 1 A/A C/A C/C Figura F.1.2.1. Estrategia de Pavlov Esta estrategia responde C siempre y cuando las jugadas anteriores (del oponente y el concursante) sean iguales. Un juego de 5 iteraciones, con la tabla de ponderación T.1.1.3. que confronte a SA vs. EP sería así: Estrategia SA EP Acción/Puntos A 1 A 5 A 1 A 5 A A 1 C 0 A 1 C 0 A Tabla T.1.2.2. Resultado de Confrontar las Estrategias SA y EP 4 1 1 Total 13 3 Existe una gran variedad de estrategias [8] y software con el cual se pueden construir estrategias propias y hacer torneos entre ellas. Por ejemplo, el programa WINPRI que se puede obtener en [8]. 1.3. Diseño de la estrategia Una estrategia puede depender de N jugadas anteriores para N entera y N ≥ 0. Así, SA y SA no dependen de ninguna jugada anterior; TT depende sólo de la respuesta recibida mientras que EP depende tanto de la respuesta recibida como de la jugada anterior propia. Una forma de representar las estrategias es con un vector [9] en donde cada posición representa la respuesta que se debe de dar frente a cada posible situación. Por ejemplo, si durante las 2 anteriores jugada se ha registrado la secuencia ACAC se dará la respuesta que se observe en las localidades correspondientes del vector. Entonces lo que se necesita es asignar a cada conjunto de respuestas un número y la forma más sencilla es hacerlo en binario. Así, si las 2 jugadas anteriores han sido ACAC se convierten las C en “1” y las A en “0” y se obtendrá la cadena“1010” (que corresponde a 12 decimal). Deberemos, entonces, responder con el elemento del vector cuyo índice sea 12. En el caso de la estrategia de Pavlov (que solo toma en cuenta la jugada anterior) podemos representar la estrategia como se muestra en la tabla T.1.3.1. Jugadas Anteriores Estado Entrada del vector Respuesta Propia/Oponente AA 2 1 C AC 2 2 A CA 1 3 A CC 1 4 C Tabla T.1.3.1. Determinación de las Respuestas de EP a Partir de un Vector. Con esta notación se puede ver que la respuesta de EP es CAAC. En el caso de TT la respuesta será AACC. Si es necesario utilizar estrategias que dependen de más jugadas anteriores junto con aquellas que sólo dependen de una o dos sólo debemos repetir la secuencia. Esto es, la respuesta de SA corresponde a AAAA; no depende de ninguna jugada previa. Por lo tanto, la longitud de la cadena que representa a una estrategia, depende de las jugadas previas (l) que esta toma en cuenta y es 2 2l . 2. Solución al DPI usando un Algoritmo Genético Dada la representación anterior es posible utilizar un algoritmo genético (AG) para resolver el problema y encontrar una estrategia que resuelva el dilema del prisionero [10]. El algoritmo básico que se usó para ganar en CEC200 se describe a continuación. 1) Generar un conjunto S de m estrategias aleatoriamente. 2) Desde i ← 1 hasta 6×6m hacer [de a) a c)]:. a) Elegir al azar dos estrategias s1 y s 2 de S. b) Confrontar s1 y s 2 un número predefinido de veces. c) Registrar los resultados tanto de s1 como de s 2 . 3) De las S estrategias elegir las mejores t (aquellas cuyo comportamiento promedio ha sido el mejor). Tomamos entonces a ese conjunto de estrategias (T) como la base contra 5 las cuales debemos de probar a los individuos del algoritmo genético (dentro de las mejores T se inserta TT por convención). 4) Generar una población inicial aleatoria de n estrategias candidato (C) 5) Mientras criterio de convergencia no se ha alcanzado hacer. a) Desde i ← 1 hasta n. i) Elegir la estrategia ci de C. ii) Desde j ← 1 hasta t (1) Confrontar a ci contra sj (2) Registrar la suma de los resultados como fitness de la población C. b) De los n individuos en la población más los t individuos en el en el conjunto base, elegir a los mejores t. Estos constituirán el conjunto base para la siguiente generación. c) Obtener una nueva C usando un EGA 6) La mejor estrategia es la mejor calificada del conjunto T. Este algoritmo es coevolutivo porque el conjunto de las mejores estrategias encontradas (T) cambia (o evoluciona) al mismo tiempo que las estrategias C que evolucionan con el algoritmo genético. El AG usado es no convencional (le hemos denominado AG Ecléctico o AGE). Contempla elitismo total, selección determinista de Vasconcelos, es autoadaptable para la probabilidad de mutación, la de cruzamiento y para el numero de individuos por generación, además de utilizar cruza anular y un escalador autoadaptable. La descripción detallada de este algoritmo se puede consultar en [11] , [12]. El AGE ha sido aplicado a la solución del DPI y el software desarrollado para este efecto y el cual puede ser obtenido de [10] o directamente de Internet en la dirección http://148.204.45.189/galsk; el lector interesado también puede referirse a [10]. Este software sólo requiere que se le den los valores de la tabla (que anteriormente se usaron como L, D, C y H) y el número de jugadas (g) que debe recordar la estrategia. La salida del programa será una cadena de longitud 2 2 g que codifica la estrategia encontrada. 2.1 Concurso internacional CEC2000 En el departamento de matemáticas de la Universidad Estatal de Iowa (Iowa State University) se organizó el Congress on Evolutionary Computation con sede en San Diego, California, que se llevó a cabo del 16 al 19 de julio del 2000. Como parte de este congreso se organizaron cuatro concursos, a saber: 1) 2) 3) 4) Reason vs Evolution: Prisoner’s Dilemma Competition Time series prediction competition Dow Jones Prediction Competition Visualization Competition Las reglas para cada concurso se especificaron en [13] y buscaban la aplicación de las técnicas de computación evolutiva a cada uno de los problemas enlistados. A continuación se resumen las instrucciones referentes al Dilema del Prisionero Iterado. 1. Se debe enviar el código que contenga un grupo de estrategias que podrán ser publicadas en la WEB después de la prueba. Debe estar contenido en un archivo plano de C++ con lo siguiente: Definición de tipos/ estructuras/ variables globales/ int firstact() { codigo que inicializa al jugador y regresa 6 la primera jugada } int pla (int lastact) { Codigo que porcesa la jugada del oponente “lastact” y regresa la jugada actual.} 2. Se debe utilizar “0” para codificar “C” (cooperar) y “1” para “A” (abandonar). 3. Las estrategias que requieran memoria excesiva o mucho tiempo serán descalificadas. 4. Todas las estrategias que concursan, más unas previamente diseñadas, se incorporarán a un solo conjunto. Este grupo será adicionado a una interfaz en C++ que podrá invocar a cualquiera de ellas. 5. Se agregarán estrategias de forma que el número de ellas sea cercano a un múltiplo de diez para obtener un balance entre las estrategias diseñadas (manuales) y las desarrolladas con técnicas evolutivas. 6. Se realizarán 100 iteraciones del procedimiento siguiente: a) El grupo total será dividido en grupos de 10. b) Se seleccionarán valores aleatorios de L, D, C, H en un rango de 0 a 10. c) Se jugarán N rondas con N normalmente distribuido con media 300 y varianza de 25. d) En cada grupo se realizarán 10 torneos en los cuales cada par de jugadores jugarán N rondas de DPI. e) El jugador con la mayor puntuación de cada grupo de 10 recibirá 10 puntos, el siguiente 9, y así respectivamente. f) El ganador será determinado por el total de puntos. A este concurso se envío un programa que se describe en los siguientes párrafos. Este programa, como se mencionó en el resumen, resultó ser ganador del torneo. 2.1.1 Programa Ganador del Concurso internacional CEC2000 La estrategia que se envío a este concurso fue obtenida con el algoritmo coevolutivo antes descrito. Sin embargo, puesto que los valores de ponderación, de acuerdo con las bases, serían variables, se determinó lo siguiente. 1. Se utilizó una memoria de 4 jugadas. Es decir, el AG consideró 8 semi-jugadas previas para determinar su estrategia. El espacio de búsqueda de la mejor estrategia, por tanto, tiene 8 22 = 2256 = (210 )25 × 26 ≈ 64 × (103 )25 ≈ 64 × 1075 posibles soluciones. Es un tributo a las capacidades analíticas del AGE que se logre encontrar una buena solución en tiempos razonables. 2. Como en el concurso el programa no recibe información sobre los parámetros L, D, C y H se generaron todas las posibles combinaciones de valores enteros positivos que cumplían las condiciones del problema (250 en total). De estas 250 combinaciones de parámetros se hizo una selección aleatoria de 10 de ellas. 7 3. Se evolucionaron (usando el AG coevolutivo) las mejores soluciones para cada uno de los conjuntos de parámetros. 2.1.2 Consideraciones Los criterios descritos en la sección anterior obedecen a las siguientes consideraciones: 1. Se eligió una memoria de 4 jugadas (m=8; 8 semi-jugadas) porque experiencias anteriores [14] habían encontrado soluciones satisfactorias para m=6. Evidentemente, se buscaba superar esa marca. Por otro lado, los tiempos de evolución con este valor todavía son prácticos. 2. Se eligieron 10 combinaciones porque un análisis de determinación de clusters usando mapas auto-organizados neuronales (redes neuronales de Kohonen) nos indicó que los grupos de parámetros estaban suficientemente caracterizados considerando 10 elementos. 3. Asumimos que, dadas las bases del concurso, era razonable esperar que las peores actuaciones de cada una de las 10 estrategias contrincantes, en promedio, serían menos aptas que las nuestras, que fueron coevolucionadas. Así, el programa que se envió al concurso elegía aleatoriamente una de las 10 cadenas, de longitud 28=256 y las cuatro primeras jugadas (cuando aún no podía usar la estrategia por falta de información) respondía con TT. A continuación se muestran las cadenas solución enviadas al concurso. Los valores que aparecen como comentario (//) corresponden a los valores de L, D, C, H. Nótese que cada cadena es de longitud 256. Esto se debe a que, dado que m = 8, el conjunto de historias (secuencias de jugadas del oponente y propias) es de 28 = 256. Para los parámetros (0-7-6-4), por ejemplo, la secuencia histórica AAAAAACC (índice = 3) induce una respuesta, de parte nuestra, de abandono (0 o A); pero la secuencia histórica AAAAACAA (índice = 4) induce nuestra respuesta “coopero” (1 o C). Por otro lado, y como un último ejemplo, mencionaremos que para los parámetros (1-9-7-5) las mismas secuencias (índices = 3 y 4) inducen las respuestas C y C. //0,7,6,4 "000010011100100000111100110001010100010010010110001101110101010110100011 1111110100101010000011010110111010110111101100011011010111000001101000011 1001010101100110111101100011100110111011010100111000010101000001101101110 11000111001011100101101010011100111011", //1,8,5,2 "110000010101010011001110010000011111101011001010001101100001101100010001 1101110000111001010011101000011111011111111000011100110010000110111000000 0111101000001101111000001011001000001110110001011111000100001011001100111 01000010101011000111100001110110000000", //1,8,7,5 8 "000010011011100111011110110001001000011110011010010000101101101110100010 1001101011010000011111010101110001000010011011010101101111011111010100010 1101100110111111101000100001001110011110000001010111101011101101000100111 01001010010101110101101010111000111011", //1,9,7,5 "111110000110101100010001000111101110000111100011000110000110010111000101 1110010001110111001100110011011110010111111001000010010011111110010100011 1101010110010010010110000110100111110000100101101010000001011101010110100 10110101110101011111000010111110011001", //0,9,6,2 "001101000000000010111011011111010101011001000000011100011000010010110010 1001000010101011001001010000100100110001111111011100011111101001110100000 0010110100101110000111101001001010110110001010111110001000110100111100000 11101111110010100011111100010101001010", //1,8,7,6 "101110010101100111000011000100101100011011100011000011001000100110110010 0001000111110100111010000010111111011000111110000001011110101010101010001 0010011011000111101001001010011011111110110101101111100010111101011001101 00001101101001101001101001100100101011", //2,9,8,7 "101110010101100111000011000100101100011011100011000011001000100110110010 0001000111110100111010000010111111011000111110000001011110101010101010001 0010011011000111101001001010011011111110110101101111100010111101011001101 00001101101001101001101001100100101011", //3,9,7,5 "110111001110001110000111001011011010100011010100110001001001100100001000 1110111110100000000000001110111001111100000000010001010110010010000100100 0011101000111000111000110010101010111110111001001100000111011101010010101 10100111110100000100000111001100000010", //3,10,9,5 "010001100010111001010011110001010100101011011011100111010011000111011101 0010001001010110110100110110011010011111101100000111110100000111110001011 1001011000000010001001111000110000001100110111011111000101110111011100000 01010011110101001001100011000101000101", //4,10,8,5 "110101100010011110010100110110010100101001111111010010001000001110001111 0100110110111110100010010000100100011011011110110110010011100110100001011 1101110010001001111001110011101101011110100011110111000001100111000001011 01101010011011010111010011001011001101" 3. Conclusiones y Trabajos Futuros 3.1. Implicaciones El hecho de haber convocado a la comunidad internacional para atacar el DPI por medios evolutivos es representativo de varios hechos: a) Este problema es de una importancia que trasciende el ámbito estrictamente formal. b) Aunque se plantea como un juego, sus implicaciones tienen interés fuera del ámbito de la teoría de juegos. c) Las herramientas evolutivas han tenido éxito para atacar este tipo de problemas allí en donde técnicas alternativas de análisis y búsqueda han fracasado. 9 d) La comunidad internacional que manifiesta interés en la inteligencia artificial y sus aplicaciones es ya lo suficientemente madura como para asimilar, primero, la importancia de este tipo de problemas y abordar con éxito, después, el problema inherente a su solución con algoritmos genéticos. 3.2. Futuros Desarrollos Para evitar tener que hacer una selección aleatoria de los posibles valores de las combinaciones de L, C, D y H es posible cambiar el programa que encuentra las cadenas [10]. En lugar de sumar los puntos que se obtienen en cada jugada se puede llevar un registro de cuantas veces se obtuvo L o D o algún otro valor. Así, el resultado de un torneo entre dos estrategias no seria un número sino una combinación lineal de los valores L, C, D y H. Entonces, utilizando las 250 combinaciones de valores posibles se sabría cual de las dos estrategias ganaría para cualquier valor de los parámetros. Después de esto se debe hacer un análisis estadístico que compare el comportamiento de la cadena resultante mediante este nuevo método con el programa que ya se envió al concurso, y que ganó, para saber qué tan buen desempeño tiene. 3.3. Agradecimientos Desde el punto de vista técnico es interesante consignar que los autores han aplicado conceptos novedosos para resolver este problema (algoritmos genéticos no convencionales; selección muestral de estrategias) pero apoyándose en estudios y desarrollos previos (las propias técnicas evolutivas; el concepto de coevolución). Por ello deseamos consignar nuestro agradecimiento a todos aquellos investigadores que nos han precedido en esta búsqueda por el mejor algoritmo del DPI: a John Holland por sus trabajos iniciales en el área de los AGs, a Robert Axelrod por haber motivado a la comunidad mundial a asomarse al DPI y sus complejidades, a Douglas Hofstadter y otros investigadores por haber sensibilizado a la misma comunidad acerca de las implicaciones del DPI fuera del ámbito restringido de la teoría de juegos, a Dan Ashlock por haber propuesto y supervisado este certamen internacional. 10 Referencias [1] Keohane, Robert. O. 1984. After Hegemony:Cooperation and Discord in the World Political Economy. Princenton. [2] Castaingts, Juan. Así vamos... El dilema del FOBAPROA. Editorial, Excelsior Financiera. 7 Noviembre 1998. México [3] Stanford Encyclopedia of Philosophy. Prisoner’s Dilemma http://plato.stanford.edu/entries/prisoner-dilemma/ [4] An Ethic Based on the Prisoner's Dilemma http://www.spectacle.org/995/ [5] Dewdney, A. K., Computer Recreations, Scientific American, October, 1987. [6] Hofstadter, D., Metamagical Themas, Scientific American , May, 1983. [7] Hofstadter, D., Metamagical Themas, Bantam Books, 1986. [8] Iterated Prisoner’s Dilemma http://www.lifl.rf/IPD/ipd.html [9] Axelrod, Robert. The Complexity of Cooperation. Princventon University Press. 1997. [10] Kuri, Angel. A Solution to the Prisoner’s Dilemma using an Eclectic Genetic Algorithm. Informe Técnico Centro de Investigación en Computación. No. 21. Serie Roja. 1998. [11] Kuri, Angel. A Universal Eclectic Genetic algorithm for constrained optimization. EUFIT’98, 1998. pp 518-522 [12] Kuri, Angel. A Comprehensive approach to Genetic Algorithms in Optimization and Learning Theory and Applications. Volumen 1. Fundations. IPN-SEP. Colección de Ciencias de la Computación. 1999. [13] CEC 2000 Competitions. http://www.math.iastate.edu/danwell/CEC2000/comp.html [14] Mitchell, M., An Introduction to Genetic Algorithms, pp. 17-21, MIT Press, 1996. 11