主要内容

随机目标函数的优化

这个例子展示了如何找到一个随机目标函数的最小值使用patternsearch.它还展示了优化工具箱™求解器如何不适合这类问题。这个例子使用了一个简单的2维目标函数,然后被噪声扰动。

初始化

X0 = [2.5 -2.5];%起始点。Lb = [-5 -5];%下界Ub = [5 5];%上限range = [LB(1) UB(1);磅(2)乌兰巴托(2)];Objfcn = @smoothFcn;目标函数的句柄。绘制平滑目标函数图=图(“颜色”' w ');showSmoothFcn (Objfcn、范围);持有;标题(“平滑目标函数”);Ph = [];ph(1) = plot3(X0(1),X0(2),Objfcn(X0)+30,”或““MarkerSize”10“MarkerFaceColor”“r”);持有;Ax = gca;斧子。camerposition = [-31.0391 -85.2792 -281.4265];斧子。CameraTarget = [0 0 -50];斧子。CameraViewAngle = 6.7937;添加图例信息legendLabels = {“起点”};lh = legend(ph,legendLabels,“位置”“东南”);lp = lh.位置;lh。位置= [1-lp(3)-0.005 0.005 lp(3) lp(4)];

运行fmincon平滑目标函数

目标函数是光滑的(两次连续可微)。使用“优化工具箱”解决优化问题fmincon解算器。fmincon求一个由多个变量组成的函数的约束最小值。这个函数在这一点上有唯一的最小值X * = [-5,-5]它在哪里有值F (x*) = -250

设置选项以返回迭代显示。

选项= optimoptions(@fmincon,“算法”“内点”“显示”“通路”);[Xop, Fop] = fmincon (X0 Objfcn ,[],[],[],[], 磅,乌兰巴托,[]选项)图(图);持有
Iter f -count f(x)可行性优化步骤03 -1.062500e+01 0.000e+00 2.004e+ 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.499996e+02 0.000e+00 5.065e-02 8.016e-03 5 18 -2.499996e+02 0.000e+00 1.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发现满足约束的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。Xop = -5.0000 -5.0000 Fop = -250.0000

画出最后一点

ph(2) = plot3(Xop(1),Xop(2),Fop,“糖尿病”“MarkerSize”10“MarkerFaceColor”“米”);添加一个图例到情节legendLabels = [legendLabels,“| fmincon |解决方案”];lh = legend(ph,legendLabels,“位置”“东南”);lp = lh.位置;lh。位置= [1-lp(3)-0.005 0.005 lp(3) lp(4)];持有

随机目标函数

现在通过添加随机噪声扰动目标函数。

rng (0,“旋风”重置全局随机数生成器峰值噪声= 4.5;Objfcn = @(x) smoothFcn(x,peaknoise);目标函数的句柄。绘制目标函数(非光滑)图=图(“颜色”' w ');showSmoothFcn (Objfcn、范围);标题("随机目标函数") ax = gca;斧子。camerposition = [-31.0391 -85.2792 -281.4265];斧子。CameraTarget = [0 0 -50];斧子。CameraViewAngle = 6.7937;

运行fmincon在随机目标函数上

摄动目标函数是随机且非光滑的。fmincon是一个通用的约束优化求解器,它使用目标函数的导数来寻找局部最小值。如果你不提供目标函数的一阶导数,fmincon用有限差分近似导数。在这个例子中,目标函数是随机的,因此有限差分估计导数可能是不可靠的。fmincon可能会停在一个不是最小值的点上。这可能是因为由于噪声,在最后一点似乎满足了最佳条件,或者fmincon无法取得进一步进展。

[Xop, Fop] = fmincon (X0 Objfcn ,[],[],[],[], 磅,乌兰巴托,[]选项)图(图);持有;Ph = [];ph(1) = plot3(X0(1),X0(2),Objfcn(X0)+30,”或““MarkerSize”10“MarkerFaceColor”“r”);ph(2) = plot3(Xop(1),Xop(2),Fop,“糖尿病”“MarkerSize”10“MarkerFaceColor”“米”);%添加图例情节legendLabels = {“起点”“| fmincon |解决方案”};lh = legend(ph,legendLabels,“位置”“东南”);lp = lh.位置;lh。位置= [1-lp(3)-0.005 0.005 lp(3) lp(4)];持有
Iter f -count f(x)可行性优化步骤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.766e +08 1.593e-07 5 64 -8.591081e+01 0.000e+00 1.569e+08 3.111e-10局部最小可能值。约束满足。Fmincon停止,因为当前步长的大小小于步长公差的值,并且约束被满足到约束公差的值之内。Xop = -4.9628 2.6673 Fop = -85.9108

运行patternsearch

现在使用全局优化工具箱最小化随机目标函数patternsearch解算器。模式搜索优化技术是一类直接搜索优化方法。模式搜索算法不使用目标函数的导数来寻找最优点。

PSoptions = optimoptions(@patternsearch,“显示”“通路”);(Xps, Fps) = patternsearch (X0 Objfcn ,[],[],[],[], 磅,乌兰巴托,PSoptions)图(图);持有;ph(3) = plot3(Xps(1),Xps(2),Fps,“直流”“MarkerSize”10“MarkerFaceColor”“c”);%添加图例情节legendLabels = [legendLabels,“模式搜索解决方案”];lh = legend(ph,legendLabels,“位置”“东南”);lp = lh.位置;lh。位置= [1-lp(3)-0.005 0.005 lp(3) lp(4)];持有
Iter Func-count f (x) MeshSize方法-7.20766 0 1 1 1 3 -34.7227 - 2成功的调查2 3 -34.7227 1细化网格3 5 -34.7227 - 0.5细化网格4 8 -96.0847 - 1成功调查5 10 -96.0847 - 0.5细化网格6 13 -132.888 1成功调查7 15 -132.888 - 0.5细化网格8 17 -132.888 - 0.25细化网格9 20 -197.689 - 0.5成功的调查10 22 -197.689 - 0.25细化网格11 24 -197.689 - 0.125细化网格12 27日-241.344 - 0.25成功的调查13 29日-241.344 - 0.125改进网14日31日-254.624 - 0.25成功的调查1533 35 -254.624 - 0.0625 -254.624 - 0.125细化网格16细化网格17 37 -254.624 - 0.03125细化网格18 39 -254.624 - 0.01562细化网格19 41 20 42 -256.009 - 0.01562 -254.624 - 0.007812细化网格成功调查21 44 -256.009 - 0.007812细化网格22 47 -256.009 - 0.003906改进网23 50 -256.009 - 0.001953改进网24 53 25 56 -256.009 - 0.0004883 -256.009 - 0.0009766细化网格细化网26日59 -256.009 - 0.0002441改进网27 62 -256.009 - 0.0001221改进网28 65 -256.009 - 6.104 e-05细化网格29 68 -256.009 3.052e-05细化网格30 71 -256.009 1.526e-05细化网格Iter函数计数f(x)网格尺寸方法31 74 -256.009 7.629e-06细化网格32 77 -256.009 3.815e-06细化网格33 80 -256.009 1.907e-06细化网格34 83 -256.009 9.537e-07细化网格优化终止:网格尺寸小于选项. meshtolerance。Xps = -4.9688 -5.0万Fps = -256.0095

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

相关的话题