Algoritmo Genético
Publicado por raida (1 intervención) el 13/06/2006 19:27:54
Soy una joven estudiante de informática y me mandaron a realizar este ejercicio y tengo grandes dudas para resolverlo, si pudieran hacerme el favor de mandarme la respuesta le estaría muy agradecida.
El problema de la optimización de propósito general consiste en encontrar los valores óptimos de una determinada función a la cuál no se le exige el cumplimiento de ninguna característica específica, como podría ser que fuera una función lineal (como lo exige el método SIMPLES que se imparte en Investigación de Operaciones). Existen muchos métodos para este tipo de problemas entre los que están: los Algoritmos Genéticos, las Estrategias Evolutivas, los Escaladores de Colinas, la Búsqueda limitada por umbral, etc. Asuma que solo se trabajarán con funciones de 6 variables, y cada variable toma valores entre 0 y 9. Para todos estos métodos, suponga que existe una predicado llamado “funcion” que, dada una lista que representa un vector de soluciones, devuelve un valor de evaluación que se corresponde con la función que se desea maximizar. Por ejemplo, la función “producto” podría implementarse así:
funcion([], 1).
funcion([X|L], P):- funcion(L, P1), P is P1*X.
a) Implemente el método de optimización conocido como Algoritmo Genético que se inspira en el proceso evolutivo basado en la reproducción sexual. En este método se generan aleatoriamente un grupo de soluciones (asuma que son 50). Luego, de ellas se toma el 20% mejor (o sea, las 10 con mayor valor para la función a optimizar) y las combina utilizando el operador de cruzamiento para generar 40 soluciones nuevas. Para ello, repite 20 veces el siguiente proceso: Toma dos soluciones aleatoriamente entre las 10 mejores y realiza el cruzamiento. El cruzamiento produce dos nuevas soluciones tomando una sublista de una y otra sublista de la otra, de manera aleatoria. Por ejemplo, el cruzamiento de dos padres como los siguientes puede producir los siguientes hijos H1 y H2: cruzamiento([1,1,4,5,6,7], [2,3,1,1,1,1], H1, H2), produce: H1 = [1,1,1,1,1,1] y H2 = [2,3,4,5,6,7]. Esto se corresponde con el cruzamiento después de la variable número 2. Podría haberse escogido aleatoriamente otro punto de cruce que se correspondiera con las variables: 1, 3, 4 ó 5. Cuando se han generado las 40 soluciones nuevas estas, junto a las 10 mejores, forman lo que se llama “nueva generación”. Ahora, esta nueva generación de 50 soluciones vuelve a pasar por todo el proceso nuevamente: Se escogen las 10 mejores, se cruzan, etc. Permita que el usuario pueda seleccionar el número de generaciones que desea. Al final, devuelva la mejor solución encontrada durante toda la evolución.
El problema de la optimización de propósito general consiste en encontrar los valores óptimos de una determinada función a la cuál no se le exige el cumplimiento de ninguna característica específica, como podría ser que fuera una función lineal (como lo exige el método SIMPLES que se imparte en Investigación de Operaciones). Existen muchos métodos para este tipo de problemas entre los que están: los Algoritmos Genéticos, las Estrategias Evolutivas, los Escaladores de Colinas, la Búsqueda limitada por umbral, etc. Asuma que solo se trabajarán con funciones de 6 variables, y cada variable toma valores entre 0 y 9. Para todos estos métodos, suponga que existe una predicado llamado “funcion” que, dada una lista que representa un vector de soluciones, devuelve un valor de evaluación que se corresponde con la función que se desea maximizar. Por ejemplo, la función “producto” podría implementarse así:
funcion([], 1).
funcion([X|L], P):- funcion(L, P1), P is P1*X.
a) Implemente el método de optimización conocido como Algoritmo Genético que se inspira en el proceso evolutivo basado en la reproducción sexual. En este método se generan aleatoriamente un grupo de soluciones (asuma que son 50). Luego, de ellas se toma el 20% mejor (o sea, las 10 con mayor valor para la función a optimizar) y las combina utilizando el operador de cruzamiento para generar 40 soluciones nuevas. Para ello, repite 20 veces el siguiente proceso: Toma dos soluciones aleatoriamente entre las 10 mejores y realiza el cruzamiento. El cruzamiento produce dos nuevas soluciones tomando una sublista de una y otra sublista de la otra, de manera aleatoria. Por ejemplo, el cruzamiento de dos padres como los siguientes puede producir los siguientes hijos H1 y H2: cruzamiento([1,1,4,5,6,7], [2,3,1,1,1,1], H1, H2), produce: H1 = [1,1,1,1,1,1] y H2 = [2,3,4,5,6,7]. Esto se corresponde con el cruzamiento después de la variable número 2. Podría haberse escogido aleatoriamente otro punto de cruce que se correspondiera con las variables: 1, 3, 4 ó 5. Cuando se han generado las 40 soluciones nuevas estas, junto a las 10 mejores, forman lo que se llama “nueva generación”. Ahora, esta nueva generación de 50 soluciones vuelve a pasar por todo el proceso nuevamente: Se escogen las 10 mejores, se cruzan, etc. Permita que el usuario pueda seleccionar el número de generaciones que desea. Al final, devuelva la mejor solución encontrada durante toda la evolución.
Valora esta pregunta


0