Алгоритм создания головоломки с шестигранным потоком - PullRequest
6 голосов
/ 14 июля 2009

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

alt text
(источник: hacker.org )

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 15 июля 2009

Я бы попытался доказать, что он является NP-полным или в P, чтобы понять, какие конфигурации являются сложными.

Я бы также абстрагировал шестиугольники и использовал представление в виде графика.

1 голос
/ 26 августа 2009

Я много раз играл в головоломку с прямоугольным наводнением (http://labpixies.com/gadget_page.php?id=10). Рад видеть версию Hex! Я думаю, что найти сложную игру так же просто, как: избегать появления больших блоков одного цвета в головоломке По крайней мере, в прямоугольных случаях, которые я видел, почти все головоломки, которые можно решить за небольшое количество шагов, имеют большие цветные блоки.

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

1 голос
/ 14 июля 2009

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

Я предлагаю то же самое. Попробуйте найти условия, которые дают большую вероятность того, что головоломка имеет желаемые свойства, и протестируйте их. Или вы можете использовать генетические алгоритмы / нейронные сети и обучать их распознавать «хорошие» головоломки, которые равносильны одному и тому же.

...