TempConstr


TempConstr

古罗比临时约束对象。该类的对象是在使用重载操作符构建约束时作为中间结果创建的。这个类上没有成员函数。相反,TempConstr对象是由一组函数创建的Var兆乏LinExprQuadExprMLinExprMQuadExpr,GenExpr对象(例如,==< =,>=).你通常不会在你自己的变量中存储这个类的对象。

TempConstr对象允许您创建几种不同类型的约束:

  • 线性约束:表达式形式的表达式Expr1 Expr1感,在那里Expr1Expr2LinExpr对象,Var对象,或常量,和感觉是其中之一==< =>=.例如,X + y <= 1 + z是线性约束吗X + y == 5.请注意,Expr1Expr2不可能两者都是常数。

  • 包括线性约束:表达式形式的表达式LinExpr == [con1, con2],在那里Const1Const2是常数,LinExpr是一个LinExpr对象。例如,X + y == [1,2]为远程线性约束。

  • 二次约束:表达式形式的表达式Expr1 Expr2感,在那里Expr1Expr2QuadExpr对象,LinExpr对象,Var对象,或常量,和感觉是其中之一==< =>=.例如,X * X + y*y <= 3是二次约束吗X * X + y*y <= z*z.注意其中一个Expr1Expr2必须是一个QuadExpr(否则,约束将是线性的)。

  • 线性矩阵约束:表达式形式的表达式Expr1 Expr1感,其中一个或两个Expr1Expr2MLinExpr对象和感觉是其中之一==< =>=.例如,A @ x <= 1线性矩阵约束是这样的吗A @ x == B @ y

  • 二次矩阵约束:表达式形式的表达式Expr1 Expr2感,其中一个或两个Expr1Expr2MQuadExpr对象和感觉是其中之一==< =>=.例如,x @ Q @ y <= 3是二次约束吗x @ Q @ x <= y @ A @ y

  • 绝对值约束:表达式形式的表达式x = = abs_ (y),在那里xy必须Var对象。

  • 逻辑约束:表达式形式的表达式x = = op_ (y),在那里x是一个二进制Var对象,y是一个二进制Var,一个二进制列表Var,或者一个tupledict的二进制Var,op_要么是,or_(或特定于python的变体,all_any_).

  • 最小或最大约束:表达式形式的表达式x = = op_ (y),在那里x是一个Var对象,y是一个Var,一列Var常数,或者atupledictVar,op_是其中之一min_max_

  • 指标约束:表达式形式的表达式(x == b) >> (Expr1),在那里x是一个二进制Var对象,b要么是01Expr1Expr2LinExpr对象,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