2つのヒューリスティックを使用して24パズル(5x5グリッド)を解決するプログラムを書いています。1つ目は、間違った場所のブロック数を使用し、2つ目は、ブロックの現在の場所と目的の場所の間のマンハッタン距離を使用します。
プログラムには、A *と欲張り検索を使用して各ヒューリスティックを使用し、結果を比較するさまざまな機能があります(合計で4つの異なる部分)。
私のプログラムが間違っているのか、それともパズルの限界なのか知りたいです。パズルはランダムに生成され、ピースが数回動かされ、ほとんどの場合(〜70%)、ほとんどの検索で解決策が見つかりますが、失敗することもあります。
欲張りが完全ではないので失敗する理由は理解できますが、A *が完全であると見ると、コードにエラーがあると思います。
それで、誰かがこれが私の思考の誤りなのか、それともパズルの限界なのか教えてもらえますか?言い回しが悪い場合は申し訳ありませんが、必要に応じて言い換えます。
ありがとう
編集:
ですから、私はそれが私が間違っていることだとかなり確信しています。これが私が検索を行っている方法の段階的なリストです、ここで何か問題がありますか?
- 使用されているヒューリスティックでソートされた、フリンジの新しいリストを作成します
- 訪問したノードを保存するセットを作成する
- パズルの初期状態をフリンジに追加します
- フリンジが空ではない間。
- フリンジから最初の要素をポップします
- 以前にノードにアクセスしたことがある場合は、スキップしてください
- ノードが目標の場合は、それを返します
- 訪問したセットにノードを追加します
- ノードを展開し、すべての子孫をフリンジに追加します