0

質問を設定するために、例から始めましょう。

1000 個の配列 (別名、行ベクトル) のセットがすべて同じ長さであるとします。それぞれに -1 から 1 までの乱数が入ります。次に、これらの行ベクトルを 500 個ランダムに取り出して合計します。合計から始めて、元の 1000 からの選択をリバース エンジニアリングしたいと考えています。

これを遺伝的アルゴリズムで解決することにしました。1000 ビット長のビット文字列のファミリを開始し、変異 (別名、ランダム ビットの反転) とクロスオーバーの手順を実行します。10 分の 1 秒後、75% 正解です。それからさらに 1 時間後、76% 正解です。基本的に、数十ビットが正しく設定されるのを永遠に待っています。私の乱数ジェネレーターは、ソリューションにマージできる方法でそれらを導入しない可能性があります。

このアルゴリズムは、最初は非常にうまく機能しますが、ソリューションをさらに改善することはできません。私は、私の遺伝的ファミリーが可能なすべてのビット位置の1つを持っていることを確認しようとしました. それは役に立ちませんでした。アイテムがプールから消える速さを判断することはできません。

アルゴリズムには追加のコンポーネントが必要なようです。フリップ ビット (別名、ミューテーション) の位置の選択を駆動する何かがあるに違いありません。この作品の専門用語は何ですか? 勾配?それはどこから来たのですか?

4

4 に答える 4

0

したがって、基本的には s という数値があり、合計が s になる数値のサブセットを見つけたいとします。これは、ナップザック問題の特殊なケースである部分集合和問題として記述されます。

遺伝的アルゴリズムの適用に関するあなたの予想は間違っていると思います。1000 個のアイテムのセットから 500 個のアイテムを選択するために考慮しなければならない可能性のある解の数を視覚化するには、次の数 [「1000 が 500 を超える」の二項係数] を読んでください。

270288240945436569515614693625975275496152008446548287007392875106625428705522193898612483924502370165362606085021546104802209750050679917549894219699518475423665484263751733356162464079737887344364574161119497604571044985756287880514600994219426752366915856603136862602484428109296905863799821216320ソース)。

最初に明確にしましょう: 遺伝的アルゴリズムと関連する方法はメタヒューリスティックです。つまり、それらは最適解を見つけるのには適していませんが、非常に短時間で「良い」解を見つけることができます。NP 困難な問題で最適な解を見つけるには、最悪の場合に考えられるすべての組み合わせを試す必要があります。検索空間をインテリジェントに分割し、少数のソリューションのみを評価する正確な最適化の方法がありますが、それでも最適な答えを見つけるまでに数週間かかる場合があります。

この正確な最適値を見つける必要がある場合は、たとえばbranch と boundなどの正確な方法を探すことをお勧めします。たとえば、よく知られたCPLEXオプティマイザーを使用して、問題を整数プログラムとして記述することができます。たとえば、TSP の ILP 形式を見て、これをどのように達成できるかを確認し、それを問題に変換します。

正確な最適値を見つける必要がない場合は、遺伝的アルゴリズムで監視して出力を改善できることがいくつかあります。

  • 十分な大きさの母集団サイズを使用し、それに応じて選択圧力を調整します。遺伝的浮動の影響を回避したいが、それでも収束を達成したい.
  • 母集団の分散 (多様性) を監視します。減りが早い?母集団のすべての解が本質的に同じである場合、アルゴリズムは収束しています。収束したら、それを再開するか、新しい遺伝情報を導入して進化プロセスを復活させる必要があります。
  • 変異の強さを変化させます。検索の開始時に複数のビットを反転し、検索の最後に少数のビットのみを反転するように削減します。
  • 複数のクロスオーバー ポイントを使用します (シングル ポイント クロスオーバーを使用していると仮定します)。このような長いストリングの場合、10 個のクロスオーバー ポイントを使用することをお勧めします。
于 2013-06-26T09:12:32.637 に答える
0

これは非常に詳細なチュートリアルであり、トレーニング プロセスと関連する収束を理解するのに役立ちます。あなたはそれが勾配降下の一形態であることについて正しいです。

http://informatics.indiana.edu/larryy/al4ai/lectures/03.IntroToGAs.pdf

その文書は移動したため、現在は次の場所にあります。

http://shinyverse.org/al4ai/lectures/03.IntroToGAs.pdf

于 2013-06-25T13:02:23.460 に答える
0

遺伝的アルゴリズムは正確なアルゴリズムではなく、ヒューリスティックです。つまり、どれだけ努力しても、実際に最適なソリューションにたどり着くことができるのは、非常にまれなケースだけです。したがって、精度をある程度の速度と交換しています。これは、アルゴリズムが敗者であることを意味するのではなく、正確な解を必要としないが適切な近似解を必要としない問題用に設計されているということです。これは、最適なものを見つける以外に、アルゴリズムの終了条件が必要であることも意味します。これは、ソリューションを評価し、それがどれほど優れているかを示す関数が存在する必要があることを意味します。

精度をもう少し高めたい場合は、問題固有の知識を使用してヒューリスティックを適応させる必要があります。これは、問題について知っていることを使用して、(事前定義されたものを使用するのではなく) より良い突然変異を設計し、母集団の改良、選択アルゴリズムも改善することを意味します。繰り返しますが、これは最適なものが見つかることを保証するものではありません。

あなたの特定のケースでは、数分後に極大値に陥っていると思います。これは、ここから先は良くならないことを意味します。これは、アルゴリズムが最大値から外れるようにするために、いくつかのランダムな要素を母集団に注入することで解決できる場合があります。これは、意図的に悪いソリューションを選択することで解決できる場合もあります。

于 2013-06-25T13:03:20.233 に答える