优化表达式
什么是优化表达式?
优化表达式是优化变量的多项式或有理组合。
x = optimvar (“x”3、3);%一个名为'x'的3 × 3变量expr1 =总和(x, 1)将x的列相加,得到行向量。expr2 =总和(x, 2)将x的行相加,得到一个列向量。expr3 =总和(总和(x。* randn (3)))将x的元素乘以随机数expr4 = randn (3) * x%用一个随机矩阵乘以xexpr5 =总和(总和(x *诊断接头(1:3)))%将x的列乘以它们的列号,并将结果相加expr6 =总和(sum (x。* x))%所有变量的平方和
优化表达式也可以从MATLAB中得到®对优化变量的操作,如变量的转置或串联。有关受支持的优化表达式操作列表,请参见优化变量和表达式的支持操作.
最后,优化表达式可以应用的结果fcn2optimexpr
到作用于优化变量的MATLAB函数。有关详细信息,请参见将非线性函数转化为优化表达式.
优化建模函数不允许您指定复杂的,正
,或南
值。如果通过操作获取该表达式,则该表达式无法显示。看到表达式包含Inf或NaN.
目标函数表达式
目标函数是大小为1乘1的表达式。
y = optimvar (“y”、5、3);expr = (y, 2)之和;%一个5 × 1的向量expr2 = [1:5] * expr;
表达式expr
不适合作为目标函数,因为它是一个向量。表达式expr2
适合于一个目标函数。
请注意
如果你有一个非线性函数,它不是由多项式、有理表达式和初等函数组成的经验值
,然后将函数转换为优化表达式fcn2optimexpr
.看到将非线性函数转化为优化表达式而且优化变量和表达式的支持操作.
要将表达式作为目标函数包含在问题中,请使用点表示法,或在创建问题时包含目标函数。
概率= optimproblem;概率。目标= expr2;%或等价概率= optimproblem (“目标”, expr2);
要在循环中创建表达式,请从返回的空表达式开始optimexpr
.
x = optimvar(“x”,3,3,“类型”,“整数”、“下界”,0,' UpperBound ', 1);y = optimvar (' y ', 3, 3);expr = optimexpr;对于I = 1:3,对于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
.看到将非线性函数转化为优化表达式而且优化变量和表达式的支持操作.
要在问题中包含约束,请使用点表示法并为每个约束指定不同的名称。
概率= optimproblem;prob.Constraints。constr1 = constr1;prob.Constraints。constr2 = constr2;prob.Constraints。constr3 = constr3;
类似地,要在一个问题中包含方程,可以使用点表示法并给每个方程一个不同的名称。
概率= eqnproblem;prob.Equations。eq1 = eq1;prob.Equations。eq2 = eq12
在创建问题时,还可以包含约束条件或方程。例如,假设有10对正变量,它们的和不超过1。
x = optimvar (“x”10 2下界的, 0);概率= optimproblem (“约束”总和(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
都在同一个表达里。
概率= optimproblem;x = optimvar (“x”2,下界的, 0);con1 = x(1) + x(2) <= 10;con2 = 3*x(1) + 4*x(2) >= 2;概率。约束= [cons1; cons2];这一行抛出一个错误
可以通过为约束使用单独的表达式来避免此错误。
prob.Constraints。cons1 = cons1;prob.Constraints。cons2 = cons2;
优化变量有句柄行为
另请参阅
optimvar
|显示
|OptimizationConstraint
|OptimizationExpression