Алгоритм создания загадки шестнадцатеричного наводнения

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

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

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

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

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

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

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


person adum    schedule 14.07.2009    source источник
comment
Пожалуйста, переместите предложение Проблема, с которой я столкнулся ... в начало абзаца. В конце самого длинного абзаца он теряется.   -  person Daniel C. Sobral    schedule 14.07.2009
comment
Прошло два года, не могли бы вы опубликовать свое текущее мышление?   -  person smci    schedule 09.08.2011
comment
Я не смог придумать ничего хорошего, поэтому, к сожалению, никогда не выкладывал пазл онлайн. Если кто-нибудь когда-нибудь придумает хороший алгоритм, я все равно его сделаю!   -  person adum    schedule 09.08.2011


Ответы (3)


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

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

person Daniel C. Sobral    schedule 14.07.2009

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

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

person starblue    schedule 14.07.2009

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

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

person felix    schedule 26.08.2009
comment
Мне, вероятно, не следовало использовать нижнюю границу, потому что это немного неоднозначно, когда цель состоит в том, чтобы минимизировать, но да, мы говорим об одном и том же. Избегайте больших цветных блоков, чтобы сделать головоломку сложной, но мне нужен способ найти быстрое решение. - person adum; 27.08.2009