主要内容

优化表达式

什么是优化表达式?

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

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(sum(x * diag(1:3))))%乘以x列的列数并总和expr6 = sum(sum(x。* x))所有变量的正方形的百分比

优化表达也来自许多Matlab®优化变量的操作,如转置或变量的串联。有关优化表达式的支持操作列表,请万博1manbetx参阅万博1manbetx在优化变量和表达式上支持的操作

最后,优化表达可以是申请的结果FCN2Optimexpr.对于作用于优化变量的Matlab功能。有关详细信息,请参阅将非线性函数转换为优化表达式

优化建模功能不允许您指定复杂,INF., 要么价值观。如果通过操作获得此类表达式,则无法显示表达式。看表达包含inf或nan

目标职能的表达

目标函数是大小1-1的表达。

y = Optimvar('是',5,3);expr = sum(y,2);%a 5×1载体expr2 = [1:5] * expr;

表达方式expr.不适合客观函数,因为它是矢量。表达方式Expr2.适用于目标函数。

笔记

如果您有一个非线性函数,则不由多项式,Rational表达式和诸如的基本功能组成exp.,然后通过使用将函数转换为优化表达式FCN2Optimexpr.。看将非线性函数转换为优化表达式万博1manbetx在优化变量和表达式上支持的操作

要在问题中包含表达式作为目标函数,请使用点表示法,或者在创建问题时包含目标。

prob = OptimProblem;prob.objective = expr2;%或同等prob = OptimProblem('客观的',expr2);

要在循环中创建表达式,请以返回的空表达式开始Optimexpr.

x = Optimvar('x',3,3,'类型','整数','demeldbound',0,'上行',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,1)+ Y(2,1)+ Y(3,1)+ Y(1,2)+ Y(2,2)+ Y(3,2)+ Y(1,3)+ Y(1,3)+ Y(2,3)+ y(3,3) -  x(1,1) -  x(2,1) -  x(3,1) -  x(1,2) -  x(2,2) -  x(3,2) -  x(1,3) -  x(2,3) -  x(3,3)

你可以创建expr.没有任何循环:

x = Optimvar('x',3,3,'类型','整数','demeldbound',0,'上行',1);Y = Optimvar('Y',3,3);expr = sum(sum(y' -  x));展示(expr)
Y(1,1)+ Y(2,1)+ Y(3,1)+ Y(1,2)+ Y(2,2)+ Y(3,2)+ Y(1,3)+ Y(1,3)+ Y(2,3)+ y(3,3) -  x(1,1) -  x(2,1) -  x(3,1) -  x(1,2) -  x(2,2) -  x(3,2) -  x(1,3) -  x(2,3) -  x(3,3)

笔记

如果您的客观函数是一总体,而且您想要解决要识别出来,把它写成总和(expr。^ 2),而不是expr'* expr。内部解析器仅识别仅明确的正方形。例如,看到非负线性最小二乘,基于问题

约束和方程的表达式

约束是任何两个可比较的表达式包括这些比较运算符之一:==.<=, 要么> =。等式是两个使用比较运算符的类似表达式==.。可比较的表达式具有相同的大小,或者其中一个表达式必须是标量,含义1-by-1。

x = Optimvar('X',3,2,'类型''整数''indowbound',0,'上行',1);y = Optimvar('是',2,4);z = Optimvar('Z');CONSTR1 = SUM(x,2)> = z;

X尺寸为3-by-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-by-2,所以(总和(x,1))'尺寸为2比1。总和(y,2)尺寸为2×1,因此两个表达式是可比的。

笔记

如果您有一个非线性函数,则不由多项式,Rational表达式和诸如的基本功能组成exp.,然后通过使用将函数转换为优化表达式FCN2Optimexpr.。看将非线性函数转换为优化表达式万博1manbetx在优化变量和表达式上支持的操作

要在问题中包含约束,请使用点表示法,并为每个约束提供不同的名称。

prob = OptimProblem;prob.constraints.constr1 = contract1;prob.constraints.constr2 = contract2;prob.constraints.constr3 = contract3;

类似地,要在问题中包含方程,请使用点表示法并为每个等式提供不同的名称。

prob = eqnproblem;prob.equations.eq1 = EQ1;prob.equations.eq2 = EQ12.

您还可以在创建问题时包含约束或方程式。例如,假设您有10对正变量,其总和不超过一个。

x = Optimvar('X',10,2,'indowbound',0);prob = OptimProblem('限制',总和(x,2)<= 1);

要在循环中创建约束或方程式表达式,从返回的空约束表达式开始OptimConstr.Optimeq., 要么Optimineq.

x = Optimvar('x',3,2,'类型','整数','demeldbound',0,'上行',1);Y = Optimvar('Y',2,4);z = Optimvar('Z');const1 = OptimConstr(2);对于i = 1:2 const1(i)= x(1,i) -  x(3,i)+ 2 * z> = 4 *(y(i,2)+ y(i,3)+ 2 * y(I,4));末表(COND1)
(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,'类型','整数','demeldbound',0,'上行',1);Y = Optimvar('Y',2,4);z = Optimvar('Z');const1 = x(1,:)  -  x(3,:) + 2 * z> = 4 *(y(:,1)+ y(:,3)+ 2 * y(:,4))';展示(COND1)
(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 = OptimProblem;x = Optimvar('X'2,'indowbound',0);cons1 = x(1)+ x(2)<= 10;CONS2 = 3 * x(1)+ 4 * x(2)> = 2;prob.constraints = [cons1; cons2];%此行抛出错误

您可以通过使用单独的表达式来避免此错误。

prob.constraints.cons1 = cons1;prob.constraints.cons2 = cons2;

优化变量具有句柄行为

  • 优化Variable.对象有处理复制行为。看处理对象行为手柄和价值类比较。处理复制行为意味着副本优化Variable.指向原件,没有独立的存在。例如,创建变量X,复制它y,然后设置一个属性y。注意X承担新的财产价值。

    x = Optimvar('X''indowbound',1);y = x;y.lowerbound = 0;showbounds(x)
    0 <= x

也可以看看

|||

相关话题