web-dev-qa-db-ja.com

許容できる一貫性のないヒューリスティックを持つA *が最適でないソリューションを見つけるのはなぜですか?

許容できる一貫性のないヒューリスティックを伴うA *は最適なソリューションを見つけられないことを知っていますが、いつそれが起こるか例を見つけるのに苦労しています。

この考えのために例を見つけることができません-優先ノードに(最適ではないf(n))を使用して目標ノードを挿入した後、優先キューにもノードが含まれている必要があります。 node_1最適パス上にあります。許容ヒューリスティックを使用しているため、優先キューのf(n) of node_1は、目標ノードのf(n)未満である必要があります。これがnode_1が早くデキューされ、A *のいくつかの反復の後に(同じアイデアを使用して)goal_nodeが最適パスが見つかった後で後でデキューされる理由です。

どこで間違っていると思いますか?許容できる一貫性のないヒューリスティックを使用したA *が最適でないパスを見つける場合、誰かが簡単なグラフの簡潔な例を教えてもらえますか?

ありがとうございました。

8
Druudik

これは、一貫性のないヒューリスティックで間違った答えを得るグラフの例です。ここでは、各ノードの近くに括弧を付けてヒューリスティックを示し、エッジの横にエッジコストを記載しています。

     (8)
      A
     / \
+1  /   \ +3
   /     \   
  B ----- C ----- D
(7)  +1  (0)  +6  (0)

ここでは、AからDへの最適なパスはA-B-C-Dであり、合計コストは8ですが、A *が何を行うかを見てみましょう。

  • Aから始めて、コスト+ヒューリスティック8でA-Bに行くか、コスト+ヒューリスティック3でA-Cから行くかを選択できます。したがって、A-Cを選択します。

  • ここで、コストとヒューリスティックが8の場合はA-Bを展開し、コストとヒューリスティックが9の場合はC-Dを展開します。したがって、A-Bを選択します。

  • 以前のパスですでにCをクローズしているため、エッジB-Cは考慮しません。代わりに、コスト9でC-Dを選択します。

  • 全体として、パスA-C-Dが見つかりました。

次の質問は、このような例を地球上でどのように見つけるかということです。そのために、A *がどのように機能するかを考えるのに非常に役立つと思う視点は次のとおりです。

エッジにコストc(u、v)があるグラフでA *を実行することは、ヒューリスティック関数h(v)を使用して、エッジ(u、v)のコストがc(uであるグラフでダイクストラのアルゴリズムを実行することと同じです。 、v)+ h(v)-h(u)。

つまり、A *がダイクストラのアルゴリズムを実行しているかのように、各エッジのヒューリスティック値の変化を追加して各エッジのコストを調整していると考えることができます。

これが有用な理由は、有名なダイクストラのアルゴリズムが、グラフに負のエッジがある場合に間違った答えを返すためです。したがって、質問することができます-エッジコストをc(u、v)+ h(v)-h(u)に変更すると、負のコストになる可能性がありますか?言い換えれば、それを確実にするために何をしなければならないか

c(u、v)+ h(v)-h(u)≥0?

簡単に再配置すると、これが正確に発生する場合があります。

c(u, v) + h(v) ≥ h(u)

または、同等に、uf

h(u)≤c(u、v)+ h(v)。

そしてねえ!それが一貫したヒューリスティックの定義です。

これは、負のエッジの重みを使用するダイクストラのアルゴリズムで問題が発生するのとまったく同じように、一貫性のないヒューリスティックでA *を使用すると問題が発生する可能性があることを意味します。あなたは(ほとんどの場合)ゴールへのパス上のある中間ノードへの次善のパスを見つけ、そこから間違った答えを得る問題に出くわすでしょう。

A *が失敗する上記のグラフを作成し、ダイクストラの答えが間違っているこのグラフから始めて、エッジのコストをすべて正にするヒューリスティックをリバースエンジニアリングしました。

    A
+0 / \ -5
  /   \
 B --- C --- D
    -6    +6

ここで、ダイクストラのAからDへのパスは、コスト1のパスA-C-Dであり、コスト0のパスA-B-C-Dではありません。これは、上に例を示します。

13
templatetypedef