设置网格选项
网的扩张和收缩
的MeshExpansionFactor
和MeshContractionFactor
选择控制网格大小是多少在每个迭代进行扩张或者收缩。使用默认MeshExpansionFactor
的价值2
模式搜索增加网格的大小2
每次成功的调查。使用默认MeshContractionFactor
的价值0.5
模式搜索增加网格的大小0.5
每次失败后投票。
您可以查看网格大小的扩张和收缩在搜索通过设置模式@psplotmeshsize
随着PlotFcn
选择。也显示网格大小和目标函数的值在命令行设置显示
选项“通路”
。
例如,建立描述的问题使用patternsearch约束极小化和优化生活编辑任务如下:
在命令行输入以下:
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];说真的= [84 62 65 1];H =[36 17日19日12 8 15;17 33 18 11 7 14; 19 18 43 13 8 16; 12 11 13 18 6 11; 8 7 8 6 9 8; 15 14 16 11 8 29]; f = [ 20 15 21 18 29 24 ]'; F = @(x)0.5*x'*H*x + f'*x;
创建选项来使用
GSSPositiveBasis2N
调查方法,给迭代显示,绘制网格大小。选择= optimoptions (“patternsearch”,…“PollMethod”,“GSSPositiveBasis2N”,…“PlotFcn”@psplotmeshsize,…“显示”,“通路”);
运行优化。
[x, fval exitflag,输出]= patternsearch (F, x0,…Aineq、bineq Aeq,说真的,[],[],[],选项);
-
为了更清楚的看到网格大小的变化,改变y设在对数比例如下:
选择轴属性从编辑窗口菜单的阴谋。
在属性编辑器中,选择统治者选项卡。
集YScale来日志。
MATLAB中更新这些设置®属性编辑器显示了图如下图所示。
第一个5迭代导致成功的民意调查,所以网格大小稳步增加。你可以看到第一个失败的调查发生在迭代6通过查看命令行显示。
Iter f-count f (x) MeshSize方法2273.76 0 1 1 1 2 2209.86 2251.69 - 2成功的调查2 3 4成功的调查3 4 2135.43 8成功调查4 5 2023.48 16成功调查5 6 1947.23 32成功调查6 15 1947.23 16细化网格
注意,在迭代5,这是成功的,网格大小双打为下一次迭代。但在迭代6,不成功,网格大小乘以0.5
。
来看看MeshExpansionFactor
和MeshContractionFactor
影响搜索模式,集MeshExpansionFactor
来3.0
并设置MeshContractionFactor
来2/3
。
选择= optimoptions(选项,“MeshExpansionFactor”,3.0,…“MeshContractionFactor”,2/3);[x, fval exitflag,输出]= patternsearch (F, x0,…Aineq、bineq Aeq,说真的,[],[],[],选项);
最终的目标函数值大约是一样与以前的设置,但解决需要更长的时间达到这一点。
当你改变的比例y设在对数,筛孔尺寸图显示为如下图所示。
注意网格大小增加更快MeshExpansionFactor
设置为3.0
相比,的默认值2.0
和减少更慢MeshContractionFactor
设置为2/3
相比,的默认值0.5
。
网加速器
网格加速器可以让一个模式搜索收敛快一个最佳点,减少所需的迭代次数达到网格宽容。网格大小低于某个值时,模式搜索合同小于筛孔尺寸的因素MeshContractionFactor
的因素。网加速器只适用于GPS和GSS算法。
请注意
为达到最佳效果,使用网格加速器的问题中,目标函数不太陡峭的最佳点附近,或者你可能会失去一些精度。可微的问题,这意味着导数的绝对值并不太大附近的解决方案。
使用网格加速器,设置AccelerateMesh
选项真正的
。
例如,建立描述的问题使用patternsearch约束极小化和优化生活编辑任务如下:
在命令行输入以下:
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];说真的= [84 62 65 1];H =[36 17日19日12 8 15;17 33 18 11 7 14; 19 18 43 13 8 16; 12 11 13 18 6 11; 8 7 8 6 9 8; 15 14 16 11 8 29]; f = [ 20 15 21 18 29 24 ]'; F = @(x)0.5*x'*H*x + f'*x;
创建选项,包括网格加速器。
选择= optimoptions (“patternsearch”,…“PollMethod”,“GSSPositiveBasis2N”,…“显示”,“通路”,“AccelerateMesh”,真正的);
运行优化。
[x, fval exitflag,输出]= patternsearch (F, x0,…Aineq、bineq Aeq,说真的,[],[],[],选项);
patternsearch
比84年完成78年迭代,迭代时网格加速器不是。你可以看到的影响网格迭代显示的加速器。运行示例,没有网加速度。网格的大小都是一样的,直到70年迭代,但不同迭代71。MATLAB命令窗口显示以下行迭代70年和71年没有加速器。
Iter f-count f (x) MeshSize方法70 618 1919.54 6.104 e-05细化网格71 630 1919.54 3.052 e-05细化网格
注意,网格的大小乘以0.5
的默认值MeshContractionFactor
。
相比之下,命令窗口显示下面的线与加速器为相同的迭代数。
Iter f-count f (x) MeshSize方法70 618 1919.54 6.104 e-05细化网格71 630 1919.54 1.526 e-05细化网格
在这种情况下,网格大小乘以0.25
。