Beaucoup de gens considèrent RPS comme un jeu de hasard. Si les deux joueurs jouent de manière imprévisible, la meilleure stratégie consiste à jouer au hasard. Cependant, introduisons un peu de prévisibilité.
Chaque bot aura une chance de dire à l'autre bot ce qu'il va jouer simultanément. Ensuite, il y a une pause pendant laquelle chaque bot saura ce que l'autre joueur a annoncé. S'il joue cette arme, il annonce qu'il marquera un point en plus de ses points pour une défaite ou un match nul.
Une victoire vaut deux points, un match nul, un point et une perte de 0 points.
Honest Bot Dishonest
Win 3 2
Draw 2 1
Loss 1 0
Il est dans votre intérêt d'être honnête (mais aussi de vous assurer que votre adversaire ne vous croit pas).
Les matchs se joueront dans un format de tournoi à la ronde et l'objectif sera de maximiser votre score total pour tous les matchs que vous jouez.
Format I / O:
- Votre bot sera une fonction Python 2.7 prenant 4 arguments et doit avoir un nom unique (qui sera utilisé pour représenter votre soumission).
- Les deux premiers arguments seront toujours, dans l'ordre: les mouvements passés de l'adversaire, suivis de vos mouvements passés. Ce sera une liste dans l'ordre du premier au dernier tour, chaque index contenant une liste avec le coup que l'adversaire a prétendu qu'il ferait, suivi du coup qu'il a réellement fait.
- Les deux arguments suivants permettront à votre bot de déterminer s’il s’agit d’un tour «honnête» ou «réel». Si c'est un tour "honnête", ils ne seront aucun. Si c'est un "vrai" round, ils seront, dans l'ordre, le coup que votre adversaire a déclaré qu'ils feraient, suivi du coup que vous avez déclaré que vous feriez.
- Tous les arguments ou parties d'arguments représentant des déplacements utiliseront respectivement "R", "P" et "S" pour représenter la roche, le papier et les ciseaux.
- Votre fonction doit renvoyer un "R" pour le rock, un "P" pour le papier ou un "S" pour les ciseaux. Les robots qui ont la possibilité de renvoyer d'autres valeurs seront disqualifiés.
- Chaque bot sera attaqué 200 fois sur un bot et 100 fois. L'objectif est d'être le bot avec le plus de points à la fin de la compétition.
- En ce qui concerne la discussion dans les commentaires, les soumissions ne peuvent pas lire ou écrire dans un fichier, ni saboter ou lire le code de l'adversaire.
Exemples:
Ce sont quatre exemples de robots que je mets rapidement en place. Ils rejoindront la compétition en tant que bots supplémentaires. Si vous perdez jusqu'au dernier, vous avez du travail à faire.
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"])
Manette:
Et voici le contrôleur que je vais utiliser. Les nouvelles soumissions seront importées au début et ajoutées au dictionnaire 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
Scores finaux:
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