packfcn
说明
将目标函数 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
输入参数
obj
— 目标函数
函数句柄 | 函数名称
目标函数,指定为函数句柄或函数名称。
结果函数 objconstr
包含字段 Fval
。
objconstr.Fval = obj
数据类型: char
| string
| function_handle
nlconst
— 非线性约束函数
函数句柄 | 函数名称
非线性约束函数,指定为函数句柄或函数名称。一般来说,非线性约束函数返回两个输出。
[c,ceq] = nlconst(x)
输出 c
是一个向量或数组,其条目表示不等式约束 c(x) ≤ 0。输出 ceq
是一个向量或数组,其条目表示不等式约束 c(x) = 0。packfcn
丢弃 ceq
输出。
结果函数 objconstr
包含字段 Ineq
。
objconstr.Ineq = c
数据类型: char
| string
| function_handle
输出参量
objconstr
— 组合目标和约束函数
函数句柄
组合目标和约束函数,作为函数句柄返回。函数 objconstr(x)
返回一个带有字段 Fval
和 Ineq
的结构体。
objconstr.Fval(x)
是目标函数obj(x)
。objconstr.Ineq(x)
是非线性不等式约束函数c(x)
,是nlconst(x)
的第一个输出。
版本历史记录
在 R2020a 中推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)