2015-05-06 2 views
4

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

Однако, я беспокоюсь, что это недопустимо, но не может найти достаточно информации в Интернете, чтобы проверить это. I did find this one paper from the University of Texas, который, как представляется, упоминается в одном из последних доказательств того, что «... поскольку эвристические функции неотрицательны». Может ли кто-нибудь подтвердить это? Я предполагаю, что это потому, что вы возвращаете отрицательное значение, поскольку ваша эвристическая функция превратит ваш g-cost отрицательный (и, следовательно, вмешивается в «поведение по умолчанию» dijkstra-esque A *).

+0

У вас есть пример эвристической функции, которая делает это? При номинальной стоимости кажется, что возвращение отрицательного значения является индикатором того, что вы переоценили расстояние до цели в какой-то момент в прошлом, но я мог бы что-то игнорировать. – seaotternerd

+0

Я представляю свои государственные пространства как отдельные наборы элементов. Существует набор предметов, которые должны быть выполнены в любом порядке. По мере того, как я продолжаю генерировать новые состояния (в рамках ограничений проблемы), моя «лучшая» эвристика добавляет веса для всех элементов, отсутствующих в наборе целей, и вычитает веса для всех элементов, которые соответствуют, в пользу близко сформированных состояний цели. Если вы посмотрите на значения для H, полученные во время выполнения, большинство из них положительно в начале, но позже становятся отрицательными (более потенциальные цели). Однако значения F и G никогда не опускаются ниже нуля. – RJS

+0

Итак, каждый край представляет собой добавление элемента, а его вес - это стоимость этого края? – seaotternerd

ответ

2

Заключения: Эвристические функции, которые производят отрицательные значения не являются неприемлемыми, по себе, но есть потенциал, чтобы сломать гарантии A *.

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

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

Однако, вот пример, который показывает, что теоретически возможно при отрицательных эвристические значения нарушить гарантированную оптимальность A *: An example graph, illustrating a situation where negative heuristic values would break A*

В этом графике, очевидно, лучше пройти через узлы A и B. Это будет стоить три, а не шесть, что является стоимостью прохождения через узлы C и D. Однако отрицательные эвристические значения для C и D приведут к тому, что A * достигнет конца через них до исследуя узлы A и B. В сущности, эвристическая функция продолжает думать, что этот путь станет значительно лучше, пока не станет слишком поздно. В большинстве реализаций A * это вернет неправильный ответ, хотя вы можете исправить эту проблему, продолжая исследовать другие узлы, пока наибольшее значение для f (n) не будет больше стоимости найденного вами пути. Обратите внимание, что в этой эвристике нет ничего недопустимого или непоследовательного. На самом деле я действительно удивлен тем, что неотрицательность чаще всего упоминается как правило для эвристики A *.

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

+0

Действительно сказочный ответ. Мне любопытно, почему у вас есть H (n) = 1 для вашего начального узла. – RJS

+0

Спасибо! Значение h (n) для исходного узла было полностью произвольным. Я просто выбрал что-то низкое, поэтому оно было бы приемлемым и последовательным. Оглядываясь назад, 3, вероятно, был бы менее сложным выбором. – seaotternerd

+1

На самом деле, эта эвристика несовместима. Согласованная эвристика должна удовлетворять всем u, v: h (u) <= d (u, v) + h (v). Однако в вашем примере h (start) = 1, h (C) = -2, d (start, C) = 2 и 1> 2 + (-2). Даже если вы исправили это (например, установив h (start) = 0), это все еще не контрпример. Вы забыли значение эвристики конца, которое должно быть не менее 0 (из-за h (b) = 1). Конец будет добавлен в открытый набор с g (end) = 6, f (end) = 6; однако до того, как он будет извлечен из открытого набора, он снова добавляется с g (end) = 3, f (end) = 3. –

Смежные вопросы