Está en la página 1de 42

Asignatura Datos del alumno Fecha

Computación Apellidos: Cañas Garcia


02/09/2022
Bioinspirada Nombre: Cristian Alberto

Fundación Universitaria Internacional de La Rioja


Pregrado en Ingeniería Informática

Actividad 2.
Programación de
algoritmos
genéticos
Trabajo presentado por: Cristian Alberto Cañas
Garcia
Profesor: Rogerio Orlando Beltran Castro
© Universidad Internacional de La Rioja (UNIR)

Bogotá
09, 2022

1
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

Actividad 2. Programación de algoritmos genéticos

▸ Objetivos: mediante esta actividad, comprenderás la mecánica que hay detrás de los algoritmos
genéticos.

▸ Descripción: la actividad consiste, en primer lugar, en realizar un resumen ilustrativo de un artículo


sencillo (el cual se proporcionará) sobre algoritmos genéticos, de tal forma que sea comprensible
para el nivel de conocimientos obtenidos en la asignatura. Asimismo, utilizaréis un código (Java)
proporcionado por el profesor, y que se corresponde con la implementación de un algoritmo
genético.

1. ¿Qué son los algoritmos genéticos?


Basados en modelos computacionales de la evolución biológica natural, los algoritmos
genéticos pertenecen a la clase de los algoritmos evolutivos, junto con la programación
evolutiva, la evolución de estrategias y la programación genética.

Los algoritmos genéticos (AGs) son mecanismos de búsqueda basados en las leyes de la
selección natural y de la genética. Combinan la supervivencia de los individuos mejor
adaptados junto con operadores de búsqueda genéticos como la mutación y el cruce, de ahí
quesean comparables a una búsqueda biológica. Fueron desarrollados por John Holland y
Rechemberg que crearon algoritmos de optimización imitando los principios básicos de de
la naturaleza. Estos algoritmos se utilizan con éxito para gran variedad de problemas que
no permiten una solución eficiente a través de la aplicación de técnicas convencionales.
Tiene asimismo aplicaciones variadas en ingeniería, como es el diseño de piezas (turbinas,
rotores, etc.), diseño y control de redes, planificación de tareas, síntesis de mecanismos,
diseñode tolerancias, etc. y aplicaciones en otros gremios como en sistemas de computación
paralelos(paralelización automática de programas secuenciales), química (optimización de
© Universidad Internacional de La Rioja (UNIR)

procesos de producción, diseño tecnológico y de instalaciones), negocios y comercio


(modelización de sistemas económicos complejos, predicción de mercados), medicina
(análisis de datos en medicina, diagnóstico automático) o gestión (análisis de datos en
gestión, asistentes de gestión,sistemas automáticos de decisión).

Para la ingeniería, los algoritmos genéticos y la programación evolutiva en general


presentan oportunidades de plantearse problemas que no permiten una solución eficiente a
través de la aplicación de técnicas convencionales.

2
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

2. Antecedentes históricos.
Los algoritmos genéticos tienen sus antecedentes en la biología y comienzan con Charles
Darwin, que con su libro El origen de las especies por medio de la selección natural o la
preservación de las razas favorecidas en su lucha por la vida, nos habla sobre los principios
dela selección natural.

Los principios básicos de los algoritmos genéticos se derivan de las Leyes de la Vida
Natural descritos por Darwin:

▪ Existe una población de individuos con diferentes propiedades y habilidades. Así


mismo existe una limitación sobre el número de individuos que existen en una
determinada población.
▪ La naturaleza crea nuevos individuos con propiedades similares a los individuos existentes.
▪ Los individuos más prometedores se seleccionan más a menudo para la
reproducción deacuerdo con la selección natural.
Los algoritmos genéticos imitan los principios de la vida descritos y los utilizan para
propósitosde optimización.

Una de las principales deficiencias del argumento de Darwin es que, a pesar de que la
herenciajuega un papel preponderante en su teoría, no ofrece una explicación acerca de su
funcionamiento. Sin embargo, desde Mendel se conoce que la herencia se produce a través
delcódigo genético presente en las células reproductivas.

3. Representación.
Todos los organismos vivos están constituidos por células, y cada célula contiene uno o más
cromosomas (cadenas de ADN), que le sirven como una especie de “plano” al organismo.
© Universidad Internacional de La Rioja (UNIR)

Un cromosoma puede ser conceptualmente dividido en genes cada uno de los cuales
codifica una proteína. En términos generales, se puede decir que un gen se codifica como
si fuera un rasgo,como puede serlo el color de ojos. Cada gen se encuentra en una posición
particular del cromosoma, y está formado por alelos.

3
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

Se supone que los individuos (posibles soluciones del problema), pueden representarse
como un conjunto de parámetros (que denominaremos genes), los cuales agrupados forman
una ristrade valores, a menudo referida como cromosoma. Debe existir una representación
de estos genes para poder utilizarlos posteriormente en el algoritmo genético y dotarles de
unos valores. Se pueden considerar tres tipos básicos de representación o codificación de
los genes:

▪ Binaria: en ella se utiliza un vector cuya longitud es la del número de genes de


cadaindividuo y el valor que puede tomar cada elemento es un número binario.

▪ Entera: en ella se utiliza un vector cuya longitud es la del número de genes de


© Universidad Internacional de La Rioja (UNIR)

cadaindividuo y el valor que puede tomar cada elemento es un número entero.

4
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

▪ Real: en ella se utiliza un vector cuya longitud es la del número de genes de cada
individuoy el valor que puede tomar cada elemento
es un número real.

Un individuo es una solución potencial al problema que se trata. Cada individuo contiene
un cromosoma. A un conjunto de individuos se le denomina población. El fitness de un
individuo es la evaluación de la función de evaluación e indica qué tan bueno es el
individuo(es decir, la solución al problema) con respecto a los demás.
© Universidad Internacional de La Rioja (UNIR)

5
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

4. Algoritmo.
Desarrollado por John H. Holland, el algoritmo genético opera entonces a nivel de genotipo
delas soluciones mediante la siguiente secuencia:

1. Comenzar con una población inicial, la cual puede ser generada de manera aleatoria.
2. Calcular el fitness (aptitud) de cada individuo.
3. Aplicar el operador de selección con base en el fitness de la población.
4. Aplicar los operadores genéticos de reproducción, cruce y mutación a la población
actualpara generar a la población de la siguiente generación.
5. Ir al paso 2 hasta que la condición de parada se satisfaga.
6. Cuando se cumple la condición de parada, se devuelve al mejor individuo encontrado
(bienel mejor de todas las generaciones, bien el mejor de la última generación).
Al igual que en muchas otras heurísticas, el comportamiento del algoritmo genético es
altamente dependiente de los parámetros iniciales (tamaño de la población, porcentaje de
cruce, porcentaje de mutación, número de generaciones, etc.), por lo que será necesario
ajustar esos parámetros para tratar de mejorar la solución para los objetivos del problema.
A cada iteración de este proceso se le denomina una generación. Un algoritmo genético
típicamente se itera de 50 a 500 o incluso más generaciones. El conjunto entero de
generacionesse denomina una ejecución. Al final de una ejecución existen a menudo uno o
varios cromosomas altamente adecuados en la población, y que pueden ser elegidos como
solución alproblema.

La función de evaluación o de fitness de un problema es realmente la función que se desea


optimizar. Su diseño es junto con el del genotipo, una de las características más
importantes a la hora de encontrar la mejor solución a un problema.
Como se ha podido ver en el algoritmo, en cada generación se selecciona a un conjunto de
los mejores individuos (paso 3) y se les modifica para generar la siguiente generación
mediante los llamados operadores genéticos (paso 4). Estos operadores son tres:
reproducción, cruce y mutación. El operador de cruce intenta simular la reproducción
sexual, de tal manera que los individuos resultantes del cruce contendrán información de
varios individuos. El operador de mutación simula la mutación biológica, de tal manera que
los individuos mutados serán ligeramente diferentes de los individuos originales. El
© Universidad Internacional de La Rioja (UNIR)

operador de reproducción simplemente copia sin modificación un individuo de una


generación a la siguiente. Así en la siguiente generación, algunos individuos simplemente
habrán sido copiados, y otros cruzados y/omutados.

6
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

5. Función de evaluación y función de aptitud


(fitness).
La función de evaluación generalmente es la función objetivo, es decir, es lo que se quiere
llegar a optimizar(ej: número de aciertos, número de movimientos, etc.). Es necesario
decodificar la solución presente en el cromosoma para evaluarla.
La función de aptitud (fitness) es la que permite valorar la aptitud de los individuos y debe
tomar siempre valores positivos.

Ambas funciones suelen ser iguales, pero puede ser que la función objetivo sea muy
compleja,tome valores negativos, o no proporcione un valor numérico y, por lo tanto, sea
necesario definir una función de aptitud diferente.

En un algoritmo genético la información ha de codificarse para poder trabajar


adecuadamente con ella. Cómo hemos visto, existen numerosos sistemas de codificación,
aunque nosotros utilizaremos la codificación real.

Una vez definido el sistema de codificación a emplear se verá cómo actúan los operadores
básicos de selección, cruce y mutación sobre este código.

6. Operadores genéticos.
En su forma más simple, un algoritmo genético consta de los siguientes operadores
genéticos:selección, reproducción, cruce (crossover) y mutación.

Selección

El proceso de selección sirve para escoger a los individuos de la población mejor adaptados,
para que actúen de progenitores de la siguiente generación. En la naturaleza existen varios
factores que intervienen para que un individuo pueda tener descendencia. El primero de
todos es que consiga sobrevivir, ya sea porque no es devorado por depredadores, o porque
sea capazde procurarse alimento. Lo segundo es que encuentre pareja para reproducirse. El
© Universidad Internacional de La Rioja (UNIR)

último factor es que la combinación de ambos individuos sea apta para crear un nuevo
individuo.

Sin embargo, en la realidad es posible que “el mejor” individuo no pueda reproducirse, pero
otro individuo de “peor calidad” pueda conseguirlo. Aunque este hecho es menos probable,
sigue siendo posible.

En los algoritmos genéticos, la selección es un conjunto de reglas que sirven para elegir a
los progenitores de la siguiente generación. Estos progenitores se reproducirán

7
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

(cruzamiento genético) y generarán descendencia.

Un sistema muy utilizado en los algoritmos genéticos es la selección por torneo. Este
sistema consiste en escoger aleatoriamente de la población un cierto número de individuos.
De esos individuos se escoge el mejor de todos para ser el padre. Para escoger la madre se
repite el proceso: se escoge aleatoriamente a un número de individuos de la población y se
elige al individuo con mejor calidad. Este sistema garantiza un mínimo de diversidad,
ya que no siempre se elegirá al mejor individuo de la población para tener descendencia.
Pero, por el contrario, existen grandes posibilidades de que éste tenga descendencia, ya que
si es escogido en algún torneo, será el vencedor.

Reproducción

En este contexto, se entenderá por “reproducción” la clonación de un individuo. Es decir,


un individuo pasará a la siguiente generación sin modificación. De esta manera, la
reproducción es un operador genético que se contrapone al cruce y la mutación, puesto que
estos últimos modifican los individuos que pasan a la siguiente generación. El objetivo de la
reproducción es mantener en la siguiente generación a individuos con fitness alta de la
presente generación.

Relacionado con el concepto de reproducción está el de “elitismo”, el cual mantiene a


losmejores individuos de una generación a la siguiente, para que no se pierda su
información.

Cruce

Durante esta fase se cruzan o mezclan los individuos seleccionados en la fase anterior. Es
decir,los genes de los dos padres se mezclan entre sí para dar lugar a los diferentes hijos.
Existen diversos métodos de cruce, pero los más utilizados son los siguientes:

▪ Cruce basado en un punto: los dos individuos seleccionados para jugar el papel de
padres, son recombinados por medio de la selección de un punto de corte, para
posteriormente intercambiar las secciones que se encuentran a la derecha de dicho
punto. Es decir, los genes del padre1 a la izquierda del punto de corte forman parte
del hijo1 y los situados a la derecha formaran parte del hijo2, mientras que con el
padre2 sucederá lo contrario.
© Universidad Internacional de La Rioja (UNIR)

▪ Cruce punto a punto: este tipo de cruce es similar al anterior pero realizándose para
cada gen de los padres. Por tanto, en este cruce los genes pares del padre1 formarán
parte del hijo1 y los genes impares formarán parte del hijo2, mientras que para el
padre2 sucederá lo contrario.
▪ Cruce multipunto: en este tipo de cruce se selecciona aleatoriamente la cantidad de
puntosque se van a utilizar para el cruce. De esta forma, y de manera análoga al
anterior cruce, se irán intercambiando los genes para formar los dos nuevos hijos.
▪ Cruces específicos de codificaciones no binarias: Para este tipo de codificación se

8
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

puedendefinir, además de los anteriores, otros tipos de operadores de cruce:


▪ Media: el gen de la descendencia toma el valor medio de los genes de los padres.
Tiene la desventaja de que únicamente se genera un descendiente en el cruce de
dos padres.
▪ Media geométrica: cada gen de la descendencia toma como valor la raíz cuadrada
delproducto de los genes de los padres. Presenta el problema añadido de qué
signo dar alresultado si los padres tienen signos diferentes.
▪ Extensión: se toma la diferencia existente entre los genes situados en las mismas
posiciones de los padres y se suma el valor más alto o se resta del valor más bajo.
Solventa el problema de generar un único descendiente.
Mutación
La mutación se considera un operador básico, que proporciona un pequeño elemento de
aleatoriedad en los individuos de la población. Si bien se admite que el operador de cruce es
el responsable de efectuar la búsqueda a lo largo del espacio de posibles soluciones, el
operador de mutación es el responsable del aumento o reducción del espacio de búsqueda
dentro del algoritmo genético y del fomento de la variabilidad genética de los individuos de
la población.
Existen varios métodos para aplicar la mutación a los individuos de una población, pero el
máscomúnmente utilizado es el de mutar un porcentaje de los genes totales de la población.

Este porcentaje de genes a mutar se puede seleccionar de dos maneras, de forma fija,
especificando el mismo porcentaje de mutación a todas las generaciones del algoritmo
genético y de forma variable, es decir, modificando el porcentaje de mutación de una
generación a otra,por ejemplo reduciéndolo. De esta manera, se consigue hacer una búsqueda
más amplia y globalal principio e ir reduciéndola en las siguientes generaciones.

Con otro tipo de codificaciones (por ejemplo codificación real) existen otras opciones de
mutación, aplicadas con una probabilidad generalmente pequeña:

▪ Mutación al azar: Modifica el valor de un gen asignando con un nuevo valor que se
encuentra dentro de un determinado rango. El nuevo valor es independiente del valor
previo del gen.
▪ Mutación gaussiana: Dado un cromosoma p con un gen seleccionado para la mutación
i, se le aplica una distribución normal N de media pi y desviación estándar s
(parámetro). Alternativamente se puede disminuir el valor de s a medida que
© Universidad Internacional de La Rioja (UNIR)

aumenta el número de generaciones.

9
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

7. ¿Y como puedo implementar un


algoritmo genético en Java?
Para la implementación de algoritmos genéticos, disponemos de un framework para Java
llamado JGAP (Java Genetic Algorithms Package) JGAP proporciona los métodos y
mecanismos básicos para implementarlo. Fue diseñado para que fuera muy fácil de usar,
siendoaltamente modular y configurable, llegando a ser realmente fácil crear incluso nuevos
y personalizados operadores genéticos.

Se distribuye bajo licencia GPL. En su página web podemos encontrar gran variedad de
ejemplos de uso y documentación.

A continuación mostramos el diagrama de clases implementado en JGAP:


© Universidad Internacional de La Rioja (UNIR)

Como veis, ya están implementados la mayoría de operadores de los que hemos hablado
anteriormente (cruce, selección, etc) y los tipos de genes más comunes. De todas formas,
siempre podrás crear los operadores y tipos de gen que necesites.

10
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

El framework JGAP se encarga de ejecutar los operadores en cada ejecución, devolviendo


el individuo con mayor Fitness (permitiéndonos incluso obtener cualquier individuo de la
población en cualquier ejecución).
© Universidad Internacional de La Rioja (UNIR)

11
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

TALLER CON JGAP

JGAP es un framework libre basado en la tecnología JAVA. El mismo provee


mecanismos para aplicar principios evolutivos en la resolución de problemas. Al
momento de escribir este documento la última versión estable de este framework
es la 3.5

Nuestro trabajo se focaliza en probar este framework y realizar un manual detallado


con ejemplos didácticos que permitan aprender a utilizarlo haciendo más leve su
curvade aprendizaje. Incluiremos "srceen shots" para hacer esta tarea mas simple.

INSTALACIÓN Y CONFIGURACIÓN DEL ENTORNO

En primer lugar debe disponerse de una herramienta de desarrollo de aplicaciones


java.Luego es necesario descargar las librerías JGAP y agregarlas a una aplicación.

Descarga e instalación de la máquina virtual de java

Antes de descargar el Eclipse es necesario disponer de la máquina virtual de java para poder
compilarlas aplicaciones. Esto lo hace automáticamente el eclipse pero debe tenerse instalada
previamente. Sepuede obtener en este sitio o en el cd.

http://java.sun.com/javase/downloads/index.jsp
© Universidad Internacional de La Rioja (UNIR)

Descarga e instalación de Netbeans para desarrollo en java

12
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

Se puede bajar la última versión de Netbeans de Internet del sitio:


http://www.oracle.com/technetwork/java/javase/downloads/jdk-netbeans-jsp-
142931.html Como se muestra en la siguiente imagen.

Una vez descargado el instalador, se ejecuta e instala con normalidad.

Descarga e instalación de JGAP

Se deben descargar las librerías de JGAP desde el sitio oficial hay un link a la última
versión.Hasta el día de hoy es la 3.5.

http://sourceforge.net/projects/jgap/files/jgap/

En este archivo se encuentran las librerías y algunos ejemplos de aplicación compilados, el


archivo jgap_3.5_full.zip contiene todos los códigos fuentes. Descomprimir el archivo
jgap_3.5_full.zip en c:\jgap\jgapfull

Agregar las librerías a una aplicación


© Universidad Internacional de La Rioja (UNIR)

Una vez instalado netbeans y descomprimido el framework en c:\jgap\jgapfull debemos crear


un proyecto en el netbeans.

Entramos al netbeans y creamos un nuevo proyecto java:


Para esto hacemos click derecho como se muestra en la imagen.

13
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto
© Universidad Internacional de La Rioja (UNIR)

Escribimos el nombre del proyecto y hacemos clic en Finish y crea automáticamente un


proyecto nuevo.

14
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

Una vez creado el proyecto se debe configurar el Build Path para incluir las librerías de
jgap.Haciendo clic derecho en el proyecto y seleccionando Set Configuratión ->
Customize

Luego se debe seleccionar el item Libraries y hacer clic en Add JAR/Folder


© Universidad Internacional de La Rioja (UNIR)

15
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

Buscar en c:\jgap\jgap_3.5_full el jgap.jar y hacer click en Abrir

Una vez realizado esto ya se puede utilizar las librerías desde una clase java de ese proyecto.
© Universidad Internacional de La Rioja (UNIR)

16
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

INTRODUCCIÓN A LOS ALGORITMOS GENÉTICOS

Los algoritmos genéticos buscan imitar los procesos evolutivos de la naturaleza para
resolver problemas. En la naturaleza los individuos de una población se reproducen entre si
y de esta forma nacen nuevos individuos. Todos se someten a una selección natural durante
sus vidas enla que los más aptos tienen más probabilidades de sobrevivir, de esta forma las
poblaciones evolucionan, mejoran constantemente y se adaptan a los nuevos medios.

Para los algoritmos genéticos los individuos se denominan cromosomas. Cada cromosoma
es una solución a un problema específico. Las características de un cromosoma se
denominan genes. También existe una función de aptitud, la cual aplicada a cada
cromosoma devuelve unvalor que indica cuan apto es y permite compararlos entre ellos.

Antes de comenzar, es necesario tener una población inicial. Lo que suele hacerse es crear
unapoblación de cromosomas al azar.

Una vez que se tiene una población se reproducen los individuos para obtener mayor
variedad,tal como en la naturaleza. Luego, es necesario seleccionar los mejores, para ir
evolucionando. Hay varios métodos de selección pero en general lo que se busca es que los
mejores pasen a lapróxima generación y algunos no tan aptos también, ya que la variedad
ayuda a que en la reproducción se generen cromosomas más aptos aun que sus padres. Puede
que de la cruza de un cromosoma muy apto y otro no tanto resulte uno mucho mejor a sus
padres.

En la naturaleza algunas veces sucede un fenómeno llamado mutación. Este es un pequeño


cambio en la información genética producido esporádicamente, que provoca un cambio en
© Universidad Internacional de La Rioja (UNIR)

un individuo. Este cambio asegura más variedad y provoca cambios positivos o negativos.
Los cambios negativos deberían quedar en el olvido gracias a la selección natural y los
positivos perdurar haciendo evolucionar a la población. Para los algoritmos también se
puede utilizar mutación para agregar variedad y obtener mejores soluciones.
Para llegar a buenos resultados es necesario recorrer varias generaciones. Es decir,
reproducir varias veces los individuos y hacer varias selecciones y algunas pocas

17
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

mutaciones. También esnecesario determinar cuándo una solución es suficientemente apta


como para aceptarla. Para esto puede medirse cuanto aumenta la aptitud del mejor
cromosoma y si después de varias generaciones no mejora aun introduciendo mutaciones o
aumentando el número de cromosomas podemos decidir dejar de evolucionar y utilizar esa
solución. Otra técnica consiste establecer de ante mano cuantas generaciones se van a
considerar.

MÉTODOS DE SELECCIÓN

A continuación se muestran algunas de las técnicas de selección más conocidas

Rueda de ruleta

Este método consiste en construir una ruleta particionada en ranuras de igual tamaño, las
cualesse numeran. A cada individuo de la población se le asigna una cantidad de ranuras
proporcionala su aptitud.

El proceso se repite hasta completar la cantidad de individuos deseados. Este método de


selección otorga mayor probabilidad de contribuir a la siguiente generación a los individuos
con mayor aptitud.

Hay algunas otras variantes como por ejemplo, incluir en la nueva generación el mejor
representante de la generación actual. En este caso, se denomina método elitista.

Selección por torneo

En este caso dos individuos son elegidos al azar de la población actual y el mejor o más
apto de los dos se coloca en la generación siguiente. Esto continúa hasta que se complete la
nueva población.
© Universidad Internacional de La Rioja (UNIR)

Basado en el rango

En este esquema se mantiene un porcentaje de la población, generalmente la mayoría, para


la siguiente generación. Se coloca toda la población por orden de aptitud, y los M menos
dignos son eliminados y sustituidos por la descendencia de alguno de los M mejores con
algún otro individuo de la población.

18
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

Método Estocástico

Por cada individuo se calcula la aptitud relativa al promedio de aptitudes de la población, y


enfunción de esto se asignan las copias. Por ejemplo, si la aptitud promedio de la población
es 15y la aptitud del individuo es 10; entonces su aptitud relativa es 1.5. Esto significa que se
colocaráuna copia en la próxima generación y que se tiene el 0.5 (50 %) de chance de
colocar una segunda copia.

MÉTODOS DE REPRODUCCIÓN

A continuación se muestran algunas técnicas para reproducir individuos (o cromosomas).

Cruza Simple

Los dos cromosomas padres se cortan por un punto, y el material genético situado entre
ellosse intercambia.

Dada las siguientes estructuras de longitud 1 = 8, y eligiendo 3 como el punto de cruza se


intercambian los segmentos de cromosoma separados por este punto.

XYX | XYYYX YYX|YYXXY

XYX | YYXXY YYX | XYYYX

Cruza de dos puntos

En este método de cruza de dos puntos, se seleccionan dos puntos aleatoriamente a lo


largo dela longitud de los cromosomas y los dos padres intercambian los segmentos entre
estos puntos.

Cruza Multipunto
© Universidad Internacional de La Rioja (UNIR)

X | YXX | Y | YY | XX | Y | YXY | Y
YXY | Y | XX | X | XX | YY |
YXX | Y |
YY | Y

19
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

Cruza binomial

Para generar un cromosoma hijo por cruza binomial, se define la probabilidad P0 como la
probabilidad de que el Alelo de cualquier posición del descendiente se herede del padre, y
1 - P0 como la probabilidad de que lo herede de la madre. En este caso se puede construir un
único hijo por cada aplicación del operador, o bien generar un segundo hijo como
complemento del primero.

Cuando existe igual probabilidad de heredar del padre como de la madre, P0 = 0,5 la cruza
se denomina uniforme. Para estructuras de longitud l la cruza uniforme implica un promedio
de l/2 puntos de cruza.

Mutación

En la Evolución, una mutación es un suceso bastante poco común (sucede aproximadamente


una de cada mil replicaciones), en la mayoría de los casos las mutaciones son letales, pero
en promedio, contribuyen a la diversidad genética de la especie. En un algoritmo genético
tendránel mismo papel, y la misma frecuencia (es decir, muy baja).

Una vez establecida la frecuencia de mutación, por ejemplo, uno por mil, se examina cada
bit de cada cadena. Si un número generado aleatoriamente está por debajo de esa
probabilidad, secambiará el bit (es decir, de 0 a 1 o de 1 a 0). Si no, se dejará como está.
Dependiendo del número de individuos que haya y del número de bits por individuo, puede
resultar que las mutaciones sean extremadamente raras en una sola generación.
© Universidad Internacional de La Rioja (UNIR)

No hace falta decir que no conviene abusar de la mutación. Es cierto que es un mecanismo
generador de diversidad, y, por tanto, la solución cuando un algoritmo

genético está estancado, pero también es cierto que reduce el algoritmo genético a una
búsquedaaleatoria. Siempre es más conveniente usar otros mecanismos de generación de
diversidad, como aumentar el tamaño de la población, o garantizar la aleatoriedad de la
población inicial.

20
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

EJEMPLO DE APLICACIÓN:

Para poder entender cómo funciona el framework y poder manejarlo, un ejemplo de


aplicaciónsimple es lo indicado.

Supongamos que es necesario descomponer un cierto monto de dinero en la menor cantidad


posible de monedas. Por ejemplo si se tienen 1,35 dólares (135 centavos) puede
descomponersede la siguiente forma:

1 Moneda de un dólar
1 Moneda de 25 centavos
1 Moneda de 10 centavos

3 monedas en total

Pero también puede descomponerse de la siguiente forma:


27 Monedas de 5
centavos.27 monedas
en total.

Hay muchas formas de descomponer este monto en monedas cada una de ellas es una
soluciónposible al problema (cromosoma) y tiene un valor de aptitud asociado, que deberá
depender dela cantidad de monedas totales de ese cromosoma. Cuantas menos monedas se
necesiten más apta será la solución ya que lo que se busca es lograr la menor cantidad de
monedas posibles.

Cada cromosoma tendrá 6 genes. Los genes en este problema son números enteros que
© Universidad Internacional de La Rioja (UNIR)

representan la cantidad de monedas de cada tipo

Moneda de un dólar (100


centavos)Moneda de 50
centavos
Moneda de 25
21
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

centavosMoneda de
10 centavosMoneda
de 5 centavos
Moneda de 1
centavo
© Universidad Internacional de La Rioja (UNIR)

22
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

IMPLEMENTACIÓN DE EJEMPLO

Para poder implementar una solución a este problema utilizando jgap es necesario indicarle
alframework una serie de parámetros y codificar la función de aptitud.
Para este caso la clase principal se llamará CambioMinimo y la función aptitud se codificará
en la clase CambioMinimoFuncionAptitud.

En primer lugar se debe modelar el problema, es decir definir como se compone cada gen
de los cromosomas (soluciones posibles). Para este problema puntual cada gen será un
número entero y representará la cantidad de un tipo de moneda de ese cromosoma. Por lo
tanto cada cromosoma tendrá 6 genes Ejemplo:

Cantidad de Monedas de 1 dólar 2


Cantidad de Monedas de 50 centavos 1
Cantidad de Monedas de 25 centavos 1
Cantidad de Monedas de 10 centavos 0
Cantidad de Monedas de 5 centavos 0
Cantidad de Monedas de 1 centavo 0

Este cromosoma sumaría 275 centavos en 4 monedas.


Una vez definido el modelo se puede comenzar a codificar la solución.

A continuación se explica a grandes rasgos como se implementó el ejemplo de aplicación y


queclases y funciones principales se utilizaron. Pero para más detalle se encuentra el anexo
con elcódigo fuete explicado instrucción por instrucción.
Primero se debe crear una configuración con valores predeterminados que luego se irán
modificando.
© Universidad Internacional de La Rioja (UNIR)

// Se crea una configuración con valores predeterminados. //

Configuration conf = new DefaultConfiguration();

23
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

Luego se le indica que el mejor elemento siempre pase a la próxima generación // Se


indicaen la configuración que el elemento más apto siempre pase // a

// la próxima generación //

conf.setPreservFittestIndividual(true);

Se crea la función de aptitud que más adelante se explicará y se setea en la configuración

// Se Crea la función de aptitud y se setea en la configuración //

FitnessFunction myFunc = new


CambioMinimoFuncionAptitud(Monto);
conf.setFitnessFunction(myFunc);

También se debe crear un cromosoma de ejemplo para que el framework conozca su estructura

// Ahora se debe indicar a la configuracion como seran los cromosoma: // en

// este caso tendran 6 genes (uno para cada tipo de moneda) con un // valor

// entero (candiad de monedas de ese tipo).

// Se debe crear un cromosoma de ejemplo y cargarlo en la

// configuracion

// Cada gen tendra un valor maximo y minimo que debe setearse. //

Gene[] sampleGenes = new Gene[6];


© Universidad Internacional de La Rioja (UNIR)

sampleGenes[0] = new IntegerGene(conf, 0,


Math.round(CambioMinimoFuncionAptitud.MAX_M0WT0/100)); // Moneda 1
dolarsampleGenes[1] = new IntegerGene(conf, 0, 10); // Moneda 50 centavos
sampleGenes[2] = new IntegerGene(conf, 0, 10); // Moneda 25 centavos
sampleGenes[3] = new IntegerGene(conf, 0, 10); // Moneda 10 centavos
sampleGenes[4] = new IntegerGene(conf, 0, 10); // Moneda 5 centavos
sampleGenes[5] = new IntegerGene(conf, 0, 10); // Moneda 1 centavo
24
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

IChromosome sampleChromosome = new Chromosome(conf, sampleGenes);


conf.setSampleChromosome(sampleChromosome);

Es importante tener en cuenta los valores máximos y mínimos ya que, si se cargan mal, podría
eliminarmuchas soluciones que tal vez sean las mejores o si son muy amplios costara más tiempo
de procesamiento llegar a soluciones óptimas.

Se puede configurar el tamaño que tendrá la población (Cantidad de cromosomas de una generación)

conf.setPopulationSize(200);

Para poder evolucionar se necesita una población inicial. El framework permite cargarla de un
xmlpero lo mejor en este caso es indicarle que genere una población inicial aleatoria. Poblacion
= Genotype.randomInitialGenotype(conf);

El método envolve evoluciona una generación. Se lo llama una cierta cantidad de veces con un loop
para que realice cierta cantidad de evoluciones.

Pobl acion,evolve();

El método guardar población creado para este manual guarda todos los datos de la población
en unxml llamado PoblacionCaminoMinimo.xml para demostrar como

Trabaja el Framework con las poblaciones y los xml. Para más detalle ver el código fuente del anexo.

guardarPoblacion(Poblacion);
© Universidad Internacional de La Rioja (UNIR)

De esta forma se obtiene el cromosoma más apto de la población.

IChromosome cromosomaMasApto = Poblacion.getFittestChromosome();

25
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

Función Aptitud

La clase que implementará la función aptitud debe heredar de FitnessFunction y


redefinir elmétodo

public double evaluate(IChromosome cromosoma)

Este método le permite al framework determinar que cromosoma es más apto que otro. El
valordevuelto debe ser un double positivo.

Por defecto, se entiende que un valor más alto devuelto corresponde a un cromosoma más
aptopero esto puede no ser así, depende del evaluador que se haya utilizado. En el ejemplo
se tieneen cuenta esto antes de devolver el valor de aptitud.
© Universidad Internacional de La Rioja (UNIR)

26
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

ANEXO I: CÓDIGO FUENTE CAMBIO MÍNIMO

package practica1;

import java.io.File;

import
org.jgap.Chromosome;
import
org.jgap.Configuration;
import
org.jgap.FitnessFunction;
import org.jgap.Gene;
import org.jgap.Genotype;
import
org.jgap.IChromosome;
import
org.jgap.data.DataTreeBuilder;
import
org.jgap.data.IDataCreators;
import
org.jgap.impl.DefaultConfiguration;
import org.jgap.impl.IntegerGene;
import
org.jgap.xml.XMLDocumentBuilder;
import org.jgap.xml.XMLManager;
import org.w3c.dom.Document;
© Universidad Internacional de La Rioja (UNIR)

/**

* En este ejemplo se muestra como resolver un problema clasico de algoritmos


* genéticos utilizando el framework JGAP. El problema consiste en lograr juntar
* el monto de dinero ingresado a la aplicacion por parametro con la menor
* cantidad de monedas posibles. Para resolver el problema nos basamos en la
* moneda de la Republica Argentina(Se adapto para trabajarlo en Euros aumentando)
* la moneda de 2 euros, cambiando la de 25 por 20 y agregando la de 2 centimos

27
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

* Moneda de 1 euro ( equivale a 100 centimos) Moneda de 50 Centimos Moneda de 20 Centimos


* Moneda de 10 Centimos Moneda de 5 Centimos Moneda de 2 Centimos Moneda de 1 Centimo
*

* @author Gabriel Veloso


* @author Ruben Arce
* @since 1.0
*/

public class CambioMinimo {

/**

* The total number of times we'll let the population evolve. */

private static final int MAX_EVOLUCIONES_PERMITIDAS = 2200;

/**

* Calcula utilizando algoritmos geneticos la solución al problema y la


* imprime por pantalla
*

* @param Monto
* Monto que se desea descomponer en la menor cantidad de monedas
* posibles
* @throws Exception
*

* @author
* @author
* @since 1.0
© Universidad Internacional de La Rioja (UNIR)

*/

public static void calcularCambioMinimo(int Monto)throws Exception {

// Se crea una configuracion con valores predeterminados.

// Configuration conf = new DefaultConfiguration();


// Se indica en la configuracion que el elemento mas apto siempre pase a

// la proxima generacion

28
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

// conf.setPreservFittestIndividual(true);

// Se Crea la funcion de aptitud y se setea en la configuracion // ----

FitnessFunction myFunc = new


CambioMinimoFuncionAptitud(Monto);
conf.setFitnessFunction(myFunc);

// Ahora se debe indicar a la configuracion como seran los cromosomas: en


// estecaso tendran 8 genes (uno para cada tipo de moneda) con un valor //
entero (cantidad de monedas de ese tipo).

// Se debe crear un cromosoma de ejemplo y cargarlo en la configuracion //


Cadagen tendra un valor maximo y minimo que debe setearse. // -------------
------------

Gene[] sampleGenes = new Gene[6];

sampleGenes[0] = new IntegerGene(conf, 0,

Math.round(CambioMinimoFuncionAptitud.MAX_MONTO/100)); // Moneda 1 dolar

sampleGenes[1] = new IntegerGene(conf, 0, 10); // Moneda 50 centavos


sampleGenes[2] = new IntegerGene(conf, 0, 10); // Moneda 25 centavos
sampleGenes[3] = new IntegerGene(conf, 0, 10); // Moneda 10 centavos
new IntegerGene(conf, 0, 10); // Moneda 5 centavos
sampleGenes[5] = new IntegerGene(conf, 0, 10); //
s
Moneda 1 centavo IChromosomesampleChromosome =
a
new Chromosome(conf, sampleGenes);
m
conf.setSampleChromosome(sampleChromosome);
p
l // Por ultimo se debe indicar el tamaño de la poblacion en la

e // configuracion
G
//
e
© Universidad Internacional de La Rioja (UNIR)

conf.setPopulationSize(
n
e 200);

s Genotype Poblacion;

[ // El framework permite obtener la poblacion inicial de archivos xml


4
// pero para este caso particular resulta mejor crear una poblacion
]
= // aleatoria, para ello se utiliza el metodo randomInitialGenotype que

29
Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

/ Poblacion = Genotype.randomInitialGenotype(conf);
/
// La Poblacion debe evolucionar para obtener resultados mas aptos // ------
d
e
long TiempoComienzo = System.currentTimeMillis();
v
u for (int i = 0; i < MAX_EVOLUCIONES_PERMITIDAS; i++) {
e Poblacion.evolve();
l
v
e
l
ms");
a
}
p
o long TiempoFin = System.currentTimeMillis();
b
System.out.println("Tiempo total de evolucion: " + (TiempoFin - TiempoComienzo) + "
l
a
guardarPoblacion(Poblacion);
c
i // Una vez que la poblacion evoluciono es necesario obtener el cromosoma
o
// mas apto para mostrarlo como solucion al problema planteado para ello
n
// se utiliza el metodo getFittestChromosome
r
a IChromosome cromosomaMasApto = Poblacion.getFittestChromosome();
n
System.out.println("El cromosoma mas apto encontrado tiene un valor de aptitud de: " +
d
o
m
© Universidad Internacional de La Rioja (UNIR)

c
r
e
a
d
a

Actividades 30
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

cromosomaMasApto.getFitnessValue());

System.out.println("Y esta formado por la siguiente distribucion de


monedas: ");System.out.println("\t" +

CambioMinimoFuncionAptitud.getNumeroDeComendasDeGen(cromosomaMasApto, 0) + " Moneda 1


dolar");System.out.println("\t" +
CambioMinimoFuncionAptitud.getNumeroDeComendasDeGen(cromosomaMasApto, 1) + "
Moneda50 centavos");

System.out.println("\t" +
CambioMinimoFuncionAptitud.getNumeroDeComendasDeGen(cromosomaMasApto, 2) + "
Moneda25 centavos");
System.out.println("\t" +
CambioMinimoFuncionAptitud.getNumeroDeComendasDeGen(cromosomaMasApto, 3) + "
Moneda10 centavos");

System.out.println("\t" +

CambioMinimoFuncionAptitud.getNumeroDeComendasDeGen(cromosomaMasApto, 4) + "
Moneda 5
centavos");
System.out.println("\t" +
CambioMinimoFuncionAptitud.getNumeroDeComendasDeGen(cromosomaMasApto, 5) + "
Moneda 1centavo");
System.out.println("Para un total de "+
CambioMinimoFuncionAptitud.montoCambioMoneda(cromosomaMasApto) + " centimos en " +
CambioMinimoFuncionAptitud.getNumeroTotalMonedas(cromosomaMasApto) + " monedas.");
}

/**

* Método principal: Recibe el monto en dinero por parámetro para determinar


* la cantidad minima de monedas necesarias para formarlo
*

* @param args

Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

* Monto de dinero
* @throws Exception
*

* @author
* @author
* @since 1.0
*/

public static void main(String[] args) throws Exception {


intamount = 353;
try {

valido");

//amount = Integer.parseInt(args[0]);

} catch (NumberFormatException e) {

System.out.println("El (Monto de dinero) debe ser un numero entero

System.exit(1);

if (amount < 1 || amount >= CambioMinimoFuncionAptitud.MAX_MONTO)


{System.out.println("El monto de dinero debe estar entre 1 y "+
(CambioMinimoFuncionAptitud.MAX_MONTO - 1)+
".");

} else {

calcularCambioMinimo(amount);

Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

//

// Este metodo permite guardar en un xml la ultima poblacion calculada

//

public static void guardarPoblacion(Genotype Poblacion) throws


Exception { DataTreeBuilder builder =
DataTreeBuilder.getInstance();
IDataCreators doc2 = builder.representGenotypeAsDocument(Poblacion);

// create XML document from generated tree XMLDocumentBuilder docbuilder


= new XMLDocumentBuilder(); Document xmlDoc = (Document)
docbuilder.buildDocument(doc2); XMLManager.writeFile(xmlDoc, new
File("PoblacionCambioMinimo.xml"));

package practica1;

import org.jgap.*;

public class CambioMinimoFuncionAptitud extends


FitnessFunction{private final int montoObjetivo;

// Maximo monto posible 1000 Centimos = 10


Eurospublic static final int MAX_MONTO = 1000;
// Maxima cantidad de monedas posibles. Es igual al Monto maximo en

// centimos, ya que si se utilizan monedas de un centimo se llegaria al

// monton con la mayor cantidad posible de monedas

public static final int MAX_CANT_MONEDAS = MAX_MONTO;

Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

// El constructor de la funcion de aptitud debe recibir el monto objetivo

// del problema y almacenarlo en un atributo. Si el monto es invalido arroja

// una excepcion

public CambioMinimoFuncionAptitud(int monto) {

if (monto < 1 || monto >= MAX_MONTO) {

throw new IllegalArgumentException("El monto debe ser un numero entre 1


y + "centimos");

montoObjetivo = monto;

1);

* El metodo evaluate es el metodo que se debe sobrecargar para que devuelva


* el valor de aptitud asociado al cromosoma que se recibe por parametro.
*

* @param cromosoma
* El cromosoma a evaluar

* @return El valor de aptitud de ese cromosoma


* @author Gabriel Veloso, Ruben Arce
*/

public double evaluate(IChromosome cromosoma) {

// Se debe tener en cuenta el evaluador que se esta usando. El evaluador

// estandar le asigna un valor mas apto a los valores mas altos de

// aptitud. Tambien hay otros evaluadores que asignan mejor aptitud a

// los valores mas bajos.

// Es por esto que se chequea si 2 es mas apto que 1. Si esto es asi

Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

// entonces el valor mas apto sera el mayor y el menos apto el 0

boolean evaluadorEstandard = cromosoma.getConfiguration().getFitnessEvaluator().isFitter(2,

int montoCambioMonedas = montoCambioMoneda(cromosoma); int


totalMonedas = getNumeroTotalMonedas(cromosoma);
int diferenciaMonto = Math.abs(montoObjetivo - montoCambioMonedas);

// El primer paso es asignar la menor aptitud a aquellos cromosomas cuyo

// monto no sea el monto objetivo. Es decir una descomposicion en

// monedas que no sea del monto ingresado if


(evaluadorEstandard) {

if (diferenciaMonto != 0)

return 0.0d;

} else {

if (diferenciaMonto != 0)

return MAX_CANT_MONEDAS;

// luego se debe asignar mas aptitud a aquellos cromosomas que posean

/ menor cantidad de
monedas. if
(evaluadorEstandard) {
// Se debe asegurar devolver un valor de aptitud positivo siempre.

// Si el valor es negativo se devuelve MAX_CANT_MONEDAS ( elemento

// menos apto )

return Math.max(0.0d, MAX_CANT_MONEDAS - totalMonedas);

} else {

Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

// Se debe asgurar devolver un valor de aptitud positivo siempre.

// Si el valor es negativo se devuelve 0 ( elemento menos apto )


returnMath.max(0.0d, totalMonedas);
}

/**

* Calcula el monto total que suman todas las monedas de un cromosoma


*

* @param cromosoma
* El cromosoma a evaluar
* @return Retorna el monto en centimos compuesto por la suma de las monedas
* de ese cromosoma
*

* @author Gabriel Veloso, Ruben Arce

*/

public static int montoCambioMoneda(IChromosome cromosoma) {


int Moneda1Dolar = getNumeroDeComendasDeGen(cromosoma,
0);

int Moneda50Centimos = getNumeroDeComendasDeGen(cromosoma, 1); int


Moneda25Centimos = getNumeroDeComendasDeGen(cromosoma, 2); int
Moneda10Centimos = getNumeroDeComendasDeGen(cromosoma, 3);
int Moneda5Centimos = getNumeroDeComendasDeGen(cromosoma, 4); int
Moneda1Centimo = getNumeroDeComendasDeGen(cromosoma, 5);

return (Moneda1Dolar * 100) + (Moneda50Centimos * 50) + (Moneda25Centimos *

25) + (Moneda10Centimos * 10) + (Moneda5Centimos * 5) + Moneda1Centimo;

/**

* Calcula la cantidad de monedas de determinado tipo (gen) de un cromosoma

Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

* Ejemplo. Cantidad de monedas de 20 centimos de es cromosoma


*

* @param cromosoma
* El cromosoma a evaluar
* @param numeroGen
* El numero gen (tipo de moneda) de que se desea averiguar la
* cantidad
* @return Devuelve la cantidad de monedas de ese tipo de ese cromosoma
*

* @author Gabriel Veloso, Ruben Arce


*/

public static int getNumeroDeComendasDeGen(IChromosome cromosoma,int numeroGen)

{ Integer numMonedas = (Integer)

cromosoma.getGene(numeroGen).getAllele();

return numMonedas.intValue();

/**

* Calcula el total de monedas que tiene esa solucion. Este valor se utiliza
* para calcular la aptitud del cromosoma ya que el objetivo es minimizar la
* cantidad de monedas de la solucion
*

* @param cromosoma
* El cromosoma a evaluar
* @return El total de monedas que tiene esa solucion
*

Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

* @author Gabriel Veloso, Ruben Arce


*/

public static int getNumeroTotalMonedas(IChromosome cromosoma) {


inttotalMonedas = 0;
int numberOfGenes =
cromosoma.size(); for (int i = 0; i <
numberOfGenes; i++) {
totalMonedas += getNumeroDeComendasDeGen(cromosoma, i);

return totalMonedas;

ANEXO II: EJEMPLO DE EJECUCIONES Y RESULTADOS

Para 90 centavos

Tiempo total de evolución: 18375 ms

El cromosoma más apto encontrado tiene un valor de aptitud de: 996.0

Y está formado por la siguiente distribución de


monedas:

0 Moneda 1 dólar
1 Moneda 50 centavos

1 Moneda 25 centavos

1 Moneda 10 centavos

1 Moneda 5 centavos

0 Moneda 1 centavo

Para un total de 90 centavos en 4 monedas.

Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

Para 125 Centavos

Tiempo total de evolución: 15735 ms

El cromosoma más apto encontrado tiene un valor de aptitud de: 998.0

Y está formado por la siguiente distribución de


monedas:

1 Moneda 1 dólar
0 Moneda 50 centavos
1 Moneda 25 centavos

0 Moneda 10 centavos
1 Moneda 5 centavos
0 Moneda 1 centavo

Para un total de 125 centavos en 2 monedas.

Para 87 Centavos

Tiempo total de evolución: 12539 ms

El cromosoma más apto encontrado tiene un valor de aptitud de: 990.0

Y está formado por la siguiente distribución de


monedas:

0 Moneda 1 dólar
1 Moneda 50 centavos
1 Moneda 25 centavos
1 Moneda 10 centavos

0 Moneda 5 centavos

2 Moneda 1 centavo

Para un total de 87 centavos en 5 monedas.

Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

ANEXO III: LICENCIA

Este fragmento esta publicado en la página principal de JGAP donde explica que es un software
libre. Pero si se quiere utilizar de forma comercial es necesario donar al menos 20 euros a JGAP.

JGAP is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser
Public License as published by the Free Software Foundation; either version 2.1 of the License,
or (at your option) any later version. Inste|ad, you could choose to use the Mozilla Public License
to use JGAP in commercial applications without the need of publishing your source code or make
it reverse engineerable (as is required with the GNU License). For using the MPL you have to
donateat least 20 Euros to JGAP. Maybe you would like to browser further information about
using JGAPcommercially.

JGAP is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the above mentioned GNU Lesser Public License and the
Mozilla Public License for more details. But we offer really a lot of unit tests which help assure
a very high probability for a correct piece of software!

Bibliografía:

VELOSO, Gabriel Alejandro. ARCE, Rubén, Algoritmos Genéticos JGAP. 2009.


http://eqaula.org/eva/mod/resource/view.php?inpopup=true&id=9541 [disponible en línea].

Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

▸ Rúbrica

Programación Puntuación
Peso
de algoritmos Descripción máxima
%
genéticos (puntos)
Se presenta un resumen que refleja
Criterio 1 4
correctamente la comprensión del 50%
artículo.
El código compilado correctamente tras
Criterio 2 3
las modificaciones realizadas por los 20%
estudiantes.
El documento presentado contiene las
Criterio 3 respuestas a lo que se pide en la actividad 3 30%
y cumple la forma exigida.
10 100 %

▸ Extensión máxima y forma: 5 páginas, Georgia 11, interlineado 1.5, texto justificado.

Conclusión

Los Algoritmos Genéticos son una de las mejores opciones para la resolución de problemas, con la
emulación del comportamiento de los seres vivos nos permite desarrollar nuevas soluciones a
problemas que no pueden ser resueltos con técnicas convencionales.

La resolución de problemas usando técnicas no convencionales y con el incremento de manejo de


grandes cantidades de información los Algoritmos Genéticos, permite encontrar datos de información
que no son fáciles de encontrar a simple vista, el complemento de la minería de datos y de los datos
estadísticos, capaz de analizar patrones, encontrando comportamientos poco susceptibles, ayudando
a la detección de enfermedades; por ejemplo, el cáncer.

Los algoritmos constituyen una gran herramienta que nos permiten encontrar soluciones con
un alto grado de aceptación, al buscar la mejor de todas las soluciones que encuentra, su

Actividades
Asignatura Datos del alumno Fecha
Computación Apellidos: Cañas Garcia
02/09/2022
Bioinspirada Nombre: Cristian Alberto

implementación no es compleja y se pueden llevar a otro tipo de campos, lo cual ayudaría a los usuarios
en la solución de sus necesidades. Su implementación en la aeronáutica, ingeniería del sonido,
inteligencia artificial, medicina, la bolsa de valores, trazado de rutas, sistemas de inscripción en las
escuelas y el ejército. Los Algoritmos Genéticos, han demostrado ser una forma efectiva de resolución
de problemas de fácil implementación para le desarrollador, no tienen una limitante que diga hasta
dónde puede llegar la gran capacidad del campo de implementación de dicha técnica para buscar
la solución a los problemas.

Actividades

También podría gustarte