Muchas personas consideran que RPS es un juego de azar. Si ambos jugadores juegan de forma impredecible, la mejor estrategia es jugar al azar. Sin embargo, vamos a introducir un poco de previsibilidad.
Cada bot tendrá la oportunidad de decirle al otro bot qué va a jugar simultáneamente. Luego hay una pausa en la que cada bot sabrá lo que anunció el otro jugador. Si juega esa arma, anunció que anotará un punto además de sus puntos por una derrota ganadora o un empate.
Una victoria vale dos puntos, un empate, un punto y una pérdida de 0 puntos.
Honest Bot Dishonest
Win 3 2
Draw 2 1
Loss 1 0
Le conviene ser honesto (pero también asegurarse de que su oponente no le crea).
Los partidos se jugarán en formato round robin, y el objetivo será maximizar su propia puntuación total en los partidos que juegue.
Formato de E / S:
- Su bot será una función Python 2.7 que toma 4 argumentos y debe tener un nombre único (que se utilizará para representar su envío).
- Los dos primeros argumentos siempre serán, en orden: los movimientos pasados del oponente, seguidos de sus movimientos pasados. Esta será una lista en orden desde la primera ronda hasta la más reciente, con cada índice que contiene una lista con el movimiento que el oponente afirmó que haría, seguido del movimiento que realmente hicieron.
- Los siguientes dos argumentos permitirán que su bot determine si se trata de una ronda "honesta" o una ronda "real". Si es una ronda "honesta", ambos serán Ninguno. Si es una ronda "real", serán, en orden, el movimiento que tu oponente declaró que harían, seguido del movimiento que declaraste que harías.
- Todos los argumentos o porciones de argumentos que representan movimientos usarán "R", "P" y "S" para representar piedra, papel y tijera, respectivamente.
- Su función debe devolver una "R" para piedra, una "P" para papel o una "S" para tijeras. Los bots que tengan la capacidad de devolver otros valores serán descalificados.
- Cada bot se ejecutará contra cualquier otro bot 200 veces, y a sí mismo 100 veces. El objetivo es ser el bot con más puntos al final de la competencia.
- En lo que respecta a la discusión en los comentarios, las presentaciones no pueden leer ni escribir en ningún archivo, ni de ninguna manera sabotear o leer el código del oponente.
Ejemplos:
Estos son cuatro bots de ejemplo que armé rápidamente. Se unirán a la competencia como bots adicionales. Si pierde con el último, tiene trabajo que hacer.
def honestpaper(I,dont,care,about_these):
return "P"
def honestrock(I,dont,care,about_these):
return "R"
def honestscissors(I,dont,care,about_these):
return "S"
import random
def randombot(I,dont,care,about_these):
return random.choice(["R","P","S"])
Controlador:
Y aquí está el controlador que usaré. Las nuevas presentaciones se importarán al principio y se agregarán al diccionario bot_map.
from honestrock import honestrock
from honestpaper import honestpaper
from honestscissors import honestscissors
from randombot import randombot
bot_map = {
0:honestrock, 1:honestpaper, 2:honestscissors, 3:randombot
}
player_num=len(bot_map)
def real(history1,history2,number,honest1,honest2):
return bot_map[number](history1,history2,honest1,honest2)
def honest(history1,history2,number):
return bot_map[number](history1,history2,None,None)
def play_match(num1,num2):
history1=[]
history2=[]
score1=0
score2=0
for x in range(250):
h1=honest(history2,history1,num1)
h2=honest(history1,history2,num2)
r1=real(history2,history1,num1,h2,h1)
r2=real(history1,history2,num2,h1,h2)
if h1==r1: score1+=1
if h2==r2: score2+=1
if r1==r2: score1+=1; score2+=1
elif r1=="R":
if r2=="P": score2+=2
else: score1+=2
elif r1=="P":
if r2=="S": score2+=2
else: score1+=2
else:
if r2=="R": score2+=2
else: score1+=2
history1.append([h1,r1])
history2.append([h2,r2])
return score1,score2
scores = []
for x in range(player_num):
scores.append(0)
for _ in range(100):
for x in range(player_num):
for y in range(player_num):
scorex,scorey=play_match(x,y)
scores[x]+=scorex
scores[y]+=scorey
for score in scores:
print score
Puntajes finales:
csbot 3430397
thompson 3410414
rlbot 3340373
have_we_been_here_before 3270133
mason 3227817
deepthought 3019363
adaptive_bot 2957506
THEbot 2810535
dontlietome 2752984
irememberhowyoulie 2683508
learningbot4 2678388
betrayal 2635901
averager 2593368
honestrandom 2580764
twothirds 2568620
mirrorbot 2539016
tit4tat 2537981
honestscissors 2486401
trusting_bot 2466662
rotate_scissors 2456069
rotate_paper 2455038
rotate_rock 2454999
honestpaper 2412600
honestrock 2361196
rockBot 2283604
trustingRandom 2266456
user5957401bot 2250887
randombot 2065943
Dx 1622238
liarliar 1532558
everybodylies 1452785