优化表达式
优化的表情是什么?
优化的表达式是多项式或理性的组合优化变量。
x = optimvar (“x”3、3);% 3 x3的名为“x”的变量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优化表达式®优化变量的操作,如转置或变量的连接。支持的操作优化表达式列表,看看金宝app金宝app支持操作优化变量和表达式。
最后,优化表达式可以应用的结果fcn2optimexpr
MATLAB函数作用于优化变量。有关详细信息,请参见将非线性函数优化表达式。
优化建模功能不允许您指定复杂,正
,或南
值。如果你获得这样一个表达式通过操作,不能显示表达式。看到表达式包含正或南。
目标函数的表达式
一个目标函数是一个大小为1×1的表达式。
y = optimvar (“y”、5、3);expr = (y, 2)之和;% 5-by-1向量expr2 = [1:5] * expr;
表达式expr
不适合一个目标函数,因为它是一个矢量。表达式expr2
适用于一个目标函数。
请注意
如果你有一个非线性函数不是由多项式,理性的表达式和小学等功能经验值
,然后通过使用函数转换为一种优化表达式fcn2optimexpr
。看到将非线性函数优化表达式和金宝app支持操作优化变量和表达式。
包括一个表达式作为目标函数的问题,使用点符号,或者包括目标当您创建的问题。
概率= optimproblem;概率。目标= expr2;%或等价概率= optimproblem (“目标”,expr2);
创建一个表达式在一个循环中,从一个空的表达式返回的optimexpr
。
x = optimvar (“x”, 3, 3,“类型”,“整数”、“下界”,0,' UpperBound ', 1);y = optimvar (' y ', 3, 3);expr = optimexpr;因为我= 1:3 j = 1:3 expr = expr + y (j,我)- 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 =总和(总和(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 = (x, 2) > = z总和;
x
所以,大小3×2吗总和(x, 2)
3×1的大小。这个表达式是可比的z
因为z
是一个标量变量。
constr2 = y < = z;
y
大小2×4。再一次,y
堪比z
因为z
是一个标量变量。
constr3 = ((x, 1)总和)' < = (y, 2)之和;
总和(x, 1)
所以,大小为1×2吗(sum (x, 1))
大小2×1。总和(y, 2)
大小为2×1的,所以这两个表达式具有可比性。
请注意
如果你有一个非线性函数不是由多项式,理性的表达式和小学等功能经验值
,然后通过使用函数转换为一种优化表达式fcn2optimexpr
。看到将非线性函数优化表达式和金宝app支持操作优化变量和表达式。
包括约束问题,使用点符号,给每个约束一个不同的名称。
概率= optimproblem;prob.Constraints。constr1 = constr1;prob.Constraints。constr2 = constr2;prob.Constraints。constr3 = constr3;
同样,包括方程问题,使用点符号和给每个方程一个不同的名称。
概率= eqnproblem;prob.Equations。eq1 = eq1;prob.Equations。eq2 = eq12
你还可以包括约束或方程当您创建一个问题。例如,假设你有10对积极的变量,其金额不超过一个。
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);cons1 = x (1) + (2) < = 10;cons2 = 3 * x (1) + 4 * x (2) > = 2;概率。约束= [cons1; cons2];%这条线将抛出一个错误
你可以避免这个错误使用单独的约束表达式。
prob.Constraints。cons1 = cons1;prob.Constraints。cons2 = cons2;
优化变量的处理行为
另请参阅
optimvar
|显示
|OptimizationConstraint
|OptimizationExpression