Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Algoritmos Geneticos2 PDF
Algoritmos Geneticos2 PDF
ResumenEl objetivo de este trabajo es el diseo y la implementacin de un algoritmo gentico sobre un dispositivo de lgica
programable, concretamente un dispositivo FPGA. Primero se resolver un problema mediante un algoritmo gentico utilizando el
software Matlab para estudiar dicho algoritmo, luego se disear un sistema electrnico digital que realice las funciones de este
algoritmo para finalmente implementarlo sobre una FPGA.
I. INTRODUCCIN
P ARA hablar de algoritmos genticos tenemos que hablar antes de inteligencia computacional o soft computing, ya que la
computacin evolutiva (dentro de la cual se comprenden los algoritmos genticos) es uno de los campos constituyentes de
esta nueva disciplina. El soft computing es una tcnica innovadora para construir sistemas inteligentes. A diferencia de la
computacin convencional, tolera imprecisiones, incertidumbres y aproximaciones. El objetivo del soft computing es
precisamente conseguir soluciones aceptables, robustas y de bajo coste tolerando lo mximo posible las imprecisiones,
incertidumbres y aproximaciones sobre el problema a resolver.
Los principales campos constituyentes del soft computing son la lgica fuzzy, la computacin neuronal (redes neuronales), la
computacin evolutiva (algoritmos genticos), el aprendizaje de las mquinas y el razonamiento probabilstico, con las ms
recientes incorporaciones de la teora del caos y partes de la teora del aprendizaje. Es importante remarcar que el soft computing
no es una disputa de eficacia entre todos estos campos. Al contrario, se trata de combinar las distintas metodologas de estos
campos para conseguir el sistema ms cercano posible que imite la inteligencia humana en una tarea especfica.
Los algoritmos genticos son algoritmos de bsqueda de propsito general que se basan en el modo en que la naturaleza
consigue hacer que sus especies estn cada vez ms adaptadas a su entorno, es decir, en la evolucin. El ao 1975 se toma como
punto de referencia del origen de los estudios sobre algoritmos genticos y, desde entonces hasta hoy en da, han ido mejorando
y han sido utilizados para resolver problemas de los mbitos ms diversos.
En este trabajo se presenta un diseo hardware de un algoritmo gentico. Primero se explicar en qu consisten estos
algoritmos, luego se ver un ejemplo y por ltimo se describir el diseo realizado.[1]
110|01 110|11
+ =>
010|11 010|01
Ejemplo 1: cruce
Despus de realizarse todos los cruces tendremos un nuevo grupo de individuos que poseern nuevas caractersticas con
respecto a los anteriores.
E. Mutacin
En la naturaleza se dan cambios en las especies que no se deben a los genes heredados de sus antepasados, sino a las
mutaciones que se producen por azar en su cadena gentica y pueden aportar valores positivos o negativos en la adaptacin de la
especie a su entorno. Esto mismo se realiza en los algoritmos genticos.
Se elige al azar cuntos y cules de los individuos van a mutar (un individuo no puede mutar ms de una vez), se elige que gen
de su cadena mutar y se cambia ese gen por su complementado, como se ve a continuacin:
Ejemplo 2: mutacin
Una vez realizadas las mutaciones, ya tendremos la nueva generacin, que, previsiblemente tendr mejores caractersticas de
adaptacin al problema que la anterior, es decir, mejores funciones de fitness.
F. Condicin de parada
Se deben realizar numerosos ciclos de seleccin, cruce y mutacin para mejorar suficientemente la poblacin de individuos. El
algoritmo gentico debe finalizar cuando considere que la mejor solucin encontrada hasta ese momento es bastante buena o que
no va a poder encontrar una mejor. Para eso se define una condicin de parada.
La condicin de parada ms sencilla es hacer que el algoritmo pare siempre despus de haber hecho un nmero de ciclos
predeterminado. Otra posible condicin de parada es que la funcin de fitness alcance un valor determinado que se considere que
es suficientemente bueno para ese problema.
La condicin que se utilizar en este trabajo como condicin de parada es una mezcla de ambas. Se guardar el individuo que
tenga el valor de fitness ms alto de la generacin inicial. A partir de ah, si ese valor no es superado en veinte ciclos, el
algoritmo parar. Siempre que el valor de fitness del individuo sea superado, se guardar el nuevo mejor individuo y se volver a
contar hasta veinte ciclos del algoritmo.
La solucin al problema ser el individuo que est guardado en el momento que pare el algoritmo.
A continuacin se muestra el diagrama de flujo del algoritmo:
Inicializacin
Clculo de
fitness
Evaluar s
parada Fin
no
Seleccin
Cruce
Mutacin
La funcin del controlador consiste en ejercer una fuerza sobre el carro para acercar la posicin del pndulo otra vez a la
vertical. Esta fuerza ser funcin de las variables de estado del sistema, es decir, de la posicin x y la velocidad dx/dt del carro y
del ngulo y la velocidad angular d/dt del pndulo. El diagrama de bloques es el siguiente:
F
Controlador Pndulo
La accin de control que se realiza es muy sencilla: solamente ejercer una fuerza F (a la derecha) o F (a la izquierda) sobre
el carro. Las variables de estado del sistema se discretizan por rangos y, de este modo, el controlador es una tabla de valores F y
F para todas las combinaciones de variables de estado.
La posicin x del carro se separa en tres rangos para discretizarlo, al igual que la velocidad dx/dt. El ngulo del pndulo se
separa en seis rangos y la velocidad angular d/dt en tres. A continuacin se muestran los rangos que se han elegido para hacer la
discretizacin:
x: (-, -2), [-2, 2], (2, )
dx/dt: (-, -0.3), [-0.3, 0.3], (0.3, )
: (-/2, -/3), [-/3, -/6), [-/6, 0), (0, /6], (/6, /3], (/3, /2)
d/dt: (-, -0.3), [-0.3, 0.3], (0.3, )
Las distintas combinaciones que pueden llegar al controlador son: 3363=162. Por lo tanto el controlador es una tabla de 162
posiciones. Los posibles controladores son los individuos del algoritmo gentico, por lo tanto los individuos tienen 162 genes.
Cada gen es un 1 (F) o un 0 (-F). Se utiliza una poblacin de 50 individuos para resolver el problema mediante un algoritmo
gentico.
B. Funciones del algoritmo gentico
Como ya se ha dicho anteriormente, todas las funciones de los algoritmos genticos excepto la funcin de fitness son
independientes al problema que se va a solucionar, salvo por el tamao de la poblacin y el nmero de genes de cada individuo.
Por lo tanto para escribir las funciones de generacin inicial, seleccin, cruce y mutacin no se tiene en cuenta el problema del
pndulo invertido.
- Generacin inicial: La funcin que crea la generacin inicial es la ms sencilla de todas, ya que slo se trata de generar una
matriz con nmeros discretos aleatorios entre 0 y 1, donde el nmero de filas es el tamao de la poblacin y el nmero de
columnas la longitud de cada individuo. En nuestro ejemplo la matriz es de 50x162.
- Seleccin: Antes de hacer la seleccin se deben tener la generacin de individuos actual y sus respectivas funciones de
fitness guardadas en dos matrices. La seleccin se realiza en varios pasos. Primero se suman todas las funciones de fitness
fi de los individuos actuales para formar un vector en el que se guarda fi/suma, que es la probabilidad de ser seleccionado
de cada individuo. A partir de este vector se forma otro en el que en cada posicin del vector se suma la probabilidad de
esa posicin con todas las anteriores. De este modo, en la primera posicin queda la probabilidad del primer individuo, en
la segunda la suma de las probabilidades de los dos primeros, y as hasta que en la ltima posicin aparece la suma de
todas las probabilidades que, lgicamente, es 1. Una vez se tenga este vector se crea un vector del tamao de la poblacin
con nmeros reales aleatorios entre 0 y 1. Se comprueba en qu rango del anterior encaja cada nmero de este vector y se
selecciona el individuo al que pertenece ese rango. Es fcil ver que el tamao del rango correspondiente a cada individuo
es proporcional a su funcin de fitness.
- Cruce: Para hacer el cruce de los individuos seleccionados se sigue al pie de la letra lo anteriormente explicado sobre el
cruce. Primero se elige el nmero de cruces que se van a hacer, que ser el nmero de ciclos que har el algoritmo. Una
vez dentro del ciclo se procede a elegir los individuos. Se utiliza un flag para cada individuo que indica si ya ha sido
elegido anteriormente o no, para evitar que el mismo individuo se cruce ms de una vez. Si se intenta elegir un individuo
con el flag a 1, automticamente se elegir el siguiente individuo. La eleccin de los dos individuos que se van a cruzar
tampoco puede ser simultanea por la misma razn, para evitar que un individuo se cruce consigo mismo. As que se elige
primero un individuo y luego el otro, y se ponen sus flags a 1. Se elige tambin en qu punto se van a cruzar mediante un
nmero aleatorio, y se hace el intercambio de genes.
- Mutacin: La mutacin es muy similar al cruce, con la diferencia de que en este caso slo hay que elegir un individuo y
cambiarle un solo gen. Para evitar que se elija el mismo individuo ms de una vez se utiliza el mismo sistema de flags.
C. Clculo de la funcin de fitness
Como ya se ha dicho antes, la funcin de fitness es la funcin que mide cunto se acerca una posible solucin a la solucin real
del problema. En este caso del pndulo invertido se debe medir la bondad de una solucin examinando cunto aguantara el
pndulo sin caerse con ese controlador en el sistema.
Lo primero que se tiene que hacer es conseguir las ecuaciones del sistema del pndulo invertido y linealizarlos en torno al
punto de equilibrio para conseguir las ecuaciones de estado del sistema. Las matrices de estado son las siguientes:
&0 1 0 0# & 0 #
A = $$ 0 0 m 2 g l 2 !
0! B = $$ I + ml 2 !
!
2
$ I ( M + m) + M ml 2 ! $ I ( M + m) + M ml !
$0 0 0 1! $ 0 !
$ m g l ( M + m) ! $ ml !
$0 0 0! $ 2 !
% I ( M + m) + M ml 2 " % I ( M + m) + M ml "
Donde M es la masa del carro, m la masa del pndulo, l la longitud del pndulo, I el momento de inercia del pndulo y g la
fuerza de la gravedad.
Por otro lado, se tiene que hacer una funcin que discretice las variables de estado para que en funcin de stos el controlador
le aplique una fuerza F a la derecha o a la izquierda. El algoritmo para calcular la funcin de fitness deber resolver dos sistemas
de ecuaciones diferenciales distintas dependiendo de si la fuerza que aplicamos al carro es a la derecha o a la izquierda.
Si el controlador devuelve 1 => x& = A x + BF
Si el controlador devuelve 0 => x& = A x + B(! F )
Despus de tener la discretizacin y las ecuaciones definidas, se debe hacer una simulacin de cmo responde el pndulo ante
un controlador dado. Para ello se define que el periodo del controlador ser de 0.1 segundos, es decir, cada 0.1 segundos analiza
las variables de estado discretizadas y devuelve la fuerza que ejerce sobre el carro. La simulacin parte siempre de la posicin
vertical. Se discretizan las condiciones iniciales, se busca la respuesta del controlador y se resuelve el sistema de ecuaciones
pertinente durante 0.1 segundos. Despus se coge el ltimo resultado de la simulacin y, si el ngulo no es menor que /2 ni
mayor que /2, se coge este ltimo resultado como condicin inicial, se discretiza, se busca la respuesta del controlador y se
vuelve a resolver el sistema de ecuaciones diferenciales pertinente durante un periodo. Se procede de esta forma hasta que el
ngulo salga del rango establecido y en ese momento se mide el tiempo que ha tardado el pndulo en caer (la cantidad de
simulaciones que se han hecho por 0.1). Este tiempo ser el valor de fitness para un controlador.
La funcin que tenemos que hacer debe calcular los valores de fitness para todos los individuos de la generacin actual, as que
debe repetir ese procedimiento 50 veces, uno para cada individuo.
D. Solucin del problema
La solucin global del problema se obtiene aplicando al algoritmo gentico la condicin de parada que se ha explicado en el
segundo apartado.
As pues, primero se obtiene una generacin inicial y despus se entrar en el ciclo donde se calcula primero la funcin de
fitness, luego se evala la condicin de parada y, siempre que no se cumpla, se procede a la seleccin, el cruce y la mutacin para
obtener una generacin de controladores mejor.
En el siguiente grfico se observa cmo el mejor individuo de la generacin va mejorando hasta que llega un momento en el
que ya es difcil mejorar. El resultado del algoritmo ser el individuo que haya dado la mejor funcin de fitness, que en este caso
ha sido 7.3 segundos.
Fig. 4: Grfica de amejoramiento del valor de fitness del mejor individuo a lo largo de generaciones
Mdulo
Controlador seleccin
general RAM
fitness
Mdulo
cruce
Mdulo
mutacin
Mdulo
Datos a RAM individuos An+1An An-1An-2An-3 Cruce An+1AnBn-1Bn-2Bn-3
Individuo
cruce we Bn+1BnBn-1Bn-2Bn-3 Bn+1BnAn-1An-2A n-3
El mdulo de cruce tiene un contador que cuenta hacia atrs y al que se le puede cargar un valor inicial. El valor que se le carga
proviene del RNG y es el nmero de cruces que se van a realizar. A partir de aqu se entra en un ciclo donde primero se
selecciona un individuo, luego el otro, despus se hace el cruce, y, tras escribir los dos nuevos individuos en memoria, se
decrementa el contador. La eleccin de un individuo no es sencilla, ya que el mdulo se ha de asegurar de que ese individuo no
haya sido cruzado anteriormente. Para ello se utilizan los flags de la memoria de individuos. En cada eleccin de un individuo,
despus de coger una direccin aleatoria del RNG, el mdulo entra en un ciclo donde incrementa en uno el valor de la direccin
de memoria en caso de que el flag de la direccin actual est a 1. Despus de elegir el primer individuo que se va a cruzar pone
su flag en memoria a 1 para que en la eleccin del segundo individuo no se pueda repetir el resultado. Una vez que se eligen los
dos individuos, se meten a un bloque junto con un nmero aleatorio. Lo nico que hace este bloque es separar los buses en el
punto indicado por el nmero aleatorio y enlazar luego las partes correspondientes a individuos diferentes. Despus de esto se
escriben los nuevos individuos en las direcciones de memoria correspondientes a los antiguos ponindoles el flag a 1.
Cuando todos los cruces se hayan realizado el contador llega a 0. En ese momento el mdulo pasa a otro ciclo donde recorre
toda la memoria de individuos poniendo los flags a 0.
F. Mdulo de mutacin
El mdulo de mutacin es muy parecido al de cruce, con las mismas entradas y salidas.
sig
Nmero de RNG
Mdulo
Datos a RAM individuos An+2An+1A nAn-1An-2 Mutacin An+2An+1 nAn-1An-2
Individuo
mutacin we
Este mdulo tambin tiene un contador en el que se cargar el nmero de mutaciones que se van a realizar. La eleccin de
individuos se hace tambin de forma similar al controlador de cruce, utilizando los flags, con la nica diferencia de que, como
slo hay que elegir un individuo, el flag se pone 1 nicamente despus de haberse realizado la mutacin. Tras haberse hecho
todas las mutaciones, el mdulo entra en un bloque para reponer los flags a 0 exactamente igual que el del cruce.
G. Controlador general
El controlador general es el que controla la ejecucin global del algoritmo, por tanto el que enva todas las seales scg a los
otros controladores y el que recibe todas las seales sig. Adems de eso debe controlar tambin los accesos a memoria de los
dems mdulos, lo cual hace enviando seales de seleccin de entrada a los multiplexores que hay en los accesos a memoria. Por
otro lado este controlador debe controlar tambin la condicin de parada, para lo cual l mismo debe acceder a las memorias a
comprobar las funciones de fitness y elegir el mejor individuo hasta el momento. A este controlador llega tambin la seal de
inicio del algoritmo y l mismo es el que debe dar la seal de finalizacin y la solucin.
Sel mux direccin individuos
Seal de inicio
Sel mux individuo
Sig generacin inicial
Sel mux direccin fitness
Sig fitness
Direccin a RAM individuos y fitness
Sig seleccin Controlador
Solucin
Sig cruce
general Scg generacin inicial
Sig mutacin
Scg fitness
Scg mutacin
clk
Finalizacin
Al recibir la seal de inicio el controlador general enva la seal de scg al controlador de generacin inicial despus de haber
actualizado convenientemente los selectores de los multiplexores. Cuando reciba la seal sig de este controlador se mete en un
bucle donde primero hace que se calculen todas las funciones de fitness. Despus comprueba si se cumple la condicin de
parada. Para ello tendr dos registros, en uno de los cuales se guarda el mejor individuo hasta el momento y en el otro su funcin
de fitness, y un contador que cuenta de veinte hacia atrs. En cada ciclo se compara el valor de fitness almacenado con todos los
de la memoria y, si hay alguno mayor, se actualizan los registros y se pone el contador a veinte. Despus de esto se contina
enviando la seal de scg al controlador de seleccin, cuando ste acabe al de cruce y cuando ste acabe al de mutacin.
Siempre entre un controlador y otro se actualizan los selectores de los multiplexores para hacer un direccionamiento apropiado a
memoria. Cuando se acabe con la mutacin se vuelve al principio del ciclo, a calcular las funciones de fitness y la seal de
finalizacin y la solucin se dan cuando el contador llega a cero.
V. EXPERIMENTOS Y SIMULACIONES
Para comprobar el buen funcionamiento del circuito diseado se intentar resolver con l un problema concreto. Para eso se
implementa en hardware una funcin de fitness. Para simplificar lo mximo posible esta implementacin, se elige un problema
muy sencillo: buscar un entero entre 0 y 31 tal que f(x) = x2 sea mxima.
Este mdulo fitness recibe como entradas, adems de las seales scg y clk, los individuos de la memoria. A partir de estos
individuos calcula el valor de fitness que les corresponde y lo escribe en la memoria de fitness, en la misma direccin de la que
ha cogido el individuo.
sig
Individuo Controlador
Datos a RAM fitness
scg fitness
we
clk
Direccin a RAM individuos y fitness
De las formas de onda que aparecen en la figura, las ms importantes son las tres inferiores. En ellas se ven la generacin a la
que ha llegado el algoritmo, el individuo que tiene almacenado en cada momento en el registro destinado a la solucin del
problema y la seal de finalizacin. Como se ve, el mejor individuo mejora a lo largo de las generaciones hasta llegar a 31, que
es la mejor solucin posible al problema. Una vez que llega a esta solucin, comprueba que no se puede conseguir una mejor
sacando hasta veinte generaciones ms de individuos, y cuando lo haya comprobado da la seal de finalizacin.
Al implementarlo sobre la FPGA anteriormente descrita, el circuito diseado tiene una frecuencia mxima de 32.55 MHz y
ocupa sobre el dispositivo el 13% de las puertas lgicas y menos del 1% de memoria.
VI. CONCLUSIONES
En este trabajo se ha hecho un estudio de los algoritmos genticos bsicos, comprobando su capacidad para buscar soluciones
a ciertos problemas. Se concluye que los algoritmos genticos pueden facilitar mucho la solucin de problemas complejos,
siendo especialmente eficaces en problemas de optimizacin. Otra de las conclusiones que se sacan de este trabajo es que para
aplicar algoritmos genticos se requieren tres cosas: un espacio de bsqueda limitado, posibilidad de definir una funcin de
fitness y posibilidad de codificar las soluciones como cadenas de genes. Tambin hay que resaltar que los algoritmos genticos
no necesitan conocimientos especficos sobre el problema que intentan resolver.
En este trabajo tambin se ha desarrollado una implementacin de un algoritmo gentico en hardware digital sobre una FPGA.
Se ha comprobado que el lenguaje VHDL, utilizado para el diseo de algunos bloques, facilita mucho el diseo de circuitos
digitales. La herramienta de diseo Quartus II nos ha permitido realizar simulaciones temporales muy precisas. Por ltimo, se ha
comprobado mediante simulacin el correcto funcionamiento del circuito.
VII. BIBLIOGRAFA
[1]Neuro-Fuzzy and Soft Computing; J.-S. R. Jang, C.-T. Sun, E. Mizutani; Prentice-Hall; 1997
[2] www.altera.com
[3] www.soft-computing.de; A definition of soft computing adapted from L. A. Zadeh
[4] www.geocities.com/rainforest; Biografa de Charles Robert Darwin
[5] fai.unne.edu.ar/biologia/evolucion; Desarrollo de la teora de la evolucin
[6] www.optimatics.com; A brief history of GA optimization
[7] www.estec.esa.nl; History of GAs
[8] Anlisis y diseo de circuitos lgicos digitales; Victor P. Nelson, H. Troy Nagle, Bill D. Carroll, J. David Irwin; Primera Edicin; Prentice-Hall
Hispanoamericana, S.A.; 1996
[9]Modern control engineering. Third edition; Katsuhiko Ogata; Prentice-Hall International; 1997