Cosas de la genética

La genética es algo maravilloso. Bueno, depende; si te ha tocado heredar algunos defectos paternos es probable que la odies profundamente. Pero en el fondo, piénsalo, la genética mola. Por eso hay rubios en Suecia y morenos en España. Bueno, excepto en la época en que veraneaban en España, claro.

gaudii hace uso de bits genéticos para generar carteles y que estos tengan sus propias características definidas por los genes. Es decir, dependiendo de un bit de ese array, un diseño puede tener la imagen principal ocupando todo el fondo de la imagen, o bien hacer que el texto principal tengo un tamaño mucho mayor que el resto para hacer contraste, o que los colores del cartel sean generados aleatoriamente, etc. Todos los elementos del diseño, excepto la distribución de los elementos en el diseño, vienen definidas por algún bit.

Gracias a esto, gaudii permite al usuario la opción de mezclar sus diseños favoritos. Es decir, la aplicación genera, cada vez, 9 diseños únicos. Pues bien, podemos ir eligiendo los diseños que más nos gusten y almacenarlos en el Mezclador Genético (nombre provisional). Despues, el usuario solo tiene que pulsar el botón correspondiente y gaudii generará 9 diseños que serán hijos (o nietos, nunca se sabe) de los diseños originales.

De esta forma, si nos gustan un par de diseños, con el mezclador podemos obtener lo mejor de ambos mundos (o lo peor, la genética es caprichosa ;)).Además, existe la (pequeña) posibilidad de que alguno de los bits no sea ni de la madre ni del padre, sino una simpática mutación aleatoria que nos proponga algo nuevo en el diseño que no estaba antes. Ya sabes: autoregeneración, controlar la meteorología, telequinesis… las mutaciones de toda la vida.

Cómo funciona gaudii (a grosso modo)

Antes de empezar con chicha más concreta, creo que lo mejor es dar una visión global de como funciona todo este generador de diseños que me ha robado los últimos meses de mi vida.

gaudii recibe textos del cartel y una o varias imágenes que acompañen a estos. A partir de esta información se crean varios objetos Design, cada uno con su propia carga genética generada aleatoriamente. Esto es porque creemos que no existe un único diseño bueno para una determinada situación, de manera que de forma aleatoria se genera una serie de valores geneticos que darán forma luego al diseño.

Esta cadena genética contendrá entonces toda la información visual de los elementos (¿que tipo de contraste hacemos?, ¿usamos muchos colores?, ¿como ponemos la imagen? , etc.). Una vez creada, se le pasa a un Motor de Inferencia Difusa, que mediante unas cuantas reglas (algo más de 100) crea otro array con los resultados inferidos.

Con ese array de resultados, gaudii crea todos los objetos necesarios con las propiedas obtenidas en esos resultados (el esquema de colores, el tamaño de las fuentes, su tipo, etc.). Al final de este proceso nos quedan un montón de elementos esperando a ser colocados en el espacio en blanco que hayamos dejado en el diseño (que también dependerá de un bit de la cadena genética).

Para colocarlos recurrimos a un algoritmo de Enfriamiento Simulado, que parte de una solución inicial y coloca las cosas como Sus Funciones de Coste le dan a entender. ¿Qué funciones de coste son esas como para respetar unas ciertas reglas artísticas? Pues eso ya se explicará más adelante, pero evidentemente no se colocan intentando aprovechar el espacio: se colocan para que quede bonito.

Eso es, a grosso modo, como se crea un diseño en gaudii. Pensaréis, ¿y para que tanto rollo con las cadenas genéticas si podría haberse hecho de una forma más sencilla? ¡Spoiler alert! No vayamos a contar todo de primeras, ya iremos indagando en las posibilidades de hacerlo así :)

Hola Mundo!

Este es el blog del proyecto gaudii, un sistema experto multiplataforma (es una simple página web) que mediante el uso de un sistema de reglas difusas, algoritmos genéticos y otras técnicas de IA crea diseños de carteles a gusto del usuario. El sistema se basa en ciertas reglas de diseño más o menos universales para crear carteles.

gaudii está escrito en Ruby On Rails, pero también hace un poquito uso de C, OpenCV y javascript. También se ha usado Paciencia, un modulo humano que he tenido que usar en numerosas ocasiones, y GolpesEnLaMesa, un novedoso plugin (también humano) para liberar tensión en ciertos momentos.

Este blog pretende comentar las partes más interesantes del desarrollo de gaudii, desde las dificultades encontradas en el desarrollo hasta las decisiones de diseño de las partes más novedosas.

gaudii está inscrito en el IV Concurso Universitario de Software Libre.



Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.