इस चुनौती में, आप शोरगुल वाले कैदी की दुविधा को निभाएंगे।
कैदी की दुविधा सहयोग करते हैं, या दोष: गेम थ्योरी में एक परिदृश्य में जहाँ दो खिलाड़ियों, दो विकल्पों के साथ प्रत्येक देखते हैं है। यदि वे सहयोग करते हैं तो प्रत्येक खिलाड़ी उनके लिए बेहतर प्रदर्शन करता है, लेकिन दोनों खिलाड़ी उस परिणाम को पसंद करेंगे, जहां दोनों खिलाड़ी उस स्थान पर सहयोग करते हैं, जहां दोनों खिलाड़ी दोष करते हैं।
पुनरावृत्त कैदी की दुविधा वही खेल है, जिसे छोड़कर आप एक ही प्रतिद्वंद्वी के खिलाफ बार-बार खेलते हैं, और आप जानते हैं कि आपके प्रतिद्वंद्वी ने अतीत में क्या खेला है। आपका उद्देश्य हमेशा अपने आप के लिए उच्चतम स्कोर जमा करना है, चाहे आपका प्रतिद्वंद्वी कैसा भी हो।
शोर कैदी की दुविधा संचार में कुछ शोर का परिचय देता है। आपके प्रतिद्वंद्वी ने अतीत में जो कुछ खेला है उसका आपका ज्ञान कुछ शोर पेश करेगा। आपको यह भी पता चल जाएगा कि आपने अतीत में क्या कदम उठाए हैं। एक ही प्रतिद्वंद्वी के खिलाफ एक राउंड में शोर की दर लगातार होती है, लेकिन विभिन्न राउंड के बीच भिन्न होती है।
चुनौती
इस चुनौती में, आप शोरगुल वाले कैदी की दुविधा को निभाने के लिए पायथन 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'
यदि आप पायथन को नहीं जानते हैं, तो अपने जमाव को pseudocode में लिखें, और कोई व्यक्ति (मुझे या साइट का कोई अन्य सदस्य) संबंधित पायथन प्रोग्राम बना सकता है।
गेमप्ले
टूर्नामेंट धावक यहाँ पाया जा सकता है: शोर-खेल । noisy-game.py
टूर्नामेंट चलाने के लिए दौड़ें। मैं उस रिपॉजिटरी को नए सबमिशन के साथ अपडेट करता रहूंगा। उदाहरण कार्यक्रम में पाया जा सकता है basic.py
।
एक कार्यक्रम का कुल स्कोर खेल के 100 से अधिक नाटकों का कुल स्कोर है।
एक खेल में प्रत्येक खिलाड़ी के खिलाफ प्रत्येक खिलाड़ी के राउंड-रॉबिन मैचअप शामिल हैं, जिसमें स्वयं भी शामिल है। एक मैचअप में 100 राउंड होते हैं। एक दौर में 300 चालें होती हैं, जिनमें से प्रत्येक में आउटपुट 'c'
या शामिल होता है 'd'
।
आपका सबमिशन आपके स्वयं सहित, हर सबमिशन के विरुद्ध एक मैचअप होगा। प्रत्येक मैचअप में 100 राउंड शामिल होंगे। प्रत्येक दौर के दौरान, एक फ्लिप संभावना को समान रूप से यादृच्छिक रूप से चुना जाएगा [0, 0.5]
।
प्रत्येक दौर में 300 चालें शामिल होंगी। प्रत्येक चाल पर, दोनों कार्यक्रमों को वे सभी पिछले नाटक प्राप्त होंगे जो उन्होंने प्रयास किए हैं, और सभी पिछले नाटकों ने अन्य कार्यक्रम बनाए हैं, फ़्लिप लागू होने के बाद, और एक राज्य चर, जो एक परिवर्तनशील सूची है जिसे प्रोग्राम संशोधित कर सकता है यदि वह चाहता है। कार्यक्रम उनकी चाल का उत्पादन करेंगे।
मूव्स निम्नानुसार किए जाते हैं: यदि कोई प्रोग्राम खेलता है '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
सूची में जोड़ा । समान रणनीतियों के लिए मुझे अलग-अलग परिणाम क्यों मिलते हैं?