740 likes | 957 Views
Introducción a los Algoritmos Genéticos en Biología. ALGORITMOS GENÉTICOS. Día 1. ¿Qué son?. Son algoritmos de búsqueda de soluciones basados en la mecánica de la selección natural y la genética de poblaciones. Idea base. Tenemos un problema a resolver. . Idea base.
E N D
ALGORITMOS GENÉTICOS Día 1
¿Qué son? Son algoritmos de búsqueda de soluciones basados en la mecánica de la selección natural y la genética de poblaciones
Idea base Tenemos un problema a resolver.
Idea base Generamos una “población” de posibles soluciones a ese problema.
Idea base Asignamos a cada solución un valor de eficacia (“fitness”).
Idea base Las soluciones pueden recombinar y mutar (evolucionan).
Idea base Dejamos actuar a la evolución via la selección natural para que encuentre la mejor solución (resuelva el problema).
Idea base Valores iniciales Solución
Resumiendo ¡En un algoritmo genético el entorno es el problema a resolver y los organismos las posibles soluciones del mismo!
Resumiendo • Para poder aplicar un AG a un problema debemos determinar: • Una codificación genética para el problema. • Una función de ajuste (eficacia o fitness) que asigne un valor a cada individuo de acuerdo con su comportamiento en el medio.
Resumiendo Los AG’s tradicionales manejan cadenas de símbolos de longitud fija llamadas cromosomas. Asociado a cada una de las posiciones de la cadena hay un gen. Los símbolos que constituyen un gen se llaman alelos (0/1 en el caso binario de 2 alelos).
¿Cómo se realizan? 1.- Trabajamos con poblaciones de posibles soluciones a nuestro problema. Para que haya “evolución” tiene que haber variación sobre la que pueda actuar la “selección natural”.
0 0 0 0 1 0 0 0 ¿Cómo se realizan? 2.- Cada posible solución depende de un conjunto de parámetros que tomarán unos valores u otros. parámetros = individuo (cromosoma) de una población
110100011 000100011 000101111 000111011 000100000 ¿Cómo se realizan? 3.- Habrá diferentes posibles soluciones (cadenas de bits que representan la información codificada de los parámetros).
¿Cómo se realizan? 4.- Debemos asociar una función de idoneidad o “fitness” a cada una de estas posibles soluciones. Solución x ¿sobrevive? “Fitness” =0.0
¿Cómo se realizan? 4.- Debemos asociar una función de idoneidad o “fitness” a cada una de estas posibles soluciones. No sobrevive “Fitness”=0.0
Algoritmo Genético Simple (SGA) ESTRUCTURA DEL SGA 1.- Generar al azar N “individuos”. 2.- Calcular la eficacia de cada individuo de la población. 3.- Elegir 2 progenitores de modo que la probabilidad de ser elegido (dejar hijos) sea directamente proporcional a la eficacia (“fitness proportionate selection”). 4.- De cada par de padres obtener 2 hijos mediante recombinación. 5.- Repetir el paso 3 hasta alcanzar el tamaño poblacional N. 6.- La nueva población sustituye a la antigua. 7.- Mutar e iterar desde el paso 2 usando esta nueva población.
Características del SGA 1.- En cada generación los individuos dejan descendencia en función del valor medio de la población. 2.- El tamaño poblacional N permanece constante.
Características del SGA Para usar algoritmos genéticos debemos codificar las distintas soluciones de modo que sea posible hacer que evolucionen (recombinen y muten).
Ejercicio 1 Poner en pseudocódigo (independiente del lenguaje de programación) el SGA para un problema de 8 bits (longitud del cromosoma)
Ejercicio 1 0.- Declarar e inicializar variables…
Ejercicio 1 1.- Generar al azar N individuos (N << 28) Para i= 1 hasta N individuo[i]=parte entera de[uniform()× 28]
Ejercicio 1 2.- Calcular la eficacia de cada individuo de la población y la media poblacional Para i= 1 hasta N eficacia[i] = ObtenEficacia(individuo[i]) sumEficacia += eficacia[i]
Ejercicio 1 3, 4 y 5.- Elegir padres y obtener N hijos Repetir hasta obtener N hijos padre1 = ObtenPadre() padre2 = ObtenPadre() //obtener 2 hijos mediante recombinación: recombina(padre1,padre2,hijo1,hijo2)
Ejercicio 1 6.- La nueva población sustituye a la vieja Para i= 1 hasta N individuo[i] = hijo[i]
Ejercicio 1 7.- Mutar y volver al paso 2 hasta terminar las generaciones o alcanzar un valor especificado (p. ej. eficacia promedio = 1) muta(poblacion) // poblacion es un vector de N individuos
Métodos de representación 1.-Binaria: Cada alelo de un cromosoma consta de 0/1. 2.- Real: Cada alelo es un nº real. 3.- Longitud fija: Cromosomas de n bits 4.- Longitud variable: Reales o binarios
Métodos de selección 1.- Selección proporcional (a la eficacia): A mayor eficacia probabilidad de más hijos (no es determinista). 2.- Selección por torneo: Se seleccionan q soluciones y gana la mejor. Se repite el proceso hasta generar N nuevos hijos. 3.- Selección por rango: Se ordenan las soluciones según su valor de fitness. 4.- Estrategia evolutiva ( + )ES: Se seleccionan determinísticamente soluciones de un total de paternas + hijos.
Métodos de recombinación Existen distintos métodos para realizar la recombinación: 1.- Entrecruzamiento de 1 punto: Sólo un punto de cruce. 2.- Entrecruzamiento de n puntos: Se usa bastante con n = 2 3.- Entrecruzamiento uniforme: El nº de puntos no está fijado. La decisión de insertar un punto de ruptura es independiente para cada bit del cromosoma.
Cálculo de la eficacia de un individuo • Para cada individuo i se calcula el valor de la función de idoneidad o función objetivo (la que queremos maximizar) f(i) • Sea fprom(t) la media de las funciones de idoneidad de la población en la generación t • La fitness del individuo i será w(i) = f(i) / fprom(t)
¿Por qué funcionan los AGs? • Esquema: Subconjunto de cadenas con similitudes en ciertas posiciones (1 # # 0). • Orden de un esquema: El nº de alelos definidos en él. • Longitud de un esquema: La distancia entre el primero y último de los alelos especificados.
¿Por qué funcionan los AGs? • Teorema Fundamental de los AGs (de los esquemas): Esquemas cortos, de orden bajo y con eficacia por encima de la media, incrementan el nº de representantes en las generaciones sucesivas de un AG.
Problemas de los AGs • Decepción: Algunos esquemas cortos y de bajo orden pueden engañar al algoritmo y hacerle converger en soluciones subóptimas.
Problemas de los AGs • Función decepcionante: Cuando existen esquemas cortos de bajo orden y alta eficacia que no proporcionan la solución óptima.
Problemas de los AGs • Epistasis: No independencia en el efecto de los distintos genes (bits) sobre el valor de eficacia del individuo. Existen diferentes modos de medir la epistasis de una codificación (ej: varianza de la epistasis, Davidor 1991).
Ejercicio 2 Escribir en C o en otro lenguaje de programación una función que cuente el nº de 1’s en una cadena de 8 bits
Código: Valor del individuo double d_obtenUnos(int cromosoma, int nbits) {/* Devuelve un valor mayor cuantos más 1’s tenga el cromosoma */ /*variables*/ int pos, sumUnos=0,control=1; for(pos=0;pos< nbits;pos++){ // para todas las posiciones // identifica si hay un 1 en la posición pos y lo cuenta if(control&cromosoma) sumUnos++; control =control<< 1; // sucesivas potencias de 2 } return ((double)sumUnos); }
ALGORITMOS GENÉTICOS Día 2
Ejercicio 3 Escribir en C una subrutina que realice la recombinación uniforme y libre (misma probabilidad en todas las posiciones) entre 2 cadenas de n bits
Código: Recombinación void v_Rec(int padre1,int padre2,int *hijo1, int *hijo2, int nbits) { /* Entrecruzmiento Uniforme: Recombinación libre (pr = 0.5) entre padre1 y 2 para producir hijos 1 y 2 */ long int EE, FF, maxval= (1<<nbits)-1; EE = i_getbin(nbits); // obtiene un nº al azar entre 0 y 2nbits FF = ~EE; // obtiene los bits complementarios de EE FF = FF&maxval; // pone a 0 todos los bits a la izq de maxval *hijo1 = (EE&padre1|FF&padre2); *hijo2 = (EE&padre2|FF&padre1); }
Ejercicio 4 Escribir en C una rutina que, dada una tasa de mutación por individuo y locus, genere los mutantes de la población.
Código: Mutación void muta(int *indiv,int N,int nbits, double mu) {/* Genera el nº de mutantes de la población para una tasa de mutación mu dada */ /*variables*/ int NumMut, mut, mutante, locus=1; double tasa; tasa=(double)N*(double)nbits*mu; NumMut =poison(tasa); // opcionalmente: NumMut = (int)tasa if(NumMut){ // si hay al menos un mutante… for(mut=0;mut<NumMut;mut++){ mutante=(int)(N*uniform());//elige 1 individuo posicion=(int)(nbits*uniform()); //elige 1 locus /* ponemos un 1 en la posición :*/ locus=1<<posicion /* con el OR exclusivo ^ mutamos */ indiv[mutante]=indiv[mutante]^locus; } } }
SELECCIÓN La ruleta de la selección “roulette wheel selection”: Las ranuras de la ruleta tendrán un tamaño porporcional a la eficacia de cada individuo.
SELECCIÓN 0 T w1 w8 w1 w7 T = wi w2 w6 w5 w4 w3
SELECCIÓN • Elegir un nº j al azar entre 0 y T
SELECCIÓN j w1 w2
SELECCIÓN • Recorremos los valores de fitness wi de cada individuo desde 0 hasta N
SELECCIÓN • Si la probabilidad acumulada de wi es mayor que j elegimos a i como padre sino pasamos a i+1
SELECCIÓN j w1 w1 + w2 w2