http://www.redcientifica.com/gaia/

http://www.redcientifica.com/gaia/dp/p2_nor_c.htm


Cómo Jugar al Dilema del Prisionero

Manuel de la Herrán Gascón

Indice:



Introducción

  • Este juego es un analogía de otro al que todos jugamos en la vida real. Se trata de estudiar distintas actitudes sociales (egoísmo, altruismo y cooperación) y comprobar cuáles son estrategias evolutivamente estables, cuáles se imponen o desaparecen en una población. Para ello crearemos "seres virtuales" que se moverán en un "mundo virtual" comportándose según unas reglas que nosotros podremos programar. Puedes participar en este juego creando uno de estos "jugadores virtuales" con las reglas que desees.

  • Cada jugador posee un valor en puntos (dinero, energía, peso, fitness,...) y cuando se encuentra con otro jugador, echan una "partida" entre ellos, modificandose el peso de cada uno. Cada jugador trata de conseguir el máximo numero de puntos.

    [ Volver al Indice ]



  • El dilema del Prisionero Clásico

  • En el dilema del prisionero entre dos jugadores, cada jugador tiene dos opciones posibles:

    D: DEFRAUD
    C: COOPERATE

    Para los que ya habíais visitado esta página antes, es obvio que la gramática ha cambiado un poco, más que nada, antes estaba en castellano y ahora está en inglés, pero creo que se entiende ;-).

    Cada jugador no sabe qué opción va a elegir el otro.

    Existen cuatro posibilidades: que ninguno defraude, que lo hagan los dos, que lo haga sólo el primero, o que lo haga sólo el segundo. Los puntos ganados en cada caso se muestran en la siguiente tabla:

    Si... ...entonces
    el jugador 1... y el jugador 2... el jugador 1 recibe... y el jugador 2 recibe...
    Coopera Coopera 3 3
    Coopera Defrauda 0 5
    Defrauda Coopera 5 0
    Defrauda Defrauda 0 0



    Se trata de conseguir el mayor número de puntos. El juego puede jugarse una o muchas veces seguidas.

    Pensemos que sólo se juega una vez. Lo mejor para un jugador en principio es siempre cooperar:

  • Si el otro coopera, es mejor defraudar (yo gano 5 y él 0, en vez de ganar ambos 3).

  • Si el otro defrauda, también es mejor defraudar (para ganar ambos 0, en vez de ganar él 5 y yo 0).

    Parece que los jugadores buenos serán aquellos que siempre defraudan.

    Sin embargo, pensemos ahora que el juego se repite, y que existen varias parejas de jugadores.

    Los jugadores que se dediquen a defraudarse mutuamente ganaran ambos 0; en cambio jugadores que cooperen mutuamente ganaran 3 sin cesar. Si los jugadores son capaces de recordar lo que han hecho sus contrincantes, esta información puede ser muy interesante para decidir las futuras acciones.

    [ Volver al Indice ]



  • Cómo jugar a este juego

  • Por favor, lee estas normas y los ejemplos antes de jugar.

  • La admisión de participantes finaliza el 1 de febrero de 1998.

  • Cada participante (persona) en el juego puede crear uno o varios jugadores virtuales.

  • Los jugadores virtuales creados se pondrán todos juntos en una "sopa de jugadores". Esta sopa es un programa que se está desarrollando en estos momentos. Por ahora se puede adelantar que el progrma admitirá las siguientes variantes:
    • Jugar varias partidas todos contra todos; por ejemplo, cada jugador jugará 100 partidas seguidas con cada uno de los restantes jugadores
    • Con la pretensión de simular más fielmente el juego del prisionero en la vida real, existirá la opción de que los jugadores se muevan al azar por un plano. Al encontrarse dos jugadores, jugarán una "partida al prisionero" y después seguirán moviéndose. El plano podrá se tan grande como se desee, y se podrán definir varios tipos de "barreras" creando así mapas de obstáculos en el mundo virtual de jugadores.


  • Para crear un jugador es preciso rellenar y enviar este formulario. Cuando se cierre la admisión de participantes, existirá un fichero con las definiciones de todos los agentes. Entonces se ejecutará el programa con ese fichero, y cada día se actualizarán las paginas de este web con el estado del juego.

  • Un jugador está definido por una serie de reglas que describen cómo va a comportarse frente a otros jugadores. Lo normal son jugadores con unas cuatro reglas, aunque pueden ser más. El máximo de reglas por jugador es 50.

  • Puedes crear tus propias reglas siguiendo las normas de la gramática, o puedes usar las mismas reglas que aparecen en los ejemplos para crear tus propios agentes, o modificarlas ligeramente.

  • Un jugador nace inicialmente con 0 puntos, y consigue mas puntos según esta tabla.

    Si... ...entonces
    el jugador 1... y el jugador 2... el jugador 1 recibe... y el jugador 2 recibe...
    Coopera Coopera 3 3
    Coopera Defrauda 0 5
    Defrauda Coopera 5 0
    Defrauda Defrauda 0 0


    Un jugador no es capaz de distinguir si está jugando contra un jugador distinto cada vez, o siempre contra el mismo. Los jugadores guardan una memoria de las partidas pero no son capaces de distinguirse entre sí. Por ejemplo, un jugador puede tener almacenado lo siguiente:

    PA = 9
    YO C D C D C C D C
    EL D D C C C D C D
    NP 1 2 3 4 5 6 7 8 9


    NP: Número de Partida
    PA: Partida Actual


  • A continuación se muestran varios ejemplos de agentes. Se recomienda leer los ejemplos, ya que en ellos se explica cómo crear agentes.

    [ Volver al Indice ]

  • Gramática

     

    Formato de las reglas

    Esta es la gramática en BNF (Forma de Backus-Naur, estilo Yacc). En rojo aparecen algunos comentarios.

    
    
    Un jugador se compone de reglas
    jugador  :  "BEGIN PLAYER"
                "NAME="
                IDENTIFICADOR
                reglas
                "END PLAYER"
             ;
       
    
    Puede haber una o más reglas
    reglas   :  regla
             |  regla
                reglas
             ;   
    
    
    Una regla tiene la forma: "SI condiciones ENTONCES conclusion", y puede tener además una prioridad
    regla    :  "BEGIN RULE"
                listaCondiciones
                accion
                "END RULE"
             |  "BEGIN RULE"
                prioridad
                listaCondiciones
                accion
                "END RULE"
             ;
    
    
    A cada regla se le puede asignar una prioridad para que en el caso de poder dispararse mas de una regla, se ejecute la regla de prioridad mas alta.
    prioridad : "PRIORITY="
                NUMERO
             ;
       
    listaCondiciones:  "CONDITION="
                condiciones
             ;
    
    
    Puede haber una o más condiciones separadas por AND, o puede no haber condición y la regla ser cierta siempre
    condiciones :  condicion
             |  condicion
                "AND"
                condiciones
             ;
    
    condicion :  cond_el
             |  cond_yo
             |  cond_np
             |  "ALWAYS"
             |  tantoPorCiento
             ;
       
    cond_el  :  "HE HAS"
                jugada
                "IN NP="
                partida
             ;
    
    cond_yo  :  "I HAVE"
                jugada
                "IN NP="
                partida
             ;
    
    cond_np  :  "NP="
                partida
             |  "NP=MULTIPLE OF"
                NUMERO
             ;
    
    partida  :  NUMERO
             |  "PA-"
                NUMERO
             ;
       
    accion   :  "ACTION="
                jugada
             |  "ACTION="
                jugada
                "(" tantoPorCiento ")"
             ;        
    
    
    jugada   :  "COOPERATE"
             |  "DEFRAUD"
             ;
       
    tantoPorCiento :  NUMERO
                      "%"
             ; 
    
    
    
    [0-9]+    { return NUMERO; }
    [A-Za-z0-9\_\-]+  { return IDENTIFICADOR; }
    
    

    [ Volver al Indice ]

     

    Ejemplo 1: siempre cooperar

    Se trata de cooperar siempre


    BEGIN PLAYER
    NAME=jugador_ejemplo_1
      BEGIN RULE
        CONDITION=ALWAYS
        ACTION=COOPERATE
      END RULE
    END PLAYER



  • Los espacios y tabuladores son opcionales, se ignoran.
  • NAME puede ser cualquier combinación de numeros, letras y los simbolos "_" y "-", sin espacios.

    Otra forma de hacer lo mismo es:


    BEGIN PLAYER
      NAME=jugador_ejemplo_1
      BEGIN RULE
        PRIORITY=0
        CONDITION=ALWAYS
        ACTION=COOPERATE
      END RULE
    END PLAYER



    A cada regla se le puede asignar una prioridad. La prioridad es útil cuando existen varias reglas, y es posible que la condición sea cierta para más de una regla. En ese caso se ejecutará la regla de prioridad más alta (con el número más alto). Si se diera el caso de que la prioridad más alta la tiene más de una regla del conjunto de las que pueden dispararse, entonces el programa elegirá una al azar.

    [ Volver al Indice ]

     

    Ejemplo 2: siempre defraudar

    Se trata de defraudar siempre


    BEGIN PLAYER
      NAME=jugador_ejemplo_2
      BEGIN RULE
        CONDITION=ALWAYS
        ACTION=DEFRAUD
      END RULE
    END PLAYER



    Si se cumple la condición (es ALWAYS y por tanto siempre se cumple), entonces se defrauda

    Otra forma de hacer lo mismo es:


    BEGIN PLAYER
      NAME=jugador_ejemplo_2
      BEGIN RULE
        CONDITION=ALWAYS
        ACTION=DEFRAUD(100%)
      END RULE
    END PLAYER



    Si se cumple la condición (es ALWAYS y por tanto siempre se cumple), entonces se realizan acciones al azar de forma que se defrauda el 100% de las veces

    Otra forma de hacer lo mismo es:


    BEGIN PLAYER
      NAME=jugador_ejemplo_2
      BEGIN RULE
        CONDITION=ALWAYS
        ACTION=COOPERATE(0%)
      END RULE
    END PLAYER



    Si se cumple la condición (es ALWAYS y por tanto siempre se cumple), entonces se coopera el 0% de las veces, es decir, se defrauda siempre.

    [ Volver al Indice ]

     

    Ejemplo 3: cooperar y defraudar alternativos

    Se trata de cooperar y defraudar alternativamente


    BEGIN PLAYER
      NAME=jugador_ejemplo_3
      BEGIN RULE
        PRIORITY=2
        CONDITION=NP=MULTIPLE OF 2
        ACTION=COOPERATE
      END RULE
      BEGIN RULE
        PRIORITY=1
        CONDITION=ALWAYS
        ACTION=DEFRAUD
      END RULE
    END PLAYER



  • La primera regla tiene mayor prioridad que la segunda
  • Si el número de partida es multiplo de 2 (partidas pares), se coopera
  • El resto de los casos, se defrauda

    [ Volver al Indice ]

     

    Ejemplo 4: cooperar el 47% de las veces

    Se trata de cooperar el 47% de las veces y defraudar el resto


    BEGIN PLAYER
      NAME=jugador_ejemplo_4
      BEGIN RULE
        CONDITION=ALWAYS
        ACTION=COOPERATE(47%)
      END RULE
    END PLAYER



    La regla se cumple siempre, y consiste en cooperar 47 veces de cada cien. Para ello se genera un numero al azar de 1 a 100. Si el numero es menor o igual que 47, se coopera y en caso contrario, se defrauda.

    Otra forma de hacer lo mismo es:


    BEGIN PLAYER
      NAME=jugador_ejemplo_4
      BEGIN RULE
        PRIORITY=2
        CONDITION=47%
        ACTION=DEFRAUD
      END RULE
      BEGIN RULE
        PRIORITY=1
        CONDITION=ALWAYS
        ACTION=COOPERATE
      END RULE
    END PLAYER



    La primera regla tiene mayor prioridad que la segunda. Para saber si se cumple la condición de la primera regla, se genera un número al azar de 1 a 100. Si el numero es menor o igual que 47, entonces la condición se cumple y se ejecuta la acción, que es defraudar. Si no se cumple, entonces se analiza la otra regla, que siempre se cumple y por tanto se coopera.

    [ Volver al Indice ]

     

    Ejemplo 5: Donde las dan las toman

    Se trata de cooperar la primera vez, y repetir la última jugada de nuestro contrincante el resto de las partidas.


    BEGIN PLAYER
      NAME=jugador_ejemplo_5
      BEGIN RULE
        PRIORITY=2
        CONDITION=NP=1
        ACTION=COOPERATE
      END RULE
      BEGIN RULE
        PRIORITY=1
        CONDITION=HE HAS COOPERATE IN NP=PA-1
        ACTION=COOPERATE
      END RULE
      BEGIN RULE
        PRIORITY=1
        CONDITION=HE HAS DEFRAUD IN NP=PA-1
        ACTION=DEFRAUD
      END RULE
    END PLAYER



  • Si la partida es la primera, se coopera.
  • Si el contrario ("HE") ha cooperado en la partida anterior, es decir, en numero de partida igual a la partida actual menos uno ("NP=PA-1"), entonces se coopera
  • Si el contrario ("HE") ha defraudado en la partida anterior, es decir, en numero de partida igual a la partida actual menos uno ("NP=PA-1"), entonces se defrauda

    [ Volver al Indice ]

     

    Ejemplo 6: Mezcla de cooperador y toma y daca

    Se trata de cooperar la primera vez, y el resto de las partidas se hace: el 40% de las veces se coopera, y el 60% restante, se coopera solo si nuestro contrincante ha cooperado en sus dos ultimas partidas.


    BEGIN PLAYER
      NAME=jugador_ejemplo_6
      BEGIN RULE
        PRIORITY=4
        CONDITION=NP=1
        ACTION=COOPERATE
      END RULE
      BEGIN RULE
        PRIORITY=3
        CONDITION=40%
        ACTION=COOPERATE
      END RULE
      BEGIN RULE
        PRIORITY=2
        CONDITION=HE HAS COOPERATE IN NP=PA-1
        AND HE HAS COOPERATE IN NP=PA-2
        ACTION=COOPERATE
      END RULE
      BEGIN RULE
        PRIORITY=1
        CONDITION=ALWAYS
        ACTION=DEFRAUD
      END RULE
    END PLAYER



  • Regla 1: Si la partida es la primera, se coopera.
  • Regla 2: Se genera un número al azar de 1 a 100. Si el numero es menor o igual que 40, entonces la condición se cumple y se ejecuta la acción, que es cooperar. Si no se cumple, entonces se analizan las reglas 3 y 4.
  • Regla 3: Si el contrario ("EL") ha cooperado en la partida anterior, es decir, en numero de partida igual a la partida actual menos uno ("NP=PA-1"), y en la anterior a esta ("NP=PA-2"), entonces se coopera
  • Regla 4: Si no se ha cumplido ninguna de las anteriores, se defrauda

    [ Volver al Indice ]

     

    Ejemplo 7: Rencoroso Total

    Se trata de cooperar la primera vez y todas las siguientes (suponemos que son 10) mientras el otro también lo haga. Si alguna vez el contrario defrauda, entonces desde ese momento se defrauda siempre.


    BEGIN PLAYER
      NAME=RENCOROSOTOTAL
      BEGIN RULE
        PRIORITY=3
        CONDITION=NP=1
        ACTION=COOPERATE
      END RULE
      BEGIN RULE
        PRIORITY=1
        CONDITION=ALWAYS
        ACTION=COOPERATE
      END RULE
      BEGIN RULE
        PRIORITY=2
        CONDITION=HE HAS DEFRAUD IN NP=PA-1
        ACTION=DEFRAUD
      END RULE
      BEGIN RULE
        PRIORITY=2
        CONDITION=HE HAS DEFRAUD IN NP=PA-2
        ACTION=DEFRAUD
      END RULE
      BEGIN RULE
        PRIORITY=2
        CONDITION=HE HAS DEFRAUD IN NP=PA-3
        ACTION=DEFRAUD
      END RULE
      BEGIN RULE
        PRIORITY=2
        CONDITION=HE HAS DEFRAUD IN NP=PA-4
        ACTION=DEFRAUD
      END RULE
      BEGIN RULE
      BEGIN RULE
        PRIORITY=2
        CONDITION=HE HAS DEFRAUD IN NP=PA-5
        ACTION=DEFRAUD
      END RULE
      BEGIN RULE
        PRIORITY=2
        CONDITION=HE HAS DEFRAUD IN NP=PA-6
        ACTION=DEFRAUD
      END RULE
      BEGIN RULE
        PRIORITY=2
        CONDITION=HE HAS DEFRAUD IN NP=PA-7
        ACTION=DEFRAUD
      END RULE
      BEGIN RULE
        PRIORITY=2
        CONDITION=HE HAS DEFRAUD IN NP=PA-8
        ACTION=DEFRAUD
      END RULE
      BEGIN RULE
        PRIORITY=2
        CONDITION=HE HAS DEFRAUD IN NP=PA-9
        ACTION=DEFRAUD
      END RULE
    END PLAYER

    [ Volver al Indice ]



    Proponer nuevas reglas

    Puedes proponer nuevas reglas no contempladas por la gramática y si es posible las incluiremos para hacer el juego más potente. Envía tus comentarios o sugerencias a E-mail

    [ Volver al Indice ]



    Un jugador verdaderamente original




    BEGIN PLAYER
      NAME=geos
      BEGIN MUERTE
        CONDITION=NUNCA
        ACTION=SIEMPRE
      END MUERTE
    END PLAYER





    [ Volver al Indice ]


    [ Jugar Ya! | ¿Cómo Jugar? | Resultados del Juego ]
    [ Home Page de Gaia | Home Page del Juego ]
    [ Más información | Normas de la primera edición del juego | Resultados de la primera edición del juego ]
    [ E-mail | E-mail ]

    En Internet en
    http://www.redcientifica.com/gaia/

  • Traduccion