Кто играл в “сапера”, тот знает, что бывают ситуации, когда логически вычислить положение следующей мины/пустой клетки невозможно. Я задался вопросом: “А какова вообще вероятность того, что поле откроется, если открывать его настолько аккуратно, насколько это возможно (исключить человеческий фактор)?” Очевидно, что такая цифра существует. Собственно эта статья посвящается тому, как мне удалось приблизиться к этим числам. Сначала сразу приведу результаты, чтобы не напрягать лишний раз людей, которые зашли сюда только за ними
Результаты:
Сразу скажу, что эти числа получены в ходе экспериментов и научную ценность могут представлять только после теоретического основания, если кто-нибудь когда-нибудь решит его сделать; кроме того возможны погрешности. Это всего лишь попытка найти их. Тем не менее:
Новичок (поле 8×8, 10 мин), первый клик в углу: вероятность 75%;
Новичок, первый клик в центре: вероятность 67.7%.
Любитель (поле 16×16, 40 мин), первый клик в углу: вероятность 66.1%
Любитель, первый клик в центре: вероятность 62.9%
Профессионал (30×16, 99 мин), первый клик в углу: 23.1%
Профессионал, первый клик в центре: 22.9%
Как результаты были получены:
Как я уже писал, результаты экспериментальные. Поскольку постановка звучала так: “Какова вероятность того, что самый аккуратный/лучший/идеальный игрок в мире откроет поле размером NxM с K минами, если на первом клике подорваться невозможно”, то для начала был сделан алгоритм, который достаточно хорошо (близок к идеальному) открывает данное ему поле. После этого, для каждого вида поля я создавал 10000 досок и давал ему их решать. Число успешно открытых им досок деленное на 100 и бралось в качестве претендента для искомой вероятности.
Описание “близкого к идеальному” алгоритму, который использовался в эксперименте:
Алгоритм итерационный:
- Если на i-м шаге можно со 100% уверенностью определить, что в какой-то ячейке есть мина, то алгоритм помечает ее как мину. Пример ситуации: вокруг единички все ячейки открыты, одна закрытая. Значит там мина:)
- Если на i-м шаге можно со 100% уверенностью определить, что какая-то ячейка пустая, то алгоритм “кликает” на нее. Пример: единичка, возле нее установлена “мина”. Значит алгоритм кликает на все оставшиеся соседние с этой единичкой ячейки.
- Если на i-м шаге нельзя со 100% уверенностью определить, где мина есть, а где ее нет, то алгоритм 50 раз случайным образом расставляет оставшиеся мины так, чтобы ситуация на доске была допустимой. То есть он не будет возле открытой единички ставить 3 мины. После этого он анализирует эти 50 возможных расстановок, находит клетки, где мины встречались часто, где редко (среди этих 50-и расстановок), то есть находит клетки, в которых наибольшая вероятность мины (или ее отсутствия), и ставит туда мину (или кликает).
Как видно, алгоритм имитирует человека, который играет “нечестно”: использует программу, которая на каждом шаге вычисляет для него вероятность того, где мины есть, а где их нет. Если он не идеален, то ИМХО весьма хорош:)
Зависимость вероятности успеха (открыть поле) от плотности мин:
Для поля размером 8×8 я посчитал вероятности для любого количества мин (те успех когда на поле 0 мин, 1 мина, 2 мины, … 62 мины). Вот как для этого поля выглядит график зависимости вероятность успеха от плотности мин:

Выводы:
Кроме полученных чисел можно заметить, что вероятность так же зависит от начального клика, лучше начинать открывать с угла:)
Еще есть такой ресурс sweepmines.com, на котором предлагают открыть поле 8×8, 12 мин, в случае успеха возвращают удваивоенную ставку. Так вот, вероятность открыть такое поле — 57% (если с угла). Так что в принципе можете попытаться “обмануть” ресурс и заработать бабла. Но я бы не рискнул
Приложения:
численные результаты экспериментов (для всех плотностей мин на новичке, до 44 мин на любителе, немного на профи);
исходники алгоритма (на питоне), который использовался для эксперимента;
программа, которая помогает “открывать” поле простому игроку, показывая вероятности нахождения/отсутствия мины (питон + pyWidgets). Надеюсь Rogen не обидится (очень пригодится тем, кто участвует в рейтинге “по плотности мин” на minesweeper.ru
)