OptimizationExpression
关于优化变量的算术或函数表达式
说明
OptimizationExpression
是关于优化变量的算术或函数表达式。将 OptimizationExpression
用作目标函数,或用作约束或方程中不等式或等式的一部分。
提示
有关完整的工作流,请参阅基于问题的优化工作流或基于问题的方程求解工作流。
创建对象
通过对 OptimizationVariable
对象执行操作来创建优化表达式。使用标准 MATLAB® 算术(包括幂、索引和优化变量的串联)来创建表达式。请参阅优化变量和表达式支持的运算和示例。
您也可以使用 fcn2optimexpr
基于应用于优化变量的 MATLAB 函数创建优化表达式。有关示例,请参阅基于非线性函数创建表达式和基于问题的非线性优化。
使用 optimexpr
创建一个空的优化表达式。通常,您可以继续使用循环方式填充表达式。有关示例,请参阅通过循环创建优化表达式和 optimexpr
函数参考页。
创建表达式后,将其用作目标函数或者约束或方程的一部分。有关示例,请参阅 solve
函数参考页。
属性
IndexNames
— 索引名称
''
(默认) | 字符串元胞数组 | 字符向量元胞数组
索引名称,指定为字符串元胞数组或字符向量。有关使用索引名称的信息,请参阅优化变量的命名索引。
数据类型: cell
Variables
— 对象中的优化变量
OptimizationVariable
对象的结构体
示例
通过算术运算创建优化表达式
通过对优化变量执行算术运算来创建优化表达式。
x = optimvar('x',3,2);
expr = sum(sum(x))
expr = Linear OptimizationExpression x(1, 1) + x(2, 1) + x(3, 1) + x(1, 2) + x(2, 2) + x(3, 2)
f = [2,10,4]; w = f*x; show(w)
(1, 1) 2*x(1, 1) + 10*x(2, 1) + 4*x(3, 1) (1, 2) 2*x(1, 2) + 10*x(2, 2) + 4*x(3, 2)
通过索引和数组运算创建优化表达式
通过转置优化变量来创建优化表达式。
x = optimvar('x',3,2);
y = x'
y = 2x3 Linear OptimizationExpression array with properties: IndexNames: {{} {}} Variables: [1x1 struct] containing 1 OptimizationVariable See expression formulation with show.
简单地对优化数组进行索引不会创建表达式,而是创建一个引用原始变量的优化变量。为此,请创建一个变量 w
,它是 x
的第一行和第三行。请注意,w
是优化变量,而不是优化表达式。
w = x([1,3],:)
w = 2x2 OptimizationVariable array with properties: Read-only array-wide properties: Name: 'x' Type: 'continuous' IndexNames: {{} {}} Elementwise properties: LowerBound: [2x2 double] UpperBound: [2x2 double] Reference to a subset of OptimizationVariable with Name 'x'. See variables with show. See bounds with showbounds.
通过串联优化变量来创建优化表达式。
y = optimvar('y',4,3); z = optimvar('z',4,7); f = [y,z]
f = 4x10 Linear OptimizationExpression array with properties: IndexNames: {{} {}} Variables: [1x1 struct] containing 2 OptimizationVariables See expression formulation with show.
通过循环创建优化表达式
使用 optimexpr
创建一个空表达式,然后使用循环方式填充该表达式。
y = optimvar('y',6,4); expr = optimexpr(3,2); for i = 1:3 for j = 1:2 expr(i,j) = y(2*i,j) - y(i,2*j); end end show(expr)
(1, 1) y(2, 1) - y(1, 2) (2, 1) y(4, 1) - y(2, 2) (3, 1) y(6, 1) - y(3, 2) (1, 2) y(2, 2) - y(1, 4) (2, 2) y(4, 2) - y(2, 4) (3, 2) y(6, 2) - y(3, 4)
基于非线性函数创建表达式
创建与目标函数对应的优化表达式
x = optimvar('x');
f = x^2/10 + exp(-exp(-x))
f = Nonlinear OptimizationExpression ((x.^2 ./ 10) + exp((-exp((-x)))))
从点 x0 = 0
开始,找到最小化 fun
的点。
x0 = struct('x',0); prob = optimproblem('Objective',f); [sol,fval] = solve(prob,x0)
Solving problem using fminunc. Local minimum found. Optimization completed because the size of the gradient is less than the value of the optimality tolerance.
sol = struct with fields:
x: -0.9595
fval = 0.1656
如果 f
不是受支持的函数,您可以使用 fcn2optimexpr
对其进行转换。请参阅优化变量和表达式支持的运算和将非线性函数转换为优化表达式。
f = @(x)x^2/10 + exp(-exp(-x)); fun = fcn2optimexpr(f,x)
fun = Nonlinear OptimizationExpression ((x.^2 ./ 10) + exp((-exp((-x)))))
prob = optimproblem('Objective',fun);
[sol,fval] = solve(prob,x0)
Solving problem using fminunc. Local minimum found. Optimization completed because the size of the gradient is less than the value of the optimality tolerance.
sol = struct with fields:
x: -0.9595
fval = 0.1656
Copyright 2018–2020 The MathWorks, Inc.
计算在某点处优化表达式的值
创建一个包含两个变量的优化表达式。
x = optimvar("x",3,2); y = optimvar("y",1,2); expr = sum(x,1) - 2*y;
计算该表达式在某点处的值。
xmat = [3,-1; 0,1; 2,6]; sol.x = xmat; sol.y = [4,-3]; val = evaluate(expr,sol)
val = 1×2
-3 12
详细信息
算术运算
有关优化表达式支持的运算的列表,请参阅优化变量和表达式支持的运算。
版本历史记录
在 R2017b 中推出R2024a: 使用 "like"
语法创建优化表达式
您可以使用 "like"
语法创建优化表达式。此功能可以简化优化表达式的初始化,如使用 "like" 语法初始化数组所示。
另请参阅
fcn2optimexpr
| evaluate
| optimexpr
| OptimizationVariable
| show
| solve
| write
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)