主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

有效使用基于求解器的优化实时编辑器任务

有效地组织任务

优化实时编辑器任务放置在实时脚本中,该任务上方有一个部分,下方有两个或多个部分。要在实时编辑器中打开优化任务,请点击插入选项卡,然后选择任务 > 优化。使用插入选项卡上的分节符按钮插入新节。

Live Script with section for data on top, then Optimize Live Editor task, then section for output, then section for functions.

默认情况下,选择任务窗口右侧的 Output on right 按钮。

Output on right button

此选择将输出置于任务的右侧。要将输出置于任务下方,请选择 Output inline 按钮。

Output inline button

  • 在任务上方,包含优化所需数据的部分。例如,初始点 x0、任何约束矩阵(如 Aeqbeq)以及目标或非线性约束函数的额外参数都属于该任务上方的部分。数据必须包含在任务上方的部分中,以便您可以成功运行整个脚本,例如,在保存并重新加载之后。在脚本需要访问数据之前,数据会加载到工作区中。

  • 将任务的输出放在任务下方的部分。例如,在任务将 solutionobjectiveValue 输出写入工作区后,显示本节中的输出。您可以在任务下方包含多个部分来查看和处理任务的结果。

  • 最后部分包含该问题的所有局部函数。本地函数必须包含在直播脚本的末尾。但是,如果您有从多个脚本访问的函数,则将它们作为单独的文件包含在 MATLAB® 路径中会更加方便。

将优化变量放在一个向量中,将数据放在其他变量中

Optimize 是一个基于求解器的优化和方程求解的前端。因此,它要求将所有变量放在一个向量中,如 编写标量目标函数 中所述。例如,假设您的目标函数是

f(x,y,z,w)=(x2+y4)exp((z/(1+x2))wexp(z).

在这个示例中,变量 xz 是优化变量,变量 yw 是固定数据。您可以在优化任务下方的部分中表示您的函数,如下所示。

function f = myfun(vars,y,w)
x = vars(1);
z = vars(2);
f = (x^2 + y^4)*exp(-z/(1 + x^2))*w*exp(-z);
end

在任务上方的部分中定义变量 yw 的值。

y = log(pi);
w = 2/3;

Ctrl+Enter 运行任务上方的部分,将 yw 放入工作区。然后在任务的选择问题数据部分中选择适当的输入。

Optimization input = vars, Fixed input y = y, Fixed input w = w.

指定问题类型以获取推荐的求解器

任务的指定问题类型部分提供了用于选择目标函数类型和约束类型的按钮。选择这些项目后,优化会减少可用求解器的数量,并显示一个推荐的求解器。例如,对于具有最小二乘目标和上下界的问题,优化显示建议使用 lsqnonlin 求解器。

Least squares objective, lower and upper bounds leads to lsqnonlin as recommended

要使用当前选择中不可用的求解器,请点击每个选定的按钮取消选择所有问题类型按钮。

运行任务的方法

您可以通过多种方式运行优化实时编辑器任务:

  • 点击任务窗口右上角的选项按钮,然后选择 Run Section

    Run section from menu

  • 点击任务,然后按 Ctrl+Enter

  • 通过选中 Autorun 复选框(位于任务窗口右上角的选项按钮旁边),将任务设置为在任何更改后自动运行。如果您的任务很耗时,请不要选择此设置。

    Autorun section

  • 通过点击任务左侧的条纹条来运行包含该任务的部分。

    Striped bar to the left of the task

  • 通过点击实时编辑器选项卡中的运行按钮或按 F5 来运行整个实时脚本。

    Run button

查看求解器进度

实时编辑器任务使您能够轻松监控求解器的进度。为了确保求解器正常运行,请至少查看目标函数值图。此外,通过使用绘图函数,您可以停止求解器而不会丢失任何数据。

Plot the objective value

查看等效代码

优化在内部创建代码以匹配视觉选择。您可以通过点击选项按钮 并选择控件和代码仅代码来查看代码。

Selecting Controls and Code

代码出现在任务下方。

lsqnonlin options and run syntax

您可以选择并复制此代码以进行修改,以便在其他环境中使用。

要将任务从可视化界面转换为可用代码,请选择转换为代码。此选项将删除可视化的优化界面并允许您使用代码继续。

Convert task menu item

另请参阅

主题