El Dilema del Prisionero Iterado

Prisionero

Hoy propongo una competencia al más puro estilo Bits en el Ring para conmemorar el 25 aniversario de la que, probablemente, sea la primera competición de este tipo.

La competición la organizó Robert Axelrod y la relata con cierto detalle Richard Dawkins en su libro El gen egoísta.

La idea es programar unos cuantos algoritmos que jueguen al Dilema del Prisionero Iterado y enfrentarlos. Con la puntuación obtenida por cada uno de esos algoritmos se generará una descendencia que premiará (con más copias) a los algoritmos que mejor lo hagan.

El objetivo es ver cómo fluctúa la capacidad de conseguir puntos de un determinado algoritmo en función de la población que le rodee. Un algoritmo muy eficiente contra todos sus adversarios pero muy ineficiente enfrentándose a sí mismo nunca podrá dominar esta competición.

Los algoritmos, en cada enfrentamiento, conocen los siguientes datos:

  • El número r de rondas que se han jugado.
  • Los vectores con el historial de jugadas propias (A) y ajenas (B)
  • La puntuación propia (a) y ajena (b) obtenida en las primeras r rondas de el actual enfrentamiento.
  • La población propia (Pa) y ajena (Pb).

En cada ejecución, y basándose en esos datos, el algoritmo debe devolver True si coopera y False si traiciona. Se puede hacer uso de la función randint(x,z) que devuelve un entero y que cumple x<=y<=z.

Hay tiempo hasta el viernes 11 a las 12 de la noche para participar. Tan sólo es necesario describir el algoritmo en los comentarios de esta entrada. Se pueden enviar tantos como se quiera.

Algunos ejemplos que ya he recibido son:

  • Algoritmo 1: En la primera jugada coopera y en las siguientes haz lo que hizo el contrario en la jugada anterior.
  • Algoritmo 2: En las tres primeras jugadas coopera y luego, si el contrario te ha traicionado al menos dos veces en las últimas 3 jugadas lo traicionas y si no cooperas.
  • Algoritmo 3: En la primera ronda cooperar y en el resto imitar al azar una jugada que haya hecho el contrario.

Por cierto, la matriz de pagos que usaré otorga 0 puntos a cada jugador si ambos traicionan, 3 puntos a cada uno si ambos cooperan y 5 puntos al que traiciona si uno traiciona y el otro coopera.

BOLAEXTRA: ¿Cómo? ¿Que no sabes lo que es el Dilema del Prisionero? ¡Pues pasa por la Wikipedia!

Escrito en 07/09/09 10:14 por Carlos Luna en las categorías:

Comentarios

Gravatar.com se ha roto

Coopera siempre.

Albert | 08/09/09 15:57 | #
Gravatar.com se ha roto

- En la primera jugada coopera. – Coopera con probabilidad [ nC / (nT+nC) ] + 0.1, donde nC es el numero de cooperaciones de tu adversario en las ultimas 10 (o menos si no las hay) jugadas y nT el numero de traiciones.

Albert | 08/09/09 16:07 | #
Gravatar.com se ha roto

Great!!!!!!!!!!!!!!!!!!!

rf components | 02/12/14 04:40 | #

Deja un Comentario

Quizás quieras usar textile para dar formato a tu comentario.

"linktext":http://       _em_       *strong*       -strike-       ^sup^       ~sub~
bq. Blockquote       # Lista numerada       * Lista no-numerada       ==html crudo, sin textile==

(no será mostrado) (http://...)