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

1.はじめに

遺伝的アルゴリズム(遺伝的アルゴリズム)は、「最も適切な生存」と「最も適切な生存」の原則に従います。これは、生物界の自然な選択と自然な遺伝的メカニズムを利用する一種のランダム検索アルゴリズムです。

遺伝子アルゴリズムは、人工集団の進化過程をシミュレートします。選択、クロスオーバー、突然変異のメカニズムを通じて、候補者のセットが各反復で保持され、このプロセスが繰り返されます。集団が数世代にわたって進化した後、理想的な状況下では、その適合性は***ほぼ最適な***の状態に達します。

遺伝子アルゴリズムが提案されて以来、特に機能最適化、生産スケジューリング、パターン認識、ニューラルネットワーク、適応制御などの分野で広く使用されており、遺伝子アルゴリズムは非常に重要な役割を果たし、いくつかの問題の解決を改善してきました。効果。


2.遺伝子アルゴリズムの構成

  • コード->染色体の作成
  • 個人->人口
  • フィットネス機能
  • 遺伝子演算子
    • 選択する
    • クロス
    • 突然変異
  • 動作パラメータ
    • エリートオペレーションを選択するかどうか
    • 人口規模
    • 染色体の長さ
    • 最大反復回数
    • クロスオーバー確率
    • 突然変異確率


2.1エンコードとデコード

遺伝子アルゴリズムを実装する最初のステップは、問題を解決するためのエンコードとデコードの方法を明確にすることです。

機能最適化の問題については、一般に2つのエンコード方法があり、それぞれに長所と短所があります。

  • 実数コーディング:実数を直接使用して遺伝子を表現します。これは理解しやすく、デコードプロセスを必要としませんが、時期尚早に収束して局所的な最適性に陥りやすいです。
  • バイナリエンコーディング:安定性が高く、人口の多様性が大きいが、大きなストレージスペースが必要であり、デコードする必要があり、理解するのが難しい


最大関数の問題を解決するために、バイナリエンコーディングを選択しました。
例として、目的関数f(x)= x + 10sin(5x)+ 7cos(4x)、x∈[0,9]取り上げます。

解の精度を小数点以下4桁に設定すると、xの解空間を(9-0)×(1e + 4)= 90000等分することができます。

2 ^ 16 <90000 <2 ^ 17、これらのソリューションを表すには17ビットのバイナリ番号が必要です。つまり、ソリューションコードは17ビットのバイナリ文字列です。

最初は、これらのバイナリ文字列はランダムに生成されます。

そのようなバイナリ文字列の1つは、染色体文字列を表し、染色体文字列の長さは17です。

そのような染色体の場合、間隔[0,9]の値に復元(デコード)する方法は?

この問題の場合、次の式を使用してデコードできます。

x = 0 + decimal(chromosome)×(9-0)/(2^17-1)

decimal():2進数を10進数に変換します。

一般的なデコード式:

f(x), x∈[lower_bound, upper_bound]
x = lower_bound + decimal(chromosome)×(upper_bound-lower_bound)/(2^chromosome_size-1)

lower_bound:関数ドメインの
下限upper_bound:関数ドメインの上限
chromosome_size:染色体の長さ

上記の式により、[0,9]の間隔でバイナリ染色体文字列を10進実数解に正常にデコードできます。

2.2個人および集団

「染色体」は特定の特性を表し、この特性のキャリアは「個人」と呼ばれます。

この実験で解くべき単関数の最大値を解く問題については、前節で構築した染色体で個体を表すことができ、個体には1つの染色体があります。

そのような個人の多くは集団を形成します。これは、1次元のポイントセット(x軸上のラインセグメント[0、9])を意味します。

2.3フィットネス関数

遺伝的アルゴリズムでは、個人(ソリューション)の品質はフィットネス関数の値によって評価されます。この問題では、f(x)がフィットネス関数です。

フィットネス関数の値が大きいほど、ソリューションの品質が高くなります。

フィットネス関数は、遺伝子アルゴリズムの進化の原動力であり、自然な選択の唯一の基準です。その設計は、問題自体の要件と組み合わせる必要があります。

2.4遺伝的演算子

私たちはそのような集団を望んでいます、それに含まれる個人に対応する関数値は[0,9]のf(x)の最大値に非常に近いですが、この集団は最初はそれほど良くないかもしれません。個々の染色体ストリングがランダムに生成されるためです。

人口を優れたものにする方法は?

継続的な進化。

それぞれの進化において、私たちは集団内の優秀な個人を可能な限り維持し、望ましくない個人を取り除き、優秀な個人間で染色体のクロスオーバーを実行しようとします。一部の個人は変異することもあります。

人口が進化するたびに、最適な個人が生み出されます。集団のすべての世代の最適な個人は、関数f(x)の最大値に対応するドメイン内のポイントである可能性があります。

人口が際限なく進化する場合、最良の解決策を常に見つけることができます。しかし実際には、時間は限られており、通常、見栄えの良いソリューションが得られたら進化を停止します。

与えられた人口に対して、どのようにそれ進化する能力を与えるのですか?

  • 最初の選択(選択)
    • 選択操作は、前世代の人口から優良個体のほとんどのペアを選択することです。優良個体のペアは親のペアと呼ばれ、親は次世代の個体数に達するまで遺伝子を次世代に渡すことができます。人口の上限
    • 選択操作の前に、小から大への適性に応じて集団内の個人を配置します
    • ルーレット選択方法(もちろん他にも多くの選択方法があります)を使用すると、各個人が選択される確率は、そのフィットネス関数の値に比例します。
    • ルーレットの選択方法はランダムであり、選択プロセスでより良い個人が失われる可能性があるため、エリートメカニズムを使用して前世代の最高の個人を直接選択できます
  • フォローされたCROSS(クロスオーバー)
    • 交差する2つの異なる染色体(親)は、cross_rateに従って特定の方法で遺伝子の一部を交換します
    • シングルポイントクロスオーバー方式を使用し、他のクロスオーバー方式も使用できます
  • 最後にバリエーション(変異)
    • 染色体は、突然変異の確率(mutate_rate)に従って突然変異します
    • 一点突然変異法を使用し、他の突然変異法も使用できます


一般的に、クロスレート(cross_rate)は比較的大きく、ミューテーションレート(mutate_rate)は非常に低くなります。関数の最大値を解くなどの問題については、クロスレート(cross_rate)を0.6に設定し、ミューテーションレート(mutate_rate)を0.01に設定します。

遺伝的アルゴリズムは、2つの優れた親染色体のクロスオーバーが優れた子孫を生み出す可能性が高く、変異した場合に優れた子孫を生み出す可能性は非常に低いと考えているためですが、非常に優れた子孫を一度に変異させる可能性もあります。これは、自然界の生物学的進化の特徴とも一致しています。


3.遺伝的アルゴリズムプロセス私
はmatlabの下でテストプログラム書きました。
コードを添付https://github.com/yanshengjia/artificial-intelligence/tree/master/genetic-algorithm-for-functional-maximum-problem

テスト結果

  • 最高の個人:00011111011111011
  • 最適なフィットネス:24.8554
  • 最適な個体は、独立変数値7.8569に対応します。
  • 最適な結果を達成するために必要な反復回数:多くの実験の結果、収束を達成するための反復回数は20から100を超えるまで変化することがわかりました。


反復回数と平均適合度の関係(横軸:反復回数、縦軸:平均適合度)


。Matlabなどの遺伝子アルゴリズムを直接使用できる既製のツールがあります。
最後に、Matlabで遺伝子アルゴリズムを使用する方法を紹介します。

MATLABでGAを使用する

1.最適化ツールを開き、Solverでga-geneticアルゴリズムを選択し、Fitness関数に

@targetを入力します。2。プロジェクトフォルダーに新しいtarget.mを作成し、MATLABの現在のパスがあなたのものであることに注意してください。プロジェクトフォルダのパス

3.たとえば、target.mにフィットネス関数を書き留めます

function [ y ] = target(x)
y = -x-10*sin(5*x)-7*cos(4*x);
end

* MATLABのGAは、関数の(おおよその)最小値のみを解決するため、最初に目的関数を逆にする必要があります

4.最適化ツールを開き、変数の数と独立変数ドメインの値(境界)を入力し、[開始]をクリックすると、遺伝的アルゴリズムが実行されます。最後に、出力ボックスに関数の(おおよその)最小値、この程度までの反復回数(現在の反復)、および最終的な独立変数の値(最終点)を確認でき

ます。5。Optimization-gaツールには多くのオプションがあります。 。これらのオプションを使用して、次のプロパティを設定できます

  • 人口(人口)
  • 選択
  • クロスオーバー(クロスオーバー)
  • 突然変異
  • 停止基準
  • プロット関数

おすすめ

転載: blog.csdn.net/qq_41371349/article/details/105157871