Main Content

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

確率的目的関数の最適化

この例では、patternsearch を使用して確率的目的関数の最小値を見つける方法を示します。また、Optimization Toolbox™ ソルバーがこのタイプの問題に適していないことも示しています。この例では、ノイズによって乱される単純な 2 次元の目的関数を使用します。

初期化

X0 = [2.5 -2.5];   % Starting point.
LB = [-5 -5];      % Lower bound
UB = [5 5];        % Upper bound
range = [LB(1) UB(1); LB(2) UB(2)];
Objfcn = @smoothFcn; % Handle to the objective function.
% Plot the smooth objective function
fig = figure('Color','w');
showSmoothFcn(Objfcn,range);
hold on;
title('Smooth objective function');
ph = [];
ph(1) = plot3(X0(1),X0(2),Objfcn(X0)+30,'or','MarkerSize',10,'MarkerFaceColor','r');
hold off;
ax = gca;
ax.CameraPosition = [-31.0391  -85.2792 -281.4265];
ax.CameraTarget = [0 0 -50];
ax.CameraViewAngle = 6.7937;
% Add legend information
legendLabels = {'Start point'};
lh = legend(ph,legendLabels,'Location','SouthEast');
lp = lh.Position;
lh.Position = [1-lp(3)-0.005 0.005 lp(3) lp(4)];

滑らかな目的関数でfminconを実行する

目的関数は滑らかです(2 回連続微分可能)。Optimization Toolbox fmincon ソルバーを使用して最適化問題を解きます。fmincon は、複数の変数の関数の制約付き最小値を見つけます。この関数は、点 x* = [-5,-5] で一意の最小値を持ち、その値は f(x*) = -250 になります。

反復表示を返すようにオプションを設定します。

options = optimoptions(@fmincon,'Algorithm','interior-point','Display','iter');
[Xop,Fop] = fmincon(Objfcn,X0,[],[],[],[],LB,UB,[],options)
figure(fig);
hold on;
                                            First-order      Norm of
 Iter F-count            f(x)  Feasibility   optimality         step
    0       3   -1.062500e+01    0.000e+00    2.004e+01
    1       6   -1.578420e+02    0.000e+00    5.478e+01    6.734e+00
    2       9   -2.491310e+02    0.000e+00    6.672e+01    1.236e+00
    3      12   -2.497554e+02    0.000e+00    2.397e-01    6.310e-03
    4      15   -2.499986e+02    0.000e+00    5.065e-02    8.016e-03
    5      18   -2.499996e+02    0.000e+00    9.708e-05    3.367e-05
    6      21   -2.500000e+02    0.000e+00    1.513e-04    6.867e-06
    7      24   -2.500000e+02    0.000e+00    1.161e-06    6.920e-08

Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.


Xop =

   -5.0000   -5.0000


Fop =

 -250.0000

最終点をプロットする

ph(2) = plot3(Xop(1),Xop(2),Fop,'dm','MarkerSize',10,'MarkerFaceColor','m');
% Add a legend to plot
legendLabels = [legendLabels, '|fmincon| solution'];
lh = legend(ph,legendLabels,'Location','SouthEast');
lp = lh.Position;
lh.Position = [1-lp(3)-0.005 0.005 lp(3) lp(4)];
hold off;

確率的目的関数

ここで、ランダムノイズを追加して目的関数を乱します。

rng(0,'twister') % Reset the global random number generator
peaknoise = 4.5;
Objfcn = @(x) smoothFcn(x,peaknoise); % Handle to the objective function.
% Plot the objective function (non-smooth)
fig = figure('Color','w');
showSmoothFcn(Objfcn,range);
title('Stochastic objective function')
ax = gca;
ax.CameraPosition = [-31.0391  -85.2792 -281.4265];
ax.CameraTarget = [0 0 -50];
ax.CameraViewAngle = 6.7937;

確率的目的関数でfminconを実行する

摂動された目的関数は確率的であり、滑らかではありません。fmincon は、目的関数の導関数を使用して局所最小値を見つける一般的な制約付き最適化ソルバーです。目的関数の 1 次導関数を指定しない場合、fmincon は有限差分を使用して導関数を近似します。この例では、目的関数はランダムであるため、有限差分推定による導関数は信頼できない可能性があります。fmincon は、最小値ではないポイントで停止する可能性があります。これは、ノイズのために最終時点で最適条件が満たされたように見えるか、fmincon がそれ以上先に進めなかったために発生する可能性があります。

[Xop,Fop] = fmincon(Objfcn,X0,[],[],[],[],LB,UB,[],options)
figure(fig);
hold on;
ph = [];
ph(1) = plot3(X0(1),X0(2),Objfcn(X0)+30,'or','MarkerSize',10,'MarkerFaceColor','r');
ph(2) = plot3(Xop(1),Xop(2),Fop,'dm','MarkerSize',10,'MarkerFaceColor','m');
% Add legend to plot
legendLabels = {'Start point','|fmincon| solution'};
lh = legend(ph,legendLabels,'Location','SouthEast');
lp = lh.Position;
lh.Position = [1-lp(3)-0.005 0.005 lp(3) lp(4)];
hold off;
                                            First-order      Norm of
 Iter F-count            f(x)  Feasibility   optimality         step
    0       3   -1.925772e+01    0.000e+00    2.126e+08
    1       6   -7.107849e+01    0.000e+00    2.623e+08    8.873e+00
    2      11   -8.055890e+01    0.000e+00    2.401e+08    6.715e-01
    3      20   -8.325315e+01    0.000e+00    7.348e+07    3.047e-01
    4      48   -8.366302e+01    0.000e+00    1.762e+08    1.593e-07
    5      64   -8.591081e+01    0.000e+00    1.569e+08    3.111e-10

Local minimum possible. Constraints satisfied.

fmincon stopped because the size of the current step is less than
the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.


Xop =

   -4.9628    2.6673


Fop =

  -85.9108

patternsearch の実行

ここで、Global Optimization Toolbox patternsearch ソルバーを使用して確率的目的関数を最小化します。パターン検索最適化手法は、最適化のための直接検索方法の一種です。パターン検索アルゴリズムは、最適なポイントを見つけるために目的関数の導関数を使用しません。

PSoptions = optimoptions(@patternsearch,'Display','iter');
[Xps,Fps] = patternsearch(Objfcn,X0,[],[],[],[],LB,UB,PSoptions)
figure(fig);
hold on;
ph(3) = plot3(Xps(1),Xps(2),Fps,'dc','MarkerSize',10,'MarkerFaceColor','c');
% Add legend to plot
legendLabels = [legendLabels, 'Pattern Search solution'];
lh = legend(ph,legendLabels,'Location','SouthEast');
lp = lh.Position;
lh.Position = [1-lp(3)-0.005 0.005 lp(3) lp(4)];
hold off

Iter     Func-count       f(x)      MeshSize     Method
    0           1       -7.20766             1      
    1           3       -34.7227             2     Successful Poll
    2           3       -34.7227             1     Refine Mesh
    3           5       -34.7227           0.5     Refine Mesh
    4           8       -96.0847             1     Successful Poll
    5          10       -96.0847           0.5     Refine Mesh
    6          13       -132.888             1     Successful Poll
    7          15       -132.888           0.5     Refine Mesh
    8          17       -132.888          0.25     Refine Mesh
    9          20       -197.689           0.5     Successful Poll
   10          22       -197.689          0.25     Refine Mesh
   11          24       -197.689         0.125     Refine Mesh
   12          27       -241.344          0.25     Successful Poll
   13          29       -241.344         0.125     Refine Mesh
   14          31       -254.624          0.25     Successful Poll
   15          33       -254.624         0.125     Refine Mesh
   16          35       -254.624        0.0625     Refine Mesh
   17          37       -254.624       0.03125     Refine Mesh
   18          39       -254.624       0.01562     Refine Mesh
   19          41       -254.624      0.007812     Refine Mesh
   20          42       -256.009       0.01562     Successful Poll
   21          44       -256.009      0.007812     Refine Mesh
   22          47       -256.009      0.003906     Refine Mesh
   23          50       -256.009      0.001953     Refine Mesh
   24          53       -256.009     0.0009766     Refine Mesh
   25          56       -256.009     0.0004883     Refine Mesh
   26          59       -256.009     0.0002441     Refine Mesh
   27          62       -256.009     0.0001221     Refine Mesh
   28          65       -256.009     6.104e-05     Refine Mesh
   29          68       -256.009     3.052e-05     Refine Mesh
   30          71       -256.009     1.526e-05     Refine Mesh

Iter     Func-count        f(x)       MeshSize      Method
   31          74       -256.009     7.629e-06     Refine Mesh
   32          77       -256.009     3.815e-06     Refine Mesh
   33          80       -256.009     1.907e-06     Refine Mesh
   34          83       -256.009     9.537e-07     Refine Mesh
patternsearch stopped because the mesh size was less than options.MeshTolerance.

Xps =

   -4.9688   -5.0000


Fps =

 -256.0095

パターン検索は、目的関数内のランダムノイズの影響をそれほど受けません。パターン検索には関数値のみが必要であり、導関数は必要ないため、ノイズ (ある種の均一な種類) はパターン検索に影響を与えない可能性があります。ただし、パターン検索では、導関数ベースのアルゴリズムよりも真の最小値を見つけるために多くの関数評価が必要であり、導関数を使用しないことによるコストがかかります。

関連するトピック