Разногласия игры в кости: Моделирование игры Костей

Мой брат поворачивается 21 за несколько недель и моих родителей, и я беру его в Лас-Вегас. Для моего 21-го я принес 200$ для азартной игры в Лас-Вегасе и пришел домой приблизительно с 450$, главным образом от проигрывания костей. Я планирую обеспечение 200$ снова для этого прохождения и прежде чем я пойду, я думал, что выполнил некоторые загаженные моделирования, чтобы видеть, могу ли я удвоить свои деньги снова.

Я читал из нескольких источников, что дом имеет самое маленькое преимущество в костях при размещении passline ставки с максимальными разногласиями. От моей памяти, и, как рассмотрено Мастером Разногласий, большинство казино на Полосе является 3-4-5 разногласиями с минимумом за 5$. При принятии этого во внимание вот моделирование загаженной сессии (100 бросков костей) в PHP:

';

}

?>

Есть ли что-то не так с моей математикой здесь? В то время как существуют пики и канавки в течение каждой сессии, это моделирование чаще удваивает свои деньги перед разорением. Рассмотрение дома всегда имеет преимущество в костях, даже если это - просто часть процента, я озадачен этим результатом.

10
задан skaffman 8 July 2011 в 06:56
поделиться

3 ответа

Что ж, сразу я вижу, что у вас ошибка в простом случае 7 или 11: вы должны выиграть ваша ставка, а не двойная ставка.

Изменить: Я считаю, что выплата по ставке на коэффициенты соизмерима с реальной вероятностью. Вероятность выпадения 7 (проигрыш) в два раза выше, чем у 10, поэтому вам должны заплатить 2: 1, когда вы выиграете при выпадении 4 или 10; и платил 6: 5 только при выигрыше 6 или 8.

5
ответ дан 3 December 2019 в 20:41
поделиться

Вы не проверяете, достаточно ли у вас осталось в заначке, чтобы сделать ставку на желаемый коэффициент. На самом деле, вы вообще не проверяете размер своей заначки. Неудивительно, что в этой симуляции вы сможете чаще выигрывать у дома, если сможете делать ставки, даже если размер вашей заначки отрицательный.

Кстати, я прогнал 50 000 итераций вашей симуляции 100 бросков костей (с моей модификацией максимальной ставки от оставшейся заначки) и получил следующее:

выигрыши: 23807

проигрыши: 25465

толчок (вы уходите с $200): 728

средний выигрыш: $109.07

4
ответ дан 3 December 2019 в 20:41
поделиться

Я был бы осторожен с любым куском кода, написанным для "доказательства" того, что вы с большей вероятностью удвоите свои деньги в крэпсе (или любой другой азартной игре), прежде чем разоритесь. Лас-Вегас - разросшийся город в пустыне штата Невада, свидетельствующий о двух вещах:

  1. В конечном счете, дом всегда выигрывает
  2. Люди плохо разбираются в математике

Нет ни одной игры, которую казино поставило бы на свою площадку и которая не использовала бы оба правила. Если ваш код не согласен с Вегасом, я ставлю на Вегас.

Обновление:

Вот немного C++, который я написал на основе вашего оригинального кода. Первоначальная проблема, которую вы поставили, заключалась в том, сможете ли вы удвоить свои деньги до того, как чаще всего разоритесь. Я проследил за написанным мной кодом и получил некоторые результаты.

#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;
}

Результаты:

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
9
ответ дан 3 December 2019 в 20:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: