Now it’s official

Today I took the Engineer’s oath and received my diploma of “Ingeniero en Inform谩tica” (I believe that Computer Engineering is the best translation). I’m very grateful to all the people that supported me during this journey, filled with lots of interesting experiences and, obviously, some not-so-interesting ones.

Even though I’m not the master of the world, I’m not sure what to do next. But I will think of something. 馃槢

Some photos:

The Dean, Carlos Rosito, giving me the diploma.

With Guille.

With my parents.

With my brother.

Regular programming will continue in the next posts… 馃榾

Advertisement

Proyecto para Labo de Micros

Ac谩 est谩 todo el software del proyecto que hicimos (junto con Mariano Beir贸) para la materia Laboratorio de Microcomputadoras: un juego de Ta-Te-Ti capaz de conectarse a cualquier televisor (con audio incluido!). Una de las cosas m谩s particulares que ten铆a el software era el uso de un tabla comprimida con Huffman para determinar que jugada realizar en base a la posici贸n del tablero. Algunas fotos:


La imagen proyectada sobre una PC cuando hicimos la presentaci贸n (como la salida era video compuesto la tomaba sin problemas).


Una vista de la plaqueta principal.

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.

Descripci贸n del tema de la tesis y otras cosas

Bueno, antes de seguir con los temas del d铆a, voy a hablar un poco de cual es el tema de mi tesis. El tema es la “Utilizaci贸n de estrategias de selecci贸n de poblaci贸n para el dise帽o de filtro anal贸gicos pasivos utilizando programaci贸n gen茅tica”, pero 驴qu茅 significa?

Bueno empecemos con la programaci贸n gen茅tica (mucha m谩s informaci贸n sobre el tema, como siempre, puede encontrarse en Wikipedia o en Google). La programaci贸n gen茅tica es una t茅cnica para resolver problemas de optimizaci贸n que se basa en realizar una “evoluci贸n artificial” de una poblaci贸n de programas, con el objeto de seleccionar al que d茅 la soluci贸n m谩s conveniente al problema planteado. Se diferencia de los algoritmos gen茅ticos en que el genoma no se interpreta en forma est谩tica, sino que se ejecuta con una m谩quina virtual (limitada, l贸gicamente, no es ni HotSpot ni CLR! 馃檪 Voy a hablar m谩s de este tema (uno de los m谩s importantes en un sistema de programaci贸n gen茅tica) posteriormente, cuando est茅 implementando la mencionada VM.

Los filtros anal贸gicos pasivos son circuitos electr贸nicos cuyo objetivo, tal cual lo indica el nombre, es “filtrar” una se帽al, eliminando ciertos componentes de la misma. Se denominan anal贸gicos porque operan con una representaci贸n continua de la se帽al; esto los diferencia de los filtros digitales que lo hacen con una representaci贸n en tiempo discreto. Finalmente son pasivos porque solo utilizan tres clases de componentes: resistores, capacitores e inductores, ninguno de los cuales “entrega energ铆a” a la se帽al (la definici贸n estricta de pasividad es algo compleja). A pesar de que no figura en el nombre, estos filtros son lineales, lo que implica que la respuesta a la suma de dos se帽ales es al suma de las respuestas que dar铆a a cada se帽al por separado.

El realizar todas esas generaciones de evoluci贸n con poblaciones que pueden llegar a tama帽os considerables es computacionalmente costoso. Si bien hoy d铆a es en general ventajoso intercambiar tiempo del programador por tiempo de m谩quina, como lo muestra la gran popularidad de lenguajes tales como Python, una tarea suficientemente compleja puede vencer incluso al crecimiento exponencial del poder de c谩lculo. Por ello es importante tener m茅todos relativamente sofisticados para elegir a los circuitos de la poblaci贸n con mejores perspectivas de acercarnos a la soluci贸n. M谩s adelante hablar茅 sobre al naturaleza de estas estrategias.

Bueno ahora a los links del d铆a:

Brian Beckman: The Physics in Games – Real-Time Simulation Explained

Photo Tourism: Exploring Photo Collections in 3D (funciona con Firefox)

En el pr贸ximo post: GLUT – arcaica o pr谩ctica 馃榾