এই চ্যালেঞ্জের মধ্যে আপনি কোলাহলপূর্ণ পুনরাবৃত্তি হওয়া বন্দীর দ্বিধা খেলবেন।
বন্দীদের দূর্দশা সহযোগিতা, অথবা খুঁত: খেলা তত্ত্ব যেখানে একটি দৃশ্যকল্প দুই খেলোয়াড়, দুটি বিকল্প সঙ্গে প্রতিটি আছে হয়। প্রতিটি খেলোয়াড় তাদের পক্ষে সহযোগিতা করার চেয়ে ত্রুটিযুক্ত থাকলে তারা তাদের পক্ষে আরও ভাল কাজ করে তবে উভয় খেলোয়াড়ই ফলাফলটিকে পছন্দ করবে যেখানে উভয় খেলোয়াড়ই যেখানে দুজন খেলোয়াড় ত্রুটিযুক্ত সেখানে এক সাথে সহযোগিতা করে।
পুনরাবৃত্তি হওয়া বন্দির দ্বিধা একই খেলা, আপনি একই প্রতিপক্ষের বিরুদ্ধে বারবার না খেলে এবং আপনি জানেন যে আপনার প্রতিপক্ষ অতীতে কী খেলেছে। আপনার প্রতিপক্ষ যেভাবেই হোক না কেন আপনার উদ্দেশ্য সর্বদা নিজের জন্য সর্বোচ্চ স্কোর সংগ্রহ করা।
কোলাহলপূর্ণ পুনরাবৃত্তি হওয়া বন্দীর দ্বিধা যোগাযোগের মধ্যে কিছু আওয়াজ দেয় noise আপনার প্রতিপক্ষ অতীতে কী খেলেছে সে সম্পর্কে আপনার জ্ঞানের কিছুটা শব্দ শোনানো হবে। আপনি অতীতে কী পদক্ষেপ নিয়েছেন তাও জানতে পারবেন। শব্দের হার একই প্রতিপক্ষের বিরুদ্ধে একটি রাউন্ডের উপরে ধ্রুবক, তবে বিভিন্ন রাউন্ডের মধ্যে পৃথক।
চ্যালেঞ্জ
এই চ্যালেঞ্জের মধ্যে আপনি কোলাহলপূর্ণ পুনরাবৃত্তি হওয়া বন্দীর দ্বিধা খেলতে পাইথন 3 প্রোগ্রাম লিখবেন।
আপনার প্রোগ্রামটি তিনটি ইনপুট গ্রহণ করবে:
এলোমেলো ফ্লিপগুলি প্রয়োগ না করে আপনার নিজের চলগুলি।
এলোমেলো ফ্লিপগুলি প্রয়োগ করে আপনার প্রতিপক্ষের চালগুলি।
একটি রাষ্ট্র পরিবর্তনশীল, যা প্রতিটি রাউন্ড খালি তালিকা হিসাবে শুরু হয় এবং যা আপনি চাইলে সংশোধন করতে পারেন। আপনি যদি এটি ব্যবহার করতে না চান তবে আপনি এটিকে এড়িয়ে যেতে পারেন।
আপনার প্রোগ্রাম 'c'
সহযোগিতা বা 'd'
ত্রুটি আউটপুট করা উচিত ।
উদাহরণস্বরূপ, এখানে এমন একটি প্রোগ্রাম রয়েছে যা যদি প্রতিপক্ষ অতীতে কমপক্ষে 60% সময় র্যান্ডম ফ্লিপগুলি প্রয়োগ করার পরে এবং প্রথম 10 টি ফ্লপের ক্ষেত্রে সহযোগিতা করে:
def threshold(my_plays, their_flipped_plays, state):
if len(their_flipped_plays) < 10:
return 'c'
opp_c_freq = their_flipped_plays.count('c')/len(their_flipped_plays)
if opp_c_freq > 0.6:
return 'c'
else:
return 'd'
আপনি যদি পাইথন না জানেন তবে সিউডোকোডে আপনার জমাটি লিখুন এবং কেউ (আমি বা সাইটের অন্য সদস্য) সংশ্লিষ্ট পাইথন প্রোগ্রামটি তৈরি করতে পারেন।
গেমপ্লের
টুর্নামেন্টের রানারটি এখানে পাওয়া যাবে: গোলমাল-খেলা । চালান noisy-game.py
টুর্নামেন্ট চালানোর জন্য। আমি নতুন জমাগুলি দিয়ে সেই সংগ্রহস্থলটিকে আপডেট রাখব। উদাহরণস্বরূপ প্রোগ্রামগুলি পাওয়া যাবে basic.py
।
একটি প্রোগ্রামের সামগ্রিক স্কোর হল তার গেমের 100 টির বেশি নাটকের মোট স্কোর।
একটি গেম প্রতিটি খেলোয়াড়ের সাথে নিজের খেলোয়াড়ের বিপরীতে রাউন্ড-রবিন ম্যাচআপগুলি নিয়ে গঠিত। একটি ম্যাচআপ 100 রাউন্ড নিয়ে গঠিত। একটি রাউন্ডে 300 টি মুভ থাকে, যার প্রতিটিটিতে আউটপুটিং 'c'
বা জড়িত 'd'
।
আপনার জমাটি আপনার নিজের সহ প্রতিটি জমা দেওয়ার বিপরীতে ম্যাচআপ খেলবে। প্রতিটি ম্যাচআপ 100 টি রাউন্ড নিয়ে গঠিত। প্রতিটি রাউন্ডের সময় থেকে, এড়াতে এলোমেলোভাবে একটি ফ্লিপ সম্ভাবনা বেছে নেওয়া হবে [0, 0.5]
।
প্রতিটি রাউন্ডে 300 টি পদক্ষেপ থাকবে। প্রতিটি পদক্ষেপে, উভয় প্রোগ্রামই পূর্ববর্তী সমস্ত নাটকগুলি চেষ্টা করেছে এবং অন্যান্য প্রোগ্রামগুলি পূর্বের সমস্ত নাটকগুলি ফ্লিপ প্রয়োগ করার পরে এবং একটি রাষ্ট্র পরিবর্তনশীল, যা একটি পরিবর্তনীয় তালিকা যা প্রোগ্রামটি চাইলে তা পরিবর্তন করতে পারে receive প্রোগ্রামগুলি তাদের চলনগুলি আউটপুট করবে।
চালগুলি নীচে স্কোর করা হয়: যদি কোনও প্রোগ্রাম একটি খেলে 'c'
, বিপরীত প্রোগ্রামটি 2 পয়েন্ট পায়। যদি কোনও প্রোগ্রাম একটি খেলে 'd'
, সেই প্রোগ্রামটি 1 পয়েন্ট পায়।
তারপরে, প্রতিটি পদক্ষেপটি ফ্লিপ সম্ভাবনার সমান সম্ভাব্যতার সাথে স্বাধীনভাবে উল্টানো হয় এবং প্রতিপক্ষকে দেখানোর জন্য সংরক্ষণ করা হয়।
সমস্ত রাউন্ড খেলার পরে, আমরা প্রতিটি ম্যাচআপে প্রতিটি খেলোয়াড়ের পয়েন্টের সংখ্যার যোগফল রেখেছি। তারপরে, আমরা গেমের জন্য প্রতিটি খেলোয়াড়ের স্কোর গণনা করতে নিম্নলিখিত স্কোরিং সিস্টেমটি ব্যবহার করি। এই স্কোরিংটি ম্যাচআপের সমস্ত শেষ হওয়ার পরে করা হয়।
স্কোরিং
আমরা বিবর্তনীয় স্কোরিং ব্যবহার করব। প্রতিটি প্রোগ্রাম সমান ওজন দিয়ে শুরু হয়। তারপরে, 100 টি পুনরাবৃত্তির জন্য, খেলাগুলির পয়েন্ট মোট ব্যবহার করে ওজনগুলি নিম্নরূপ আপডেট করা হয়:
প্রতিটি প্রোগ্রামের নতুন ওজন তার পূর্ববর্তী ওজনের পণ্যের সমানুপাতিক এবং এর গড় পয়েন্ট মোট, এটি তার বিরোধীদের ওজন দ্বারা ভারিত।
এই জাতীয় 100 টি আপডেট প্রয়োগ করা হয় এবং গেমের এই রানের জন্য প্রতিটি প্রোগ্রামের চূড়ান্ত ওজন।
সামগ্রিক স্কোরগুলি গেমের 100 টি ওভারের সমষ্টি হবে।
খেলোয়াড়রা এই চ্যালেঞ্জের সমস্ত বৈধ উত্তর, এবং আমাদের শুরু করার জন্য ছয়টি বেসিক প্রোগ্রাম হবে।
আদেশ সহকারে
ইনপুটগুলি সংশোধন করবেন না। সহযোগিতা বা ত্রুটিযুক্ত ব্যতীত অন্য কোনও প্রোগ্রামের সম্পাদনকে প্রভাবিত করার চেষ্টা করবেন না। বলিদান জমা দেওয়ার জন্য যা অন্য জমা দেওয়ার স্বীকৃতি দেয় এবং সেই প্রতিপক্ষকে তার নিজের ব্যয়ে উপকৃত করার চেষ্টা করে না। স্ট্যান্ডার্ড ফাঁকগুলি নিষিদ্ধ করা হয়েছে।
সম্পাদনা: জমাগুলি কোনও মৌলিক প্রোগ্রাম বা আগের কোনও জমা দেওয়ার হুবহু নকল করতে পারে না ।
আপনার যদি কোনও প্রশ্ন থাকে তবে নির্দ্বিধায় জিজ্ঞাসা করুন।
বর্তমান ফলাফল
nicht_genug: 40.6311
stealer: 37.1416
enough: 14.4443
wait_for_50: 6.947
threshold: 0.406784
buckets: 0.202875
change_of_heart: 0.0996783
exploit_threshold: 0.0670485
kickback: 0.0313357
tit_for_stat: 0.0141368
decaying_memory: 0.00907645
tit_for_whoops: 0.00211803
slider: 0.00167053
trickster: 0.000654875
sounder: 0.000427348
tit_for_tat: 9.12471e-05
stubborn_stumbler: 6.92879e-05
tit_for_time: 2.82541e-05
jedi2sith: 2.0768e-05
cooperate: 1.86291e-05
everyThree: 1.04843e-05
somewhat_naive: 4.46701e-06
just_noise: 1.41564e-06
growing_distrust: 5.32521e-08
goldfish: 4.28982e-09
vengeful: 2.74267e-09
defect: 3.71295e-10
alternate: 2.09372e-20
random_player: 6.74361e-21
কেবলমাত্র এই প্রশ্নের উত্তর এবং প্রতিপক্ষের খেলাটিকে উপেক্ষা করে এমন প্রাথমিক প্রোগ্রামগুলির ফলাফল :
nicht_genug: 39.3907
stealer: 33.7864
enough: 20.9032
wait_for_50: 5.60007
buckets: 0.174457
kickback: 0.0686975
change_of_heart: 0.027396
tit_for_stat: 0.024522
decaying_memory: 0.0193272
tit_for_whoops: 0.00284842
slider: 0.00153227
sounder: 0.000472289
trickster: 0.000297515
stubborn_stumbler: 3.76073e-05
cooperate: 3.46865e-05
tit_for_time: 2.42263e-05
everyThree: 2.06095e-05
jedi2sith: 1.62591e-05
somewhat_naive: 4.20785e-06
just_noise: 1.18372e-06
growing_distrust: 6.17619e-08
vengeful: 3.61213e-09
goldfish: 3.5746e-09
defect: 4.92581e-10
alternate: 6.96497e-20
random_player: 1.49879e-20
জয়লাভ
নতুন প্রতিবেদন পোস্ট হওয়ার সাথে সাথে প্রতিযোগিতা অনির্দিষ্টকালের জন্য উন্মুক্ত থাকবে। যাইহোক, আমি এই প্রশ্ন পোস্ট হওয়ার 1 মাস পরে ফলাফলের ভিত্তিতে বিজয়ী (একটি উত্তর গ্রহণ করুন) ঘোষণা করব।
exploit_threshold()
হিসাবে কয়েকবার অনুলিপি করে চেষ্টা exploit_threshold1()
করেছি এবং সেগুলি players
তালিকায় যুক্ত করেছি । অভিন্ন কৌশলগুলির জন্য কেন আমি বিস্তৃত ফলাফল পেতে পারি?