ক্ষুদ্রতম অনন্য সংখ্যা চয়ন করতে একটি বট তৈরি করুন।
(মনোবিজ্ঞানের পরীক্ষার ভিত্তিতে আমি প্রায় বহু বছর আগে শুনেছি কিন্তু আবার সন্ধান করতে সক্ষম হইনি))
বিধি
- প্রতিটি গেমটিতে 1000 টি রাউন্ড খেলতে 10 টি এলোমেলোভাবে নির্বাচিত বট থাকবে।
- প্রতিটি রাউন্ডে, সমস্ত বটগুলি 1 থেকে 10 (সমেত) পর্যন্ত একটি পূর্ণসংখ্যা নির্বাচন করে। একই মান বেছে নেওয়া যে কোনও বট বাদ দেওয়া হবে এবং সবচেয়ে ছোট মান সহ অবশিষ্ট বট একটি পয়েন্ট পাবে।
- কোনও বট কোনও অনন্য মান না এনে কোনও পয়েন্ট প্রদান করা হবে না।
- 1000 রাউন্ড শেষে, সর্বাধিক পয়েন্ট (বা সর্বাধিক পয়েন্টের সাথে আবদ্ধ সমস্ত বট) সহ বট গেমটি জিতেছে।
- টুর্নামেন্টটি ২০০ * (প্লেয়ারের সংখ্যা) গেমগুলিতে টিকে থাকবে।
- সর্বোচ্চ জয় শতাংশ সহ বট টুর্নামেন্ট জিতল।
বিশেষ উল্লেখ
বটগুলি অবশ্যই পাইথন 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 টিরও কম গেমের অন্তর্ভুক্ত হওয়ার সম্ভাব্য ইভেন্টে, টুর্নামেন্টটি আবার চালু হবে।
- বটগুলি রাউন্ডের মধ্যে রাষ্ট্র সঞ্চয় করতে পারে তবে গেমগুলির মধ্যে নয়।
- নিয়ামক বা অন্যান্য বট অ্যাক্সেস অনুমোদিত নয়।
- ফলাফলগুলি খুব পরিবর্তনশীল হলে গেমের প্রতি গেমের সংখ্যা এবং রাউন্ডের সংখ্যা বাড়তে পারে to
- ত্রুটি বাড়াতে বা অবৈধ প্রতিক্রিয়া জানানো (নন-ইনটস, [1, 10] এর বাইরে মান ইত্যাদি) যে কোনও বট অযোগ্য ঘোষণা করা হবে এবং সেগুলি ছাড়াই টুর্নামেন্ট পুনরায় চালু করা হবে।
- রাউন্ডগুলির জন্য কোনও সময়সীমা নেই, তবে বটগুলি চিন্তা করতে খুব বেশি সময় নিলে আমি এটি প্রয়োগ করতে পারি।
- ব্যবহারকারী হিসাবে জমা দেওয়ার সংখ্যার কোনও সীমা নেই।
জমা দেওয়ার শেষ সময়সীমা ২৩:৫৯:59 ইউটিসি শুক্রবার, ২৮ সেপ্টেম্বর।টুর্নামেন্টটি এখন জমা দেওয়ার জন্য বন্ধ রয়েছে।
ফলাফল
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)