2


0

星印は、グラフ内の開始ノードと終了ノードの間の最短経路を見つけるために使用されます。 ターゲット状態が具体的に知られておらず、代わりにターゲット状態のための_criteria_があるだけだったものを解決するためにどのようなアルゴリズムが使用されますか?

例えば、数独パズルはAstarのようなアルゴリズムで解くことができますか? 私たちは最終国がどのようになるか(どの数字がどこにあるか)を知りませんが、勝利国の基準である数独の規則を知りません。 そのため、私は開始ノードと、終了ノードの基準を持っています。どのアルゴリズムを使うべきですか?

3 Answer


7


A *には、グラフ、そのグラフをたどるためのコスト関数、グラフ内のノードが他のノードよりも目標に近いかどうかに関するヒューリスティック、および目標に到達したかどうかのテストが必要です。

数独のソリューション空間を検索することは、実際には最小化するためのトラバーサルコストではなく、全体的なコスト(未解決の正方形の数)だけなので、すべてのトラバーサルは等しいコストになる1手の移動にコストがかかり、目標に近づくように移動するため、A *は次のステップをランダムに選択するよりも優れています。

各点で異なる技術を適用することの推定/測定コストに基づいてA *検索を適用することが可能であり得、それはそれから最小の計算コストで解空間を通る経路を見つけることを試みるだろう。 その場合、グラフは単にパズルの解決策の状態ではありませんが、その時点で適用する手法を選択することになります。移行のコストの見積もりはわかっていますが、その移行先はわかりませんただし、成功した場合は、目標に一歩近づきます。


3


はい、A *は特定の目標状態を特定できない場合に使用できます。 ( Peter Kirkham’s answerはこれを暗示していますが、あまり強調していません)

特定の目標状態を特定できない場合、部分的な解決策を完成するのに必要な残りのコストについて、有用な発見的方法の下限を考え出すことが難しい場合があります。 しかし、それは適用できないという意味ではありません。 コンピュータで解決できる問題は、幅優先探索に加えて、状態が以前に見られたことがあるかどうかを示す一連のフラグを使用して解決できます。これはA *と同じで、ヒューリスティックな下限は常に0です。 (もちろん、これは多くの問題を解決するための最も効率的なアルゴリズムではありません。)


1


あなたは正確な目標終了状態を知る必要はありません。 それがすべてヒューリスティック関数に帰着する、それが0を返すときあなたは(少なくとも)有効な最終状態の1つを発見したと仮定することができます。

そのため、a *の間は、current_node == target_nodeかどうかをチェックする代わりに、current_node.h()が0を返すかどうかをチェックしてください。 もしそうであれば、それは無限に接近しているべきでありそして/または目標/最終状態に重なるべきである。