0,0
рейтинг
14 мая 2013 в 13:35

Разработка → Тщетные попытки победить лотерею

Представим воображаемого хитрого дядю, который хочет обмануть и заработать деньги на «лопухах». Назовем его Геннадий Обмануев.
В самый обычный вторник, Геннадию Обмануеву вдруг пришла гениальная идея: создать лотерею, в которой каждый игрок может сам указывать свой шанс на победу и, следовательно, множитель выигрыша и играть на выставленных им правилах! Для того, чтобы всегда оставаться в плюсе, Геннадий в конце каждой удачной игры берет символическую плату в 5% от выигрыша.


*если кратко об игре

Как и в случае с казино, чем дольше игрок играет в такую игру — тем более вероятно, что он, в конце концов, проиграет. Но неужели нельзя обмануть хитрого дядю, придумав чудесную тактику, благодаря которой можно увеличить свои шансы на победу?

Для начала попробуем стандартную тактику в любых начинаниях: сотня тысяч итераций со случайными значениями. В среднем, это покажет результаты огромной массы людей, которые играют не систематично. Естественно, что ставить на процент 100% с пятипроцентным налогом неразумно, поэтому ставки ограничим от 10% (названный Геннадием минимум) до 94%.

Я знаю только php, поэтому писать буду на нем, думаю, он вполне всем понятен:
<?php
$bank = 1000000000; //банк богатого хитрого дяди
define('START_MONEY', 10000);
$money = START_MONEY; //деньги игрока


for($i = 0; $i < 100000; $i++){
	$bet = mt_rand(10, 100); //минимальная ставка = 10. 
	$chance = mt_rand(10, 94); //94+ ставить нет смысла - забирает комиссия
	$random = mt_rand(1, 100);

	$money -= $bet;
	$bank += $bet; //сразу отправляем деньги игрока в банк

	if($chance >= $random){
		$money += $bet * 95/$chance; //отдаем игроку :)
		$bank -= $bet * 100/$chance; //забираем у банка :)
	}
}

echo floor($money-START_MONEY);


Результаты получились предсказуемыми, но не систематичными из-за огромной доли случайности в игре.
Я пять раз запустил этот цикл, у меня вышли результаты:

  1. Игрок проигрывает 225043.
  2. Игрок проигрывает 272766.
  3. Игрок проигрывает 320369.
  4. Игрок проигрывает 276055.
  5. Игрок проигрывает 254899.


Результаты выглядят плачевно: наши игроки задолжали хитрому дяди ~25 первоначальных денег. В среднем, игроки проигрывают за 100 000 итераций ~250 000 условных единиц. Попробуем добавить логику в наш алгоритм. Естественно, самым разумным было бы написать
break;

в начале цикла, но мы не ищем простых путей! Начнем со смены случайных значений. Попробуем играть при строго поставленных значениях. Например, минимальную ставку на максимальный шанс. К чему приведет такая тактика?
$bet = 10;
$chance = 94;


В результате мы, конечно, проигрываем намного меньше, ведь мы и ставим меньше! Хотя можно заметить, что проигрыш стал более предсказуемым. Он колеблется около 50 000, практически без разброса.

  1. Игрок проигрывает 50940.
  2. Игрок проигрывает 50900.
  3. Игрок проигрывает 51274.
  4. Игрок проигрывает 51041.
  5. Игрок проигрывает 49344.


Величина проигрыша не столь важна, если мы проигрываем десятки начальных сумм и должны хитрому Геннадию. Я специально не меняю алгоритм в сторону «вовремя остановиться», потому что мне интересно, возможно ли получить положительные результаты после 100 000 итераций.

Попробуем играть при минимальной ставке и минимальном шансе выиграть.
$bet = 10;
$chance = 10;


Опять мы проигрываем. На этот раз разброс очень большой, и это логично: ведь мы играем при минимальном шансе на победу.

  1. Игрок проигрывает 37650.
  2. Игрок проигрывает 58075.
  3. Игрок проигрывает 52660.
  4. Игрок проигрывает 43635.
  5. Игрок проигрывает 40310.


Кстати, что интересно: если в лотерее минимальная ставка была бы 0.1%, то результаты стали бы такими:

  1. Игрок Выигрывает 83000!
  2. Игрок проигрывает 78500.
  3. Игрок проигрывает 12000.
  4. Игрок Выигрывает 7000!
  5. Игрок проигрывает 69000.


Множитель получается настолько маленьким, что увеличивает нашу ставку почти в тысячу раз, но это происходит так нечасто, что результаты абсолютно непредсказуемые.

Попытаемся применить какой-нибудь алгоритм для выигрыша. Например: чем больше денег мы выиграли, тем рискованнее мы можем играть. Я реализовал это таким образом:
$bank = 1000000000; //банк
define('START_MONEY', 10000);
$money = START_MONEY; //деньги игрока


for($i = 0; $i < 100000; $i++){
	$bet = 10;
	$pre_chance = 100 * (2 - 0.94 * $money/START_MONEY); //94+ ставить нет смысла - забирает комиссия

	if($pre_chance > 94){
		$chance = 0.94;
	}else{
		$chance = $pre_chance;
	}
	
	$random = mt_rand(1, 1000)/10;

	$money -= $bet;
	$bank += $bet; //сразу отправляем деньги игрока в банк

	if($chance >= $random){
		$money += $bet * 95/$chance; //отдаем игроку :)
		$bank -= $bet * 100/$chance; //забираем у банка :)
	}
}

echo floor($money-START_MONEY);

*надеюсь, это работает

И также у меня ничего не вышло, разброс результатов был большим, но в любом случае я проигрывал.

Тогда я попробовал пойти на серьезные меры, организовав «внутренний карман». Туда игрок складывает деньги, которые ни за что не потратит, чтобы остаться хоть с какими-нибудь грошами. Пришлось поменять логику, потому что сейчас попыток будет явно меньше, чем 100 000. И самое важное, что я сделал: я поставил игроку цель. Например, увеличить выигрыш вдвое.
$bank = 1000000000; //банк
define('START_MONEY', 10000);
$money = START_MONEY; //деньги игрока
$pocket = $money/2;
$money /= 2;
$goal = START_MONEY*2;

for($i = 0; $i < 100000; $i++){
	if($money < START_MONEY/10){
		break; //доигрались...
	}

	if($money + $pocket >= $goal){
		break; //наигрались!
	}	

	$bet = mt_rand(10, $money/10); //минимальная ставка = 10. 
    $chance = mt_rand(10, 94); //94+ ставить нет смысла - забирает комиссия
    $random = mt_rand(1, 100);

	$money -= $bet;
	$bank += $bet; //сразу отправляем деньги игрока в банк

	if($chance >= $random){
		$money += $bet * 95/$chance / 2; //половину отдаем игроку :)
		$pocket += $bet * 95/$chance / 2; //половину кладем в карман :)
		$bank -= $bet * 100/$chance; //забираем у банка :)
	}
}

echo floor($money-START_MONEY);


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

Вывод

В играх, где процент уходит «заведению» или хитрому Геннадию Обмануеву, при длительной игре большого количества людей выиграть мне не удалось и сомневаюсь, что это возможно. В любом случае, в связи с тем, что события происходят случайно, а лотерея забирает выигрыш в любом случае, она всегда остается в плюсе. Налог в данном случае выполняет ту же цель, что и Zero на рулетке в казино: смещает общий шанс победы в сторону заведения, а не игрока.

Об ошибках в тексте и в логике кода сообщайте, пожалуйста, в личные сообщения. Я оперативно исправлю.

Кстати, может кто-нибудь может придумать алгоритм, который-таки побеждает в этой лотерее? Было бы очень интересно. Какой алгоритм действительно является самым лучшим в этой игре?
Наприенко Ярослав @Naprienko
карма
48,0
рейтинг 0,0
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (60)

  • +70
    Лучший алгоритм — не играть в игры с отрицательным матожиданием )
    • +2
      В целом-то оно так и есть. Хотя, скажем прямо, бывают и случаи, когда играть в игры с отрицательным матожиданием очень полезно.
      Модельная ситуация: вы чиновник, укравший сотни нефти, из которых уже больше половины пропили и спустили на девушек с желтым билетом. И тут всё вскрывается. Не вернете всё или только часть награбленного — один чёрт лучше застрелиться. Почему бы не сходить в казино?
      • +2
        Если есть возможность дойти до казино, то можно и на тракторе через границу.
  • +1
    Я как-то проводил чем-то похожие расчёты как раз на рулетку (постановка на белое/чёрное, на дюжины) — проигрыш превышает выигрыш в любом случае.
    • +2
      Как раз из-за zero, потому что она сбивает вероятность красных и черных на 2,54%. Таким образом, даже если всегда ставить на красное, выигрывать будешь не с 50% вероятностью.
      • +3
        Как бы не так. При использовании изменённого мартингейла (умножение на 3 при проигрыше ставок) и установки на 2 дюжины из 3, всё равно проигрываешь в итоге (тестировал с лимитами, походящими на реальные, и их превышающие тоже). Либо нужно обладать безгранично большими финансами, чтобы таки отбить такой мартингейл.
        • +1
          Видимо, я знаю про рулетку меньше, чем думал. Обязательно почитаю про нее, спасибо.
        • 0
          В случае умножения на два при проигрыше абсолютный выигрыш будет всегда 1 за серию, и это без учета зеро
          • +3
            Вы не учитываете, что ставок делается две, и окупать надо мало того, что проигрыш одной из них, так при мартингейле ещё и проигрыш обеих всё это время.
            Ставим по 1 доллару на две дюжины = 2
            Выигрываем — получаем 3, минус 2 (ставки) = 1 доллар выигрываем
            Если проиграли, удваиваем, то выходит ставим по 2 на дюжину, итого 4, плюс 2 потери с прошлого раунда.
            При выигрыше на данном этапе получаем 6, что окупает первую ставку и эту. Но если проиграли…
            Вновь удваиваем. По 4 на дюжину, итого 8. Плюс предыдущие затраты 4 + 2 = 6, итого потери 14 (8+6).
            При выигрыше мы получаем 12. А надо 14 для окупаемости. Теряем 2.
            Так что удвоения недостаточно.

            Тесты показали, что серии, когда при честном рендоме бывают длинные серии третьей проигрышной дюжине, могут быть весьма длинными. Ну а в онлайн казино…
            • 0
              В мартингейле единственная проблема — лимит (либо денег в кошельке, либо лимит в казино). Если бы лимита не было(можно играть бесконечно) — можно играть с плюсом без проблем. Иначе 1 редкая длинная проигрышная серия сведет на нет весь предыдущий выигрышь (который в дефолтной схеме удвоения составляет 1 игровую единицу).
              Мат ожидание не обманешь.
            • 0
              Приблизительно это я и хотел сказать)
          • 0
            Зеро не влияет на выигрыш за серию, оно влияет только на частоту проигрышей (то есть среднюю длину серии).
  • –8
    Есть казино с нулевым матожиданием, типа того же betvoyager.com
    Попробуйте еще помартингалить. Чтобы уж окончательно забить на эту тему.
    • +3
      Нет там никакого нулевого матожидания. Есть комиссии.
      • –6
        Угу, но только с выигрыша
        • +6
          Этого уже достаточно, чтобы общее матожидание игры было отрицательным. Потому что, грубо говоря, если вы в 50% выигрываете, то вы выигрываете не всю ставку. В итоге сумма проигрышей больше, чем сумма выигрышей, при одинаковом количестве выигравших и проигравших ставок.
          • –16
            Не, я даже спорить тут об этом не буду. Есть куча других профильных форумов для этого.
            Вы еще предлагайте учитывать деньги за ввод-вывод через платежные системы и 13% с Вашей зарплаты.
            • +1
              Если бы я мог потратить те 13% с моей зарплаты, скажем, на еду (да хоть на что угодно), то я бы их с огромным удовольствием не учитывал.
  • –6
    Мне кажется это хороший пример, чтобы попробовать генетические алгоритмы.
    • +5
      Тривиальнейшим преобразованием формулы лотереи получаем матожидание выигрыша = 0.95 * ставка.
      В такую игру выиграть невозможно какую бы стратегию вы ни применяли.
      • –14
        Почему не возможно выиграть? При частном примере. Я сделал 1 ход, от оказался выигрышным. Я вышел из игры. Выиграл же.
        Ну и вот генетический алгоритм может определить оптимальную стратегию. Пусть даже она будет не выигрышная, главное оптимальная.
        • +3
          Если вы хотите выиграть больше O(1), то в играх с отрицательным матожиданием вам делать нечего. В среднем вы обязательно проиграете за конечное время.
  • 0
    Да было бы неплохо создать такую «социальную рулетку», где все скидываются, а хозяин забирает процент от процента, с публикацией результатов, чтоб каждый мог проверить результаты, может люди в МММ не так часто вступали (или наоборот?)
  • –4
    Алгоритм выигрыша очень простой — повышать каждый раз ставку так, чтобы при выигрыше покрылись все прошлые проигрыши+прибыль и остановиться в момент первого выигрыша
    • 0
      вот если бы в жизни были такие жесткие break — было бы проще, а то пока совсем гром не грянет, играешь
    • +4
      При бездонном банковском счете метод работает. В жизни будет достаточно длинная серия проигрышей, чтобы полностью опустошить карман
      • 0
        Надо обновлять комментарии, впредь запомню :)
    • 0
      Я слышал про похожий алгоритм для рулетки. Ставишь на красное. Если проиграл, ставишь еще рез, в два раза больше и.т.д.
      Но он не работает, рано или поздно выйдет так, что ставки будут повышаться, а победа не успеет придти — закончатся деньги.
      • 0
        * деньги и время бесконечные
        • +2
          Еще не стоит забывать, что против мартингальщиков придуманы лимиты на бокс
        • +3
          Если у вас бесконечные деньги, в казино можно не ходить.
          • +1
            А как тогда убить бесконечное время?
      • НЛО прилетело и опубликовало эту надпись здесь
    • +1
      Мартингейл чтоль?
      Доказано ведь, что он не работает.
      • 0
        Он не работает для приведенных условий, а то я где-то давно читал, что именно чтобы он не работал есть минимальные и максимальные ставки.
        • 0
          Неа, без вариантов.
          • 0
            В принципе да — за увеличение вероятности приходится платить увеличением суммарной ставки и на больших числах игра эквивалентна одному раунду описанной автором топика
    • +1
  • +9
    Лучшая система игры в казино: приходишь с суммой N, с которой готов безболезненно расстаться. Ставишь сумму N (или ее часть) на красное, например, в случае выигрыша ставишь ставку+выигрыш, пока не дойдешь до нужной максимальной суммы (назначается в зависимости от амбиций). В случае проигрыша ставишь еще часть суммы N, пока она не закончится. Когда сумма закончится, заказываешь мартини и едешь домой.
    Казино — это развлекательное заведение. Деньги зарабатывают в других местах (если ты не хозяин, конечно).
    • +2
      В хороших казино мартини бесплатно :) Так что заходишь, покупаешь минимальное количество фишек, смотришь на людей вокруг, на атмосферу, пьешь мартини, проигрываешь фишки и довольный идешь домой )
      • 0
        Лучше не пить во время игры.
      • 0
        А можно зайти, купить минимальное количество фишек, пить мартини, смотреть на людей а потом просто сдать фишки и поехать домой? Понимаю, что посещать казино и не играть — это не true, но принципиальная возможность есть?
        • +1
          нет, при входе дают фишки, которые неконвертируемы обратно.
        • 0
          В разных казино разные правила. Но просадить на рулетке немного денег, весьма приятно. Главное не увлекаться.
  • +16
    Ну как тут не вспомнить Дика Фейнмана.
    Ник подошёл, и она познакомила нас. «Мэрилин говорит, что ты — профессиональный игрок».

    — Правильно.

    — Мне бы очень хотелось знать, как можно зарабатывать на жизнь азартными играми, ведь за столом шансы равны 0,493.

    — Ты совершенно прав, — сказал он, — я объясню, как. Я не ставлю деньги на стол и не делаю ничего подобного. Я делаю ставку только тогда, когда шансы в мою пользу.

    — Хм! А когда шансы вообще бывают в твою пользу? — скептически спросил я.

    — На самом деле это довольно просто, — сказал он. — Я стою у стола, когда какой нибудь парень говорит: «Сейчас выпадет девятка! Сейчас просто обязана выпасть девятка!» Парень возбуждён; он думает, что выпадет девятка и хочет заключить пари. Я хорошо знаю все шансы выпадения всех чисел, поэтому я говорю ему: «Ставлю четыре к трём, что выпадет не девятка», — и, в конце концов, выигрываю. Я не ставлю деньги на стол; вместо этого я заключаю пари с теми, кто стоит у стола и верит в предрассудки — в счастливые числа.
  • –3
    Есть алгоритмы, которые позволяют выиграть.
    Классический мартингейл — черезчур грубо наращивает ставки и поэтому быстро упирается в лимиты, которые против него придуманы. Есть более мягкий вариант наращивания ставок, следуя которому лимиты достигаются много-много позже, позволяя отыграть все проигрышы. Но и отыгрывание происходит не как в мартингейле за один выигрыш, а за серию выигрышей. Не буду расписывать здесь этот алгоритм, математическое доказательство его беспроигрышности много сложнее, чем элементарные подсчеты для мартингейла. И самое главное — доказательтсво построено для 50% вероятности исходов. Я не знаю насколько это будет верно для случая, когда у нас есть «налог» на заведение. Если погуглите, то наверняка вы найдете историю, где этот алгоритм расписан, а автор был забанен в нескольких заведениях после нескольких выигрышей.

    Другая выигрышная стратегия чисто для правил рулетки. Дело в том, что там можно ставить не только на чет/нечет, красное/черное, 1-18/19-36 — это самые плохие варианты. Но там также есть столбцы, строки, четверки, пары, группы строк, отдельные цифры с другими коэффициентами выигрышей. Нужно стоять возле рулетки и считать матожидание для выпавших вариантов. Когда оно вырастет для определенного варианта выше порога, то ставить на него.

    Например считаем сколько раз выпал столбец. Скажем дождались перекоса — последний столбец отстал от первых на пару десяток выпадений (а мы еще ничего не ставили, мы только наблюдали). Начинаем ставить на него следуя мартингейлу или мягкому варианту его. Опять же учитывая, что выигрыш тут не двойная ставка, а тройная и выше, то и ставку надо увеличивать не в 2 раза, а меньше, тем самым медленнее двигаясь к лимитам.

    Можно отслеживать много разных комбинаций(я перечислил выше) и получать вполне законный выигрыш. Для того чтобы одновременно просчитывать МО для кучи комбинаций придется поднапрячь мозги. Администрация казино отслеживает таких «счетчиков» по видео камерам — они не пьют, признаки умственной работы отражаются на лице. «Счетчиков» выставляют из заведения без объяснения причин, а могут и забанить во всех заведениях используя общую базу данных.
    Понятно это все работает при правильной работе рулетки(равновероятные исходы) и алгоритмов случайных чисел. Не будем поднимать тут тему проверок аппаратов, алгоритмов генерации случайных чисел и пр.
    • 0
      И при условии, что количество денег у вас стремится к бесконечности. Поскольку есть ненулевая вероятность стремящегося к бесконечности выпадения невыгодных комбинаций.
    • +5
      Есть отличные «математические» теории выигрыша в рулетку. Они позволяют верить игроку в возможность выиграть. Единственный способ выиграть в рулетку — это быть хозяином заведения )

      PS. Мат. ожидание выпадения столбца в рулетке всегда одинаковое.
    • +4
      Наводящий вопрос.

      Вы девять раз подбросили монетку, и она все девять раз выпала решкой. Вы собираетесь подбросить ее в десятый раз. Какова вероятность того, что при этом броске выпадет орел?
      • 0
        Вот только вчера перед сном читал Ошибка игрока.

        Конечно, это предназначалось для TedBeer.
      • 0
        50%?
        • 0
          Не подсказывайте.: Р
          • 0
            Извените, я не всегда перехожу по ссылкам, а в комментарии hodik действительно нашёл ответ на свой вопрос…
    • +2
      «Когда оно вырастет для определенного варианта выше порога, то ставить на него.»

      Вот этой фразой вы себя и выдали )
    • +1
      А пока у счётчика отражается на лице умственная работа, рулетка продолжает выбрасывать результаты никак не связанные с предыдущими. Я бы таких счётчиков не выставлял, а напротив поощрял. 8)
  • 0
    Купил когда-то игрушечную рулетку и экспериментировал много. После того как однажды 23 раза подряд выпало красное — забросил.
    • +2
      Игроки в таких случаях говорят «У шарика нет памяти»
  • 0
    то, что в играх с отрицательной доходностью в выигрывает «заведение» результат предсказуемый.
    лучшая стратегия «не играть» ожидаемый выигрыш у неё максимальный, если в полезность вписать склонность к риску: то стратегия тоже простая, оценить для себя эту склонность к риску и поставить ограничение продувать не больше этой суммы.

    Я помню для себя другую стратегию: «ограничение по риску + выход (НА ВСЕГДА ) с любым положительным выигрышем», до сих пор «горжусь», что лет 10 назад выиграл по этой стратегии 10 рублей (т.к. стратегия предполагает выход на всегда, то с тех пор не играл чтобы их «заведение» не отыграло обратно у меня")

    Мне всегда было интересно другое: что будет если убрать зеро в рулетке и ожидаемый выигрыш сделать строго равным 0. Смогут ли игроки обыграть заведение?
    чисто математически должен получиться «random walk» в итогах, вот только эксперименты показывают, что «заведение» все равно в + и игроки все равно проигрывают заведению. Есть много объяснений, самое простой: кто решает играть в казино положительно относиться к небольшому риску,

    • 0
      Самое простое ровно наоборот — люди что-то проигрывают и не хотят рисковать дальше. Или не могут, потому как деньги кончились — это ещё проще.
      • 0
        ровно наоборот — от вашего наоборот.
        специально проиграть также тяжело как и специально выиграть — от них это не зависит. От стратегии зависит только «сколько риска взять», можно поставить 100 и с шансом 50% получить 200 или 0, а можно с шансом 10% получить 1000, а 90%: 0, Человек не склонный к риску в такую игру играть вообще не будет.
        деньги рано или поздно у всех заканчиваются (randomwalk расходится на бесконечности)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.