* Поиск игры Rush Hour? - PullRequest
       3

* Поиск игры Rush Hour?

0 голосов
/ 02 мая 2011

Для школьного задания я должен найти решателя для игры в час пик ... если вы не знакомы с часом пик ..., перейдите по этой ссылке: http://www.puzzles.com/products/rushhour.htm

Для этого решателя мне нужно использовать алгоритм поиска A *, я немного заглянул в интернет и думаю, что вполне понимаю, как работает алгоритм ... только у меня нет идеи, как его реализовать в решатель .. ни как я должен построить сетку для автомобилей .. Может кто-нибудь, пожалуйста, дайте мне несколько советов / помощь для этого? Не полное решение ..

Ответы [ 2 ]

4 голосов
/ 02 мая 2011

Чтобы представить сетку автомобилей, я бы просто использовал прямоугольный массив ячеек, где каждая ячейка помечена целым числом - 0 означает «пустой», и у каждого автомобиля есть определенное число, поэтому разные автомобили вСетка будет проявлять себя как последовательные ячейки с одинаковым номером.

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

Чтобы реализовать A *, вам понадобится наивная эвристика для выяснения того, какхороший ход выглядит, так что вы знаете, какие ходы попробовать в первую очередь.Сначала я бы предложил, чтобы любое движение, которое либо перемещает целевую машину ближе к цели, либо делает пространство ближе к передней части целевой машины, может быть лучшим вариантом кандидата.Как сказал Уилл А. в комментариях, если вы не решаете доску 1000x1000 в час пик, это, вероятно, не имеет большого значения.

Это все сложные моменты, которые я могу придумать.

1 голос
/ 02 мая 2011

Как уже указал mquander или Will, алгоритм A * может быть немного лучше вашей проблемы.

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

Вы можете использовать некоторые алгоритмы, которые относятся к виду "неинформированного поиска". Там у вас есть, например, поиск в ширину, поиск в глубину, поиск с равномерной стоимостью, поиск с ограниченной глубиной или итеративный поиск с углублением. Если вы используете поиск в ширину или поиск с равномерной стоимостью, то вам, возможно, придется столкнуться с проблемой доступного пространства памяти, поскольку эти алгоритмы имеют экспоненциальную сложность пространства (и вам нужно сохранить все пространство поиска в памяти). Поэтому использование глубокого поиска (сложность O (b * m)) более дружественно для памяти, так как левая часть дерева, которое вы посещаете в первую очередь, может быть опущена, если она не содержит решения. Поиск с ограничением по глубине и итеративный поиск с углублением почти одинаковы, тогда как при итеративном поиске с углублением вы увеличиваете уровень поиска вашего дерева итеративно.

Если вы сравните временную сложность (b = коэффициент ветвления дерева, m = максимальная глубина дерева, l = предел уровня глубины, d = глубина решения):

в ширину: b ^ (d + 1)

равномерная стоимость: b ^?

глубина кулак: б ^ м

ограничено по глубине: b ^ l, если (l> d)

итеративное углубление: b ^ d

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

Затем у вас есть так называемый «информированный поиск», такой как поиск по принципу «лучший сначала», «жадный поиск», «восхождение на гору» или имитация отжига. Короче говоря, для поиска в лучшем случае вы используете функцию оценки для каждого узла в качестве оценки «желательности». Цель жадного поиска - расширить узел, который приближает вас к цели. Подъем на холм и имитация отжига очень похоже. Стюарт Рассел объясняет восхождение на холм следующим образом (что мне очень нравится ...): алгоритм восхождения на холм похож на восхождение на Эверест в густом тумане с амнезией ». Это просто петля, которая постоянно движется в направлении увеличения стоимости. Таким образом, вы просто «идете» в направлении, которое увеличивает вашу функцию оценки.

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

...