TempConstr
TempConstr
古罗比临时约束对象。该类的对象是在使用重载操作符构建约束时作为中间结果创建的。这个类上没有成员函数。相反,TempConstr
对象是由一组函数创建的Var,兆乏,LinExpr,QuadExpr,MLinExpr,MQuadExpr,GenExpr对象(例如,==,< =,>=).你通常不会在你自己的变量中存储这个类的对象。
的TempConstr
对象允许您创建几种不同类型的约束:
- 线性约束:表达式形式的表达式
Expr1 Expr1感
,在那里Expr1
和Expr2
是LinExpr对象,Var对象,或常量,和感觉
是其中之一==
,< =
或>=
.例如,X + y <= 1 + z
是线性约束吗X + y == 5
.请注意,Expr1
和Expr2
不可能两者都是常数。 - 包括线性约束:表达式形式的表达式
LinExpr == [con1, con2]
,在那里Const1
和Const2
是常数,LinExpr
是一个LinExpr对象。例如,X + y == [1,2]
为远程线性约束。 - 二次约束:表达式形式的表达式
Expr1 Expr2感
,在那里Expr1
和Expr2
是QuadExpr对象,LinExpr对象,Var对象,或常量,和感觉
是其中之一==
,< =
或>=
.例如,X * X + y*y <= 3
是二次约束吗X * X + y*y <= z*z
.注意其中一个Expr1
或Expr2
必须是一个QuadExpr(否则,约束将是线性的)。 - 线性矩阵约束:表达式形式的表达式
Expr1 Expr1感
,其中一个或两个Expr1
和Expr2
是MLinExpr对象和感觉
是其中之一==
,< =
或>=
.例如,A @ x <= 1
线性矩阵约束是这样的吗A @ x == B @ y
. - 二次矩阵约束:表达式形式的表达式
Expr1 Expr2感
,其中一个或两个Expr1
和Expr2
是MQuadExpr对象和感觉
是其中之一==
,< =
或>=
.例如,x @ Q @ y <= 3
是二次约束吗x @ Q @ x <= y @ A @ y
. - 绝对值约束:表达式形式的表达式
x = = abs_ (y)
,在那里x
和y
必须Var对象。 - 逻辑约束:表达式形式的表达式
x = = op_ (y)
,在那里x
是一个二进制Var对象,y
是一个二进制Var,一个二进制列表Var,或者一个tupledict的二进制Var,op_
要么是,
或or_
(或特定于python的变体,all_
和any_
). - 最小或最大约束:表达式形式的表达式
x = = op_ (y)
,在那里x
是一个Var对象,y
是一个Var,一列Var常数,或者atupledict的Var,op_
是其中之一min_
或max_
. - 指标约束:表达式形式的表达式
(x == b) >> (Expr1)
,在那里x
是一个二进制Var对象,b
要么是0
或1
;Expr1
和Expr2
是LinExpr对象,Var对象,或常量,和感觉
是其中之一==
,< =
或>=
.两个表达式都需要括号。例如,(x == 1) > (y + w <= 5)
是一个指示符约束,表示无论何时二进制变量x
需要的值1
那么线性约束Y + w <= 5
必须持有。
考虑以下例子:
模型。addConstr(x + y == 1);模型。addConstr(x + y ==[1,2]); / /添加一个新的数组模型。addConstr(x*x + y*y <= 1);模型。addConstr(A @ x <= 1);模型。addConstr(x @ A @ x <= 1); model.addConstr(x == abs_(y)); model.addConstr(x == or_(y, z)); model.addConstr(x == max_(y, z)); model.addConstr((x == 1) >> (y + z <= 5));在每种情况下,重载的比较操作符创建一个类型为的对象
TempConstr
,然后立即传递给方法Model.addConstr.