Разорение игрока
Почему даже в честной игре против богатого соперника разорение почти неизбежно.
Задача о разорении игрока изучает случайное блуждание капитала между нулём и целью: с какой вероятностью игрок разбогатеет раньше, чем обанкротится.
Игрок начинает с капиталом $i$ и в каждом раунде выигрывает рубль с вероятностью $p$ или теряет рубль с вероятностью $1-p$. Игра идёт, пока он не достигнет цели $N$ или не разорится в ноль. Эта простая модель объясняет, почему казино всегда в плюсе, и лежит в основе теории случайных блужданий. Сценарий знаком каждому, кто хоть раз слышал фразу «отыграюсь». Игрок с небольшим капиталом садится против заведения с практически бесконечными деньгами и ставит цель — удвоиться, утроиться, сорвать куш. Кажется, что при честной игре шансы дойти до цели или разориться равны. На деле всё решает соотношение капиталов: чем больше цель относительно старта, тем вероятнее разорение, даже когда каждая отдельная ставка абсолютно справедлива. А стоит добавить малейший перевес в пользу заведения — и разорение становится почти неотвратимым. Разберём обе ситуации количественно, и математика объяснит, почему стратегия «играть, пока не отыграюсь» обречена.
Честная игра
Пусть игра справедлива: $p=\frac{1}{2}$. Тогда вероятность достичь цели $N$, стартуя с $i$, удивительно проста:
$$P(\text{достичь } N)=\frac{i}{N}.$$
Стартуя с 10 рублей при цели 100, шанс разбогатеть — лишь $\frac{10}{100}=0{,}1$. То есть в честной игре против цели, которая в 10 раз больше старта, вы разоритесь в $90\%$ случаев. Проверим симуляцией.
import random
random.seed(23)
def gambler(i, N, p):
money = i
while 0 < money < N:
money += 1 if random.random() < p else -1
return money == N
N_runs = 200000
start, goal = 10, 100
wins = sum(gambler(start, goal, 0.5) for _ in range(N_runs)) / N_runs
print("P(достичь цели):", round(wins, 4))
print("Теория i/N: ", start / goal)Вывод:
P(достичь цели): 0.0998 Теория i/N: 0.1
Нечестная игра
В казино $p\lt\frac{1}{2}$ (есть преимущество заведения). Тогда вероятность достичь цели падает экспоненциально:
$$P(\text{достичь } N)=\frac{1-r^{i}}{1-r^{N}},\qquad r=\frac{1-p}{p}.$$
Даже крошечный перевес против игрока (скажем, $p=0{,}49$) при большой цели делает выигрыш почти невозможным. Проверим при $p=0{,}49$, старте 10 и цели 100: формула даёт около $0{,}0092$.
import random
random.seed(24)
def gambler(i, N, p):
money = i
while 0 < money < N:
money += 1 if random.random() < p else -1
return money == N
p = 0.49
r = (1 - p) / p
theory = (1 - r**10) / (1 - r**100)
N_runs = 200000
wins = sum(gambler(10, 100, p) for _ in range(N_runs)) / N_runs
print("P(достичь цели):", round(wins, 4))
print("Теория: ", round(theory, 4))Вывод:
P(достичь цели): 0.0089 Теория: 0.0092
Перевес всего в $1\%$ обрушил шанс выигрыша с $10\%$ до менее $1\%$. Вот математическая причина, по которой «отыграться» в казино — плохая идея.
Как работает под капотом
Симуляция реализует капитал как одномерное случайное блуждание: на каждом шаге $\pm 1$, цикл идёт, пока не достигнута граница 0 или $N$. Возвращаемое money == N отвечает на вопрос «дошёл ли до цели». Усреднение по тысячам партий даёт эмпирическую вероятность, которая совпадает с формулами — и для честной игры (линейная $i/N$), и для нечестной (экспоненциальная по $r$). Никаких формул код не использует: он просто играет партии до конца.
Частые ошибки
Первая ошибка — верить, что в честной игре можно «пересидеть» и почти наверняка достичь любой цели: вероятность строго $i/N$, и против большой цели она мала. Вторая — недооценивать влияние малого перевеса казино: эффект экспоненциальный, а не линейный. Третья — путать «вероятность разорения» с «ожидаемым временем игры»: даже когда разорение почти неизбежно, до него можно играть очень долго — это отдельная характеристика.
Итог
- В честной игре вероятность достичь цели $N$ из $i$ равна $i/N$.
- Против большой цели разорение почти неизбежно даже при честной игре.
- Малый перевес казино снижает шанс выигрыша экспоненциально.
- Капитал игрока — это случайное блуждание с поглощающими границами.