主要内容

设置网格选项

网的扩张和收缩

MeshExpansionFactorMeshContractionFactor选择控制网格大小是多少在每个迭代进行扩张或者收缩。使用默认MeshExpansionFactor的价值2模式搜索增加网格的大小2每次成功的调查。使用默认MeshContractionFactor的价值0.5模式搜索增加网格的大小0.5每次失败后投票。

您可以查看网格大小的扩张和收缩在搜索通过设置模式@psplotmeshsize随着PlotFcn选择。也显示网格大小和目标函数的值在命令行设置显示选项“通路”

例如,建立描述的问题使用patternsearch约束极小化和优化生活编辑任务如下:

  1. 在命令行输入以下:

    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;
  2. 创建选项来使用GSSPositiveBasis2N调查方法,给迭代显示,绘制网格大小。

    选择= optimoptions (“patternsearch”,“PollMethod”,“GSSPositiveBasis2N”,“PlotFcn”@psplotmeshsize,“显示”,“通路”);
  3. 运行优化。

    [x, fval exitflag,输出]= patternsearch (F, x0,Aineq、bineq Aeq,说真的,[],[],[],选项);

为了更清楚的看到网格大小的变化,改变y设在对数比例如下:

  1. 选择轴属性编辑窗口菜单的阴谋。

  2. 在属性编辑器中,选择统治者选项卡。

  3. 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

来看看MeshExpansionFactorMeshContractionFactor影响搜索模式,集MeshExpansionFactor3.0并设置MeshContractionFactor2/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约束极小化和优化生活编辑任务如下:

  1. 在命令行输入以下:

    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;
  2. 创建选项,包括网格加速器。

    选择= optimoptions (“patternsearch”,“PollMethod”,“GSSPositiveBasis2N”,“显示”,“通路”,“AccelerateMesh”,真正的);
  3. 运行优化。

    [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

相关的话题