http://www.redcientifica.com/gaia/dp/p2_nor_c.htm
Indice:
Cómo Jugar al Dilema del Prisionero
- Introducción
- El dilema del Prisionero Clásico
- Cómo jugar a este juego
- Ejemplos de Jugadores
- Gramática en BNF
- Proponer nuevas reglas
- Un jugador verdaderamente original
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: COOPERATEPara 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 juegoPor 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
- Ejemplos de jugadores construidos con estas reglas:
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 reglasjugador : "BEGIN PLAYER" "NAME=" IDENTIFICADOR reglas "END PLAYER" ;Puede haber una o más reglasreglas : regla | regla reglas ;Una regla tiene la forma: "SI condiciones ENTONCES conclusion", y puede tener además una prioridadregla : "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 siemprecondiciones : 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 reglasPuedes 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/