多くの人がRPSをチャンスのゲームだと考えています。両方のプレイヤーが予想外にプレイする場合、最善の戦略はランダムにプレイすることです。ただし、少し予測可能性を紹介しましょう。
各ボットは、同時にプレイする内容を他のボットに伝える機会があります。その後、各ボットが他のプレイヤーが発表した内容を知るための一時停止があります。その武器をプレイした場合、勝ち負けまたは引き分けのポイントに加えて1ポイントを獲得すると発表しました。
勝利には2ポイント、引き分け、1ポイント、損失0ポイントの価値があります。
Honest Bot Dishonest
Win 3 2
Draw 2 1
Loss 1 0
正直であることはあなたの最大の利益です(しかし、相手があなたを信じないようにすることも)。
試合はラウンドロビン形式で行われ、目的はあなたがプレイする試合全体であなた自身の合計スコアを最大にすることです。
I / O形式:
- ボットは、4つの引数を取るPython 2.7関数であり、一意の名前(提出物を表すために使用される)を持つ必要があります。
- 最初の2つの引数は、常に順番になります。対戦相手の過去の動きと、それに続く過去の動きです。これらは、最初のラウンドから最新のラウンドまでの順番のリストになります。各インデックスには、対戦相手が行ったと主張した動きのリストと、実際に行った動きが含まれます。
- 次の2つの引数により、ボットは「正直な」ラウンドか「実際の」ラウンドかを判断できます。「正直な」ラウンドの場合、両方ともNoneになります。それが「本物の」ラウンドである場合、それらは順番に、対戦相手が彼らが行うと宣言した動きであり、その後、あなたが行うと宣言した動きです。
- 動きを表すすべての引数または引数の部分は、それぞれ「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