绘制函数

绘制一个优化过程中执行

您可以在求解器执行期间绘制各种进度度量。设置PlotFcn名称 - 值对中optimoptions,并指定求解器在每次迭代时调用的一个或多个绘图函数。传递函数句柄或函数句柄的单元格数组。

有可用的各种预定义的情节功能。看到:

  • PlotFcn选项说明在求解器函数参考页

  • 优化应用程序>选项>绘图功能

您还可以使用自定义编写的绘图函数。使用与输出函数相同的结构编写函数文件。有关此结构的更多信息,请参见输出函数的语法

使用绘图功能

这个例子展示了如何使用plot函数来查看fmincon内点算法。这个问题从一开始就被解决了求解一个约束非线性问题,基于求解器。的例子说明了第一部分如何运行使用优化程序优化。第二部分展示了如何运行命令行的优化。

请注意

优化应用程序警告说,它将在未来的版本中被删除。

使用优化应用程序运行优化

  1. 写非线性目标和约束功能,包括衍生物:

    函数[f g H] = rosenboth(x) % rosenboth返回Rosenbrock函数%的y值以及函数梯度的g值和Hessian的H值。f = 100*(x(2) -x(1) ^2) + (1-x(1))^2;如果nargout > 1 g = (-400 * (x (2) - x (1) ^ 2) * x (1) 2 * (1 - x (1));200 * (x (2) - x (1) ^ 2)];如果nargout > 2 H = (1200 * (1) ^ 2 - 400 * x (2) + 2, -400 * x (1);-400 * x (1), 200);结束结束

    此文件另存为rosenboth.m

    函数[c,ceq,gc,gceq] = unitdisk2(x) % unitdisk2返回以%[0 0]为中心半径为1的磁盘的约束函数%的值。它还返回梯度。c = x(1)²+ x(2)²- 1;[];如果nargout > 2 gc = [2*x(1);2*x(2)];gceq = [];结束

    此文件另存为unitdisk2.m

  2. 输入启动优化应用程序optimtool在命令行。

  3. 设置优化:

    • 选择fmincon解算器。

    • 选择内点算法。

    • 设定目标函数@rosenboth

    • 选择提供的梯度对目标函数求导。

    • 将起始点设置为[0 0]

    • 设非线性约束函数为@unitdisk2

    • 选择提供的梯度对于非线性约束导数。

    你的问题设置和结果面板应与下图匹配。

  4. 选择三个plot函数选项窗格:当前点,函数值一阶最优

  5. 点击开始按钮下方运行求解程序并查看结果

  6. 优化应用程序的输出如下所示。

    另外,下面三个图形出现在一个单独的窗口中。

  • “当前点”情节图形方式显示极小[0.786,0.618],据报道为最后一点在里面运行求解程序并查看结果窗格。此图在每次迭代时更新,显示中间迭代。

  • “当前函数值”图显示了所有迭代的目标函数值。这个图表几乎是单调的fmincon在几乎每次迭代中减少目标函数。

  • “一阶最优性”图显示了所有迭代的一阶最优性测度。

从运行命令行优化

  1. 写出非线性目标函数和约束函数,包括导数,如使用优化应用程序运行优化

  2. 创建一个期权结构,包括调用三个情节功能:

    选择= optimoptions (@fmincon、“算法”、“内点”,…“SpecifyObjectiveGradient”,的确,“SpecifyConstraintGradient”,真的,PlotFcn, {@optimplotx,……@optimplotfval @optimplotfirstorderopt});
  3. 调用fmincon:

    X = fmincon(@rosenboth,[0 0],[],[],[],[],[],[],... @ unitdisk2,选项)
  4. fmincon输出如下:

    找到满足约束条件的局部极小值。优化完成是因为目标函数在可行方向上不减少,在函数容差的默认值范围内,且约束满足在约束容差的默认值范围内。x = 0.7864 0.6177

    fmincon也显示三个情节的功能,在端部示出使用优化应用程序运行优化

相关话题