Nhiều người coi RPS là một trò chơi may rủi. Nếu cả hai người chơi chơi không thể đoán trước, chiến lược tốt nhất là chơi ngẫu nhiên. Tuy nhiên, hãy giới thiệu một chút về khả năng dự đoán cho nó.
Mỗi bot sẽ có cơ hội nói với bot khác những gì nó sẽ chơi cùng một lúc. Sau đó, có một khoảng dừng trong đó mỗi bot sẽ biết những gì người chơi khác đã thông báo. Nếu nó chơi vũ khí đó, nó tuyên bố nó sẽ ghi được một điểm ngoài số điểm của nó cho một trận thua hoặc hòa.
Một chiến thắng có giá trị hai điểm, một trận hòa, một điểm và thua 0 điểm.
Honest Bot Dishonest
Win 3 2
Draw 2 1
Loss 1 0
Thành thật là lợi ích tốt nhất của bạn (nhưng cũng phải chắc chắn rằng đối thủ của bạn không tin bạn).
Các trận đấu sẽ được chơi theo thể thức vòng tròn và mục tiêu sẽ là tối đa hóa tổng số điểm của bạn qua các trận đấu bạn chơi.
Định dạng I / O:
- Bot của bạn sẽ là một hàm Python 2.7 có 4 đối số và phải có một tên duy nhất (sẽ được sử dụng để thể hiện trình của bạn).
- Hai đối số đầu tiên sẽ luôn luôn theo thứ tự: các bước đi trong quá khứ của đối thủ, tiếp theo là các bước đi trong quá khứ của bạn. Đây sẽ là một danh sách theo thứ tự từ vòng đầu tiên đến vòng gần đây nhất, với mỗi chỉ số chứa một danh sách với nước đi mà đối thủ tuyên bố họ sẽ thực hiện, tiếp theo là di chuyển mà họ thực sự thực hiện.
- Hai đối số tiếp theo sẽ cho phép bot của bạn xác định xem đây là vòng "trung thực" hay vòng "thực". Nếu đó là một vòng "trung thực", cả hai sẽ là Không. Nếu đó là một vòng "thực sự", theo thứ tự, đối thủ của bạn sẽ tuyên bố họ sẽ thực hiện, tiếp theo là động tác bạn tuyên bố bạn sẽ thực hiện.
- Tất cả các đối số hoặc các phần của các đối số đại diện cho di chuyển sẽ sử dụng "R", "P" và "S" để thể hiện tương ứng với đá, giấy và kéo.
- Chức năng của bạn sẽ trả về "R" cho đá, "P" cho giấy hoặc "S" cho kéo. Các bot có khả năng trả về các giá trị khác sẽ bị loại.
- Mỗi bot sẽ được chạy với tất cả các bot khác 200 lần, và chính nó 100 lần. Mục tiêu là trở thành bot có nhiều điểm nhất khi kết thúc cuộc thi.
- Liên quan đến thảo luận trong các bình luận, bài nộp không được đọc hoặc ghi vào bất kỳ tệp nào, hoặc bằng mọi cách phá hoại hoặc đọc mã của đối thủ.
Ví dụ:
Đây là bốn ví dụ bot tôi kết hợp nhanh chóng. Họ sẽ tham gia cuộc thi như những bot bổ sung. Nếu bạn thua đến người cuối cùng, bạn có một số việc phải làm.
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"])
Điều khiển:
Và đây là bộ điều khiển tôi sẽ sử dụng. Các bài nộp mới sẽ được nhập vào đầu và thêm vào từ điển 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
Điểm cuối cùng:
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