主要内容

模式搜索选项的影响

这个例子显示了模式搜索一些选项的影响。选项包括策划、停止标准,和其他算法控制加速解决方案。

设置模式搜索的问题

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

类型lincontest7
函数y = lincontest7 (x);% LINCONTEST7目标函数。% y = LINCONTEST7 y输入X (X)评估,确保% X是一个列向量,而目标函数得到一个行向量。% 2003 - 2004版权MathWorks公司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 6 7 8 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;

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

x0 = (2 1 0 9 1 0);

创建线性约束矩阵表示的约束Aineq * x < = BineqAeq * x =说真的。有关详细信息,请参见线性约束条件

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);说真的= [84 62 65 1];

运行patternsearch解算器,注意所需的迭代次数和功能评估解决方案。

(X1, Fval, Exitflag、输出)= patternsearch (x0, objectiveFcn Aineq, Bineq, Aeq, Beq);
优化终止:网格大小小于options.MeshTolerance。
流(的迭代的数量:% d \ n ',Output.iterations);
迭代的数量是:150
流(“功能评估的数量:% d \ n ',Output.funccount);
功能评估的数量是:934
流(“最好的函数值发现:% g \ n ',Fval);
最好的函数值发现:2189.18

添加可视化

监控优化过程通过指定选项,选择两个情节功能。绘制函数psplotbestf情节的最佳目标函数值在每一个迭代,和情节功能psplotfuncount情节的次数在每个迭代目标函数求值。这两个情节功能单元阵列。

选择= optimoptions (@patternsearch,“PlotFcn”,{@psplotbestf, @psplotfuncount});

运行patternsearch解算器,包括选择论点。因为这个问题没有上限或下限约束和非线性约束,通过空数组([]),第七、第八和第九参数。

(X1, Fval, ExitFlag、输出)= patternsearch (x0, objectiveFcn Aineq, Bineq,Aeq,说真的,[]、[][],选择);
优化终止:网格大小小于options.MeshTolerance。

图模式搜索包含2轴对象。坐标轴对象1和标题最好的函数值:2189.18包含一个类型的对象。坐标轴对象2标题总功能评估:934包含一个类型的对象。

网格选项

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

初始网格大小

网格在每个迭代张成的空间是一组搜索方向,被添加到当前点,扩展了当前的网格大小。解算器从一个初始网格的大小1默认情况下。开始初始网格大小的1/2,设置InitialMeshSize选择。

选择= optimoptions(选择,“InitialMeshSize”1/2);

网格尺度

你可以扩展网格提高差最小化的优化问题。缩放旋转模式某种程度上和尺度搜索方向。的ScaleMesh选择是(真正的默认情况下),但是你可以把它关掉,如果问题是好了。一般来说,如果问题是差了,设置这个选项真正的可以减少的数量评估函数。对于这个问题,集ScaleMesh,因为lincontest7是一个规划良好的目标函数。

选择= optimoptions(选择,“ScaleMesh”、假);

网加速器

直接搜索方法需要很多功能评估而衍生的优化方法。模式搜索算法可以快速找到附近的一个最佳点,但是可以在检测最低本身是缓慢的。的patternsearch解算器的数量可以减少通过使用加速器功能评估。当加速器(选择。AccelerateMesh = true),之后迅速解决合同网的大小达到最小网格大小。这个选项建议只对光滑的问题;在其他类型的问题,你可以失去一些精度。的AccelerateMesh选择是(默认情况下)。对于这个问题,集AccelerateMesh真正的因为目标函数是光滑的。

选择= optimoptions(选择,“AccelerateMesh”,真正的);

运行patternsearch解算器。

(X2, Fval, ExitFlag、输出)= patternsearch (x0, objectiveFcn Aineq, Bineq,Aeq,说真的,[]、[][],选择);
优化终止:网格大小小于options.MeshTolerance。

图模式搜索包含2轴对象。坐标轴对象1和标题最好的函数值:2189.18包含一个类型的对象。坐标轴对象2标题总功能评估:604包含一个类型的对象。

流(的迭代的数量:% d \ n ',Output.iterations);
迭代的数量是:68
流(“功能评估的数量:% d \ n ',Output.funccount);
功能评估的数量是:604
流(“最好的函数值发现:% g \ n ',Fval);
最好的函数值发现:2189.18

网格选项设置减少迭代的数量和功能评估的数量,并没有明显的精确度损失。

停止标准和公差

MeshTolerance是一个在筛孔尺寸公差。如果网格大小小于MeshTolerance解算器停止。StepTolerance最小公差在当前点到下一个点的变化。FunctionTolerance是最小公差函数值的变化从当前点到下一个点。

设置MeshTolerance1 e,这是十倍小于默认值。这个设置可以增加功能评估和迭代的数量,并能导致更准确的解决方案。

选择。MeshTolerance = 1 e;

搜索方法搜索模式

模式搜索算法可以使用一个额外的搜索方法在每一个迭代中,基于价值的SearchFcn选择。当你指定一个搜索方法使用SearchFcn,patternsearch执行指定的搜索第一,前网搜索。如果搜索的方法是成功的,patternsearch跳过网搜索,通常称为调查功能,迭代。如果搜索方法是不成功的在改善当前的点,patternsearch执行网格搜索。

您可以指定不同的搜索方法SearchFcn,包括searchgasearchneldermead优化算法。使用这两种搜索方法只对第一个迭代,这是默认设置。使用这两种方法在每一个迭代可能不会改善结果,可以计算昂贵。然而,您可以使用searchlhs方法,该方法生成拉丁超立方点,在每一个迭代或每10迭代。

其他的选择搜索方法包括调查等方法积极的基础2 N N + 1或积极的基础。推荐的策略是使用积极的基础N + 1(需要最多N + 1点来创建一个模式)作为一种搜索方法和积极的基础2 N(这需要2 N个点创建一个模式)作为一种调查方法。

更新选项结构来使用positivebasisnp1搜索方法。因为积极的基础2 n是默认的PollFcn选择,不设置这个选项。

选择。SearchFcn = @positivebasisnp1;

运行patternsearch解算器。

[X5, Fval ExitFlag、输出]= patternsearch (x0, objectiveFcn Aineq, Bineq, Aeq,说真的,[]、[][],选择);
优化终止:X的变化量小于options.StepTolerance。

图模式搜索包含2轴对象。坐标轴对象1和标题最好的函数值:2189.18包含一个类型的对象。坐标轴对象2标题总功能评估:558包含一个类型的对象。

流(的迭代的数量:% d \ n ',Output.iterations);
迭代的数量是:44
流(“功能评估的数量:% d \ n ',Output.funccount);
功能评估的数量是:558
流(“最好的函数值发现:% g \ n ',Fval);
最好的函数值发现:2189.18

迭代的总数和功能评估减少,即使网公差小于其先前的值和停止的停止准则求解器进行求解。

相关的话题