Main Content

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

packfcn

结合目标和非线性约束函数

自 R2020a 起

说明

示例

objconstr = packfcn(obj,nlconst) 将目标函数 obj 和非线性约束函数 nlconst 组合成函数 objconstr。函数 objconstr(x) 返回适合组合 surrogateopt 目标和约束函数的结构体。有关 surrogateopt 结构体语法与其他求解器之间的转换信息,请参阅 在 surrogateopt 形式和其他求解器形式之间转换非线性约束

示例

全部折叠

将示例 使用优化实时编辑器任务或求解器的有约束非线性问题 中的目标和约束组合成适合 surrogateopt 的形式。

将目标函数创建为匿名函数 ros(x)

ros = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;

创建非线性约束辅助函数 unitdisk,它出现在本示例的末尾。将辅助函数以名称 unitdisk.m 保存在当前文件夹中。

将目标函数和非线性约束函数组合成一个适合 surrogateopt 的函数。

objconstr = packfcn(ros,@unitdisk);

指定边界并使用 surrogateopt 解决问题。

lb = [-2 -2];
ub = -lb;
[x,fval] = surrogateopt(objconstr,lb,ub)

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×2

    0.7865    0.6183

fval = 0.0456

以下代码会创建 unitdisk 辅助函数。

function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [ ];
end

输入参数

全部折叠

目标函数,指定为函数句柄或函数名称。

结果函数 objconstr 包含字段 Fval

objconstr.Fval = obj

数据类型: char | string | function_handle

非线性约束函数,指定为函数句柄或函数名称。一般来说,非线性约束函数返回两个输出。

[c,ceq] = nlconst(x)

输出 c 是一个向量或数组,其条目表示不等式约束 c(x) ≤ 0。输出 ceq 是一个向量或数组,其条目表示不等式约束 c(x) = 0。packfcn 丢弃 ceq 输出。

结果函数 objconstr 包含字段 Ineq

objconstr.Ineq = c

数据类型: char | string | function_handle

输出参量

全部折叠

组合目标和约束函数,作为函数句柄返回。函数 objconstr(x) 返回一个带有字段 FvalIneq 的结构体。

  • objconstr.Fval(x) 是目标函数 obj(x)

  • objconstr.Ineq(x) 是非线性不等式约束函数 c(x),是 nlconst(x) 的第一个输出。

版本历史记录

在 R2020a 中推出