рекомендации

понедельник, 28 октября 2019 г.

Создание безупречной стратегии выигрыша в BlackJack с использованием Data Science


Можем ли мы создать безупречную стратегию выигрыша в казино с использованием Data Science?

Конечно, нет! В противном случае все ученые, занимающиеся данными, будут сидеть на кучах денег, а казино не будут пускать нас!

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

Прежде чем мы начнем, позвольте мне задать вам пару вопросов:

     Сколько раз вы играли в казино до сих пор?
     Сколько раз вы потеряли все свои деньги в казино?

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

Теперь интересный факт: для большинства игр, в которые вы играете в казино, вы выиграете сумму в соответствии с вашими шансами на выигрыш. Например: если вероятность выигрыша в рулетке составляет 1/37, вы получите 37X от суммы, на которую вы сделали ставку. Следовательно, ожидаемые прибыли от торговли в казино практически равны нулю.

Ожидаемый выигрыш от рулетки = 1/37 * $ X * 37 (сумма, которую вы получите, если выиграете) - $ X (сумма, которую вы поставили) = 0

Итак, где мы ошибаемся?

Почему наши шансы получить 100% или больше составляют менее 50%, а наши шансы потерять 100% - более 50%. Давайте начнем с моего недавнего посещения казино.

Мой недавний опыт работы с блэкджеком

На прошлой неделе я отправился в Атлантик-Сити - центр казино на восточном побережье США. Блэкджек всегда был моей любимой игрой из-за множества связанных с ним заблуждений.

Для начала позвольте мне рассказать вам, как играют в Блэкджек.




Есть несколько важных вещей, которые необходимо знать о Блэкджек. Если вы знаете игру, вы можете пропустить эту часть:

Каждая карта имеет значение.

Туз считается как 1 или 11 очков, числовые карты (от 2 до 9) учитываются по номиналу. Десятка и картинки считаются 10 очками.

Значение руки - это сумма баллов отдельных карт.  «Блэкджек» состоит из туза и любой карты с 10 очками, и эта комбинация превосходит все остальные руки с 21 очком.

Если сумма превышает 21, она называется «перебор», и тот, у кого перебор, сразу проигрывает.

После того, как игроки сделали свою ставку, дилер раздает каждому игроку по две карты и оставляет одну карту для себя.
 
Дилер далее спрашивает игроков о любой дальнейшей ставке, и игрок может удвоить ставку на основе своих 2 карт и 1 карты дилера. Затем дилер спрашивает игрока, нужно ли ему больше карт. Игрок пытается максимизировать свой счет без перебора.

После последней ставки дилер будет брать карты себе. Дилер будет продолжать брать карты до тех пор, пока значение не достигнет 17 (дилеру, возможно, придется открыть еще одну карту, если у него есть туз, равный 11, и общая сумма 17 - это называется мягким 17).

Наконец мы подсчитываем очки игроков и дилеров. Побеждает игрок с наибольшим количеством очков.

Есть несколько более сложных понятий, таких как страхование и разбиение пар, которые выходят за рамки этой статьи. Итак, мы будем рассматривать простой вариант.

Я всегда думал, что если у дилера есть ограничение на открытие карт до тех пор, пока он не достигнет 17/18, они не могут прекратить брать карты раньше. Следовательно, у игрока больше шансов на выигрыш, чем у дилера, поскольку у него нет таких ограничений. Я был взволнован всеми победами, которые я собирался одержать!!

Как только я вошел в казино, я отделил $X в своем кошельке как «деньги казино», мои деньги превратились в фишки, и в течение следующего часа я все проиграл. Я не закончил - в надежде вернуть потерянные деньги я пожертвовал еще 2X$, и я окончательно убедился, что игра не так проста, как я думал.

Предпосылки к статье

Ниже приведены несколько желательных навыков, чтобы понимать происходящее:

Понимание основ теории вероятностей будет плюсом. Я постараюсь не говорить много  на этом языке. Так что, если вы боитесь вероятностей, у вас все равно все получится.
Если вы знаете R, вы сможете запускать симуляции самостоятельно. Чтобы понять выводы, никаких знаний о R не требуется.

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

Категория 1 - Вопросы, связанные с игровой стратегией

Какова вероятность перебора у дилера, если я знаю, какая первая карта дилера?

Какова наилучшая стратегия для игрока, если он/она знает свои первые 2 карты и 1 открытую карту дилера?
         - должен ли игрок ограничиться двумя картами;
         - или игрок идет дальше и берет 3-ю, 4-ю, 5-ю… карту

Какова вероятность выигрыша, если я знаю окончательный счет игрока и одну открытую карту дилера?

Какова вероятность выиграть в блэкджек в тот момент, когда карты еще не сданы? Это более 50%, как я думал, или я был ужасно неправ?
 
Категория 2 - Стратегия ставок

Почему мы проигрываем чаще, чем выигрываем, когда играем в казино?
Есть ли стратегия ставок, которая может изменить наши шансы на победу?
Когда эта стратегия ставок работает, а когда нет?
Используя такую стратегию, можем ли мы изменить ожидаемую величину потерь/выигрышей по сравнению со случайными ставками (или ставками с одним значением)?

Категория 3 - Несколько фундаментальных вопросов

Можем ли мы выиграть у казино?
Разве я раскрыл секрет выигрыша миллиона долларов в казино? Я, конечно, могу использовать это, когда пойду в казино в следующий раз.
Лучше играть в блэкджек или просто играть в рулетку, если единственная цель - выиграть деньги?

Давайте начнем

Вот ситуация, вы видите, что у дилера открыта «4», а ваши карты следующие.




Ваше общее количество очков - «14». Чтобы бы вы сделали?

К настоящему времени вы будете знать, что ваши карты действительно плохие, но возьмете ли вы другую карту, подвергаете себя риску перебора, ИЛИ у вас будет возможность остановиться и позволить дилеру перебрать. Многие люди порекомендуют вам остановиться, пока карты дилера не станут такими же плохими, как у вас, - давайте посмотрим симуляцию.

Симуляция 1

Попробуем подсчитать вероятность перебора у дилера. Сначала я определю несколько основных функций на R, а затем смоделирую руку дилера.
#### Эта функция примет ввод как начальную руку и возьмет новую карту
#### В конце она возвращает новую полную руку
card_draw = function(dealers_hand_1){
 next_card = sample(deck,1)
 dealers_hand_1 = c(dealers_hand_1,next_card)
 return(dealers_hand_1)
 }
#### Эта функция найдет сумму очков карт, убедившись, что туз засчитан в нужном значении

find_sum = function(hand){
 aces = hand[hand == 1]
 num_aces = length(aces)
 sum_1 = num_aces*10 + sum(hand)
 count = 1
 while(sum_1 > 21 & count < num_aces +1){
 sum_1 = sum_1 - 10
 count = count + 1
 }
 return(sum_1)
 }
### Вот колода из 13 карт с их действительной стоимостью в блэкджеке
deck = c(1,2,3,4,5,6,7,8,9,10,10,10,10)
### Здесь я симулирую 10000 игр в блэкджек для дилера
### Для дилеров есть 6 возможных результатов - получить 17, 18, 19, 20, 21 или получить перебор   
### Мы запишем все вероятности в «матрице», которая имеет 13 строк для каждой карты в   колоде и 6 + 1 столбцов для результатов
matrix = matrix(0,13,7)
 matrix[,1] = deck
 for(j in 1:13){
 initial_card = deck[j]
 dealers_hand = initial_card
 sum_vector = NULL
 for (i in 1:10000){
 dealers_hand_1 = dealers_hand
 second_card = sample(deck,1)
 dealers_hand_1 = c(dealers_hand_1,second_card)
 inital_sum = find_sum(dealers_hand_1)
 while(inital_sum < 17 | (inital_sum == 17 & inital_sum > sum(dealers_hand_1))) {
 dealers_hand_1 = card_draw(dealers_hand_1)
 inital_sum = find_sum(dealers_hand_1)
 }
 if(inital_sum > 21) {inital_sum = 0}
 sum_vector = c(sum_vector,inital_sum)
 }
 matrix[j,2:7] = table(sum_vector)/10000
 }

data = as.data.frame(matrix)

colnames(data) = c("Card","0","17","18","19","20","21")
 data[,1] = c("A","2","3","4","5","6","7","8","9","10","J","Q","K")

######## Здесь симуляция заканчивается
Так что я нашел?

Вот распределение вероятностей, данное для первой карты дилера.



Вероятность перебора для дилера составляет 39,6%, что будет вероятностью выигрыша игрока. Это означает, что вы проиграете 60% раз - это хорошая стратегия? Мы не можем ответить на этот вопрос до тех пор, пока я не узнаю, какова вероятность выигрыша, если я возьму еще одну карту и увеличу свой счет.

Прозрение 1 - Вероятность того, что дилер получит перебор, учитывая его первую карту (скажем, 4), может быть найдена из таблицы выше (в данном случае 39,6%).

Симуляция 2

Теперь нам нужно также ввести карты игрока и выяснить, какова вероятность выигрыша, если у игрока на руках «14». С помощью этой дополнительной информации мы можем уточнить вероятность выигрыша, учитывая наши 2 карты и 1 карту дилера.
### Определяем набор для первых 2+  карт игрока. Это значение может быть между 12-21.   Если сумма была меньше 12, игрок будет брать больше карт, пока он не окажется в этом    диапазоне.
initial_pair = 12:21
###Определяем вероятность выигрыша игрока и матрицу вероятности ничьей
player_win_matrix1 = matrix(0,10,13) player_win_matrix1[,1] = initial_pair tie_matrix1 = matrix(0,10,13) tie_matrix1[,1] = initial_pair ###Здесь мы предполагаем, что игрок не берет дополнительные карты
###Вот симуляция 5000 игр для каждого возможного финального счета игрока и первой карты дилера
for(i in 1:13){
 for(j in 1:10){
 initial_card = initial_pair[j]
 players_hand = initial_card
 result_vector = NULL
 player_hand_length = 2
 player_wins = 0
 ties = 0
 dealer_wins = 0
 ###Игрок не берет карту!
 for (x in 1:5000){
 dealer_card = deck[i]
 dealers_hand_1 = dealer_card
 player_sum = find_sum(players_hand)
 dealer_sum = find_sum(dealers_hand_1)
 while(dealer_sum < 17 | (dealer_sum == 17 & dealer_sum > sum(dealers_hand_1))) {
 dealers_hand_1 = card_draw(dealers_hand_1)
 dealer_sum = find_sum(dealers_hand_1)
 }
 if(dealer_sum > 21) {dealer_sum = 0}
 if (dealer_sum == 21 & length(dealers_hand_1) == 2) {dealer_sum = 22}
 if (player_sum == 21 & player_hand_length == 2) {player_sum= 22}
 if(dealer_sum > player_sum) {dealer_wins = dealer_wins + 1} else {
 if (dealer_sum == player_sum) {ties = ties + 1} else {player_wins = player_wins + 1}}
 }

player_win_rate = player_wins/length(result_vector)
 tie_rate = ties/length(result_vector)
 player_win_matrix1[j,i] = player_win_rate
 tie_matrix1[j,i] = tie_rate
 }
 }

Причина, по которой в ряду 21 много 100%, состоит в том, что всего с двумя картами 21 - это блэкджек. И если у дилера нет того же самого значения, игрок определенно выигрывает. Вероятность выигрыша для суммы очков игрока 12-16 в идеале должна быть равна вероятности перебора дилера. Поскольку это единственный способ выиграть игроку, если он решит остановиться. Дилер должен будет открыть новую карту, если он имеет сумму от 12 до 16. Это на самом деле тот случай, который подтверждает, что наши два моделирования согласованы. Чтобы решить, стоит ли открывать еще одну карту, ставится вопрос, какова вероятность выигрыша, если игрок решит взять другую карту.

Прозрение 2 - Если ваша сумма больше 17, а дилер получает карту 2-6, шансы на выигрыш в вашу пользу. Это даже без учета ничьих.

Симуляция 3

###В этой симуляции единственное отличие от симуляции 2 заключается в том, что игрок    выберет одну дополнительную карту.
player_win_matrix1_a_draw = matrix(0,10,13)
 player_win_matrix1_a_draw[,1] = initial_pair
 tie_matrix1_a_draw = matrix(0,10,13)
 tie_matrix1_a_draw[,1] = initial_pair
 for(i in 1:13){
 for(j in 1:10){
 result_vector = NULL
 player_hand_length = 2

player_wins = 0
 ties = 0
 dealer_wins = 0

###Игрок берет карту!
 for (x in 1:5000){
 initial_card = initial_pair[j]
 players_hand = initial_card
 dealer_card = deck[i]
 dealers_hand_1 = dealer_card
 players_hand = card_draw(players_hand)
 player_hand_length = 3
 player_sum = find_sum(players_hand)
 dealer_sum = find_sum(dealers_hand_1)
 while(dealer_sum < 17 | (dealer_sum == 17 & dealer_sum > sum(dealers_hand_1))) {
 dealers_hand_1 = card_draw(dealers_hand_1)
 dealer_sum = find_sum(dealers_hand_1)
 }
 if(dealer_sum > 21) {dealer_sum = 0}
 if(player_sum > 21) {player_sum = 0}
 if (dealer_sum == 21 & length(dealers_hand_1) == 2) {dealer_sum = 22}
 if (player_sum == 21 & player_hand_length == 2) {player_sum = 22}
 if(dealer_sum > player_sum) {dealer_wins = dealer_wins + 1} else {
 if (dealer_sum == player_sum) { ties = ties + 1 } else {player_wins = player_wins + 1}}
 result_vector = c(result_vector,end_result)
 }

player_win_rate = player_wins/length(result_vector)
 tie_rate = ties/length(result_vector)
 player_win_matrix1_a_draw[j,i] = player_win_rate
 tie_matrix1_a_draw[j,i] = tie_rate
 print(i)
 }
 }
 Чтобы сделать этот анализ простым, допустим, что благоприятная вероятность - это шансы на выигрыш + 50% шансов на ничью.

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



Итак, что вы узнали теперь. Выгодно ли брать карту при 8 + 6 или остановиться?

Благоприятная вероятность без вытягивания карты при 8 + 6 и  4 у дилера ~ 40%

Благоприятная вероятность с дополнительной картой при 8 + 6 и 4 у дилера ~ 43,5%

Очевидно, вам лучше взять еще карту.

Вот разница в % благоприятных событий для каждой комбинации, которая может помочь вам разработать стратегию.



Клетки, выделенные зеленым цветом, - это то место, где вам нужно выбрать новую карту. Клетки, выделенные розовым цветом, означают, что брать карту не нужно. Ячейки, которые не выделены, - это место, где игрок может сделать случайный выбор, разницы в вероятностях нет.

Прозрение 2 - Следуйте приведенной ниже таблице, чтобы принять решение: не брать (0) или брать (1).



Симуляция 4


player_strategy = read.csv("strategy_1.csv")

strategy = function(player_hand,dealer_first_card){
 player_sum = find_sum(player_hand)
 player_strat = player_strategy[player_sum - 11,dealer_first_card + 1]
 while(player_strat == 1 & player_sum < 22) {
 player_hand = card_draw(player_hand)
 player_sum = find_sum(player_hand)
 player_strat = player_strategy[player_sum - 11,dealer_first_card + 1]
 }
 return(player_hand)
 }

betting_strategy = function(last_bet,money_left,last_result){
 next_bet = last_bet
 return(next_bet)
 }

simulate_games = function(n_iter,total_cash = 100,bet_size_initial = 10){
 player_wins = 0
 ties = 0
 dealer_wins = 0
 bet_size = bet_size_initial
 cash_flow = c(rep(total_cash,n_iter+1) )
 for(i in 2:n_iter+1){
 last_results = cash_flow[i-1] - cash_flow[i-2]
 if(i == 1){bet_size = bet_size_initial} else {bet_size = betting_strategy(bet_size,cash_flow[i-1],last_results)}
 dealers_hand = NULL
 player_hand = NULL
 player_first_card = sample(deck,1)
 dealer_first_card = sample(deck,1)
 player_hand = player_first_card
 dealers_hand = dealer_first_card
 ##Игрок берет вторую карту
 player_hand = card_draw(player_hand)
 dealer_sum = find_sum(dealers_hand)
 player_sum = find_sum(player_hand)

while(player_sum < 12) {player_hand = card_draw(player_hand)
 player_sum = find_sum(player_hand)}
 ##стратегия игрока
 player_hand = strategy(player_hand,dealer_first_card)
 player_sum = find_sum(player_hand)

#Дилер должен соблюдать правила
 while(dealer_sum < 17 | (dealer_sum == 17 & dealer_sum > sum(dealers_hand))) {
 dealers_hand = card_draw(dealers_hand)
 dealer_sum = find_sum(dealers_hand)
 }
 if(dealer_sum > 21) {dealer_sum = 0}
 if(player_sum > 21) {player_sum = -1}
 if (dealer_sum == 21 & length(dealers_hand) == 2) {dealer_sum = 22}
 if (player_sum == 21 & length(player_hand) == 2) {player_sum = 22}
 if(dealer_sum > player_sum) {dealer_wins = dealer_wins + 1
 cash_flow[i] = cash_flow[i-1] - bet_size} else {
 if (dealer_sum == player_sum) { ties <- 100000="" 1="" a="simulate_games(n_iter" bet_size="" bet_size_initial="20)</pre" c="" cash_flow="" colnames="" else="" final_metrics="" i-1="" i="" in="" oose="" player_loose_rate="" player_win_rate="" player_wins="player_wins" rate="" return="" return_object="" tie_rate="" ties="" total_cash="10000,">
Получаем следующие вероятности  выигрыша/проигрыша/ничьей:

Win Rate = 41.4%

Tie Rate = 9.5%

Loss Rate = 49.1%

Шок! Наш коэффициент выигрыша намного ниже, чем коэффициент проигрыша. Было бы намного лучше, если бы мы просто бросили монетку. Самая большая разница в том, что дилер выигрывает, если и игрок, и дилер перебирают. Если вы удалите это единственное условие, получится следующие коэффициенты выигрыша/проигрыша.

Win Rate = 41.4%

Tie Rate = 17.1%

Loss Rate = 41.5%

Как вы видите, и дилер, и игрок перебирают примерно в 8% игр. Просто меняя эту маленькую вещь, казино гарантирует, что мы проигрываем гораздо чаще.

Прозрение 3 - Даже с лучшей стратегией, игрок выигрывает в 41% раз по сравнению с дилером, который выигрывает в 49%. Разница обусловлена случаями, когда игрок и дилер перебирают.

Это согласуется с нашей таблицей, которая показывает, что вероятность получения перебора дилером составляет 28,4%. Следовательно, для игрока, и дилера, получающих перебор, будет 28,4% * 28,4% ~ 8%.

Глубокое погружение в стратегию ставок

Теперь мы знаем, какова правильная игровая стратегия, однако даже самая лучшая игровая стратегия может привести к 41% побед и 9% ничьих, что приведет к большой доле проигрышей. Есть ли стратегия ставок, которая может спасти нас от этой головоломки?

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

Симуляция 5


### Мы бросаем монету, если вы угадываете, как она ляжет, вы выигрываете в 2 раза больше своей ставки; Pocket - это ваша начальная сумма
### Min_bet - минимальная ставка в этой игре; последняя победа равна 1, если вы выиграли последнюю игру.
simulation = function(pocket = 100, min_bet = 1,games = 500){
 win = 0;bet = min_bet; last_victory = 1;money_flow = NULL
 for (i in 1:games){
 bet = betting_strategy(bet,last_victory,min_bet,pocket)
 if(sample(1:10,1) > 5) {win = win + 1
 last_victory = 1
 pocket = pocket + bet} else {last_victory = -1
 pocket = pocket - bet}
 money_flow = c(money_flow,pocket)
 }
 return(c(pocket,win))
 }

#Вот первая стратегия ставок - мы ставим только минимальную ставку до тех пор, пока     игрок не обанкротится

betting_strategy = function(last_bet,last_result,min_bet,left_bal){
 next_bet = min_bet
 if(left_bal <= 0) {next_bet = 0}
 return(next_bet)
 }

#Запускаем простую симуляцию

simple_bet = matrix(0,1000,2)
 for(i in 1:1000){
 simple_bet[i,] = simulation(pocket = 100,min_bet = 20,games = 100)
 }
Среднее количество выигранных игр = 50

Средняя сумма, которые вы выходите из казино = $99,74 ~ $100

Макс. выигрыш = 780 $

% раз человек становится банкротом = 63,1%

Вас шокировала какая-либо из вышеперечисленных 4 метрик? Что заставило меня задуматься, так это то, что, хотя средняя сумма любого, кто покидает казино, совпадает с той, с которой он начинает, процентная доля случаев банкротства намного превышает 50%. Кроме того, если вы увеличиваете количество игр, увеличивается процент раз, когда кто-то становится банкротом. Почему?

Причина в том, что у нас есть нижняя граница в $0, что является банкротством, но у нас нет верхней границы. В счастливые дни вы можете выиграть столько, сколько сможете выиграть, и казино никогда не остановит вас, говоря, что казино теперь банкрот. Таким образом, в этой предвзятой игре между вами и казино, для не фальсифицированной игры, и вы, и казино имеют ожидаемое нулевое значение: ни выигрыша, ни проигрыша. Но у вас есть нижняя граница, а у казино нет нижней границы. Проще говоря, давайте предположим, что вы начинаете с 100 долларов. Если вы выиграете, вы можете достичь 1000 долларов или даже 10 тысяч долларов. Но ожидаемая величина вашей окончательной суммы по-прежнему составляет 100 долларов. Таким образом, чтобы снизить ожидаемое значение, большое количество таких людей, как вы, должны обанкротиться. Давайте проверим эту теорию с помощью моделирования с использованием ранее определенных функций.

Симуляция 6
final = matrix(0,10,5)
 final[,1] = 1:10
 for(j in 1:10){
 simple_bet = matrix(0,500,2)
 for(i in 1:500){
 simple_bet[i,] = simulation(pocket = 100,min_bet = 20,games = j*50)
 }
 final[j,2] = nrow(simple_bet[simple_bet[,1] == 0,])/nrow(simple_bet)
 final[j,3] = mean(simple_bet[,1])
 final[j,4] = max(simple_bet[,1])
 final[j,5] = mean(simple_bet[,2])/j*50
 }
 final = as.data.frame(final)
 colnames(final) = c("#Games","Bankruptcy Rate","Mean earning", "Max earning","% wins")


Очевидно, что уровень банкротства и максимальный доход кажутся коррелированными. Это означает, что чем больше игр вы играете, тем выше вероятность того, что вы станете банкротом и станете миллионером, одновременно. Так что, если это не ваш счастливый день, вы потеряете все. Представьте себе 10 человек P1, P2, P3, P4… .P10.

P10 - самый удачливый, P9 - второй в очереди ... .P1 - самый неудачливый.

Если все они начнутся с 100 долларов, первым станет банкротом P1, а его 100 долларов будут разделены между остальными 9. Следующим по очереди банкротством является P2 и так далее. Таким образом, вы можете подумать, что у P3 его счастливый день, но если он сыграет достаточное количество игр после того, как P4 уйдет, он теперь подпитывает P2 и P1. Вскоре P1 и P2 будут грабить P3. Очевидно, P2 следующий, и, наконец, P1 покинет казино с 1000 долларов в кармане. Казино - это просто средство для перераспределения богатства, если игры честные и не сфальсифицированы. Если все P1-P10 играют в блэкджек, я не удивлюсь, если все они станут банкротами, так как у дилера больше шансов выиграть игру.

Прозрение 4 - Чем больше игр вы играете, тем больше шансов на банкротство и максимальную сумму, которую вы можете выиграть, и то и другое верно для честной игры (что само по себе является мифом).

Есть ли способ контролировать это банкротство в игре без предвзятости? К счастью, ДА!

Что если мы сделаем игру честной. Самый низкий уровень, что вы можете достичь - это потеря 100 долларов. Давайте теперь установим максимальную прибыль, которую вы получите, также 100 долларов, и тогда вы остановитесь, несмотря ни на что. Давайте попробуем смоделировать это.

Симуляция 7
##Ограничение общего выигрыша до 100%

betting_strategy = function(last_bet,last_result,min_bet,left_bal){
 next_bet = min_bet
 if(left_bal <= 0 | left_bal >= 200) {next_bet = 0}
 return(next_bet)
 }

simple_bet = matrix(0,1000,2)
 for(i in 1:1000){
 simple_bet[i,] = simulation(pocket = 100,min_bet = 20,games = 100)
 }
Среднее количество выигранных игр = 50

Средний выигрыш, когда вы выходите из казино = $99,34 ~ $100

Макс. выигрыш = 200 $

% раз человек становится банкротом = 47,5%

БИНГО! В 50% получаем 0, а в остальных 50% достигаем 200 долларов. Теперь это выглядит справедливо! Давайте запустим ту же симуляцию, что и в предыдущей стратегии.



Уровень банкротства явно колеблется около 50%. Вы можете уменьшить его еще больше, если вы ограничите свой заработок ниже 100%. Но, к сожалению, никто не может ограничить свой выигрыш, когда он в казино. И не останавливаясь на 100% делает вероятность банкротства выше.

Прозрение 5 - Единственный способ выиграть в казино - это определить лимит выигрыша. В ваш счастливый день вы действительно выиграете этот лимит. Если вы поступите иначе, вы обанкротитесь даже в самый удачный день.

1 комментарий: