Python:エイトクイーンの問題を解決するためのさまざまなアルゴリズム


1エイトクイーンズ問題

質問:8 x 8のチェス盤があります。次に、チェス盤に8つのクイーンを配置する必要があります。これで満足です。各クイーンについて、行、列、または2つの対角線に他のクイーンはありません。
ここに画像の説明を挿入します


2ソリューション

6つのブログ投稿、合計11のソリューション:

(1)ブルートフォースクラッキング;

(2)遺伝的アルゴリズム;

(3)山登り法/ランダムリスタート山登り法/サイドシフトを許可した山登り法;

(4)ランダムウォーク;

(5)DFS / BFS / UCS

(6)GBF / A *アルゴリズム


3パフォーマンスの比較

さまざまな方法が次のように評価されます。

(1)ブルートフォースクラッキングは92のソリューションすべてを検出し、メインプログラムの実行時間はそれほど長くなく、基本的に5秒以内です。

(2)遺伝的アルゴリズムのコードに満足していません。パフォーマンスが低下する主な理由は、ミューテーション操作が適切に選択されておらず、クロスオーバー操作が不十分であることが原因である可能性があります。

(3)山登り法/ランダムリスタート山登り法/横シフトコードを可能にする山登り法、山登り法はしばしば局所最適に陥り、解決策を見つけることができません;ランダム再山登り法はもっとラスカル、それが機能しない場合、それは再び開始されるので、それらのほとんどを見つけることができます解決策;横方向のシフトを可能にする山登り法は、8つの女王の問題を解決するための山登り法の成功の可能性を大幅に高めることができます。そして、ソリューションシーケンスは、基本的に実行するたびに取得できます。

(4)アルゴリズムが現在の列の任意の位置にクイーンをランダムに配置するため、ランダムウォークコードが失敗することがあります。配置されたクイーンの最初の数列にクイーンがない場合は、次の列の位置が選択されるため、Inプロセスは、[配置するのに適した場所がない]の状態に達する可能性があり、失敗として宣言する必要があります。プログラムを再実行することによってのみ再探索でき、取得するのにさらに数回の実行が必要になる場合があります。ソリューション。

(5)DFS / BFS / UCSコードの中で、DFSとUCSは、エイトクイーン問題の解決においてより高い効率とパフォーマンスを持ち、BFSは最悪です。

(6)GBF / A *アルゴリズムコードでは、GBFアルゴリズムと比較して、A *アルゴリズムコードの実行時間が短く、結局のところ、A *アルゴリズムは大域的最適化であり、より有用な情報を使用します。


4まとめ

ブルートフォースクラッキングとランダムウォークコードは完全に自己思考的であり、私はそれを誇りに思っています。遺伝的アルゴリズムコードのパフォーマンスには満足していませんが、コードを書く過程で多くのことを考えています。論理的に考えてみてください。; 6つのブログ投稿のコードは似ていますが、詳細が異なります。コメントの文言でも、慎重に検討しました。

エイトクイーンの問題を解決するために、さまざまなアルゴリズムを使って「クレイジーボンバード」を実行しました。私はたくさんのことを手に入れましたので、頑張ってください!


終わり

おすすめ

転載: blog.csdn.net/qq_40061206/article/details/112055813