Выбрать главу

Допишем функцию ставки на конкретный номер:

def move_roulette2(num):

val = random.randint(1,38)

return val == num

Симуляция, будем считать что игрок ставит на число 10:

money_total = 100

win = 0

loose = 0

for p in range(100):

bet = 1

step = move_roulette2(10)

if step is True:

money_total += 35*bet

win += 1

else:

money_total -= bet

loose += 1

print("Win", win, "Loose", loose, "Money", money_total)

В результате, игрок выиграл 2 раза и проиграл 98 раз, итоговый баланс -28у.е.

Ставка на два номера

Можно поставить на два номера - шанс выигрыша выше, но зато ставка меньше и составляет 17:1.

Напишем функцию:

def move_roulette3(num1, num2):

val = random.randint(1,38)

return val == num1 or val == num2

За 100 попыток нашей симуляции игрок выиграл 3 раза и проиграл 97 раз, баланс составил -46у.е.

Существуют и другие виды ставок, например, на 4 номера с коэффициентом 1:8, желающие могут поэкспериментировать самостоятельно. Как нетрудно догадаться, все коэффициенты рассчитаны так, чтобы игрок оказался в минусе. Кажется заманчивым поставить 1уе на номер, чтобы выиграть целых 35уе. Но сумма выигрыша увеличивается в 35 раз, а шанс выигрыша уменьшается в 38 раз - итоговый баланс все равно будет в пользу казино.

Лото 6 из 45

Следующее, что интересно проверить, это лото. Принцип игры довольно прост - в барабане находятся 45 шаров, выпадают случайным образом 6 из них. Цена билета составляет 100р, а выигрыш зависит от количества угаданных шаров. Примерный порядок сумм выигрыша таков: 2 угаданных шара дают выигрыш в 100р, 3 угаданных шара дают 300р, 4 шара - 3000р, 5 шаров - 300.000р и 6 шаров - суперприз порядка 10.000.000р.

Для начала напишем программу выбрасывания шаров:

def lottery(values):

balls = range(1, 45+1)

b1 = balls.pop(random.randint(0, len(balls)-1))

b2 = balls.pop(random.randint(0, len(balls)-1))

b3 = balls.pop(random.randint(0, len(balls)-1))

b4 = balls.pop(random.randint(0, len(balls)-1))

b5 = balls.pop(random.randint(0, len(balls)-1))

b6 = balls.pop(random.randint(0, len(balls)-1))

s = [b1,b2,b3,b4,b5,b6]

# print s

res = list(set(s) & set(values))

return len(res)

Из массива balls 6 раз “достается” случайный элемент, затем определяется число элементов пересечений двух множеств. Затем построим график суммарного выигрыша от количества купленных билетов. Для простоты будем считать что игрок ставит на одни и те же числа (тем более, что это ни на что не влияет).

money = []

money_total = 0

for p in xrange(N):

val = lottery([3,7,12,18,33,28])

if val == 2:

money_total += 100

if val == 3:

money_total += 300

if val == 4:

money_total += 3000

if val == 5:

money_total += 300000

if val == 6:

money_total += 3000000

money.append(money_total)

x = range(0, N)

price = map(lambda x: ticket_price*x, x)

from matplotlib import pyplot as plt

%matplotlib inline

plt.plot(price, money)

Интересно проанализировать работу программы. Если купить 100 билетов (суммарная потраченная сумма будет 10.000р), то это дает около 14 угаданных “двойных” шаров и один угаданный “тройной”. Суммарный выигрыш составляет около 2.000р при потраченных 10.000р.

График выигрыша от потраченной суммы получился практически линейным:

Получается, что если купить билетов на миллион, выигрыш составит 250тыс. “Суперприз” в симуляции так не разу и не выпал, хотя теоретически, он конечно возможен. Кстати, как написано в правилах, призовой фонд составляет 50% с проданных билетов, но “суперприз” выпадает далеко не всегда, так что как и в случае с казино, организаторы разумеется, в выигрыше.

В завершении этой главы, интересно сравнить принципиально разный психологический подход к играм. В лотерее выигрыши потенциально велики, но весьма редки. В казино подход обратный — ставки настроены так, что человек будет выигрывать максимально часто. Условно, сделав 10 игр в казино, человек выиграет 4 раза и проиграет 6 раз. Это позволяет игроку не терять интерес к игре, но в любом случае общий баланс остается негативным — человек будет много раз выигрывать, но и чуть-чуть больше проигрывать.

В итоге, может ли существовать «выигрышная стратегия» в таких случайных играх? Очевидно нет, т.к. ни кость, ни шарик, ни лотерейные билеты, не имеют памяти, и их поведение не зависит от предыдущих итераций. Кстати, этот момент важно помнить - интуитивно, проиграв несколько раз, человек может решить, что вот сейчас-то он “точно” выиграет. Увы нет - рулетка или кубик не имеют памяти, и “не знают” о количестве предыдущих попыток, каждая игра по сути начинается с чистого листа. Можно ли выиграть в азартные игры? Как показывает, симуляция, в принципе можно, теория вероятности допускает. Но недолго — стоит начать играть 2й, 3й,… Nй раз, как баланс пойдет вниз. В долгосрочной перспективе выиграть у казино невозможно.