主要内容

搜索及投票

除了轮询网格点之外,模式搜索算法还可以在每次迭代中执行一个可选步骤,称为搜索。在每次迭代中,搜索步骤对当前点应用另一种优化方法。如果此搜索不能改善当前点,则执行轮询步骤。目标函数,lincontest7,在运行此示例时可用。

使用民意调查方法进行搜索

中所描述的问题,下面的示例说明了搜索方法的使用使用模式搜索和优化实时编辑器任务约束最小化.在这种情况下,搜索方法是GSS积极基础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,output] = patternsearch(@lincontest7,x0,...Aineq、bineq Aeq,说真的 ,[],[],[], 选项);
优化终止:网格尺寸小于options.MeshTolerance。

{

若要使用GSS Positive Basis 2N民意调查作为搜索方法,请更改SearchFcn选择。

rng默认的%用于再现性选项。SearchFcn = @GSSPositiveBasis2N;[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要削弱罗森布洛克的作用需要很长时间。函数是

f x 1 0 0 x 2 - x 1 2 2 + 1 - x 1 2

Rosenbrock函数的描述和绘制使用优化实时编辑器任务或求解器的约束非线性问题.Rosenbrock函数在该点处的最小值为0[1].因为patternsearch在最小化此函数时效率不高,请使用不同的搜索方法来帮助。

创建目标函数。

dejong2fcn = @ (x) 100 * (x (2) - x (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;

带有两个变量的patternsearch的默认最大迭代次数是200,函数计算的默认最大次数是4000。将这些值增加到MaxFunctionEvaluations= 5000 andMaxIterations= 2000。

Opts = optimoptions(“patternsearch”“MaxFunctionEvaluations”, 5000,“MaxIterations”, 2000);

从开始运行patternsearch(-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函数的最小值。

相关的话题