หลายคนคิดว่า RPS เป็นเกมแห่งโอกาส หากผู้เล่นทั้งสองเล่นกันอย่างไม่คาดคิดกลยุทธ์ที่ดีที่สุดคือเล่นแบบสุ่ม อย่างไรก็ตามขอแนะนำการคาดเดาเล็กน้อย
บอทแต่ละคนจะมีโอกาสบอกบอทคนอื่น ๆ ว่ากำลังจะเล่นพร้อมกัน จากนั้นก็มีการหยุดชั่วคราวที่บอทแต่ละคนจะรู้ว่าผู้เล่นคนอื่นประกาศอะไร ถ้ามันเล่นอาวุธนั้นมันประกาศว่ามันจะทำคะแนนหนึ่งจุดนอกเหนือจากคะแนนสำหรับการสูญเสียหรือชนะ
การชนะนั้นมีค่าสองคะแนนการเสมอหนึ่งจุดและการสูญเสีย 0 คะแนน
Honest Bot Dishonest
Win 3 2
Draw 2 1
Loss 1 0
มันเป็นไปเพื่อประโยชน์ที่ดีที่สุดของคุณที่จะซื่อสัตย์ (แต่ยังเพื่อให้แน่ใจว่าฝ่ายตรงข้ามของคุณไม่เชื่อคุณ)
การแข่งขันจะมีการเล่นในรูปแบบโรบินกลมและมีวัตถุประสงค์เพื่อเพิ่มคะแนนรวมของคุณในการแข่งขันที่คุณเล่น
รูปแบบ I / O:
- บอทของคุณจะเป็นฟังก์ชั่น Python 2.7 ที่มีอาร์กิวเมนต์ 4 ตัวและจะต้องมีชื่อที่ไม่ซ้ำกัน (ซึ่งจะใช้เพื่อแสดงการส่งของคุณ)
- ข้อโต้แย้งสองข้อแรกจะเป็นไปตามลำดับคือการเคลื่อนไหวที่ผ่านมาของคู่ต่อสู้ตามมาด้วยการเคลื่อนไหวที่ผ่านมาของคุณ สิ่งเหล่านี้จะเป็นรายการตามลำดับจากรอบแรกไปยังรอบล่าสุดโดยแต่ละดัชนีมีรายการที่มีการย้ายคู่ต่อสู้ที่อ้างว่าพวกเขาจะทำตามด้วยการย้ายที่พวกเขาทำจริง
- ข้อโต้แย้งสองข้อถัดไปจะอนุญาตให้บอตของคุณพิจารณาว่านี่เป็นรอบ "ซื่อสัตย์" หรือรอบ "จริง" หากเป็นรอบ "ซื่อสัตย์" พวกเขาทั้งคู่จะไม่ใช่ ถ้ามันเป็นรอบ "ของจริง" พวกเขาจะเป็นไปตามลำดับการเคลื่อนไหวของคู่ต่อสู้ของคุณประกาศว่าพวกเขาจะทำตามด้วยการเคลื่อนไหวที่คุณประกาศว่าคุณจะทำ
- อาร์กิวเมนต์ทั้งหมดหรือบางส่วนของการขัดแย้งที่เป็นตัวแทนของการเคลื่อนไหวจะใช้ "R", "P" และ "S" เพื่อเป็นตัวแทนของหินกระดาษและกรรไกรตามลำดับ
- ฟังก์ชั่นของคุณควรส่งคืน "R" สำหรับหิน, "P" สำหรับกระดาษหรือ "S" สำหรับกรรไกร บอทที่มีความสามารถในการคืนค่าอื่น ๆ จะถูกตัดสิทธิ์
- บอทแต่ละอันจะถูกวิ่งชนบอทอื่น ๆ 200 ครั้งและ 100 ครั้ง เป้าหมายคือการเป็นบอทที่มีคะแนนมากที่สุดในตอนท้ายของการแข่งขัน
- ในส่วนที่เกี่ยวกับการอภิปรายในความคิดเห็นการส่งนั้นอาจไม่สามารถอ่านหรือเขียนลงในไฟล์ใด ๆ หรือในทางใดทางหนึ่งการก่อวินาศกรรมหรืออ่านรหัสของคู่ต่อสู้
ตัวอย่าง:
นี่คือบอทสี่ตัวอย่างที่ฉันรวบรวมไว้อย่างรวดเร็ว พวกเขาจะเข้าร่วมการแข่งขันเป็นบอทเพิ่มเติม หากคุณสูญเสียคนสุดท้ายคุณมีงานต้องทำ
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