Задать вопрос
@dso

Вопросы по комбинаторике: почему меняется вероятность 50%?

Есть две задачи по комбинаторике, которые я решаю просто так из интереса. В процессе манипуляции наткнулся на несколько интересных особенностей, которые не могу объяснить, так-как не имею достаточно знаний. Может кто-то сможет потратить свое время и объяснить в чем именно разгадка? Прошу заранее не сердиться, если вопросы и методы, которые я использую, окажутся совсем глупыми - я просто занимаюсь чем-то интересным, как если бы просто швырял камни в море и глядел, как они поднимают брызги.

Итак, две задачи.
1) Классическая. Кидаем монету и угадываем: "орел" или "решка". Пытаемся улучшить результаты успешного угадывания.

2) Человеку дают два конверта с деньгами на выбор. Сумма денег в первом конверте выбирается абсолютно случайно, а во второй всегда помещается сумма в два раза больше. То есть, если в первый конверт решили положить $5, то во втором будет $10. Человек, выбрав конверт, может его открыть. Далее он может отказаться от первого конверта, и взять второй, или оставить первый и завершить раунд. После завершения раунда, рефери показывает суммы в обоих конвертах. Суть - угадывать конверт с бОльшим количеством денег чаще.

Выборка в каждой задаче была разная, я пробовал до 1 000 000 000 (миллиарда).

Задача №1.
Если я делаю скрипт с простым рандомным выбором, я получаю результаты 50% с небольшим плюсом или минусом. То есть, 49.99999 или 50.00001 (чем большее количество выборок, тем больше стремимся к 50%). Тут все понятно. Другое дело начинается, если я начинаю считать количество "решек" и "орлов". И при выборе, если раньше выпало больше "решек", я выбираю "орла". А если раньше выпадало больше "орлов", я выбираю "решку".

Происходит вещь, которую я не могу понять: величина удачных угадываний становится всегда выше 50%. Пусть на небольшой "хвостик" (далее я буду называть его +K (положительный) или -K (отрицательный)), но ситуация 50%-K перестает случаться. Во всяком случае за несколько суток тестов, я ни разу не смог получить 50%-K.

Вопрос: это закономерно, или все дело в ограниченности псевдо-генератора случайных чисел языка программирования?

Задача №2.. К сожалению длинное объяснение, пытался сократить, как только мог.

Выбор конверта случайным образом.
Вижу сумму $5. Значит во втором конверте либо $10, либо два доллара и 50 центов. Решил оставить себе $5. Рефери соглашается с моим выбором, открывает второй конверт, а там $10. Я проиграл. Игра продолжается и продолжается.

Если я буду постоянно выбирать случайный конверт без всякой стратегии, я вновь получаю 50%. С +K или с -K.

Выбор конверта с учетом среднего арифметического от сумм в конвертах.
Для того, чтобы улучшить результаты угадывания, я начинаю записывать две величины: количество попыток и среднее арифметическое от сумм, которые есть в конвертах. Затем я руководствуюсь правилом: оставляю конверт, если сумма лежащая в нем больше средней арифметической всех сумм, или меняю конверт, если денег в конверте меньше.

Симуляция из трех попыток:
Конверты:
- $5 и $10
- $20 и $40
- $20 и $40

После раунда 1. Среднее арифметическое будет: (10+5) / 2 = 7.5.
После раунда 2. Среднее арифметическое будет: (7,5 * 2 + 40 + 20) / 2 = 37.5.

Конверты, которые мне достаются первыми, содержат суммы: 5, 20 и 20.

В первом случае, я оставляю первый конверт $5 (так-как среднее еще 0) и проигрываю $10.
Во втором случае я оставляю $20 (так-как среднее 7,5) и проигрываю $40.
В третьем случае, я отказываюсь от первого конверта с $20 (так-как среднее 37,5) и выигрываю $40.

В зависимости от ширины диапазона rand(0, X) степень угадывания доходит аж до 75%. То есть, среднее арифметическое быстро определяет границы диапазона сумм в конвертах, которые неизвестны, но являются конечными, и это означает, что все числа больше X/2 всегда бОльшие, что отражается на статистике угадываемых сумм.

Конечно, если брать очень большой отрезок с космическими числами, степень угадывания снова начинает стремиться к 50%. Но мы все равно всегда получаем 50%+K.

Вопрос абсолютно такой же, как и к первой задаче: это закономерно, или все дело в ограниченности псевдо-генератора случайных чисел языка программирования?
  • Вопрос задан
  • 331 просмотр
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
alsopub
@alsopub
1) Проблема в том что компьютерные (программные) генераторы - это генераторы псевдослучаных чисел, а не истинно случайных.
2) Проблема в том что вы только на словах можете взять "очень большой отрезок с космическими числами". По факту вы ограничиваете себя просто "большим числом", отсюда и берется некоторое K.
ИМХО

UPD. Попробуйте в качестве источника чисел вытащить последовательнось отсюда - https://www.random.org/sequences/
Согласно https://habrahabr.ru/post/137864/ там должен быть более-менее качественный генератор.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы