Volumen 6, número 2
Investigación
CIENTIFICA
enero–julio 2012, issn 1870–8196
Evolución de las poblaciones
luis Copertari santiago esparza uriel ramÍrez–garCÍa Universidad Autónoma de Zacatecas
Correo–e: copertari@yahoo.com
2
Investigación
CIENTIFICA
Resumen La evolución de las poblaciones en los seres vivos y la evolución de los individuos en algoritmos genéticos comparten la misma característica: ambas funcionan debido a que los mejores esquemas o secuencias de información tienden a reproducirse con mayor frecuencia. En este ensayo se analiza numéricamente un ejemplo en el que se trabaja con diferentes tamaños de población y distintos percentiles de los individuos mejor adaptados para hacer las cruzas. La hipótesis es que entre mayor sea la población y la cantidad de individuos mejor adaptados que se crucen sea superior, mejor será el resultado obtenido. Palabras clave: evolución, población, cruza, esquemas, algoritmos genéticos.
Introducción La naturaleza emplea potentes medios con el propósito de impulsar la evolución satisfactoria de los organismos. Aquellos que son poco aptos para un determinado ambiente mueren, en tanto que los que están bien adaptados se reproducen. Los hijos son semejantes a sus padres, por lo que cada nueva generación tiene organismos similares a los miembros bien dotados de la generación anterior. Si las modificaciones del ambiente son menores, las especies irán evolucionando gradualmente a la par con él; sin embargo, es probable que un súbito cambio del entorno provoque la desaparición de especies enteras. En ocasiones se producen mutaciones al azar, y aunque usualmente implican la pronta muerte del individuo mutado, algunas de ellas dan como resultado nuevas y satisfactorias especies. La publicación de la obra de Darwin El origen de las especies basada en la selección natural representó un parteaguas en la historia de la ciencia. Con el trabajo de Friedberg (1958) surgieron los algoritmos genéticos. Friedberg intentó producir un aprendizaje a partir de la mutación de pequeños programas de Fortran. Como la mayoría de las mutaciones efectuadas en los programas produjeron
un código inoperativo, fue poco el avance logrado. John Holland (1975) renovó este campo al emplear representaciones de agentes con cadenas de bits, de tal manera que mediante cualquier cadena posible se pudiera representar un agente en operación. John Koza (1992) ha logrado notables resultados en representaciones más complejas de agentes junto con técnicas de mutación y apareamiento en las que se centra la atención en la sintaxis del lenguaje de representación. Con anterioridad se ha hecho un extensivo trabajo en algoritmos genéticos. Los autores que han aportado a este campo son demasiados para nombrarlos a todos. Sin embargo, siempre ha sido de particular interés la selección de los parámetros a utilizar en el algoritmo genético así como el modo de representación del problema. Algunos investigadores han propuesto técnicas automáticas para definir la representación de los individuos, como Shaefer (1987), técnicas de codificación dinámica de parámetros, como Schraudolph y Belew (1992), y algoritmos genéticos desordenados, como Goldberg et al. (1991). Es importante señalar que también se ha trabajado en los operadores. En ese sentido, diferentes operadores juegan distintos roles en diversas etapas del proceso evolutivo. Los operadores deben adaptarse, por ejemplo, en cruza adaptativa de Schaffer y Morishima en (1987) y de Spears (1995). Además, se han hecho experimentos para el control de los parámetros del algoritmo genético enfocados a encontrar probabilidades adaptativas de los operadores (Davis, 1989; Julstrom, 1995; Shrinivas y Patnaik, 1999; Tuson y Ross, 1996), aunque aún queda trabajo por hacer. Se debe tener en cuenta que los algoritmos genéticos no son lo mismo que la reproducción y evolución de las especies. Ambos están basados en el mismo patrón: la mezcla de esquemas específicos que al ser evaluados resultan en mejores nuevas generaciones, ya sea mediante la adaptación del individuo en la población (para el caso de las especies) o por medio de la evaluación numérica (para el caso de los algoritmos genéticos). En este ensayo se experimenta con el tamaño de la población y el porcentaje o percentil a tomar de los individuos mejor
Volumen 6, número 2 enero–julio 2012, issn 1870–8196
adaptados a fin de observar cuáles casos conducen a soluciones con un menor error promedio.
Figura 1 Cruza entre dos individuos (un «macho» y una «hembra»)
Materiales y métodos En general, el proceso de los algoritmos genéticos consta de cinco fases: Codificación. Se genera la población de individuos de manera aleatoria y se asegura de que sin importar el valor que cada individuo posee, la representación simbólica usada (típicamente, pero no necesariamente, una secuencia de unos y ceros) no conduzca a valores o individuos inadmisibles. Mutación. De acuerdo con los parámetros de la mutación, se procede a modificar los bits o segmentos de código para aquellos individuos seleccionados. Evaluación. Se emplea una regla o función dada para evaluar qué tan apto es un individuo según sus características (genoma). Reproducción. Se procede a reproducir (cruzar) los individuos de la generación anterior para crear una nueva generación. Aquí es posible dejar algunos individuos de la generación previa o sustituirlos a todos por nuevos individuos. La cruza se hace al seleccionar dos individuos (de los más aptos, elegidos a través de una evaluación) y generar uno o dos individuos. La figura 1 muestra el cruce de dos individuos (un «macho» y una «hembra») para crear un nuevo individuo. Los dos individuos «padres» podrían generar dos individuos en lugar de uno si también se toma la parte derecha del «macho» y la parte izquierda de la «hembra». La forma de generar a los «padres» puede ser probabilística acorde con su evaluación o se puede escoger al mejor percentil de la población. Aún así, es más sencillo escoger a la mejor mitad de la población al mejor percentil. Decodificación. Los datos contenidos en el genoma se transforman en una solución viable según los datos que contenga la población.
3
Macho
Hembra
1 0 1 1
0 1 0 0
1 0 0 0
Existe una iteración entre los pasos cuatro y dos hasta que un cierto porcentaje de la población (g) haya llegado a la misma solución. También se observa que al ser w la tasa de mutación por individuo, la ecuación (1) debe satisfacerse. Esto se debe a que suponiendo que se haya logrado que el 100 por ciento (1) de los individuos tenga la misma solución, la tasa de mutación (w) hará que w*100 por ciento de los individuos muten, y en consecuencia, ya no tengan esa solución. Es decir, de la ecuación (1) se deriva la ecuación (2). La tasa generacional (g) debe típicamente ser substancialmente menor que 1–w acorde a la ecuación (2). A menor valor de g, llegará más rápido el algoritmo a una solución (aunque no sea la correcta). A la vez, a mayor valor de w, mayor será la variación aleatoria (mutación) de la población, lo que producirá más ruido; dicha situación se ilustra en la figura 2. Figura 2 Evaluación de la población a lo largo de varias generaciones Población
1 1–w g
El algoritmo terminaría
Generaciones
4
Investigación
CIENTIFICA
También es posible dejar que el algoritmo genético itere de modo indefinido y elegir la mejor solución obtenida hasta el momento cada vez que sea requerido por el usuario.
tamaño de la población aumenta, es una mejor estrategia de cruza y conduce a un menor error en la solución, se da la ecuación cúbica descrita en la ecuación (3).
g+w<1 g << 1–w
y =4x3–8x2+3x–2=0
(1) (2)
No obstante, la mutación se da en el paso dos y es posible que después de la cruza ya haya g*100 por ciento individuos con la misma solución, por lo que no se procedería a mutar. Pese a lo anterior, la ecuación (1) es una regla que debe considerarse en la asignación de valores a los parámetros del algoritmo genético. Algunas de las ventajas de los algoritmos genéticos, de acuerdo con Haupt y Haupt (2004) son: a) Se logra el perfeccionamiento con variables continuas o discretas. b) No requieren información derivada. c) Buscan simultáneamente en un amplio rango de la superficie de costo. d) Tratan con un gran número de variables. e) Están bien equipados para lidiar con computadoras paralelas. f) Optimizan variables con superficies de costo bastante complejas (pueden saltarse de un mínimo local). g) Proveen una lista de variables óptimas, no sólo una solución. h) Pueden codificar las variables de forma tal que la optimización es hecha con las variables codificadas. i) Trabajan con datos generados por medio de números, datos experimentales o funciones analíticas. Los algoritmos genéticos producen resultados sorprendentes cuando las técnicas de optimización tradicionales, tales como la programación lineal, fallan. Algunas veces, en la evaluación de una función analítica, el cálculo de los algoritmos genéticos puede ser mejor. El hecho de que una amplia población de soluciones sea requerida significa que los métodos tradicionales pueden encontrar la solución más rápidamente. Si computadoras en paralelo se hallan disponibles, los algoritmos genéticos pueden tomar ventaja porque cada procesador puede calcular el ajuste de un grupo de individuos. Los algoritmos genéticos son idealmente diseñados para la computación paralela. Con el propósito de establecer si la cruza de un mayor percentil de la población, a medida que el
(3)
Esta ecuación tiene dos soluciones imaginarias (que no nos conciernen) y una solución real, la cual se muestra en la ecuación (4). 1
1 x = 64 + 3 417 3 + 6
(
)
7 6
(64 + 3
417
1 3
)
+
2 ≈ 1.733751929 3
(4)
Con los algoritmos genéticos se busca la solución real. Para evaluar en una cadena de ocho bits, donde el primer bit indica el signo del número en cuestión, se convierte el número ocho en un número real y se divide entre 64, de tal suerte que el máximo número posible es (27–1)/64 = 127/64 = 1.984375. Por definición el número 10000000 = –128/64 = –2 dado que 00000000 = 0/64 = 0 y que 01111111 = 127/64 = 1.984375, puesto que el número 11111111 = –127/64 = –1.984375. La solución buscada es un número que se encuentra entre –2 y 1.984375. En cada corrida del algoritmo, se itera entre los pasos cuatro y dos hasta que el g*100 por ciento de la población ha alcanzado la misma solución. Para efectos de validez estadística, se usa un número r de corridas, de acuerdo con la fórmula de la desviación estándar (s) mostrada en la ecuación (5) y tomada de un libro de Kvanli et al. (1989).
r=
Z
2 /2
E
(5)
Z a/2 es el valor de la distribución normal para un intervalo de confianza dado (a). En este caso, Z a/2 es igual a 1.96, lo cual implica una confianza del 95 por ciento. El valor para s es la desviación estándar de la población, que está típicamente aproximado por la desviación estándar de la muestra. Dado que no se tiene tal valor, es posible aproximarlo por medio de la ecuación (6).
σ≈
H−L 4
(6)
Volumen 6, número 2 enero–julio 2012, issn 1870–8196
La razón de la fórmula de la ecuación (6) es que se conoce como regla empírica que el 95.4 por ciento de la población estará entre m–2s y m+2s. Sea L = m–2s el valor mínimo esperado en la muestra y H = m+2s el valor máximo esperado, se tiene que H–L = 4s. Dado que el estadístico señala el número de corridas requeridas, el máximo valor para tal estadístico sería r (H = r), mientras que el mínimo sería cero (L = 0). Al sustituir H y L en la ecuación (6) da la ecuación (7).
σ≈
r (7) 4
Con la sustitución de s de la ecuación (7) en la ecuación (5), resulta la ecuación (8). 2
Z r r = α /2 (8) 4E Cuando se resuelve r de la ecuación (8) da la ecuación (9). 4E r = Z α /2
2
(9)
El único parámetro que no se considera por ahora es E, el cual denota el error absoluto. Se le asigna al considerarlo un valor de 7. Con la ecuación (9) se obtiene el tamaño de la muestra (200), como se apunta en la ecuación (10). ⎛ (4 )(7 ) ⎞ 2 r=⎜ ⎟ = 204.08 ≈ 200 (10) ⎝ 1.96 ⎠ Así pues, el proceso de iteración de los algoritmos genéticos se debe aplicar 200 veces, lo que generará cada vez una nueva población. Se emplea una tasa de mutación (w) por individuo del 5 por ciento (es decir, la probabilidad de que un individuo mute es del 5 por ciento) y una probabilidad de 25 por ciento de que alguno de los bits de un individuo seleccionado mute. La selección de la tasa de mutación obedece a varias pruebas y errores. La tasa generacional (g) es del 50 por ciento a fin de que el algoritmo no se tarde demasiado en converger a una solución. La reproducción, es decir, la creación de un nuevo individuo a partir de dos individuos antecesores, obedece a la evaluación que se hace del individuo
5
(cada individuo indica un cierto valor de x) con base en la ecuación (3), en la que entre más cercano a cero se halle, mejor evaluado (apto) estará el individuo. Se toma un x*100 por ciento percentil superior de la población escogido de manera aleatoria para la cruza, donde x puede ser 5, 10, 15 y 20 por ciento. La cruza se hace al tomar y juntar los primeros cuatro bits del primer individuo y los últimos cuatro bits del segundo individuo. Cabe destacar que la población abarcada en el estudio fue de 5, 10, 20, 30, 40, 50, 60, 70 y 80 individuos. Asimismo es de suma relevancia aclarar que no importa la velocidad de la máquina utilizada, ni la marca o el modelo, puesto que se arroja el resultado de una de las 200 corridas una vez que se ha alcanzado el gx100 por ciento (tasa generacional) de la población con la misma solución. Si la máquina tiene un procesador lento, se tardará más tiempo en llegar a satisfacer el requerimiento,1 pero eventualmente se conseguirá la información requerida. La velocidad del procesador o el tipo de computadora no afecta el resultado a alcanzar. Con el objeto de experimentar con estos parámetros se creó un programa diseñado en Delphi 7 (Pascal) debido a la utilidad de la interface gráfica orientada a objetos y a la familiaridad con el lenguaje de programación. El resultado de la iteración del programa en una población de 20 individuos, una tasa de mutación (w) del 5 por ciento, un percentil superior del 10 por ciento, una tasa generacional (g) del 50 por ciento y 200 corridas (r) se muestra en la figura 3.
Resultados y discusión Se utilizó el programa anterior con una población de 5, 10, 20, 30, 40, 50, 60 70 y 80 individuos para percentiles superiores a tomar de la población de 5 por ciento, 10 por ciento, 15 por ciento y 20 por ciento. El error promedio en la función para todos los casos estudiados se muestra en la tabla «Errores de experimentación».
1
Si tal es el caso y si g no es demasiado alta comparada con 1–w.
Investigaci贸n
6
CIENTIFICA Figura 3 interFaCe de usuario del programa de experimentaCi贸n
errores promedio de la experimentaCi贸n Poblaci贸n Percentil 5
10
20
30
40
50
60
70
80
5
1.9956
1.0454
0.5195
30.7641
50.5331
29.4263
13.1238
13.9347
19.3373
10
1.9956
1.0454
66.1833
22.7513
47.7852
29.1539
16.7338
13.5803
9.9408
15
1.9956
67.2193
66.7153
46.1448
28.1653
17.0820
18.3030
13.6306
8.6360
20
1.9956
67.0268
51.5804
40.4398
25.9799
18.5276
11.7512
10.6144
8.5086
La tabla anterior se grafica en la figura 4.
Volumen 6, número 2 enero–julio 2012, issn 1870–8196
7
Figura 4 Gráfica de población versus errores promedio de la experimentación para diferentes percentiles superiores
80
ERROR PROMEDIO
70 60 50 40 30 20 10 0 0
10
20
30
40
50
60
70
80
90
POBLACIÓN 5
10
Analizar los resultados de la figura 4 no es tan sencillo. Cada línea es un percentil dado. El eje de las x representa el tamaño de la población, en tanto que el eje de las y indica el error promedio obtenido, que se obtiene de la tabla. Sobresale que para una población de cinco individuos, todos los errores en los cuatro percentiles son iguales porque el algoritmo sólo itera una vez. En el caso de una población de diez individuos, el resultado para los percentiles 5 y 10 por ciento son casi iguales y todavía más pequeños, pero para los percentiles 15 y 20 por ciento, el error aumenta en modo considerable. A partir de ese valor, para el máximo percentil (20 por ciento), es decir, para el máximo cruce permitido de la población, el error promedio se reduce regularmente a medida que aumenta el tamaño de la población, lo cual apoya nuestra hipótesis de que a mayores porcentajes en la cruza de la población a la par del crecimiento del tamaño de la población, se reduce el error promedio. Los demás percentiles siguen un comportamiento más o menos similar al caso del percentil del 20 por ciento, aunque hay variaciones debidas a la aleatoriedad del proceso. El mejor individuo que se obtuvo, para una población de 80 individuos y un percentil de cruza del 20 por ciento fue de 01101111, lo que equivale a un valor de
15
20
x de 1.734375 y un valor de y de 0.0070648193359375,
con un error cuadrado (y2) de 0.000049911.
Conclusiones Se puede concluir que la hipótesis establecida en un principio —de que un mayor porcentaje de cruza (percentil de cruza) de la población, a medida que la población va aumentando, conduce a mejores resultados, específicamente, a menores errores promedio en la solución— varía, pues el resultado está sujeto a que la población y el percentil sean lo suficientemente grandes para permitir tal comportamiento. Por otro lado, ciertas poblaciones de individuos y percentiles más grandes hacen más lento el algoritmo y pueden llegar a convertir el proceso en inviable gracias a su lentitud. Sin embargo, la afirmación se mantiene: a mayor sea el grado de cruce de los individuos en poblaciones grandes, mejores resultados se obtendrán, a pesar de la mayor lentitud del proceso. Desde luego, si se desea generalizar los resultados obtenidos numéricamente mediante la aplicación de algoritmos genéticos a poblaciones de seres vivos, el tamaño de la población ya no constituye una limitante puesto que las cruzas se dan de manera natural, pero controlar qué individuos
8
Investigación
CIENTIFICA
se cruzan es más difícil. Además, la evolución de la población se iría dando a lo largo de millones de años, lo que haría imposible la observación de su comportamiento. Esa es precisamente la razón por la cual la analogía entre la evolución de las poblaciones de seres vivos y la evolución de las poblaciones en algoritmos genéticos es tan útil.
bibliograFÍa Davis, L. 1989. «Adapting operator probabilities in genetic algorithms», in Proceedings of the 3rd International Conference on Genetic Algorithms, Morgan Kaufmann, pp. 61–69. Friedberg, R.M. 1958. «A learning machine: Part I», in IBM Journal, 2, pp. 2–13. Goldberg, D.E. et al. 1991. «Do not worry, be messy», in Proceedings of the 4th International Conference on Genetic Algorithms, Morgan Kaufmann, pp. 24–30. Haupt Randy, L. and Sue Ellen Haupt. 2004. Practical genetic algorithms, Hoboken, NJ. John Wiley & Sons, Inc. Holland, J.H. 1975. Adaptation in natural and artificial systems, University of Michigan Press. Julstrom, B.A. 1995. «What have you done for me lately? Adapting operator probabilities in a steady– state genetic algorithm», in Proceedings of the Sixth International Conference on Genetic Algorithms, Morgan Kaufmann, pp. 81–87. Koza, J.R. 1992. Genetic programming: on the programming of computers by means of natural selection, Cambridge, Massachusetts. MIT Press. Kvanli, Alan H. et al. 1989. Introduction to business statistics, West Publishing Company. Schaefer, C.G. 1987. «The argot strategy: adaptive representation genetic optimizer technique», in Proceedings of the 2nd International Conference on Genetic Algorithms, Lawrence Erlbaum Associates, pp. 50–55. Schraudolph, N. and R. Belew. 1992. «Dynamic parameter encoding for genetic algorithms», in Machine Learning, 9(1), pp. 9–21. Shaffer, J.D. and A. Morishima. 1987. «An adaptive crossover distribution mechanism for genetic
algorithms», in Proceedings of the 2nd International Conference on Genetic Algorithms, Lawrence Erlbaum Associates, pp. 36–40. Spears, W.M. 1995. «Adaptive crossover in evolutionary algorithms», en J.R. McDonnell, R.G. Reynolds and D.B. Fogel (editors), Proceedings of the Fourth Annual Conference on Evolutionary Programming, Cambridge, Massachusetts. MIT Press, pp. 367–384. Srinivas, M. and L.M. Patnaik. 1994. «Adaptive probabilities of crossover and mutation in genetic algorithms», in IEEE Transactions on Systems, Man, and Cybernetics, 24(4), pp. 17–26. Tuson, A. and P. Ross. 1996. «Cost based operator rate adaptation: an investigation», in H.M. Voigt, W. Ebeling, I. Rechenberg and H.P. Schwefel (editors), Proceedings of the 4th Conference on Parallel Problem Solving from Nature, No. 1141, in Lecture Notes in Computer Science, Springer, Berlín, pp. 461–469.