많은 사람들이 RPS를 우연한 게임이라고 생각합니다. 두 선수 모두 예상치 못한 플레이를하는 경우, 가장 좋은 전략은 무작위로 플레이하는 것입니다. 그러나 약간의 예측 가능성을 소개합시다.
각 봇은 다른 봇에게 동시에 플레이 할 내용을 알려줄 수 있습니다. 그런 다음 각 봇이 다른 플레이어가 발표 한 내용을 알 수있는 일시 중지가 있습니다. 그것이 그 무기를 사용하면 승리 손실이나 무승부 점수 외에 1 점을 획득 할 것이라고 발표했습니다.
승리는 2 점, 무승부, 1 점, 손실 0 점입니다.
Honest Bot Dishonest
Win 3 2
Draw 2 1
Loss 1 0
정직하게 행동하는 것이 가장 좋습니다 (그러나 상대방이 당신을 믿지 않도록하는 것).
경기는 라운드 로빈 형식으로 진행되며, 경기 중 자신의 총 점수를 극대화하는 것이 목표입니다.
I / O 형식 :
- 봇은 4 개의 인수를받는 Python 2.7 함수이며 고유 한 이름 (제출을 나타내는 데 사용됨)을 가져야합니다.
- 처음 두 가지 논증은 항상 순서대로 진행됩니다 : 상대의 과거 움직임과 과거의 움직임. 이들은 첫 라운드부터 가장 최근 라운드까지의 목록이 될 것이며, 각 인덱스는 상대방이 주장한 움직임과 함께 실제로 만들어진 움직임이 포함 된 목록을 포함합니다.
- 다음 두 인수를 통해 봇은 이것이 "정직한"라운드인지 "진짜"라운드인지 판단 할 수 있습니다. "정직한"라운드 인 경우 둘 다 없음입니다. "진정한"라운드 인 경우, 상대방이 자신이 선언 한 움직임과 순서대로 진행됩니다.
- 움직임을 나타내는 모든 인수 또는 인수의 일부는 "R", "P"및 "S"를 사용하여 각각 바위, 종이 및 가위를 나타냅니다.
- 함수는 바위의 경우 "R", 용지의 경우 "P"또는 가위의 경우 "S"를 반환해야합니다. 다른 값을 반환 할 수있는 봇은 실격됩니다.
- 각 봇은 다른 모든 봇에 대해 200 번, 자체적으로 100 번 실행됩니다. 목표는 경쟁이 끝날 때 가장 많은 점수를 가진 봇이되는 것입니다.
- 의견에 대한 논의와 관련하여 제출물은 파일을 읽거나 파일에 쓰거나 어떤 식 으로든 방해하거나 상대방의 코드를 읽을 수 없습니다.
예 :
이것들은 내가 함께 모은 4 개의 봇입니다. 그들은 추가 봇으로 경쟁에 참여할 것입니다. 마지막에 졌다면해야 할 일이 있습니다.
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"])
제어 장치:
그리고 여기 제가 사용할 컨트롤러가 있습니다. 새로운 제출물은 처음에 가져 와서 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
최종 점수 :
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