Заключения: Эвристические функции, которые производят отрицательные значения не являются неприемлемыми, по себе, но есть потенциал, чтобы сломать гарантии A *.
Интересный вопрос. По сути, единственным условием приемлемости является то, что эвристика никогда не переоценивает расстояние до цели. Это важно, потому что переоценка в неправильном месте может искусственно сделать лучший путь хуже, чем другой путь, и не позволять ему когда-либо изучаться. Таким образом, эвристика, которая может обеспечить завышенные значения, теряет гарантию оптимальности. Недооценка не несет те же затраты. Если вы недооцениваете стоимость перехода в определенном направлении, в конечном итоге весы кромки будут превышать стоимость перехода в другом направлении, поэтому вы также изучите это направление. Единственная проблема - потеря эффективности.
Если все ваши края имеют положительные затраты, отрицательное эвристическое значение может быть только недооценено. Теоретически недооценка должна быть только хуже, чем более точная оценка, поскольку она обеспечивает строго меньшую информацию о потенциальной стоимости пути и, вероятно, приведет к увеличению количества узлов. Тем не менее, это не будет недопустимым.
Однако, вот пример, который показывает, что теоретически возможно при отрицательных эвристические значения нарушить гарантированную оптимальность A *:
В этом графике, очевидно, лучше пройти через узлы A и B. Это будет стоить три, а не шесть, что является стоимостью прохождения через узлы C и D. Однако отрицательные эвристические значения для C и D приведут к тому, что A * достигнет конца через них до исследуя узлы A и B. В сущности, эвристическая функция продолжает думать, что этот путь станет значительно лучше, пока не станет слишком поздно. В большинстве реализаций A * это вернет неправильный ответ, хотя вы можете исправить эту проблему, продолжая исследовать другие узлы, пока наибольшее значение для f (n) не будет больше стоимости найденного вами пути. Обратите внимание, что в этой эвристике нет ничего недопустимого или непоследовательного. На самом деле я действительно удивлен тем, что неотрицательность чаще всего упоминается как правило для эвристики A *.
Конечно, все это демонстрирует, что вы не можете свободно использовать эвристику, которая возвращает отрицательные значения, не опасаясь последствий. Вполне возможно, что определенная эвристика для данной проблемы будет очень хорошо работать, несмотря на то, что она отрицательна. Для вашей конкретной проблемы маловероятно, что что-то подобное происходит (и мне действительно интересно, что он работает так хорошо для вашей проблемы и все еще хочет больше думать о том, почему это может быть).
У вас есть пример эвристической функции, которая делает это? При номинальной стоимости кажется, что возвращение отрицательного значения является индикатором того, что вы переоценили расстояние до цели в какой-то момент в прошлом, но я мог бы что-то игнорировать. – seaotternerd
Я представляю свои государственные пространства как отдельные наборы элементов. Существует набор предметов, которые должны быть выполнены в любом порядке. По мере того, как я продолжаю генерировать новые состояния (в рамках ограничений проблемы), моя «лучшая» эвристика добавляет веса для всех элементов, отсутствующих в наборе целей, и вычитает веса для всех элементов, которые соответствуют, в пользу близко сформированных состояний цели. Если вы посмотрите на значения для H, полученные во время выполнения, большинство из них положительно в начале, но позже становятся отрицательными (более потенциальные цели). Однако значения F и G никогда не опускаются ниже нуля. – RJS
Итак, каждый край представляет собой добавление элемента, а его вес - это стоимость этого края? – seaotternerd