ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Programa con algoritmos genéticos usando ECJ


Enviado por   •  4 de Noviembre de 2013  •  1.473 Palabras (6 Páginas)  •  388 Visitas

Página 1 de 6

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= ec.select.TournamentSelection //tipo de seleccion representacion

• pop.subpop.0.species.pipe.source.0.source.1= ec.select.TournamentSelection //tipo de

...

Descargar como (para miembros actualizados)  txt (8.4 Kb)  
Leer 5 páginas más »
Disponible sólo en Clubensayos.com