Programa con algoritmos genéticos usando ECJ
Enviado por deribor01 • 4 de Noviembre de 2013 • 1.473 Palabras (6 Páginas) • 434 Visitas
Como hacer un programa con algoritmos genéticos usando ECJ
Guillermo Buriticá Tobón
Resumen: El presente articulo pretende mostrar los procedimientos necesarios para implementar un algoritmos genético en JAVA mediante la librería ECJ.
Problema
Queremos buscar un vector con la mayor cantidad de 1 en su interior aunque la solución es trivial. Nos sirve para ver como se ejecuta la librería ECJ para JAVA.
Representación
Una matriz de individuos llamada GENOMA en el algoritmo o algorítmicamente un vector de vectores donde se encontraran los individuos.
Función fitness
Es la suma de los elementos de cada vector o individuo dentro del genoma dividido sobre la longitud del individuo (Esto me da 1 si todos los elementos son 1) buscando el valor mas alto en el vector.
(float)(((double)sum)/ind2.genome.length), sum == ind2.genome.length);
Pasos para solucionar el problema
1. Inicializar la población (Población inicial)
2. remplazar la población con el nuevo resultado función evaluador da el primer fitness
3. Si el evaluador encuentra un individuo ideal salta al paso 9 (El algoritmo no se ejecuta)
4. Si no llama la función Exchanger para remplazar la nueva población con el resultado
5. Llama la función BREEDER para crear una nueva población
6. Incrementa el contador de generaciones
7. Termina si encuentra un fitness de 1/1 = 1.0 es decir todos los elementos llenos de 1 en el vector
Solución
Paso 1. Descargue la librería ECJ versión 10 del sitio
• http://www.cs.umd.edu/projects/plus/ec/ecj/ec.zip
• http://www.cs.umd.edu/projects/plus/ec/ecj/ec.tar.gz
• http://www.cs.umd.edu/projects/plus/ec/ecj/docs (Documentacion)
Paso 2:
Descomprima el archivo ec.zip sobre el directorio c:\ec
Paso 3:
Cambiese al directorio c:\ec\app y con ayuda de un editor de texto cree un archivo llamado “prueba. params” y en el escriba los parámetros de la ejecución del algoritmo genetico
• verbosity= 0 // Para que no saque mensajes inutiles
• flush= true // Para que escriba en la pantalla la la información al vuelo
• store= trae // Para que cree un archivo de salida
• breedthreads= 1 // Trabaja en multi hilos aumenta la eficiencia
• evalthreads= 1 //evalua la function de fitness en cada hilo de la ejecucion
• seed.0= 4357 // Una semilla de numeros aleatorios cualquiera
• state= ec.simple.SimpleEvolutionState //Objeto de evolución ver nota al final
• pop= ec.Population // llama la clase para crear la población inicial
• init= ec.simple.SimpleInitializer // inicializa la pobacion inicial
• finish= ec.simple.SimpleFinisher // clase para terminar el algoritmo genetico
• breed= ec.simple.SimpleBreeder //
• eval= ec.simple.SimpleEvaluator // clase de evaluacion
• stat= ec.simple.SimpleStatistics //clase para obtener el registro de ejecucion
• exch= ec.simple.SimpleExchanger // clase para cambio de individuos
• generations= 200 // Numero de generaciones a crear
• quit-on-run-complete= true // Indica que termine
• gc= false // parametro generico
• aggressive= true // tipo de algoritmo
• gc-modulo= 1 // parametro generico
• checkpoint= false // parametro generico para debug
• prefix= ec // parametro generico
• checkpoint-modulo= 1 // parametro generico
• stat.file= $out.stat //Archivo de salida de la ejecucion
• pop.subpops= 1 // parametro generico
• pop.subpop.0= ec.Subpopulation // parametro generico
• pop.subpop.0.size = 100 // parametro generico
• pop.subpop.0.duplicate-retries = 0 // parametro generico
• pop.subpop.0.fitness = ec.simple.SimpleFitness // Funcion de fitness
• pop.subpop.0.species = ec.vector.VectorSpecies // tipo de individuo un vector
• pop.subpop.0.species.genome-size= 100 // tamaño del genoma
• pop.subpop.0.species.crossover-type= one // tipo de mutation
• pop.subpop.0.species.crossover-prob= 1.0 // probabilidad de la mutación
• pop.subpop.0.species.mutation-prob= 0.01 // probabilidad de mutacion por individuo
• vector.species.genome-size = 100 // cantidad de genomas representacion
• pop.subpop.0.species.pipe= ec.vector.breed.VectorMutationPipeline // representación
• pop.subpop.0.species.pipe.source.0= ec.vector.breed.VectorCrossoverPipeline representación
• pop.subpop.0.species.pipe.source.0.source.0=
...