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

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 + => 010|11 110|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 parada no Seleccin s Fin

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.

x 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: A = $0 0 $
$ $0 0 $ $0 0 % &0 1 0 m 2 g l 2 I ( M + m) + M ml 2 0 m g l ( M + m) I ( M + m) + M ml 2 0# ! 0! ! 1! ! 0! "

B= $ $

0 I + ml 2 2 $ I ( M + m) + M ml $ 0 $ 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 generacin inicial

RAM individuos

Controlador general

Mdulo seleccin 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.
Nmero de RNG scg clk

Mdulo generacin inicial

sig Datos a RAM individuos we Direccin a RAM individuos 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.
Nmero de RNG Individuo Fitness scg clk sig Datos a RAM individuos we Direccin a RAM individuos y fitness Max para RNG Nmero de RNG Reg. Acum Fitness

Mdulo seleccin

<
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.
Nmero de RNG Individuo scg clk sig Datos a RAM individuos we Direccin a RAM individuos Max para RNG An+1An An-1An-2An-3 Bn+1BnBn-1Bn-2Bn-3 n

Mdulo cruce

Cruce

An+1AnBn-1Bn-2Bn-3 Bn+1BnAn-1An-2A n-3

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.

Nmero de RNG Individuo scg clk

sig

Mdulo mutacin

Datos a RAM individuos we Direccin a RAM individuos Max para RNG

An+2An+1A nAn-1An-2

Mutacin
n

An+2An+1 nAn-1An-2

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.
Seal de inicio Sig generacin inicial Sig fitness Sig seleccin Sig cruce Sig mutacin Individuo Fitness clk Sel mux direccin individuos Sel mux individuo Sel mux direccin fitness

Controlador general

Direccin a RAM individuos y fitness Solucin Scg generacin inicial Scg fitness Scg seleccin Scg cruce Scg mutacin 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.
Individuo scg clk

Controlador fitness

sig Datos a RAM fitness we 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