Monday, November 30, 2015

Entrevista con Matt Richardson, evangelista de Raspberry Pi


Matt Richardson es un evangelista de la Raspberry Pi. De hecho, tiene un libro publicado (junto con Shawn Wallace) llamado “Getting Started with Raspberry Pi”. Matt vino a México hace algunos días precisamente en un afán de que se conozca más de los productos que tiene la Fundación Pi y de la meta de la misma, que es básicamente que todo el mundo tenga acceso al cómputo.

Esto es parte de la conversación que tuvimos (ML – Manuel López), (MR – Matt Richardson):

ML: ¿Cuál es la verdadera historia atrás de la Raspberry Pi?
MR: Básicamente la Pi nace de la necesidad de que los estudiantes tengan más acceso al cómputo. Ciertamente muchos de ellos ya saben HTML, Javascript, pero no están interiorizados con el funcionamiento de las propias computadoras, de lenguajes de bajo nivel como ensamblador, por ejemplo. La tecnología ha convertido a muchos chicos en consumidores de tecnología, por ejemplo, usando el xbox o el PlayStation mucho más que sentándose frente a una microcomputadora como la BBC-micro (muy popular en algún tiempo en el Reino Unido). La Pi nace entonces de la idea de que los chicos estén más familiarizados con cómo trabajan las computadoras para así crear personas que entiendan desde sus bases cómo funcionan las cosas. Piensa por ejemplo que los niños actualmente pueden usar un iPad pero no saben nada de cómo ni por qué funcionan estos equipos. Con un proyecto como el de la Pi, los niños bien pueden entender qué hay detrás de la tecnología, cómo funciona. Pueden además jugar juegos y generar sus propias creaciones.

ML: ¿Cuántas Raspberry Pi se han vendido hasta hoy día? ¿Unas dos millones?
MR: Siete millones. Sí, hemos crecido muy rápido. Después de la primera Pi sacamos el modelo B y poco después ya teníamos un modelo Pi B+, con un procesador de cuatro núcleos, con 1 GB de memoria, (que sigue costando 35 dólares). Lo interesante fue como la comunidad tomó nuestro producto porque de verdad apreció el trabajo hecho y al final del día lo que buscábamos (y seguimos buscando), es que todo el mundo tenga acceso a la tecnología. Una manera de hacer esto es dar tecnología a precios que puedan pagarse, por lo que cuando bajamos el producto del modelo A a 20 dólares, pensamos que muchos chicos tendrían la posibilidad de tener su propia computadora y experimentar con ella.

ML: Una de las ideas -en mi opinión- más interesantes, es que la Pi pueda correr Linux.
MR: Es absolutamente una gran idea. La comunidad fue increíble, muy feliz corriendo Linux. Y si lo piensas, Linus Torvalds, creó originalmente su sistema a manera de experimentación. Con la Pi podríamos pensar: ¿dónde está el siguiente Linus Torvalds? Quizás de esta iniciativa salga el siguiente contribuyente al kérnel de Linux, por ejemplo, o bien, haciendo programas de código abierto, compartiendo el código, etcétera. Nuestros ingenieros, nuestra gente que hace software trabaja con Linux por muchas razones, pero además, porque es gratuito (y libre). Linux corre en muchas plataformas de hardware y además, en muchas plataformas de hardware poco costoso y esto es crítico para el éxito de este esfuerzo. Piensa por ejemplo en Mac OS X, necesitas en principio un hardware adecuado como el que provee Apple, o en el caso de Windows, que finalmente -en ambos casos- tienen ambiciones comerciales.

ML: Cuéntanos un poco de la experiencia de la Pi en el ambiente de las escuelas del Reino Unido.
MR: Enpezamos entrenando a unos 300 profesores a través del programa académico de la Pi, el cual es gratuito y dura dos días. Además, tenemos ahora una amplia comunidad de educadores certificados en la Raspberry Pi. Usan las Pi en sus clases y no solamente para que los alumnos escriban código, sino para que la Pi se use en ambientes humanísticos, en el arte, buscando introducir el cómputo a través de la Pi de forma interdisciplinaria. Por ejemplo, si el estudiante está interesado en la música, puede usar el software Sonic Pi, que le permite escribir código para hacer música, para incluso generar música al azar (mediante el uso de una función random, un loop, etcétera).

ML: ¿Cuántos educadores en el Reino Unido usan la Pi en sus clases?
MR: No tenemos números exactos pero aproximadamente una tercera parte de la comunidad de educadores en el Reino Unido utilizan la Raspberry Pi en sus clases, y no necesariamente para solamente enseñar a programar código.

ML: Cuéntanos acerca del uso de la Raspberry Pi en sistemas embebidos.
MR: esto es una parte importante de la Pi. Es genial que muchos de los que crean proyectos con una Pi lo compartan con nosotros. Frecuentemente no es solamente hacer algo y listo, sino que comparten el código, la experiencia, lo que funcionó, lo que no, etcétera. Esto hace que crezca el cuerpo de conocimiento y no solo eso, cualquiera puede hacer búsquedas en los proyectos para encontrar soluciones a sus propios proyectos pero además, se convierten en una fuente de inspiración. Y más importante aún es que los proyectos todos funcionan sobre el mismo sistema. No es otro tipo de hardware diferente. Y esto es de gran ayuda. La Raspberry Pi no es un juguete, es una computadora completa. Queremos que los niños vayan más allá de lo elemental, de por ejemplo, usar Scratch (un lenguaje de programación basado en bloques). Nos encanta ver toda esa gente que hace cosas con la Raspberry Pi. Esto es de una inspiración increíble.

ML: Hace relativamente poco sacaron una pantalla táctil…
MR: ¡Aquí la tengo! [Matt la conecta fácilmente y como no tiene un conector a la mano, usa una batería portátil]. Es una pantalla de diez puntos táctiles. Hay bibliotecas para programar la pantalla táctil (por ejemplo en Python). Es realmente un añadido increíble. Pero más allá de esto, lo que buscamos es que quien tenga una Pi pueda programar en un número de lenguajes, incluso Mathematica. La idea es dar un ambiente en donde hay mucho por investigar y en donde cada persona que use una Pi se sienta en la libertad de ver qué herramientas hay o qué herramientas se pueden incorporar. Tenemos Sonic Pi (basado en Ruby), Scratch, Python. Digamos que tenemos de todo y el profesor puede entonces sentirse a gusto con algunas aplicaciones que más le atraigan para sus alumnos. Hoy, por ejemplo, ya tenemos Processing, el cual es un interesante añadido a la Pi.



ML: ¿Cómo puede la gente a aprender sobre la Pi? ¿Qué recursos están disponibles?
MR: En el sitio web tenemos un apartado (llamado “resources”) en donde hay tres opciones, “teach/make/learn”. En cada sección tenemos material para enseñar sobre la Pi, o bien sobre aprender a cómo usarla y finalmente a hacer cosas con ella. Muchos de los documentos muestran desde lo más básico (cómo hacer que un LED se prenda y se apague – algo así como el Hello World! de la electrónica digital), o bien, cómo hacer para que un sensor reaccione a cierto evento. Nos aseguramos pues que lo más básico esté disponible pero claramente hay un sector que quiere saber más y para ellos tenemos materiales intermedios. Una vez que se ha aprendido lo básico, podemos incluso investigar cómo la gente ha usado la Pi en diferentes entornos.

ML: ¿Cuál piensas será el futuro de la Raspberry Pi?
MR: Todo lo que hacemos en la Fundación Pi tiene que ver con los límites de los precios que podemos poner a nuestros productos.

ML: ¿Qué hay con la competencia, por ejemplo, con tarjetas como la BeagleBone?
MR: Hay muchas tarjetas en el mercado, sin duda, unas con más características que otras. La Pi tiene como mayor virtud su precio porque tenemos el balance correcto entre poder computacional con respecto al precio. La cantidad de Pi en el mercado indica que hemos hecho las cosas bien. Tú puedes poner un procesador con más capacidad, más memoria, más sensores, conectores varios, etcétera, por algo así como unos 100 dólares, pero ése no es nuestro mercado.

ML: Raspberry Pi tiene una fundación, ¿verdad?
MR: De hecho, Raspberry Pi ES una fundación. Hacemos caridad. Nuestra misión es el avance de la educación en cómputo. Para ello construimos la Rapberry Pi. Somos en una gran medida una empresa sin fines de lucro. Nuestra misión es que la gente aprenda a programar, a que comprendas cómo funcionan las computadoras y además, queremos hacer cosas interesantes con las computadoras.

ML: ¿Crees que la Pi es un éxito porque funciona a través de una fundación que en gran medida no busca fines de lucro? ¿Crees que eso ha sido una manera de “caerle bien” a la gente y de ahí su éxito?
MR: En mi opinión lo más importante es el precio. Sin embargo, pienso que logramos atraer a mucha gente que nos acoge con cariño y que es francamente increíble, en donde además, tenemos voluntarios. Y es que aman el producto. Y esto ayuda a la misión que nos hemos encomendado. Pienso incluso que no tendríamos todo el apoyo que tenemos si no fuésemos una fundación.

ML: ¿Algo que quieras agregar?
MR: Tenemos este nuevo módulo de cómputo (la Pi Zero), el cual tiene lo básico que contiene una Raspberry Pi y que puede ser útil para muchísimos proyectos en computación. Es un sistema más para el aficionado a la electrónica pero pudiese ser usado por cualquiera interesado en el tema.

ML: Gracias, Matt.
MR: Gracias por la oportunidad de hablar de la Pi.

Sunday, November 29, 2015

La gran idea del algoritmo genético (y un libro gratis)



John Henry Holland fue un científico norteamericano, profesor de psicología, ingeniería eléctrica y de computación. Fue el pionero de lo que a la postre se llamaría "algoritmos genéticos". Holland, desde pequeño, se preguntó cómo es que los organismos se hacían cada vez mejores. Muchos años después, ya teniendo un doctorado, salió con la idea de algo que eventualmente se llamó el "algoritmo genético", partiendo de la base de que todo ocurre por las interacciones locales entre individuos, y entre estos lo que les rodea. Probablemente un libro que tuvo una gran influencia en el científico fue "La teoría genética de la selección natural", del evolucionista R.A. Fischer. Ahí Holland aprendió que la evolución es una forma de adaptación mucho más poderosa que el aprendizaje simple y a partir de ahí, desarrolló programas para demostrar su idea.

Holland se planteó dos objetivos:


  • Imitar de alguna manera los procesos de adaptación de los sistemas naturales
  • Diseñar programas, sistemas que podríamos llamara artificiales, que tengan los mecanismos de los sistemas naturales estudiados

El algoritmo genético busca hacer evolucionar una población de individuos, sometiéndola a acciones azarosas, parecidas a las que actúan en la evolución biológica (mutaciones y recombinaciones genéticas), así como también a una selección de acuerdo con algún criterio -probablemente la parte más difícil- en función del cual se decide qué individuos son los mejor adaptados, que sobreviven, y cuáles los menos aptos, que son descartados.

De acuerdo a la Wikipedia:

Un algoritmo genético puede presentar diversas variaciones, dependiendo de cómo se aplican los operadores genéticos (cruzamiento, mutación), de cómo se realiza la selección y de cómo se decide el reemplazo de los individuos para formar la nueva población. En general, el pseudocódigo consiste de los siguientes pasos:


  • Inicialización: Se genera aleatoriamente la población inicial, que está constituida por un conjunto de cromosomas los cuales representan las posibles soluciones del problema. En caso de no hacerlo aleatoriamente, es importante garantizar que dentro de la población inicial, se tenga la diversidad estructural de estas soluciones para tener una representación de la mayor parte de la población posible o al menos evitar la convergencia prematura.
  • Evaluación: A cada uno de los cromosomas de esta población se aplicará la función de aptitud para saber cómo de "buena" es la solución que se está codificando.
  • Condición de término: El AG se deberá detener cuando se alcance la solución óptima, pero ésta generalmente se desconoce, por lo que se deben utilizar otros criterios de detención. Normalmente se usan dos criterios: correr el AG un número máximo de iteraciones (generaciones) o detenerlo cuando no haya cambios en la población. Mientras no se cumpla la condición de término se hace lo siguiente:



  • Selección Después de saber la aptitud de cada cromosoma se procede a elegir los cromosomas que serán cruzados en la siguiente generación. Los cromosomas con mejor aptitud tienen mayor probabilidad de ser seleccionados.
  • Recombinación o Cruzamiento La recombinación es el principal operador genético, representa la reproducción sexual, opera sobre dos cromosomas a la vez para generar dos descendientes donde se combinan las características de ambos cromosomas padres.
  • Mutación modifica al azar parte del cromosoma de los individuos, y permite alcanzar zonas del espacio de búsqueda que no estaban cubiertas por los individuos de la población actual.
  • Reemplazo una vez aplicados los operadores genéticos, se seleccionan los mejores individuos para conformar la población de la generación siguiente



John Hollander

Pero ¿cómo aplicar esto en el mundo real de un programa? El siguiente ejemplo, aunque trivial, nos puede ayudar a entender esto.

Dados los dígitos del 0 al 9, y los operadores +,-,* y /, hallar una secuencia que represente un número objetivo. >Los operadores se aplicarán de izquierda a derecha como se van leyendo.

Por ejemplo, dado el número objetivo 23, la secuencia 6+5*4/2+1 sería una posible solución. Si se busca el 75.5, entonces 5/2+9*7-5 sería una posible solución. Nótese que los operadores se aplican de izquierda a derecha y no usando precedencia de operadores.

Teniendo el problema definido, pasamos a codificarlo. Como queremos hacerlo a partir de un algoritmo genético, nuestros cromosomas serán una cadena de bits. Podemos representar los números y sus operadores así:

0: 0000
1: 0001
2: 0010
3: 0011
4: 0100
5: 0101
6: 0110
7: 0111
8: 1000
9: 1001
+: 1010
-: 1011
*: 1100
/: 1101

Los genes 1110 y 1111 no se usan y serán ignorados si son detectados en el algoritmo.

Para la solución '6+5*4/2+1' podemos representar esto como:

0110 1010 0101 1100 0100 1101 0010 1010 0001
6 + 5 * 4 / 2 + 1

Estos son los genes que forman el cromosoma 011010100101110001001101001010100001, que es la solución.

Cabe decir que si hallamos la cadena:

0010 0010 1010 1110 1011 0111 0010
2 2 + ?? - 7 2

estaríamos realmente representando la operación 2 + 7.

Llegamos pues a la parte más difícil, la de hallar una función de aptitud (fitness), la cual se acerque lo más posible al resultado que queremos (el número objetivo). En este proyecto usaremos una puntuación de aptitud que es inversamente proporcional a la diferencia entre la solución y el valor decodificado que representa el cromosoma hallado. Si por ejemplo, el número objetivo es 42, el cromosoma 011010100101110001001101001010100001 tiene una puntuación de aptitud de 1/(42-23) o 1/19. Si la solución se adhiere al valor objetivo, podrías encontrar algo como 1/(42-42), lo cual nos daría una división entre cero. Podemos desde luego considerar este caso para no caer en un error y que el sistema se detenga.

Otro punto importante es el de tener que usar todos los genes en el cromosoma que dé el resultado. Así, si el número objetivo es 42, + 6 * 7 / 2 no da el resultado correcto aunque contenga la subcadena 6 * 7.

Para entender las ideas, no hay mejor idea que intentarlas, siguiendo la máxima adjudicada a Benjamín Franklin: Si me lo dices lo olvido, si me lo enseñas lo recuerdo, si me involucras aprendo. Sin embargo, si se desea experimentar, se puede descargar el código en C, Java o Delphi y ver cómo fue programado (ver referencias).

Como un bono a quien haya llegado hasta este punto, hace tiempo escribí un libro sobre Vida Artificial, recursión y temas afines. En algún momento se explora el algoritmo genético. El libro se puede comprar en formato Kindle por menos de 6 dólares y si lo hacen, se los agradecería. Sin embargo, lo pongo a disposición gratuita por siete días a los primeros 100 lectores que quieran descargarlo, lo que ocurra primero. Este es el enlace.

Referencias:

AI-Junkie 
Wikipedia 
Código en Delphi 
Código en Java 
Código en C

Wednesday, November 25, 2015

Las reacciones de los mexicanos


Vivimos en un país que tiene -ya lo he dicho antes- las mejores leyes del planeta. El problema es que todas las leyes en este país no sirven ante la corrupción y la impunidad que hemos vivido desde hace muchísimos años en México. Por ello, cuando sale alguna iniciativa sobre alguna nueva ley, lo único que pensamos los mexicanos es que ahora habrá un nuevo mecanismo para sacarnos dinero si por alguna razón "violamos" la ley propuesta. Y si nos remitimos a la cotidianidad, es evidente la transa cotidiana. Simplemente por donde vivo encuentro más de un puesto de películas piratas en donde por 10 pesos se puede conseguir la película de estreno. Y estos puestos están a la vista de la autoridad. Usos y costumbres de los mexicanos.

Y si hablo de esto es que vi el siguiente video, en donde una señora tira su basura por la zona de Sotelo. Pero en un operativo de la zona de Lomás de Sotelo en conjunto con la delegación,la empiezan a grabar y se le enfrentan. Le pide quien graba que recoja su basura, pero la mujer no sólo no piensa hacer eso, sino que se pone agresiva, ¿y cómo no ponerse agresiva cuando en este país nadie va a venir a decirle que cumpla con la ley? El de la cámara le pide reiteradas veces que recoja su basura, pero la señora no colabora. Finalmente la remiten al juez cívico y entonces la señora prepotente cambia su actitud y le suplica al de la cámara "que no sea gacho". Pero ya no hubo marcha atrás y la señora fue remitida al juez cívico, en donde pagará una multa y perderá parte del día.



A mí me da gusto que el personaje que enfrentó a esa señora no haya cedido. Se ganó con creces lo que le pasó y estoy seguro que no repetirá semejante actuación. Si le vuelve a ocurrir algo por el estilo, seguramente recogerá muy rápidamente su basura y olvidará que existió esa prepotencia mexicana, tan característica y tan mala idea para la convivencia de una ciudad. El video completo muestra un ejemplo de cómo somos. Y mientras seamos como esa señora, este país simplemente no es víable.

Sunday, November 22, 2015

Un problema táctico con una solución inesperada



Muchas veces en ajedrez se llega a posiciones donde uno de los bandos ha acumulado todas las fuerzas posibles por ejemplo, contra el rey enemigo. Y esto parece ser lo que ocurre en la siguiente posición (ver diagrama), en donde las blancas están amenazando dar mate en dos jugada, empezando por 1. Dxh6 y 2. Cg4#. Aparentemente todas las piezas blancas están coordinadas. Pero ¿qué podemos decir del negro? Pareciera que no hay salida y que deben rendirse. Para colmo, sus piezas no parecen estar coordinada ni tener un ataque ganador. ¿Pero es así? En la posición del diagrama juegan las negras. ¿Cómo jugaría usted?

La solución es:

1... Te1+! 2. Txe1 Dxc2+! 3. Rxc2 Cd4+ 4. Rb1 (4. RKd1 Cxb2#) 4... Cc3+ 5. bxc3 (5. Ra1 Cc2#) 5... Tb8+ 6. Ab7 Txb7+ 7. Ra1 Cc2#. Simplemente impresionante. Nótese como el alfil de h6, aunque está clavado, tiene influencia en la posición.

Cabe señalar que 1... Dxc2+? no sirve, pues después de 2. Rxc2 Cd4+ 3. Rd1 Cxb2+ 4. Rc1 Te1+ 5. Rxb2 Tb8+ 6. Rc3 Cb5+ 7. Rc4 d5+ 8. Axd5 Txh1 9. Axh1 Ca3+ 10. Rd4 Tb4+ 11. Rc3 Txh4 12. Axh4, las negras están absolutamente perdidas.

Es interesante señalar que Komodo 9.02 encuentra la solución de inmediato. Avisa mate en 7 jugadas, por parte del negro. Esto es el poder de la tecnología aplicada al ajedrez.

Monday, November 16, 2015

Para quien quiera programar en Prolog


Prolog (PROgramming in LOGic) es un lenguaje funcional, declarativo, que a diferencia de los lenguajes de programación imperativos, en este caso lo que hace es describir el problema y Prolog, a través de su mecanismo de inferencia (implementado por Robinson en 1968), da los resultados a la problemática definida. Parece magia en algún sentido porque ¿cómo puede ser que un programa mecánico llegue a una conclusión en base a inferencias? Pues no lo es tanto. Prolog usa hechgos y reglas para llegar a conclusiones. Por ejemplo, podemos definir los siguientes hechos:

padre(juan,manuel).
padre(pedro,manuel).

En este caso leemos "manuel es el padre de juan" y "manuel es el padre de pedro".

¿Cómo podríamos hacer la inferencia evidente de que son hermanos? Muy fácil, creando la siguiente regla:

hermanos(X,Y) :- padre(X,Z), padre(Y,Z), X=\=Y.

Lo cual se lee: X y Y son hermanos SI el padre de X es Z, el padre de Y es también Z y X no es Y. 

Tenemos que aclarar esto último (X no es Y), pues sino, el programa reportaría que juan es hermano de sí mismo o que pedro es hermano de sí mismo, lo cual lógicamente no tiene sentido.

Y quizás estamos abreviando demasiado lo que puede hacer Prolog, pero la idea es ésa: poder hacer inferencias y llegar a resultados. Es interesante aclarar que en un lenguaje como estos, muchas veces caemos en el no determinismo, es decir, no podemos saber qué clase de respuestas entregará el programa y si éste entregará acaso alguna respuesta. Un ejemplo de esto puede verse en el problema que Bertrand Russell expresara: "en un pueblo existe un barbero, el cual rasura a todos aquellos que no se rasuran a sí mismos". Y la pregunta que hace Russell: "¿Quién es el que rasura al barbero?

Este tipo de problemas se puede expresar en Prolog, a pesar de que lógicamente no parece haber un resultado. Russell -de hecho- se inventa una teoría llamada "de tipos", en donde los conjuntos están perfectamente definidos. En esta teoría, el filósofo y matemático nos dice: "la pregunta no tiene sentido, es inválida".

Pues bien, el problema de Russell se puede expresar de la siguiente manera en Prolog:

rasura(X,Y) :- not(rasura(Y,Y)).

Esto se lee así: X rasura a Y SI Y no se rasura a sí mismo.

Como puede verse, es una regla recursiva, que se llama a sí misma. Si se ejecuta este programa en algún intérprete o compilador de Prolog, el resultado será simple: error por memoria insuficiente, overeflow, etcétera.

Quien tenga interés en desarrollar programas de esta naturaleza, o de entender mejor el paradigma funcional y declarativo, bien puede usar intérpretes y compiladores que son de código abierto y/o libres. Un ejemplo de ellos es SWI Prolog, el cual es una implementación muy cercana al Prolog estándar. que si mal no recuerdo, tiene ya más de 15 años de haberse propuesto.

SWI Prolog está documentado, hay ejemplos, tutoriales, comunidad de usuarios e incluso, se puede correr en el navegador. Todo esto la hace una herramienta estupenda por muchos motivos, aparte de gratuita, está muy bien cuidada. Échenle un ojo, de verdad me ha convencido.


Thursday, November 12, 2015

Mate en seis jugadas


Hace unos días, exactamente el 9 de este mes de noviembre, jugué una partida rápida (de 1 minuto por jugador), contra alguien cuyo apodo es Zambianizer, que conducía las piezas negras La partida no es ninguna maravilla, pero llegué a la siguiente posición con 7 segundos en el reloj. Aquí, no hallé la manera de ganar y con tan poco tiempo, terminé perdiendo por tiempo. ¿Puede usted lector/lectora, la secuencia ganadora. Komodo, Fritz, StockFish, etcétera, encuentran mate en seis jugadas.



morsa - zambianizer
ICC 9/11/2015
Juegan las blancas y dan mate en seis jugadas


La solución es:

27. Th8+! Rxh8 28. Dxe8+ Dg8 29. Th1+ Rg7 30. Th7+! Dxh7 31. Df7+ Rh8 32. Dxh7#

Rutinaria, diría el Maestro Internacional Guil Russek, pues todas ls jugadas son obligadas. Lo que me llama la atención es cómo el sacrificio de la torre blanca en h8 es una jugada literalmente de un patrón de ataque. Cabe destacar que las máquinas ven el mate en 6 jugadas de forma instantánea.

___
(*) Foto cortesía de Mike Thomas

Thursday, November 05, 2015

¿Legalización de la marihuana?



Ayer muchos medios informativos hablaban de una decisión de la Suprema Corte de Justicia de este país, en donde se legalizaba el consumo de la marihuana para fines recreativos. Vi muchos tuits aplaudiendo la medida. Fotos de gente fumando su porro, etcétera. Pero curiosamente, la efervescencia de la nota decayó cuando se supo que esto sólo se aplicaba a cuatro ciudadanos que habían interpuesto un amparo. Es decir, estos cuatro personajes pueden ya consumir marihuana de forma lúdica. La ley ya no se los prohíbe a ellos.

Desde luego que esto abre el camino para que la discusión se generalice y considerando esta decisión, la Corte Suprema de este país podría eventualmente quitarle la ilegalidad al consumo de la marihuana con motivos recreacionales. Pero ¿Es buena idea?

Yo opino que no. La drogadicción no es un asunto recreacional. No existe seguramente ninguna droga recreacional segura. Los que apelan por la despenalización de la marihuana dicen que no hay una sola víctima por el uso de la misma. Pues lo mismo se podría decir del tabaco o del alcohol, porque en todo caso estas sustancias no matan en un cortísimo plazo como quizás la cocaína o heroína, que además de ser muy peligrosas, son muy adictivas.

Para favorecer la despenalización, se habla de que la marihuana tiene usos médicos. Muy bien, muchas drogas basadas en el opio existen y se usan cuando el dolor de los pacientes suele ser insoportable. Si la marihuana tiene esos efectos, pues muy bien, prodúzcase en pastillas o jarabes pues el componente activo se conoce. Vamos, no se tiene que fumar para que funcione.

La realidad es que hay muchos estudios, ninguno definitivo por cierto, en donde se habla de los pros y contras de esta sustancia. Se dice que puede provocar una adicción menor al tabaco, por ejemplo, pero que puede provocar trastornos mentales que a la larga lleven a condiciones extremas y a la muerte. A mí me queda claro que drogarse por recreación, no parece ser una buena idea. Sería mejor quizás promover actividades lúdicas como el deporte, que genera endorfinas en los que lo practican y es mucho más saludable que fumar marihuana.

Hay quien aduce que ya somos una sociedad adulta y el gobierno debe dejarnos tomar nuestras propias decisiones. Bueno, sí y no. Imaginemos que el gobierno decide quitar los semáforos porque como somos adultos, sabremos pasar y dejar pasar. Pues sería una medida imposible de realizar porque la condición humana del egoísmo impediría que funcionara la medida. Así, si para algo tan simplón como quitar o no un semáforo no somos lo suficientemente maduros para pasar y dejar pasar con criterio, menos en el caso de la marihuana. Lo primero que veríamos son los excesos y en todo exceso caemos en otras situaciones que pueden desembocar en algo más peligroso.

Imaginen que se permite que la gente fuem marihuana y alguien decide irse a su casa manejando. Dicen que la marihuana relaja. Bueno, pues en ese relajamiento ese personaje drogado probablemente no podrá tener los reflejos cuando ocurra un incidente de tráfico. Podría chocar contra otro auto y además, causar un accidente mortal. ¿Y todo porque viene drogado, pero permitido por esta sociedad que se siente adulta?

Por mí, que se droguen, que se pongan pachequísimos, que fumen hasta que no tengan un alveolo sano, que beban alcohol hasta que se mueran de cirrosis. Que lo hagan sí, pero que no metan a terceros en este asunto. Los casos de gente alcoholizada manejando y causando terribles accidentes no es novedad. Los casos de cáncer de pulmón están asociados al consumo del tabaco y además, se ha hablado en los últimos años gente que nunca ha fumado pero que tiene cáncer de pulmón, asociado al humo de los fumadores y de la convivencia con estos. Hay curiosamente gente que fuma 70 años de su vida y se muere de vejez a los 90 años. Hay otros que tienen 50 años y traen un cáncer insalvable o enfermedades como EPOC, que les dan una vida miserable, viviendo todo el tiempo con falta de aire. Los problemas del tabaquismo, como del alcoholismo, son problemas de salud pública. Y ahora ¿queremos meterle más ruido al sistema de salud con los casos de enfermedades provocadas por la marihuana?

Y si vamos a otras drogas más peligrosas, ¿por qué no legalizarlas? ¿Ya qué más da? ¿No somos adultos y sabremos hacer uso de nuestras libertades nuevas? Lo más probable es que legalizar la cocaína y heroína sea aún peor idea. Pero ya subidos en este barco, todo podría pasar.

Yo puedo entender que la gente quiere tener libertad de hacer muchas cosas, pero pensemos en las consecuencias sociales. A todos los que apoyan la medida ¿Les gustaría ver a sus hijos pachecos por fumar marihuana? ¿No buscarían impedirlo o evitarlo de alguna manera?

Monday, November 02, 2015

¿Sirve para algo orar? (segunda parte)


Hace unos días se generó una alarma por la llegada del huracán "Patricia" el cual, se decía, era el huracán más fuerte de toda la historia de la humanidad. Patricia iba a pasar por el territorio mexicano y el gobierno estaba haciendo todo lo posible por tomar las previsiones necesarias. Se reunió el gabinete para discutir las medidas. Se usaron las redes sociales para informar a la población. Los noticieros no hablaban de otra cosa y como fondo tenía unas imágenes de un huracán gigantesco y devastador. En Facebook se publicaban imágenes de la Estación Espacial Internacional que parecían impactantes. Bueno, la cosa parecía gravísima.

Pero nada pasó. Patricia tocó tierra y por arte de magia se degrado a tormenta tropical. Las peores previsiones fueron aparentemente infundadas. Esto, desafortunadamente, dio pie a dudar de la promoción mediática con la que "inundó" el gobierno sus acciones. Hubo el "sospechosismo" ya habitual en el mexicano y se empezó a pensar que ni era tan grave el problema y que tampoco era Patricia el huracán más mortífero de la historia.

Enrique Peña Nieto destacó la fe del pueblo de México en sí mismo y su unidad, que se unió con cadenas de oraciones e incluso solidaridad, con creación espontánea de centros de acopio para afrontar la llegada del huracán Patricia, que en buena medida permitieron superar esta crisis.

Y de inmediato surgieron las críticas, totalmente justificadas, pues asignarle a la divinidad el habernos salvado, previas cadenas de oraciones, es regresar al oscurantismo. Para empezar, si existiese tal divinidad, ¿por qué nos mandó un huracán? Pero más allá de eso, habría que tomar una actitud más científica. ¿Pueden las cadenas de oraciones hacer un cambio? ¿Qué hay de quienes rezan para ayudar a quien está enfermo, o a quien tienen que intervenir quirúrgicamente? ¿Será posible que las oraciones produzcan una diferencia?

Si nos remitimos a la mecánica cuántica, sabemos que el observar un experimento afecta los resultados de éste. Y si esto pasa en partículas subatómicas, ¿no pasará en los eventos cotidianos? ¿Cómo podríamos probar que esto ocurre o bien que es un simple mito que se ha eternizado de generación en generación?

No soy el primero que ha pensado en esto. Hay muchos estudios que demuestran que no hay efecto en el rezar o al menos, siquiera un pequeño efecto. Por ejemplo, en 14 estudios del 2006 se concluyó que no hubo un efecto discernible. Sin embargo, en el 2007, en 7 de 17 estudios tuvieron un efecto pequeño pero significativo en esto de orar por alguien. No obstante esto, se hizo notar que los estudios más rigurosos no mostraron nada significativo en sus resultados.

Hay estudios que datan de 1872, donde el científico victoriano Francis Galton hizo el primer análisis estadístico. No halló que rezar sirviese para algo. Más de 100 años después, Byrd -en 1988- usó a 393 pacientes de la unidad del área de coronarias del Hospital General de San Francisco. Los hallazgos de Byrd pueden resumirse en que parece haber un efecto y que éste es benéfico para los enfermos. La reacción de la comunidad científica fue mixta. Algunos dudaron de su rigor para el trabajo realizado. Otros concluyeron que esto no tenía ningún pero.

Harris, en 1999, decidió replicar los hallazgos de Byrd pero en condiciones experimentales más estrictas, donde notó que los resultados del este investigador no fueron totalmente ciegos y concluyó, después de un trabajo muy cuidadoso, que no era posible repetir los resultados de Byrd y que además, los resultados favorables podían explicarse por probabilidad.

Hay otros estudios, pero el consenso general indica que no parece servir de nada orar. Sin embargo, considerando esto, decidí realizar mi propio experimento. Escribí un programa simple que busca hallar si el concentrarse en un número pudiese cambiar el resultado de la elección azarosa del 0 al 9 en la computadora. El mecanismo funciona así:


  • Se le pide un número al usuario (del 0 al 9)
  • Se le da un tiempo determinado para que se concentre (rece), pidiendo que ese número es el que eligirá la computadora al azar
  • Al terminarse el tiempo, el sistema arroja el número elegido al azar y lo despliega (en rojo si la elección del usuario no fue la de la máquina y en verde si el usuario acertó al número elegido al azar)
  • El sistema lleva una bitácora de experimentos realizados para estudiarse posteriormente.


Si existe una correlación entre el número que pide el usuario que salga contra el que salió, podríamos pensar que hay un elemento más allá de la simple estadística. En términos de probabilidad, un usuario podría acertar 1 de cada 10 intentos. Quizás acertar 2 de 10 sea relativamente significativo pero 6 o 7 de 10 veces sería ya para pensarse.

¿Podría ser este un experimento para probar si sirve orar? No estoy muy seguro. Claramente el algoritmo pseudo-azaroso de la máquina podría ser el primer pero. No obstante esto, podemos empezar a probar si de alguna manera algún usuario se concentra lo suficiente y logra vencer a la probabilidad del evento.

A quien le interese el programa, puede pedírmelo a morsa@la-morsa.com y se lo mandaré por correo electrónico.


Referencias:

Wikipedia 

Friday, October 30, 2015

¿Tienen alguna utilidad las cadenas de oración?



Hace tiempo escribí sobre si sirve el rezar y la conclusión a la que llegué es que no, no sirve, es inútil. Sin embargo, con el evento del huracán Patricia, que supuestamente iba a devastar la región correspondiente pegada al océano Pacífico -y que no pasó nada, surgieron en las redes sociales imágenes para hacer "cadenas de oración" por quienes iban a sufrir el meteoro. Se habló tanto de que éste era el huracán más peligroso de toda la historia de la humanidad, que se esperaba lo peor, pero nada pasó. Entonces los que creen en las cadenas de oración atribuyeron que "Patricia" se degradara a tormenta tropical fue un asunto de la oración que los mexicanos practicaron.

Pero si esto hubiese sido poco, salió Enrique Peña Nieto a decir que gracias a las oraciones de los mexicanos, en parte, no había pasado nada. Vamos, que esto está fuera de lugar El mandatario no tiene porqué atribuir que no pasó nada cuando probablemente la ciencia pueda dar argumentaciones más racionales y lógicas.

Pero la pregunta sigue ahí: ¿Sirve orar? ¿Sirven las cadenas de oración? Comentaba con Pilar y ella me dijo que pensaba que podían servir. De hecho, me dio un argumento que no pude rebatir: "si en la física un experimento lo modifica porque lo observamos, ¿Por qué una cadena de oración, en donde mucha gente pida lo mismo, no podría modificar la trayectoria de -por ejemplo- un huracán".

En la física se sabe que la observación de un experimento modifica a éste. Así, la naturaleza onda/partícula puede verse reflejada cuando hacemos un experimento y lo observamos -o no. Ya escribí al respecto aquí. ¿Por qué pasa esto? no se sabe. La realidad es que el hecho de observar (con un aparato, no tiene que ser un ser consciente), modifica el experimento. Pensemos que una gran cadena de oración podría cambiar un evento como el del huracán. ¿Podría ser? No lo sé aunque claramente poder probar que algo en el comportamiento del huracán ocurre porque se reza no veo cómo probarlo.

Sin embargo, me di a la tarea de pensar una manera de ver si las oraciones en particular sobre un tema, podrían alterar el comportamiento de algo externo. Se me ha ocurrido entonces hacer un programa de computadora que por ejemplo, seleccione un número del 1 al 10 y entonces -antes de seleccionarlo- el usuario tenga por ejemplo 25 segundos para pensar fuertemente con un número en particular, intentando mentalmente que la máquina -con su algoritmo pseudo-aleatorio- producirá después de que pase ese tiempo de fuerte concentración del individuo que usa el software. Con la máquina podemos hacer un registro de los intentos y si el programa "cedió" al rezo o a la petición mental del usuario y entonces el sistema azaroso puso el número que el usuario pensó.

Para asegurarse que no se haga trampa, el usuario deberá tener lápiz y papel en donde anotará el número que quiere que la máquina produzca. El sistema a los 25 segundos (se puede cambiar el tiempo para concentrarse en el número que se piensa), producirá un número del uno al diez y preguntará al usuario si acertó. Se puede entonces hacer una estadística trivial. Si los resultados son azarosos, el usuario tendrá 1/10 de probabilidades de que aparezca el número que pensó. Si un usuario puede modificar al programa, tendría que ser estadísticamente significativo.

Cabe decir que ya alguna vez escribí un programa para saber si se tenía percepción extrasensorial. Aquí la cuestión va por otro derrotero. Se trata de influir en la decisión del software para poner un número de diez posibles después de concentrarse en un número en particular por 25 segundos. De hecho, no se pone un botón para que la máquina dé su resultado para no "interferir" con la concentración del usuario.

Cuando le comenté a Pilar de mi idea de hacer un programa de esta naturaleza, me dijo que los usuarios deben creer que el creer en algo, en que el orar, puede ser significativo y que puede hacer un cambio.

Pues bien, en mi siguiente artículo hablaré de este programa y lo pondré a disposición de todos los que se interesen en el mismo.

Monday, October 19, 2015

¿Pueden tener las computadoras intuición en el ajedrez?



El tema de la intuición siempre nos lleva por caminos misteriosos porque de alguna manera, quien por intuición, sin tener toda la información sobre un problema, halla la solución, nos asombra y no podemos explicar cómo es que lo hizo. Hay jugadores de ajedrez que desde muy pequeños saben dónde deben ir las piezas. Capablanca era uno de ellos. Kaspárov también desde chico mostró habilidades notables al respecto. Muchos otros jugadores de altísimo nivel nos han enseñado que desde pequeños tuvieron esa capacidad impresionante para jugar bien.

Uno podría preguntarse si la intuición se puede aprender. Yo estoy convencido que sí y además, explico qué hay que hacer en mi librito publicado por Chessy "Desarrolla la Intuición en Ajedrez". Pero más allá de eso, ¿Puede aprenderse la intuición de forma que pueda ser programada en un motor de ajedrez? ¿Cómo se podría hacer esto? Pues bien, hallé un estupendo librito "Chess and Machine Intuition" (1998), de George W. Atkinson. En él hace un desarrollo bastante completo del "estado del arte" en el tema del ajedrez, las computadoras y la intuición. Fragmentos del libro pueden hallarse en Google y dan una buena idea del contenido si no se quiere comprar el libro físico, que cuesta unos 30 dólares.  Atkinson hace un interesante viaje por los primeros programas de computadora, los errores, los fracasos y al final de cuentas, los avances que se empezaron a ver después de que los científicos estudiaron el problema por alrededor de unos 50 años, llegando a la postre a derrotar al Campeón Mundial Garry Kaspárov, en un encuentro a seis partidas.


Y aunque el libro se lee casi de una sentada, para decirlo de manera coloquial, el capítulo 10 y 11 (los dos últimos), son extraordinarios. En el capítulo 10 Atkinson se pregunta cómo es que aprendemos y de hecho, pone ejemplos de sistemas que buscan aprender. Habla de perceptrones, de su boom inicial para después ser destrozado por la crítica científica. Y ese capítulo en particular es del que quiero hablar aquí. Atkinson se pregunta cómo es que los seres humanos llegamos a sintetizar información, a clasificarla. Y además, pone ejemplos de cómo las máquinas y sus programadores han intentado emular esta cuestión. Realmente el asunto lo lleva incluso a hablar de Hollander y de su sistema de "algoritmo genético", fundamental en el desarrollo de la "Vida Artificial" (como en el librito que escribí de ese tema y que está publicado como libro electrónico en Kindle/Amazon bajo el título "Jugando a ser Dios").

Entonces Atkinson y sus argumentos me dejaron pensando. ¿Podría haber manera no de clasificar patrones o configuraciones ganadoras en ajedrez, a partir de los conocimientos humanos sino que, al contrario, la propia máquina tuviese alguna manera de hallar los elementos que hacen de una combinación ganadora? Es una pregunta que simplemente por el momento no puedo contestar. Me gustaría decir que sí, que se puede, pero francamente no se me ocurre ninguna idea para empezar a trabajar sobre ello. ¿Habrá que crear quizás una serie de primitivas (algo así como si fuesen axiomas), para pasar a este posible nivel de abstracción donde la computadora reconoce posiciones favorables? ¿Cómo hacer eso? Misterio.

Por lo pronto aquí dejo las cosas. En la medida que se me vayan ocurriendo ideas, las plasmaré en este blog.

Tuesday, October 13, 2015

Compresión de imágenes: Codificación/decodificación RLE (Parte II)


En el artículo pasado hablamos de una manera sencilla de comprimir imágenes en tonos de gris. Desde luego que esta idea es limitada y finalmente no funciona de forma muy adecuada para las imágenes en color. Pero antes de discutir el caso de las imágenes en color, debemos considerar otras alternativas que pueden usarse para comprimir imágenes en tonos de gris. Uno de los algoritmos más usados es el llamado RLE (Rule Length Encoding). La idea funciona así: sabemos que una imagen en tonos de gris contiene una serie de números que se repiten, en particular tripletas de pixeles (en sus componentes R, G y B), los cuales son el mismo color. Si tenemos regiones en donde se repiten estos valores R, G y B, bien podríamos pensar en sustituirlos por el byte que hemos leído y un contador que nos indique cuantas veces se repite el mismo. Esto es básicamente el RLE.
Supongamos que tenemos una imagen de puntos al azar, de todos los posibles tonos de gris. Si son al azar, probablemente no tengamos secuencias largas de un solo tono de gris, por lo que por ejemplo, si la imagen original contiene los siguientes bytes (en hexadecimal):

de de de de de de de de 98 98 98 98 98 98 ff ff 01

podríamos crear un nuevo archivo que tuviese los siguiente valores:

de 08 98 06 ff 02 01 01

Lo cual nos diría que tendríamos 08 bytes con el valor de, 06 bytes con el valor 98, 2 bytes con el valor ff y finalmente un byte con el valor 01.

Cabe señalar que el esquema RLE bien podría usarse para comprimir no solamente imágenes, sino cualquier archivo, aunque muchos no son muy susceptibles de sacar ventaja de la repetición de símbolos. Por ejemplo, sería mala idea usar RLE para comprimir textos, pues estos no tienen repeticiones de letras contíguas. Por ende, no es el mejor de los esquemas para archivos de esa naturaleza.

Los algoritmos básicos de codificación y decodificación son los siguientes

CODIFICACIÓN RLE:



DECODIFICACIÓN:



Nótese que este par de rutinas funcionan con todo el archivo que se desea procesar, lo cual no necesariamente es la mejor idea. Lo más sensato es usar el "canvas" (en donde reside la imagen en un eventual software de procesamiento de imágenes) y aplicar RLE a los pixeles. De hecho, si se procesa, como en este caso, un archivo completo, estamos intentando también comprimir el encabezado que muchos formatos gráficos tienen, incluso los archivos BMP. De nuevo, se advierte que esto es simplemente una idea y el artículo muestra una primera implementación general para ilustrar lo que hay que hacer.

En pruebas hechas con estos algoritmos se halló que una imagen en tonos de grises (que contenía simplemente un bloque en un solo tono de gris), que ocupaba originalmente 212 Kbytes, se redujo a 3Kbytes. Para saber el factor de compresión, dividimos (3K / 212K) * 100, lo cual entrega 1.415, es decir, el archivo comprimido ocupa menos del 2% del archivo original. Desde luego, las imágenes cotidianas no son tan buenas para la compresión. Sin embargo, en casos como en el del ejemplo, es espectacular la compresión de las imágenes.

Si por ejemplo, usásemos este algoritmo para procesar una imagen en tonos de gris que están al azar en una imagen, pudiese no tener ni remotamente los resultados mencionados. Utilizando la siguiente imagen



hallamos que la compresión llego a 141 KBytes, cuando la imagen original fue de 212 KB. Es decir, 66.50 % de compresión sobre la imagen original.

Sunday, October 11, 2015

Introducción a los algoritmos de compresión de imágenes


En el curso que doy de Proceso Digital de Imágenes (PDI), es siempre importante hablar de un tema que muchas veces es difícil de abordar. Se trata del de la compresión de archivos, en particular, del de la compresión de imágenes, el cual en alguna medida permite que las mismas ocupen menos espacio en los medios de almacenamiento y mejor aún, que la transmisión de las imágenes y fotos sea más rápido. Por ejemplo, si puede reducir una imagen al 10% de su tamaño en bytes, pues puedo, en principio, enviar diez imágenes por el precio de una, para decirlo de manera coloquial. Así, la compresión ayuda muchas veces a ser más eficientes en lo que se refiere al uso del ancho de banda por Internet. Por otra parte, la compresión permite usar menos espacio de almacenamiento.

Hay básicamente dos esquemas usados en este tema:

  • Compresión sin pérdida de información (losseless)
  • Compresión con pérdida de información (lossy)


En la primera, la compresión y descompresión del archivo (para convertir la imagen comprimida y podamos verla), no pierde información del archivo original. Vamos, al descomprimir la imagen es estrictamente igual a la original. La segunda compresión, en cambio, pierde información y el efecto de comprimir quizás no lo note el ojo humano al descomprimir y mostrar la imagen, pero si vemos a detalle veremos que habremos perdido información de la imagen original.

Cabe decir que a cambio de ahorrar bytes en el archivo original de almacenamiento, la versión comprimida debe descomprimirse y eso finalmente lleva tiempo. En cómputo no existe ningún procedimiento ganar-ganar. Si ganamos en espacio perdemos en tiempo y viceversa. Esto es un buen ejemplo de ello.

Los esquemas de compresión de imágenes son variados y los más usados son JPG o TIFF. Hace unos años, más de 20, el formato PCX, del cual hablaré en otro artículo próximamente, era uno de los más usados y simples, pero cayó en desuso ante sofisticados esquemas de compresión como los que plantean TIFF o JPG.

Pensando en cómo ejemplificar la compresión de imágenes, como una primera aproximación al problema, se me ocurrió que podía reducir a una tercera parte cualquier imagen que estuviese en tonos de grises. La razón de ello es simple: en 24 bits de color tenemos 8 bits para el rojo, 8 para el verde y otros 8 para el azul. Así, tenemos más de 16 millones de posibles colores con combinación de bytes R,G,B, que es el modelo conocido precisamente como RGB. Pero en tonos de gris tenemos solamente 256 tonos posibles. Cada tripleta R,G,B contiene R=G=B, es decir, las componentes de color en RGB son idénticas entre sí. Por ello, tenemos el tono de gris más oscuro (el negro), como (0,0,0), un poco menos negro será (1,1,1), menos negro aún será (2,2,2) y así sucesivamente. El blanco será (255,255,255).

Si esto es así, una imagen en tonos de gris puede reducirse a la tercera parte de su tamaño original leyendo una sola componente (el R, el G o el B de cada pixel de la imagen) y escribiendo en un archivo de bytes esa componente de cada pixel en la imagen. La idea es muy simple de programar y el algoritmo es éste:


(dar click en la imagen para verla más grande)

Cabe decir que cuando tengo la imagen que voy a procesar, primero la paso a tonos de gris tomando las componentes R, G y B, sumándolas y dividiendo de manera entera entre 3, es decir:

Gris := (R + G + B) div 3;

Así me aseguro que la imagen es de tonos de gris. De hecho, al convertir de color a tonos de gris ya perdemos información de color de la imagen, pero en este caso no es el asunto que discutimos.

Ahora bien, ¿cómo podríamos mostrar la compresión lossy, que es donde sí se pierde información al recuperar la imagen comprimida? Una idea sencilla resultó ésta: Tomemos una imagen en color y entonces revisemos las componentes de color (R,G,B). Tomemos el Rojo, la R y listo, digamos que ése es el tono de gris. Por lo tanto la imagen final en cada pixel tendrá el componente (R,R,R) en donde había antes un (R,G,B). ¿Qué tanto podría cambiar la imagen original en blanco y negro usando solamente la componente R de cada pixel?

He aqui dos imágenes. La de la derecha es la imagen en tonos de gris original. La de la izquierda es utilizando solamente la componente R(ed) para formar el tono de gris.



Tonos de gris vs Lossy (usando la coordenada R)

La diferencia visual quizás no es muy notable, pero de alguna manera, si nos fijamos con cuidado, veremos que la imagen "lossy" es un poco más oscura. Si en lugar de usar la componente R usáramos la B, encontraríamos un resultado "lossy" más obvio:


Tonos de gris vs Lossy (usando la coordenada B)

De hecho, se me ha ocurrido hacer un experimento más: Tomemos la imagen original en tonos de gris y saquemos los tres componentes de color, R, G y B, tomando uno de ellos al azar para formar el pixel correspondiente como (R,R,R), (G,G,G) o (B,B,B). Tal vez así, al elegir consistentemente el R, el G o el B de forma que se distribuyan esos tonos de gris formados con una sola componente, el resultado final podría ser mejor. Hice la prueba, pero me llevé una sorpresa inesperada:



Tonos de gris vs Lossy al azar (entre coordenadas R,G y B)

En resumen, usar una sola componente parece que no es tan descabellado si es que usamos la componente R o la G. Con la componente B la descompresión si muestra que se ha perdido mucha información de la imagen original. Probablemente la coordenada R sea la mejor opción en este caso.

El esquema mostrado reduce las imágenes a un 33% del tamaño original, lo cual quizás no puede considerarse malo, peor por ejemplo, esta misma imagen en JPG se reduce dos veces lo que podemos lograr con esta idea.

Aún así, no hay ninguna mejora con respecto al tamaño de la imagen comprimida. Digamos que es independiente de la componente elegida aunque para fines ilustrativos, usar el tono de gris calculado antes de procesar la imagen nos da una imagen resultante en donde no se pierde información de la imagen original.

Quien quiera mi programa de demostración, pídamelo a morsa@la-morsa.com y a vuelta de correo lo recibirá de manera gratuita.

Saturday, October 10, 2015

El Bachoco fue a la "estética"


Jorge es un muy buen amigo. Por algún tiempo, aparte de sus actividades deportivas (nadador consumado que en el 2013 cruzó el canal de la mancha en relevos), se dedica a tener los automóviles impecables. Pronto va a abrir un negocio en Queretaro, una especie de "estética" para que los autos que le manden se vean no limpios, sino limpísimos, sin mancha alguna. El otro día me dijo Pilar que regresara antes de las cino de la tarde a casa porque Jorge iba a pasar por mi coche para "llevarlo a la estética". Me hizo gracia la puntada y ahí estuve.

Jorge se llevó mi coche y pensé mientras se iba "¿pues qué tanto puede cambiar al 'Bachoco', que ha dado tantos años de fiel servicio?". Con 16 años de vida, mi Chevy -pensaba- quedaría relativamente limpio pero no mucho más allá de mis expectativas. Pero la sorpresa vino cuando Jorge me mandó las fotos del proceso realizado. Sólo tengo una palabra: ¡Sorprendente!

Agradezco las atenciones para con el Bachoco. Quedó como dicen en la TV: "Rechinando de limpio".











___
(*) Se puede dar click a las imágenes para verlas en su tamaño real

Friday, October 09, 2015

Fallece Alejandro Preve



El artífice del Torneo Carlos Torre, que se lleva a cabo cada diciembre en Mérida, Yucatán, falleció este 9 de octubre. Físico de profesión, habiendo nacido un 23 de abril, pero diez años antes que yo, dedicó un gran esfuerzo por hacer del Torneo en memoria del Gran Maestro mexicano Carlos Torre, uno de los mejores del mundo. Por sus ediciones, que creo se cuentan fácil más de 20, desfilaron jugadores de la talla de Leinier Domínguez, Vassily Ivanchuk, Milov, Vera, Bruzón, Miles, Gilberto Hernández. José González, etcétera. Preve le dio un empuje al Torre extraordinario y sé de primera mano que muchas veces tuvo que poner dinero de su bolsa para pagar premios y para que no hubiese nada que manchara este enorme esfuerzo.

Alejandro Preve, además de ser uno de los organizadores de ajedrez más importantes en nuestro México, era un hombre extremadamente bondadoso. Preve probablemente logró que Yucatán se colocara como un ejemplo a seguir para que niños y jóvenes dedicaran su tiempo al ajedrez. Difícil hallar alguien con ese empuje. Como buen yucateco, era amable con todos y diría yo, demasiado amable. Lo vamos a extrañar y esperamos que la familia de Alejandro encuentre consuelo, aunque eso sé que siempre es difícil. Descanse en paz el buen amigo.

Monday, October 05, 2015

Las reglas del ajedrez competitivo


En la pasada Copa Mundial, que acaba de ganar Sergey Karjakin, surgió un problema entre el representante estadounidense y número 2 del mundo, Hikaru Nakamura, y su contrario Ian Nepomniachtchi. En una de las partidas del desempate, Nakamura tocó simultáneamente el rey y la torre para enrocarse. La regla dice que si se va a enrocar, primero se mueve el rey y después se desplaza la torre a su nueva posición. Nepomniachtchi perdió esa partida y fue eliminado de la Copa Mundial. Posteriormente, el gran maestro derrotado presentó una protesta indicando que los jueces debieron haber detenido el encuentro y obligar a Nakamura a mover la torre impidiéndole el enroque. De hecho, el encuentro se estaba grabando en video y se puede ver que por fracciones de segundo, Nakamura toca primero la torre.

Pero ningún juez hizo nada y el propio Nepomniachtchi tampoco. Hay muchas razones para no hacer nada. No lo notó en su momento y después, cuando vio el video, se dio cuenta de ello. No dijo nada porque su rival es el número 2 del mundo y resulta feo hacer un reclamo de esta naturaleza. Pero las reglas son las reglas y si los árbitros no hicieron nada, ¿por qué el afectado tampoco hizo el reclamo en su momento? Cabe decir que Nepomniachtchi tuvo una experiencia parecida contra Karpov, que en un torneo de partidas rápidas, éste último movió primero la torre y luego el rey para enrocarse. Ahí Nepomniachtchi buscó con la vista a algún árbitro pero eventualmente, sin que hiciese una reclamación en el momento, la partida continuó.

Hay que decir que las reglas del ajedrez competitivo son estrictas: pieza tocada, pieza jugada. Esa regla en particular suscitó una dificultad hace unos años en la partida entre Judit Polgar y Kasparov. El Campeón Mundial de ese entonces tocó un caballo y lo movió a otra casilla, pero aún no soltaba la pieza y entonces lo cambio a otra posición. De nuevo Judit, como Nepomniachtchi levantó la vista al juez pero no reclamó nada. El video de la partida muestra que Kasparov soltó la pieza por dos décimas de segundo, imperceptibles al ojo humano. El propio Kasparov dice que no sabe si soltó o no la pieza y yo en lo personal le creo. De nuevo, ¿por qué Judit no reclamó? Porque jugaba con el número 1 del mundo, porque probablemente no sabía si de verdad su rival había soltado la pieza.

Ahora bien, hay en el mundo del deporte algo que la FIFA llamó "fair play". Si pasaomo del futbol al mundo del ajedrez, podemos pensar que por ejemplo, tanto Karpov como Nakamura querían enrocarse y sí, lo hicieron de manera impropia pero seamos francos, era claro que buscaban enrocarse. Y sí, la regla indica el procedimiento pero ¿alguien le va a decir al excampeón del mundo que no conoce el procedimiento? Yo creo que el fair play se aplica perfectamente en este caso. Curiosamente, en el asunto con Nakamura, cuando se le informó de la protesta de su rival, el estadounidense dijo que en ningún momento pensó que había hecho algo mal. Yo en particular le creo.

El reglamento del ajedrez indica también que éste no puede contemplar todas las posibles situaciones que pueden darse en una partida de ajedrez y se deja al criterio del árbitro en todo caso las decisiones que no estén en el reglamento. Si los árbitros en la partida de Nepomniachtchi vs Nakamura no dijeron nada, si el gran maestro que perdió tampoco dijo nada, pues no hubo falta y ya el resultado no se puede cambiar ni se repite la partida.

Nepomniachtchi debe aprender la lección que debe extenderse a todos los ajedrecistas. Si uno, al estar jugando observa una irregularidad, puede pedir la intervención del árbitro. Si no lo hace y el juez tampoco dice nada, la falta queda sin consecuencias. Y me paso al plano cotidiano: si voy a comprar algo y noto que me dan mal el cambio ¿no digo nada? ¿tiene que estar un juez de lo civil ahí observando para ver si dice algo? No. Es obligación del afectado reclamar. Si se va de la tienda y regresa al día siguiente diciendo que le dieron mal el cambio, quizás no se analice el asunto ni le devuelvan nada. Será un castigo a no reclamar en el momento.


Monday, September 28, 2015

¿La mejor partida de la máquina Belle?


Ken Thompson junto con Joe Condon diseñaron una máquina para jugar ajedrez. Sin duda Thompson, que trabajó por muchos años en los Laboratorios Bell, después adquirido por AT&T, tenía ciertas facilidades para pedir presupuesto para el proyecto que quisiese, sino es difícil explicar cómo es que se pudo realizar un trabajo como el crear hardware específico para jugar al ajedrez.  La historia es fascinante y Thompson se consiguió a un ingeniero electrónico que de hardware sabía mucho, Joe Condon, quien fue el que diseñó las tarjetas electrónicas de la máquina de ajedrez que sería bautizada como Belle.

Cabe decir que probablemente Ken Thompson sepa bastante de ajedrez y de hecho, recuerdo que cuando visité los Laboratorios Bell (1993), en algún momento pasamos por una sala donde había mesas de ajedrez y relojes. Evidentemente el ajedrez no estaba ahí por casualidad. Y digo que Thompson de ajedrez debiese saber más que lo suficiente fue porque él intuía que su máquina de ajedrez requeriría una biblioteca de aperturas, la cual la saco de un libro en particular, el cual le llevó meses transcribir para poderlo usar en su sistema.

Así, Condon y Thompson hicieron una estupenda mancuerna tecnológica: el primero en hardware y el segundo en software. Belle ganaría tres veces el Campeonato Mundial de Ajedrez por computadoras y demostraría un buen bagaje de herramientas y técnicas que después de él se tomaron muy en cuenta para sus sucesores. Bien Ken Thompson podría escribir un libro llamado "Mis Grandes Sucesores" [1]. Una estupenda reseña de los avances en cómputo, particularmente con Belle y su desarrollo puede verse en el libro "Chess and Machine Intuition", escrito por George W. Atkinson, el cual estoy terminando. Además de las propias opiniones del autor, Atkinson hace un desarrollo breve pero bastante completo del "estado del arte" en el ajedrez por computadora. Un libro sin duda muy recomendable.

La partida ntre Blitz (que eventualmente se convertiría en Cray Blitz), del año 1978, es muy importante, porque quizás fue la primera vez que una computadora analizó las consecuencias finales de un sacrificio que lleva al mate. Es cierto, sí, que esa combinación no se ve particularmente difícil para un jugador de primera fuerza, pero el avance fue sin duda importante, pues mostró cómo una máquina podía deshacerse de la idea de ser materialista y comerse cuanta cosa pudiese en una partida, para pasar a un nivel en donde incluso, los sacrificios eran posibles. En mi opinión,m el desarrollo de Belle fue un parteaguas para la siguiente generación de programas de ajedrez, como HiTech o ChipTest, por ejemplo.

He aquí la partida:

ACM 1978.12.06
Blitz 6.5 - Belle

1. e4 e5 2. Nf3 Nc6 3. Nc3 Nf6 4. Bb5 Nd4 5. Bc4 Bc5 6. Nxe5 Qe7 7. Bxf7+ Kf8 8. Ng6+ hxg6 9. Bc4 Nxe4 10. O-O 

La posición favorece sin duda a las negras. Tienen ventaja material a cambio de un rey en una posición relativamente insegura. Sin embargo, aquí Belle halla una combinación ganadora:



10. ... Rxh2! 11. Kxh2 la peor jugada, pues sigue mate en cuatro. Sin embargo, cualquier otra jugada no salvaba la partida. 11. ... Qh4+ 12. Kg1 Ng3 13. Qh5 gxh5 14. fxg3+ Nf3# 0-1

Fue tan impresionante esta partida para el propio Ken Thompson que mandó a hacer playeras con la posición final. Dicha playera la usó en el siguiente campeonato de computadoras.

Belle eventualmente llegaría a jugar unos 2203 puntos Elo y recibió un premio honorífico, haciendo a la máquina miembro de la Federación Estadounidense de Ajedrez, cosa que como David Levy dijo alguna vez: "esto sólo pasa en los Estados Unidos".


_____
[1] Haciendo referencia a la colección de Kasparov: "Mis Grandes Predecesores".
[2] La foto inicial de este artículo ilustra la posición de quizás la partida más famosa de Belle. En la foto se observan a Joe Condon (izquierda) y Ken Thompson, con la posición de la brillante partida en el momento del sacrificio.

Saturday, September 26, 2015

¿La caída de López-Dóriga?



Joaquín López-Dóriga es el locutor oficial del Noticiero del Canal 2 de Televisa, en su horario más importante (10:30 pm). Es un periodista que siempre me ha parecido nefasto y que finalmente, siendo la cabeza de dicho noticiero tiene al menos injerencia en las noticias que presenta y cómo las presenta, vamos, en la línea editorial del noticiero que conduce.

Desde hace unas semanas, López-Dóriga parece que ha entrado en el ojo del huracán. Todo porque María Asunción Aramburuzabala, propietaria de la inmobiliaria Abilia (y además, heredera de una gran fortuna porque hasta donde entiendo su abuelo fue quien fundó la exitosa empresa Cervecería Modelo), se enfrascó en un pleito con Teresa Adriana Pérez Romo y su esposo, Joaquín López-Dóriga. De acuerdo a los dichos de la señora Aramburuzabala, la pareja mencionada la querían extorsionar y le pedían no sé si cinco o diez millones de dólares para permitirle que continuara la construcción de un edificio de departamentos.

Cabe señalar que la revista Proceso dice que López-Dóriga tiene al menos seis departamentos de lujo en el Club de Golf Bosques, siete en la colonia Polanco, su lujoso yate valuado en 40 millones de pesos, una suite en residencial Villa Alejandra de Acapulco, más millonarios ingresos a través de dos empresas, Akron y Ancla, que han recibido más de 237 millones en contratos por menciones, campañas y entrevistas de dependencias federales entre 2001 y 2015.

Aparentemente la influencia y poder económico de la Sra. Aramburuzabala ha sido suficiente para detener esta supuesta extorsión. Pero más allá de eso, a partir de este evento, muchos sitios web de poca credibilidad realmente, han estado esparciendo el rumor de que López-Dóriga podría salir del noticiero nocturno porque su imagen se ha debilitado. Curiosamente, la revista Proceso, que mantiene cierto status de rigor periodístico, plantea también ahora esta posibilidad y de hecho, para mi sorpresa al menos, pone al susodicho periodista en la portada que circulará el próximo domingo (es decir, mañana).

No es la primera vez que López-Dóriga se halla en el ojo del huracán. En algún momento creo recordar que fue director de noticieros dee ImeVisión, lo que ahora es TV Azteca, y que en un movimiento político, fue "derrocado"  y expulsado de su puesto. Me acuerdo que en esos años entonces López-Dóriga sacó un periodicucho llamado "Respuesta", en donde al menos en su primera edición, dijo que no se dejaría intimidar, más un largo bla bla bla que probablemente nadie le creyó.

Por otra parte, López-Dóriga ya dejó de ser un joven periodista. Ya aprendió a lidiar con el poder político de este país y no tuvo empacho, a cambio de jugosos sueldos, hablar bien del gobierno en turno. En mi opinión, no tarda mucho para que Televisa al menos, lo jubile. Quizás este asunto con la heredera del Grupo Modelo sea el catalizador que finalmente haga que retiren de cuadro a uno de los periodistas más lamentables de este país.

Yo me preguntó ¿por qué se metió en este asunto López-Dóriga y esposa? ¿Es que no tienen suficiente dinero ya? Tal vez aquí el asunto sea de poder y no estrictamente de dinero. En cualquiera de los casos me parece que después de la portada de Proceso, que tiene finalmente cierta influencia en el imaginario colectivo, el periodista de marras deberá andarse con pies de plomo. Su puesto -creo que ahora sí- corre peligro.

Y si sale de Televisa, quizás también salga de la Radio y de pronto sea un "apestado" como Guillermo Ochoa, el cual fue corrido por Azcárraga cuando presentó sin su autorización, una entrevista con la Quina, justo cuando Salinas lo encarceló fincándole no sé cuantos delitos y buscando así tomar el control de Pemex, todo esto en 1988. Después de su atrevimiento de publicar la entrevista con el ya fallecido líder de los petroleros, Ochoa fue despedido y desapareció de los medios por muchísimo tiempo. Hoy -me parece- Ochoa es un hombre mayor, enfermo, que tiene por ahí una columnita de opinión en la radio que alguna vez oí y que no sé si siga al aire.

Veremos el desenlace de esta historia pronto. Tal vez Televisa espere unas semanas para que las aguas regresen a su nivel y entonces le den a López-Dóriga una salida decorosa indicando él mismo que ha decidido pasar la estafeta a -probablemente- su sucesor, Loret de Mola.

Sistemas expertos: tecnología obsoleta



En Inteligencia Artificial (IA) se trabaja en muchos frentes. Pueden ser redes neuronales, o quizás programas que hacen búsquedas exhaustivas sobre un árbol de posibilidades. También pueden usarse los sistemas expertos, que pretenden lidiar con las incertidumbres asociadas con la información en prácticamente todo el ámbito humano. Así, por ejemplo, podemos pensar en las heurísticas, una manera de manejar un problema para el cual no siempre hay una solución exacta. Una heurística es una regla general, que funciona la mayoría de las veces o en la mayoría de los casos, pero bien podría no trabajar correctamente en un caso particular.

Los sistemas expertos son una rama de la IA que pretende describir un problema con base en reglas del tipo IF-THEN, es decir, SI ocurre un fenómeno en particular ENTONCES tomaremos la siguiente acción. Por ejemplo, si pensamos en un sistema de diagnóstico médico, podríamos tener este tipo de reglas:

SI el paciente presenta fiebre, estornuda, cuerpo cortado ENTONCES tiene gripa.

Esta regla es muy evidente por sí misma pero muchas veces en el mundo real las cosas son menos sencillas. Por ejemplo, podríamos decir:

SI el cielo está nublado ENTONCES llevaré mi paraguas.

Aunque la regla podría funcionar considerando que al estar el cielo nublado, entonces podría llover, pues no parece ser mala idea llevar consigo el paraguas. La pregunta que surge, sin embargo, es: ¿Cuál es la probabilidad de que vaya a llover? Si dicha probabilidad es 10% o menos que eso, a lo mejor no tiene sentido cargar con el paraguas aunque sí, podría eventualmente caer una lluvia.

Este tipo de criterios hacen que los sistemas expertos se conformen de muchas reglas CAUSA-EFECTO y que estas se encadenen para llegar a una conclusión. Existen dos tipos de encadenamiento, hacia atrás (backward chaining) y hacia adelante (forward chaining). El primero es más o menos lo que hace un médico que nos ve por primera vez. Nos preguntará en cómo nos puede ayudar y le diremos, por ejemplo, que nos sentimos mal. Entonces el médico preguntará por los posibles síntomas: ¿le duele la cabeza? ¿le duele alguna otra parte del cuerpo? Y entonces el médico buscará encadenar de alguna manera los síntomas que presenta el enfermo para así llegar a un diagnóstico.

En el caso de forward chaining, el médico cuando ve al paciente piensa para sí en un posible diagnóstico, por ejemplo, observa al paciente y decide que éste se ve agripado. Entonces, las preguntas ya están orientadas sobre qué puede tener. Empieza el interrogatorio con una posible hipótesis de la enfermedad del paciente. Si acaso éste le contesta no a un síntoma que debiese ser sí, el galeno entonces buscará una nueva hipótesis. ¿Cuál es la mejor manera de encadenar la información en un sistema experto? No sé, depende del problema que se planteé.

Otro punto a considerar es la incertidumbre en la información. Muchas veces, cuando vamos al médico, éste nos pregunta: ¿qué tanto le duele la cabeza? ¿Mucho? ¿Poco? Defínalo de 1 al 10, donde 1 es que le duele muy poco. Y esto en un sistema experto debe ser validado. ¿Qué pasa si hay diversas incertidumbres asociadas a diferentes preguntas? Las matemáticas tienen la solución, usar el teorema de Bayes, el cual permite combinar adecuadamente las probabilidades asociadas a eventos para saber la probabilidad final deque un evento pueda ocurrir.

Cabe decir que los sistemas expertos contienen tres elementos básicos:
  1. La interfaz con el usuario
  2. La base de reglas causa-efecto
  3. El motor de inferencias
El primer punto permite tener una manera de comunicación entre el usuario y el sistema. La base de reglas, en cambio, debe armarse de acuerdo a consultas que harán los programadores del sistema experto. Finalmente, el motor de inferencias es el que nos dice si haremos encadenamiento hacia adelante o hacia atrás.

Todo esto está muy bien, pero los sistemas expertos parecen ser ya una tecnología obsoleta, por decir lo menos. Definir todo en términos de predicados causa-efecto no parece ser siempre una buena idea e incluso, con el manejo de las incertidumbres, el resultado final parece acartonado. Tal vez -para colmo- los programas de IA que lidian con este tema de los sistemas expertos, decidan cambiar el enfoque a una búsqueda por demás exhaustiva. Y entonces las heurísticas pasan a un segundo plano porque ya se puede tener una solución clara y más precisa.

Un ejemplo de ello es el propio ajedrez por computadora. Los programas tienen una función de evaluación que informan qué posición es mejor y por qué. Un sistema experto con reglas para jugar bien parece resultar por una parte, difícil de generar y por otra, de aplicar en la gran cantidad de posiciones que pueden darse. Es claro que los sistemas expertos no sirven por ejemplo, en el dominio del ajedrez.

Los sistemas expertos tuvieron un inicio interesante e incluso hubo sistemas que permitían vender equipos de cómputo y organizar cómo se pondrían en la empresa del cliente. este tipo de sistemas estaba hecho con una centena de reglas pero incluso, tenía un sistema experto (con más reglas), que buscaba que éstas no tuviesen contradicciones evidentes. Sin embargo, sus limitaciones fueron saliendo a la luz.

Hoy en día no hay quien decida armar un sistema experto, en el tema que sea, porque probablemente quedará siempre limitado. Pienso pues que esta tecnología es obsoleta y habrá que considerarla como un interesante esfuerzo que no prosperó. Así pasa contínuamente en la ciencia. Tampoco es algo que haya que alarmarnos.