主要内容

优化表达式

什么是优化表达式?

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

要在循环中创建约束或方程表达式,请从返回的空约束表达式开始optimconstroptimeq, 或者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;

优化变量有处理行为

  • 优化Variable.对象有处理复制行为。看到处理对象的行为手柄和价值类比较.处理复制行为意味着优化Variable.指向原件,没有独立的存在。例如,创建变量X,复制它y,则设置属性为y.请注意,X采用新的属性值。

    x = Optimvar(“x”'indowbound'1);y = x;y.lowerbound = 0;showbounds(x)
    0 <= x

也可以看看

|||

相关的话题