Örnek çalışma 4/11 eklendi
Kural Açıklama 4/8: Tüm başvurular, bilgisayarımın 48 saat içinde oynayabileceği kadar maçtan oluşan devasa bir herkese açık turnuvada yarışacak.
Twitch'teki akarsuları izlemek için her zaman harcayan herkes DeepBot'un yaygınlığının farkındadır ve belki de Banka Heist bahis oyununa bile aşinadır . Bu King of the Hill turnuvası doğrudan bu oyundan esinlenmiştir. Yine de endişelenme. Sanırım şeyleri ilginç tutmak için bu sürüme yeterince fazla bükülme yaptım.
Kısa bir örnek
#####GAME 13: 16 players######
Round 1:
gunHeCK bet 0.
PassivePanga bet 69.
SnitcherKing bet 1.
Lurker bet 0.
OC'sRandomTpyos bet 1.
MonisAddiction bet 69.
RaysFive01K bet 28.
LimeadeSneaktar bet 1.
KaylorrCriterion bet 0.
HardHatUmar bet 0.
HeCKuSumer bet 185.
Round 2
HeCKuSumer decided to !guncheck.
LimeadeSneaktar decided to double cross.
MonisAddiction decided to all in.
OC'sRandomTpyos decided to acquire intel.
RaysFive01K decided to deposit.
SnitcherKing decided to finger.
PassivePanga decided to !guncheck.
Results
PassivePanga failed. :(
SnitcherKing failed. :(
OC'sRandomTpyos was successful, and may gain ¥0
MonisAddiction failed. :(
RaysFive01K was successful, and may gain ¥0
LimeadeSneaktar was successful, and may gain ¥1
HeCKuSumer failed. :(
Results:
0. KaylorrCriterion: 3600
1. Lurker: 3600
2. gunHeCK: 3600
3. SnitcherKing: 3586
4. PassivePanga: 2634
5. LimeadeSneaktar: 2496
6. HeCKuSumer: 1909
7. HardHatUmar: 490
8. RaysFive01K: 255
9. OC'sRandomTpyos: 170
10. MonisAddiction: 0
(In this round, 7 players joined the heist, but the dice only rolled right for 3 of them. Of those, only LimeadeSneaktar brought any home--having stolen it from OcsRandomTpyos. RaysFive01K won significantly more, but deposited it all at the bank before leaving. At this point, the players who did not heist are doing well, living off their day jobs.)
#####GAME 14: 231 players######
Round 1:
Lurker bet 0.
HeCKuSumer bet 190.
KaylorrCriterion bet 0.
HardHatUmar bet 0.
MonisAddiction bet 0.
OC'sRandomTpyos bet 1.
gunHeCK bet 0.
LimeadeSneaktar bet 1.
RaysFive01K bet 25.
PassivePanga bet 69.
SnitcherKing bet 1.
Round 2
PassivePanga decided to !guncheck.
OC'sRandomTpyos decided to buy guard.
HeCKuSumer decided to !guncheck.
SnitcherKing decided to finger.
RaysFive01K decided to deposit.
LimeadeSneaktar decided to double cross.
Results
HeCKuSumer failed. :(
OC'sRandomTpyos failed. :(
LimeadeSneaktar failed. :(
RaysFive01K failed. :(
PassivePanga failed. :(
SnitcherKing failed. :(
Results:
0. KaylorrCriterion: 3840
1. Lurker: 3840
2. gunHeCK: 3840
3. SnitcherKing: 3825
4. PassivePanga: 2805
5. LimeadeSneaktar: 2495
6. HeCKuSumer: 1959
7. HardHatUmar: 490
8. MonisAddiction: 240
9. RaysFive01K: 229
10. OC'sRandomTpyos: 161
Six players heisted--but should have been paying more attention to the rabble and backed out, because the probabilities dropped too low to win, and all failed.
#####GAME 15: 300 players######
Round 1:
OC'sRandomTpyos bet 1.
Lurker bet 0.
SnitcherKing bet 1.
MonisAddiction bet 69.
LimeadeSneaktar bet 1.
gunHeCK bet 0.
HardHatUmar bet 0.
RaysFive01K bet 22.
KaylorrCriterion bet 0.
HeCKuSumer bet 195.
PassivePanga bet 69.
Round 2
HeCKuSumer decided to !guncheck.
OC'sRandomTpyos decided to buy guard.
MonisAddiction decided to all in.
PassivePanga decided to !guncheck.
LimeadeSneaktar decided to double cross.
RaysFive01K decided to deposit.
SnitcherKing decided to finger.
Results
OC'sRandomTpyos failed. :(
SnitcherKing failed. :(
MonisAddiction was successful, and may gain ¥0
LimeadeSneaktar failed. :(
RaysFive01K failed. :(
HeCKuSumer failed. :(
PassivePanga failed. :(
And here, the probabilities dropped too low to win again--except for MonisAddiction, who went all in, and therefore avoided the probability modification incurred by the rabble backing out. No winnings are listed here, because a player who wins going all in immediately adds all winnings to its holdings without any possible modification by other players' actions.
Oyun kuralları
Turnuva / Oyun Yapısı
- Turnuva, 1000 ila 1100 arasında rasgele ve eşit olarak seçilen bir dizi oyundan oluşacak ve her ciddi gönderi herkes için ücretsiz olarak aynı anda yarışacak.
- Her oyuncu ilk oyuna 240 kredi ve sonraki her oyuna bir önceki oyunun sonunda sahip olduğu kredi sayısı ile başlar .
- Her oyun 2 turda ilerler ve her turda oyuncular bir karar vermek için rasgele bir şekilde belirlenen bir sırayla çağrılır:
- İlk turda bir oyuncu, bir banka soygununa katılımı paylaştırmak için 0 ile mevcut kredi varlıkları arasında herhangi bir tam sayı kredi ödeyebilir.
- İkinci turda, soyguna en az bir kredi (bundan sonra "heisters" olarak anılacaktır) oynayarak katılmayı seçen her oyuncu, bahis turuna izin vermeye (ve bunu yaparken muhtemelen başka bir eylem gerçekleştirmeye) karar verebilir, soygundan vazgeç, ya da all-in. (Bu seçenekler aşağıda daha ayrıntılı olarak açıklanmaktadır.)
- Soygunların sayısına ve ödedikleri toplam kredi sayısına bağlı olarak soygunun sahneleneceği beş bankadan biri seçilir. Bu seçim bireysel zafer olasılığını ve ödemenin belirlenme olasılığını etkiler. (Bankalar aşağıda açıklanmıştır.)
- Devre dışı bırakmayan her heister, bankanın (değiştirilmiş) olasılığı ile, hissesini bankanın (değiştirilmiş) bahis oranlarıyla (yuvarlatılmış) çarparak kazanır ya da başka bir şekilde hissesini kaybeder. Her oyuncunun başarısının veya başarısızlığının ayrı ayrı belirlendiğine dikkat edin - bazıları başkalarının başarısız olduğu yerlerde başarılı olacaktır.
- Katılmış olsun veya olmasın, tüm oyuncular başarılı olmuş veya başarısız olmuşsa, maaş çeki alırlar (aşağıda açıklanan istisnalar hariç).
- Oyundan kalıcı olarak ayrılmanın imkansız olduğunu unutmayın. En kötüsü, bir oyuncunun bir sonraki maaş çekini almak için bir oyunu beklemesi gerekebilir.
- 1000-1100 maçın hepsinden sonra, en fazla krediye sahip olan oyuncu o turnuvanın galibi ilan edilecektir.
- Turnuva, belirtilmemiş sayıda (48 saat içinde hesaplanabilecek kadar çok sayıda) tekrarlanacak ve bu turnuvanın genel galibini belirlemek için tüm turnuvalarda oyuncu kazancı toplanacaktır.
İkinci Bahis Turu
- İlk turda olumlu bir bahis oynayan herhangi bir oyuncu ikinci turda yer alabilir.
- Bu turda bir oyuncu şunları yapabilir:
- bahsini iptal etmek için "back out" dizesiyle yanıtlayın. Bu, mevcut soygun için bahisini sıfıra ayarlayacak ve soygunda kalan oyuncuların başarılı olma olasılığını biraz azaltacaktır. Bu seçeneği kullanarak, bir oyuncu soygunu takip eden 240 kredi maaş çekini, kalan hırsızları riske attığı için cezalandırır. (Geri kalan soyguncular, bankanın olasılık zamanına eşit olmayan bir olasılıkla başarılı olacaklardır.
- bir soygun için en iyi dişli ve intel satın almak ve tek başına gitmek, silahlar yanan bir kimseye güvenmek. Böyle bir oyuncunun zafer olasılığı soygundan ayrılan diğer soygunculardan etkilenemez ve kazançları çift geçitler tarafından çalınamaz. Kazanan ödemeler, bahsi tüm kredi holdingleri artı 240 olarak değerlendirilirken, kayıp tutarları sıfıra ayarlanacaktır.
- Önceki bahse bağlı kalmak ve soygunla normal şekilde geçmek için başka bir dize (boş dize dahil) ile cevaplayın. (Önerilen cevap: "! Guncheck"). Bazı yanıtların ek yan etkileri olacaktır:
- "İş değiştir" cevabı, oynatıcının işini bırakmasına neden olur. Bu raunddan başlayarak, her raundun sonunda, oyuncu yeni bir pozisyonda işe alma şansı% 5 olacaktır. Bu başarılı olursa, oyuncu işe alınır ve derhal ilk maaş çekini alır. Her yeni işin, bir öncekinden tam olarak% 5 daha fazla ödeme yapması garanti edilir (aşağı yuvarlanır). Soygun başarılı olsun ya da olmasın bu eylem başarılı olacaktır.
- Soygun başarılı olursa "intel kazanın" cevabı, oyuncunun tüm kazançlarını bu soygundan kredi başına fazladan 0.00001 almak için harcamasına neden olur ve böylece sadece o oyuncu için soyulmuş olan bankaların oranlarına harcanır . Bu oran değişikliği kalıcıdır. Örnek olarak, bir oyuncu banka 1'i ısrar ederken seçer ve soygunda 6969 kredi kazanırsa, banka 1'in bu oyuncuya yönelik oranları kalıcı olarak 0,06969 artar ve oyuncu bu soygundan hiçbir şey almaz.
- "Satın alma koruması" cevabının verilmesi, oyuncunun soyulmakta olan bankadaki güvenlik görevlilerinden birini satın almasına neden olacaktır. Oyuncunun maaş çeki üzerinde 1 kredinin kalıcı olarak düşürülmesi karşılığında (bekçinin düzenli rüşvet), oyuncu o bankada "kalıcı" artan bir zafer olasılığı (bekçi nedeniyle oyuncuyu polislere "bahsetmeyi unutması" nedeniyle) diye sordu). Olasılık, oyuncunun o bankadaki mevcut zafer olasılığı arasındaki farkın% 1'i kadar artacak ve% 100 artacaktır. Soygun başarısız olsa bile bu eylem başarılı olacaktır. NOT: Herhangi bir zamanda, bir oyuncunun tüm koruma rüşvetlerini ödemek için yeterli kredisi yoksa, derhal ve "kalıcı olarak" ödenemeyen rüşvet sayısı kadar olasılık bonusu kaybeder,
- Soygun başarılı olursa "depozito" cevabı, oyuncunun tüm kazançlarını söz konusu bankadaki bir hesapta bırakacaktır. Kredilere herhangi bir amaç için ulaşılamaz veya geri çekilinceye kadar oyuncunun skoruna dahil edilmez. Bu hesap oyun başına% 0,14 oranında faiz ödeyecektir.
- Soygun başarılı olursa "geri çekilme" yanıtı, bir oyuncunun kazancına, hesaplanan bankadaki hesabının tüm içeriğini ekler. Sonuç olarak hesap sıfırlanır. Bu ek kazanç unutmayın edebilirsiniz çift geçenleri tarafından çalınmış.
- "Çifte çapraz" cevabı iki şeyden birini yapar:
- "Çifte çapraz" oynayan heister sayısı, soygunla geçmeye karar veren toplam çakılsız heister sayısının 1 / 10'u (yuvarlanmış) ise (veya bu tür 10'dan az oyuncu varsa tam olarak bir ), oyuncu, çift çaprazlama yapan tüm oyuncuların toplam kazancına eşit olan ek kazançlar alır (çift çaprazlama sayısına) (yuvarlanmış). Bu durumda çift çifte olmayanlar soygundan 0 kredi alır. Başka bir deyişle, çift geçenler diğer herkesin kredilerini çalar ve eşit olarak kendi aralarında bölerler.
- "Çifte çapraz" oynayan heister sayısı eşiği aşarsa, oyuncu hiçbir kazanç kazanmaz (soygun başarılı olursa) maaş çekini yarıya indirir ve işinden kovulur. (Bkz. "İşleri değiştirme".) Bu durumda tüm çift geçişli olmayanlar (rabble dahil), tüm çift geçişlerin toplam kazançlarının, toplam çift geçişli olmayanların sayısına bölünmesiyle ikramiye ödemesi alacaktır. Başka bir deyişle, komplo bir sır tutamayacak kadar büyüdü, komplocular kök saldı ve soygundan dışlandı ve herkes ceza için paralarını ayırdı - ve kirli uğraş konusundaki şöhretleri de işlerini kaybetti.
- "Parmak" cevabı ("çift geçişli bir alçak sıçan parmakla" ifadesinde olduğu gibi), soygun başarılı olursa, oyuncuya sekiz fırsat verir (rabble olmayan soyguncular setinin değiştirilmesi ile üniform çizim) crosser zaten tespit edilmemiştir .
- Bu şekilde tanımlanan her bir çift çaprazlama, mevcut kredi varlıklarının% 25'ini (yuvarlatılmış) hemen vurulmak yerine ödeyecek, işini kaybedecek ve maaş çekini yarıya indirecektir (çünkü patron kötü davranışa tahammül etmeyecektir) ve soyulmakta olan bankadaki zafer olasılığının% 5'ini kaybeder (diğer heisterler gelecekte ekstra şüphelidir ve işler kıllı hale gelirse otobüsün altına atması muhtemeldir). Bu şekilde tanımlanan çift geçişler, çift geçişin diğer çift geçişler için başarılı olup olmadığını etkilemez, ancak çalınan kredilerin hiçbirini çift çaprazlamadan almazlar ve söz konusu çalınan krediler tekrar çapraz olmayanlara yeniden dağıtılır. çift geçenleri.
- Bu şekilde hiçbir çift çaprazlama tespit edilmezse, snitch herkesin zamanını boşa harcamak için dikiş alacak - ve aynı zamanda mevcut soygundan kazançlarının yarısını ödeyecek, maaş çekinde% 5'lik bir indirim yapacak (patron tattletale'nin saatlerini kesecek) ve kaybedecek Mevcut bankadaki bahis oranlarının% 5'i (diğer heisterlerin gelecekteki kazançları ile cömert / adil olma olasılığı daha düşüktür). Bu şekilde kaybedilen kazançlarının yarısı, çift çaprazlama başarılı olursa parmaksız çift çaprazlamalara veya çift çaprazlama başarısız olursa çift çaprazlama yapmayanlara (rabble dahil) dağıtılacaktır.
Bankalar
Banka, endeks kullanılarak seçilir numheisters + int(totalamountbet/100000)
, burada rakamlar 1. turda pozitif bir bahis oynayan oyuncu sayısıdır ve totalamountbet, bu oyuncuların bahislerinin toplamıdır. Başka bir deyişle, yüz bin kredi 1 ek heister kadar iyidir. Bu endekse göre, aşağıdaki bankalardan biri seçilecektir, endeksin karşıladığı veya aştığı en yüksek eşik değerine sahip banka:
Bank Index Threshold Victory Prob. Bet Odds
---- --------------- ------------- --------
0:Municipal 0 0.540 0.80
1:City 20 0.488 1.10
2:State 40 0.425 1.30
3:National 60 0.387 1.65
4:Federal Reserve 80 0.324 1.95
Bir turnuva devam ettikçe, her oyuncunun bahis eğilimi arttığı için en yüksek banka seviyesine ulaşma olasılığının artacağını unutmayın. Ayrıca, bunların herhangi bir "intel kazanın" veya "muhafız satın alın" eylemleri tarafından değiştirilmeden önce sadece başlangıçtaki ihtimaller ve olasılıklar olduğuna dikkat edin . Başlangıç olasılıkları ve oranları ile sadece Şehir ve Ulusal bankalar beklenen zararları aşan kazançlar beklemiştir.
Rabble
- Turnuva ayrıca soygunlara normal oyuncu olarak katılan ancak sonuçta atılmayan "rabble" adı verilen 500 oyuncu daha içeriyor. Bunlar, her oyunu farklı ve biraz daha az öngörülebilir kılar ve sadece birkaç "gerçek" oyuncu ile bile daha riskli / daha ödüllendirici bankalara ulaşmayı mümkün kılar.
- Her oyun, tüm rabble alt kümelerinde rasgele olarak seçilen katılmak için bazı rabble alt kümesini içerecektir.
- Tüm rabble aşağıdaki stratejiyi kullanır:
- Rastgele , bu turda kararını vermiş olan oyuncuların kararlarına göre seçilecek olan bankada başarılı olma olasılığına eşit bir olasılıkla bahis yapmayı seçin .
- Sıfır olmayan bir tutarda bahis oynuyorsanız, mevcut varlıklarını aşmayacak olan aşağıdaki tutarların en büyüğünü seçin: 69, 420, 6969, 80085.
- İkinci turda, olasılığın% 5'e eşit olması ve daha önce geri çekilen bahisçilerin oranının% 50'sine eşit olması durumunda "geri çekil", aksi takdirde normal olarak soygundur. (Bunun, ikinci turdaki erken oyuncuların ayaklanmalar arasında büyük basamaklı etkileri olabileceği anlamına geldiğine dikkat edin - dikkat edin ve soygunun başlamadan önce çökmesine hazır olun.)
Girdiler ve çıktılar
Her iki turda da programlara komut satırı argümanları olarak tam olarak bu sırayla aşağıdaki bilgiler verilecektir . Aksi belirtilmedikçe, tüm değerler ondalık içermeyen tamsayılardır.
- Geçerli oyun numarası (sıfır dizinli)
- Mevcut oyunun yuvarlak sayısı (1 veya 2)
- Mevcut oyunda (rabble dahil) oyuncu sayısı.
- Bu turu daha önce sırası ile alan oyuncu sayısı.
- Şimdiye kadar pozitif bir bahis yapmış olan heister sayısı. (İkinci turda, bu aslında ilk turda satın alınan toplam heister sayısı olacaktır.)
- Şimdiye kadar yatırılan toplam kredi sayısı. (İkinci tur, bu aslında ilk turda yatırım toplam kredisi olacak - özellikle, etmez daha Heisters "tüm" ilk kazık daha içerir ve etmez "üzerinden geri" bir kazık içerir Heisters.)
- İkinci turda teyit edilen heister sayısı (yani "geri adım atmadı"). Bu ilk turda sıfır olacaktır.
- İzlenecek bankanın (sıfır endeksli) numarası (ilk turda, başka kimse bahse girmezse toplanacak olan banka)
- Şu anda oyuncu tarafından kullanılabilen kredi sayısı.
- Oyuncunun ilk turda oynadığı kredi sayısı. (Bu ilk turda her zaman sıfırdır.)
- Her oyunun sonunda oyuncunun maaş çekinde alacağı kredi sayısı.
- 1 oyuncu şu anda maaş çeki alıyorsa, 0 oyuncu işsizse
- Oyuncunun bir önceki oyunun sonu itibariyle skor tablosunda sıralaması (rabble dahil değil), 1 endeksli. (1 + olarak tanımlanmış, o sırada kesinlikle daha fazla kredisi olan oyuncu sayısıdır. Örneğin, ilk oyun sırasında tüm oyuncular 1. sıradadır.)
- Tüm oyuncular tarafından tutulan ortalama kredi sayısı (rabble dahil değil) (ondalık sayı olarak gösterilir)
- Tüm oyuncuların elinde tuttuğu kredi sayısında ortalama (mutlak sapma hariç) mutlak sapma (ondalık sayı olarak gösterilir)
- Herhangi bir oyuncu tarafından tutulan azami kredi sayısı (örn. 1. Sıradaki bir oyuncunun, hırsızlık hariç tuttuğu kredi sayısı)
- Oyuncunun banka 0 hesabında depoladığı kredi sayısı
- Banka 1 hesabı
- Banka 2 hesabı
- Banka 3 hesabı
- Banka 4 hesabı
- Oyuncunun 0 bankasında bireysel zafer olasılığı
- Sıra 1 olasılığı
- Sıra 2 olasılığı
- Sıra 3 olasılığı
- Sıra 4 olasılığı
- 0 bankasında başarılı bir soygun üzerine oyuncunun bireysel ödeme oranları
- Sıra 1 oranlar
- Sıra 2 oranlar
- Sıra 3 oranlar
- Sıra 4 oranlar
Bir oyunun ilk turunda, bir oyuncu programı 0 ile o oyuncunun hesabındaki toplam kredi sayısı arasında bir tamsayı oluşturmak için yazdırmalıdır. Kullanılabilir kredi bakiyesinden daha yüksek olan herhangi bir bahis tutarı maksimum bahis olarak alınır. Diğer tüm çıktılar (veya hata koşulları) sıfır bahis olarak yorumlanacaktır.
Bir oyunun ikinci turunda, bir oyuncu programının yukarıdaki "İkinci Bahis Turu" bölümünde açıklandığı gibi bir dizeyi basmak için basması gerekir. Buradaki bir hata koşulu varsayılan eylem olarak alınır: soygunla normal şekilde geçin.
kontrolör
Turnuva bu kontrolör kullanılarak yapılacaktır . Bot örnekleri de orada. Hala test ediliyor. Daha fazla kod gelecek. Hata düzeltmeleri göndermekten çekinmeyin (github'da). Herhangi bir kural da değişirse güncellenecektir.
Kendi makinenizde tek bir turnuva düzenlemek için, competitors.txt dosyasına bir satır ekleyin ve ardından şunu kullanın:
python bankheist.py 1000
Yarışma kuralları
- Oyuncular, komut satırı argümanları alabilen, serbestçe mevcut olan herhangi bir dilde çok sayıda oyuncu programı gönderebilir.
- Başvurular, programların derlenmesi ve bilgisayarımda çalıştırılması için gereken araçların isimleri ve düzenlenecek kesin komutlar dahil olmak üzere oldukça açık talimatlar içermelidir. Gönderme, programı çalıştıran ve doğrudan kendisine eklenmiş komut satırı bağımsız değişkenlerine sahip olabilecek en az bir komut içermelidir.
- Gönderilerin, onları tanımlamak için benzersiz bir ada sahip olmaları gerekir (boşluk içermez).
- Programlar oldukça kısa sürede çalıştırılmalıdır. (Makul olan şeyle ilgili bir üst sınır koymuyorum. Aksine, içerik oluşturucuyu hızlandırmak için büyük boyutta bir yürütme süresine sahip gibi görünen herhangi bir girişi tavsiye edeceğim.)
- Programlar olabilir değil okumak veya dosyalara yazmak. Ayrıca, çalışmalar arasında bilgi depolamak için başka bir yöntem de kullanamazlar. Bu zorluğun amacı sınırlı / özetlenmiş bilgilere dayanarak karmaşık kararlar vermektir.
- Bu kuralların herhangi biri ve tümü gerektiğinde değiştirilebilir. Bu yazının üstüne bu tür değişiklikleri gösteren bir mesaj eklenecektir .
- Bu yarışma biter en erken geçen bir hafta sonra kullanıcı gönderdiğinde mesajların onun ya da onu ilk teslim . Yarışma sona erene kadar mevcut gönderilerin değişikliklerine her zaman izin verilir. Bu yazının en üstündeki bir mesajda son teslim tarihini güncel tutmak için elimden geleni yapacağım .
- Bu yarışma, eğer varsa, kuralların en son değiştirilmesinden bir hafta sonra sona erecektir. Herhangi bir kural değişikliğinden etkilenen kullanıcılar için yorum bırakmak için elimden geleni yapacağım.
- Bahse girsen iyi olur ben de bu yarışmaya kendim katılacağım. ;)