主要内容

优化表达式

优化的表情是什么?

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

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支持操作优化变量和表达式

最后,优化表达式可以应用的结果fcn2optimexprMATLAB函数作用于优化变量。有关详细信息,请参见将非线性函数优化表达式

优化建模功能不允许您指定复杂,,或值。如果你获得这样一个表达式通过操作,不能显示表达式。看到表达式包含正或南

目标函数的表达式

一个目标函数是一个大小为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使用> =的比较,cons1cons2在相同的表达式。

概率= 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;

优化变量的处理行为

  • OptimizationVariable对象有处理复制行为。看到处理对象的行为处理的比较和价值类。处理行为意味着一份副本OptimizationVariable指向原来的,没有一个独立的存在。例如,创建一个变量x,将其复制到y,然后设置一个属性y。请注意,x需要在新的属性值。

    x = optimvar (“x”,下界的1);y = x;y。下界= 0;showbounds (x)
    0 < = x

另请参阅

|||

相关的话题