除了轮询网格点之外,模式搜索算法还可以在每次迭代中执行一个可选的步骤,称为搜索。在每次迭代时,搜索步骤对当前点应用另一种优化方法。如果此搜索不能改善当前点,则执行轮询步骤。
下面的示例说明了对中描述的问题使用搜索方法使用模式搜索和优化实时编辑器任务的约束最小化.在本例中,搜索方法是MADS Positive Basis 2N轮询。为了进行比较,首先在不使用搜索方法的情况下运行问题。
X0 = [2 1 0 9 1 0];Aineq = [-8 7 3 -4 9 0];bineq = 7;Aeq = [7 1 8 3 3 3;5 0 -5 1 -5 8;-2 -6 7 1 1 9;1,1 2 -2 3 -3];Beq = [84 62 65 1];选择= optimoptions (“patternsearch”,...“PlotFcn”, {@psplotbestf, @psplotfuncount});[x, fval exitflag,输出]= patternsearch (x0, @lincontest7...Aineq、bineq Aeq,说真的 ,[],[],[], 选项);
优化终止:网格尺寸小于选项。网格公差。
使用MADS正基2N民意测验作为搜索方法,改变SearchFcn
选择。
rng默认的%的再现性选项。SearchFcn = @MADSPositiveBasis2N;(x2, fval2 exitflag2 output2] = patternsearch (x0, @lincontest7...Aineq、bineq Aeq,说真的 ,[],[],[], 选项);
优化终止:网格尺寸小于选项。网格公差。
两次优化均达到相同的目标函数值。采用搜索方法减少了函数求值次数和迭代次数。
表([output.funccount; output2.funccount], [output.iterations; output2.iterations],...“VariableNames”,[“功能评估”“迭代”],...“RowNames”,[“没有搜索”“搜索”])
ans =2×2表函数计算迭代____________________ __________没有搜索1462 136有搜索1283 118
patternsearch
要花很长时间才能最小化罗森布罗克函数。函数是
文中描述并绘制了罗森布罗克函数求解一个约束非线性问题,基于求解器.Rosenbrock函数在该点处的最小值为0[1]
.因为patternsearch
不能有效地最小化此功能,请使用不同的搜索方法来帮助。
创建目标函数。
dejong2fcn = @ (x) 100 * (x (2) - x (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;
带有两个变量的模式搜索的默认最大迭代次数是200,函数计算的默认最大次数是4000。将这些值增加到MaxFunctionEvaluations
= 5000,MaxIterations
= 2000。
选择= optimoptions (“patternsearch”,“MaxFunctionEvaluations”, 5000,“MaxIterations”, 2000);
开始运行模式搜索(-1.9 - 2)
.
[x,函数宏指令,eflag,输出]= patternsearch (dejong2fcn,...[-1.9, 2 ],[],[],[],[],[],[],[], 选择);
超过的最大函数求值数:
disp(函数宏指令)
0.8560
优化没有完成,结果不是很接近最优值0。
设置要使用的选项fminsearch
作为搜索方法,使用默认的函数求值和迭代次数。
选择= optimoptions (“patternsearch”选择,“SearchFcn”, @searchneldermead);
重新运行优化。
(x2, feval2 eflag2 output2] = patternsearch (dejong2fcn,...[-1.9, 2 ],[],[],[],[],[],[],[], 选择);
优化终止:网格尺寸小于选项。网格公差。
disp (feval2)
4.0686平台以及
当使用这种搜索方法时,结果要好得多。fminsearch
更容易接近罗森布罗克函数的最小值。