Introducción
Hardware
Evolutivo es una nueva rama de la investigación con inspiración biológica. Nace en 1992 en una tormenta de ideas donde
Hugo de Garis le pregunta a un colega de la universidad George Mason, en
Virginia, acerca de la posibilidad de diseñar un circuito que pudiera ser
utilizado en la evolución de una red neuronal. El ingeniero electrónico de la
universidad de George Mason le contó acerca de las FPGA (Field Programmable
Gate Array) y de su estructura reprogramable.
Desde
entonces ha habido mucho desarrollo e investigación entorno al tema, en parte
por los bajos costos que tienen una de las plataformas de desarrollo del
Hardware Evolutivo, las FPGA que en sus versiones más sencillas llegan a valer
cerca de 10 dólares (Xilinx Spartan-3 XC3S50).
Qué es Hardware Evolutivo.
Hardware Evolutivo es un circuito
electrónico reconfigurable, el cual puede ser cambiado a través de un proceso
adaptivo como por ejemplo un algoritmo genético.
Existen en el mercado circuitos llamados
FPGA (Field Programmable Gate Array) los cuales son la base de muchas
investigaciones en el campo del Hardware Evolutivo. Existen muchas empresas
dedicadas a producir este tipo de Hardware (Xilinx, Altera, Lattice
Semiconductor, etc.).
Un circuito FPGA típico consiste en
un arreglo de cientos de bloques reconfigurables, los cuales pueden implementar
una gran variedad de funciones digitales lógicas, un conjunto de canales entre
las entradas y salidas de éstos bloques, la forma en que están conectados estos
canales con los bloques y entre sí puede ser visto como un control a través de
interruptores electrónicos, cuyos estados están dados por la memoria del
dispositivo. Los bloques que se encuentran en los límites del dispositivo
tienen una configuración especial para los interruptores ya que éstos son la
interfaz con las conexiones externas.
Tipos de Hardware Evolutivo.
El Hardware Evolutivo puede ser
dividido en 2 tipos:
Aquellos que utilizan evolución extrínseca donde el algoritmo genético es aplicado en software a una simulación del dispositivo que se está evolucionando.
Y aquellos que
utilizan evolución intrínseca donde
el algoritmo genético es aplicado al dispositivo mismo.
Esta clasificación también puede ser considerada como restringida (constrained) o no restringida (unconstrained).
Hardware evolutivo restringido (Constrained).
La evolución restringida es similar
a los otros tipos de Hardware Evolutivo, aunque usualmente mucho más rápido.
Parámetros tales como coeficientes de un filtro digital, o los pesos en una red
neuronal pueden ser ‘evolucionados’. También es posible diseñar circuitos
completos desde niveles de transistor o compuertas.
Últimamente
se está apuntando a crear una pieza inteligente de hardware que puede ser
insertada en cualquier sistema y comience a operar sin alguna programación
explícita. Sólo necesitaría una realimentación (feedback) de que tan bien está
haciendo el trabajo requerido.
Naturalmente
esta técnica es limitada a problemas en
donde la función de fitness es más fácil que resolver el problema directamente.
Hardware evolutivo no-restringido (Unconstrained).
Mientras la distinción entre intrínseco/extrínseco es irrelevante para evolucionar el software, las diferencias en hardware son evidentes. Con la mayoría de los artefactos de ingeniería, la evolución extrínseca es más rápida que construir varios prototipos del dispositivo, pero la circuitería puede ser más rápida evolucionando intrínsicamente. Esto tiene el notable potencial de generar diferentes resultados; mientras que al simular, un diseño es naturalmente restringido al modelo del dispositivo realizado por el programador, la evolución intrínseca permite al diseño explotar las características naturales de un dispositivo el cual puede incluso no ser entendido por el programador.

Figura 1. Evolución Intrínseca.
Esto es conocido como evolución no restringida. El concepto fue introducido por Adrian Thompson quién en 1996 evoluciono un discriminador de tonos, usando menos de 40 compuertas lógicas programables sin una señal de clock en una FPGA. Este diseño tan pequeño es notable para este tipo de dispositivo, y hasta ahora no se tiene un entendimiento completo de cómo el dispositivo funciona. Por ejemplo, un grupo de compuertas no tienen conexión lógica al resto del circuito, a pesar de que este grupo es crucial para su funcionamiento. Se cree que este grupo compuertas de alguna forma modula la alimentación ó influencia las otras conexiones generando un campo magnético.
Limitaciones.
Como todo
en la vida el Hardware Evolutivo tiene desventajas.
Futuras
investigaciones.
Actualmente la investigación en hardware evolutivo a menudo está enfocada en el concepto biológico de crecimiento. Esto nace de la necesidad de resolver problemas más complejos. Los problemas complejos requieren grandes circuitos, grandes circuitos requieren grandes genotipos para ser representados asociados a una pequeña probabilidad de encontrar, a través de la evolución, una que funcione. La respuesta de la naturaleza es el crecimiento - de acuerdo a la cual la evolución diseña una pequeña célula la cual crece hasta producir un organismo completo. El crecimiento físico del hardware es, hoy en día, imposible, pero el crecimiento de la información es posible. Un ejemplo de esto es el desarrollo del zygote, donde un número de células idénticas intercambian señales en donde la diferenciación está en cada célula realiza diferentes tareas dependiendo de su posición en el organismo.
Otra dirección de investigación es la aplicación de la técnica de la programación genética para especificar la conectividad entre los componentes, en vez de tomar el stream de bits de configuración directamente como un génoma.
Hardware
Evolutivo puede ser considerado como una rama de la ingeniería
bio-inspirada, un amplio campo el cual
aplica conceptos biológicos tales como
evolución, crecimiento, sistemas inmunes entre otros.
Algoritmos Genéticos.
Como funcionan los
Algoritmos Genéticos.
Se tiene una población inicial de individuos, P(t)={X1,….., Xn}, donde cada individuo representa una solución potencial al problema, que se evalúan según una función de adaptación llamada función de fitness.
En la
iteración t+1 se forma una
nueva población seleccionando los individuos mejor adaptados, y modificándolos
mediante operadores genéticos para formar nuevas soluciones.
Algoritmo:
Comenzar
t=0
inicializar
P(t)
evaluar
P(t)
mientras
(condición de término) hacer:
t= t+1
seleccionar
P(t) de P(t-1)
modificar
P(t)
evaluar
P(t)
fin
fin
Generalmente los individuos son representados mediante vectores binarios. La selección de estos se puede realizar a través de varios métodos, algunos de ellos son:
- Selección Proporcional (Roulette Wheel).
- Selección por Ranking con SUS
(Stochastic Universal Sampling).
- Selección por Torneo.
Estos métodos de selección son
elitistas, es decir, los individuos mejores adaptados reemplazan a los peores,
pero en la selección con Ranking con SUS es la más utilizada por que permite
tener una mayor diversidad de individuos, en un principio, evitando generar una
población con copias del mejor individuo lo cual hace que el algoritmo se
estanque.
Los operadores genéticos más
utilizados son Crossover o recombinación
genética y Mutación.
El algoritmo del Crossover es:
1. Escoger dos individuos A y B,
aleatoriamente de la población de padres generada por el operador de selección.
2. Escoger uno o más punto de cruce.
3. Intercambiar segmentos entre padres
y producir descendencia C y D.
A B
|
|
|
|
|
|
![]()
C D
|
|
|
|
|
|
La Mutación consiste en cambiar de 0
a 1 ó de 1 a 0 alguna componente del individuo, este proceso generalmente se
hace para cada elemento pero la mutación se lleva a cabo con un probabilidad
bajísima, p = 0.1.
|
|
0 |
|
![]()
|
|
1 |
|
FPGA
(Field Programmable Gate Array)
Un FPGA es un dispositivo semiconductor usado para procesar información digital, similar a un microprocesador. Utiliza un arreglo de compuertas lógicas que pueden ser reprogramadas después de su fabricación.
Los FPGAs son generalmente más
lentos que su contraparte Circuito Integrado de Aplicación Específica (ASIC), y
son menos eficientes en el consumo de energía.
Muchos de los FPGAs actuales tienen
la capacidad de ser reprogramados en tiempo de ejecución, y esto es la idea de
la computación reconfigurable o los sistemas reconfigurables.
Arquitectura.
La arquitectura consiste en un
arreglo bloques lógicos configurables (CLB) y caminos entre éstas. Dos
conectores I/O por cada columna y fila de bloques. Cada camino tiene el mismo
número de canales (cada canal tiene una cierta cantidad de cables).

Figura 2. Esquema de un FPGA.
En la figura 3 se muestra un bloque típico
de un FPGA. Consiste en 4 entradas de una LUT (Lookup Table) y un flip-flop.

Figura 3. Bloque básico de un FPGA.
La ubicación de los pines de un bloque del FPGA
se muestra en la figura 4.

Figura 4. Ubicación de los pines del bloque
lógico.
Las entradas son accesibles por un
costado del bloque, mientras que la salida puede ser conectada tanto a los canales
que están a la derecha como los que están por debajo del bloque.
Cada salida puede ser conectada a
cualquier segmento de cable del canal que este adyacente al bloque, tal como lo
muestra la figura 5.

Figura 5. Posibles conexiones de un pin del
bloque con algún cable del canal.
El encaminamiento de la información
es segmentada. Esto es, cada segmento de cable abarca sólo un bloque lógico
antes de llegar a un bloque interruptor (Switch Box). Activando algunos de los
interruptores programables dentro del Switch Box se puede construir un camino
más largo.

Figura 6. Cableado segmentado entre bloques
lógicos.
En cada intersección de un camino
vertical con uno horizontal, hay un Switch Box. En esta arquitectura, cuando un
cable entra a un Switch Box, hay 3 interruptores programables que permiten
conectarlo a otros 3 cables del segmento adyacente. La topología de los
interruptores de esta arquitectura es la llamada planar. En esta topología del Switch Box, un cable
del canal uno sólo puede ser conectado con alguno de los cables del canal uno
del camino adyacente. En la figura 7 se ilustra las conexiones en el Switch
Box.

Figura 7. Conexiones dentro del Switch Box.
Diseño y Programación
del FPGA.
Para definir el comportamiento del
FPGA el usuario utiliza un lenguaje llamado HDL (hardware description language)
o de un diseño esquemático. Comúnmente los HDL utilizados son VHDL y Verilog.
Luego, usando una herramienta de diseño electrónica automatizada, se genera la
lista de los bloques y conexiones que se debe utilizar. Esta lista es adecuada
a la arquitectura del FPGA usando un proceso llamado called-and-route,
usualmente implementado en software por la compañía de la FPGA. El usuario
luego valida el mapa, a través de simulaciones y otras
metodologías. Una vez que el proceso de diseño y validación están completos, es
generado un archivo binario (también, usualmente con un software de la compañía
del FPGA) el cual es utilizado para (re)configurar el FPGA.