Ajedrez: nostalgia de la inteligencia artificial

Una vez un computador me ganó jugando al ajedrez. No fue rival para mí cuando pasamos al kickboxing.

Emo Phillips

Hubo una época en la que el ajedrez era tierra virgen en la investigación de la inteligencia artificial. Sin embargo estaba claro desde el principio (es decir, los tiempos de Alan Turing), que no podía llamarse inteligencia artificial a un proceso de elección determinado por un algoritmo dentro de un campo de opciones limitado (porque aunque las posibilidades matemáticas del ajedrez son enormes, no son infinitas). Debido a las limitaciones del hardware, se creía hasta finales de los ochenta que las máquinas no tenían lo necesario para vencer a los mejores jugadores: intuición, conceptos de estrategia, y sobre todo, inteligencia.

Hoy en día, gracias a la ley de Moore, la superioridad de los programas de ajedrez sobre los seres humanos es aplastante. Sin embargo, esto hace pensar que los juegos abstractos no son necesariamente el mejor modo de probar que las máquinas tienen inteligencia; por más que puedan evaluar una posición (en realidad, millones por segundo) y tomar decisiones ganadoras a largo plazo. O incluso, aprender de los errores (que al igual que en los humanos, es capacidad de memoria, no de inteligencia). Las victorias de Deep Blue y Deep Fritz sobre Kasparov y Kramnik han demostrado que las máquinas tienen la capacidad de ganar a los seres humanos, pero no que sean conscientes de cómo.

Hoy en día se asume que la perfección en ajedrez consiste en jugar como una máquina. Obviando los errores de bulto, si nuestras jugadas no son las primeras que consideraría hacer un programa, decimos que son malas. Y si se parecen demasiado, decimos que quien las hace es un tramposo. Los motores de ajedrez están programados para evaluar una posición con números, aunque eso no es reflejo de su capacidad de entendimiento. Veamos algunos ejemplos evaluados con programas más o menos recientes: Chessmaster 5500 y Fritz 5.32, de 32 bits, y Rybka 4, Stockfish 5, Komodo 5 y Houdini 4, de 64 bits (los últimos tres permiten usar múltiples núcleos).

PCajedrez02
Juegan blancas.

 

Este es un ejemplo clásico: mientras que un jugador medio sabría que es imposible pasar de las tablas, todos los programas dan una evaluación de ±13 a favor de las negras, basados en la ventaja material. Sin embargo, sólo los programas antiguos (CM5500 y Fritz 5.32) siguen cometiendo el error de jugar 1.bxa5??, abriendo la posición y permitiendo a las negras imponer su ventaja material.

PCajedrez03
Juegan blancas.

 

Aunque los programas de mediados de los ochenta buscaban disminuir la desventaja material jugando Axh4??, perdiendo el final contra los peones negros, todos los programas de esta prueba jugaron la correcta Ah6!! logrando las tablas, aunque seguían dando una evaluación ventajosa a las negras. Y posiblemente lo lograron más por fuerza bruta de cálculo que por entender el concepto de tablas de esta posición: un final de alfil y peón de torre es tablas si el peón corona en una casilla no controlada por el alfil.

PCajedrez01
Juegan negras.

Por último, un ejemplo tomado de la Copa Sinquefield 2014, de una partida entre Magnus Carlsen y Levon Aronian. Como los torneos transmitidos por internet van acompañados de los análisis de un motor de ajedrez, muchas veces los espectadores (e incluso los analistas) hacen conclusiones por anticipado. En la prueba, todos los programas daban ventaja a las blancas, aunque ninguno logró ganar con blancas un final de evidentes tablas. Debería ser la prueba de que el criterio de una máquina todavía puede ser vencido por la inteligencia humana, excepto cuando un jugador se empeña en vencer a una potente calculadora en su propio juego.

El test de Turing dice que, si una máquina es capaz de crear algo que un humano sea incapaz de distinguir si es obra de una máquina o de otro ser humano, entonces la máquina que lo crea posee inteligencia artificial. Por ejemplo, el campo más interesante de investigación son los bots conversacionales: programas que simulan una conversación con el usuario. Hasta ahora, ningún bot ha sido capaz de convencer a un humano (experto en semántica, lógica o retórica), de que tiene inteligencia artificial. Tampoco los juegos son prueba de inteligencia. Ni siquiera el póquer: cualquiera puede dejarse engañar por el bluff de un programa de teléfono móvil. Por suerte, aún nos queda el arte, porque la inteligencia dejará de ser exclusiva de los humanos el día en que las máquinas, además de ser conscientes de sí mismas, comprendan el sentido de la creatividad. Podrán tener una potencia de cálculo infinita, pero si Skynet no es la especie dominante, no es porque no pueda vencernos en ajedrez.

Crear GIF animado a partir de varias (muchas) imágenes

Bajo la línea de “si quieres aprender algo, enséñalo”, me pareció importante compartir esta forma de crear imagenes .gif animadas a partir de varias imágenes estáticas, usando el conocido Photoshop. Pero no sólo a partir de pocas imágenes, creando una capa por imagen, como se ve en algunos tutoriales básicos, sino de muchísimas imágenes, como pueden ser las extraídas de un clip de video (para ello uso reproductores como KMPlayer).

De entrada aclaro que uso una versión bastante antigua: la CS4. La opción más común para crear un archivo .gif desde un video en Photoshop es importando los cuadros como capas (Archivo/Importar/Cuadros de video a capas), pero si no se tiene instalado QuickTime, aparece un error. Suponiendo que se quiera crear un .gif con otras imágenes, se puede proceder así:

Una vez que todas las imágenes estén en una misma carpeta, abrimos la primera imagen de la secuencia (Archivo/Abrir), activando la opción Secuencia de imágenes:

001

Aparecerá otra opción para la velocidad de la animación (si se extraen imágenes de un video, lo ideal es usar su misma velocidad):

002

 

Tenemos ahora una línea de tiempo que genera automáticamente la animación que reproduce todas las imágenes de la carpeta. A partir de aquí es posible crear capas adicionales de texto u otras formas, cuya duración se puede coordinar en las barras de tiempo:

003

 

Una vez terminada la edición, para crear el .gif se guarda con la opción Archivo/Guardar para Web y dispositivos, verificando que a la derecha (debajo de Ajuste preestablecido) esté seleccionado el formato GIF, y activar abajo a la derecha la opción Opciones de repetición: Infinito:

004

 

Si se hace un .gif a partir de imágenes extraídas de un video, la calidad suele ser proporcional al tamaño de archivo. A la espera de que el soporte de Twitter sea el inicio de la nueva edad de oro del  formato .gif,  he aquí el resultado final:

cobardes

¿Spam en nombre de Hotmail?

Mas o menos hacia 2001 abrí mi primera cuenta de correo electrónico en Hotmail, que por entonces ya era parte de Microsoft, y era el servicio de e-mail más conocido. Aunque luego surgieron servicios de correo electrónico por todas partes, había convertido esa cuenta en mi buzón principal de correo, y la había mantenido hasta ahora casi sólo por nostalgia. Hasta ahora.

Al ser uno de los servicios más populares de comienzos de siglo, Hotmail fue casi sinónimo de spam desde la masificación de Internet. Hotmail cumple con su función de enviar y recibir correo electrónico, pero también ha tenido detrás un mar de dudas sobre su seguridad. Desde la absurda limitación de las contraseñas a 16 caracteres hasta el envío masivo de spam a través de cuentas de sus usuarios. Y es justamente esto lo que me ha obligado a cerrar definitivamente la cuenta de Hotmail en favor de otras opciones, menos conocidas, mejores en características, y sobre todo, con mejor seguridad.

Recibir spam es muy molesto, pero es casi inevitable para usuarios de Hotmail. Pero aún más molesto es recibir spam enviado supuestamente con mi nombre y cuenta. Lo usual es que eso ocurra a quienes les roban las contraseñas mediante virus, keyloggers o troyanos. Cuando eso pasa lo normal es cambiar la contraseña o proceder con la recuperación de la cuenta. Otra cosa ocurre cuando se envía spam desde una cuenta pero ante el usuario que lo recibe el remitente se identifica con mi nombre y dirección. En teoría el usuario no pierde el control de su cuenta y el spam  no aparece en la carpeta de mensajes enviados; pero parece algo exclusivo de Hotmail permitir a tal punto la suplantación de identidad de sus usuarios de semejante forma.

spam_hotmail

De entrada, mi nick corresponde a un acrónimo de mi nombre (que por ahora me reservo), aunque según veo parece un nombre o apellido común en Brasil o algo así. Por eso es muy común que el spam que me llegue sea phishing de bancos brasileños o cualquier otra cosa en portugués. La primera técnica de un spammer es usar un dominio común y enviar spam a usuarios con nombres comunes: como el mío lo era allí, fue sólo cuestión de tiempo. Como se ve en la imagen, Microsoft admite que la suplantación de identidad de un remitente es posible con Hotmail, al decir que un usuario me envía spam… en nombre de mi propia cuenta de Hotmail. Desconozco si esto pasa con otros servicios, pero creería que si Google, por ejemplo, tiene el mejor motor de indexación web, también sabrá como manejar el asunto del spam en Gmail. Aunque el spam lo traiga incorporado.

Hasta ahora, no tengo noticias de que mis contactos hayan recibido spam en mi nombre. Tampoco que haya perdido el control de esa cuenta (para evitar que sea cosa de virus, había cambiado la contraseña dos veces bajo Linux Mint y Debian). Pero lo cierto es que me aburrí de réplicas de relojes y todo lo demás, pero sobre todo por la poca seguridad que ofrece Hotmail en todo este asunto. Por más que se les reportan los correos como de “suplantación de identidad”, no les parece sospechoso que supuestamente me envíe correos a mi cuenta que van directamente a la bandeja de spam. Desconozco lo que pasa, pero me aburrí de Hotmail, así como en su momento me harté de Internet Explorer (es curioso que la mayoría de usuarios de versiones desatendidas de Windows usen Internet Explorer “sin complementos”, como los de los antivirus que detectan automáticamente los sitios de phishing, o que sean incompatibles con ese “navegador”). Lo peor es que tras el cierre de Hotmail para usuarios nuevos y la llegada de Outlook, ahora Microsoft no tiene un servicio de correo con una seguridad tan pobre, sino dos.

Batallando con el ‘responsive design’ (y la porquería de Internet Explorer)

Siguiendo con la idea de crear un sitio personal con el solo propósito de aprender y experimentar, y con el escaso tiempo libre que dejan las obligaciones cotidianas, ya he subido una maqueta de prueba. Bastante trabajo teniendo en cuenta que hubiera podido elegir una plantilla lista para descargar, o usar los creadores automáticos de sitios del proveedor de hosting (muy recomendable en mi experiencia, por cierto: a diferencia de otros servicios de hosting gratuito sin publicidad, Hostinger tiene versiones de PHP y MySQL actualizadas para instalar la última versión de WordPress y MediaWiki entre otros servicios).

Sin embargo decidí aprender por mi cuenta la maquetación básica. Aunque todavía no está terminada la estructura del sitio (si no está claro aún el objetivo no se puede esperar otra cosa), la maqueta cumple con su propósito. No es fácil pasar del paradigma del WYSIWYG y de la maquetación en tablas, a trabajar sólo con código y con los nuevos estándares: HTML5 y CSS3, pero el resultado es bueno. Falta agregar contenido y el trabajo gráfico está aún por hacer, pero la maqueta responde bien al criterio del ‘responsive design’ ( o “diseño sensible”, porque a los puristas del idioma la expresión “diseño responsivo” seguramente les molestará).

Haciendo pruebas, la maqueta se adapta bien a distintos tipos de pantalla, y la primera prueba en un smartphone con pantalla de 3″ fue buena: los componentes de la página se adaptan a los 200 px de ancho y la galería funciona bien, aunque dependiendo de la conexión tarda un poco en cargar. Fue muy útil lo que se puede encontrar en tutoriales y videos sobre Media Query para esto, a pesar de ciertos caprichos como tener dos imágenes en el head, o ciertos problemas con los menús desplegables. Sin embargo, algo verdaderamente frustrante fue ver cómo el sitio funcionaba perfectamente hasta que se abría con Internet Explorer.

No importan los hacks o plugins: la galería no se despliega correctamente, y si se hace funcionar, se despedaza el resto de la maqueta. Es la historia de siempre y la pesadilla de todo diseñador web: diseñar un sitio web decente, que cumpla con los estándares, que se vea bien en cualquier navegador… y que funcione también en esa abominación. Tampoco importa cuanto tiempo haya pasado: el odio hacia Microsoft y su Internet Explorer sigue vigente. Windows es en muchos casos un mal necesario (podría decirse mucho sobre la presión de Microsoft a desarrolladores y fabricantes, o del estado de las alternativas de software libre, pero es tema de otra discusión); aunque en cuanto a los navegadores ese no es el caso.

Si la web tiene estándares, los diseñadores se basan en ellos y los navegadores los cumplen perfectamente, entonces la actitud de Microsoft es incomprensible. Porque sus pretensiones de monopolizar la web a base de corromper los estándares son absurdas; más en estos tiempos de la “muerte del PC”, de la computación en la nube, de las aplicaciones web y de la conectividad móvil en la que justamente Microsoft, a pesar de algunos avances, sólo ha dado palos de ciego frente a Android o iOS. Es ridícula su actitud de hacer elegir a usuarios o desarrolladores entre una web estándar o una compatible con un navegador inferior a todos en cualquier aspecto, que sólo se sostiene por venir preinstalado con Windows; un sistema a su vez impuesto por Microsoft a usuarios, desarrolladores y fabricantes. Y porque la gente, animales de costumbres, lo usan sólo por inercia.

El mundo fue testigo de la guerra de los navegadores y de las prácticas de Microsoft rayanas en la conducta mafiosa. Pero ahora el mundo no es como lo que Microsoft pretendía cuando “ganó” la guerra contra Netscape en 1998: un mundo sin competencia -y por tanto, sin innovación-, en el que el infame Internet Explorer 6 impuso sus estándares de facto y no cambió hasta el lanzamiento de IE7… seis años después. Seis. Paradójicamente Microsoft reconoce hoy a IE6 como su peor contribución al atraso de Internet con campañas para dejar de usarlo, y la prueba de lo malo de su navegador seguramente serán las campañas para de dejar de usar IE7, IE8, IE9… Como ya no uso esa bazofia, no sé si Internet Explorer se actualiza solo como cualquier navegador realmente moderno, pero francamente no sería raro.

Pero Microsoft no es el único culpable: tanto los usuarios que usan por inercia lo que les viene instalado, como los gobiernos que subordinan el interés público al de una empresa diseñando páginas de entidades públicas sólo para IE, tienen su cuota de responsabilidad. Muchos dirán que es cuestión de conciencia y divulgación. Admiro la paciencia y el conocimiento de los diseñadores para hacer compatibles sus diseños con ese vómito hecho software; pero yo no voy a perder tiempo con eso, así que adopté una medida temporal. SImplemente al cargar el sitio, si la página detecta que el navegador es Internet Explorer, redirige al usuario a otra página donde explico más o menos las mismas razones, e invito al usuario a descargar otro navegador. Iba a diseñar esa página como si estuviese hecha en Frontpage 98 o algo así, para demostrar el atraso que supone IE para la web, pero prefiero dedicar mi tiempo a terminar el sitio. Aunque no lo vea nadie por no tener interés. O el 31% de nadie por usar lo que unos ineptos con afán de dominar el mundo quieren que usemos.

Software para la lotto: Magayo

Con este artículo inicio una serie dedicada a los programas que conozco para gestionar y analizar las loterías tipo lotto y mis experiencias analizando el Baloto. Aunque no sea el primer programa que he usado, el primero que voy a mencionar es Magayo Lotto, un programa para loterías tipo lotto y pick-3/pick-4 producido por la empresa Magayo Soft. El objetivo del programa es seleccionar números para ser combinados en ruedas (“wheels”), sin ofrecer la opción de generar combinaciones sueltas. Para quien quiera saber lo que son las ruedas o reducciones, puede consultarlo aquí.

Licencia y requisitos

El programa está disponible por ahora para Windows XP o superior, con entorno Java 1.6 o superior. Una vez instalado, es necesario registrar el programa para obtener un número de licencia, que cuesta unos 13 USD para una licencia individual. El programa se conecta automáticamente a Internet para buscar actualizaciones de software y resultados.

Importación de resultados

El programa viene con unas loterías preinstaladas pero dentro de ellas no estaba el Baloto. Se pueden crear loterías propias, pero hay que insertar los resultados uno por uno, y como no tenía intención de digitar 1277 resultados, tuve que enviarles el archivo de texto para que crearan la base del Baloto y finalmente lo soportaran. Este soporte está incluido en la actualización 3.3.0 built 8 del 19 de julio, por lo cual me he ganado el agradecimiento de los autores (“with special thanks to our customer in Colombia for providing the details”), algo que muchos compradores de otros países han hecho para usar el software con sus loterías favoritas. Otro hecho que me atañe fue haber evitado que el Baloto quedara soportado como “Columbia Baloto”, gracias a un sutil enlace a #ItsColombiaNOTColumbia.

Consulta de resultados

El programa muestra los resultados en orden cronológico, y permite consultar resultados seleccionando seis números en la pantalla de consulta, para saber si la combinación es ganadora:

Resultados
Magayo: resultados

Estadísticas

En el menú Statistics, se muestran las estadísticas principales de cada lotería, ya sea como tablas, gráficos de barras o patrones (filas que representan sorteos y columnas que representan los números, con celdas para los números sorteados marcados en rojo). En esta lista vamos a omitir las vistas de “Pattern” (patrones). Las estadísticas que toma en cuenta el programa son:

  • Odds of winning: en el caso del Baloto, muestra la probabilidad de acertar 6 números de entre 25 números (1 en 177.100) y 45 números (1 en 8’145.060)
  • Ball Frecuency: muestra la frecuencia de todos los números, con la opción de elegir las fechas de un intervalo específico
  • Group Frecuency: permite dividir los 45 números del Baloto en grupos de entre 2 y 21 números, y ver cuántos números de cada grupo salen en cada sorteo. Por ejemplo, si dividimos los 45 números en grupos de 5 y elegimos todos los sorteos jugados, a la fecha los números del grupo entre 1 y 5 son los que más han salido, un total de 880 veces (11,48%)
  • Last Digit Frecuency: muestra la frecuencia de los números jugados con base en el último dígito. A la fecha los números terminados en 3 han sido los más frecuentes: 865 veces (11,28%)
  • Lapse Frecuency: número de sorteos que tienen que pasar entre cada aparición de un número (algo así como las tardanzas). El programa engloba las tardanzas mayores e iguales a 30 en un mismo conteo
  • Current Lapse: muestra la tardanza específica de cada número (Current Lapse) y la tardanza hasta el próximo sorteo (Lapse in Next Draw), que no es más que sumar +1 al valor anterior.
  • Odd an Even Frecuency: la típica muestra de números pares e impares
  • Low and High Frecuency: cantidad de números altos (mayores de 22) y bajos por combinación

Análisis

En el menú Statistics, la primera opción (Recommended Balls), es la que muestra el objetivo del programa: seleccionar números según las estadísticas anteriores, para combinarse en ruedas o reducciones. El programa analiza frecuencias, patrones, intervalos o grupos de números y luego elige los números según esos análisis:

Magayo: opciones de análisis
Magayo: opciones de análisis

En el menú de opciones elegí también la última opción (recomendar la menor cantidad de números si es posible), aunque según los expertos (si tal cosa existe) es que es preferible combinar más números, y que es posible hacerlo con menos combinaciones. Algo importante es que, a diferencia de otros programas, si se mantienen las mismas opciones de análisis, los resultados son los mismos. Después de elegir los patrones que debe analizar el programa, con la opción View se muestran los números recomendados:

mayago03numbers

Generar combinaciones

Los números generados por el análisis se pueden guardar para ser usados con las opciones del menú Play: generar combinaciones aleatorias (Random Play) o reducciones (Wheels), o se pueden elegir otros números.

Luego del análisis con los resultados a la fecha, los números recomendados para el próximo sorteo son 16: 7,8,9,14,15,16,17,19,21,22,24,27,41,42,44,45. Ahora el programa ofrece dos opciones para utilizarlos:

  • Random Play: con esta opción se pueden crear combinaciones aleatorias que incluyan entre 1 y 9 números de los elegidos por el programa (“Main Balls”) para cada combinación. También se puede elegir cuántos números pares o impares llevan las combinaciones
  • Wheels: En esta opción se eligen cuantos números se van a combinar para reducir (en nuestro ejemplo, 16), cuántos números de los seleccionados van en cada combinación (en este caso elijo 6), la cantidad de números que deben coincidir con los del sorteo (5), y la garantía, es decir, la cantidad de aciertos que se obtendrán si los números del sorteo están dentro de los números seleccionados por el programa (que con los valores anteriores sólo puede ser de 4 aciertos)
Magayo: creación de reducciones
Magayo: creación de reducciones

Con los valores del ejemplo, el programa genera 54 combinaciones. Es necesario aclarar dos cosas: la primera, que básicamente una reducción consiste en elegir varios números y crear combinaciones con ellos de tal modo que, si los números del sorteo están dentro de nuestros números elegidos, la reducción nos garantiza n aciertos. Por ejemplo, esta es una reducción en la que se eligen 18 números para “reducirlos” de 18.564 combinaciones a “sólo” 7, y en la que tenemos una garantía de 3 en 6, es decir, que si los 6 números del sorteo están dentro de nuestros 18 números, tendremos la garantía de un premio de 3 aciertos:

Ejemplo de reducción de 18 números con garantía de 3 aciertos
Ejemplo de reducción de 18 números con garantía de 3 aciertos

Esta es una reducción de “papel y lápiz”, en la cual si se escriben en la primera fila los números seleccionados, se escriben luego en las celdas claras los números correspondientes, y luego se unen al final los números de cada combinación.

Lo segundo que hay que tener en cuenta es que el programa calcula las reducciones con hasta 5 números del sorteo y no 6, y que (en teoría) la garantía máxima de las reducciones que genera es de 4 aciertos, lo cual no parece a primera vista suficiente para compensar el gasto necesario para todas las combinaciones. Por ejemplo, un premio de 4 aciertos pocas veces llega siquiera a $100.000, con lo cual no se compran ni 20 combinaciones (o 13 con revancha). Pero como el programa permite  incluir entre 4 y 6 números preseleccionados por combinación, se pueden usar los demás para completar las combinaciones, aunque el número de combinaciones aumenta. Todo esto es motivo de experimentación, y en los siguientes posts de esta categoría estaré comentando mis resultados.