Main Content

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

此示例脚本帮助您使用基于求解器的优化实时编辑器任务进行优化或方程求解。请根据您自己的具体问题修改脚本。

该脚本求解具有非线性约束的非线性优化问题。

包括参数或数据

通常,您有数据或值要传递给求解器。将这些值放入输入节(其中显示 x0),并通过选择节 > 运行节或按 Control+Enter 来运行该节。

设置优化的初始点 x0 和定标 a

x0 = [2;1];
a = 100;

在继续之前,通过运行此节,将 x0 值和任何其他问题数据放入工作区中

优化实时编辑器任务

通常,您可以通过在实时编辑器选项卡中选择任务 > 优化,或在插入选项卡中选择任务 > 优化,将优化实时编辑器任务放入脚本中。然后您将看到以下选择项(这只是图示,并非真实任务):

optimizelet_choose.png

要获得基于求解器的任务,请点击基于求解器

以下基于求解器的任务包含目标函数和非线性约束函数。要更改这些函数,请编辑任务下方的函数列表。

要更改约束,请选择适当的约束类型,并在输入框中输入值。您可能需要在上面包含 x0 的节中输入值,然后运行该节以将值放入工作区中。

通过点击左侧的斜纹条形,或选择运行节 > 运行节,或按 Control+Enter,运行该任务。

Live Task

Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.

结果

Optimize 将解保存到工作区变量 solution,并将解处的目标函数值保存到工作区变量 objectiveValue。您可以在 Optimize 任务的顶部看到这些变量名称并对其进行修改。

查看这些变量。

solution
solution = 2×1

    1.1413
    1.3029

objectiveValue
objectiveValue = 0.0200

查看在该解处的非线性约束函数值。

[ccons,ceqcons] = constraintFcn(solution)
ccons = 1×2

   -2.0000   -0.0000

ceqcons =

     []

辅助函数 - 局部函数

以下代码创建目标函数。针对您的问题修改以下代码。

function f = objectiveFcn(x,a)
f = a*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
end

以下代码创建约束函数。针对您的问题修改以下代码。

function [c,ceq] = constraintFcn(x)
c(1) = x(1)^2 + x(2)^2 - 5;
c(2) = 3 - x(1)^2 - x(2)^2;
ceq = [];  % No equality constraints
end

另请参阅

相关主题