优化表达式
什么是优化表达式?
优化表达式是优化变量的多项式或有理组合。
X = optimvar(“x”3、3);%一个名为“x”的3 × 3变量Expr1 = sum(x,1)将x的列相加,得到一个行向量Expr2 = sum(x,2)将x的行相加,得到一个列向量Expr3 = sum(sum(x.*randn(3)))将x的元素乘以随机数相加Expr4 = randn(3)*x%用一个随机矩阵乘以xExpr5 = sum(x*diag(1:3)))将x的列乘以它们的列号,然后求和Expr6 = sum(sum(x.*x))所有变量平方和的%
优化表达式也得到了许多MATLAB®对优化变量的操作,如变量的转置或连接。有关优化表达式支持的操作列表,请金宝app参见金宝app优化变量和表达式的支持操作.
最后,给出了优化表达式fcn2optimexpr
到作用于优化变量的MATLAB函数。详细信息请参见将非线性函数转化为优化表达式.
优化建模函数不允许你指定复杂的,正
,或南
值。如果通过操作获取,该表达式将无法显示。看到表达式包含Inf或NaN.
目标函数的表达式
目标函数是大小为1 × 1的表达式。
Y = optimvar(“y”、5、3);Expr = sum(y,2);%一个5 × 1向量Expr2 = [1:5]*expr;
表达式expr
不适合用于目标函数,因为它是一个向量。表达式expr2
适用于目标函数。
请注意
如果你有一个非线性函数,它不是由多项式、有理表达式和初等函数组成的,比如经验值
,然后使用将函数转换为优化表达式fcn2optimexpr
.看到将非线性函数转化为优化表达式而且金宝app优化变量和表达式的支持操作.
若要在问题中包含作为目标函数的表达式,请使用点符号,或在创建问题时包含目标。
Prob =优化问题;概率。目标= expr2;%或同等金额问题=优化问题(“目标”, expr2);
要在循环中创建表达式,请从返回的空表达式开始optimexpr
.
x = optimvar(“x”,3,3,“类型”,“整数”、“下界”,0,' UpperBound ', 1);Y = optimvar(' Y ',3,3);Expr = optimexpr;当I = 1:3 For j = 1:3 expr = expr + y(j, I) - x(I,j);结束结束展示(expr)
y (1) + (2, 1) + y(3,1) +(1、2)+ y (2, 2) + (2) + y(1、3)+ y(2、3)+ y (3,3) - x (1,1) - (2, 1) - x (3,1) - x(1、2)- (2,2)- x (2) - (1,3) - x (2,3) - x(3、3)
你可以创建expr
没有任何循环:
x = optimvar(“x”,3,3,“类型”,“整数”、“下界”,0,' UpperBound ', 1);Y = optimvar(' Y ',3,3);Expr = sum(sum(y' - x));显示(expr)
y (1) + (2, 1) + y(3,1) +(1、2)+ y (2, 2) + (2) + y(1、3)+ y(2、3)+ y (3,3) - x (1,1) - (2, 1) - x (3,1) - x(1、2)- (2,2)- x (2) - (1,3) - x (2,3) - x(3、3)
请注意
如果你的目标函数是平方和,你想要解决
要理解它,可以写成总和(expr。^ 2)
,而不是像expr‘* expr
.内部解析器只识别显式的平方和。有关示例,请参见基于问题的非负线性最小二乘.
约束和方程的表达式
约束条件是任意两个类似的表达式其中包括以下比较操作符之一:= =
,< =
,或> =
.方程是两个使用比较运算符的可比较表达式= =
.可比较的表达式具有相同的大小,或者其中一个表达式必须是标量,即大小为1乘1。
X = optimvar(“x”3 2“类型”,“整数”,下界的0,“UpperBound”1);Y = optimvar(“y”、2、4);Z = optimvar(“z”);Constr1 = sum(x,2) >= z;
x
是3乘2的,那么总和(x, 2)
大小为3 × 1。这个表达式可与z
因为z
是标量变量。
Constr2 = y <= z;
y
大小为2乘4。再一次,y
可以与z
因为z
是标量变量。
Constr3 = (sum(x,1))' <= sum(y,2);
总和(x, 1)
大小是1乘2,那么(sum (x, 1))
大小为2乘1。总和(y, 2)
大小为2 × 1,因此这两个表达式具有可比性。
请注意
如果你有一个非线性函数,它不是由多项式、有理表达式和初等函数组成的,比如经验值
,然后使用将函数转换为优化表达式fcn2optimexpr
.看到将非线性函数转化为优化表达式而且金宝app优化变量和表达式的支持操作.
要在问题中包含约束,请使用点表示法并为每个约束指定不同的名称。
Prob =优化问题;prob.Constraints。构造1 =构造1;prob.Constraints。构造2 =构造2;prob.Constraints。构造3 =构造3;
类似地,要在一个问题中包含方程,使用点符号,并给每个方程一个不同的名称。
Prob = eqnproblem;prob.Equations。Eq1 = Eq1;prob.Equations。Eq2 = eq12
在创建问题时,还可以包含约束条件或方程。例如,假设有10对正变量,它们的和不超过1。
X = optimvar(“x”10 2下界的, 0);问题=优化问题(“约束”,sum(x,2) <= 1);
若要在循环中创建约束或方程表达式,请从返回的空约束表达式开始optimconstr
,optimeq
,或optimineq
.
x = optimvar(“x”,3、2、“类型”、“整数”、“下界”,0,' UpperBound ', 1);Y = optimvar(' Y ',2,4);Z = optimvar(' Z ');Const1 = optimconstr(2);因为我= 1:2 const1 (i) = x(我)- x(我)+ 2 * z > = 4 * (y(我,2)+ y(我,3)+ 2 * y(我,4));终端显示(const1)
(1,1) x (1,1) - x (3,1) + 2 * z - 4 * y(1、2)- 4 * y (1,3) - 8 * y(1、4)> = 0 (2,1)x(1、2)- x (3 2) + 2 * z - 4 * y (2, 2) - 4 * y (2,3) - 8 * y(2、4)> = 0
你可以创建const1
没有任何循环。
x = optimvar(“x”,3、2、“类型”、“整数”、“下界”,0,' UpperBound ', 1);Y = optimvar(' Y ',2,4);Z = optimvar(' Z ');: const1 = x (1) - x (3:) + 2 * z > = 4 * (y (: 1) + y (:, 3) + 2 * y (:, 4)) ';显示(const1)
(1,1) x (1,1) - x (3,1) + 2 * z - 4 * y (1,1) - 4 * y (1,3) - 8 * y(1、4)> = 0(1、2)x(1、2)- x (3 2) + 2 * z - 4 * y (2,1) - 4 * y(2、3)- 8 * y(2、4)> = 0
提示
为了获得最佳性能,在变量定义中包括变量边界,而不是在约束表达式中。此外,在不使用循环的情况下创建约束通常会提高性能。看到创造有效的优化问题.
谨慎
问题中的每个约束表达式必须使用相同的比较。例如,下面的代码会导致一个错误,因为cons1
使用< =
相比之下,cons2
使用> =
的比较,cons1
而且cons2
在同一个表达式中。
Prob =优化问题;X = optimvar(“x”,2,下界的, 0);con1 = x(1) + x(2) <= 10;con2 = 3*x(1) + 4*x(2) >= 2;概率。约束= [con1; con2];这一行将抛出一个错误
可以通过为约束使用单独的表达式来避免此错误。
prob.Constraints。con1 = con1;prob.Constraints。con2 = con2;
优化变量具有处理行为
另请参阅
optimvar
|显示
|OptimizationConstraint
|OptimizationExpression