HARDWARE EVOLUTIVO
Por Rodrigo Hernández C.
La tecnología se ha basado en la naturaleza para desarrollar modelos que permitan entregar soluciones a distintos tipos de problemas.
El hardware evolutivo consiste en la idea de poder hacer que los circuitos diseñados se adapten y evolucionen a un circuito capaz de resolver de mejor forma el problema que se define. Para poder entender la evolución del hardware, se debe tener una idea básica de lo que son los algoritmos evolutivos.
Basándose en la idea central de la selección natural, los individuos mejor adaptados sobreviven al medio en el cual están inmersos, los algoritmos evolutivos intentan modelar el proceso de evolución los organismos vivos para generar soluciones que se adapten de forma natural al problema en cuestión. Así ideas como la de supervivencia, herencia, etc se modelan de forma ingeniosa para aplicarlos a la rama de la ingeniería.
La idea básica consiste en que se puede maximizar o minimizar algún funcional, mediante una población de individuos candidatos a ser la solución óptima del problema. Se deben rescatar términos clásicos de la teoría de la evolución como individuo, población, herencia, etc.
Para manejar estas definiciones, se debe hacer un análogo que nos permita manipularlos de forma natural en la rama de la ingeniería.

Como parte importante de los algoritmos evolutivos figuran los algoritmos genéticos. Los cuales se basan en la genética y la forma en que esta genera descendencia, para generar soluciones a problemas en general. Las evolución se produce mediante ciclos denominados generaciones. La estructura básica de una generación es la siguiente.

·
t=0;
·
Inicializar población. p(t=0)
·
While
o
Evaluar
población. f(t)
o
p’(t) =
selección{p(t)}
o
p(t+1) =
operadores{p’(t)}
o
t = t+1;
Finwhile
El algoritmo se inicia generando una población de individuos, donde la única restricción existente es que posean un valor válido en la función que se desea atacar. Luego se seleccionan los “mejores” para generar descendencia, cerrando el ciclo evolutivo. La diferencia principal se marca en los operadores(forma de generar descendencia) y en la forma de codificar las soluciones.
Un individuo se codifica mediante una tira binaria. En analogía con la cadena de material genético de los seres vivos. Una puntuación denominada fitness se asigna al individuo para saber que tal es su desempeño en el intento de resolver el problema.

Una vez se ha asignado la puntuación
a estos individuos, se genera una subpoblación que es la que generará toda la
descendencia. Hay muchas formas de seleccionar esta población. Una de las
formas clásicas es proporcionalmente al fitness que
tiene cada individuo, este método se conoce como Roulette
Wheel, método de

La probabilidad de selección se vuelve proporcional al desempeño del individuo. El siguiente paso es Generar la siguiente población. Dos métodos usados son el crossover y la mutación. En el primero se intercambia material genético entre dos individuos. En el segundo se intercambia el valor de un gen de un individuo.

Ahora que ya sabemos como funcionan los algoritmos evolutivos, los podemos aplicar al hardware.
¿Como se hace esto?.
Haciendo que los operadores genéticos actúen sobre el hardware.
¿Como lo aplicamos al hardware?
Este debe poseer condiciones que permitan operar de la forma que se mostró anteriormente.
Lamentablemente esto no se puede aplicar sobre circuitos rígidos, impresos, ni sobre los elementos clásicos como resistencias, condensadores etc. Debe aplicarse sobre circuitos programables. Normalmente se utilizan FPGA’s ( Field Programmable Gate Array) o PLA’s.
Los FPGA’s son circuitos programables de gran flexibilidad. Estos pueden simular compuertas lógicas y así generar funciones boolenas de gran tamaño. Una secuencia de bits puede indicar el estado del FPGA, transformando al FPGA en un individuo de una población.

Así la configuración de las compuertas puede cambiar según se modifiquen los bits que componen el cromosoma que codifica al FPGA.
Los PLA también pueden ser usados como individuos a evolucionar. En este caso la secuencia de bits indica la existencia de conexión o no entre los arreglos que componen el arreglo lógico.

Distintas empresas han encontrado respuesta a sus problemas mediante los algoritmos evolutivos y el hardware evolutivo. En 1991 Genobyte desarrollo el primer cerebro, en base a redes neuronales y hardware evolutivo mediante FPGA’s, el proyecto denominado CAM-Brain Project (Cellular Automata Machine) poseía como objetivo construir un cerebro artificial, basado en redes neuronales, estudiar como se comportan grandes sistemas compuestos de millones de neuronas y conexiones. Ambos puntos no se pueden realizar en un computador convencional, ahí la razón de diseñar esta súper máquina.

Esta idea está más basada en la ingeniaría tradicional más en la idea misma de construir un cerebro humano. Cada neurona evolucionara mediante algoritmos genéticos, con el objetivo de calzar alguna función definida por el usuario.
La topología de cada módulo neuronal fue codificado en un cromosoma (0's y 1's) genotipo y el fenotipo es la red resultante. Así la lucha por la supervivencia, el fitness, es una mezcla de puntajes por la adaptación al problema y la morfología espacial de la neurona, esto ya que la neurona esta contenida en una espacio limitado, y neuronas mas pequeñas dan espacio a mayor número de neuronas.
¿Que es lo que evoluciona?
Las neuronas pueden crear conexiones dendríticas y axónicas a medida que estas crecen. Cierto patrón de crecimiento se va creando, dependiendo de la función que se quiera calza. Así las células se van especializando. Cuando una célula no especializada recibe una señal de una célula especializada esta se especializa en la misma función y van así enviando señales a los vecinos.
