查册及轮询
除了轮询网格点之外,模式搜索算法还可以在每次迭代中执行一个可选步骤,称为搜索。在每次迭代中,搜索步骤对当前点应用另一种优化方法。如果此搜索不能改善当前点,则执行轮询步骤。目标函数,lincontest7
,在运行此示例时可用。
使用投票方式进行搜索
中描述的问题的搜索方法的使用使用模式搜索和优化实时编辑器任务的约束最小化.在本例中,搜索方法是GSS 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,output] = patternsearch(@lincontest7,x0,...Aineq、bineq Aeq,说真的 ,[],[],[], 选项);
优化终止:网格尺寸小于options.MeshTolerance。
若要使用GSS正基2N轮询作为搜索方法,请更改SearchFcn
选择。
rng默认的%用于重现性选项。SearchFcn = @ gspositivebasis2n;[x2,fval2,exitflag2,output2] = patternsearch(@lincontest7,x0,...Aineq、bineq Aeq,说真的 ,[],[],[], 选项);
优化终止:网格尺寸小于options.MeshTolerance。
两种优化方法都达到了相同的目标函数值。使用搜索方法减少了函数计算的次数和迭代的次数。
表([output.funccount; output2.funccount], [output.iterations; output2.iterations],...“VariableNames”,[“功能评估”“迭代”),...“RowNames”,[“没有搜索”“搜索”])
ans =2×2表函数计算迭代____________________ __________没有搜索758 84与搜索667 93
使用不同的求解器进行搜索
patternsearch
要把罗森布罗克的功能最小化需要很长时间。函数是
对Rosenbrock函数进行了描述和绘制使用优化实时编辑器任务或求解器的约束非线性问题.Rosenbrock函数的最小值在该点处为0[1]
.因为patternsearch
在最小化此函数时效率不高,请使用不同的搜索方法来帮助。
创建目标函数。
dejong2fcn = @ (x) 100 * (x (2) - x (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;
带有两个变量的模式搜索的默认最大迭代次数是200,函数计算的默认最大次数是4000。将这些值增加到MaxFunctionEvaluations
= 5000和MaxIterations
= 2000。
Opts = optimoptions(“patternsearch”,“MaxFunctionEvaluations”, 5000,“MaxIterations”, 2000);
运行patternsearch starting from(-1.9 - 2)
.
[x,feval,eflag,output] = patternsearch(dejong2fcn,...[-1.9, 2 ],[],[],[],[],[],[],[], 选择);
超过函数计算的最大数量:增加options. maxfunctionassessments。
disp(函数宏指令)
0.8560
disp (output.funccount)
5000
即使进行了5000次函数计算,优化也没有完成,因此结果与最优值0并不十分接近。
将选项设置为使用fminsearch
作为搜索方法,使用默认次数的函数求值和迭代。
Opts = optimoptions(“patternsearch”选择,“SearchFcn”, @searchneldermead);
重新运行优化。
[x2,feval2,eflag2,output2] = patternsearch(dejong2fcn,...[-1.9, 2 ],[],[],[],[],[],[],[], 选择);
优化终止:网格尺寸小于options.MeshTolerance。
disp (feval2)
4.0686平台以及
disp (output2.funccount)
291
使用该搜索方法时,在解处的目标函数值要好得多(更低),函数的计算次数也要低得多。fminsearch
能更有效地接近Rosenbrock函数的最小值。