2010-02-22 11 views
10

Bir oyun simulasyonu Birkaç hafta içinde kardeşim 21 dönüyor ve ailem ve ben onu Las Vegas'a götürüyoruz. 21. yaşımdayken, Vegas'ta kumar oynamak için 200 dolar getirdim ve çoğunluğu craps oynamaktan 450 dolar civarı eve geldim. Bu yolculuk için tekrar 200 dolar getirmeyi planlıyorum ve gitmeden önce paramı tekrar ikiye katlayabileceğimi görmek için bazı craps simülasyonları yapacağımı düşündüm.Zar Oranları: Craps

Çeşitli kaynaklardan okudum ki, maksimum bahis oranına sahip bir passline bahsi koyarken, evin en küçük avantajı craps'larda. Hafızamdan ve Wizard of Odds tarafından araştırıldığı gibi, Strip'teki çoğu casinolar en az 5 dolar ile 3-4-5 arasındadır. İşte benim matematik yanlış birşey

<?php 

$stash = 200; 
$bet = 5; 

for($i=100; $i--;) { 

    $dice1 = mt_rand(1, 6); 
    $dice2 = mt_rand(1, 6); 
    $total = $dice1 + $dice2; 

    if(!$button) { 
     if($total===7 || $total===11) { 
      $stash += $bet; 
     } 
     elseif($total===2 || $total===3 || $total===12) { 
      $stash -= $bet; 
     } 
     else { 
      $button = $total; 
      if($total===4 || $total===10) { 
       $odds = $bet*3; 
      } 
      elseif($total===5 || $total===9) { 
       $odds = $bet*4; 
      } 
      elseif($total===6 || $total===8) { 
       $odds = $bet*5; 
      } 
     } 
    } 
    else { 
     if($total===7) { 
      $button = 0; 
      $stash -= ($bet + $odds); 
     } 
     elseif($total===$button) { 
      $button = 0; 
      $stash += $bet; 
      if($total===4 || $total===10) { 
       $stash += $odds*2/1; 
      } 
      elseif($total===5 || $total===9) { 
       $stash += $odds*3/2; 
      } 
      elseif($total===6 || $total===8) { 
       $stash += $odds*6/5; 
      } 
     } 
    } 

    echo 'Stash: $'.$stash.'<br/>'; 

} 

?> 

var mı: Bir barbut oturumun bir simülasyon PHP (100 zar rulo) burada, bunu göz önüne almaktadır alarak? Her oturumda zirveler ve çukurlar olsa da, bu benzetim daha çok parasız kalmadan önce parasını iki katına çıkarır. Evin her zaman barbuttaki kenara sahip olduğunu düşünürsek, bu sadece yüzde bir kesir olsa bile, bu sonuca şaşıyorum.

cevap

5

Eh, derhal kapalı, sana basit 7 veya 11 galibiyet durumunda bir hata var olduğunu görebilirsiniz: Eğer bahis, iki kere değil bahis kazanmak gerekiyordu.

Düzenleme: Bahis oranları için ödeme gerçek olasılıkla orantılı olduğuna inanıyorum. 7'den 10'a (ihtimalinizi kaybedersiniz) iki kat daha fazlasınız, yani 4 veya 10'u kazandığınızda 2: 1 ödemeniz gerekir; ve 6 ya da 8 kazanınca sadece 6: 5 ödedim.

+1

Kaynağı değiştirdim - şimdi nasıl görünüyor? Kazançların kazançlarının ayarlanması mı gerekiyor yoksa simülasyon doğru mu? – Kevin

+1

@Kevin: Sanırım tüm ödemelerinizi şimdi doğru, çılgınlar konusundaki anlayışımı aldınız. Bununla birlikte, diğer insanlar tarafından verilen cevaplar simülasyonunuzu geliştirmek ve genişletmek için yollar içerir. –

9

"Kanıtla" yazılması için yazılan herhangi bir kod parçasına dikkat etmeliyim ki, paranızı (veya başka bir oyunda) iki katına çıkarma olasılığınız daha yüksek şans eseri) gitmeden önce. Hiçbir oyun Herhangi bir casino vardır

  1. Sonunda, ev her zaman
  2. İnsanlar matematik

de kötü kazanır: Las Vegas iki şey bir vasiyet olarak Nevada çölünde yayılan bir şehir her iki kuraldan da yararlanmayan zeminlerini koyardı. Kodun Vegas'la aynı fikirde değilse, paramı Vegas'a koyarım.

Güncelleme: İşte

bazı C++ ben orijinal koduna göre yazdım. Gönderdiğiniz asıl sorun, paranızı iki katına çıkarabilmenizden daha sık parasız olsaydınız. Bazı sonuçlarla yazdığım kodu takip ettim.

#include <iostream> 

int die_roll() 
{ 
    return std::rand() % 6 + 1; 
} 

int win_count_g(0); 
int loss_count_g(0); 

// return true when double our money. 
// return false when we can't bet anymore. 
bool test_loop(int cash) 
{ 
    static const int bet_k(5); 

    int goal(cash * 2); 
    int button(0); 

    while (true) 
    { 
     if (cash >= goal) 
      return true; 
     else if (cash < bet_k) 
      return false; 

     int roll(die_roll() + die_roll()); 
     int odds(0); // additional odds bet 

     if (button == 0) 
     { 
      if (roll == 7 || roll == 11) 
      { 
       ++win_count_g; 
       cash += bet_k; 
      } 
      else if (roll == 2 || roll == 3 || roll == 12) 
      { 
       ++loss_count_g; 
       cash -= bet_k; 
      } 
      else 
      { 
       button = roll; 

       if (roll == 4 || roll == 10) 
       { 
        odds = std::min(cash - bet_k, bet_k * 3); 
       } 
       else if (roll == 5 || roll == 9) 
       { 
        odds = std::min(cash - bet_k, bet_k * 4); 
       } 
       else // if (roll == 6 || roll == 8) 
       { 
        odds = std::min(cash - bet_k, bet_k * 5); 
       } 
      } 
     } 
     else 
     { 
      if (roll == 7) 
      { 
       ++loss_count_g; 
       button = 0; 
       cash -= bet_k + odds; 
      } 
      else if (roll == button) 
      { 
       ++win_count_g; 
       button = 0; 
       cash += bet_k; 

       if (roll == 4 || roll == 10) 
       { 
        cash += odds * 2; 
       } 
       else if (roll == 5 || roll == 9) 
       { 
        cash += odds * 3/2; 
       } 
       else // if (roll == 6 || roll == 8) 
       { 
        cash += odds * 6/5; 
       } 
      } 
     } 
    } 
} 

void test(int cash) 
{ 
    win_count_g = 0; 
    loss_count_g = 0; 

    int doubled(0); 
    int broke(0); 

    for (int i(0); i < 10000; ++i) 
     if (test_loop(cash)) 
      ++doubled; 
     else 
      ++broke; 

    float win_percentage(static_cast<float>(doubled)/(doubled + broke) * 100.0); 

    std::cout << "starting cash: $" << cash 
       << "; doubled: " << doubled 
       << "; broke: " << broke 
       << " (" << win_percentage << "% win)" 
       << "; loop wins: " << win_count_g 
       << "; loop losses: " << loss_count_g 
       << std::endl; 
} 

int main() 
{ 
    static const int cash_set_k[] = 
    { 
     5, 
     10, 
     20, 
     50, 
     100, 
     200, 
     400, 
     800, 
     1000 
    }; 
    static const int cash_set_size_k(sizeof(cash_set_k)/sizeof(cash_set_k[0])); 

    std::for_each(&cash_set_k[0], &cash_set_k[cash_set_size_k], &test); 

    return 0; 
} 

Sonuçlar: Size istenen oran bahis yerleştirmek için saklamak sol yeterli olup olmadığını görmek için kontrol etmediğinizde

starting cash: $5; doubled: 4944; broke: 5056 (49.44% win); loop wins: 4944; loop losses: 5056 
starting cash: $10; doubled: 4862; broke: 5138 (48.62% win); loop wins: 19706; loop losses: 20258 
starting cash: $20; doubled: 4755; broke: 5245 (47.55% win); loop wins: 78360; loop losses: 80320 
starting cash: $50; doubled: 4345; broke: 5655 (43.45% win); loop wins: 489406; loop losses: 502506 
starting cash: $100; doubled: 3553; broke: 6447 (35.53% win); loop wins: 1914393; loop losses: 1972273 
starting cash: $200; doubled: 2468; broke: 7532 (24.68% win); loop wins: 7172464; loop losses: 7375024 
starting cash: $400; doubled: 861; broke: 9139 (8.61% win); loop wins: 22615369; loop losses: 23277609 
starting cash: $800; doubled: 112; broke: 9888 (1.12% win); loop wins: 54556881; loop losses: 56121041 
starting cash: $1000; doubled: 31; broke: 9969 (0.31% win); loop wins: 69308617; loop losses: 71296217 
+2

Kodunuz, bahislerinizin hesaplanması sırasında ilk bahsini hesaba katmanız gerekmediği için, neye başladığımı gösterir. yani. odds = std :: min (cash - bet_k, bet_k * 3); 'yerine odds = std :: min (nakit, bet_k * 3);' – ghoppe

+1

Teşekkürler, güncellendi; İlginç bir şekilde, bu değişikliğin sonuçlar üzerinde herhangi bir etkisi olduğunu görmedim. Bu, Vegas'tan ilginç bir çekişe yol açıyor: oranlara bahse girer ve Vegas size en düşük bahis oranını verir! – fbrereto

4

. Aslında, stasının boyutunu kontrol etmiyorsun. Stash boyutunuz negatif olsa bile bahse girebiliyorsanız, bu simülasyonun evi daha sık yenebileceği şaşırtıcı değildir.Bu arada

, ben (stash kalan maksimum bahis benim modifikasyonu ile birlikte) 100 zar atar senin simülasyon 50.000 tekrarlamalar koştu ve aşağıdaki ile geldi:

kazanır: 23807

kayıplar: 25465

itme (eğer 200 $ ile bırakın): 728

ort. kazançlar: $ 109.07

+2

Az önce fark ettiğim bir başka şey ise, simülasyonunuz zarları 100 kez atıyor ve masada ne kadar para kaldığını göz önüne almadan uzaklaşıyor, böylece kazanç ve kazanç sayısı bundan biraz daha az olmalı. – ghoppe

+1

Bu yüzden, bu değiştirilmiş senaryoyu (50.000 tekrar), "masaya para bırakmamak" için on defa ekledim ve aşağıdaki kazanma yüzdeleriyle karşılaştım:% 48,6,% 48,1,% 48,2,% 48,0,% 47,7, % 48.4,% 48.0,% 48.2,% 48.2,% 47.7. Kısacası: hayır, Vegas'ı yenemezsin. :) – ghoppe

İlgili konular