Bu mücadelede, gürültülü yinelenen mahkumun ikilemini oynayacaksınız.
Mahkumların açmazı işbirliği veya kusur: iki oyuncu, iki seçenekli her vardır oyun teorisinde bir senaryodur. Her oyuncu, işbirliği yapmama ihtimaline karşı kusurlu olursa, kendileri için daha iyisini yapar, ancak her iki oyuncu da, her iki oyuncunun da her iki oyuncunun da kusurlu olduğu birleştiği sonucu tercih eder.
Tekrarlanan mahkumun ikilemi, aynı rakibe karşı tekrar tekrar oynamanız ve rakibinizin geçmişte ne oynadığını bilmeniz dışında aynı oyundur. Hedefiniz, rakibinizin nasıl yaptığından bağımsız olarak daima kendiniz için en yüksek puanı toplamaktır.
Gürültülü yinelenen mahkumun ikilemi, iletişimin bir miktar gürültüsüne neden oluyor. Rakibinizin geçmişte neler oynadığına dair bilginiz biraz ortaya çıkacak. Geçmişte ne gibi hareketler yaptığınızı da bileceksiniz. Gürültü oranı, aynı rakibe karşı bir rauntta sabittir, ancak farklı raundlar arasında farklıdır.
Meydan okuma
Bu zorlu görevde, gürültülü yinelenen mahkumların ikilemini oynamak için bir Python 3 programı yazacaksınız.
Programınız üç girdi alacak:
Kendi hamle, olmadan rastgele çevirir uyguladı.
Rakibin hamleleri, rastgele atışlarla uygulanır.
Her turda boş bir liste olarak başlayan ve isterseniz değiştirebileceğiniz bir durum değişkeni. Kullanmak istemiyorsanız, bunu görmezden gelebilirsiniz.
Programınız 'c'
işbirliği yapmak veya 'd'
hatalı olmak için çıktı vermelidir .
Örneğin, rakip geçmişte zamanın en az% 60'ını işbirliği yapıyorsa, rastgele izinler uygulandıktan sonra ve ilk 10 gösterim için işbirliği yapan bir program:
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'
Python'u bilmiyorsanız, gönderinizi sözde kodla yazın; biri (ben veya sitenin başka bir üyesi) ilgili Python programını yapabilir.
Oynanış
Turnuva koşucusu burada bulunabilir: gürültülü oyun . noisy-game.py
Turnuvayı çalıştırmak için koş. Bu havuzu yeni gönderilerle güncel tutacağım. Örnek programlar içinde bulunabilir basic.py
.
Bir programın genel puanı, oyundaki 100 oyundan fazla olan puandır.
Bir oyun, kendisi de dahil olmak üzere her bir oyuncunun her oyuncunun karşı oynadığı robin eşleşmesinden oluşur. Bir eşleşme 100 turdan oluşur. Bir tur, her biri 'c'
veya çıktısını içeren 300 hareketten oluşur 'd'
.
Gönderiniz, kendi gönderiniz de dahil olmak üzere her gönderimle eşleşecek. Her maç 100 turdan oluşacak. Her turda, bir çevirme olasılığı rastgele bir şekilde rastgele seçilecektir [0, 0.5]
.
Her turda 300 hamle oluşacak. Her hamlede, her iki program da denedikleri önceki tüm oyunları ve diğer programın yaptığı önceki tüm oynatmaları, flipsler uygulandıktan sonra ve programın isterse değiştirebileceği değişken bir liste olan bir durum değişkeni alır. Programlar hamlelerini çıkaracak.
Hareketler aşağıdaki gibi puanlanır: Bir program a oynarsa 'c'
, rakip program 2 puan alır. Bir program a oynarsa 'd'
, o program 1 puan alır.
Daha sonra, her hareket bağımsız olarak çevirme olasılığına eşit olasılıkla çevrilir ve rakibe gösterilmek üzere saklanır.
Tüm turlar oynandıktan sonra, her oyuncunun her maçta aldığı puanları toplarız. Ardından, her oyuncunun oyundaki puanını hesaplamak için aşağıdaki puanlama sistemini kullanıyoruz. Bu puanlama, tüm eşleşmeler tamamlandıktan sonra gerçekleştirilir.
puanlama
Evrimsel puanlamayı kullanacağız. Her program eşit ağırlıkta başlar. Ardından, ağırlıklar 100 yineleme için oyundaki puan toplamları kullanılarak aşağıdaki gibi güncellenir:
Her programın yeni ağırlığı, önceki ağırlığının ürünü ve rakiplerinin ağırlıkları tarafından ağırlıklandırılan ortalama toplam puanı ile orantılıdır.
Bu tür 100 güncelleme uygulanmaktadır ve son ağırlıklar oyunun o koşusu için her programın puanıdır.
Genel puanlar, oyunun 100'den fazla koşusunun toplamı olacaktır.
Oyuncular bu zorluğun geçerli cevapları ve bizi başlatacak altı temel program olacak.
Uyarılar
Girişleri değiştirmeyin. İşbirliği veya kusurlama dışında başka bir programın yürütülmesini etkilemeye çalışmayın. Başka bir sunumu tanımaya çalışan ve bu rakibe kendi pahasına yarar sağlayacak bir fedakarlık sunumu yapmayın. Standart boşluklar yasaklandı.
EDIT: Gönderiler, temel programların hiçbirini veya daha önceki gönderileri tam olarak çoğaltamaz .
Herhangi bir sorunuz varsa, sormaya çekinmeyin.
Güncel sonuçlar
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
Sonuçlar bu soruya ve rakibin oyununu görmezden temel programlara sadece cevapları ile:
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
Kazanan
Yeni başvurular yayınlandıkça yarışma süresiz açık kalacak. Ancak, bu sorunun gönderilmesinden 1 ay sonra elde edilen sonuçlara dayanarak kazanan (bir cevap kabul) ilan edeceğim.
exploit_threshold()
Birkaç kez exploit_threshold1()
vb. kopyalamayı denedim ve bunları players
listeye ekledim . Aynı stratejiler için neden çok farklı sonuçlar elde ediyorum?