gurobipy.TempConstr#
- class TempConstr#
Gurobi 临时约束对象。在使用重载运算符构建约束时,会创建此类的对象作为中间结果。此类没有成员函数。相反,
TempConstr对象是由Var、MVar、LinExpr、QuadExpr、MLinExpr、MQuadExpr和GenExpr对象上的一组函数创建的(例如,==、<=和>=)。通常,您不会在自己的变量中存储此类的对象。TempConstr对象允许您创建几种不同类型的约束:线性约束: 形式为
Expr1 sense Expr2的表达式,其中Expr1和Expr2是LinExpr对象、Var对象或常量, 而sense是==、<=或>=之一。例如,x + y <= 1 + z是一个线性约束,x + y == 5也是。注意Expr1和Expr2不能同时为常量。范围线性约束: 一种形式的表达式
LinExpr == [Const1, Const2],其中Const1和Const2是 常数,LinExpr是一个LinExpr对象。例如,x + y == [1, 2]是一个范围线性约束。二次约束: 形式为
Expr1 sense Expr2的表达式,其中Expr1和Expr2是QuadExpr对象、LinExpr对象、Var对象或常量,而sense是==、<=或>=之一。例如,x*x + y*y <= 3是一个 二次约束,x*x + y*y <= z*z也是。请注意,Expr1或Expr2中必须有一个是QuadExpr(否则,约束将是线性的)。线性矩阵约束: 一种形式的表达式
Expr1 sense Expr2,其中Expr1和Expr2中的一个或两个 是MLinExpr对象,而sense是==、<=或>=中的一个。例如,A @ x <= 1是一个线性矩阵 约束,A @ x == B @ y也是。二次矩阵约束: 一种形式的表达式
Expr1 sense Expr2,其中Expr1和Expr2中的一个或两个 是MQuadExpr对象,且sense是==、<=或>=之一。例如,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_是and_或or_。最小或最大约束: 形式为
x == op_(y)的表达式, 其中x是一个Var对象,而y是一个Var、一个Var和常量的列表,或者是一个tupledict的Var,并且op_是min_或max_之一。指示器约束: 形式为
(x == b) >> (Expr1 sense Expr2)的表达式,其中x是一个二进制Var对象,b是0或1;Expr1和Expr2是LinExpr对象、Var对象, 或常量,sense是==、<=或>=之一。 必须对两个表达式进行括号化。例如,(x == 1) >> (y + w <= 5)是一个指示器约束,表示 每当二进制变量x取值为1时, 线性约束y + w <= 5必须成立。
考虑以下示例:
model.addConstr(x + y == 1); model.addConstr(x + y == [1, 2]); model.addConstr(x*x + y*y <= 1); model.addConstr(A @ x <= 1); model.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。