Разбор расстановок

Про расстановку в морском бою все всё знают: жмись к краям, прячь мелочь по углам, не ставь в центр. Проверить это никто не пробовал. Мы взяли противника из нашей игры и стравили его с пятью стратегиями. Вот что вышло.

Посчитать самому

Как выпадет
По краям
По углам
В центре
Вразброс

Нажмите «Пересчитать»: против каждой расстановки сыграет тот же противник, что и в нашей игре, а в столбце справа встанет среднее число выстрелов, которое ему понадобилось.

Больше выстрелов — расстановка живучее. Считается у вас в браузере, поэтому при восьмидесяти партиях на стратегию расчёт занимает пару секунд.

СтратегияЧто это
Как выпадетОбычная случайная расстановка без всяких правил.
По краямКорабли жмутся к бортам поля, центр остаётся пустым.
По угламВсё сгоняется в четыре угла — самый частый совет из детства.
В центреНаоборот: середина поля, края свободны.
ВразбросКорабли расставлены как можно дальше друг от друга.

Что показал замер

На выборке в 120 партий на стратегию картина такая. По углам 69,5 выстрела, по краям 69,1, вразброс 56,7, случайная 55,7, в центре 54,6.

Народный совет оказался верным, причём разница вышла больше, чем можно было ожидать: почти пятнадцать выстрелов, то есть четверть партии, которую соперник потратит впустую только из-за того, где вы поставили корабли. В партии до последнего корабля этого хватает, чтобы отыграть проигранное начало.

Почему край выгоднее центра

Дело в числе способов. Четырёхпалубный корабль можно положить через центральную клетку восемью способами: четыре по горизонтали и четыре по вертикали. Через угловую всего двумя.

Алгоритм считает именно это: складывает, сколько раз каждая клетка оказалась накрыта хотя бы одним допустимым положением уцелевших кораблей. Центр набирает больше всех и обстреливается первым. Углы остаются напоследок, и корабль там живёт дольше.

Где совет перестаёт работать

Против живого соперника, который вас знает. Человек быстро замечает привычку и в следующей партии начинает с бортов. Алгоритм так не умеет: он считает каждую партию с нуля и памяти о прошлых играх у него нет.

И ещё одно. Расстановка строго по периметру сама становится предсказуемой: если соперник поймёт, что центр у вас всегда пуст, он просто исключит его из перебора и выиграет время. Полезнее прятать по краям однопалубные, а крупные корабли ставить обычным порядком.

Как это устроено внутри

Стратегия — это способ выбирать место. Для каждого корабля перебирается несколько десятков случайных допустимых положений, и берётся лучшее по мерке стратегии: у «краёв» это близость к борту, у «вразброс» — расстояние до уже стоящих кораблей.

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

Вопросы про разбор

Что именно считает этот разбор?

Он строит флот по выбранной стратегии и запускает против него того же противника, что играет в нашем морском бою. Метрика одна: сколько выстрелов ему нужно, чтобы утопить всё. Чем больше, тем расстановка живучее.

Почему при каждом пересчёте цифры немного разные?

Потому что каждая партия случайна, а выборка небольшая. На двадцати партиях разброс средних доходит до пяти выстрелов, на восьмидесяти сжимается примерно до двух. Порядок мест при этом обычно не меняется.

Это работает против живого человека?

Отчасти. Человек тоже начинает с центра и тоже реже проверяет углы, так что направление совета совпадает. Но живой соперник замечает, если вы всегда прячетесь по краям, и в следующей партии начнёт оттуда.

Считается на вашем сервере?

Нет, прямо у вас в браузере. Восемьдесят партий на каждую из пяти стратегий — это около четырёхсот полных партий, они занимают пару секунд.