主要内容

优化表达式

什么是优化表达式?

优化表达式是优化变量的多项式或有理组合。

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);

若要在循环中创建约束或方程表达式,请从返回的空约束表达式开始optimconstroptimeq,或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;

优化变量具有处理行为

  • OptimizationVariable对象有处理复制行为。看到处理对象行为而且句柄类和值类的比较.句柄复制行为意味着OptimizationVariable指的是原来并没有独立的存在。例如,创建一个变量x,复制至y的属性y.请注意,x获取新的属性值。

    X = optimvar(“x”下界的1);Y = x;. lowerbound = 0;showbounds (x)
    0 <= x

另请参阅

|||

相关的话题