Main Content

本页采用了机器翻译。点击此处可查看英文原文。

随机目标函数优化

此示例显示如何使用 patternsearch 找到随机目标函数的最小值。它还展示了为什么 Optimization Toolbox™ 求解器不适合解决这类问题。该示例使用一个简单的二维目标函数,然后受到噪声的干扰。

初始化

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

目标函数是平滑的(两次连续可微)。使用 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 是一个通用的约束优化求解器,它使用目标函数的导数来寻找局部最小值。如果您不提供目标函数的一阶导数,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

模式搜索不会受到目标函数中随机噪声的强烈影响。模式搜索只需要函数值而不是导数,因此噪声(某种均匀类型)可能不会影响它。然而,与基于导数的算法相比,模式搜索需要更多的函数评估来找到真实最小值,这是不使用导数的代价。

相关主题