优化表达式是优化变量的多项式或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;