Post de retorno: desarrollo de circuitos

Bueno, pasó bastante tiempo desde la última actualización y no quería llegar a un mes sin posts… Estas últimas semanas estuve ocupado terminando trabajos prácticos finales para varias materias, pero esta pude empezar nuevamente con el trabajo de la tesis. Más específicamente, comenzando a programar el módulo de evaluación.

Este módulo es central para el sistema, ya que debe transformar la descripción del individuo en un circuito con objeto de que pueda obtenerse su transferencia con el SPICE y compararla con la deseada. Esta transformación, que puede verse animada en el sitio de John Koza, consiste en interpretar el cromosoma como una serie de instrucciones que gobiernan el “crecimiento” de un circuito.

Como en el sistema que estoy desarrollando un cromosoma es un array de bytes y debo representar con él un árbol, tenía que decidirme por una codificación. Después de pensar varias opciones, elegí utilizar una codificación prefija por la simplicidad de su “evaluación” recursiva. También evalué la posibilidad de no efectuar la recursión y reemplazarla por iteración, pero decidí seguir el precepto de Knuth respecto a la optimización prematura.

La otra decisión de codificación era respecto al circuito: implementar mi propia representación o utilizar Boost. En base a mis experiencias previas con grafos, elegí utilizar boost::adjacency_list; no por razones de performance, sino para evitar los posibles bugs y tiempo desperdiciado.

Para terminar, un interesante post de Stephen Wolfram (el creador del Mathematica) sobre los diseños de puentes, a la luz de la famosa caída de uno en Estados Unidos.

Advertisements