Está en la página 1de 9

Diseo e implementacin de un algoritmo

gentico sobre dispositivos de lgica


programable
Alumno: Iker Uzin Larraaga, Tutores: Javier Echanobe, Ins del Campo

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.

Palabras clavealgoritmos genticos, computacin evolutiva, diseo hardware, soft computing.

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]

II. ALGORITMOS GENTICOS

A. Algoritmos genticos bsicos


Los algoritmos genticos bsicos son los algoritmos genticos ms simples y son en los que se basan el resto de variantes. Su
funcionamiento se basa en intentar imitar la evolucin natural para buscar la mejor solucin para un problema.
Los algoritmos genticos operan sobre un grupo de posibles soluciones al que se le llama poblacin y que inicialmente es
creado aleatoriamente. A cada una de estas posibles soluciones se le llama individuo o cromosoma y se representa como una
cadena de nmeros, habitualmente bits (0 y 1). Los individuos tienen una longitud concreta y a cada uno de los nmeros que
conforman un individuo se le llama gen. Lgicamente, la poblacin que es generada al principio aleatoriamente ser una
poblacin de malas soluciones, pero precisamente se trata de que la poblacin vaya mejorando por medio de la evolucin natural
hasta conseguir buenas soluciones.
B. Funcin de fitness
La evolucin natural se basa en que las especies se vayan adaptando a su entorno. Del mismo modo, en los algoritmos
genticos, las soluciones han de ir adaptndose al problema para que, al final, tengamos una poblacin de buenas soluciones. La
funcin de fitness es la funcin que mide lo adaptado que est un individuo al problema. Esta funcin ser la que diga lo cerca
que est una posible solucin de la mejor solucin del problema: cuanto mayor sea la funcin de fitness de un individuo, ms
cerca estar de la mejor solucin.
La funcin de fitness es la nica funcin especfica de cada problema de todas las funciones que realiza un algoritmo gentico.
Es, en cierto modo, la que define el problema dentro del algoritmo gentico.
C. Seleccin de individuos
En cada generacin de individuos debe hacerse una seleccin de los individuos ms cualificados para pasar sus genes a la
siguiente generacin, al igual que ocurre con la seleccin natural. Para acercarse lo ms posible a sta ltima, la seleccin en un
algoritmo gentico se har de manera aleatoria, pero teniendo cada individuo una probabilidad de ser seleccionado proporcional
a su funcin de fitness, es decir, a la bondad de sus genes. De este modo conseguimos que en general se vayan eligiendo a los
mejores individuos, pero, al mismo tiempo, los que no son tan buenos tambin tienen posibilidades de pasar y aportar algn gen
que haga falta para formar mejores individuos en la siguiente generacin.
D. Cruce
Una vez seleccionados los individuos cuyos genes pasarn a la siguiente generacin, se procede a la formacin de sta. Para
ello primero se realizarn un nmero aleatorio de cruces (como mximo poblacin/2).
Los individuos que se vayan a cruzar tambin se debern elegir aleatoriamente, teniendo en cuenta que un mismo individuo no
puede cruzarse ms de una vez. El cruce consiste en un intercambio de genes entre dos individuos a partir de un punto que, como
casi todo, se elige aleatoriamente. A continuacin se muestra un ejemplo:

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:

1|0|101 => 1|1|101

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

Fig. 1: Diagrama de flujo del algoritmo gentico

III. PROBLEMA RESUELTO CON UN ALGORITMO G ENTICO

A. Problema del pndulo invertido


En esta parte del trabajo se resuelve un problema utilizando algoritmos genticos. De este modo se ver un ejemplo de cmo
los algoritmos genticos pueden buscar soluciones a los problemas. Este ejemplo se programar y se simular utilizando el
software Matlab.
El problema que se trata de resolver es un problema de control. Se trata de hacer un controlador que mantenga en equilibrio un
pndulo invertido. El pndulo es una barra de masa m y longitud l que se coloca encima de un carro de masa M que se mueve sin
que le afecte ningn tipo de rozamiento. El pndulo partir de la posicin vertical pero, al ser esta posicin un punto de equilibrio
inestable, caer hacia un lado haciendo que el carro se desplace en direccin opuesta.

Fig. 2: Esquema del pndulo invertido

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

Fig. 3: Diagrama de bloques del pndulo invertido

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

IV. IMPLEMENTACIN HARDWARE DE UN A LGORITMO GENTICO


En este apartado se describir el diseo que se ha hecho para la implementacin de un algoritmo gentico en hardware. Primero
se describir el dispositivo de lgica programable sobre el que se va a implementar el diseo y despus se explicar cmo se ha
realizado el propio diseo empezando desde el nivel superior para examinar luego los distintos bloques.
A. Dispositivo de lgica programable
El PLD que se va a utilizar es un dispositivo FPGA (field programmable gate array). Es de la familia APEX 20KE de Altera y
el modelo concreto es EP20K200EFC484-2X. Tiene un total de 200000 puertas lgicas. La arquitectura caracterstica de los
FPGA consiste en una matriz de celdas lgicas que se comunican entre s y con las celdas de entrada/salida a travs de cables o
canales de comunicacin.
En el caso de la familia APEX 20KE la caracterstica fundamental es que combina tres modelos de estructuras de PLDs: los
LUT (look-up tables), bloques de trminos producto y bloques de memoria embebida. Las celdas en las que se agrupan estos tres
elementos junto con una interconexin local formarn un LAB (logic array block). Los LABs estn agrupados dentro de
MegaLABs formando una estructura jerrquica, adems de estar interconectados por las interconexiones globales verticales y
horizontales. La estructura tiene tambin bloques de memoria, celdas de entrada/salida y circuitera para el manejo del reloj,
incluyendo PLLs.[2]
B. Esquema general
En esta parte del trabajo se disea un circuito digital que haga las funciones propias generales de un algoritmo gentico, es
decir, la funcin de inicializacin, la de seleccin, la de cruce y la de mutacin. Esto quiere decir que no se implementa de
momento ninguna funcin de fitness, sino que esto se deja para el siguiente apartado.
En el nivel superior del circuito se pueden distinguir tres clases de grandes bloques.
- Por un lado est el bloque generador de nmeros aleatorios (RNG). Este bloque no se disea en este trabajo dado que es un
bloque muy complejo que por s solo podra llevar mucho tiempo disearlo. Se utiliza un RNG diseado en otro trabajo
dirigido y aqu se considera como un bloque funcional al que se le pasa un valor lmite y genera nmeros aleatorios entre 0
y ese valor.
- En segundo lugar estn las memorias RAM. Debe haber dos memorias RAM en el sistema: uno para guardar los
individuos y otro para guardar los valores de fitness correspondientes. Se considera que el problema que se va a resolver
tiene una poblacin de n individuos y la longitud de los individuos es de m genes. Por lo tanto la memoria de individuos es
de n posiciones y cada palabra es de m+1 bits, puesto que el bit ms significativo de la memoria se utilizar como flag en
las funciones de cruce y mutacin. El tamao de las palabras de la memoria de fitness es de l bits, siendo l el nmero de
bits que se necesitan para representar un valor de fitness, y el nmero de posiciones de memoria es el mismo que en la de
individuos. Las memorias tienen tanto la entrada como la salida pasadas por registro y el reloj ser el mismo para los dos
casos. Adems, tienen una seal de habilitacin de escritura (we).
- Por ltimo estn los bloques ms importantes: los controladores. Hay un mdulo por cada funcin que ha de realizar el
algoritmo y, adems, un controlador general que ejecuta la funcin global. Los mdulos actan cambiando el contenido de
las memorias y el controlador general acta sobre los mdulos envindoles seales para que ejecuten sus respectivas
funciones. El controlador general tiene tres funciones importantes. La primera de ellas es la ya mencionada de enviar
seales al resto de mdulos. La segunda es controlar el acceso a memoria de stos, ya que varios de ellos necesitan acceder
a cada memoria. Para hacer esto se utilizan multiplexores en los accesos a memoria controlados por el controlador general.
La tercera funcin del controlador general es evaluar la condicin de parada en cada ciclo del algoritmo y dar por
finalizado el algoritmo en caso de que se cumpla.
Aqu se muestra un esquema de bloques de la mquina:
Mdulo
fitness

RNG Mdulo RAM


generacin individuos
inicial

Mdulo
Controlador seleccin

general RAM
fitness
Mdulo
cruce

Mdulo
mutacin

Fig. 5: Diagrama de bloques de la mquina de algoritmos genticos

C. Mdulo para la generacin inicial


Al principio del algoritmo hay que crear una generacin inicial a partir de la cual empezar a evolucionar el sistema. Esta
generacin se crea a partir de nmeros aleatorios generados en el RNG, por lo tanto el mdulo debe indicar al RNG cul es el
nmero mximo que admite para meterlo en memoria. En este caso, puesto que tenemos cinco bits, ser 31.
El mdulo debe llenar la memoria de individuos con nmeros aleatorios, as que debe dar como salida la direccin de memoria
donde va a escribir, los datos que va meter en l y la seal de habilitacin de escritura we.
sig
Nmero de RNG
Mdulo Datos a RAM individuos
generacin
inicial we
scg
Direccin a RAM individuos
clk
Max para RNG

Fig. 6: Entradas y salidas del mdulo para la generacin inicial


La seal del controlador general scg y la seal de reloj clk son seales de entrada que comparten todos los mdulos, as
como la seal de salida sig que indica al controlador general que este controlador ha finalizado su ejecucin.
El mdulo tiene un contador de 0 a 5 para ir cambiando la direccin de memoria. Primero debe poner el contador a cero para
apuntar a la primera direccin, pasa directamente el nmero procedente del RNG a la salida de datos y da la seal de we.
Despus de esto se incrementa el contador y hasta que llegue de nuevo a cero se repite la accin. En cuanto el contador haya
dado una vuelta completa se activa la seal sig.
D. Mdulo para hacer la seleccin
El mdulo de seleccin debe leer de la memoria de individuos y de la de fitness para hacer la seleccin de individuos en
funcin de su valor de fitness. Luego escribe en la memoria de individuos los individuos seleccionados. Adems, como la
seleccin es semialeatoria, debe recibir tambin nmeros aleatorios del RNG.
sig
Nmero de RNG
Nmero de RNG Reg. Acum Fitness
Individuo Datos a RAM individuos
Mdulo
Fitness we
seleccin
<
scg Direccin a RAM individuos y fitness

clk Max para RNG


t

Fig. 7: Entradas y salidas del mdulo de seleccin y el bloque de seleccin


Para hacer la probabilidad de seleccin proporcional a la funcin de fitness se utiliza un bloque formado por un registro, un
acumulador y un comparador. En el registro se mete un nmero aleatorio entre 0 y la suma de todos los fitness de la memoria. En
el acumulador se van metiendo los fitness uno por uno y el comparador devuelve 1 en el momento en que el valor del registro sea
menor que el del acumulador. En ese momento se selecciona el individuo al que corresponde el ltimo valor de fitness
introducido en el acumulador.
El mdulo de seleccin consta de tres partes. En la primera se hace la suma de todos los valores fitness de la memoria RAM de
fitness para pasar el resultado como valor lmite al RNG. El mtodo para recorrer la memoria es igual que en el controlador de
inicializacin. En la segunda parte se hace la seleccin de individuos como se ha explicado anteriormente, pero repitiendo la
accin seis veces. Estos individuos seleccionados se guardan en una memoria interna del controlador, ya que no se puede ir
sobrescribiendo la memoria principal mientras se hace la seleccin. La tercera parte del controlador recorre las memorias interna
y principal para copiar lo que hay en la primera en la segunda.
E. Mdulo de cruce
El mdulo de cruce lee de la memoria de individuos, hace el cruce y luego vuelve a escribir en la misma memoria de la que ha
ledo. El nmero de cruces, los individuos a cruzar y el punto donde se cruzan son aleatorios, as que el controlador tambin debe
coger los nmeros que le proporciona el RNG en un rango que no ser el mismo en todo el controlador, sino que variar.
sig
Nmero de RNG

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

scg Direccin a RAM individuos


n
clk Max para RNG

Fig. 8: Entradas y salidas del mdulo de cruce y el bloque de cruce

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

scg Direccin a RAM individuos n

clk Max para RNG

Fig. 9: Mdulo de mutacin y bloque de mutacin

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

Individuo Scg seleccin

Fitness Scg cruce

Scg mutacin
clk
Finalizacin

Fig. 10: Entradas y salidas del controlador general

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

Fig. 11: Entradas y salidas del controlador de fitness


El mdulo de fitness contiene una tabla con los cuadrados de todos los nmeros de 0 a 31. De este modo, lo nico que tiene
que hacer este controlador es recibir un individuo, consultar la tabla y escribir la funcin de fitness correspondiente en la
memoria de fitness. Debe hacer esto para todos los individuos en cada ciclo del algoritmo.
Tras disear esta funcin junto con todas las anteriores, se hace una simulacin utilizando el software Quartus II para
comprobar su correcto funcionamiento. Lo que se muestra a continuacin es el resultado de la simulacin del circuito completo
diseado para ejecutar un algoritmo gentico:

Fig. 12: Simulacin de un algoritmo gentico implementado en hardware

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

También podría gustarte