sábado, septiembre 30, 2006

Resumen de las mejores estrategias

Sé que el código fuente no es suficiente para "sentir" un algoritmo. Por eso, pongo aquí las explicaciones (en palabras de los autores) de los algoritmos que obtuvieron mejor puntaje, y cuyos autores mandaron justificación o descripción en palabras.

Los que lo deseen pueden describir o justificar sus estrategias en los comentarios.


Estrategia Bambino Veira, de Andrés Sborovsky:
- Si estoy empatado con mi contrincante me planto en 20.
- Si voy perdiendo (cosa poco probable pero igual la considero) me planto en 20 + raíz cuadrada de la diferencia de puntuación.
- Si voy ganando me planto con 20 (equipo ganador no se toca!!) (frase del director técnico Bambino Veira, de Argentina)


Estrategia de Alex Sierra:
Tirar el dado hasta que se cumpla al menos una de las tres condiciones siguientes:
-Con la puntuación acumulada (la de turnos anteriores más este) ya gano la partida
-La puntuación de este turno es al menos 20 y con ella agregada a la puntuación acumulada supero a mi rival por al menos 1 punto
-La puntuación de este turno es al menos 21


Estrategia Acumulador20 selectivo, de Juan Zubieta:
Si el total de puntos acumulado en la tirada es superior a 20, plantarse.
Si el total de puntos acumulado en la tirada es inferior a 20, continuar tirando.
Si el total de puntos acumulado en la tirada es igual a 20, continuar tirando solo si voy perdiendo; si voy ganando, me planto.


Estrategias de Guille:
Para la modalidad porcentual: Me planto al llegar al puntajeganador (>=) o superar los 20 puntos (>) en la tanda actual.
Para lamodalidad ganador/perdedor: la estrategia básica es la misma, pero si el contrincante esta a menos de 10 puntos de ganar sigo hasta ganar o morir.


Estrategia de el Mostro, de Rafael Carrascosa:
Como el veinte pinta que es bastante óptimo estoy seguro de que el mío no tiene muchas oportunidades porque "converge a" y no "es" el veinte. [...] Al principio "fear" y"satisfaction" eran parabolas y estimaba a y b para cada una, pero despues me di cuenta de que era demasiada complejidad inecesaria. Asé que quedaron dos funciones lineales.


Estrategia Bicorne, de Iván Skvarca:
Sigue tirando hasta que se cumplan estas dos condiciones:
1. Alcanza los 20 puntos acumulados
2. Hace cinco lanzamientos
(Tienen que cumplirse ambas. Es decir, si se suman 20 puntos en cuatro lanzamientos, hace uno más. Si en cinco lanzamientos sólo suma 15puntos, sigue tirando hasta acumular 20 puntos.)

El Uno: Resultados

Bueno, por fin están los resultados. Agradezco su paciencia y su participación.

El ganador de la modalidad original (tabicada) es Bambino, de Andrés Sborovsky. La tabla de posiciones final es ésta. La tabla completa con las 200 rondas está aquí (comprimida).

El ganador de la modalidad proporcional es el algoritmo de Alex Sierra (que no bautizó su creación). La tabla de posiciones final es ésta. La tabla completa con las 200 rondas está aquí (comprimida).

El código fuente usado para el torneo está disponible aquí para que lo revisen. Está hecho en Unicon. Si descubren alguna irregularidad en algún detalle, no duden en comentarla y será corregida.

Algunas frases célebres tomadas de algunos participantes:


Mirá dónde te vengo a encontrar!!
(un antiguo colega de las olimpíadas matemáticas que descubrió el concurso por casualidad)


Éste es mi algoritmo en un pseudocódigo medio extraño pensado a las 2 de la mañana con un par de cervezas encima...
(qué envidia: yo si tomo cerveza no puedo programar)


Si es por la ventaja, no hay problema!!
(hablando sobre posibles ventajas o desventajas que daría a un jugador un error de programación por mi parte)


...y sin reirte lo más mínimo del 1...
(mención respetuosa e irreverente a la vez del tan temido 1)


La mia... es una historia triste... quise resolver el problema usando un modelo evolutivo... pero no me anduvo bien. Mejor dicho: Empezo a converger hacia "el veinte", ese infame algoritmo para resolver este problema.
(vemos que el problema desata pasiones insospechadas)


...de alguna manera maximizas beneficios, y tiene esa extraña conexión con las 6 caras del dado...
(me pareció hermosa esa justificación mística de un algoritmo)


Como todo el mundo, creo que mis pollos no pueden perder...
(es cierto, por eso evité participar yo mismo: para no desilusionarme)


Bueno, agradezco nuevamente la participación de todos. Fue muy divertido programar los algoritmos y ajustar variables y detalles entre todos.

¡Manténganse sintonizados para el próximo concurso!

viernes, septiembre 29, 2006

Suspenso

Bueno, ha terminado el plazo de entrega de algoritmos... Falta un poco de codificación y aclaración de algunas ideas.
Supongo que mañana sábado ya tendré los primeros resultados.

Calentando motores...

Hoy, último día para entregar algoritmos para El Uno, recibí tres algoritmos nuevos.
Señal de que muchos anduvieron analizando arduamente el juego.

¡Prepárense para los resultados! Pronto estarán disponibles.

jueves, septiembre 28, 2006

Casos "patológicos"

He observado en rondas de prueba de El Uno, que algunos pares de algoritmos producen partidas infinitas, donde ninguno de los jugadores anota nunca porque ambos siguen tirando indefinidamente.
Para evitar caer en esos bucles, implementaré una medida de seguridad: si ninguno de los dos jugadores anota en 20 turnos, la partida se declara empate, y ambos jugadores se anotan 0 puntos.
¿Qué les parece?

lunes, septiembre 25, 2006

Nombres para los algoritmos

Algunos de los que me mandaron algoritmos hasta ahora no especificaron un nombre para sus criaturitas. Tienen tiempo hasta el viernes para bautizarlas; no es obligatorio, pero le da más gustito a la competencia.

sábado, septiembre 23, 2006

Sborochan

El Sborochan es un juego de origen desconocido para mí (acepto información al respecto) y propuesto una vez en la lista Snark por Andrés Sborovsky y Rodolfo Kurchan (de ahí el nombre que le hemos puesto). Me pareció adecuado para armar el segundo concurso.

Las reglas del juego son como sigue.

Los jugadores comienzan con 0 puntos cada uno. En cada turno, ocurre lo siguiente:
  1. Cada jugador elige secretamente un número entero positivo.
  2. Todos los jugadores muestran al mismo tiempo los números que eligieron.
  3. El jugador que eligió el menor número no elegido por nadie más, anota un punto. Los otros jugadores no anotan nada. Por ejemplo: si los números elegidos son 1, 2, 1, 8 y 3, anota el que eligió el 2. Si son 3, 6, 1, 1, 3, 6, no anota nadie (porque están todos repetidos).

Se juega hasta llegar a una cantidad estipulada de turnos. Gana el que tiene más puntos al final.

Vayan meditándolo; cuando termine el torneo de El Uno anunciaré las reglas técnicas para el Sborochan y aceptaré algoritmos.

Más progresos

¡Ya llegamos a los 20 algoritmos! Algunos competirán en ambas modalidades, otros no, pero ya es todo un número.

Estoy ultimando los detalles técnicos del siguiente concurso, que será dedicado al juego Sborochan. ¿Les parece adecuado que lo anuncie aún sin haber concluido El Uno?

jueves, septiembre 21, 2006

Grupo de correo y noticias asociado al blog

Sabido es que la redundancia es la mejor forma de supervivencia.
Por eso he creado un grupo de correo , que será compañero del blog.
Habrá modos distintos de interacción, pero siempre la misma idea: las competencias entre algoritmos en juegos abstractos.
Están todos invitados.

miércoles, septiembre 20, 2006

Sobre las repeticiones

Este es un principio que aplicaré en todos los concursos: las estrategias repetidas serán representadas por un solo algoritmo participante, con autoría compartida, salvo que el concurso en sí admita participación en equipos de algoritmos.
Esto representa el espíritu de los concursos: los que compiten son algoritmos, no personas...

martes, septiembre 19, 2006

Plazo de entrega para El Uno

Hola a todos. Les comento que recibiré algoritmos para El Uno hasta el viernes 29 de septiembre.

Si pueden y quieren, envíen junto al algoritmo una pequeña justificación: cómo llegaron a la idea, si hicieron algún cálculo matemático y/o informático, simulaciones, etc. Será interesante comparar y compartir esos datos.

lunes, septiembre 18, 2006

Progresos

Bueno, en estos días ya he recibido aproximadamente 13 algoritmos, de unas 9 personas distintas. Muchos son bastante parecidos, y algunos coinciden. Igualmente no creo que haya problemas en que se dupliquen estrategias; lo triste será en todo caso que uno de ellas le gane a sus congéneres por alguna variación del azar. Pero después de todo el juego contiene azar, así que tendremos que vivir con eso.

Gracias a todos los que han colaborado con sus algoritmos, y a los que presenten en estos días.

domingo, septiembre 17, 2006

Corrección sobre el juego del Uno

Bien señala Salva lo siguiente:
Creo que para ver de forma mas justa que algoritmo es mejor no deben puntuarse las victorias com 1 y las derotas con 0, sinó dar a cada algoritmo su puntuacion proporcional (el que consigue 2000 puntos obtiene 2000 puntos y el que consigue 1999 obtiene 1999). (Imaginate que pasaria si un algoritmo nunca gana pero siempre pierde las partidas por uno o dos puntos, y otro algoritmo a veces gana por poco y a veces pierde por mucho...)
En fin, que a cada cual se le debe valorar por su merito sin simplificaciones que distorsionen la realidad.
Estoy de acuerdo con su idea. Los puntajes serán entonces los que saque cada algoritmo al final de la partida.

Update: haré dos concursos paralelos, uno con cada modalidad. Si sus algoritmos dependen de la modalidad, especifíquenlo y los haré competir sólo en la modalidad adecuada.

El juego del Uno

Hace unos días, conocimos la existencia de este juego, y nos gustó para hacer la primera competencia.

Cito las reglas del juego:
En su turno el jugador lanza un dado una y otra vez, y suma los puntos obtenidos, hasta que ocurre una de estas dos cosas:
  1. Decide plantarse. Se anota tantos puntos como haya sumado hasta ese momento y el dado pasa al jugador siguiente.
  2. Sale el 1. En este caso, no se anota nada, y el dado pasa al jugador siguiente.
El que llega primero a 100 puntos (o una cantidad fijada de antemano) gana.
A los fines de esta competencia, usaremos un objetivo de 2000 puntos por partida, y haremos 200 rondas en la modalidad "torneo de liga", es decir: en cada ronda, cada par de algoritmos jugará dos partidos, cambiando el orden de los turnos.
En cada partido, el ganador sumará 1 punto y el perdedor sumará 0 puntos.
Los algoritmos podrán referirse a la información de los turnos anteriores de la partida, pero no a partidas anteriores.
Los que quieran participar, vayan comentando sus algoritmos. Si no desean revelarlos en público, pueden enviármelas por mail. Yo los implementaré en algún lenguaje adecuado.
Dentro de dos semanas publicaré los resultados.