Main Content

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

GPSアルゴリズムを使用して最適化する

この例では、patternsearch ソルバーのデフォルトである GPS アルゴリズムを使用して最適化問題を解決する方法を示します。この例では、Optimize ライブ エディター タスクを使用して、視覚的なアプローチで最適化を完了します。

目的関数

この例では、この例を実行するときに含まれる目的関数 ps_example を使用します。関数のコードを表示します。

type ps_example
function f = ps_example(x)
%PS_EXAMPLE objective function for patternsearch.

%   Copyright 2003-2021 The MathWorks, Inc.

f = zeros(1,size(x,1));
for i = 1:size(x,1)
    if  x(i,1) < -5
        f(i) = (x(i,1)+5)^2 + abs(x(i,2));
    elseif x(i,1) < -3
        f(i) = -2*sin(x(i,1)) + abs(x(i,2));
    elseif x(i,1) < 0
        f(i) = 0.5*x(i,1) + 2 + abs(x(i,2));
    elseif x(i,1) >= 0
        f(i) = .3*sqrt(x(i,1)) + 5/2 +abs(x(i,2));
    end
end

関数をプロットします。

fsurf(@(x,y)reshape(ps_example([x(:),y(:)]),size(x)),...
    [-6 2 -4 4],'LineStyle','none','MeshDensity',300)
colormap 'jet'
view(-26,43)
xlabel('x(1)')
ylabel('x(2)')
title('ps\_example(x)')

関数の最小値を求める

Optimize ライブ エディター タスクを使用して ps_example の最小値を見つけるには、次の手順を実行します。

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

new_live_script.png

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

optimizelet_insert.png

optimizelet_choose.png

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

optimizelet_initial.png

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

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

x0 = [2.1 1.7];
fun = @ps_example;
  • これらの変数をワークスペースに配置するには、Ctrl + Enter を押してセクションを実行します。

  • タスクの 問題タイプの指定 セクションで、 目的 > 非スムーズ ボタンをクリックします。

  • 選択したソルバーが patternsearch であることを確認します。

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

  • [初期点 (x0)]、[x0] を選択します。

  • タスクの 進行状況の表示 セクションで、 最適値 および メッシュ サイズ プロットを選択します。

optimizelet_patternsearch_setup.png

  • ソルバーを実行するには、タスク ウィンドウの右上にあるオプション ボタン [⁝] をクリックして、[セクションの実行] を選択します。プロットは別の図ウィンドウとタスク出力領域に表示されます。

BFVforPS.png

上のグラフは、各反復における最良点の目的関数値を示しています。通常、目的関数の値は初期の反復で急速に改善され、最適値に近づくにつれて安定します。

下のグラフは各反復におけるメッシュ サイズを示しています。メッシュ サイズは、反復が成功するたびに増加し、反復が失敗するたびに減少します。詳細については、パターン検索ポーリングの仕組み を参照してください。

メッシュ サイズが MeshTolerance オプションで定義されたメッシュ サイズ許容値よりも小さくなるため、最適化が停止します。関数の最小値はおよそ –2 です。

解と目的関数の値を確認するには、タスクの上部を確認します。

optimizelet_ps_solution.png

Optimize タスクは、変数 solutionobjectiveValue をワークスペースに配置します。これらの値を表示するには、タスクの下に新しいセクションを配置し、このコードを含めます。

disp(solution)
disp(objectiveValue)

Ctrl+Enter を押してセクションを実行します。

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

Live Task
patternsearch stopped because the mesh size was less than options.MeshTolerance.

disp(solution)
   -4.7124   -0.0000
disp(objectiveValue)
   -2.0000

参考

|

関連するトピック