web-dev-qa-db-ja.com

5x5スライディングパズルの高速で低移動のソリューション

私は、24ピースのスライディングパズルを適切な時間と動きでプログラム的に解決する方法を見つけようとしています。これが私が説明しているパズルの解決された状態の例です:

5x5 Solved Sliding Puzzle

IDA *アルゴリズムが15パズル(4x4グリッド)でこれを達成するためにかなりうまく機能することはすでにわかっています。 IDA *アルゴリズムは、非常に妥当な時間内に4x4スライディングパズルの最小移動数を見つけることができます。私は this コードの適応を実行して4x4スライディングパズルをテストし、PyPyを使用することで実行時間を大幅に短縮することができました。残念ながら、このコードを5x5のスライドパズルに適合させると、実行速度がひどく遅くなります。私はそれを1時間以上実行し、最終的にそれが終了するのを見ることをあきらめましたが、4x4グリッドでは数秒しか実行しませんでした。これは、グリッドの増加に伴い、検索する必要のあるノードの数が指数関数的に増加するためです。ただし、私は5x5スライドパズルの最適なソリューションを探すのではなく、最適に近いソリューションのみを見つけます。たとえば、特定のパズルの最適な解が120ムーブだった場合、150ムーブ未満で数分で見つかるすべての解に満足します。

これを達成する可能性のある特定のアルゴリズムはありますか?

3
Bob Smith

トリックを実行する可能性のある2文字の変更は、ヒューリスティックを2(または他の定数)倍することです。それはもはや許容されませんが、見つかったソリューションは2倍の最適範囲内になります。このトリックは Weighted A */Static Weighting と呼ばれます。

1
David Eisenstat