Вы находитесь на странице: 1из 2

Trabajo de Laboratorio de Programacin 2 (v2)

Enviar la respuesta como un directorio comprimido en formato .zip. A la direccin: juanfc+lp2@uma.es Desarrollar los ficheros de cabecera de las clases, y los ficheros cuerpo de las clases y el programa principal en un directorio. Usar la indentacin (sangrado) y nombres de variables y organizacin adecuados. En el mismo programa se tendrn los ficheros con los datos. El programa principal crear un objeto de la clase CAlgoritmoGenetico y escribir en pantalla la respuesta de su mtodo ejecuta(). Introduccin Los algoritmos genticos se utilizan para resolver problemas de optimizacin de forma aproximada cuando no es posible hacerlo mediante algoritmos exactos; estn inspirados en la teora de la evolucin y trabajan manipulando un conjunto de soluciones tentativas para un problema. A dichas soluciones se les denomina individuos y al conjunto de soluciones poblacin. En el caso ms simple, que ser el que nosotros trataremos, un individuo est formado por una cadena binaria (secuencia de ceros y unos) y tiene asociado un valor real que representa, de algn modo, su aproximacin a una solucin ptima, conocido como su aptitud (fitness) para el problema. La nica informacin que necesitan estos algoritmos sobre el problema que han de resolver es la forma de calcular la aptitud de una solucin, lo que se conoce como la funcin de fitness. Un algoritmo gentico procede del siguiente modo. En primer lugar, todos los individuos de la poblacin son inicializados con secuencias aleatorias de ceros y unos. A continuacin, el algoritmo entra en un bucle cuyo cuerpo se repite un nmero determinado de veces (generaciones). Dentro de este bucle, dos individuos (padres) son elegidos aleatoriamente de la poblacin, se recombinan sus soluciones tentativas para dar a luz a un nuevo individuo que, seguidamente, es mutado. El nuevo individuo se compara con el peor individuo de la poblacin y, si su fitness es ms alto, lo sustituye; de lo contrario, se desecha. Diseo de clases: Se construirn las siguientes clases: 1) La clase CIndividuo, mantendr una solucin posible al problema y debe incluir los mtodos y caractersticas que se describen a continuacin: a. Para almacenar los datos de un individuo se debe usar un array que se crear de mediante memoria dinmica. b. El constructor de la clase CIndividuo tomar como parmetros la longitud del array que almacena la cadena que representa la solucin del problema. El constructor adems de crear array del tamao pedido, inicializar aleatoriamente cada una de las posiciones con 0 1. c. Redefina el operador operator[] para consultar y establecer el valor de cada posicin del individuo, y longitud() permitir consultar el nmero total de posiciones diponibles. d. El mtodo mutar(double p) debe recorrer todas las posiciones del individuo invirtiendo su valor (de 0 a 1 de 1 a 0) de acuerdo a la probabilidad p que recibe como argumento. Es decir para cada posicin del individuo se generar un nmero aleatorio z y si z < p cambiaremos el valor de la posicin actual. e. El mtodo copia() deber construir y devolver una copia del individuo. Hacer el constructor de copia y el operador de asignacin (No hacer el

mtodo copia() para evitar hacer return de objetos de tipo CIndividuo y luego asignaciones entre este tipo de objetos, que al final nos obligara igualmente a tener que hacer el constructor de copia y definir el operador de asignacin). f. El mtodo evalua() debe devolver el valor de fitness (adecuacin al problema) asociado al problema. Para hacer pruebas consideraremos que el valor de fitness de una cadena de 0s y 1s ser el nmero de 1s (el algoritmo debera intentar evolucionar las soluciones para que slo hubiese 1s). Este problema es un problema de prueba llamado OneMax. g. El mtodo recombinar(CIndividuo) genera un nmero aleatorio z
comprendido entre cero y la longitud del individuo. Los primeros z genes del individuo resultante se toman del primer padre (objeto llamado) y el resto del segundo (parmetro), modificando el objeto en el que se invoca el mtodo. 2) La clase CPoblacion, teniendo en cuenta que una poblacin est constituida por

un conjunto de individuos y se implementar usando una lista dinmica de Individuo adems: a. El constructor recibir como parmetros: el tamao de la poblacin (nmero de individuos) y la longitud de los individuos (nmero de posiciones de sus individuos). Debe crear esa poblacin y los individuos generados deben ser diferentes (no hay que asegurar que sean diferentes, pero cada individuo debe ser al menos aleatorio). b. El mtodo numIndividuos() debe devolver el nmero de individuos de la poblacin (tamao de la poblacin). c. El mtodo individuo(int) devolver el isimo individuo de la poblacin. d. El mtodo mejorIndividuo() devuelve el individuo con mayor valor de fitness de la poblacin. e. El mtodo reemplaza(CIndividuo) sustituir el peor individuo de la poblacin (el de menor valor de fitness) por el individuo que se pasa como parmetro; pero slo en el caso de que este ltimo sea mejor (mayor fitness). 3) La clase CAlgoritmoGenetico, sabiendo que cada algoritmo gentico almacenar informacin necesaria sobre una poblacin de soluciones tentativas, la probabilidad de mutacin de las posiciones de los individuos y el nmero de pasos que debe realizar. Adems, debe tenerse en cuenta lo siguiente: a. El constructor de esta clase debe recibir dos cadenas de caracteres. Esas cadenas de caracteres representan los nombres de dos ficheros. El primero tiene los parmetros del algoritmo (4 valores numricos: el tamao de la poblacin que va a utilizar, la longitud de los individuos de dicha poblacin, el nmero de pasos del algoritmo (generaciones) y la probabilidad de mutar cada posicin en el individuo) y el segundo ser un fichero para almacenar la traza (ver mtodo ejecuta()). Adicionalmente, el constructor deber crear la poblacin de individuos. b. El mtodo ejecuta() deber ejecutar, tantas veces como indique el nmero de pasos, la secuencia siguiente: seleccionar dos individuos de la poblacin aleatoriamente, recombinarlos, mutar el resultado con la probabilidad indicada y, por ltimo, el individuo resultante se insertar en la poblacin reemplazando al peor individuo siempre y cuando sea mejor que ste. En cada paso, debe almacenar en el fichero de traza una lnea con el siguiente formato:
<generacion actual> <mejor solucin> <valor de fitness>

Finalmente, devolver el mejor individuo de la poblacin despus de la terminacin del bucle.

Los profesores de la asignatura Mlaga a viernes 4 de mayo de 2012

Вам также может понравиться