違います。ヒューリスティック関数には、現在の検索状態で構成されるh(x)
引数があります。ゴールx
までの推定距離を返します。x
単純なグラフでx
は、グラフ ノードです。
許容性は、過小評価(または目標距離と等しい)h(x)
のみである必要があります。この条件は、特定の x ごとに適用されます。(条件が可能なすべての xであると推測しているようですが、これは強すぎます。これが必要な場合、 A* は役に立ちません。)
あなたが提案するケースに関する正しいステートメントは、がゴールまでの距離がゼロの状態である場合にのみh(x) = 0
必要です。それ以外の値は過大評価になります。ただし、目標に到達するために総コストが最小の遷移を必要とする (同じ状態空間内の)他のものについては、そのようなものをすべて持つことができます。x
x
C>0
h
h(x)<=C
もちろん、x
のゴールまでの距離がゼロの場合、x
はゴール状態であり、探索は完了です。したがって、あなたの懸念は空虚です-それが興味深い場合はありません。
構築する情報h(x)
は、検索空間に関する知識 (グラフの特性など) から得られます。むき出しの一般的なグラフだけでは、何の役にも立ちません。あなたができる最善のことはh(x) = cost of min weight outgoing edge of x
、非ゴール ノードと、既に説明h(x) = 0
したようにゴールに対してです。繰り返しますが、これはゴールまでの距離の下限です。それはあなたにダイクストラを与えます!
うまくやるには、グラフの構造について知っておく必要があります。
編集
あなたの例では、詳細な知識を提供しているので、良いものを作るのh
は簡単です. 使用できます
/ 4 if x == S
| 3 if x == V1
h(x) = { 2 if x == V2 or V3
| 1 if x == V4
\ 0 if x == G
または、 for allh'(x)
などの他の関数を使用できます。たとえば、これは許容されます。h'(x) <= h(x)
x
/ 3 if x == S
| 2 if x == V1
h'(x) = { 2 if x == V2 or V3
| 1 if x == V4
\ 0 if x == G
添加
h(x)
OPは、多くの問題で選択が難しいことを指摘しています! これは正確に正しいです。許容できる優れたヒューリスティックが見つからない場合、A* は間違ったアルゴリズムです! それにもかかわらず、A* はヒューリスティックを見つけることができる問題に対して非常に効果的です。私が自分で試した例:
ユークリッド距離が任意の 2 つのノード間の可能な距離の適切な下限であるグラフ。たとえば、都市 A と B の各ペアは距離 D だけ離れていますが、A から B までの道路の長さは少なくとも D であり、おそらくそれ以上です。つまり、そのコスト C は、 D に等しい。この場合、D は推定値が低いため、優れたヒューリスティックを作成します。
勝利状態までの「距離」がゲーム ピースの移動を伴うパズル。この場合、勝利状態に対して現在位置がずれているピースの数は、優れたヒューリスティックです。例としては、7 番目のゲストからの 8 ビショップの問題 (まだ最終的な位置にないビショップの数) と魔方陣問題 (すべてのピースの現在の位置から勝利状態での正しい位置までのマンハッタン距離の合計) があります。