1
私は8つのパズルのマンハッタン距離でAスターアルゴリズムを実装しています。 BからAへ行くような工程の数が同じになりませんBに行くから、いくつかのケースでパスの発見:AからBまでの距離がAからBまでではない
1 2 3
8 0 4
7 6 5
[ソリューションは、らせん状である]
私はそれがないので、これがあると思います同じコストを持っているので、同じノードを展開していないオープンリストで同じ状態を選択しないでください。両方がマンハッタン距離を使用して同じ値を持つ
7 6 4
1 0 8
2 3 5
(A -> B)
7 6 4
1 8 0
2 3 5
(B -> A)
7 6 4
1 3 8
2 0 5
から
。 すべてのパスを同じ値で調べる必要がありますか? または、ヒューリスティックに何らかのタイブレーカーを設定する必要がありますか?
はここに多くの時間、私は最終的に問題を発見し、何のために、 を私の「解決」機能の多くの異なる方法を再書き込みを無駄にした後、コード
def solve(self):
cost = 0
priority = 0
self.parents[str(self.start)] = (None, 0, 0)
open = p.pr() #priority queue
open.add(0, self.start, cost)
while open:
current = open.get()
if current == self.goal:
return self.print_solution(current)
parent = self.parents[str(current)]
cost = self.parents[str(current)][2] + 1
for new_state in self.get_next_states(current):
if str(new_state[0]) not in self.parents or cost < self.parents[str(new_state[0])][2]:
priority = self.f(new_state) + cost
open.add(priority, new_state[0], cost)
self.parents[str(new_state[0])] = (current, priority, cost)
を行うことを教えます だから、未踏の状態が...あった 2日:もし最後は「4場合とPOS> N」にするために使用します私はあなたの例では 'A - > B'と 'B - > A 'の意味を理解しています。あなたはあなたが表示する "From"ポジションへのゴールからの検索を実行していますか?他の図はどのようにこれらの検索に関連していますか?明らかにあなたのA *コードに間違ったことはありませんが、完全に自己完結型ではないので、微妙なバグがあるかどうかを実際には調べることはできません。ヒューリスティックの関係は、それがまだ許容されていれば問題ではありません(https://en.wikipedia.org/wiki/Admissible_heuristic)。複数のソリューションがある場合は、いずれかが見つかりますが、すべて同じ長さになります。 – Blckknght
@Blckknght、はい、そうです。ゴールから "から"の位置に私は示した。 マンハッタンの距離が許せば、結びつきを管理する方法を見つける必要はなく、私のコードに何か問題がありますか? コードを消去し、プロジェクトのgithubリンクを投稿します。 – Sequoya
私はマンハッタン距離の代わりにf = 0で試しましたが、現状== self.goalの場合は を取り除こうとしました。self.print_solution(現時点) をすべての解決策を得るために返します。 どちらも変更されません。 私はこの問題が、おそらくself.parentの質問に載っている機能にあると信じています。 完全なコードは次のとおりです。https://github.com/Sequoya42/automatic-waddle – Sequoya