Ответ 1
Определите свою проблему как граф состояний:
G=(V,E)
где V=S={(x_1,x_2,...,x_54) | all possible states the 3d board can be in}
[каждое число представляет собой один квадрат на трехмерной доске].
и определите E={(v1,v2)| it is possible to move from state v1 to state v2 with a single step}
альтернативное определение [идентичное] для E
, используя функцию successors(v)
:
Для каждого v из V: successors(v)={all possible boards you can get, with 1 step from v}
Вам также понадобится допустимая эвристическая функция, довольно хорошая для этой проблемы может быть: h(state)=Sigma(manhattan_distance(x_i)) where i in range [1,54])
в основном, это суммирование расстояния manhattan для каждого номера из его цели.
Теперь, как только мы получим эти данные, мы можем запустить A * на определенном графе G с определенной эвристикой. И поскольку наша эвристическая функция допустима [убедите себя, почему!], Гарантируется, что найденное решение A * будет оптимальным, благодаря допустимости и оптимальности A *.
Поиск фактического пути: A * закончится при разработке целевого состояния. [ x_i=i
в терминах, которые мы использовали ранее]. Вы найдете свой путь к нему, отступив от цели к источнику, используя поле parent
в каждом node.