メインコンテンツ

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

ラストリギンの機能を最小限に抑える

ラストリギンの機能

この例では、遺伝的アルゴリズムのテストによく使用される関数である Rastrigin 関数の最小値を見つける方法を示します。この例では、ライブ エディターの最適化タスクを使用する方法とコマンド ラインで作業する方法という 2 つの最小化方法を示します。

2つの独立変数に対して、ラストリギン関数は次のように定義される。

Ras(x)=20+x12+x22-10(cos2πx1+cos2πx2).

この例を実行すると、Rastrigin 関数の値を計算する rastriginsfcn.m ファイルが利用できます。Rastrigin 関数の表面プロットを作成します。

fsurf(@(x,y)reshape(rastriginsfcn([x(:),y(:)]),size(x)),...
    "MeshDensity",100,...
    "ShowContours","on",...
    "LineStyle",":")

Figure contains an axes object. The axes object contains an object of type functionsurface.

グラフが示すように、Rastrigin 関数には多くの極小値、つまりグラフ内の「谷」があります。ただし、関数には大域的最小値が 1 つだけあり、これは x-y 平面の点 [0 0] で発生し、関数の値は 0 になります。[0 0]以外の任意の局所v最小値では、Rastrigin関数の値は0より大きくなります。局所的最小値が原点から遠いほど、その点における関数の値は大きくなります。

Rastrigin 関数は、多くの局所的最小値が存在するため、標準的な勾配ベースの方法では大域的最小値を見つけることが困難になるため、遺伝的アルゴリズムのテストによく使用されます。

ライブエディターの最適化タスクを使用して最小化する

このセクションでは、遺伝的アルゴリズムを使用して Rastrigin 関数の最小値を見つける方法について説明します。

メモ: 遺伝的アルゴリズムは乱数ジェネレータを使用するため、実行するたびに異なる結果が返されます。

  • [ホーム] タブの [ファイル] セクションで [新規ライブ スクリプト] ボタンをクリックして、新しいライブ スクリプトを作成します。

new_live_script.png

  • Optimize ライブ エディター タスクを挿入します。[挿入] タブをクリックしてから、[コード] セクションで、[タスク]、[最適化] を選択します。

optimizelet_insert.png

optimizelet_choose.png

  • [ソルバーベース] ボタンをクリックします。

optimizelet_initial.png

  • 問題データの入力に使用するには、[挿入] タブの [セクション区切り] ボタンをクリックして新しいセクションを挿入します。新しいセクションがタスクの上と下に表示されます。

  • タスクの上の新しいセクションで、次のコードを入力して変数の数と目的関数を定義します。

rng default % For reproducibility
nvar = 2;
fun = @rastriginsfcn;
  • これらの変数をワークスペースに配置するには、Ctrl+Enter を押してセクションを実行します。

  • タスクの 問題の種類の指定 セクションで、 目的 > 非線形 ボタンをクリックします。

  • ソルバー > ga - 遺伝的アルゴリズムを選択します。

  • タスクの 問題データの選択 セクションで、 [目的関数] > [関数 ハンドル] を選択し、fun を選択します。

  • [変数の数] > [nvar] を選択します。

optimizelet_ga_rastriginsfcn.png

  • タスクの 進行状況の表示 セクションで、 最良の適応度 プロットを選択します。

  • ソルバーを実行するには、タスク ウィンドウの右上にあるオプション ボタン [⁝] をクリックして、[セクションの実行] を選択します。別の Figure ウィンドウとタスク出力領域にプロットが表示されます。ga は確率的アルゴリズムであるため、プロットは示されているものと異なる場合があることに注意してください。

rastriginsplot.png

  • プロットの下部の点は最良の適応度値を示し、その上の点は各世代の適応度値の平均を示します。プロットの上部には、現在の世代における最良値と平均値が数値的に表示されます。

  • 解と適応度関数の値を確認するには、タスクの上部を確認します。

optimizelet_ga_output.png

  • これらの変数の値を表示するには、タスクの下のセクションに次のコードを入力します。

disp(solution)
disp(objectiveValue)

表示される値は、Rastrigin 関数の実際の最小値 (0) にあまり近くありません。トピック 初期範囲の設定突然変異と交叉を変化させる、および 最大世代数の設定と世代停止 では、実際の最小値に近い結果を達成する方法について説明します。または、ソルバーを再実行して、より良い結果を得ることもできます。

ライブ エディター タスクの最終状態がここに表示されます。

Live Task
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.

Figure Genetic Algorithm contains an axes object. The axes object with title Best: 2.54629 Mean: 113.977, xlabel Generation, ylabel Fitness value contains 2 objects of type scatter. These objects represent Best fitness, Mean fitness.

disp(solution)
    0.9785    0.9443
disp(objectiveValue)
    2.5463

コマンドラインで最小化する

コマンドラインで Rastrigin 関数の最小値を見つけるには、次のコードを入力します。

rng default % For reproducibility
options = optimoptions('ga','PlotFcn','gaplotbestf');
[solution,objectiveValue] = ga(@rastriginsfcn,2,...
    [],[],[],[],[],[],[],options)
ga stopped because the average change in the fitness value is less than options.FunctionTolerance.

Figure Genetic Algorithm contains an axes object. The axes object with title Best: 2.54629 Mean: 113.977, xlabel Generation, ylabel Fitness value contains 2 objects of type scatter. These objects represent Best fitness, Mean fitness.

solution = 1×2

    0.9785    0.9443

objectiveValue = 
2.5463

プロットの下部の点は最良の適応度値を示し、その上の点は各世代の適応度値の平均を示します。プロットの上部には、現在の世代における最良値と平均値が数値的に表示されます。

Optimize ライブ エディター タスクとコマンド ラインの両方を使用して問題を定式化して解決することができ、結果は同一になります。コマンドラインはより合理化されていますが、ソルバーの選択、問題の設定、プロット関数などのオプションの選択に関するヘルプは少なくなります。また、Optimize を使用して問題を開始し、次に [最適化] ライブ エディター タスクまたはソルバーを使用した制約付き非線形問題 のようにコマンド ラインで使用するためのコードを生成することもできます。

参考

トピック