Условие
Вы подбрасываете кубик с 2N гранями (числа от 1 до 2N, равновероятно). После броска у вас две возможности:
- Взять себе сумму
$, равную выпавшему числуk. - Отклонить результат и подбросить кубик ещё раз — тогда вы обязаны взять то, что выпало во второй раз (отклонять второй бросок уже нельзя).
При каких значениях первого броска нужно перебрасывать? Чему равна ожидаемая прибыль при оптимальной стратегии?
Решение
Шаг 1. Чему равна ожидаемая прибыль от переброса
Если перебросить, второй бросок — случайное равномерное число от 1 до 2N. Его математическое ожидание:
E[X_2] = (1 + 2 + ... + 2N) / 2N = (2N · (2N + 1) / 2) / 2N = (2N + 1) / 2 = N + 0.5
То есть ожидаемая выгода от переброса равна N + 0.5.
Шаг 2. Правило оптимальной остановки
Если на первом броске выпало k, оптимально:
- Брать, если
k > N + 0.5, то естьk ≥ N + 1(посколькуk— целое). - Перебрасывать, если
k ≤ N(тогда мы получаем в среднемN + 0.5 > k).
При k = N k < N + 0.5, значит лучше перебросить.
При k = N + 1 k > N + 0.5, значит лучше взять.
Граница: перебрасываем при k ∈ {1, 2, ..., N} (нижняя половина граней).
Шаг 3. Матожидание оптимальной стратегии
Распишем по случаям первого броска k:
- С вероятностью
N / 2N = 1/2выпалоk ∈ {1, ..., N}→ перебрасываем, ожидаемый выигрышN + 0.5. - С вероятностью
1/2выпалоk ∈ {N + 1, ..., 2N}→ берёмk, средний выигрыш в этой половине:
E[k | k > N] = (N + 1 + N + 2 + ... + 2N) / N = (N · (3N + 1) / 2) / N = (3N + 1) / 2
Итого:
E = (1/2) · (N + 0.5) + (1/2) · (3N + 1)/2
= (1/2) · (2N + 1)/2 + (1/2) · (3N + 1)/2
= (2N + 1)/4 + (3N + 1)/4
= (5N + 2)/4
Шаг 4. Проверка для N = 3 (стандартный 6-гранный кубик)
E = (5·3 + 2)/4 = 17/4 = 4.25
Это соответствует «классическому» ответу для D6: перебрасываем 1, 2, 3; берём 4, 5, 6.
Проверка прямым счётом для D6:
E = (1/6)·(3.5 + 3.5 + 3.5 + 4 + 5 + 6) = (1/6) · 25.5 = 4.25 ✓
Шаг 5. Код-проверка симуляцией
import random
def avg_profit(N, strategy_threshold, trials=10**6):
faces = 2 * N
s = 0
for _ in range(trials):
k1 = random.randint(1, faces)
if k1 <= strategy_threshold:
k2 = random.randint(1, faces)
s += k2
else:
s += k1
return s / trials
# Перебрасываем при k <= N
N = 5
print(avg_profit(N, N)) # ≈ (5*5+2)/4 = 6.75
print((5*N + 2) / 4) # 6.75Подводные камни
- Сравнение
k > N + 0.5, а неk ≥ N + 0.5. ПосколькуN + 0.5нецелое, граничная точка не достигается — но если бы кубик был с нечётным числом граней, появилась бы «безразличная» точка ровно на математическом ожидании. - Перепутать «выгодно перебросить» и «выгодно остановиться». Перебрасываем при низких
k, оставляем при высоких. Интуитивный тест:k = 1— конечно, перебрасываем;k = 2N— конечно, оставляем. - Считать
E[k | k > N]как(N + 1 + 2N) / 2 = (3N + 1)/2— это правильно (среднее арифметическое крайних членов арифметической прогрессии). - Забыть проверить ответ на D6. Удобный санити-чек: для
N = 3ответ —4.25(классическая задача).
Эталонный ответ
- Стратегия: перебрасывать при
k ∈ {1, ..., N}(нижняя половина граней). - Матожидание оптимальной стратегии:
E = (5N + 2)/4. - Для шестигранного кубика (
N = 3):E = 4.25 $.