MATLABの遺伝的アルゴリズム

遺伝的アルゴリズムの本質


このトピックは、 MATLABの遺伝的アルゴリズムを使用して最適化問題を解決することに専念しています。 大量のデータを事前におaび申し上げます。トピックを作成する際の主なタスクは、MATLABで構成されている各遺伝的アルゴリズム設定を詳細に開示することでした。

遺伝的アルゴリズムは、自然selectionと進化の生物学的原理に基づいて最適化問題を解決する方法です。 遺伝的アルゴリズムは、母集団(個々のソリューションのセット)を変更する手順を特定の回数繰り返し、それにより新しいソリューションのセット(新しい母集団)を達成します。 さらに、各ステップで、母集団から「親の個人」、つまり、共同修正(交配)が次世代の新しい個人の形成につながるソリューションから選択されます。 遺伝的アルゴリズムは、3つのタイプのルールを使用します。これらのルールに基づいて、選択、交差、および突然変異のルールという新しい世代が形成されます。 突然変異は、新しい世代に変更を加えることにより、最適化された関数の極小に陥ることを回避することを可能にします。

(カットの下、主要部分+いくつかのスクリーンショット)。


MATLABで遺伝的アルゴリズムを使用するメカニズムは、2つの方法で実装されます。

1.遺伝的アルゴリズムの機能を呼び出す
2.遺伝的アルゴリズムツールの使用

両方のメソッドは、関数とMATLABモジュールの標準セットの一部として提供されます。 私の意見では、MATLABで遺伝的アルゴリズムを使用する2番目の方法は、遺伝的アルゴリズムツールモジュールの使用に関連しており、はるかに便利で視覚的です。 詳細に検討します。

GENETIC ALGORITHM TOOLを使用する


遺伝的アルゴリズムツールを実行するには、MATLABコマンドラインでgatoolコマンドを実行します。 その後、遺伝的アルゴリズムのパッケージが起動し、メインユーティリティウィンドウが画面に表示されます。

ガツールメニュウンドウ

Fitness関数フィールドでは、最適化された関数は@fitnessfunの形式で示されます。ここで、fitnessfun.mは、最適化された関数を最初に記述するMファイルの名前です。 念のため、Mファイルは、メニューの[ファイル]-> [新規作成]-> [Mファイル]を使用して、MATLAB環境で作成されることに注意してください。 Mファイル内の関数my_funの説明の例:

関数z = my_fun(x)
z = x(1)^ 2-2 * x(1)* x(2)+ 6 * x(1)+ x(2)^ 2-6 * x(2);

GAToolユーティリティのメインウィンドウに戻ります。 [変数の数]フィールドは、最適化される関数の入力ベクトルの長さを示します。 上記の例では、関数my_funの長さ2の入力ベクトルがあります。
[制約]パネルでは、制約または境界非線形関数を指定できます。 [線形不等式]フィールドでは、次の形式の不等式によって線形制限が設定されます。

A * x≤b。

このパネルの線形等式フィールドでは、等式により線形制約が設定されます。

A * x = b。

どちらの場合も、Aは何らかの行列、bはベクトルです。

ベクトル形式の[境界]フィールドでは、変数の下限と上限が設定され、[非線形制約関数]フィールドでは、任意の非線形制約関数を指定できます。

特定のタスクで制約を設定する必要がない場合は、[制約]パネルのすべてのフィールドを空白のままにする必要があります。

以下はチャート設定パネルです。 遺伝的アルゴリズムの動作に関する情報を表示するさまざまなグラフを表示できます。 この情報に基づいて、効率を高めるためにアルゴリズム設定を変更できます。 たとえば、このパネルで[ベストフィットネス]オプションを選択すると、アルゴリズムの各世代に最適化された関数の最適な平均値を1つのチャートに表示できます。 このパネルについては、GAToolユーティリティの[オプション]タブの他のパネルとともに以下で詳しく説明します。

Run Solverパネルには、制御要素(遺伝的アルゴリズムを開始、一時的および完全に停止するための[開始]、[一時停止]、および[停止]ボタン)が含まれています。 また、実行中の遺伝的アルゴリズムの現在の結果を表示するステータスおよび結果フィールド、およびアルゴリズムの終点の値-最適化された関数の最適な値(つまり、望ましい値)を表示する最終ポイントも含まれます。

[オプション]パネルは、GAToolユーティリティのメインウィンドウの右側にあります。 これにより、遺伝的アルゴリズムの動作に関するさまざまな設定を行うことができます。 [オプション]パネルの各調整可能パラメーターの名前の反対側にある[+]ボタンをクリックすると、遺伝的アルゴリズムの対応するパラメーターを入力および変更するためのフィールドを含むドロップダウンリスト(タブ)が表示されます。

画像

GAToolの主な構成可能なオプションは次のとおりです。
-人口([人口]タブ);
-スケーリング(Fitness Scalingタブ);
-選択演算子([選択]タブ);
-再生演算子([再生]タブ);
-突然変異演算子([突然変異]タブ);
-オペレータの交差(クロスオーバータブ);
-集団間での個人の移動([移行]タブ);
-特別なアルゴリズムパラメーター([アルゴリズム設定]タブ);
-タスクハイブリッド関数(ハイブリッド関数タブ);
-アルゴリズムを停止するための基準を設定する(タブ停止基準)。
-遺伝的アルゴリズムの動作中のさまざまな追加情報の出力([プロット関数]タブ)。
-新しい関数の形式でのアルゴリズムの結果の出力(タブ出力関数);
-コマンドウィンドウ([コマンドウィンドウ]タブに表示)に出力する情報のセットを指定します。
-最適化および制限機能の値を計算する方法(ユーザー機能評価タブ)。

[オプション]パネルの上記のすべてのタブとそれらに含まれる要素について、さらに詳しく考えてみましょう。

母集団の設定タブでは、すべての母集団の個体が属する数学オブジェクトのタイプ(二重ベクトル、ビット文字列、またはユーザータイプ)を選択できます。 ビット文字列とユーザータイプを使用すると、個人を作成、変更、および横断するための有効な演算子のリストに制限が課されることに注意してください。 そのため、たとえば、表現としてクロスオーバー演算子のビット文字列を選択する場合、ハイブリッド関数または非線形境界関数を使用できません。
また、(母集団)タブでは、母集団のサイズ(各世代で構成される個人の数)と初期世代の作成方法(均一-制限が課されていない場合、そうでない場合-実行可能な母集団)を調整できます。 さらに、検討中のタブでは、初期世代(初期集団項目を使用)またはその一部、個人の初期評価(初期スコア項目)を手動で設定し、初期集団の個人が属する制限数値範囲(初期範囲)を入力することもできます。

[フィットネススケーリング]タブでは、ユーザーは、最適化される関数によって達成される値を、選択演算子で許可されている制限内の値に変換するスケーリング関数を指定することができます。 スケーリング関数として[ランク]を選択すると、スケーリングは評価に引き下げられます。つまり、個人には評価番号が割り当てられます(最高の個人、1、次、2など)。 比例スケーリング(Proportional)は、個人の特定の数系列に比例して確率を設定します。 Topオプションを選択すると、最高の評価値が最も優れた複数の個人に一度に割り当てられます(その数はパラメーターとして示されます)。 最後に、Shift linearのシフトタイプを選択する場合、最高の個人の最大確率を指定できます。

[選択]タブでは、ズーム機能からのデータに基づいて親選択演算子を選択できます。 次のオプションは、選択可能なオペレータオプションとして使用できます。

-トーナメント-指定された数の個人がランダムに選択され、その中で最高のものが競争ベースで選択されます。
-ルーレット-ルーレットがシミュレートされ、各セグメントのサイズがその確率に従って設定されます。
-均一-与えられた分布に従って、両親の数とその確率を考慮して、両親がランダムに選択されます。
-確率的ユニフォーム-各親に特定のサイズの部分が割り当てられたラインが構築され(親の確率に応じて)、アルゴリズムは同じ長さのステップでラインのスウェットを実行し、ステップがヒットしたラインの部分に応じて親を選択します。

[再現]タブでは、新しい個人の作成方法を指定します。 エリートカウントアイテムを使用すると、次世代への移行が保証されている個人の数を指定できます。 クロスオーバー率は、クロスによって作成された個人の割合を示します。 残りは突然変異によって作成されます。

突然変異演算子タブで、突然変異演算子のタイプが選択されます。 次のオプションが利用可能です。

-ガウス-小さな乱数(ガウス分布による)を各ベクトルのすべてのコンポーネントに追加します。
-均一-ベクトルのコンポーネントがランダムに選択され、許容範囲内の乱数がその場所に書き込まれます。
-適応可能-最新の最も成功した世代と失敗した世代に応じて一連の方向を生成し、制限が課せられると、すべての方向に沿って異なる長さに移動します。
-カスタム-独自の機能を設定できます。

[クロスオーバー]タブでは、クロスオーバー演算子のタイプ(単点、2点、ヒューリスティック、算術、または分散(親の対応のランダムなバイナリベクトルが生成される)を選択できます。 任意の(カスタム)クロスオーバー機能を設定することもできます。

[移行]タブでは、同じ母集団内のサブ母集団間を移動する個人に応じてルールを構成できます。 自然値ではなくベクトルが母集団サイズとして指定されている場合、部分母集団が作成されます。 このタブでは、移行の方向(前方-次のサブポピュレーション、両方-前および次へ)、渡り鳥の割合、および移行の頻度(移行間で通過する世代数)を指定できます。 部分母集団が不要な場合、このタブは常に変更しないでください。

アルゴリズムの特別なオプションのタブでは、アルゴリズムに課せられた非線形制約のシステムのソリューションのパラメーターを構成できます。 初期ペナルティパラメータの値は、アルゴリズムの批評の初期数値を決定します。ペナルティ係数は、開発者が最適化の精度に満足していない場合、または制限タブで定義された境界を超える場合に、この値の乗数として使用されます。 原則として、これらのオプションは高度に複雑なタスクを解決するために詳細に構成されます。

[ハイブリッド関数]タブでは、アルゴリズムの終了後に使用される別の最小化関数を設定できます。 次の組み込みMATLAB関数は、可能なハイブリッド関数として利用できます。
-なし(ハイブリッド機能を使用しない);
-fminsearch(値の最小値を検索);
-patternsearch(パターンによる検索);
-fminunc(無制限のアルゴリズム用);
-fmincon(特定の制限があるアルゴリズムの場合)。

[停止条件]タブは、アルゴリズムが停止する状況を示します。 同時に、次のパラメーターを構成できます。

-世代-停止が発生するまでの最大世代数。
-制限時間-アルゴリズムの制限時間。
-フィットネス制限-最適化された値がこの制限以下の場合、アルゴリズムは停止します。
-ストール世代-アルゴリズムが停止するまでのわずかに異なる世代の数。
-ストール時間制限-前のパラメーターと同じですが、アルゴリズムの実行時間に適用されます。
-関数の許容値と非線形制約の許容値-アルゴリズムが引き続き機能する最適化関数と制限関数の変更の最小値。

特に興味深いのは、[プロット関数]タブです。このタブでは、アルゴリズムの操作中に表示されるさまざまな情報を選択でき、その操作の正確性とアルゴリズムによって達成された特定の結果の両方が表示されます。 表示パラメータに使用される最も重要なものは次のとおりです。

-プロット間隔-スケジュールの次の更新が行われるまでの世代数。
-最高の適合性-各世代の最適化された関数の最高値の出力。
-最高の個人-各世代で最高の最適化結果を持つ世代の最高の代表者の結論。
-距離-世代の個々の値の間隔を表示します。
-期待-一連の確率と対応する世代の個人を導きます。
-系譜-個人の家系図の結論;
-範囲-各世代の最適化された関数の最小値、最大値、平均値の出力。
-スコアの多様性-各世代の評価のヒストグラムを表示します。
-スコア-世代の各個人の出力評価。
-選択-親のヒストグラムを表示します。
-停止-停止の基準に影響するすべてのパラメーターのステータスに関する情報を表示します。
-カスタム-ユーザー指定の機能のチャートに表示します。

結果を新しい関数(出力関数)の形式で出力するためのタブを使用すると、指定された生成間隔(それ​​ぞれ新しいウィンドウへの履歴フラグと間隔フィールド)で個別のウィンドウにアルゴリズムの履歴を出力できます。また、カスタムフィールドで指定された任意の出力関数を指定して表示することもできます機能。

[ユーザー関数の評価]タブには、最適化関数と制限関数の値が計算される順序が(個別に、1回の呼び出しで並列に、または同時に)記述されます。

最後に、[コマンドウィンドウに表示]タブでは、アルゴリズムの実行時にメインのMATLABコマンドウィンドウに表示される情報を構成できます。 次の値が可能です:オフ-コマンドウィンドウへの出力なし、反復-実行中のアルゴリズムの各反復に関する情報、診断-可能性のあるエラーおよびアルゴリズムの変更されたキーパラメーターに関する各反復および追加情報に関する情報、最終-停止および最終値の理由のみが表示されます。

PS。このトピックを書くとき、著者は彼の個人的な経験とHelp'om環境MATLABを使用しました。 さらなる記事では、古典的な(線形関数の最適化、セールスマンのタスクの射撃と移動)、およびいくつかの具体的な例の両方を使用して、上記のガツールメカニズムを明らかにします。

PPS最後まで読んでくれた人たちに注目してくれてありがとう。

Source: https://habr.com/ru/post/J111417/


All Articles