Как вы решаете 15-головоломку с помощью алгоритма А-Стар или Дейкстры? - PullRequest
16 голосов
/ 18 сентября 2008

Я читал в одной из моих книг по искусственному интеллекту, что популярные алгоритмы (A-Star, Dijkstra) для поиска пути в симуляции или играх также используются для решения хорошо известной "15-головоломки".

Кто-нибудь может дать мне несколько советов о том, как я бы свел 15-головоломку к графу узлов и ребер, чтобы я мог применить один из этих алгоритмов?

Если бы я рассматривал каждый узел на графике как состояние игры, разве это дерево не стало бы достаточно большим? Или это просто способ сделать это?

Ответы [ 8 ]

9 голосов
/ 12 апреля 2009

Хорошей эвристикой для A-Star с загадкой 15 является количество квадратов, которые находятся не в том месте. Поскольку вам нужно как минимум 1 ход на квадрат, который не на своем месте, количество квадратов не на месте гарантированно будет меньше или равно количеству ходов, необходимых для решения головоломки, что делает ее подходящей эвристикой для A-Star .

7 голосов
/ 23 сентября 2008

Быстрый поиск в Google выявляет несколько документов, в которых это подробно освещено: одна на Параллельный комбинаторный поиск , а другая на Поиск по графу внешней памяти

Общее эмпирическое правило, когда речь заходит об алгоритмических проблемах: кто-то, вероятно, сделал это до вас и опубликовал свои выводы .

4 голосов
/ 03 апреля 2012

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

Одна из проблем этого подхода заключается в том, что для любой доски n x n, где n > 3 игровое пространство становится настолько большим, что неясно, как можно эффективно отметить посещенные вершины. Другими словами, нет очевидного способа оценить, идентична ли текущая конфигурация платы той, которая была ранее обнаружена путем обхода какого-то другого пути. Другая проблема заключается в том, что размер графа растет так быстро с n (это приблизительно (n^2)!), что он просто не подходит для атаки методом грубой силы, поскольку число путей становится невозможным в вычислительном отношении для прохождения.

Эта статья Иана Парберри Алгоритм в реальном времени для (n^2 − 1) - Puzzle описывает простой жадный алгоритм, который итеративно приходит к решению путем заполнения первой строки, затем первого столбца, затем второй ряд ... Решение приходит почти сразу, однако решение далеко от оптимального; по сути, это решает проблему так, как это делает человек, не используя никаких вычислительных мышц.

Эта проблема тесно связана с проблемой решения кубика Рубика. График всех игр показывает, что он слишком велик, чтобы его можно было решить с помощью грубой силы, но есть довольно простой 7-шаговый метод, который может быть использован для решения любого куба за 1-2 минуты ловким человеком. Этот путь, конечно, не оптимален. Научившись распознавать паттерны, которые определяют последовательности движений, скорость можно снизить до 17 секунд . Однако этот подвиг Иржи несколько сверхчеловеческий!

Метод, описанный Parberry, перемещает только одну плитку за раз; Можно предположить, что алгоритм можно улучшить, используя ловкость Джири и перемещая несколько плиток одновременно. Это, как доказывает Парберри, не уменьшит длину пути с n^3, но уменьшит коэффициент ведущего члена.

4 голосов
/ 20 июня 2009

Это задание для задачи из 8 задач, о которой подробно говорится в алгоритме A *, но также довольно просто:

http://www.cs.princeton.edu/courses/archive/spring09/cos226/assignments/8puzzle.html

3 голосов
/ 29 октября 2009

Помните, что A * будет искать в проблемном пространстве по наиболее вероятному пути к цели, как определено вашим эвристиком.

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

2 голосов
/ 20 июня 2009

Вот, пожалуйста, http://www.heyes -jones.com / astar.html

2 голосов
/ 18 сентября 2008

Просто используйте игровое дерево. Помните, что дерево - это особая форма графа.

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

1 голос
/ 23 сентября 2008

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

...