主要内容

基于解算器求解约束非线性问题

典型的优化问题

这个例子展示了如何使用最优化工具箱™求解器来解决一个有约束的非线性问题。该示例演示了典型的工作流:创建目标函数、创建约束、解决问题,并检查结果。

这个例子提供了两种解决问题的方法。一个使用优化实时编辑器任务,一种可视化的方法。另一种使用MATLAB®命令行,一种基于文本的方法。你也可以使用基于问题的方法来解决这类问题;看到解决基于问题的约束非线性问题

问题公式化:罗森布罗克函数

问题是最小化Rosenbrock函数

F ( x ) = 100 ( x 2. x 1. 2. ) 2. + ( 1. x 1. ) 2. ,

越过单位圆,即半径为1的圆盘以原点为中心。换句话说,查找x这使函数最小化F(x)在一组 x 1. 2. + x 2. 2. 1. 这个问题是一个具有非线性约束的非线性函数的最小化问题。

笔记

Rosenbrock函数是优化中的标准测试函数。它在该点上具有唯一的最小值0[1,1]。对于某些算法来说,找到最小值是一个挑战,因为函数在深弯曲的山谷中有一个浅最小值。这个问题的解决方案并不在关键点上[1,1]因为该点不满足约束。

该图显示了Rosenbrock在单位磁盘中的功能的两个视图。纵轴为对数比例;换句话说,情节显示日志(1)+F(x)).等高线位于曲面图下方。

罗森布鲁克函数,对数比例:两个视图

生成图形的代码

功能F(x)被称为目标函数。目标函数就是你想要最小化的函数。的不平等 x 1. 2. + x 2. 2. 1. 被称为限制约束限制的集合x求解器在其上搜索最小值。可以有任意数量的约束,即不等式或等式。

所有的优化工具箱优化函数都最小化一个目标函数F,应用优化程序最小化-F。有关最大化的详细信息,请参阅最大化目标

定义和解决问题使用优化实时编辑器任务

这个优化Live Editor任务允许您使用可视化方法设置和解决问题。

  1. 单击。创建一个新的活动脚本新的现场脚本按钮文件部分选项卡。

    新建实时脚本按钮

  2. 插入优化住编辑任务。单击插入然后,在密码部分中,选择任务>优化

    优化Live Editor任务

  3. 指定的问题类型在任务的第节中,选择目标>非线性约束>非线性.任务选择求解器fmincon约束非线性极小化

  4. 包括Rosenbrock函数作为目标函数。在选择问题数据在任务的第节中,选择目标函数>局部函数然后单击刚出现的一个新的本地函数出现在任务下面的一个部分。

    作用f=目标FCN(最佳输入)%的例子:%最小化罗森布罗克函数%f=100*(y-x^2)^2+(1-x)^2用你的计算编辑下面的行x=optimInput(1);y=optimInput(2);f=100*(y-x^2)^2+(1-x)^2;终止

    此函数实现Rosenbrock的函数。

  5. 选择问题数据在任务的第节中,选择目标函数>目标函数

  6. 放置初始点x0=[0;0]在MATLAB工作区中。在优化通过单击任务,然后单击分段按钮插入在任务上方的“新建”部分中,为初始点输入以下代码。

    x0 = (0, 0);
  7. 按运行该部分Ctrl+Enter. 这一行动x0进入工作区。

  8. 选择问题数据在任务的第节中,选择初始点(x0) > x0

    目标函数和x0

  9. 选择问题数据部分中,选择约束>非线性>局部函数然后单击刚出现的按钮一个新的局部函数出现在前一个局部函数的下方。

  10. 按如下所示编辑新的本地函数。

    作用[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;[];终止
  11. 选择问题数据部分中,选择unitdisk作为约束函数。

    问题数据:目标、初始点、非线性约束

  12. 要监视解算器进度,请在显示进度在任务的第节中,选择>每次迭代。此外,请选择客观价值与可行性的阴谋。

    迭代显示和目标值及可行性图函数

  13. 要运行解算器,请单击“选项”按钮在任务窗口的右上方,然后选择运行部分。绘图显示在单独的图形窗口和输出区域中。

    函数值通常随着迭代的进行而减小

    输出区域显示了一个迭代表,在解释结果

  14. 要找到解决方案,请查看任务的顶部。

    解决方案,objectiveValue从fmincon返回

    求解器放置变量解决方案objectiveValue在工作区中。通过在任务下面插入一个新的分段并输入这些行来查看它们的值。

    disp(解决方案);disp(objectiveValue)

  15. 按运行该部分Ctrl+Enter

    解决方案=[0.7864,0.6177]。objectiveValue=0.0457。

    了解铁铬镍铁合金获取结果的过程,请参阅解释结果

  16. 要显示优化要解决此问题,请单击“选项”按钮在任务窗口的右上方,然后选择控件和代码

    控件和代码

    在任务的底部,将显示以下代码。

    %设置非默认解算器选项选择= optimoptions (“fmincon”,“显示”,“国际热核实验堆”,“PlotFcn”,...“optimplotfvalconstr”);%解决[解决方案,objectiveValue]=fmincon(@objectiveFcn,x0,[],[],[],[],[],[],[],[],[],...@单位磁盘(可选);

    这段代码是用于解决命令行问题的代码,如下所述。

在命令行定义和解决问题

在命令行中解决优化问题的第一步是选择一个解算器优化决策表。对于具有非线性目标函数和非线性约束的问题,通常使用铁铬镍铁合金解算器。

咨询铁铬镍铁合金函数参考页。解算器语法如下。

[x, fval] = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项)

这个享乐nonlcon输入分别表示目标函数和非线性约束函数。

将您的问题表述如下:

  1. 用MATLAB语言将目标函数定义为函数文件或匿名函数。本例使用函数文件。

  2. 将约束定义为单独的文件或匿名函数。

函数文件是一个包含MATLAB命令并具有扩展名的文本文件M。在任何文本编辑器中创建函数文件,或使用本例中的内置MATLAB编辑器。

  1. 在命令行中,输入:

    编辑罗森布洛克
  2. 在MATLAB编辑器中,输入:

    %%ROSENBROCK(x)需要一个两列矩阵并返回一个列向量%输出是Rosenbrock函数,该函数的最小值为%(1,1)的值为0,并且在其他地方严格为正。作用f=rosenbrock(x)f=100*(x(:,2)-x(:,1)。^2.^2+(1-x(:,1))。^2;

    笔记

    罗森布洛克是一个矢量化函数,可以同时计算多个点的值。请参阅向量化。矢量化函数最适合打印。对于非矢量化版本,请输入:

    %%ROSENBROCK1(x)需要一个两元素向量并返回一个标量%输出是Rosenbrock函数,该函数的最小值为%(1,1)的值为0,并且在其他地方严格为正。作用f=rosenbrock1(x)f=100*(x(2)-x(1)^2^2+(1-x(1))^2;
  3. 使用该名称保存文件rosenbrock.m

约束函数的形式为C(x) ≤ 0ceq(x) = 0.约束 x 1. 2. + x 2. 2. 1. 不是解算器处理的形式。若要获得正确的语法,请将约束重新格式化为 x 1. 2. + x 2. 2. 1. 0

非线性约束的语法同时返回等式和不等式约束。这个例子只包含一个不等式约束,所以你必须传递一个空数组[]为等式约束函数ceq

考虑到这些因素,为非线性约束编写一个函数文件。

  1. 创建一个名为unitdisk.m包含以下代码:

    作用[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;[];
  2. 保存文件unitdisk.m

现在已经定义了目标函数和约束函数,请创建另一个铁铬镍铁合金输入。

  1. 创建选项铁铬镍铁合金使用“optimplotfvalconstr”绘图函数并返回迭代显示。

    选择= optimoptions (“fmincon”,...“PlotFcn”,“optimplotfvalconstr”,...“显示”,“国际热核实验堆”);
  2. 创建初始点。

    x0=[0];
  3. 为本例不使用的约束创建空条目。

    一个= [];b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];

打电话解决问题铁铬镍铁合金

[x, fval] = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项)
Iter F计数F(x)的一阶范数(3)一般英语英语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语口语词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇1.311e+00 1.1471.1.1 1.1.1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 e+00 1.883e-02 3.774e-03 14 54.6.414194E-02 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 3 3 3 3 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 3.136e-03 3.379e-03 21 75 4.568281e-02 0.000e+00 6.440e-05 3.974e-05 22 78 4.568281e-02 0.000e+00 8.000e-06 1.084e-07 23 81 4.567641e-02 0.000e+00 1.601e-06 2.793e-05 24 84 4.567482e-02 0.000e+00 2.023e-08 6.916e-06满足约束条件的局部最小值。优化已完成,因为目标函数在可行方向上不递减,在v范围内最优性公差的值,且约束满足在约束公差的值范围内。x=0.7864 0.6177 fval=0.0457

函数值通常随着迭代的进行而减小

退出消息告诉您,由于目标函数在约束允许的方向上的导数接近于0,并且约束满足所需的精度,因此对约束最优值的搜索就结束了。邮件中的几个短语包含了链接,指向邮件中使用的术语的更多信息。有关这些链接的详细信息,请参见增强的退出消息

解释结果

在Live Editor任务输出区域和MATLAB命令窗口中的迭代表显示了MATLAB如何在单位磁盘中搜索Rosenbrock函数的最小值。根据工具箱版本和计算平台的不同,表格可能不同。下面的描述适用于本示例中所示的表。

  • 第一列,标记Iter,是从0到24的迭代次数。铁铬镍铁合金花了24次迭代来收敛。

  • 第二列,标记为F计数,报告Rosenbrock函数的累计求值次数。最后一行显示F计数84,表明铁铬镍铁合金在寻找最小值的过程中,对罗森布罗克函数求了84次值。

  • 第三列,标记为f (x),显示目标函数的值。最终的价值,4.567482依照的最小值优化在命令窗口中退出消息的末尾运行。

  • 第四栏,可行性,对于所有迭代都是0。此列显示约束函数的值unitdisk在约束为正的每次迭代中。因为unitdisk在所有迭代中都为负值,每个迭代都满足约束。

迭代表的其他列在迭代显示

另见

|

相关话题