Мне нужна помощь в поиске хорошей эвристики для следующей проблемы:
Вам предоставляется сетка
R
-by-C
и шестигранная матрица. Пустьstart
иend
- две разные ячейки в этой сетке. Найдите путь отstart
доend
такой, что сумма граней матрицы, смотрящая вверх, когда кубик поворачивается по пути, является минимален.Начальная ориентация штампа следующая: "2" обращен на юг):
То, как я смоделировал эту проблему, - это учитывать значение грани матрицы как стоимость края в графе. Вершины графа имеют вид (row, col, die)
(т.е. Положение в сетке и текущее состояние/ориентация матрицы). Причина, по которой вершина не просто (row, col)
, состоит в том, что вы можете оказаться в одной и той же ячейке с несколькими конфигурациями/ориентациями матрицы.
Я использовал A *, чтобы найти решение проблемы; ответы даны правильно, но это недостаточно эффективно. Я решил, что проблема заключается в эвристике, которую я использую. В настоящее время я использую Манхэттенскую дистанцию, что, очевидно, допустимо. Если множить эвристику с константой, она перестает быть допустимой: она работает намного быстрее, но не всегда находит правильный ответ.
Мне нужна помощь в поиске лучшей эвристики, чем расстояние Манхэттена.