TSP を解決する GA アルゴリズムを構築しました。
Norvig の本 (AIAMA) の練習問題です。彼は、表現などの問題に関するララニャガの見解を読むことを提案しました。そこでいくつかのクロスオーバー演算子とミューテーションを学び、それらのいくつかを試して、どちらが自分に適しているかを確認しました. また、各パスのコストに基づいてフィットネス関数を詳しく説明しました。
アルゴリズムの設計について疑問があるにもかかわらず、これまで AI を扱ったことがなかったので、私のアプローチが GA に有効かどうかはわかりません。
これが私がしたことです:
パスのベクトルを取得しました (初期母集団)
次に、各ループで、コストの順序を上げてこのベクトルを編成し、このベクトルで最適な X パスを取得して、他のパスを削除しました。
次に、XOver と Mutation を (一定の割合で) 適用し、それらをベクターの古い削除済みの値の位置に配置します。
次に、同じことを行います(順序ベクトル - 最良の抽出など)
そして安定するまで続けます。
それは良いアプローチですか?そうでない場合は、北をください。最良のものを選択してそれらを保持しなかった場合 (Xover と突然変異を介してそれらからまったく新しいポップを作成しただけ)、良い結果が得られませんでした。このようにして(最良のものを維持する - いくつかの実験では最良のものだけを維持した)、より良い結果が得られ、結果は常に収束し、非常に高速になります
州の表現 : 州の表現について、私はパス表現を使用することにしました (私はすでに最初からそれを使用していましたが、ララニャガなどをすべて読んだ後、それを使い続けることにしました)、それは次のとおりです: たとえば、5 つの都市と最初の都市を訪れ、次に 2 番目、3 番目の都市を訪れます ... パスの表現は (1, 2, 3, 4, 5) になります
初期人口生成:実際には、私は都市を表すためにランダムポイントを生成しています(これは、本が私に求めたものであり、閉じた正方形でランダムポイントを生成します)-しかし、比較のために、人口を生成し、比較するときにそれに固執します結果 - 特定の母集団に固執しなければ、自分の改善について知ることはあまりないと思います
最適な個人: 最適な個人とは、移動コストが最も低い個人です。(この問題では、別のものをパラメーターとして使用する必要があるかどうかはわかりません
crossover : 私はいくつかの crossover 演算子を試し、自分の結果を本に示されているものと比較し、最終的に Order CrossOvers (Larrañaga et al(1999) ) の 1 つを使用しました:親パスを作成し、残りのパス (そのサブパス内でまだ訪れていない都市) を他の親からコピーします (位置 '0' ではなく、2 番目のカットから開始) - 他の親パスに表示される都市を追加します親。
例: パス (1 2 3 4 5) (3 4 2 1 5) 子 (5 |2 3 4| 1) (5 |4 2 1| 3) <- | の内側の部分 | | 一方の親から来て、もう一方の親からの他の部分
突然変異 : 突然変異には、IVM (Inversion Mutation) アプローチを選択しました。元のパスからサブパスを取得し、ランダムなポイントに挿入 (反転) します。
例: パス (1 2 3 4 5) サブパス (2 3 4 ) および 5 の後にランダムに挿入
生成: ( 1 5 | 4 3 2 )