的MeshExpansionFactor
和MeshContractionFactor
选项控制每次迭代时扩展或收缩网格的大小。使用默认MeshExpansionFactor
的价值2
,模式搜索将网格大小乘以2
每次投票成功后。使用默认MeshContractionFactor
的价值0.5
,模式搜索将网格大小乘以0.5
每次投票失败后。
通过设置,可以查看模式搜索过程中网格大小的伸缩情况@psplotmeshsize
随着PlotFcn
选择。要在命令行显示网格大小和目标函数的值,设置显示
选项“通路”
.
例如,设置使用模式搜索和优化实时编辑器任务的约束最小化如下:
在命令行中输入以下命令:
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];
创建选项以使用GSSPositiveBasis2N
轮询法,给出迭代显示,并绘制网格尺寸。
选择= optimoptions (“patternsearch”,...“PollMethod”,“GSSPositiveBasis2N”,...“PlotFcn”@psplotmeshsize,...“显示”,“通路”);
运行优化。
[x, fval exitflag,输出]= patternsearch (x0, @lincontest7...Aineq、bineq Aeq,说真的 ,[],[],[], 选项);
为了更清楚地看到网格大小的变化,改变y-轴改为对数缩放如下:
选择轴属性从编辑在绘图窗口中的菜单。
在属性编辑器中,选择统治者选项卡。
集YScale来日志.
在MATLAB中更新这些设置®属性编辑器如下图所示。
前5次迭代的结果是成功的轮询,所以网格尺寸在此期间稳步增加。通过查看命令行显示,您可以看到第一个不成功的轮询发生在迭代6。
Iter f-count f(x) MeshSize Method 0 1 2273.76 1 1 2 2251.69 2 Successful Poll 23 2209.86 4 Successful Poll 3 4 2135.43 8 Successful Poll 4 5 2023.48 16 Successful Poll 5 6 1947.23 32 Successful Poll 6 15 1947.23 16 Refine Mesh
注意,在第5次迭代成功时,网格大小为下一次迭代的两倍。但在第6次迭代,这是不成功的,网格大小是成倍的0.5
.
来看看MeshExpansionFactor
和MeshContractionFactor
影响模式搜索,设置MeshExpansionFactor
来3.0
并设置MeshContractionFactor
来2/3
.
选择= optimoptions(选项,“MeshExpansionFactor”, 3.0,...“MeshContractionFactor”, 2/3);[x, fval exitflag,输出]= patternsearch (x0, @lincontest7...Aineq、bineq Aeq,说真的 ,[],[],[], 选项);
最终的目标函数值与之前的设置大致相同,但求解器需要更长的时间才能到达那个点。
当你改变比例y-轴到对数,网格大小图如下图所示。
注意,网格尺寸的增长速度更快MeshExpansionFactor
设置为3.0
的默认值2.0
,并且下降得更慢MeshContractionFactor
设置为2/3
的默认值0.5
.
网格加速器可以减少达到网格公差所需的迭代次数,从而使模式搜索更快地收敛到最优点。当网格尺寸小于某一数值时,模式搜索将网格尺寸缩小一倍MeshContractionFactor
的因素。网格加速器仅适用于GPS和GSS算法。
请注意
为了得到最好的结果,使用网格加速器来解决目标函数在最优点附近不是太陡的问题,否则你可能会失去一些准确性。对于可微问题,这意味着导数的绝对值在解附近不会太大。
要使用网格加速器,请设置AccelerateMesh
选项真正的
.
例如,设置使用模式搜索和优化实时编辑器任务的约束最小化如下:
在命令行中输入以下命令:
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”,...“PollMethod”,“GSSPositiveBasis2N”,...“显示”,“通路”,“AccelerateMesh”,真正的);
运行优化。
[x, fval exitflag,输出]= patternsearch (x0, @lincontest7...Aineq、bineq Aeq,说真的 ,[],[],[], 选项);
patternsearch
完成78次迭代,相比之下,当网格加速器没有开启时,完成84次迭代。你可以在迭代显示中看到网格加速器的效果。运行带有或不带有网格加速的示例。网格大小在迭代70前是相同的,但在迭代71时不同。MATLAB命令窗口为没有加速器的迭代70和71显示以下行。
Iter f-count f(x) Mesh size Method 70 618 1919.54 6.104e-05 Refine Mesh 71 630 1919.54 3.0552 -05 Refine Mesh
注意网格大小乘以0.5
的默认值MeshContractionFactor
.
为了进行比较,命令窗口将显示使用加速器的相同迭代数的以下行。
Iter f-count f(x)网格尺寸方法70 618 1919.54 6.104e-05细化网格71 630 1919.54 1.526e-05细化网格
在这种情况下,网格大小乘以0.25
.