主要内容

轮询类型

在广义模式搜索中使用一个完整的调查

作为一个例子,考虑下面的函数。

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 + (2) ^ 2 < = 25 z = x (1) ^ 2 + (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

该算法首先在初始点=评估函数,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方式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方法2 0 1 0 1 1 5 9成功的调查

在这种情况下,目标函数在第一个迭代评估的四倍。因此,模式搜索走向全球最低(0,0)。

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

代码生成图

比较效率的调查选项

这个例子展示了几个调查选项如何交互的迭代和总评价函数。主要结果是:

  • GSS比GPS或更高效马德斯线性约束问题。

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

  • 同样,是否拥有一个2 n调查比有或多或少有效Np1民意调查也不清楚。最有效的调查GSS Np1积极的基础完成调查设置为。最有效的是马德斯Np1积极的基础完成调查设置为

请注意

一个算法的效率取决于问题本身。GSS是有效线性约束问题。然而,预测效率影响的其他调查选项是困难的,是知道这调查类型与其他约束效果最好。

问题的设置

问题是一样的解决使用patternsearch在编辑器优化生活的任务。这个线性约束问题的二次目标函数。

  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];说真的= [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 ]'; fun = @(x)0.5*x'*H*x + f'*x;
  2. 设置初始选择和目标函数。

    选择= optimoptions (“patternsearch”,“PollMethod”,“GPSPositiveBasis2N”,“PollOrderAlgorithm”,“连续”,“UseCompletePoll”、假);
  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真正的:outputgss2noff,outputgss2non,outputgssnp1off,outputgssnp1on,outputmads2noff,outputmads2non,outputmadsnp1off,outputmadsnp1on

检查结果

你有12日优化运行的结果。下面的表显示了运行的效率,以总函数计算和迭代。马德斯结果可能不同,因为尼是一个随机算法。

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

获得,表中的第一行,输入gps2noff.output.funccountgps2noff.output.iterations。你也可以检查变量编辑器中选择通过双击工作区中的选项浏览器,然后双击输出结构。

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

[outputgps2noff.funccount, outputgps2noff.iterations]
ans = 1462 136

主要的结果从表:

  • 设置UseCompletePoll真正的一般降低GPS和GSS的迭代次数,但是数量的变化函数评估是不可预测的。

  • 设置UseCompletePoll真正的不一定改变为契尼的迭代次数,但大幅增加的数量评估函数。

  • 最有效的算法/选项设置,最低效率意义函数数:

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

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

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

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

    其他调查方法函数数量超过900。

  • 对于这个问题,最有效的调查“GSSPositiveBasisNp1”UseCompletePoll设置为真正的,虽然UseCompletePoll设置只有很小的区别。最有效的调查“MADSPositiveBasis2N”UseCompletePoll设置为真正的。在这种情况下,UseCompletePoll设置一个实质性的区别。

相关的话题