TempConstr


TempConstr

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

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

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

  • 包括线性约束:形式的表达LinExpr == [Const1, Const2],在那里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(否则,约束将是线性的)。

  • 绝对值约束:形式的表达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 sense Expr2),在那里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 (x = = abs_ (y));模型。addConstr(x == or_(y, z)); model.addConstr(x == max_(y, z)); model.addConstr((x == 1) >> (y + z <= 5));
在每种情况下,重载比较操作符都会创建一个type对象TempConstr,然后立即传递给methodModel.addConstr