Представим воображаемого хитрого дядю, который хочет обмануть и заработать деньги на «лопухах». Назовем его Геннадий Обмануев.
В самый обычный вторник, Геннадию Обмануеву вдруг пришла гениальная идея: создать лотерею, в которой каждый игрок может сам указывать свой шанс на победу и, следовательно, множитель выигрыша и играть на выставленных им правилах! Для того, чтобы всегда оставаться в плюсе, Геннадий в конце каждой удачной игры берет символическую плату в 5% от выигрыша.
*если кратко об игре
Как и в случае с казино, чем дольше игрок играет в такую игру — тем более вероятно, что он, в конце концов, проиграет. Но неужели нельзя обмануть хитрого дядю, придумав чудесную тактику, благодаря которой можно увеличить свои шансы на победу?
Для начала попробуем стандартную тактику в любых начинаниях: сотня тысяч итераций со случайными значениями. В среднем, это покажет результаты огромной массы людей, которые играют не систематично. Естественно, что ставить на процент 100% с пятипроцентным налогом неразумно, поэтому ставки ограничим от 10% (названный Геннадием минимум) до 94%.
Я знаю только php, поэтому писать буду на нем, думаю, он вполне всем понятен:
Результаты получились предсказуемыми, но не систематичными из-за огромной доли случайности в игре.
Я пять раз запустил этот цикл, у меня вышли результаты:
Результаты выглядят плачевно: наши игроки задолжали хитрому дяди ~25 первоначальных денег. В среднем, игроки проигрывают за 100 000 итераций ~250 000 условных единиц. Попробуем добавить логику в наш алгоритм. Естественно, самым разумным было бы написать
в начале цикла, но мы не ищем простых путей! Начнем со смены случайных значений. Попробуем играть при строго поставленных значениях. Например, минимальную ставку на максимальный шанс. К чему приведет такая тактика?
В результате мы, конечно, проигрываем намного меньше, ведь мы и ставим меньше! Хотя можно заметить, что проигрыш стал более предсказуемым. Он колеблется около 50 000, практически без разброса.
Величина проигрыша не столь важна, если мы проигрываем десятки начальных сумм и должны хитрому Геннадию. Я специально не меняю алгоритм в сторону «вовремя остановиться», потому что мне интересно, возможно ли получить положительные результаты после 100 000 итераций.
Попробуем играть при минимальной ставке и минимальном шансе выиграть.
Опять мы проигрываем. На этот раз разброс очень большой, и это логично: ведь мы играем при минимальном шансе на победу.
Кстати, что интересно: если в лотерее минимальная ставка была бы 0.1%, то результаты стали бы такими:
Множитель получается настолько маленьким, что увеличивает нашу ставку почти в тысячу раз, но это происходит так нечасто, что результаты абсолютно непредсказуемые.
Попытаемся применить какой-нибудь алгоритм для выигрыша. Например: чем больше денег мы выиграли, тем рискованнее мы можем играть. Я реализовал это таким образом:
*надеюсь, это работает
И также у меня ничего не вышло, разброс результатов был большим, но в любом случае я проигрывал.
Тогда я попробовал пойти на серьезные меры, организовав «внутренний карман». Туда игрок складывает деньги, которые ни за что не потратит, чтобы остаться хоть с какими-нибудь грошами. Пришлось поменять логику, потому что сейчас попыток будет явно меньше, чем 100 000. И самое важное, что я сделал: я поставил игроку цель. Например, увеличить выигрыш вдвое.
И только при таком раскладе, с некоторой вероятностью, я начал выигрывать относительно небольшие суммы. Впрочем, проигрывать тоже.
В играх, где процент уходит «заведению» или хитрому Геннадию Обмануеву, при длительной игре большого количества людей выиграть мне не удалось и сомневаюсь, что это возможно. В любом случае, в связи с тем, что события происходят случайно, а лотерея забирает выигрыш в любом случае, она всегда остается в плюсе. Налог в данном случае выполняет ту же цель, что и Zero на рулетке в казино: смещает общий шанс победы в сторону заведения, а не игрока.
Об ошибках в тексте и в логике кода сообщайте, пожалуйста, в личные сообщения. Я оперативно исправлю.
Кстати, может кто-нибудь может придумать алгоритм, который-таки побеждает в этой лотерее? Было бы очень интересно. Какой алгоритм действительно является самым лучшим в этой игре?
В самый обычный вторник, Геннадию Обмануеву вдруг пришла гениальная идея: создать лотерею, в которой каждый игрок может сам указывать свой шанс на победу и, следовательно, множитель выигрыша и играть на выставленных им правилах! Для того, чтобы всегда оставаться в плюсе, Геннадий в конце каждой удачной игры берет символическую плату в 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);
Результаты получились предсказуемыми, но не систематичными из-за огромной доли случайности в игре.
Я пять раз запустил этот цикл, у меня вышли результаты:
- Игрок проигрывает 225043.
- Игрок проигрывает 272766.
- Игрок проигрывает 320369.
- Игрок проигрывает 276055.
- Игрок проигрывает 254899.
Результаты выглядят плачевно: наши игроки задолжали хитрому дяди ~25 первоначальных денег. В среднем, игроки проигрывают за 100 000 итераций ~250 000 условных единиц. Попробуем добавить логику в наш алгоритм. Естественно, самым разумным было бы написать
break;
в начале цикла, но мы не ищем простых путей! Начнем со смены случайных значений. Попробуем играть при строго поставленных значениях. Например, минимальную ставку на максимальный шанс. К чему приведет такая тактика?
$bet = 10;
$chance = 94;
В результате мы, конечно, проигрываем намного меньше, ведь мы и ставим меньше! Хотя можно заметить, что проигрыш стал более предсказуемым. Он колеблется около 50 000, практически без разброса.
- Игрок проигрывает 50940.
- Игрок проигрывает 50900.
- Игрок проигрывает 51274.
- Игрок проигрывает 51041.
- Игрок проигрывает 49344.
Величина проигрыша не столь важна, если мы проигрываем десятки начальных сумм и должны хитрому Геннадию. Я специально не меняю алгоритм в сторону «вовремя остановиться», потому что мне интересно, возможно ли получить положительные результаты после 100 000 итераций.
Попробуем играть при минимальной ставке и минимальном шансе выиграть.
$bet = 10;
$chance = 10;
Опять мы проигрываем. На этот раз разброс очень большой, и это логично: ведь мы играем при минимальном шансе на победу.
- Игрок проигрывает 37650.
- Игрок проигрывает 58075.
- Игрок проигрывает 52660.
- Игрок проигрывает 43635.
- Игрок проигрывает 40310.
Кстати, что интересно: если в лотерее минимальная ставка была бы 0.1%, то результаты стали бы такими:
- Игрок Выигрывает 83000!
- Игрок проигрывает 78500.
- Игрок проигрывает 12000.
- Игрок Выигрывает 7000!
- Игрок проигрывает 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 на рулетке в казино: смещает общий шанс победы в сторону заведения, а не игрока.
Об ошибках в тексте и в логике кода сообщайте, пожалуйста, в личные сообщения. Я оперативно исправлю.
Кстати, может кто-нибудь может придумать алгоритм, который-таки побеждает в этой лотерее? Было бы очень интересно. Какой алгоритм действительно является самым лучшим в этой игре?