主要内容

设置网格选项

网孔的膨胀与收缩

MeshExpansionFactorMeshContractionFactor选项控制每次迭代时扩展或收缩网格的大小。使用默认MeshExpansionFactor的价值2,模式搜索将网格大小乘以2每次投票成功后。使用默认MeshContractionFactor的价值0.5,模式搜索将网格大小乘以0.5每次投票失败后。

通过设置,可以查看模式搜索过程中网格大小的伸缩情况@psplotmeshsize随着PlotFcn选择。要在命令行显示网格大小和目标函数的值,设置显示选项“通路”

例如,设置使用模式搜索和优化实时编辑器任务的约束最小化如下:

  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];Beq = [84 62 65 1];
  2. 创建选项以使用GSSPositiveBasis2N轮询法,给出迭代显示,并绘制网格尺寸。

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

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

为了更清楚地看到网格大小的变化,改变y-轴改为对数缩放如下:

  1. 选择轴属性编辑在绘图窗口中的菜单。

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

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

来看看MeshExpansionFactorMeshContractionFactor影响模式搜索,设置MeshExpansionFactor3.0并设置MeshContractionFactor2/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选项真正的

例如,设置使用模式搜索和优化实时编辑器任务的约束最小化如下:

  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];Beq = [84 62 65 1];
  2. 创建选项,包括网格加速器。

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

    [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

相关的话题