operaciones en
algoritmos genéticos*
28
Victor S. Theoktisto
CeTI, Centro de Tecnología de InformaciónEl siguiente trabajo propone varias técnicas para reducir el orden de magnitud del número de operaciones necesarias en ciertos pasos de iteración de algoritmos genéticos aplicados a problemas de optimización; estas técnicas son modificaciones a operadores
canónicos ya existentes. Éstas se pueden integrar fácilmente en cualquier ambiente de algoritmos genéticos usando operaciones a nivel de bits con el fin de resolver problemas cuya codificación requiera de cromosomas grandes, como en el caso de la optimización de funciones multimodales con restricciones. Las modificaciones se concentran en tres áreas: (a) producir soluciones
iniciales e intermedias usando un generador aleatorio de bits de Tausworthe muy rápido y de período enormemente largo, en vez
de un generador congruencial lineal; (b) aplicar un operador rápido de cruce uniforme en paralelo sobre porciones del cromosoma,
que al mismo tiempo extrae el patrón (schema ) del cruce, con capacidad de generar todo el rango de descendencia posible;
(c)
aplicar un operador de mutación acelerado que aproxima la distribución real de las mutaciones, lo que permite generar simultáneamente en una sóla operación todas las mutaciones que ocurrirán en un cromosoma. Se presentan cuadros comparativos de desempeño, mostrándose que las técnicas sugeridas son más rápidas y eficientes para cromosomas extensos.
1. Introducción
Los algoritmos genéticos han venido incrementando su aplicación en problemas caracterizados como "duros", principalmente debido a su robustez como método universal de búsqueda de soluciones. Esta característica los hace invaluables
en la optimización de funciones y en inteligencia artificial, áreas donde por años se han usado métodos especializados de búsqueda de soluciones que son dependientes del problema tratado.
El presente trabajo propone tres modificaciones que reducen en orden de magnitud y tiempo de ejecución el número de operaciones necesarias para efectuar aquellos pasos más usados del Algoritmo Genético Simple (SGA), permitiendo una aceleración global en la ejecución del mismo. Estas modificaciones paralelizan varios de sus pasos, lo que permite obtener nuevas soluciones más rápido sin incidencia en la calidad de éstas.
2. Algoritmos genéticos: un proceso evolutivo de optimización
En la década de 1950 el computador fue usado por biólogos para realizar simulación de sistemas genéticos, apuntando más bién al entendimiento de fenómenos naturales [Bledsoe, 1961], en especial la definición de epistasis como la interacción entre genes no contiguos en un cromosoma [Fraser, 1962]. Epistasis
es en realidad una medida de la no-linearidad del proceso evolutivo. Sin embargo, el trabajo seminal de reconocer que algoritmos de búsqueda "natural" (algoritmos genéticos) podrían aplicarse en áreas distintas fue realizado a partir de 1962 por John Holland en la Universidad de Michigan. El enfoque inicial de Holland se reduce a la siguiente pregunta:
Qué tanto se necesita mimetizar las estructuras del DNA para obtener comportamiento evolutivo ?
Holland trabajó con lo mínimo posible:
• Un alfabeto de alelos a de dos tokens {0, 1} o bits, ya que el sistema binario basta para representar valores discretos finitos en cualquier base.
• Una sóla sarta de tokens (cadena de bits) formada por elementos de a, en vez del esquema positivo-negativo de dos cadenas del DNA.
• Un operador de reproducción mediante selección, un opera-dor de cruce simple y un operaopera-dor de mutación para producir nuevas cadenas de bits.
• Una función de optimización f, que actúa como medio ambien-te.
Otros trabajos iniciales [De Jong, 1989] fueron desarrollados en optimización de funciones usando algoritmos genéticos. Sin embargo, la formalización divulgación de estas técnicas en problemas de optimización "duros" se deben más que todo a los
' El fundamento teórico de este trabajo [Theoktisto, 1994] fue publicado como Order of Magnitude Reduction of Genetic Algorithms Operations in Problems with Large Chromosomes en las memorias de la IV Conferencia Iberoamericana de Inteligencia Artificial IBERAMIA McGraw-Hill, Caracas, 1994.
trabajos de David Goldberg [Goldberg, 1989] y Lawrence Davis [Davis, 1991].
El algoritmo genético simple (SGA)
Para comprender cómo y porqué funcionan los algoritmos genéticos, es necesario formalizar su definición. El Algoritmo Genético Simple (SGA) es descrito por la tupla < A, f, P, D, K, Op, G, C >, donde
A es el alfabeto de alelos, usualmente {O, 1}.
f es la función de optimización o aptitud que discrimina entre soluciones individuales. La aptitud promedio de esta población
se denomina
1
P y D son conjuntos' de individuos llamados Población y Descendencia, codificados como cadenas (sartas) de elementos de A.
K es el conjunto* de individuos que no sobrevivirán en la presente iteración.
Op es el conjunto de operadores genéticos que actúan sobre elementos de P para producir D. Usualmente Op = { R, X, M }
donde:
R es el operador de reproducción, es decir, la política de se-lección que escoje individuos de P que se "aparearán", usualmente asignando probabilidades basadas en su rango en la función de aptitud.
X es el operador de cruce que con cierta probabilidad p, recombina uno, dos o-más soluciones escogidas de P mediante R para crear nuevas soluciones en D.
M es el operador de mutación que con cierta probabilidad Rnocasiona que soluciones de D cambien los valores de algunos bits.
Existen más operadores genéticos, específicos a ciertos problemal.
G es el intervalo entre generaciones, O < G s 1. Representa la proporción de individuos de P que no sobreviven en la siguiente iteración. Si G = 1, todo P es reemplazado por D.
C es un criterio de mejora sobre f, 7 y P, que si se cumple, mantiene el algoritmo funcionando una iteración más. El Algoritmo Genético Simple (SGA) es descrito como sigue: 1. Generar una población P de L soluciones con cadenas de
longitud n generadas aleatoriamente con elementos de A,. 1.a Usando f, calcular la aptitud para cada una de estas
soluciones y ordenarlas en forma correspondientemente de "mejor" a "peor". Calcular
7.
2. Mientras la aptitud promedio f satisface C
2.a Repetir hasta asignar L•G nuevos individuos a D en cada iteración:
2.a.1 Seleccionar dos individuos de la población P usan-do R.
2.a.2 Aplicar el operador de cruce X en estos individuos para obtener dos nuevas soluciones, y añadirlas a D.
2.a.3 Aplicar el operador de mutación M en estas dos nuevas soluciones y calcular su aptitud usando f. 2.b Seleccionar de P para su eliminación L•G soluciones y formar con éstas el conjunto de individuos K, usando el criterio opuesto de R. Estos individuos son eliminados mediante P.- P - K. La nueva población es P P u D, en efecto reemplazando parte de la población por su descendencia.
2.c Calcular el promedio de aptitud
7
de la nueva población. 3. Escoger el(los) mejor(es) individuo(s) de acuerdo a f.Ejemplo de aplicación del algoritmo genético simple
Supongamos que se quiere encontrar el máximo de una función particular. Para este ejemplo se usará
f(x,y) -(x - 2) 2 - (y - 2)2 en el intervalo [O ...8, 0...8]
cuyo máximo analítico se encuentra en (2, 2)
Figura 1. f(x,y)
Paso O: Codificación
Suponiendo un alfabeto binario (A = {O, 1}), lo primero es encontrar una codificación para los individuos de P (definir el genotipo de P). Cada solución estará definida por una cadena de 16 bits (el espacio de un short int), donde los 8 primeros bits corresponden ala coordenada x y los otros 8 a la coordenada y. Para ambas coordenadas los 3 primeros bits representan la parte entera (binaria) de la coordenada, y los 5 restantes la parte decimal (binaria). De manera que el genotipo de una solución z de P viene dada por
x
2 a %zis z14z 13212211 210 9 8-7-5-5xxx -4 - 3 -2x -1 • con zt c A. Y Y
*11 - 10*
El fenotipo de z viene dado por (x, y), con la decodificación binario-decimal
16 x = z;
Por ejemplo, la cadena z = 10101010011110002 representa el par (5.375, 3.750)
x= 101.010102 2 2 .1+2° .1+2 -2 .1+2 -4 .1 4+ 1 + 1/4+ 1/8 = 5.375
s, para evitar que al principio surjan atractores espúreos
(superperformers), y que al final del problema no se distingan las
diferencias entre soluciones cercánas que estén convergiendo al óptimo (underachievers). Otra manera es usar una función de rango lineal que asigne probabilidadesfijas según el ordenamiento de soluciones por aptitud en la población. Si se está maximizando, se ordenan todas las soluciones de mejor a peor, asignando a la primera mejor rango 1, a la segunda mejor rango 2, etc [Whitley, 1989]. Se asigna a cada rango j (solución) la probabilidad proporcional de selección para reproducción
8
y=
E
j=1y=011,110002 21 .1+2°.1+2 1 .1.+2-2 .1 2 + 1 + 1/2 + 1/4 = 3.750
2(1, j +1)
Pi L(L + j = 1..L
j-L
I Epi
=11j=1
La aptitud de esta solución viene dada por la sustitucion de x e yen f, con el valor f (5.375, 3.750) = –14.453 (cae fuera del rango de la gráfica).
Paso 1: Generación de soluciones iniciales
Suponer que L = 10. Habrá que generar 10 cadenas aleatorias de bits como soluciones iniciales (individuos de P). Ya que cada bit tiene igual probabilidad, basta con usar un generador de números aleatorios y generar 10 enteros de 16 bits (short ints). A cada una de estas soluciones z. se le calcula su aptitud f, y se obtiene la aptitud promedio de toda la población.
Paso 2.a. 1: El operador de reproducción R
En cada iteración se seleccionan dos soluciones de la población P, aplicando R a P igual número de veces. Un procedimiento muy usado es efectuar en P un muestreo estocástico con reemplazo, o selección estilo "rueda de la fortuna". Cada cadena tiene una probabilidad de ser seleccionada para reproducirse, dada por su valor relativo en la función de aptitud
Pi = j= 1..L
Para evitar que disparidades entre las aptitudes f
'
, estas pueden ser escaladas uniformemente o normalmente, usando información de la aptitud promedio
7
y su desviación estándarPaso 2.a.2. El operador de cruce X
En la operación de cruce los dos individuos generados en el paso anterior son alineados para intercambiar porciones de código y así crear nuevas soluciones. La información genética compartida entre padres e hijos es la plantilla del cruce o schema [Holland, 1975]. Los dos operadores de cruce más usados son el operador de cruce simple (single crossover operator) [Goldberg, 1989] y el operador de cruce uniforme
(uniform crossover operator) [Syswerda, 1989], [Qi, 1993].
Un schema es una cadena adicional que se construye a partir de las dos soluciones seleccionadas para cruzarse, de la siguiente manera: si en en el mismo locus i ambos bits son 0, se coloca 0; si son 1 se coloca 1; en caso de ser diferentes, se coloca el comodín "a". De esta manera se obtiene para este cruce un schema de
= 1001000010010000
Z2 = 0111101101111011
schema = *"1'O ** - 1*0 **
donde un 1 ó 0 en una posición específica significa que el par de soluciones comparte ese bit y u•" significa que difieren en ese bit. No importa de que manera se crucen estas soluciones, su descendencia también tendrá como schema — 1•0*****1*0**.
En la figura 2 se puede apreciar lo que representa un schema como subregión del espacio del problema, usando 4 bits (2 bits enteros y 2 bits decimales) para X y para Y, para un total 8 bits
o f(x,y)
Figura 2. Representación gráfica de schemas para f(x,y), con 4 bits para x e y
de codificación. Cualquier cruce bajo un mismo schema sólo producirá individuos en la misma región. A medida que el proceso converge, los schemas se van detallando más (hay menos densidad de "*" ) por lo que el espacio que el schema representa va reduciéndose hacia la mejor región/solución.
Sean Z, y Z 2 dos cadenas de bits (cromosomas) seleccionadas para reproducirse,
Z, =
100
1000010010000
Z2 =0111101101111011
En la operación de cruce simple dos individuos intercambian una única porción con probabilidad p x , a partir de un punto de cruce cualquiera (aleatorio) en el cromosoma, y son creadas dos nuevas soluciones. En este ejemplo el punto de cruce ocurre después del bit 5 (contando de izquierda a derecha),
Z3 = 1001001101111011 Z4 = 0111100010010000
El operador de cruce uniforme se obtiene cuando el número de puntos de cruce crece hasta que alcanzan, el número de bits en el cromosoma. Por ejemplo, cualquier descendencia heredará un bit ya sea de X con probabilidad p x o de Y con probabilidad 1–px . Las soluciones
Z3=1111001010111011 Z4 = 0001100100010000
tendrán igualmente "'1'0'""1.0" como schema.
En general, se implementa la operación de cruce mediante operaciones de bit sobre las cadenas de cromosomas y una máscara del cruce (W) generada para k puntos aleatorios de cruce. Esta máscara es particular al tipo de cruce realizado, y las soluciones se obtienen como sigue:
Z, = (Z, 1/1/) v Z, A GV), = Z, n VV) v (z, A IN)
con W el complemento binario de W
Para el caso del cruce uniforme,k = n = 16 y W=1001110110010100, donde cada bit de la máscara es generado individualmente. w es 0110001001101011. Paso 2.a.3: El operador de mutación M
La operación de mutación se realiza después del cruce. La operación de mutación simple se define por un recorrido secuencial sobre una cadena de bits S, donde cada bit puede cambiar de valor con probabilidad p m.
Para cada bit S. de S hacer:
1.-Generar un numero aleatorio U – U(0,1). 2.- Si U < pm , S= (el bit S es negado )
Por ejemplo, aplicando el operador M a las cadenas del primer ejemplo
Z3= 1001001101111011 Z4=0111100010010000
con probabilidad p m = 0.05, en Z3 el bit 3 cambia de de O a 1, y en Z, el bit 5 cambia de 1 a 0, obteniéndose las soluciones —
= 1011001101111011 Z4'. 0111000010010000
El schema conjunto de estas soluciones es –1100-1*0**, lo cual significa un nuevo hiperplano a explorar por el algoritmo genético.
El operador de mutación cumple dos funciones, en orden de importancia:
a) Evita que se pierda información útil eliminada de la población por los cruces.
b) Permite la exploración de nuevas áreas al cambiar las so-luciones.
La probabilidad de mutación es pequeña, entre [0.001 y 0.1], para evitar variaciones muy bruscas.
III. Modificaciones propuestas para reducir el número de operaciones efectuadas en el Algoritmo GenéticoSimple (SGA)
Para problemas unimodales con poblaciones pequeñas y codificaciones cortas el SGA se desempeña de manera rápida y extraordinariamente bien. Sin embargo, problemas multimodales ofrecen algunas complicaciones [Fonseca, 1993]. Primero, existen dificultades de codificación, que pueden involucrar el crear y manipular cadenas de bits muy largas para representar adecuadamente el espacio del problema [Yin, 1993]. Segundo, la función de optimización F puede ser computacionalmente muy compleja [Shoenauer, 1993], ya que la factibilidad debe ser mantenida incorporando restricciones en la función objetivo F usando una función de penalidad [Richardson, 1989]. Tercero, las operaciones de cruce y mutación tal como están definidas son lentas, ya que trabajan sobre bits uno a la vez [Báck, 1993] [Smith, 1993]. Cuarto, dado que aleatoriedad está en el corazón del motor evolutivo, deben de usarse generadores de números aleatorios muy rápidos para obtener soluciones iniciales y operaciones intermedias.
Las modificaciones propuestas a continuación reducen el tiempo y el número de iteraciones dedicadas a la búsqueda de nuevas soluciones.
l a Modificación: Uso de un generador aleatorio de bits modificado. La generación de soluciones iniciales aleatorias se ejecuta
llamando a un generador de números aleatorios (RNG) repetidamente para armar una cadena de bits suficientemente larga. Desafortunadamente, la mayoría de los RNG's implementados en los computadores son variantes del RNG Congruencial Lineal o LCG-RNG [Park, 1988], limitados a generar secuencias de período máximo 2" - c, para alguna constante c. Este número representa el número primo más grande que puede ser almacenado en w bits, el tamaño de palabra natural (word size) del procesador usado. El generador es de la forma Z = ( a Z1-1 + c) ( mod m ), usualmente con m = 231 - 1 y w = 32, por lo que el período maximo es de 231 - 1. Además, estos generadores pseudo aleatorios generan secuencias de números {U 1 , U2, ... Ui, ...} que muestran regularidades como distribución segmentada en hiperplanos [Law, 1992]. En cromosomas de gran longitud esto implica que algunos loci (plural de locus) están regularmente correlacionados con otros loci en el mismo cromosoma, sesgando la generación de soluciones en direcciones característicamente distintas a las específicadas por la función de aptitud F. También es de notar que estos RNG's usan operaciones de adición y específicamente multiplicación sobre enteros que toman varios ciclos del procesador para efectuarse.
El generador aleatorio de bits de Tausworthe
Una clase de RNG's conocida como el generador aleatorio de bits de Tausworthe (TRBG), usado en métodos criptográficos [Tootill, 1973], muestra propiedades adecuadas para la generación de algoritmos genéticos. Estos generadores producen secuencias de bits uniformemente distribuidas sobre una longitud arbitraria de L bits, como sigue
Defínase la secuencia de n bits {b}={13, „ b2, ...bn} donde cada
b es un dígito binario con valor 0 ó 1. Como en todo RNG, se desea generar todos los bits de esta secuencia por medio de un algoritmo que aplicado repetidamente sobre q bits generados en la última iteración, obtenga bits adicionales en la secuencia. Un procedimiento lineal sería la siguiente ecuación de generación
= (c, + c2 + + cq b.q) (mod 2)
donde c„ c2, son constantes con valor 0 ó 1, y la operacion (mod 2) se usa para asegurar que el resultado también es binario. El período es 2q -1, y una semilla para los primeros q bits debe ser especificada para comenzar la generación aleatoria de bits { by Particularmente si sólo dos de los ci 's toman valores no nulos, la ecuación se convierte en
b = ( + ) (mod 2)
para enteros r y q tales que O <r <q.. Notando que la adición módulo 2 de bits sencillos es B, la instrucción bit x or (exclusive or), entonces
0 para b i_, = bi = kr e bjq ) 0
bi = {1 para b i_, x bi_ q
generándose un bit adicional en cada iteración.
El generador aleatorio de bits expandido (GABE) propuesto
El TBRG, sin modificaciones, es ineficiente para generar cadenas de bits muy largas. El método que se propone a continuación genera rápidamente una cadena de bits -U de longitud n uniformemente distribuída, asumiendo que el tamaño de palabra del computador es w. En cada iteración se generan q - r bits, en vez de uno sólo:
1.Escoger q y r primos relativos, tal que w divide exactamente a q r, con r < q < n, y w < q. Ayuda, pero no es necesario, si n es múltiplo de (q - r).
2.Calcular k = (q r)/w.
3.Comenzar con una semilla S de q bits y dividirla en secciones de tamaño w, como sigue:
U1 , U2, ... ...0, U 44,,
(S puede ser los últimos q/w Uj's creados en la iteración previa)
4. Para j = q/w + 1 hasta n/w hacer
U j = (Uj.,„„ O Uro,),
donde U. es la siguiente sección de longitud w.
5. Devolver U como la concatenación de las subsecuencias
U„ U 2, , , Uom, Uom,„ , Unm,
Explicación y desempeño del generador expandido propuesto
El generador aleatorio de bits propuesto toma ventaja de la aritmética binaria aplicada sobre palabras completas para generar varios bits en paralelo. Dada una semilla de q bits, hasta q - r bits pueden ser generados simultaneámente en cada iteración. Esto se consigue escogiendo juiciosamente los apropiados q y r de manera que su diferencia sea un múltiplo del tamaño de palabra del computador usado (w), ó q - r = kw, para algún entero positivo k.
Como ejemplo, supóngase que se desea generar cadenas de 1024 bits de longitud (n = 1024). Asumiendo w = 32 (común en muchos microcomputadores ), y k = 4, entonces se escogen q - r = kw = 128. Arbitrariamente escogiendo r = 11, entonces q = 139 (ambos primos naturales), y se necesitarán a lo más (1024-139)/(32*4) = 7 iteraciones del algoritmo para generar los 1024 bits de la cadena. Se necesita partir de una semilla inicial de al menos q =139 bits de largo para la generación de la primera
cadena, y de allí en adelante se usan los últimos q bits de la cadena generada en la última iteración como semilla. El método propuesto realiza pocas operaciones y de tipo xor binario, las más rápidas en cualquier computador.
2a Modificación: Uso de aritmética binaria para operaciones de cruce
Un operador de cruce generalizado que crea dos soluciones complementarias dentro de un schema fue descrito por [Barrios, 1992]. La primera solución es obtenida usando el schema del apareamiento como plantilla, generando aleatoriamente aquellos bits que no pertenecen al mismo ( los marcados con "*°). La segunda solución es obtenida negando estos últimos bits. El procedimiento desarrollado para efectuar cruces uniformes generalizados, descrito a continuación, es más rápido y tiene la ventaja de producir soluciones independientes dentro del mismo schema. El método está basado en las propiedades de operaciones binarias sobre cadenas de bits.
Definiciones
Sea el par {X, Y} dos individuos arbitrariamente extraídos de la población.
(i) Se define m = X A Y (la operación binaria and) como el bit minimum del par, donde para cada bit j de m, m
1 = X A Y= Min {X. 9.
(ii) Se define M = X /Y (la operación binaria or ) como el bit maximum del par, donde para cada bit j de M,Mi = X. V Y =
Max {X , Yi}.
De (i) y (ii) se concluye que mi s Mi V. (iii)schema (m, M) es el schema del cruce,
r
o, para mi - Mi - O con schema j = {1, para mi - Mi = 1[*, para mi < Mi
(iv)Un individuo S pertenece al intervalo de bits [m, M], es decir, S E schema (m, M) cuando mi s Si s Mi V.
(v) Dos individuos S, y S2, escogidos arbitrariamente del conjunto schema (m, M), se denominan schema-comple-mentarios si tan sólo comparten los bits del schema, es decir
S 1 A S 2 = rn, S i V S 2 = M
Lema
El intervalo de bits [m, M] o schema (m, M) contiene toda posible descendencia del par {X, Y}.
Demostración
De las definiciones anteriores se deduce que
, m. s X. s M ymsY sM,y el par {X, Y} es schema-comp(ementario dentro del intervalo de bits [m, M].
Sea S una posible descendencia del par {X, Y}, creado al aplicar cualquier operador de cruce, con el vector de bits R representando la máscara de este cruce. Cada bit j de S es heredado de X ó de Y, de manera que S = R. X.+ (1 — Y con cada bit R = O ó 1, por lo que S j = X. o ái =
Por lo tanto V m. s S. s M. y S E schema (m, M). Esto es
d
ecir
equivalente a e que m y M son bases del subspacio de bits [m, M], por lo que cualquier vector S E schema (m, M). puede ser expresado como una combinación lineal binaria de las cadenas de bits m y M, ó S = (R A m) V (1A M), siendo R un vector de bits cualquiera y it su complemento. Una reducción de operaciones viene dada por:
Teorema
Para cualquier string de bits R, la solución S = (R v m) A M pertenece al intervalo de bits [m, M], es decir, al conjunto schema (m, M), donde los bits de R aparecen sólo en aquellos bits de S cuyos valores
no son comunes
a m y M. [ Nota: S = (R A M) Vm) produce el mismo resultado I
Demostración
Si el bit j de S E schema (m, M), entonces mi= M , con S. = (Rj V mi) A Mi= mi= Mi ), sin importar R
i
, de manera que Sipertenece al schema del par {X, Y}. Si el bit j de S schema (m, M), entonces m. < M , es decir, m.= O, M. = 1, y Si = (Ri V rni) A M. = Ri, lo que Concluye la pruebja. Corolario
Sc = ( itv m) A M, es la solución schema-complementaria de S, con iz el complemento a uno de R.
Demostración
Sustituyendo R por R y aplicando el teorema, sólo los bits de que no pertenecen a schema (m, M) aparecerán en Sc. Como É. es la contraparte negada de R, S y Sc tendrán en común los bits del schema, y valores opuestos en el resto, haciéndolos schema-complementarios.
El operador rápido de cruce uniformegeneralizado propuesto Basándose en los resultados anteriores, la siguiente modificación genera un par schema-complementario {S, Sc } como sigue:
1. Extraer de la población un par de individuos {X, Y}. 2. Calcular m=X A Y y M=X v Y.
3. Para tantos individuos como sea necesario (i = ..k, comúnmente con k = 2 )
generador GABE propuesto).
3.2. Calcular R (el complemento binario de R).
3.3. Obtener los individuos S = (R V m) A M y Sc = v m)
A M.
Desempeño del operador rápido de cruce uniforme generalizado propuesto
Cuando se usa cruce normal, se genera aleatoriamente la máscara del cruce y se realizan 6 operaciones binarias en forma secuencial para generar dos nuevas soluciones. Generar otro par bajo el mismo schema requiere generar otra máscara y 6 operaciones binarias adicionales. Generar k soluciones (k par) requiere 6k12 = 3k operaciones.
Para la operación rápida de cruce uniforme generalizado se necesitan 4 pasos para generar la primerra solución: 2 en el segundo paso para calcular el schema del cruce, m y M; y 2 en el tercer paso para la solución. Las operaciones son efectuadas en w bits simultaneámente, siendo w el tamaño natural de palabra del computador. Generar otro solución bajo el mismo schema requiere generar una cadena aleatoria más y 2 operaciones binarias adicionales, puesto que el schema (m y M) es el mismo, y no hay que volver a calcularlo. Para generar k soluciones (k par) se necesitan 2 + 4k/2 = 2 + 2k operaciones.
Para problemas en los que el número de descendientes producidos es proporcional a la aptitud conjunta de los padres, el ahorro tiende a 1/3 menos de operaciones binarias en el cruce. Eso sin mencionar que este método es más versátil, puesto que puede generar descendencia de un individuo a la vez con menos operaciones.
3a Modificación: Uso de un operador de mutación acelerado.
La fase de mutación de los algoritmos genéticos puede ser considerada como una sucesión de ensayos de Bemoulli sobre todos los bits del cromosoma escogido. Los ensayos de Bernoulli son series probabilísticas de eventos independientes que tienen sólo dos resultados posibles para cada ensayo: éxito (e), con probabilidad p y fracaso (f), con probabilidad 1-p. La probabilidad conjunta es el producto de las probabilidades de la secuencia de resultados, de manera que P{ (efeeeffef) }= pqpppqqpq, or p 5q4 Cuando el orden particular de los eventos en los ensayos no es importante se obtiene la distribución Binomial [Drake, 1967], donde la probabilidad de obtener k éxitos en n ensayos viene dada por
P{S„= k}= b(k;n,p) = ) p
k qn- k
Es fácil demostrar que la distribución del número de mutaciones en un cromosoma de longitud n con probabilidad de mutación p es b(k; n, p) [Srinivas, 1993].
Generación de mutaciones usando la distribución Binomial El método usual descrito para generar mutaciones opera en forma secuencia' para cada bit en un cromosoma de longitud n, generando una variable aleatoria u uniformemente distribuida en el intervalo [0, 1]. Si u s p, entonces una mutación ha occurrido y el bit es negado.
La primera idea para acelerar este proceso de mutación es generar todas las mutaciones de una cadena en forma simultánea. Para eso es necesario saber la distribución probabilística de las mutaciones en un cromosoma, dadas la longitud del cromosoma n y la probabilidad de mutación p, y entonces generar una variable aleatoria que represente el número de mutaciones que ocurrirán en ese cromosoma. Una vez determinado el número de mutaciones k, se generan mediante una distribución uniforme (sin repetición) los lugares (bits) en los que ocurrirá(n) la(s) mutación(es). Para eso se usa la distribución Binomial de la siguiente manera:
1.Generar una variable aleatoria Binomial k con b(k; n, p), con k representando el número actual de mutaciones que serán observados en el cromosoma (0 s k s n ). Esto se hace sumando n variables aleatorias de tipo Bernoulli (p), por un total de n iteraciones.
2.Ya que todos los n bits son independientes e igualmente propensos a mutaciones, generar k variables aleatorias U uniformemente distribuidas en el intervalo entero [1, n]. ValoreS repetidos se vuelven a generar hasta tener k loci distintos. 3.Negar los bits U j en S, j = 1, , k
El número y tiempo de ejecución es proporcional a n, y para n grande se hace muy lento. Para n = 1000 y p = 0.01, hay que generar 1000 variables Bernoulli, y sumarlas, para obtener un número k de mutaciones cuyo valor esperado es 10. Las siguientes modificaciones reducen el número y tiempo necesario para el cálculo de mutaciones en un cromosoma.
Método alternativo (i) propuesto: generación de mutaciones usando la aproximación de Poisson a la distribución Binomial
El proceso de Bernoulli es una descripción probabilística del comportamiento de las "llegadas" (éxitos) en una serie de ensayos idénticos, discretos e independientes. El proceso de Poisson se define como la descripción del comportamiento de llegadas en puntos sobre una línea continua de tiempo [Drake, 1967]. Puede ser demostrado que para n grande y p pequeño, y siendo el producto I = np de magnitud moderada [Feller, 1968], que la siguiente aproximación usando la distribución de Poisson se puede usar para calcular la distribución Binomial
xk
b(k; n, p) —e = p(n; k) k!
El método alternativo que se propone para la generación de mutaciones es mucho más rápido, ya que no pasa tanto tiempo
"lanzando monedas" en el paso 1:
1.Generar una variable aleatoria Poisson k con I = np, con k representando el número actual de mutaciones que serán observados en el cromosoma (Os k s n ).
El resto del procedimiento es igual.
Método alternativo (ii) propuesto: generación de mutaciones usando la aproximación Normal a la distribución Binomial
Una variable aleatoria distribuida de Poisson [Law, 1982] es generada por la suma de varias variables aleatorias exponencial-negativas con la misma tasa p. = ?N. = np, usando un método de aceptación y rechazo. Si X es grande, mucho tiempo es dedicado para calcular y multiplicar estas variables aleatorias. En este caso y bajo las mismas condiciones estipuladas anteriormente, es mejor usar la aproximación Normal (truncada para valores negativos) de la distribución Binomial [Feller, 1968], con p.= np = X y 02 = npq para generar el número de mutaciones k (z O) para cada cromosoma y luego generar las k variables aleatorias uniformes como se describió antes. Las variables aleatorias normales se generan más rápidamente y con menos cálculos que las de Poisson, pero deben ser truncadas en la izquierda para valores pequeños de X. para evitar valores negativos de k.
1.Generar una variable aleatoria k distribuída como Normal(np, npq), con k representando el número actual de mutaciones que serán observados en el cromosoma (Osksn ). El resto del procedimiento es igual.
Desempeño esperado de las aproximaciones
Usando los métodos usuales con cromosomas de longitud n, y probabilidad de mutación p, entonces X = np es el número esperado de mutaciones, lo que significa que en promedio n "lanzadas probabilísticas de moneda" serán ejecutadas para sólo X mutaciones, una tasa de 1/p:1. Por ejemplo para n= 1024,p =0.01, = 10.24, es decir, 1024 ensayos producen entre 10 y 11 mutaciones, o 99% de las iteraciones no sucede nada. Si p = 0.001, en 99.9% de las iteraciones no se produce ninguna mutación.
Usar aproximaciones Normales y de Poissson para negar los bits correspondientes, reduce el número de cálculos en un orden de magnitud de Log (1/p). Mientras más decrece p, o más crece n, más eficientes son los cálculos comparados con el resto de las operaciones. Si la tasa óptima de mutación para una cadena de longitud n es p = 1/n [Báck, 1993], esto significa que al usar este p óptimo necesitará en promedio de una sola operación de mutación en cada iteración.
Resultados
Para evaluar el desempeño de las modificaciones propuestas, se diseñaron experimentos para maximizar la función cuadrática cóncava m-dimensional
2
f
- (x _15) , definida en [O, 255J—
con solución
xj = 15 (00001111 2) para V j, y
f(xí,x;,...,x m* )= O.
El tamaño de palabra es de 32 bits, de manera que un vector de dimensión m se puede almacenar en m/4 palabras. Se hizo uso del software SGA-C'. El criterio de convergencia usado sobre la aptitud promedio de fue de menos de un 5% de reducción con respecto a la aptitud promedio de la iteración anterior.
El primer experimento (control), efectuando 10 corridas del SGA original, variando los siguientes parámetros
Experimento I
m (#de bits)
16 (128)
64 (512)
256 (2048)
Generador de
Números Aleatorios LCG LCG LCG
Cruce Uniforme Uniforme Uniforme
mutación
(p=0.01) Bemoulli Bemoulli Bemoulli
El segundo experimento se realizó efectuando 10 corridas para el SGA modificado, usando la aproximación de Poisson para generar mutaciones:
Experimento II Tabla de resultados de los experimentos 1, II, y 111
m (#de bits)
16 (128)
64 (512)
256 (2048)
Generador de
N° Aleatorios GABE GABE GABE
Cruce Uniforme generalizado
Uniforme generalizado
Uniforme generalizado mutación
(p=0.01)
aprox. Poisson
aprox. Poisson
aprox. Poisson
El tercer experimento se realizó efectuando 10 corridas para el SGA modificado, usando las mismas soluciones iniciales del experimento II, y usando en el operador de mutación la aproximación Normal truncada.
Experimento III
m (#de bits)
16 (128)
64 (512)
256 (2048) Generador de
N° Aleatorios GABE GABE GABE
Cruce Uniforme generalizado
Uniforme generalizado
Uniforme generalizado mutación
(p=0.01)
aprox. Normal
aprox. Normal
aprox, Normal
Para los tres experimentos se escogió L=20 como el número de soluciones en la población, y política de reemplazo de población G=1.0 (la descendencia reemplaza a los padres). Sólo se producen 2 hijos por cada apareamiento de los padres, por lo que en total suceden 10 apareamientos por iteración. Se realizaron 50 iteraciones en cada corrida. El número de operaciones y tiempo de la evaluación de funciones es irrelevante para la comparación, puesto que no fue cambiado para los tres experimentos.
m=16 (128) m=64 (512) m=128 (2048)
#ops t (seg) #ops t (seg) #ops t (seg)
Ex! Generación 6000 71,94 24000 298,88 96000 1213,65 Cruce 12240 151,49 4183 582,16 195840 251399 Mutación 129000 214,50 513000 853,01 2049003 3407,05
Ex 11 Generación 6000 11,49 24000 45,45 96000 180,08
Cruce 12240 23,31 48960 94,68 195840 38468 Mutación 22800 43,72 61200 116,70 214800 403,16
Ex III Generación 6000 10,94 24000 47,43 96000 180,08
Cruce 12240 24,31 48960 90,42 195840 397,78 Mutación 4660 3,29 12240 8,93 42960 31,06
Conclusiones
Los resultados de los experimentos I, II, y III mostrados en la tabla anterior revelan que los operadores modificados para el experimento II efectúan una reducción de entre 1 y 2 órdenes de magnitud del tiempo de ejecución para los mismos problemas. El experimento III revela que en el caso de usar la aproximación normal para calcular las mutaciones, adicionalmente se reduce el cálculo de las mutaciones en 1 orden de magnitud adicional.
En conclusión, las modificaciones propuestas aceleran de forma notable los cálculos necesarios en los pasos de generación de cadenas, cruces y mutaciones, y permite que el algoritmo genético dedique más tiempo al cálculo de funciones.
Estas modificaciones son fáciles de insertar en cualquier ambiente de resolución de algoritmos genéticos que permita manipulación a nivel de bits, como en el caso del SG-C de Goldberg (del dominio público), implementado en Lenguaje C. Al ser modificaciones sobre la rapidez de operación y no sobre los métodos en sí, no alteran para nada la calidad de las soluciones obtenidas.
Referencias
Bách, Thomas. "Optimal Mutation Rates in Genetic Algorithms". Proceedings of the Fifth ICGA, July 1993.
Barrios, D., J. Ríos, y J. Segovia. "Generalización del Operador de Cruce en algoritmos genéticos". XVIII Conferencia Latinoamericana de Informática, Sept. 1992.
Bledsoe, W. W. "The Use of Biological Concepts in the Analythical Study of Systems". ORSA-TIMS National Meeting, San Francisvo, 1961
Reinhold, 1991
De Jong, Kenneth A., and William M. Spears. ''Using Genetic Aigorithms to Solve NP-Complete Problems". Proceedings of the ICGA, 1989, pp. 125-140.
Drake, Alwin W. "Fundamentals of Applied Probability Theory". McGraw-Hill, 1967.
Feller, W.''An Introduction to Probability Theory and its Applications''. John Wiley & Sons, 1968.
Fonseca, C. M., and Peter J. Fleming. "Genetic Algoritms for Multiobjective Optimization: Formulation, Discusion and Generation". Proceedings of the Fifth ICGA, pp. 416-423, 1993 Fraser, A. S. "Simulation of Genetic Systems. Journal of Theoretical Biology". 2, pp. 329-346, 1962
Goldberg, D. E. "Genetic Algorithms in Search, Optimization, and Machine Learning". Addison-Wesley, 1989
Holland, J. H. "Adaptation in Natural and Artificial Systems". Ann Arbor: University of Michigan Press, 1989
Law, Averill M., and W. David Kelton. "Simulation Modeling and Analysis". New York: McGraw-Hill, 1992
Park, S. K., and Keith W. M. "Random Number Generators: Good Ones Are Hard to Find". Communications of the ACM, vol. 31, p. 1192, Oct 1988
Qi, Xiaofeng, and Palmieri, F. "The Diversification Role of
Crossover in Genetic Algorithms". Proceedings of the Fifth ICGA, pp. 132 - 137, 1993
Richardson, J.; M. Palmer, G. Liepins, and Mike Hilliard. "Some Guidelines for Genetic Algorithms with Penalty Function". Proceedings of the ICGA, 1989, pp. 191-197
Shoenauer, M., and S. Xanthakis. "Constrained GA Optimization". Proceedings of the Fifth ICGA, pp. 573 - 580, 1993
Smith, Alice E. and David M. Tate. "Genetic Optimization Using a Penalty Function". Proceedings of the Fifth ICGA, pp. 499 -505, 1993
Srinivas, M. and L.M. Patnaik. "Binomially Distributed Populations for Modeling GA's". Proceedings of the Fifth ICGA, pp. 138 - 143, 1993
Syswerda, G. "Uniform Crossover in Genetic Algorithms". Proceedings of the Third ICGA, pp. 2-9, 1989
Theoktisto, V.S. "Order of Magnitude Reduction of Genetic Algorithm Operations in Problems with Large Chromosomes". IV Congreso Iberoamericano de Inteligencia Artificial, IBERAMIA '94, McGraw-Hill, pp. 596- 604, Caracas, 1994
Tootill, J. P. R., W. D. Robinson, and D. J. Eagle. "An Asymptotically Random Tausworthe Sequence". J. Ass. Comput. Mach., vol 20: pp. 469-481, 1973
Whitley, D: The GENITOR Algorithm and Selection Pressure. "Why Rank-Based Allocation of Reproductive Trials is Best". Proceedings of the Third ICGA, pp. 116-121, 1989