「Javaに基づく遺伝的アルゴリズム」に関する注記(7/7):個人的な要約

遺伝的アルゴリズムを使用する理由

遺伝的アルゴリズムは、機械学習のサブセットです。実際には、遺伝的アルゴリズムは、単一の特定の問題を解決するために使用するのに最適なアルゴリズムではないことがよくあります。ほとんどの場合、問題に対してより優れた、より的を絞った解決策があります。では、なぜわざわざ?

遺伝的アルゴリズムは、さまざまな種類の問題に適用できる優れた多目的ツールです。これは、スイスアーミーナイフと適切なドライバーの違いです。300本のネジを締める作業の場合は、ジャンプしてドライバーを見つけます。しかし、数本のネジを締め、布を切り、革に穴を開け、アイスソーダのボトルを開けてハードワークに報いることが課題である場合は、スイスアーミーナイフの方が適しています。

また、遺伝的アルゴリズムは、機械学習全体を学習するための優れた入門書です。機械学習が氷山である場合、遺伝的アルゴリズムは最先端の一部です。遺伝的アルゴリズムは楽しく、刺激的で革新的です。遺伝的アルゴリズムのモデルは、自然の生物学的プロセスに基づいており、計算の世界と自然の世界の間の接続を確立します。最初の遺伝的アルゴリズムを作成し、カオスとランダム性から驚くべき結果が現れるのを見てください。

機械学習の氷山の頂点にある他の研究分野も同様に刺激的ですが、それらはより狭く、理解しにくい問題に焦点を当てる傾向があります。遺伝的アルゴリズムはそうではありません。遺伝的アルゴリズムは、理解しやすく、興味深い実装であり、すべての機械学習手法で使用される多くの概念を導入しています。

どの問題が遺伝的アルゴリズムによる解決に適しているか

以下は、遺伝的アルゴリズムの良い候補となる問題の特徴のリストです。

  • 問題が解決するコードを書くのに十分難しい場合;
  • この問題を解決する方法がわからない場合。
  • 問題が絶えず変化している場合。
  • 考えられるすべての解決策を検索することが不可能な場合。
  • 「十分に良い」解決策が受け入れられる場合。

遺伝的アルゴリズムの基本用語

遺伝的アルゴリズムは、生物学的進化の概念に基づいています。

  • 母集団:これは、突然変異や交差などの遺伝的操作を適用できる候補ソリューション(個人)のコレクションです。
  • 候補解(個人):特定の問題に対する可能な解決策。
  • 遺伝子:染色体を構成する不可分な構成要素。古典的な遺伝子には0または1が含まれています。
  • 染色体:染色体は一連の遺伝子です。染色体は、特定の候補解(個別)を定義します。典型的な染色体には、バイナリエンコーディングで「01101011」のようなものが含まれている可能性があります。
  • 突然変異:候補溶液の遺伝子がランダムに変更されて、新しい特性が作成されるプロセス。
  • クロスオーバー:染色体を組み合わせて新しい候補解を作成する方法。これは、再編成と呼ばれることもあります。
  • 選択:これは、次世代のソリューションを育てるための手法である、選択の候補ソリューションです。
  • 適合性:候補解が特定の問題にどの程度適しているかを測定するスコア。

一般的な遺伝的アルゴリズムプロセス

ここに画像の説明を挿入

  1. 遺伝的アルゴリズムが開始され、候補ソリューション(個人)の母集団が初期化されます。これは通常、検索スペース全体を均一にカバーするためにランダムです。関連するパラメータは母集団のサイズです。
  2. 次に、母集団内の各個人に適応度の値を割り当てることにより、母集団を評価します。この段階では、多くの場合、現在の最適なソリューションと母集団の平均的な適応度に注意を払う必要があります。
  3. 評価後、一連の終了条件に基づいて、アルゴリズムは検索を終了するかどうかを決定します。通常、これは、アルゴリズムが指定された世代数に達したか、適切な解決策を見つけたためです。
    1. 最終的に終了条件が満たされると、アルゴリズムはループから抜け出し、通常は最後の検索結果をユーザーに返します。
    2. 一般的な終了条件は次のとおりです。
      • 最大世代数に達する。
      • 割り当てられた時間を超えています。
      • 必要な条件を満たすソリューションを見つけます。
      • アルゴリズムは安定した段階に達しました。
  4. 終了条件が満たされない場合、母集団は選択フェーズを通過し、フィットネススコアに基づいて母集団から個人が選択されます。適応度が高いほど、個人を選択する可能性が高くなります。次のステップ「クロスオーバーとミューテーション」の準備をする目的を選択します。選択方法は次のとおりです。
    • ルーレット選択(フィットネス比例選択とも呼ばれます)。個人の適応度が高いほど、ルーレット盤で占めるスペースが多くなります。つまり、選択される可能性が高くなります。(第2章を参照)
    • トーナメントセレクション。トーナメントに参加するために、人口からランダムに何人かの個人を選択します。これらの個人の適応度の値を比較して競争し、次に親として最も適応度の高い個人を選択します。(第3章を参照)
  5. 次の段階では、選択した個人にクロスオーバーと突然変異を適用します。このフェーズでは、次世代の新しい個人が作成されます。それが母集団のエリート(母集団の中で最も適応度の高い少数の個人)である場合は、次の世代に直接スキップします。関連するパラメーターは、クロスオーバー率と突然変異率です。交叉と突然変異の後、あなたがまだ有効な解決策(資格のある個人)を得ていることを確認してください。
    1. クロスオーバー方法は次のとおりです。
      • 均一なクロスオーバー。子孫の各遺伝子は、最初の親またはその2番目の親のいずれかから来る可能性が50%あります。(第2章を参照)
      • シングルポイントクロス。ゲノム内の位置は、どの遺伝子がどの親に由来するかを決定するためにランダムに選択されます。クロスオーバー位置の前の遺伝情報は親1からのものであり、その後の遺伝情報は親2からのものです。(第3章を参照)
      • クロスを並べ替えます。このクロスオーバー法では、最初の親の染色体のサブセットが選択されます。次に、このサブセットが子孫染色体上の同じ場所に追加されます。次のステップは、2番目の親の遺伝情報を子孫の染色体に追加することです。通常、選択したサブセットの最後から開始し、親2の各遺伝子を含めます。ただし、その遺伝子が子孫の染色体にまだ存在していない場合に限ります。(第4章を参照)
  6. この時点で、新しい母集団は評価ステップ(ステップ2)に戻り、プロセスが最初からやり直されます。このサイクルの各ターンを世代と呼びます。

基本的な遺伝的アルゴリズムの擬似コード

generation = 0;
population[generation] = initializePopulation(populationSize);
evaluatePopulation(population[generation]);
while isTerminationConditionMet() == false do
    parents = selectParents(population[generation]);
    population[generation+1] = crossover(parents);
    population[generation+1] = mutate(population[generation+1]);
    evaluatePopulation(population[generation]);
    generation++;
End loop;

おすすめ

転載: blog.csdn.net/u011863024/article/details/120781958