轮询类型
在广义模式搜索中使用一个完整的调查
作为一个例子,考虑下面的函数。
下面的图显示了函数的一个阴谋。
函数的全局最小值出现在(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在编辑器优化生活的任务。这个线性约束问题的二次目标函数。
输入以下到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;
设置初始选择和目标函数。
选择= optimoptions (“patternsearch”,…“PollMethod”,“GPSPositiveBasis2N”,…“PollOrderAlgorithm”,“连续”,…“UseCompletePoll”、假);
运行优化、命名的
输出
结构outputgps2noff
。[x, fval exitflag, outputgps2noff] = patternsearch(有趣,x0,…Aineq、bineq Aeq,说真的,[],[],[],选项);
设置选项来使用一个完整的调查。
选项。UseCompletePoll = true;
运行优化、命名的
输出
结构outputgps2non
。[x, fval exitflag, outputgps2non] = patternsearch(有趣,x0,…Aineq、bineq Aeq,说真的,[],[],[],选项);
继续以这样的方式创建输出结构的其他调查方法
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.funccount
和gps2noff.output.iterations
。你也可以检查变量编辑器中选择通过双击工作区中的选项浏览器,然后双击输出
结构。
或者,您可以访问的数据输出结构。
[outputgps2noff.funccount, outputgps2noff.iterations]
ans = 1462 136
主要的结果从表:
设置
UseCompletePoll
来真正的
一般降低GPS和GSS的迭代次数,但是数量的变化函数评估是不可预测的。设置
UseCompletePoll
来真正的
不一定改变为契尼的迭代次数,但大幅增加的数量评估函数。最有效的算法/选项设置,最低效率意义函数数:
“GSSPositiveBasisNp1”
与UseCompletePoll
设置为真正的
(函数数491)“GSSPositiveBasisNp1”
与UseCompletePoll
设置为假
(函数数533)“GSSPositiveBasis2N”
与UseCompletePoll
设置为假
(函数数758)“GSSPositiveBasis2N”
与UseCompletePoll
设置为真正的
(函数数889)
其他调查方法函数数量超过900。
对于这个问题,最有效的调查
“GSSPositiveBasisNp1”
与UseCompletePoll
设置为真正的
,虽然UseCompletePoll
设置只有很小的区别。最有效的调查“MADSPositiveBasis2N”
与UseCompletePoll
设置为真正的
。在这种情况下,UseCompletePoll
设置一个实质性的区别。