jueves, agosto 08, 2013

Ignotum: código para probar estrategias


Hay otros sitios de competencias entre algoritmos que publican el código del «referí» para que los participantes puedan probar sus ideas antes de la competencia final; me pareció buena idea y la usaré en esta y también en futuras competencias.

En este archivo (update: corregí un sutil bug en el código, bajen el nuevo archivo) está el código básico del torneo. Los que sepan programar en Python podrán aprovecharlo para probar sus estrategias y elegir la mejor para enviar, y los que no quizá puedan usarlo igualmente para mirar la lógica y despejar dudas y, quién sabe, animarse y aprender a programar en Python :)


Aclaraciones:
El script necesita la versión 3 del lenguaje. Pueden usar el script especificando la cantidad de rondas a correr, así como los valores de N y K, en la línea de comandos.

Ante cualquier duda pueden comentar aquí o enviarme un mensaje.

lunes, agosto 05, 2013

Nueva competencia: Ignotum


Para esta competencia he elegido una variante del Datum que surgió conversando con algunos participantes.

Las reglas del Ignotum son básicamente las mismas que las del Datum, excepto por algunas diferencias cruciales. Veamos:

Reglas del juego


Juegan dos jugadores, usando un dado de N caras. Los jugadores no saben cuánto vale N.

En cada turno, un jugador toma el dado, lo arroja, y decide cuál de estas dos cosas hacer:

  • Pasar el turno al otro jugador, anotándose los puntos que indica el dado.
  • Mantener el turno, pero anotarle al otro jugador los puntos que indica el dado.

Esto se repite una y otra vez (cambiando o no de turno, según las decisiones de los jugadores), hasta que se cumplen K turnos. Los jugadores no saben cuánto vale K.


Reglas de la competencia


Para participar, deben enviarme una estrategia (una sola por participante) en forma de algoritmo que indique si pasa o no el turno, en función de estos datos:

  • una lista de los números que ha mostrado el dado en sus turnos (el último será el del turno actual)
  • los puntajes actuales (propio y del oponente)

No olviden que los algoritmos no conocen los valores de N y K.
Aclaración importante: implementaré todo en Python 3, que no tiene límites en el tamaño de los enteros que maneja.

Se agradecerá (aunque no es obligatorio) que envíen código en algún lenguaje de programación real, preferentemente Python 3. A veces es complicado interpretar pseudocódigo.

Cada par de estrategias jugará al menos 1000 partidas para cada combinación de N y K, alternando quién tiene el turno inicial.

La estrategia ganadora será la que gane más partidas en total.

Recibiré estrategias y/o comentarios hasta el 27 de septiembre. ¡Anímense!

sábado, agosto 03, 2013

Datum: Resultados

He aquí los resultados de la competencia de Datum tras dos millones de partidas:



PuestoParticipantePuntos

1
Ariel Futoransky11034886(18.39%)

Emilio Pazo Núñez11032288(18.39%)

2Federico Hermo10906847(18.18%)

3Carlos Luna Mota10879416(18.13%)

4Luciano10545970(17.58%)

5Pablo Coll5600593(9.33%)

Hay un empate técnico entre Ariel y Emilio (la diferencia entre sus puntajes no es estadísticamente significativa), así que los declaro a ambos ganadores.
Emilio presentó tres estrategias, pero como los demás sólo presentaron una, me pareció justo tener en cuenta sólo la que él prefería. Además, el orden de los resultados de las demás estrategias no cambia si las otras dos estrategias participan.

Fue muy interesante comparar e implementar las distintas estrategias. Es posible que las dos ganadoras son equivalentes algorítmicamente, pero no controlé aún que así sea (ambas están expresadas de maneras distintas).

Pueden ver el código de la competencia aquí.

¡Gracias a todos y felicitaciones a Ariel y Emilio!