状態グラフとして問題を定義:
G=(V,E)
V=S={(x_1,x_2,...,x_54) | all possible states the 3d board can be in}
を[各数値は、3D基板上の単一の「正方形」を表しています]。あなたはまたadmissible heuristic function、することができ、この問題のためのかなり良いものが必要になりますsuccessors(v)={all possible boards you can get, with 1 step from v}
:Vの各Vが
:
とE={(v1,v2)| it is possible to move from state v1 to state v2 with a single step}
にE
のための別の定義[同じ]を定義するには、機能successors(v)
を使用することです: h(state)=Sigma(manhattan_distance(x_i)) where i in range [1,54])
は基本的には、ターゲットからの各数値に対してmanhattan distancesの合計です。私たちは、このデータを得た後、
今、私たちは、定義されたヒューリスティックで、定義されたグラフG上で*の実行を開始することができます。そして、我々のヒューリスティック関数は許容可能であるので[理由をあなた自身に納得させる]、admissibility and optimality of A*のために、A *の解が最適であることが保証される。
実際のパスを見つける:ターゲット状態を作成するとA *が終了します。 [先に使用した意味でx_i=i
]。各ノードのparent
フィールドを使用して、ターゲットからソースにステップバックすることで、そのパスを見つけることができます。
A *アルゴリズムは、経路探索アルゴリズムです。ユーザーやプログラムがパズルを解決しようとしているかどうかを明確にすることはできますか?それがユーザーなら、A *の使い方はわかりません。しかし、それがプログラムならば、おそらくあなたはその空間を、周りを移動する物体として考えることができ、経路探索が必要です。 – AlbeyAmakiir
プログラムは問題を解決し、すべてのステップ、ボックスのすべての動きをコンソールに書き込む必要があります。もっと明瞭に説明できますか?ありがとう。 – Jemo