主要内容

轮询类型

在通用模式搜索中使用完整轮询

以下面的函数为例。

f x 1 x 2 x 1 2 + x 2 2 25 x 1 2 + x 2 2 25 x 1 2 + x 2 9 2 16 x 1 2 + x 2 9 2 16 0 否则

下图显示了该函数的绘图。

生成图形的代码

函数的全局最小值出现在(0,0)处,其值为-25。然而,该函数在(0,9)处也有一个局部最小值,其值为-16。

要创建一个计算函数的文件,将以下代码复制并粘贴到MATLAB中的一个新文件中®编辑器。

函数z = poll_example (x)如果X (1)^2 + X (2)^2 + X (2)^2 + X (2)^2 - 25;elseifx (1) ^ 2 + (x (2) - 9) ^ 2 < = 16 z = x (1) ^ 2 + (x (2) - 9) ^ 2 - 16;其他的z = 0;结束

将文件保存为poll_example.m在MATLAB路径的一个文件夹中。

要对该函数运行模式搜索,请输入以下内容。

选择= optimoptions (“patternsearch”“显示”“通路”);[x, fval] = patternsearch (@poll_example (0 5),...[],[],[],[],[],[],[], 选项)

MATLAB返回一个迭代表和解。

X = 0 9 fval = -16

算法以a=在初始点对函数求值开始,f(0,5) = 0。在第一次迭代中,民意测验评估了以下内容。

f(0,5) + (1,0)) =f(1,5) = 0

f(0,5) + (0,1)) =f(0,6) = -7

尽快搜索调查网格点(0,6),目标函数的值小于初始点,它停止调查当前网格,并设置当前在下一次迭代点(0,6)。因此,搜索走向的局部最小值(0,9)在第一次迭代。通过查看命令行显示的前两行可以看到这一点。

Iter f-count f(x) MeshSize Method 0 1 0 1 1 3 -7 2成功的轮询

注意,模式搜索在第一次迭代时只对目标函数执行两次计算,将函数总数从1增加到3。

接下来,设置UseCompletePoll真正的然后重新运行优化。

选项。UseCompletePoll = true;[x, fval] = patternsearch (@poll_example (0 5),...[],[],[],[],[],[],[], 选项);

这一次,模式搜索在(0,0)处找到全局最小值UseCompletePoll设置为真正的,在第一次迭代时,模式搜索轮询所有四个网格点。

f(0,5) + (1,0)) =f(1,5) = 0

f(0,5) + (0,1)) =f(0,6) = -6

f(0,5) + (- 1,0)) =f(-1, 5) = 0

f(0,5) + (0, -1)) =f(0,4) = -9

由于最后一个网格点的目标函数值最低,模式搜索选择它作为下一次迭代的当前点。命令行显示的前两行显示了这一点。

Iter f-count f(x) MeshSize Method 0 1 0 1 1 5 -9 2 Poll成功

在这种情况下,目标函数在第一次迭代时被求值四次。因此,模式搜索将向(0,0)处的全局最小值移动。

下图比较了当时返回的点序列完成调查被设置为完成调查

生成图形的代码

比较Poll选项的效率

这个示例展示了几个投票选项如何在迭代和总体功能评估方面相互作用。主要结果有:

  • 对于线性约束问题,GSS比GPS或MADS更有效。

  • 是否设置UseCompletePoll真正的提高效率或降低效率尚不清楚,尽管它会影响迭代的数量。

  • 同样的,是否有2 n投票或多或少比有一个Np1民意调查也不清楚。最有效的投票是GSS正基Np1完成调查设置为.效率最低的是MADS正基Np1完成调查设置为

请注意

算法的效率取决于问题本身。GSS对于线性约束问题是有效的。然而,预测其他投票选项的效率影响是困难的,因为要知道哪种投票类型在其他约束条件下效果最好。

问题的设置

这个问题和……一样解决使用模式搜索优化实时编辑器任务.这个线性约束问题使用lincontest7工具箱自带的文件:

  1. 在MATLAB工作空间中输入以下内容。

    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”“GPSPositiveBasis2N”...“PollOrderAlgorithm”“连续”...“UseCompletePoll”、假);有趣= @lincontest7;
  3. 运行优化,命名输出结构outputgps2noff

    [x, fval exitflag, outputgps2noff] = patternsearch(有趣,x0,...Aineq、bineq Aeq,说真的 ,[],[],[], 选项);
  4. 设置选项以使用完整的投票。

    选项。UseCompletePoll = true;
  5. 运行优化,命名输出结构outputgps2non

    [x, fval exitflag, outputgps2non] = patternsearch(有趣,x0,...Aineq、bineq Aeq,说真的 ,[],[],[], 选项);
  6. 以类似的方式继续为其他轮询方法创建输出结构UseCompletePoll真正的outputgss2noffoutputgss2nonoutputgssnp1offoutputgssnp1onoutputmads2noffoutputmads2nonoutputmadsnp1off,outputmadsnp1on

检查结果

您有12次优化运行的结果。下表显示了运行的效率,以总的功能计数和迭代来衡量。你的MADS结果可能不同,因为MADS是一个随机算法。

算法 函数计算 迭代
GPS2N,完成投票 1462 136
GPS2N,完成投票 1396 96
GPSNp1,完成投票 864 118
GPSNp1,完成民意调查 1007 104
GSS2N,完成投票 758 84
GSS2N,完成投票 889 74
GSSNp1,完成投票 533 94
GSSNp1,完成poll on 491 70
MADS2N,完成投票 922 162
MADS2N,完成投票 2285 273
MADSNp1,完成投票 1155 201
MADSNp1,完成poll on 1651 201

要获取表中的第一行,输入gps2noff.output.funccountgps2noff.output.iterations.您还可以通过双击Workspace Browser中的选项来检查Variables编辑器中的选项,然后双击输出结构。

或者,您可以从输出结构访问数据。

[outputgps2noff.funccount, outputgps2noff.iterations]
Ans = 1462

从表中收集到的主要结果是:

  • 设置UseCompletePoll真正的通常会降低GPS和GSS的迭代次数,但函数计算次数的变化是不可预测的。

  • 设置UseCompletePoll真正的不一定会改变MADS的迭代次数,但会显著增加函数求值的次数。

  • 最有效的算法/选项设置,效率意味着最低的功能计数:

    1. “GSSPositiveBasisNp1”UseCompletePoll设置为真正的(函数数491)

    2. “GSSPositiveBasisNp1”UseCompletePoll设置为(函数数533)

    3. “GSSPositiveBasis2N”UseCompletePoll设置为(函数数758)

    4. “GSSPositiveBasis2N”UseCompletePoll设置为真正的(函数数889)

    其他民调方法的功能计数超过900。

  • 对于这个问题,最有效的投票是“GSSPositiveBasisNp1”UseCompletePoll设置为真正的,虽然UseCompletePoll环境的影响很小。效率最低的投票是“MADSPositiveBasis2N”UseCompletePoll设置为真正的.在这种情况下UseCompletePoll环境有很大的不同。

相关的话题