主要内容

模式搜索选项的影响

此示例显示了某些选项进行模式搜索的效果。该选项包括绘图,停止标准和其他算法控制,用于加速解决方案。

为模式搜索设置问题

最小化的问题是六个变量对线性平等和不等式约束的二次函数。目标函数,LinconteSt7.,包含在全局优化工具箱中。

类型LinconteSt7.
函数y = lincontest7(x);%Lincontest7目标函数。%y = lincontest7(x)评估输入x的y。确保x是列%向量,而客观函数得到行向量。2003-2004%版权所有2003-2004 MathWorks,Inc。x = x';%在H和F(来自Web未知源)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 ]'; y = 0.5*x'*H*x + f'*x;

指定功能句柄@ lincontest7.作为目标函数。

ObjectiveFCN = @ Lincontest7;

目标函数接受长度六的行向量。指定优化的初始点。

x0 = [2 1 0 9 1 0];

创建表示约束的线性约束矩阵Aineq * x <= bineqaeq * x = beq。有关详细信息,请参阅线性约束

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 8;1 0 0 0 0 0];beq = [84 62 65 1];

跑过PatternSearch.求解器,并注意到达解决方案所需的迭代和函数评估的数量。

[X1,FVAL,EXITFLAG,输出] = PATCHERSEARCH(ObjectiveFCN,X0,Aineq,Bineq,AEQ,BEQ);
优化终止:网格尺寸小于options.meshtolerance。
fprintf(“迭代的数量是:%d \ n',输出。
迭代的数量是:132
fprintf('函数评估的数量是:%d \ n',产出.Funccount);
函数评估的数量是:1531
fprintf('找到的最佳功能值是:%g \ n',fval);
找到的最佳功能值为:2189.03

添加可视化

通过指定选择两个绘图函数的选项来监视优化过程。绘图功能psplotbestf.在每次迭代中绘制最佳的客观函数值,并绘制函数psplotfuncount.绘制客观函数在每次迭代时评估目标函数的次数。在单元格数组中设置这两个绘图函数。

opts = Optimoptions(@patternsearch,'plotfcn',{@ psplotbestf,@ psplotfuncound});

跑过PatternSearch.求解器,包括选择争论。因为问题没有上限或下限约束,而且没有非线性约束,则传递空数组([])第七,第八和第九个论点。

[x1,fval,出口,输出] = patternsearch(ObjectFCN,X0,Aineq,Bineq,......AEQ,Beq,[],[],[],选择);
优化终止:网格尺寸小于options.meshtolerance。

图案模式搜索包含2个轴。具有标题最佳功能值的轴1:2189.03包含类型线的对象。标题总功能评估的轴2:1531包含类型线的对象。

网格选项

模式搜索涉及在网格中的点处评估目标函数。网格的大小可以影响解决方案的速度。您可以使用选项控制网格的大小。

初始网格尺寸

每个迭代的网格是一组搜索方向的跨度,其被添加到当前点,由当前网格尺寸缩放。求解器从初始网格大小开始1默认。启动初始网格尺寸10.,设置initialmeshsize.选项。

选项= Optimoptions(OPTS,'initialmeshsize',10);

网格缩放

您可以扩展网格以提高最小化缩放的优化问题的最小化。缩放在某种程度上旋转模式并沿着搜索方向缩放。这Scalemesh.选项已开启(真的)默认情况下,如果问题缩放良好,则可以关闭它。一般情况下,如果问题缩放不佳,将此选项设置为真的可以减少函数评估的数量。对于这个问题,设置Scalemesh.错误的, 因为LinconteSt7.是一个良好的目标函数。

选择= Optimoptions(选择,'scalemesh',错误的);

网格加速器

与基于衍生的优化方法相比,直接搜索方法需要许多功能评估。模式搜索算法可以快速找到最佳点的邻域,但在检测到最小本身时可以慢。这PatternSearch.求解器可以使用加速器减少功能评估的数量。当加速器打开时(opts.acceleratemesh = true),求解器在达到最小网格尺寸后快速收缩网状尺寸。此选项仅适用于平滑问题;在其他类型的问题中,您可以减掉一些准确性。这加速选项已关闭(错误的) 默认。对于这个问题,设置加速真的因为目标函数是平滑的。

选择= Optimoptions(选择,'Acceleratemesh',真的);

跑过PatternSearch.求解器。

[x2,fval,出口,输出] = patternsearch(ObjectFCN,X0,Aineq,Bineq,......AEQ,Beq,[],[],[],选择);
优化终止:网格尺寸小于options.meshtolerance。

图案模式搜索包含2个轴。具有标题最佳功能值的轴1:2189.03包含类型线的对象。带有标题总功能评估的轴2:893包含类型线的对象。

fprintf(“迭代的数量是:%d \ n',输出。
迭代的数量是:86
fprintf('函数评估的数量是:%d \ n',产出.Funccount);
功能评估的数量是:893
fprintf('找到的最佳功能值是:%g \ n',fval);
找到的最佳功能值为:2189.03

网格选项设置减少了迭代次数和函数评估的数量,并且没有明显的准确性损失。

停止标准和宽容

meshtolerance.是对网格尺寸的宽容。如果网格尺寸小于meshtolerance.,求解器停止。StepTolerance.是对当前点变化到下一个点的最小容差。functiontolerance.是对当前点到下一个点的函数值的变化的最小容差。

设定meshtolerance.到1E-7,比默认值小十倍。此设置可以增加功能评估和迭代的数量,并导致更准确的解决方案。

opts.meshtolerance = 1e-7;

模式搜索中的搜索方法

模式搜索算法可以根据每个迭代使用额外的搜索方法,基于searchfcn.选项。指定搜索方法时使用searchfcn.PatternSearch.在网格搜索之前首先执行指定的搜索。如果搜索方法成功,PatternSearch.跳过Mesh搜索,通常称为轮询函数,用于迭代。如果搜索方法在改进当前点时不成功,PatternSearch.执行网格搜索。

您可以指定不同的搜索方法searchfcn., 包括searkga.searchneldermead.,这是优化算法。仅使用这两个搜索方法仅用于第一次迭代,这是默认设置。在每次迭代时使用这些方法中的任何一个可能不会改善结果,并且可以计算得昂贵。但是,你可以使用searchlhs.在每次迭代或可能每10个迭代时生成拉丁超立方点的方法。

搜索方法的其他选择包括轮询方法,例如正基N + 1或正面为2N。推荐的策略是使用正面基础N + 1(需要大多数n + 1点来创建模式)作为搜索方法和正面基础2n(需要2n点以创建模式)作为轮询方法。

更新要使用的选项结构呈阳性白细胞腺素作为搜索方法。因为积极的基础2N是默认的pollfcn.选项,请勿设置该选项。

opts.searchfcn = @ positionbasisnp1;

跑过PatternSearch.求解器。

[x5,fval,出口,输出] = patternsearch(ObjectiveFCN,X0,Aineq,Bineq,AEQ,BEQ,......[],[],[],选择);
优化终止:网格尺寸小于options.meshtolerance。

图案模式搜索包含2个轴。具有标题最佳功能值的轴1:2189.03包含类型线的对象。带有标题总功能评估的轴2:838包含类型线的对象。

fprintf(“迭代的数量是:%d \ n',输出。
迭代的数量是:66
fprintf('函数评估的数量是:%d \ n',产出.Funccount);
函数评估的数量是:838
fprintf('找到的最佳功能值是:%g \ n',fval);
找到的最佳功能值为:2189.03

即使网格公差小于其先前值,迭代和函数评估的总数降低,并且是停止求解器的停止标准。

相关话题