除了轮询网格点之外,模式搜索算法还可以在每次迭代时执行一个可选的步骤,称为搜索。在每次迭代中,搜索步骤对当前点应用另一种优化方法。如果此搜索没有改进当前点,则执行轮询步骤。
下面的示例演示了对中描述的问题使用搜索方法使用模式搜索和优化活动编辑器任务的约束最小化.在本例中,搜索方法是MADS Positive Basis 2N poll。为了进行比较,首先在没有搜索方法的情况下运行问题。
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,BEQ,[],[],[],选项);
优化终止:网格尺寸小于options.meshtolerance。
要使用MADS积极的基础2N投票作为搜索方法,更改SearchFcn
选项。
RNG.默认的重复性的%选项.searchfcn = @ madspositivebasis2n;[X2,FVAL2,EXITFLAG2,OUTPUT2] = PatternSearch(@ Lincontest7,X0,...AINEQ,BINEQ,AEQ,BEQ,[],[],[],选项);
优化终止:网格尺寸小于options.meshtolerance。
两种优化都达到了相同的目标函数值。使用搜索方法减少了函数的计算次数和迭代次数。
表([output.funccount; output2.funccount],[output.Iltations; Output2.Irtorions],...“VariableNames”,[“功能评估”“迭代”],...“RowNames”,[“没有搜索”“搜索”])
ans =2×2表函数评估迭代____________________ __________没有搜索1462 136与搜索1283 118
patternsearch
需要很长时间才能最小化Rosenbrock的功能。这个功能是
描述并绘制了Rosenbrock函数解决一个约束非线性问题,基于求解器.Rosenbrock函数的最小值为0,在点处达到[1,1]
.因为patternsearch
不能有效地最小化这个函数,请使用不同的搜索方法来帮助。
创建目标函数。
dejong2fcn = @ (x) 100 * (x (2) - x (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;
带有两个变量的patternsearch的默认最大迭代次数是200,函数计算的默认最大次数是4000。将这些值增加到MaxFunctionEvaluations
= 5000MaxIterations
= 2000。
选择= optimoptions (“patternsearch”,“MaxFunctionEvaluations”, 5000,“MaxIterations”, 2000);
从开始运行patternsearch(-1.9 - 2)
.
[x,函数宏指令,eflag,输出]= patternsearch (dejong2fcn,...[-1.9, 2 ],[],[],[],[],[],[],[], 选择);
超过函数计算的最大数量:increase options. maxfunctionevalues。
disp(函数宏指令)
0.8560.
优化没有完成,结果并没有非常接近最优值0。
设置要使用的选项fminsearch
作为搜索方法,使用默认数量的函数求值和迭代。
选择= optimoptions (“patternsearch”选择,“SearchFcn”, @searchneldermead);
重新运行优化。
(x2, feval2 eflag2 output2] = patternsearch (dejong2fcn,...[-1.9, 2 ],[],[],[],[],[],[],[], 选择);
优化终止:网格尺寸小于options.meshtolerance。
disp (feval2)
4.0686平台以及
当使用这种搜索方法时,结果要好得多。fminsearch
更高效地接近Rosenbrock函数的最小值。