优化表达式是优化变量的多项式或Rational组合。
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(sum(x。* x))所有变量的正方形的百分比
优化表达式也来自于许多MATLAB®优化变量的运算,如变量的转置或连接。有关优化表达式支持的操作列表,请金宝app参见金宝app在优化变量和表达式上支持的操作.
最后,给出了优化表达式fcn2optimexpr
对于作用于优化变量的Matlab功能。有关详细信息,请参阅将非线性函数转换为优化表达式.
优化建模函数不允许您指定复杂的,正
, 或者南
值。如果通过操作获取,则无法显示该表达式。看到表达包含inf或nan.
目标函数是大小为1 × 1的表达式。
y = optimvar (“y”、5、3);expr = (y, 2)之和;一个5乘1的向量expr2 = [1:5] * expr;
表达式expr
不适合目标函数,因为它是一个向量。表达式expr2
适用于目标函数。
笔记
如果你有一个非线性函数,它不是由多项式、有理表达式和初等函数组成的exp.
,然后使用以下命令将函数转换为优化表达式fcn2optimexpr
.看到将非线性函数转换为优化表达式和金宝app在优化变量和表达式上支持的操作.
要在问题中包含表达式作为目标函数,请使用点表示法,或者在创建问题时包含目标。
概率= optimproblem;概率。目标= 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) + (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,'类型','整数','demeldbound',0,'上行',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-by-1。
x = Optimvar(“x”3 2“类型”那“整数”那'indowbound'0,'上行'1);y = optimvar (“y”、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,所以(sum (x, 1))
大小是2乘1。总和(y,2)
尺寸为2×1,因此两个表达式是可比的。
笔记
如果你有一个非线性函数,它不是由多项式、有理表达式和初等函数组成的exp.
,然后使用以下命令将函数转换为优化表达式fcn2optimexpr
.看到将非线性函数转换为优化表达式和金宝app在优化变量和表达式上支持的操作.
要在问题中包含约束,请使用点表示法,并为每个约束提供不同的名称。
概率= optimproblem;prob.constraints.constr1 = contract1;prob.constraints.constr2 = contract2;prob.constraints.constr3 = contract3;
类似地,要在问题中包含方程,请使用点表示法并为每个等式提供不同的名称。
概率= 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.
都在同一个表达式中。
概率= 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;