Showing posts with label proyectos. Show all posts
Showing posts with label proyectos. Show all posts

Monday, September 6, 2010

Genetic Madness: Hide & Seek

Hace un tiempo vengo desarrollando (de gusto, no es que el mundo lo necesite) un framework de Algoritmos Genéticos (GA, por sus siglas en inglés) en Python. Si mal no recuerdo, lo empecé a armar estando en India, ya que lo necesitaba para el trabajo que estaba haciendo allá.

Para los que no sepan qué corno son los GA (y no fueron lo suficientemente curiosos para abrir el link a wikipedia que puse antes), la idea básica es que es un método de optimización algorítmico basado en la selección natural darwiniana. Uno opera sobre una población de soluciones a un problema, selecciona los más aptos (usando una función de fitness que nos dice qué tan buena es una solución), y los combina para obtener una nueva población, agregando alguna que otra mutación cada tanto para hacerlo más divertido :P. Con el correr de las generaciones simuladas, los individuos tienden a aumentar su aptitud (esto es, son mejores soluciones para nuestro problema!).

Hace aproximadamente un mes leí un gran libro referido al tema, escrito por David Goldberg, lo cual me dio un mejor fundamento teórico para mejorar el framework. Tuve ganas de hacer algo así como un juego, muy simple, que use los conceptos de GA, para poder enseñarle a alguien que no tiene idea de programación cómo opera un algoritmo genético. No se me ocurrieron muchas aplicaciones divertidas de GA como para llegar a llamarlas juego, pero uno de los experimentos que hice me pareció interesante como para compartirlo en el blog. La idea básica del programa es la siguiente:

Usando pygame, crea mini ventanitas de distintos colores (sin bordes ni "header", solo cuadraditos de colores). Al clickearlas, se cierran, y es como si el usuario "matara" esa ventanita. Un algoritmo genetico evoluciona la posicion y el color de las ventanitas, donde una ventanita se considera más apta que otra si  perduró más tiempo en el desktop sin ser clickeada. Cada generación dura hasta que no quedan más ventanitas vivas, tras lo cual se reinicia el ciclo (la nueva población de ventanitas se obtiene usando los métodos de selección, mutación y crossover típicos en los algoritmos genéticos).

El resultado: el comportamiento emergente es que las ventanitas se esconden en los iconos del escritorio y se mimetizan con tu desktop (tienden a tener los colores de tu background). Esto quiere decir que mientras más jugás los colores más tienden a ser los de tu background, por evolución artificial... no sé si me expliqué bien pero en este screenshot se ve: (acá está la versión grande)
Probé con varios tipos de fondos de pantalla, pero usando un color simple se ve más claramente. Fue divertido ver como, partiendo de una población inicial de ventanas ubicadas al azar y con colores totalmente aleatorios, de a poco se tendía a que las ventanas imiten el color wallpaper (haciéndolas más difíciles de ver) y se ubiquen en los bordes (llamando menos la atención).

El experimento es muy simple y podría ser refinado de infinitas maneras, pero me pareció una linda forma de mostrar cómo actúa la selección "natural" en cualquier ambiente en el que haya variación y presión sobre los individuos.


Por si a alguno le interesa, acá está el proyecto open-source del framework, actualmente en un muy temprano estado de desarrollo. Pueden bajarse el código de ahí y correrlo en sus máquinas... Y si alguno quiere colaborar con el proyecto no dude en contactarme!

Saludos,
Manuel

Thursday, April 8, 2010

Cosas que pensé gracias a 7cerebros

Aunque los títulos "Reflexiones luego de haber terminado 7cerebros" o "Cosas que aprendí con 7cerebros" le podrían haber venido bien a este post no los usé porque no quería que suene a esos típicos blogs en dónde los "emprendedores" te tiran "la posta". Primero, por la razón obvia de que no soy un emprendedor: 7cerebros fue un sueño que tuve la suerte de poder bajar a la realidad. Segundo, porque lo que les voy a contar no tiene que ver con emprender sino con cosas personales que aprendí gracias a llevar adelante 7cerebros, y que creo que va a ser dificil que otros apliquen para sí mismos. O no sé, pero en todo caso no es el objetivo. Quizá solo escriba para bajar los pensamientos a palabras.

La idea que creo se me hizo más clara luego de haber vivido el proceso completo de desarrollar el concurso, lo que más me marcó como persona y lo que más me llevo como aprendizaje, fue que la interacción entre personas que buscan un objetivo que supera sus capacidades individuales puede ser (y lo fue, en mi caso) MUY apasionante.
Por suerte, lo que más me quedó fue eso... No lo fue, en cambio, el haber aprendido a los ponchazos a hacer una página web (algo de lo que al comenzar no teníamos literalmente ni idea!), ni el trabajo de buscar sponsors, ni pensar los problemas para el concurso intentando balancear diversión con complejidad, ni ninguna de esas cosas. En cambio, tratar con la gente, intentar que un grupo de 8 personas pusieran lo mejor de sí para dar todo por algo que nos superaba a cada uno pero que juntos pudimos lograr, fue una de las experiencias más gratificantes que viví en los últimos años.

Y me di cuenta de que me llevo al menos 3 claves para todo lo que haga a futuro:

  1. Lo más importante es el equipo. Cliché, lo sé, pero es MUY verdadero! La idea innovadora no es nada, el capital inicial no es nada, los conocimientos no son nada, la garra y el amor al proyecto que tenga el fundador sirven de poco, comparado a la importancia de armarte de un equipo de gente en quienes confíes, tanto en lo técnico como en lo personal. Cómo dice el famoso dicho (?) perdido por Internet, “Ideas are Cheap. Execution is Everything.” Y la ejecución depende totalmente del equipo. Creo firmemente, y conozco algunos casos que lo confirman, en que aunque la idea sea brillante, y el que la lleva adelante esté completamente enamorado de su proyecto, si no encuentra un equipo en el que se pueda apoyar y en el que "plantar" esa idea para que crezca y deje de ser una simple idea, el fracaso es ineludible. Al fin y al cabo, la idea no se manifiesta si no es a través de los hechos concretos, del trabajo y el esfuerzo que haga el equipo para sacarla adelante.

  2. La clave del éxito es modularizar la vida y delegar. A muchos esto les va a sonar OBVIO. Para mi no lo fue. Y es una de las grandes enseñanzas que me llevo de 7c, la cual me da mucha paz. Llevar adelante un proyecto hace que uno tenga que trabajar en muchísimas cosas a la vez, y de más diversas índoles. Por suerte, en TODO lo que querramos hacer, hay alguien en el ámbito cercano que lo hace mejor. Es más, hay alguien que no sólo lo hace mejor porque tiene más experiencia, talento, o don en esa área, sino porque le apasiona totalmente hacer eso que a nosotros nos puede parecer un bodrio o una tarea por sobre nuestra capacidad. Entonces, alegría! ¡Pare de sufrir! jajaj Ahí está la clave: buscá a la gente que no sólo haga las cosas mejor que vos, sino que disfrute más que vos haciéndolas. Así vas a tener las cosas bien hechas y a tu gente feliz. Disclaimer: para los que dicen que a veces es jodido encontrar a la persona indicada, BASTA. Creeme, SIEMPRE aparece. Usá los medios que tenés a tu alcance... facebook, twitter, hablá con las personas, interesate por sus intereses... y acá empalmo con el siguiente item.

  3. Care for people. Ya me siento un chanta hablando así pero les juro que me sale de adentro ajajja... Una de las cosas que más me apasionó de "liderar" este grupo de trabajo en 7cerebros es el hecho de tener que armonizar y encausar 8 personas cada una con sus sueños, expectativas, miedos, talentos y motivaciones diferentes. Algo que encuentro realmente maravilloso es escuchar a una persona contarte sobre lo que le apasiona. Ponerte en su lugar, intentar captar el motivo de ese goce al hacer algo que quizá no compartimos pero que aspiramos a entender. Cuestión, quizá esto sea un "hobby" personal que tengo, pero me sirvió para darle vitalidad al proyecto. Me encontré constantemente pensando en cómo hacer para que cada uno estuviera a gusto con lo que hacía y no sólo a gusto, sino totalmente copado en su mente y su voluntad. No digo que lo haya logrado, pero con sólo haber visto una leve sonrisa al contar el plan de trabajo algún día, sabiendo que algo se movía dentro de esa persona para ir más allá, la satisfacción que sentí fue inmensa...
Ya que no basta con que uno esté apasionado con su idea... hay que lograr contagiar esa pasión al equipo y así al proyecto no le va a quedar otra que salir adelante. (Bueno, en realidad no es tan fácil, pero por ahí va)



Por ayudarme a aprender esto que es tan valioso para mi, quiero agradecer al equipo de 7cerebros:
Juampi, Manu, Vicky, Luchi, Tomi, Mati, Santi, y Martín
Autor: @scoffey, Técnica: Pen Tablet. Dimensiones: 604 x 287 px.