สร้างบอทเพื่อเลือกหมายเลขเฉพาะที่เล็กที่สุด
(จากการทดลองทางจิตวิทยาฉันได้ยินมาหลายปีแล้ว แต่ไม่สามารถติดตามได้อีก)
กฎระเบียบ
- แต่ละเกมจะประกอบไปด้วยบอทที่สุ่มเลือก 10 ตัวซึ่งเล่นได้ 1,000 รอบ
- แต่ละรอบบอตทั้งหมดจะเลือกจำนวนเต็มตั้งแต่ 1 ถึง 10 (รวม) บอตใด ๆ ที่เลือกค่าเดียวกันจะถูกแยกออกและบอทที่เหลือซึ่งมีค่าน้อยที่สุดจะได้รับแต้ม
- ในกรณีที่ไม่มีบอทเลือกค่าที่ไม่ซ้ำกันจะไม่มีการให้คะแนน
- ในตอนท้ายของรอบ 1,000, บอทที่มีคะแนนมากที่สุด (หรือบอททั้งหมดที่ผูกด้วยคะแนนมากที่สุด) ชนะเกม
- ทัวร์นาเมนต์จะมีอายุ 200 * เกม (จำนวนผู้เล่น)
- บอทที่มีเปอร์เซ็นต์การชนะสูงสุดจะเป็นผู้ชนะการแข่งขัน
ข้อมูลจำเพาะ
บอทจะต้องเป็นงูใหญ่ 3 ชั้นและต้องใช้สองวิธี: และselect
บอทจะถูกสร้างขึ้นด้วยดัชนี ไม่ผ่านการขัดแย้งและส่งกลับทางเลือกของบ็อตสำหรับรอบปัจจุบัน ถูกส่งผ่านรายการตัวเลือกที่ทำโดยแต่ละบ็อตในรอบก่อนหน้าupdate
select
update
ตัวอย่าง
class Lowball(object):
def __init__(self, index):
# Initial setup happens here.
self.index = index
def select(self):
# Decision-making happens here.
return 1
def update(self, choices):
# Learning about opponents happens here.
# Note that choices[self.index] will be this bot's choice.
pass
ตัวควบคุม
import numpy as np
from bots import allBotConstructors
allIndices = range(len(allBotConstructors))
games = {i: 0 for i in allIndices}
wins = {i: 0 for i in allIndices}
for _ in range(200 * len(allBotConstructors)):
# Choose players.
playerIndices = np.random.choice(allIndices, 10, replace=False)
players = [allBotConstructors[j](i) for i, j in enumerate(playerIndices)]
scores = [0] * 10
for _ in range(1000):
# Let everyone choose a value.
choices = [bot.select() for bot in players]
for bot in players:
bot.update(choices[:])
# Find who picked the best.
unique = [x for x in choices if choices.count(x) == 1]
if unique:
scores[choices.index(min(unique))] += 1
# Update stats.
for i in playerIndices:
games[i] += 1
bestScore = max(scores)
for i, s in enumerate(scores):
if s == bestScore:
wins[playerIndices[i]] += 1
winRates = {i: wins[i] / games[i] for i in allIndices}
for i in sorted(winRates, key=lambda i: winRates[i], reverse=True):
print('{:>40}: {:.4f} ({}/{})'.format(allBotConstructors[i], winRates[i], wins[i], games[i]))
ข้อมูลเพิ่มเติม
- บอทจะไม่เล่นเกมกับตัวเอง
- ในกรณีที่ไม่น่าเป็นไปได้ที่บอทรวมอยู่ในเกมน้อยกว่า 100 เกมการแข่งขันจะมีการรันใหม่
- บอตอาจเก็บสถานะระหว่างรอบ แต่ไม่ใช่ระหว่างเกม
- ไม่อนุญาตให้เข้าถึงตัวควบคุมหรือบ็อตอื่น ๆ
- จำนวนเกมและจำนวนรอบต่อเกมอาจมีการเพิ่มขึ้นหากผลลัพธ์มีความหลากหลายมากเกินไป
- บอทใด ๆ ที่ทำให้เกิดข้อผิดพลาดหรือให้การตอบสนองที่ไม่ถูกต้อง (ไม่ใช่ ints, ค่านอก [1, 10], ฯลฯ ) จะถูกตัดสิทธิ์และการแข่งขันจะดำเนินการซ้ำโดยที่ไม่มีพวกเขา
- ไม่มีการ จำกัด เวลาสำหรับรอบ แต่ฉันอาจนำไปใช้ถ้าบอตใช้เวลานานเกินไปที่จะคิด
- ไม่ จำกัด จำนวนการส่งต่อผู้ใช้
กำหนดส่งผลงานคือ 23:59:59 UTC วันศุกร์ที่ 28 กันยายนการแข่งขันสิ้นสุดลงแล้วสำหรับการส่งผลงาน
ผล
BayesBot: 0.3998 (796/1991)
WhoopDiScoopDiPoop: 0.3913 (752/1922)
PoopDiScoopty: 0.3216 (649/2018)
Water: 0.3213 (660/2054)
Lowball: 0.2743 (564/2056)
Saboteur: 0.2730 (553/2026)
OneUpper: 0.2640 (532/2015)
StupidGreedyOne: 0.2610 (516/1977)
SecondSaboteur: 0.2492 (492/1974)
T42T: 0.2407 (488/2027)
T4T: 0.2368 (476/2010)
OpportunityBot: 0.2322 (454/1955)
TheGeneral: 0.1932 (374/1936)
FindRepeats: 0.1433 (280/1954)
MinWin: 0.1398 (283/2025)
LazyStalker: 0.1130 (226/2000)
FollowBot: 0.1112 (229/2060)
Assassin: 0.1096 (219/1999)
MostlyAverage: 0.0958 (194/2024)
UnchosenBot: 0.0890 (174/1955)
Raccoon: 0.0868 (175/2015)
Equalizer: 0.0831 (166/1997)
AvoidConstantBots: 0.0798 (158/1980)
WeightedPreviousUnchosen: 0.0599 (122/2038)
BitterBot: 0.0581 (116/1996)
Profiteur: 0.0564 (114/2023)
HistoryBot: 0.0425 (84/1978)
ThreeFourSix: 0.0328 (65/1984)
Stalker: 0.0306 (61/1994)
Psychadelic: 0.0278 (54/1943)
Unpopulist: 0.0186 (37/1994)
PoissonsBot: 0.0177 (35/1978)
RaccoonTriangle: 0.0168 (33/1964)
LowHalfRNG: 0.0134 (27/2022)
VictoryPM1: 0.0109 (22/2016)
TimeWeighted: 0.0079 (16/2021)
TotallyLost: 0.0077 (15/1945)
OneTrackMind: 0.0065 (13/1985)
LuckySeven: 0.0053 (11/2063)
FinalCountdown: 0.0045 (9/2000)
Triangle: 0.0039 (8/2052)
LeastFrequent: 0.0019 (4/2067)
Fountain: 0.0015 (3/1951)
PlayerCycle: 0.0015 (3/1995)
Cycler: 0.0010 (2/1986)
SecureRNG: 0.0010 (2/2032)
SneakyNiner: 0.0005 (1/2030)
I_Like_Nines: 0.0000 (0/1973)