Molte persone considerano l'RPS un gioco d'azzardo. Se entrambi i giocatori giocano in modo imprevedibile, la strategia migliore è quella di giocare in modo casuale. Tuttavia, introduciamo un po 'di prevedibilità ad esso.
Ogni bot avrà la possibilità di dire all'altro bot cosa giocherà contemporaneamente. Poi c'è una pausa in cui ogni bot saprà cosa ha annunciato l'altro giocatore. Se gioca quell'arma ha annunciato che segnerà un punto in aggiunta ai suoi punti per una vittoria o un pareggio.
Una vittoria vale due punti, un pareggio, un punto e una perdita di 0 punti.
Honest Bot Dishonest
Win 3 2
Draw 2 1
Loss 1 0
È nel tuo interesse essere sincero (ma anche assicurarti che il tuo avversario non ti creda).
Le partite si giocheranno in un formato round robin e l'obiettivo sarà quello di massimizzare il tuo punteggio totale in tutte le partite che giochi.
Formato I / O:
- Il bot sarà una funzione Python 2.7 che accetta 4 argomenti e deve avere un nome univoco (che verrà utilizzato per rappresentare l'invio).
- I primi due argomenti saranno sempre, in ordine: le mosse passate dell'avversario, seguite dalle tue mosse passate. Questa sarà una lista in ordine dal primo al round più recente, con ogni indice contenente una lista con la mossa che l'avversario ha dichiarato di voler fare, seguita dalla mossa che ha effettivamente fatto.
- I prossimi due argomenti permetteranno al tuo bot di determinare se si tratta di un round "onesto" o di un round "reale". Se si tratta di un round "onesto", entrambi saranno Nessuno. Se si tratta di un round "reale", saranno, nell'ordine, la mossa dichiarata dal tuo avversario, seguita dalla mossa che hai dichiarato di voler fare.
- Tutti gli argomenti o parti di argomenti che rappresentano le mosse useranno "R", "P" e "S" per rappresentare rispettivamente roccia, carta e forbici.
- La tua funzione dovrebbe restituire una "R" per il rock, una "P" per la carta o una "S" per le forbici. I robot che hanno la capacità di restituire altri valori saranno squalificati.
- Ogni bot verrà eseguito contro ogni altro bot 200 volte e 100 volte stesso. L'obiettivo è quello di essere il bot con il maggior numero di punti alla fine della competizione.
- Per quanto riguarda la discussione nei commenti, gli invii non possono leggere o scrivere su alcun file, né in alcun modo sabotare o leggere il codice dell'avversario.
Esempi:
Questi sono quattro robot di esempio che ho messo insieme rapidamente. Si uniranno alla competizione come bot aggiuntivi. Se perdi l'ultimo, hai del lavoro da fare.
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"])
controller:
Ed ecco il controller che userò. I nuovi invii verranno importati all'inizio e aggiunti al dizionario 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
Punteggi finali:
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