GRB模型#

class GRBModel#

Gurobi模型对象。常用的方法包括addVar(向模型添加一个新的决策变量),addConstr(向模型添加一个新的约束),optimize(优化当前模型),以及get(检索属性的值)。

GRBModel GRBModel(const GRBEnv &env)#

GRBModel的构造函数,用于创建一个空模型。然后您可以调用addVaraddConstr来为模型添加变量和约束。

Parameters:

env – 新模型的环境。

Returns:

新模型对象。模型最初不包含任何变量或约束。

GRBModel GRBModel(const GRBEnv &env, const string &filename)#

用于从文件中读取模型的GRBModel构造函数。 请注意,文件类型由文件名后缀编码。有效的后缀包括 .mps, .rew, .lp, .rlp, .dua, .dlp, .ilp, 或 .opb。文件可以被压缩,因此还接受 .zip, .gz, .bz2, .7z.xz 后缀。

Parameters:
  • env – 新模型的环境。

  • modelname – 包含模型的文件名称。

Returns:

新模型对象。

GRBModel GRBModel(const GRBModel &model)#

GRBModel的构造函数,用于创建现有模型的副本。请注意,由于Gurobi中的延迟更新方法,您必须在复制之前调用update

Parameters:

model – 要复制的模型。

Returns:

新模型对象。模型是原始模型的克隆。

GRBModel GRBModel(const GRBModel &model, const GRBEnv &targetenv)#

将现有模型复制到不同的环境。多个线程不能在同一环境中同时工作。因此,模型的副本必须位于不同的环境中,以便多个线程可以同时操作它们。

请注意,此方法本身不是线程安全的,因此您应该从主线程调用它或使用锁保护对其的访问。

请注意,待处理的更新不会应用于模型,因此如果您希望这些更新包含在副本中,应在复制之前调用update

对于Compute Server用户,请注意您可以将模型从客户端复制到Compute Server环境,但无法将模型从一个Compute Server环境复制到另一个(客户端或Compute Server)环境。

Parameters:
  • model – 要复制的模型。

  • targetenv – 将模型复制到的环境。

Returns:

新模型对象。模型是原始模型的克隆。

GRBConstr addConstr(const GRBLinExpr &lhsExpr, char sense, const GRBLinExpr &rhsExpr, string name = "")#

向模型添加单个线性约束。

Parameters:
  • lhsExpr – 新线性约束的左侧表达式。

  • sense – 新线性约束的意义(GRB_LESS_EQUALGRB_EQUAL,或GRB_GREATER_EQUAL)。

  • rhsExpr – 新线性约束的右侧表达式。

  • name – (可选)新约束的名称。

Returns:

新的约束对象。

GRBConstr addConstr(const GRBLinExpr &lhsExpr, char sense, GRBVar rhsVar, string name = "")#

向模型添加单个线性约束。

Parameters:
  • lhsExpr – 新线性约束的左侧表达式。

  • sense – 新线性约束的意义(GRB_LESS_EQUALGRB_EQUAL,或 GRB_GREATER_EQUAL)。

  • rhsVar – 新线性约束的右侧变量。

  • name – (可选)新约束的名称。

Returns:

新的约束对象。

GRBConstr addConstr(const GRBLinExpr &lhsExpr, char sense, double rhsVal, string name = "")#

向模型添加单个线性约束。

Parameters:
  • lhsExpr – 新线性约束的左侧表达式。

  • sense – 新线性约束的意义(GRB_LESS_EQUALGRB_EQUAL,或GRB_GREATER_EQUAL)。

  • rhsVal – 新线性约束的右侧值。

  • name – (可选)新约束的名称。

Returns:

新的约束对象。

GRBConstr addConstr(GRBVar lhsVar, char sense, GRBVar rhsVar, string name = "")#

向模型添加单个线性约束。

Parameters:
  • lhsVar – 新线性约束的左侧变量。

  • sense – 新线性约束的意义(GRB_LESS_EQUALGRB_EQUAL,或 GRB_GREATER_EQUAL)。

  • rhsVar – 新线性约束的右侧变量。

  • name – (可选)新约束的名称。

Returns:

新的约束对象。

GRBConstr addConstr(GRBVar lhsVar, char sense, double rhsVal, string name = "")#

向模型添加单个线性约束。

Parameters:
  • lhsVar – 新线性约束的左侧变量。

  • sense – 新线性约束的意义(GRB_LESS_EQUALGRB_EQUAL,或 GRB_GREATER_EQUAL)。

  • rhsVal – 新线性约束的右侧值。

  • name – (可选)新约束的名称。

Returns:

新的约束对象。

GRBConstr addConstr(GRBTempConstr &tc, string name = "")#

向模型添加单个线性约束。

Parameters:
  • tc – 临时约束对象,使用重载的比较运算符创建。有关更多信息,请参见 GRBTempConstr

  • name – (可选)新约束的名称。

Returns:

新的约束对象。

GRBConstr *addConstrs(int count)#

向模型添加count个新的线性约束。

我们建议您一次构建一个约束的模型(使用 addConstr),因为它不会引入显著的开销,并且我们发现它会产生更简单的代码。如果您不同意,尽管使用这些方法。

Parameters:

count – 要添加到模型中的约束数量。新的约束都是形式为 0 <= 0 的。

Returns:

新的约束对象数组。请注意,结果是堆分配的,必须由用户返回到堆中。

GRBConstr *addConstrs(const GRBLinExpr *lhsExprs, const char *senses, const double *rhsVals, const string *names, int count)#

向模型添加count个新的线性约束。

我们建议您一次构建一个约束的模型(使用 addConstr),因为它不会引入显著的开销,并且我们发现它会产生更简单的代码。如果您不同意,尽管使用这些方法。

Parameters:
  • lhsExprs – 新线性约束的左侧表达式。

  • senses – 新线性约束的感知类型 (GRB_LESS_EQUAL, GRB_EQUAL, 或 GRB_GREATER_EQUAL).

  • rhsVals – 新线性约束的右侧值。

  • names – 新约束的名称。

  • count – 要添加的约束数量。

Returns:

新的约束对象数组。请注意,结果是堆分配的,必须由用户返回到堆。

GRBGenConstr addGenConstrMax(GRBVar resvar, const GRBVar *vars, int len, double constant = -GRB_INFINITY, string name = "")#

向模型添加一个新的一般约束,类型为GRB_GENCONSTR_MAX

一个MAX约束\(r = \max\{x_1,\ldots,x_n,c\}\)表示结果变量\(r\)应等于操作变量\(x_1,\ldots,x_n\)和常数\(c\)的最大值。

Parameters:
  • resvar – 新约束的结果变量。

  • vars – 作为新约束操作数的变量数组。

  • len – 新约束中的操作数数量(vars数组的长度)。

  • constant – (可选) 新约束的附加常数操作数。

  • name – (可选)新的一般约束的名称。

Returns:

新的通用约束。

GRBGenConstr addGenConstrMin(GRBVar resvar, const GRBVar *vars, int len, double constant = GRB_INFINITY, string name = "")#

向模型添加一个类型为GRB_GENCONSTR_MIN的新一般约束

一个MIN约束 \(r = \min\{x_1,\ldots,x_n,c\}\) 表示结果变量 \(r\) 应该等于操作变量 \(x_1,\ldots,x_n\) 和常数 \(c\) 的最小值。

Parameters:
  • resvar – 新约束的结果变量。

  • vars – 作为新约束操作数的变量数组。

  • len – 新约束中的操作数数量(vars数组的长度)。

  • constant – (可选)新约束的附加常数操作数。

  • name – (可选)新的一般约束的名称。

Returns:

新的通用约束。

GRBGenConstr addGenConstrAbs(GRBVar resvar, GRBVar argvar, string name = "")#

向模型添加一个新的一般约束,类型为GRB_GENCONSTR_ABS

一个ABS约束 \(r = \mbox{abs}\{x\}\) 表示结果变量 \(r\) 应该等于参数变量 \(x\) 的绝对值。

Parameters:
  • resvar – 新约束的结果变量。

  • argvar – 新约束的参数变量。

  • name – (可选)新的一般约束的名称。

Returns:

新的通用约束。

GRBGenConstr addGenConstrAnd(GRBVar resvar, const GRBVar *vars, int len, string name = "")#

向模型添加一个新的一般约束,类型为GRB_GENCONSTR_AND

一个AND约束\(r = \mbox{and}\{x_1,\ldots,x_n\}\)表示 二进制结果变量\(r\)应该为\(1\)当且仅当 所有操作数变量\(x_1,\ldots,x_n\)都等于 \(1\)。如果任何一个操作数变量是\(0\),那么 结果也应该是\(0\)

请注意,参与此类约束的所有变量将被强制为二进制,无论它们是如何创建的。

Parameters:
  • resvar – 新约束的结果二进制变量。

  • vars – 作为新约束操作数的二进制变量数组。

  • len – 新约束中的操作数数量(vars数组的长度)。

  • name – (可选)新的一般约束的名称。

Returns:

新的通用约束。

GRBGenConstr addGenConstrOr(GRBVar resvar, const GRBVar *vars, int len, string name = "")#

向模型添加一个新的一般约束,类型为GRB_GENCONSTR_OR

一个OR约束\(r = \mbox{or}\{x_1,\ldots,x_n\}\)表示,当且仅当任何一个操作数变量\(x_1,\ldots,x_n\)等于\(1\)时,二进制结果变量\(r\)应为\(1\)。如果所有操作数变量都是\(0\),那么结果也应为\(0\)

请注意,参与此类约束的所有变量将被强制为二进制,无论它们是如何创建的。

Parameters:
  • resvar – 新约束的结果二进制变量。

  • vars – 作为新约束操作数的二进制变量数组。

  • len – 新约束中的操作数数量(vars数组的长度)。

  • name – (可选)新的一般约束的名称。

Returns:

新的通用约束。

GRBGenConstr addGenConstrNorm(GRBVar resvar, const GRBVar *vars, int len, double which, string name = "")#

向模型添加一个新的一般约束,类型为GRB_GENCONSTR_NORM

一个NORM约束\(r = \mbox{norm}\{x_1,\ldots,x_n\}\)表示 结果变量\(r\)应该等于参数向量\(x_1,\ldots,x_n\)的向量范数。

Parameters:
  • resvar – 新约束的结果变量。

  • vars – 作为新约束操作数的变量数组。请注意,此数组不能包含重复项。

  • len – 新约束中的操作数数量(vars数组的长度)。

  • which – 使用哪种范数。选项有 0, 1, 2, 和 GRB_INFINITY。

  • name – (可选)新的一般约束的名称。

Returns:

新的通用约束。

GRBGenConstr addGenConstrNL(GRBVar resvar, int nnodes, const int *opcode, const double *data, const int *parent, std::string name = "");#

向模型添加一个类型为GRB_GENCONSTR_NL的新一般约束

一个NL约束\(r = f(x)\)表示结果变量\(r\)应等于给定函数\(f\)的函数值\(f(x)\),该函数以表达式树的形式提供,如非线性约束中所述。

Parameters:
  • resvar – 结果变量的索引 \(r\),其值将等于给定函数 \(f\) 的函数值。

  • nnodes – 表达式树中的节点数量,即输入数组 opcodedataparent 的长度。

  • opcode – 一个包含节点操作码的数组。

  • data – 一个包含每个节点辅助数据的数组。 对于类型为 GRB_OPCODE_VARIABLE 的表达式节点, 必须使用 GRBVar::index 方法检索变量的索引。

  • parent – 一个提供节点父索引的数组。

  • name – (可选)新的一般约束的名称。

Returns:

新的通用约束。

GRBGenConstr addGenConstrIndicator(GRBVar binvar, int binval, const GRBLinExpr &expr, char sense, double rhs, string name = "")#

向模型添加一个新的一般约束,类型为GRB_GENCONSTR_INDICATOR

一个INDICATOR约束\(z = f \rightarrow a^Tx \leq b\)表示 如果二进制指示变量\(z\)等于\(f\), 其中\(f \in \{0,1\}\),那么线性约束 \(a^Tx \leq b\)应该成立。另一方面,如果\(z = 1-f\), 线性约束可能被违反。线性约束的方向也可以指定为\(=\)\(\geq\)

请注意,约束的指示变量 \(z\) 将被强制为二进制,无论它是如何创建的。

Parameters:
  • binvar – 二进制指示变量。

  • binval – 二进制指示变量的值,该值将强制满足线性约束条件(\(0\)\(1\))。

  • expr – 由指示器触发的线性约束的左侧表达式。

  • sense – 线性约束的意义。选项是 GRB_LESS_EQUAL, GRB_EQUAL, 或 GRB_GREATER_EQUAL

  • rhs – 线性约束的右侧值。

  • name – (可选)新的一般约束的名称。

Returns:

新的通用约束。

GRBGenConstr addGenConstrIndicator(GRBVar binvar, int binval, const GRBTempConstr &constr, string name = "")#

向模型添加一个新的一般约束,类型为GRB_GENCONSTR_INDICATOR

一个INDICATOR约束\(z = f \rightarrow a^Tx \leq b\)表示 如果二进制指示变量\(z\)等于\(f\), 其中\(f \in \{0,1\}\),那么线性约束 \(a^Tx \leq b\)应该成立。另一方面,如果\(z = 1-f\), 线性约束可能被违反。线性约束的方向也可以指定为\(=\)\(\geq\)

请注意,约束的指示变量 \(z\) 将被强制为二进制,无论它是如何创建的。

Parameters:
  • binvar – 二进制指示变量。

  • binval – 二进制指示变量的值,该值将强制满足线性约束条件(\(0\)\(1\))。

  • constr – 定义由指示器触发的线性约束的临时约束对象。临时约束对象是通过重载的比较运算符创建的。有关更多信息,请参见GRBTempConstr

  • name – (可选)新的一般约束的名称。

Returns:

新的通用约束。

GRBGenConstr addGenConstrPWL(GRBVar xvar, GRBVar yvar, int npts, const double *xpts, const double *ypts, std::string name = "")#

向模型添加一个新的一般约束,类型为GRB_GENCONSTR_PWL

分段线性(PWL)约束规定变量 \(x\)\(y\) 之间的关系必须满足 \(y = f(x)\),其中 \(f\) 是一个分段线性函数。\(f\) 的断点作为参数提供。有关分段线性函数如何定义的详细信息,请参阅分段线性目标的描述。

Parameters:
  • xvar\(x\) 变量。

  • yvar\(y\) 变量。

  • npts – 定义分段线性函数的点数。

  • xpts – 定义分段线性函数的点的 \(x\) 值。必须按非递减顺序排列。

  • ypts – 定义分段线性函数的点的 \(y\) 值。

  • name – (可选)新的一般约束的名称。

Returns:

新的通用约束。

GRBGenConstr addGenConstrPoly(GRBVar xvar, GRBVar yvar, int plen, const double *p, std::string name = "", std::string options = "")#

向模型添加一个类型为GRB_GENCONSTR_POLY的新一般约束

多项式函数约束声明了变量\(x\)\(y\)之间的关系应满足\(y = p_0 x^d + p_1 x^{d-1} + ... + p_{d-1} x + p_{d}\)

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

Parameters:
  • xvar\(x\) 变量。

  • yvar\(y\) 变量。

  • plen – 系数数组 p 的长度。如果 \(x^d\) 是最高次项,那么 plen 应该是 \(d+1\)

  • p – 多项式函数的系数(从最高次幂的系数开始)。

  • name – (可选)新的一般约束的名称。

  • options – (可选)一个字符串,可用于设置控制此函数约束的分段线性近似的属性。要为属性赋值,请在属性名称后加上等号和所需的值(无空格)。不同属性的赋值应通过空格分隔(例如“FuncPieces=-1 FuncPieceError=0.001”)。

Returns:

新的通用约束。

GRBGenConstr addGenConstrExp(GRBVar xvar, GRBVar yvar, std::string name = "", std::string options = "")#

向模型添加一个新的一般约束,类型为GRB_GENCONSTR_EXP

自然指数函数约束表明,变量 \(x\)\(y\) 之间的关系应满足 \(y = \exp(x)\)

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

Parameters:
  • xvar\(x\) 变量。

  • yvar\(y\) 变量。

  • name – (可选)新的一般约束的名称。

  • options – (可选)一个字符串,可用于设置控制此函数约束的分段线性近似的属性。要为属性赋值,请在属性名称后加上等号和所需的值(无空格)。不同属性的赋值应通过空格分隔(例如“FuncPieces=-1 FuncPieceError=0.001”)。

Returns:

新的通用约束。

GRBGenConstr addGenConstrExpA(GRBVar xvar, GRBVar yvar, double a, std::string name = "", std::string options = "")#

向模型添加一个新的一般约束,类型为GRB_GENCONSTR_EXPA

指数函数约束表明,变量\(x\)\(y\)之间的关系应满足\(y = a^x\),其中\(a > 0\)是(常数)底数。

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

Parameters:
  • xvar\(x\) 变量。

  • yvar\(y\) 变量。

  • a – 函数的基数,\(a > 0\)

  • name – (可选)新的一般约束的名称。

  • options – (可选)一个字符串,可用于设置控制此函数约束的分段线性近似的属性。要为属性赋值,请在属性名称后加上等号和所需的值(无空格)。不同属性的赋值应以空格分隔(例如“FuncPieces=-1 FuncPieceError=0.001”)。

Returns:

新的通用约束。

GRBGenConstr addGenConstrLog(GRBVar xvar, GRBVar yvar, std::string name = "", std::string options = "")#

向模型添加一个新的一般约束,类型为GRB_GENCONSTR_LOG

自然对数函数约束规定,变量 \(x\)\(y\) 之间的关系应满足 \(y = log(x)\)

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

Parameters:
  • xvar\(x\) 变量。

  • yvar\(y\) 变量。

  • name – (可选)新的一般约束的名称。

  • options – (可选)一个字符串,可用于设置控制此函数约束的分段线性近似的属性。要为属性赋值,请在属性名称后加上等号和所需的值(无空格)。不同属性的赋值应以空格分隔(例如“FuncPieces=-1 FuncPieceError=0.001”)。

Returns:

新的通用约束。

GRBGenConstr addGenConstrLogA(GRBVar xvar, GRBVar yvar, double a, std::string name = "", std::string options = "")#

向模型添加一个新的一般约束,类型为GRB_GENCONSTR_LOGA

对数函数约束表明,变量\(x\)\(y\)之间的关系应满足\(y = log_a(x)\),其中\(a > 0\)是(常数)底数。

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

Parameters:
  • xvar\(x\) 变量。

  • yvar\(y\) 变量。

  • a – 函数的基数,\(a > 0\)

  • name – (可选)新的一般约束的名称。

  • options – (可选)一个字符串,可用于设置控制此函数约束的分段线性近似的属性。要为属性赋值,请在属性名称后加上等号和所需的值(无空格)。不同属性的赋值应通过空格分隔(例如“FuncPieces=-1 FuncPieceError=0.001”)。

Returns:

新的通用约束。

GRBGenConstr addGenConstrLogistic(GRBVar xvar, GRBVar yvar, std::string name = "", std::string options = "")#

向模型添加一个新的一般约束,类型为GRB_GENCONSTR_LOGISTIC

逻辑函数约束表明,变量 \(x\)\(y\) 之间的关系应满足 \(y = \frac{1}{1 + e^{-x}}\)

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

Parameters:
  • xvar\(x\) 变量。

  • yvar\(y\) 变量。

  • name – (可选)新的一般约束的名称。

  • options – (可选)一个字符串,可用于设置控制此函数约束的分段线性近似的属性。要为属性赋值,请在属性名称后加上等号和所需的值(无空格)。不同属性的赋值应通过空格分隔(例如“FuncPieces=-1 FuncPieceError=0.001”)。

Returns:

新的通用约束。

GRBGenConstr addGenConstrPow(GRBVar xvar, GRBVar yvar, double a, std::string name = "", std::string options = "")#

向模型添加一个新的一般约束,类型为GRB_GENCONSTR_POW

幂函数约束表明,变量 \(x\)\(y\) 之间的关系 \(y = x^a\) 应该成立,其中 \(a\) 是(常数)指数。

如果指数 \(a\) 是负数,\(x\) 的下界必须严格为正。如果指数不是整数,\(x\) 的下界必须为非负数。

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

Parameters:
  • xvar\(x\) 变量。

  • yvar\(y\) 变量。

  • a – 函数的指数。

  • name – (可选)新的一般约束的名称。

  • options – (可选)一个字符串,可用于设置控制此函数约束的分段线性近似的属性。要为属性赋值,请在属性名称后加上等号和所需的值(无空格)。不同属性的赋值应通过空格分隔(例如“FuncPieces=-1 FuncPieceError=0.001”)。

Returns:

新的通用约束。

GRBGenConstr addGenConstrSin(GRBVar xvar, GRBVar yvar, std::string name = "", std::string options = "")#

向模型添加一个新的一般约束,类型为GRB_GENCONSTR_SIN

正弦函数约束表明,变量 \(x\)\(y\) 之间的关系应满足 \(y = sin(x)\)

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

Parameters:
  • xvar\(x\) 变量。

  • yvar\(y\) 变量。

  • name – (可选)新的一般约束的名称。

  • options – (可选)一个字符串,可用于设置控制此函数约束的分段线性近似的属性。要为属性赋值,请在属性名称后加上等号和所需的值(无空格)。不同属性的赋值应通过空格分隔(例如“FuncPieces=-1 FuncPieceError=0.001”)。

Returns:

新的通用约束。

GRBGenConstr addGenConstrCos(GRBVar xvar, GRBVar yvar, std::string name = "", std::string options = "")#

向模型添加一个类型为GRB_GENCONSTR_COS的新一般约束

余弦函数约束规定变量 \(x\)\(y\) 之间的关系应满足 \(y = cos(x)\)

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

Parameters:
  • xvar\(x\) 变量。

  • yvar\(y\) 变量。

  • name – (可选)新的一般约束的名称。

  • options – (可选)一个字符串,可用于设置控制此函数约束的分段线性近似的属性。要为属性赋值,请在属性名称后加上等号和所需的值(无空格)。不同属性的赋值应通过空格分隔(例如“FuncPieces=-1 FuncPieceError=0.001”)。

Returns:

新的通用约束。

GRBGenConstr addGenConstrTan(GRBVar xvar, GRBVar yvar, std::string name = "", std::string options = "")#

向模型添加一个新的一般约束,类型为GRB_GENCONSTR_TAN

一个正切函数约束声明了变量 \(x\)\(y\) 之间的关系应满足 \(y = tan(x)\)

函数的分段线性近似被添加到模型中。近似的细节通过以下四个属性(或使用相同名称的参数)控制:FuncPiecesFuncPieceErrorFuncPieceLengthFuncPieceRatio。或者,通过设置属性 FuncNonlinear,可以将函数视为非线性约束。详情请参阅 一般约束 讨论。

Parameters:
  • xvar\(x\) 变量。

  • yvar\(y\) 变量。

  • name – (可选)新的一般约束的名称。

  • options – (可选)一个字符串,可用于设置控制此函数约束的分段线性近似的属性。要为属性赋值,请在属性名称后加上等号和所需的值(无空格)。不同属性的赋值应以空格分隔(例如“FuncPieces=-1 FuncPieceError=0.001”)。

Returns:

新的通用约束。

GRBQConstr addQConstr(const GRBQuadExpr &lhsExpr, char sense, const GRBQuadExpr &rhsExpr, string name = "")#

向模型添加一个二次约束。

重要

Gurobi 可以处理凸和非凸二次约束。它们之间的差异可能既重要又微妙。有关更多信息,请参阅此讨论

Parameters:
  • lhsExpr – 新二次约束的左侧表达式。

  • sense – 新二次约束的意义(GRB_LESS_EQUALGRB_EQUAL,或 GRB_GREATER_EQUAL)。

  • rhsExpr – 新二次约束的右侧表达式。

  • name – (可选)新约束的名称。

Returns:

新的二次约束对象。

GRBQConstr addQConstr(const GRBQuadExpr &lhsExpr, char sense, GRBVar rhsVar, string name = "")#

向模型添加一个二次约束。

重要

Gurobi 可以处理凸和非凸二次约束。它们之间的差异可能既重要又微妙。有关更多信息,请参阅此讨论

Parameters:
  • lhsExpr – 新二次约束的左侧表达式。

  • sense – 新二次约束的意义(GRB_LESS_EQUALGRB_EQUAL,或GRB_GREATER_EQUAL)。

  • rhsVar – 新二次约束的右侧变量。

  • name – (可选)新约束的名称。

Returns:

新的二次约束对象。

GRBQConstr addQConstr(GRBTempConstr &tc, string name = "")#

向模型添加一个二次约束。

重要

Gurobi 可以处理凸和非凸二次约束。它们之间的差异可能既重要又微妙。有关更多信息,请参阅此讨论

Parameters:
  • tc – 临时约束对象,使用重载的比较运算符创建。有关更多信息,请参见 GRBTempConstr

  • name – (可选)新约束的名称。

Returns:

新的二次约束对象。

GRBConstr addRange(const GRBLinExpr &expr, double lower, double upper, string name = "")#

向模型添加单个范围约束。范围约束规定输入表达式的值必须在任何解决方案中位于指定的lowerupper界限之间。

请注意,范围约束在内部存储为等式约束。我们向模型添加了一个额外的变量来捕获范围信息。因此,范围约束上的感知属性将始终为GRB_EQUAL。特别是引入一个范围约束

\[L \leq a^T x \leq U\]

等同于添加一个松弛变量 \(s\) 和以下约束条件

\[\begin{split}\begin{array}{rl} a^T x - s & = L \\ 0 \leq s & \leq U - L. \end{array}\end{split}\]
Parameters:
  • expr – 新范围约束的线性表达式。

  • lower – 线性表达式的下限。

  • upper – 线性表达式的上限。

  • name – (可选)新约束的名称。

Returns:

新的约束对象。

GRBConstr *addRanges(const GRBLinExpr *exprs, const double *lower, const double *upper, const string *names, int count)#

向模型添加新的范围约束。范围约束声明输入表达式的值必须在任何解决方案中位于指定的lowerupper界限之间。

Parameters:
  • exprs – 新范围约束的线性表达式。

  • lower – 线性表达式的下界。

  • upper – 线性表达式的上界。

  • name – 新范围约束的名称。

  • count – 要添加的范围约束的数量。

Returns:

新的约束对象数组。请注意,结果是堆分配的,必须由用户返回到堆。

GRBSOS addSOS(const GRBVar *vars, const double *weights, int len, int type)#

向模型添加一个SOS约束。有关SOS约束的详细信息,请参阅 本节

Parameters:
  • vars – 参与SOS约束的变量数组。

  • weights – SOS约束中变量的权重。

  • len – 新SOS集合中的成员数量(varsweights 数组的长度)。

  • type – SOS 类型(可以是 GRB_SOS_TYPE1GRB_SOS_TYPE2)。

Returns:

新的SOS约束。

GRBVar addVar(double lb, double ub, double obj, char type, string name = "")#

向模型添加一个单一的决策变量;非零条目将在稍后添加。

Parameters:
  • lb – 新变量的下界。

  • ub – 新变量的上限。

  • obj – 新变量的目标系数。

  • type – 新变量的变量类型 (GRB_CONTINUOUS, GRB_BINARY, GRB_INTEGER, GRB_SEMICONT, 或 GRB_SEMIINT).

  • name – (可选)新变量的名称。

Returns:

新变量对象。

GRBVar addVar(double lb, double ub, double obj, char type, int numnz, const GRBConstr *constrs, const double *coeffs, string name = "")#

向模型添加单个决策变量和相关的非零系数。

Parameters:
  • lb – 新变量的下界。

  • ub – 新变量的上限。

  • obj – 新变量的目标系数。

  • type – 新变量的变量类型 (GRB_CONTINUOUS, GRB_BINARY, GRB_INTEGER, GRB_SEMICONT, 或 GRB_SEMIINT).

  • numnz – 此新变量参与的约束数量。

  • constrs – 变量参与的约束数组。

  • coeffs – 变量参与的每个约束的系数数组。

  • name – (可选)新变量的名称。

Returns:

新变量对象。

GRBVar addVar(double lb, double ub, double obj, char type, const GRBColumn &col, string name = "")#

向模型添加单个决策变量和相关的非零系数。

Parameters:
  • lb – 新变量的下界。

  • ub – 新变量的上限。

  • obj – 新变量的目标系数。

  • type – 新变量的变量类型 (GRB_CONTINUOUS, GRB_BINARY, GRB_INTEGER, GRB_SEMICONT, 或 GRB_SEMIINT).

  • col – GRBColumn 对象,用于指定新变量所属的一组约束。

  • name – (可选)新变量的名称。

Returns:

新变量对象。

GRBVar *addVars(int count, char type = GRB_CONTINUOUS)#

向模型添加count个新的决策变量。所有相关的属性都采用其默认值,除了变量type,它被指定为参数。

Parameters:
  • count – 要添加的变量数量。

  • type – (可选)新变量的变量类型 (GRB_CONTINUOUS, GRB_BINARY, GRB_INTEGER, GRB_SEMICONT, 或 GRB_SEMIINT)。

Returns:

新变量对象的数组。请注意,结果是堆分配的,必须由用户返回到堆。

GRBVar *addVars(const double *lb, const double *ub, const double *obj, const char *type, const string *names, int count)#

向模型添加count个新的决策变量。此签名允许您使用数组来保存各种变量属性(下限、上限等)。

Parameters:
  • lb – 新变量的下界。可以是NULL,在这种情况下,变量的下界为0.0。

  • ub – 新变量的上界。可以是NULL,在这种情况下,变量将获得无限的上界。

  • obj – 新变量的目标系数。可以是NULL,在这种情况下,变量的目标系数为0.0。

  • type – 新变量的变量类型(GRB_CONTINUOUS, GRB_BINARY, GRB_INTEGER, GRB_SEMICONT, 或 GRB_SEMIINT)。 可以为 NULL,在这种情况下,变量被假定为连续的。

  • names – 新变量的名称。可以是NULL,在这种情况下,所有变量都会被赋予默认名称。

  • count – 要添加的变量数量。

Returns:

新变量对象的数组。请注意,结果是堆分配的,必须由用户返回到堆。

GRBVar *addVars(const double *lb, const double *ub, const double *obj, const char *type, const string *names, const GRBColumn *cols, int count)#

向模型添加count个新的决策变量。此签名允许您使用GRBColumn对象数组指定每个新变量所属的约束集。

Parameters:
  • lb – 新变量的下界。可以是NULL,在这种情况下,变量的下界为0.0。

  • ub – 新变量的上界。可以是NULL,在这种情况下,变量的上界为无限。

  • obj – 新变量的目标系数。可以是NULL,在这种情况下,变量的目标系数为0.0。

  • type – 新变量的变量类型(GRB_CONTINUOUS, GRB_BINARY, GRB_INTEGER, GRB_SEMICONT, 或 GRB_SEMIINT)。 可以为 NULL,在这种情况下,变量被假定为连续型。

  • names – 新变量的名称。可以是NULL,在这种情况下,所有变量都会被赋予默认名称。

  • cols – GRBColumn 对象,用于指定每个新列所属的一组约束。

  • count – 要添加的变量数量。

Returns:

新变量对象的数组。请注意,结果是堆分配的,必须由用户返回到堆。

void chgCoeff(GRBConstr constr, GRBVar var, double newvalue)#

更改模型中的一个系数。所需的更改使用GRBVar对象、GRBConstr对象以及指定约束中指定变量的所需系数来捕获。如果对同一系数进行多次更改,将应用最后一次更改。

请注意,由于我们采用了延迟更新的方法,更改实际上不会生效,直到您更新模型(使用GRBModel::update)、优化模型(使用GRBModel::optimize)或将模型写入磁盘(使用GRBModel::write)。

Parameters:
  • constr – 要更改的系数的约束。

  • var – 要更改系数的变量。

  • newvalue – 系数的期望新值。

void chgCoeffs(const GRBConstr *constrs, const GRBVar *vars, const double *vals, int len)#

更改模型中的系数列表。每个所需的更改都使用一个GRBVar对象、一个GRBConstr对象以及指定约束中指定变量的所需系数来捕获。输入数组中的每个条目都对应于一个所需的系数更改。如果对同一系数进行多次更改,将应用最后一个更改。

请注意,由于我们采用了延迟更新的方法,更改实际上不会生效,直到您更新模型(使用GRBModel::update)、优化模型(使用GRBModel::optimize)或将模型写入磁盘(使用GRBModel::write)。

Parameters:
  • constrs – 要更改的系数的约束条件。

  • vars – 用于更改系数的变量。

  • vals – 系数的期望新值。

  • len – 要更改的系数数量(varsconstrsvals 数组的长度)。

void computeIIS()#

计算一个不可约不一致子系统(IIS)。

IIS 是具有以下属性的约束和变量边界的子集:

  • 这仍然是不可行的,并且

  • 如果移除单个约束或边界,子系统将变得可行。

请注意,一个不可行的模型可能有多个IIS。Gurobi返回的不一定是最小的一个;可能存在其他具有更少约束或边界的IIS。

IIS 结果以多个属性返回: IISConstr, IISLB, IISUB, IISSOS, IISQConstr, 和 IISGenConstr. 每个属性指示相应的模型元素是否是计算出的 IIS 的成员。

请注意,对于具有一般函数约束的模型,约束的分段线性近似可能会导致不可靠的IIS结果。

IIS日志提供了关于算法进度的信息,包括对最终IIS大小的猜测。

如果IIS计算在完成之前被中断,Gurobi将返回到目前为止找到的最小不可行子系统。

IISConstrForceIISLBForceIISUBForceIISSOSForceIISQConstrForceIISGenConstrForce属性允许您标记模型元素以包含或排除在计算的IIS中。将属性设置为1会强制将相应元素包含在IIS中,将其设置为0会强制将其排除在IIS之外,将其设置为-1则允许算法决定。

为了举例说明这些属性何时可能有用,考虑一种情况,即已知初始模型是可行的,但在添加约束或收紧边界后变得不可行。如果你只对了解哪些更改导致了不可行性感兴趣,你可以强制将未修改的边界和约束纳入IIS。这使得IIS算法能够专注于新的约束,这通常会显著加快速度。

请注意,将任何Force属性设置为0可能会使生成的子系统变得可行,这将使得无法构建IIS。无论如何尝试都会导致IIS_NOT_INFEASIBLE错误。同样,将此属性设置为1可能会导致IIS不可约。更准确地说,系统仅在具有-1或0的强制值的模型元素方面才是不可约的。

此方法填充了IISConstrIISQConstrIISGenConstr约束属性,IISSOS、SOS属性,以及IISLBIISUB变量属性。您还可以通过写入.ilp格式文件(参见GRBModel::write)来获取有关IIS计算结果的信息。此文件仅包含原始模型中的IIS。

使用 IISMethod 参数来调整 IIS 算法的行为。

请注意,此方法可用于计算连续和MIP模型的IIS。

void discardConcurrentEnvs()#

丢弃模型的并发环境。

getConcurrentEnv创建的并发环境将被每个后续调用并发优化器使用,直到并发环境被丢弃。

void discardMultiobjEnvs()#

丢弃与模型关联的所有多目标环境,从而将多目标优化恢复为其默认行为。

请参考关于 多目标的讨论,了解如何指定多个目标函数并控制它们之间的权衡。

使用 getMultiobjEnv 创建一个多目标环境。

double feasRelax(int relaxobjtype, bool minrelax, int vlen, const GRBVar *vars, const double *lbpen, const double *ubpen, int clen, const GRBConstr *constrs, const double *rhspen)#

修改GRBModel对象以创建可行性松弛。 请注意,您需要在结果上调用optimize来计算实际的松弛解。

可行性松弛是一种模型,当解决时,它最小化解违反原始模型的边界和线性约束的量。该方法提供了多种指定松弛的选项。

如果您指定relaxobjtype=0,可行性松弛的目标是最小化边界和约束违规的加权幅度之和。lbpenubpenrhspen参数分别指定了下界、上界和线性约束中每单位违规的成本。

如果您指定relaxobjtype=1,可行性松弛的目标是最小化边界和约束违反的加权平方和。lbpenubpenrhspen参数分别指定了下界、上界和线性约束违反的平方系数。

如果您指定relaxobjtype=2,可行性松弛的目标是最小化边界和约束违规的加权计数。lbpenubpenrhspen参数分别指定违反下界、上界和线性约束的成本。

举个例子,如果一个带有rhspenp的约束被违反了2.0,它将为relaxobjtype=0的可行性松弛目标贡献2*p,为relaxobjtype=1贡献2*2*p,为relaxobjtype=2贡献p

minrelax 参数是一个布尔值,用于控制创建的可行性松弛类型。如果 minrelax=false,优化返回的模型会得到一个最小化违规成本的解。如果 minrelax=true,优化返回的模型会找到一个最小化原始目标的解,但仅从那些最小化违规成本的解中选择。请注意,当 minrelax=true 时,feasRelax 必须解决一个优化问题以找到最小可能的松弛,这可能会非常耗时。

此方法有两个签名。较复杂的一个接受变量和约束的列表,以及与放松相应的下限、上限和约束相关的惩罚。如果变量或约束未包含在这些列表中,则相关的界限或约束可能不会被违反。较简单的签名接受一对布尔参数,vrelaxcrelax,它们指示变量界限和/或约束是否可以被违反。如果 vrelax/crelaxtrue,则每个界限/约束分别允许被违反,并且相关的成本为1.0。

有关此例程如何转换模型的示例,以及有关创建的变量和约束的更多详细信息,请参阅本节

请注意,这是一个破坏性方法:它会修改调用它的模型。如果您不想修改原始模型,请使用GRBModel constructor在调用此方法之前创建一个副本。

创建一个可行性松弛模型。

Parameters:
  • relaxobjtype – 用于寻找最小成本松弛的成本函数。

  • minrelax – 执行可行性松弛的类型。

  • vlen – 允许违反边界的变量列表的长度。

  • vars – 允许违反其界限的变量。

  • lbpen – 违反变量下界的惩罚。对于参数 vars 中的每个变量都有一个条目。

  • ubpen – 违反变量上限的惩罚。参数 vars 中的每个变量都有一个条目。

  • clen – 允许被违反的线性约束列表的长度。

  • constrs – 允许被违反的线性约束。

  • rhspen – 违反线性约束的惩罚。对于参数 constrs 中的每个约束都有一个条目。

Returns:

如果minrelax为false,则返回0。如果minrelax为true,返回值是执行的松弛的目标值。如果该值小于0,表示该方法未能创建可行性松弛。

double feasRelax(int relaxobjtype, bool minrelax, bool vrelax, bool crelax)#

修改GRBModel对象以创建可行性松弛。 请注意,您需要在结果上调用optimize来计算实际的松弛解。

可行性松弛是一种模型,当解决时,它最小化解违反原始模型的边界和线性约束的量。该方法提供了多种指定松弛的选项。

如果您指定relaxobjtype=0,可行性松弛的目标是最小化边界和约束违规的加权幅度之和。lbpenubpenrhspen参数分别指定了下界、上界和线性约束中每单位违规的成本。

如果您指定relaxobjtype=1,可行性松弛的目标是最小化边界和约束违反的加权平方和。lbpenubpenrhspen参数分别指定了下界、上界和线性约束违反的平方系数。

如果您指定relaxobjtype=2,可行性松弛的目标是最小化边界和约束违规的加权计数。lbpenubpenrhspen参数分别指定违反下界、上界和线性约束的成本。

举个例子,如果一个带有rhspenp的约束被违反了2.0,它将为relaxobjtype=0的可行性松弛目标贡献2*p,为relaxobjtype=1贡献2*2*p,为relaxobjtype=2贡献p

minrelax 参数是一个布尔值,用于控制创建的可行性松弛类型。如果 minrelax=false,优化返回的模型会得到一个最小化违规成本的解。如果 minrelax=true,优化返回的模型会找到一个最小化原始目标的解,但仅从那些最小化违规成本的解中选择。请注意,当 minrelax=true 时,feasRelax 必须解决一个优化问题以找到最小可能的松弛,这可能会非常耗时。

此方法有两个签名。较复杂的一个接受变量和约束的列表,以及与放松相应的下限、上限和约束相关的惩罚。如果变量或约束未包含在这些列表中,则相关的界限或约束可能不会被违反。较简单的签名接受一对布尔参数,vrelaxcrelax,它们指示变量界限和/或约束是否可以被违反。如果 vrelax/crelaxtrue,则每个界限/约束分别允许被违反,并且相关的成本为1.0。

有关此例程如何转换模型的示例,以及有关创建的变量和约束的更多详细信息,请参阅本节

请注意,这是一个破坏性方法:它会修改调用它的模型。如果您不想修改原始模型,请使用GRBModel constructor在调用此方法之前创建一个副本。

创建可行性松弛模型的简化方法。

Parameters:
  • relaxobjtype – 用于寻找最小成本松弛的成本函数。

  • minrelax – 执行可行性松弛的类型。

  • vrelax – 表示是否可以放宽变量边界(对于任何违规行为,成本为1.0)。

  • crelax – 表示线性约束是否可以放宽(对于任何违规行为,成本为1.0)。

Returns:

如果minrelax为false,则返回0。如果minrelax为true,返回值是执行的松弛的目标值。如果该值小于0,表示该方法未能创建可行性松弛。

GRBModel fixedModel()#

创建与MIP模型关联的固定模型。 MIP模型中必须有一个解决方案(例如通过调用optimize方法获得)或MIP起始点。如果没有可用的解决方案,则使用StartNumber指定的MIP起始点。

在模型中,每个整数变量都被固定为在MIP解或MIP起始中该变量所取的值。此外,连续变量可能会被固定以满足SOS或一般约束。结果是模型不再具有整数约束、SOS约束或一般约束。

注意

虽然固定问题始终是一个连续模型,但它可能包含非凸二次目标或非凸二次约束。因此,它仍然可以使用MIP算法来解决。

注意

在多目标模型中,除了第一个目标外,所有其他目标都被忽略。所有场景(如果有的话)也同样被忽略。

Returns:

修复了与调用对象关联的模型。

void convertToFixed()#

将MIP模型转换为连续的模型,就地转换。 MIP模型中必须有一个解决方案(例如通过调用optimize方法获得)或MIP起始点。如果没有可用的解决方案,则使用StartNumber指定的MIP起始点。

在模型中,每个整数变量都被固定为在MIP解或MIP起始中该变量所取的值。此外,连续变量可能会被固定以满足SOS或一般约束。结果是模型不再具有整数约束、SOS约束或一般约束。

注意

虽然固定问题始终是一个连续模型,但它可能包含非凸二次目标或非凸二次约束。因此,它仍然可以使用MIP算法来解决。

注意

如果转换后的模型包含多个目标或场景,或者模型包含并发环境或调优环境,则会引发错误。

double get(GRB_DoubleParam param)#

查询一个双精度值参数的值。

Parameters:

param – 正在查询的参数。

Returns:

请求参数的当前值。

int get(GRB_IntParam param)#

查询一个整数值参数的值。

Parameters:

param – 正在查询的参数。

Returns:

请求参数的当前值。

string get(GRB_StringParam param)#

查询字符串值参数的值。

Parameters:

param – 正在查询的参数。

Returns:

请求参数的当前值。

char *get(GRB_CharAttr attr, const GRBVar *vars, int count)#

查询一组变量的字符值变量属性。

Parameters:
  • attr – 被查询的属性。

  • vars – 一个变量数组,其属性值正在被查询。

  • count – 要检索的变量属性的数量。

Returns:

每个输入变量所请求属性的当前值。请注意,结果是堆分配的,必须由用户返回到堆中。

char *get(GRB_CharAttr attr, const GRBConstr *constrs, int count)#

查询一组约束的字符值约束属性。

Parameters:
  • attr – 被查询的属性。

  • constrs – 一个约束数组,其属性值正在被查询。

  • count – 要检索的约束属性的数量。

Returns:

每个输入约束所请求属性的当前值。请注意,结果是堆分配的,必须由用户返回到堆中。

char *get(GRB_CharAttr attr, const GRBQConstr *qconstrs, int count)#

查询一组二次约束的字符值二次约束属性。

Parameters:
  • attr – 被查询的属性。

  • constrs – 一个二次约束数组,其属性值正在被查询。

  • count – 要检索的二次约束属性的数量。

Returns:

每个输入二次约束的请求属性的当前值。请注意,结果是堆分配的,必须由用户返回到堆中。

double get(GRB_DoubleAttr attr)#

查询双精度模型属性的值。

Parameters:

attr – 被查询的属性。

Returns:

请求属性的当前值。

double *get(GRB_DoubleAttr attr, const GRBVar *vars, int count)#

查询一组变量的双精度值变量属性。

Parameters:
  • attr – 被查询的属性。

  • vars – 一个变量数组,其属性值正在被查询。

  • count – 要检索的变量属性的数量。

Returns:

每个输入变量的请求属性的当前值。请注意,结果是堆分配的,必须由用户返回到堆中。

double *get(GRB_DoubleAttr attr, const GRBConstr *constrs, int count)#

查询一组约束的双值约束属性。

Parameters:
  • attr – 被查询的属性。

  • constrs – 一个约束数组,其属性值正在被查询。

  • count – 要检索的约束属性的数量。

Returns:

每个输入约束所请求属性的当前值。请注意,结果是堆分配的,必须由用户返回到堆中。

double *get(GRB_DoubleAttr attr, const GRBQConstr *qconstrs, int count)#

查询一组二次约束的双值二次约束属性。

Parameters:
  • attr – 被查询的属性。

  • constrs – 一个二次约束数组,正在查询其属性值。

  • count – 要检索的二次约束属性的数量。

Returns:

每个输入二次约束的请求属性的当前值。请注意,结果是堆分配的,必须由用户返回到堆。

int get(GRB_IntAttr attr)#

查询一个整数值模型属性的值。

Parameters:

attr – 被查询的属性。

Returns:

请求属性的当前值。

int *get(GRB_IntAttr attr, const GRBVar *vars, int count)#

查询一组变量的整数值变量属性。

Parameters:
  • attr – 被查询的属性。

  • vars – 一个变量数组,其属性值正在被查询。

  • count – 要检索的变量属性的数量。

Returns:

每个输入变量所请求属性的当前值。请注意,结果是堆分配的,必须由用户返回到堆中。

int *get(GRB_IntAttr attr, const GRBConstr *constrs, int count)#

查询一组约束的整数值约束属性。

Parameters:
  • attr – 被查询的属性。

  • constrs – 一个约束数组,其属性值正在被查询。

  • count – 要检索的约束属性的数量。

Returns:

每个输入约束所请求属性的当前值。请注意,结果是堆分配的,必须由用户返回到堆中。

string get(GRB_StringAttr attr)#

查询字符串值模型属性的值。

Parameters:

attr – 被查询的属性。

Returns:

请求属性的当前值。

string *get(GRB_StringAttr attr, const GRBVar *vars, int count)#

查询一个字符串值变量属性的变量数组。

Parameters:
  • attr – 被查询的属性。

  • vars – 一个变量数组,其属性值正在被查询。

  • count – 要检索的变量属性的数量。

Returns:

每个输入变量所请求属性的当前值。请注意,结果是堆分配的,必须由用户返回到堆中。

string *get(GRB_StringAttr attr, const GRBConstr *constrs, int count)#

查询一个字符串值约束属性的约束数组。

Parameters:
  • attr – 被查询的属性。

  • constrs – 一个约束数组,其属性值正在被查询。

  • count – 要检索的约束属性的数量。

Returns:

每个输入约束所请求属性的当前值。请注意,结果是堆分配的,必须由用户返回到堆中。

string *get(GRB_StringAttr attr, const GRBQConstr *qconstrs, int count)#

查询一组二次约束的字符串值二次约束属性。

Parameters:
  • attr – 被查询的属性。

  • constrs – 一个二次约束数组,其属性值正在被查询。

  • count – 要检索的二次约束属性的数量。

Returns:

每个输入二次约束的请求属性的当前值。请注意,结果是堆分配的,必须由用户返回到堆中。

double getCoeff(GRBConstr constr, GRBVar var)#

查询线性约束constr中变量var的系数(注意结果可能为零)。

Parameters:
  • constr – 请求的约束条件。

  • var – 请求的变量。

Returns:

请求系数的当前值。

GRBColumn getCol(GRBVar var)#

检索变量参与的约束列表及其相关系数。结果以GRBColumn对象的形式返回。

Parameters:

var – 感兴趣的变量。

Returns:

一个GRBColumn对象,用于捕获变量参与的约束集。

GRBEnv getConcurrentEnv(int num)#

为模型创建/检索并发环境。

此方法提供了对并发优化器的细粒度控制。 通过创建您自己的并发环境并在这些环境上设置适当的参数(例如,方法参数),您可以精确控制并发优化器采用的策略。例如,如果您创建两个并发环境,并将方法设置为一个使用原始单纯形法,另一个使用对偶单纯形法,后续的并发优化器运行将使用这两种单纯形算法,而不是默认选择。

请注意,您必须创建连续编号的并发环境,从num=0开始。例如,如果您想要三个并发环境,它们必须编号为0、1和2。

一旦你创建了并发环境,它们将用于该模型上的所有后续并发优化。使用discardConcurrentEnvs来恢复到默认的并发优化器行为。

Parameters:

num – 并发环境数量。

Returns:

模型的并发环境。

GRBConstr getConstrByName(const string &name)#

根据名称检索线性约束。如果多个线性约束具有相同的名称,此方法将任意选择一个。

Parameters:

name – 所需线性约束的名称。

Returns:

请求的线性约束。

GRBConstr *getConstrs()#

检索模型中的所有线性约束的数组。

Returns:

模型中所有线性约束的数组。请注意,此数组是堆分配的,必须由用户返回到堆中。

void getGenConstrMax(GRBGenConstr genc, GRBVar *resvarP, GRBVar *vars, int *lenP, double *constantP)#

检索与类型为MAX的一般约束相关的数据。 对不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性来确定通用约束的类型。

典型用法是调用此例程两次。在第一次调用中,您指定请求的一般约束,并将vars参数的值设置为NULL。例程在lenP中返回指定一般约束中的操作数变量的总数。这使您可以确保vars数组的大小足以容纳第二次调用的结果。

另请参阅addGenConstrMax以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • resvarP – 指向存储约束结果变量的指针。

  • vars – 用于存储约束的操作数变量的数组。

  • lenP – 指向存储约束的操作数变量数量的指针。

  • constantP – 指向存储约束的附加常数操作数的指针。

void getGenConstrMin(GRBGenConstr genc, GRBVar *resvarP, GRBVar *vars, int *lenP, double *constantP)#

检索与MIN类型的通用约束相关联的数据。 对不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性以确定通用约束的类型。

典型用法是调用此例程两次。在第一次调用中,您指定请求的一般约束,并将vars参数的值设置为NULL。例程在lenP中返回指定一般约束中的操作数变量的总数。这使您能够确保vars数组的大小足以容纳第二次调用的结果。

另请参阅addGenConstrMin以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • resvarP – 指向存储约束结果变量的指针。

  • vars – 用于存储约束的操作数变量的数组。

  • lenP – 指向存储约束的操作数变量数量的指针。

  • constantP – 指向存储约束的附加常数操作数的指针。

void getGenConstrNL(GRBGenConstr genc, GRBVar *resvarP, int *nnodesP, int *opcode, double *data, int *parent)#

检索与类型为NL的一般约束相关的数据。 对不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性以确定通用约束的类型。

典型用法是调用此例程两次。在第一次调用中,您指定请求的一般约束,opcodedataparent参数使用NULL值。例程返回在nnodesP中形成指定一般约束的表达式树的总节点数。这使您可以确保opcodedataparent数组的大小足以容纳第二次调用的结果。

另请参阅非线性约束addGenConstrNL以了解此通用约束类型的语义描述。

Parameters:

genc – 要检索的通用约束。

请注意,以下任何参数都可以是NULL

Parameters:
  • resvarP – 约束结果变量的变量。

  • nnodesP – 此约束的表达式树中的节点数。

  • opcode – 一个用于存储节点操作码的数组。

  • data – 一个用于存储节点辅助数据项的数组。

  • parent – 一个用于存储节点父索引的数组。

void getGenConstrAbs(GRBGenConstr genc, GRBVar *resvarP, GRBVar *argvarP)#

检索与类型为ABS的一般约束相关的数据。 对不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性以确定通用约束的类型。

另请参阅addGenConstrAbs以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • resvarP – 指向存储约束结果变量的指针。

  • argvarP – 指向存储约束参数变量的指针。

void getGenConstrAnd(GRBGenConstr genc, GRBVar *resvarP, GRBVar *vars, int *lenP)#

检索与类型为AND的通用约束相关联的数据。 为不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性以确定通用约束的类型。

典型用法是调用此例程两次。在第一次调用中,您指定请求的一般约束,并将vars参数的值设置为NULL。例程在lenP中返回指定一般约束中的操作数变量的总数。这使您能够确保vars数组的大小足以容纳第二次调用的结果。

另请参阅addGenConstrAnd以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • resvarP – 指向存储约束结果变量的指针。

  • vars – 用于存储约束的操作数变量的数组。

  • lenP – 指向存储约束的操作数变量数量的指针。

void getGenConstrOr(GRBGenConstr genc, GRBVar *resvarP, GRBVar *vars, int *lenP)#

检索与OR类型的一般约束相关联的数据。 对不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性以确定通用约束的类型。

典型用法是调用此例程两次。在第一次调用中,您指定请求的一般约束,并将vars参数的值设置为NULL。例程在lenP中返回指定一般约束中的操作数变量的总数。这使您能够确保vars数组的大小足以容纳第二次调用的结果。

另请参阅addGenConstrOr以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • resvarP – 指向存储约束结果变量的指针。

  • vars – 用于存储约束的操作数变量的数组。

  • lenP – 指向存储约束的操作数变量数量的指针。

void getGenConstrNorm(GRBGenConstr genc, GRBVar *resvarP, GRBVar *vars, int *lenP, double *whichP)#

检索与类型为NORM的一般约束相关联的数据。 对不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性来确定通用约束的类型。

典型用法是调用此例程两次。在第一次调用中,您指定请求的一般约束,并将vars参数的值设置为NULL。例程在lenP中返回指定一般约束中的操作数变量的总数。这使您能够确保vars数组的大小足以容纳第二次调用的结果。

另请参阅addGenConstrNorm以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • resvarP – 指向存储约束结果变量的指针。

  • vars – 用于存储约束的操作数变量的数组。

  • lenP – 指向存储约束的操作数变量数量的指针。

  • whichP – 指向存储范数类型的指针(可能的值为0、1、2或GRB_INFINITY)。

void getGenConstrIndicator(GRBGenConstr genc, GRBVar *binvarP, int *binvalP, GRBLinExpr *exprP, char *senseP, double *rhsP)#

检索与类型为INDICATOR的通用约束相关联的数据。 对不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性以确定通用约束的类型。

另请参阅addGenConstrIndicator以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • binvarP – 指向存储约束的二进制指示变量的指针。

  • binvalP – 指向存储指示变量必须取值以触发线性约束的值的指针。

  • exprP – 指向一个GRBLinExpr对象的指针,用于存储由指示器触发的线性约束的左侧表达式。

  • senseP – 指向存储线性约束的sense的指针。 选项是 GRB_LESS_EQUAL, GRB_EQUAL, 或 GRB_GREATER_EQUAL

  • rhsP – 指向存储线性约束右侧值的指针。

void getGenConstrPWL(GRBGenConstr genc, GRBVar *xvarP, GRBVar *yvarP, int *nptsP, double *xpts, double *ypts)#

检索与PWL类型的一般约束相关的数据。 对不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性以确定通用约束的类型。

典型用法是调用此例程两次。在第一次调用中,您指定请求的一般约束,xptsypts 参数使用 NULL 值。例程在 nptsP 中返回 xptsypts 数组的长度。这使您能够确保 xptsypts 数组的大小足以容纳第二次调用的结果。

另请参阅addGenConstrPWL以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • xvarP – 指向存储 \(x\) 变量的指针。

  • yvarP – 指向存储\(y\)变量的指针。

  • nptsP – 指向存储定义分段线性函数的点数的指针。

  • xpts – 定义分段线性函数的点的 \(x\) 值。

  • ypts – 定义分段线性函数的点的 \(y\) 值。

void getGenConstrPoly(GRBGenConstr genc, GRBVar *xvarP, GRBVar *yvarP, int *plenP, double *p)#

检索与类型为POLY的一般约束相关联的数据。 对不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性以确定通用约束的类型。

典型用法是调用此例程两次。在第一次调用中,您指定请求的一般约束,p参数使用NULL值。例程返回p数组的长度在plenP中。这使您能够确保p数组的大小足以容纳第二次调用的结果。

另请参阅addGenConstrPoly以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • xvarP – 指向存储 \(x\) 变量的指针。

  • yvarP – 指向存储\(y\)变量的指针。

  • plenP – 指向存储数组长度的指针。如果 \(x^d\) 是最高次项,则返回 \(d+1\)

  • p – 多项式函数的系数。

void getGenConstrExp(GRBGenConstr genc, GRBVar *xvarP, GRBVar *yvarP)#

检索与类型为EXP的一般约束相关联的数据。 对不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性来确定通用约束的类型。

另请参阅addGenConstrExp以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • xvarP – 指向存储 \(x\) 变量的指针。

  • yvarP – 指向存储\(y\)变量的指针。

void getGenConstrExpA(GRBGenConstr genc, GRBVar *xvarP, GRBVar *yvarP, double *aP)#

检索与类型为EXPA的通用约束相关联的数据。 对不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性来确定通用约束的类型。

另请参阅addGenConstrExpA以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • xvarP – 指向存储 \(x\) 变量的指针。

  • yvarP – 指向存储\(y\)变量的指针。

  • aP – 指向存储函数基址的指针。

void getGenConstrLog(GRBGenConstr genc, GRBVar *xvarP, GRBVar *yvarP)#

检索与类型为LOG的一般约束相关的数据。 对不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性来确定通用约束的类型。

另请参阅addGenConstrLog以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • xvarP – 指向存储 \(x\) 变量的指针。

  • yvarP – 指向存储\(y\)变量的指针。

void getGenConstrLogA(GRBGenConstr genc, GRBVar *xvarP, GRBVar *yvarP, double *aP)#

检索与类型为LOGA的一般约束相关的数据。 对不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性来确定通用约束的类型。

另请参阅addGenConstrLogA以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • xvarP – 指向存储 \(x\) 变量的指针。

  • yvarP – 指向存储\(y\)变量的指针。

  • aP – 指向存储函数基址的指针。

void getGenConstrLogistic(GRBGenConstr genc, GRBVar *xvarP, GRBVar *yvarP)#

检索与类型为LOGISTIC的通用约束相关联的数据。 对不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性以确定通用约束的类型。

另请参阅addGenConstrLogistic以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • xvarP – 指向存储 \(x\) 变量的指针。

  • yvarP – 指向存储\(y\)变量的指针。

void getGenConstrPow(GRBGenConstr genc, GRBVar *xvarP, GRBVar *yvarP, double *aP)#

检索与类型为POW的一般约束相关的数据。 对此方法调用不同类型的一般约束会导致异常。您可以查询 GenConstrType属性来确定一般约束的类型。

另请参阅addGenConstrPow以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • xvarP – 指向存储 \(x\) 变量的指针。

  • yvarP – 指向存储\(y\)变量的指针。

  • aP – 指向存储函数指数的指针。

void getGenConstrSin(GRBGenConstr genc, GRBVar *xvarP, GRBVar *yvarP)#

检索与类型为SIN的一般约束相关的数据。 对不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性来确定通用约束的类型。

另请参阅addGenConstrSin以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • xvarP – 指向存储 \(x\) 变量的指针。

  • yvarP – 指向存储\(y\)变量的指针。

void getGenConstrCos(GRBGenConstr genc, GRBVar *xvarP, GRBVar *yvarP)#

检索与类型为COS的一般约束相关联的数据。 对不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性以确定通用约束的类型。

另请参阅addGenConstrCos以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • xvarP – 指向存储 \(x\) 变量的指针。

  • yvarP – 指向存储\(y\)变量的指针。

void getGenConstrTan(GRBGenConstr genc, GRBVar *xvarP, GRBVar *yvarP)#

检索与类型为TAN的通用约束相关联的数据。 为不同类型的通用约束调用此方法会导致异常。您可以查询 GenConstrType属性来确定通用约束的类型。

另请参阅addGenConstrTan以了解此通用约束类型的语义描述。

以下任何参数都可以是NULL

Parameters:
  • genc – 通用约束对象。

  • xvarP – 指向存储 \(x\) 变量的指针。

  • yvarP – 指向存储\(y\)变量的指针。

GRBGenConstr *getGenConstrs()#

检索模型中所有通用约束的数组。

Returns:

模型中所有一般约束的数组。请注意,此数组是堆分配的,必须由用户返回到堆中。

std::string getJSONSolution()#

在调用optimize之后,此方法返回结果解决方案和相关的模型属性作为JSON字符串。详情请参阅JSON解决方案格式部分。

Returns:

一个JSON字符串。

GRBEnv getMultiobjEnv(int index)#

创建/检索具有给定索引的多目标环境以进行优化传递。此环境允许对多目标优化过程进行细粒度控制。具体来说,通过更改此环境上的参数,您可以修改在多目标优化相应传递期间发生的优化行为。

每个多目标环境都从当前模型环境的副本开始。

请参考关于 多目标的讨论,了解如何指定多个目标函数并控制它们之间的权衡。

请参考关于 结合混合和分层目标 的讨论,以获取有关解决多目标模型的优化过程的信息。

使用discardMultiobjEnvs来丢弃多目标环境并返回标准行为。

Parameters:

index – 优化过程的索引,从0开始。

Returns:

解决模型时的多目标环境优化过程。

GRBQuadExpr getObjective()#

检索优化目标。

请注意,目标函数的常数部分和线性部分也可以使用ObjConObj属性来获取。

Returns:

模型目标。

GRBLinExpr getObjective(int index)#

检索一个替代的优化目标。替代目标将始终是线性的。你也可以使用这个例程来检索主要目标(使用index = 0),但如果主要目标包含二次项,你将得到一个异常。

请参考关于 多目标的讨论,以获取更多关于使用替代目标的信息。

请注意,也可以使用ObjNConObjN属性来检索替代目标。

Parameters:

index – 请求的替代目标的索引。

Returns:

请求的替代目标。

int getPWLObj(GRBVar var, double x[], double y[])#

检索变量的分段线性目标函数。返回值给出了定义函数的点的数量,\(x\)\(y\) 参数分别给出了这些点的坐标。\(x\)\(y\) 参数必须足够大以容纳结果。如果你只想要点的数量,可以使用 NULL 值调用此方法。

请参考此讨论以获取关于\(x\)\(y\)中值的更多信息。

Parameters:
  • var – 正在检索其目标函数的变量。

  • x – 定义分段线性函数的点的 \(x\) 值。这些值将始终按非递减顺序排列。

  • y – 定义分段线性函数的点的 \(y\) 值。

Returns:

定义分段线性目标函数的点数。

GRBQuadExpr getQCRow(GRBQConstr qconstr)#

从二次约束中检索左侧表达式。结果以GRBQuadExpr对象的形式返回。

Parameters:

qconstr – 感兴趣的二次约束。

Returns:

一个GRBQuadExpr对象,用于捕获二次约束的左侧。

GRBQConstr *getQConstrs()#

检索模型中所有二次约束的数组。

Returns:

模型中所有二次约束的数组。请注意,此数组是堆分配的,必须由用户返回到堆中。

GRBLinExpr getRow(GRBConstr constr)#

检索参与约束的变量列表及其相关系数。结果以GRBLinExpr对象的形式返回。

Parameters:

constr – 感兴趣的约束。一个 GRBConstr 对象,通常从 addConstrgetConstrs 获得。

Returns:

一个GRBLinExpr对象,用于捕获参与约束的变量集合。

int getSOS(GRBSOS sos, GRBVar *vars, double *weights, int *typeP)#

检索参与SOS约束的变量列表及其相关系数。返回值是该列表的长度。如果您希望在检索结果之前为结果分配空间,请首先使用NULL数组参数调用该方法以确定适当的数组长度。

Parameters:
  • sos – 感兴趣的SOS集合。

  • vars – 参与 sos 的变量列表。

  • weights – 每个参与变量的SOS权重。

  • typeP – SOS集的类型(可以是 GRB_SOS_TYPE1GRB_SOS_TYPE2)。

Returns:

结果数组的长度。

GRBSOS *getSOSs()#

检索模型中所有SOS约束的数组。

Returns:

模型中所有SOS约束的数组。请注意,此数组是堆分配的,必须由用户返回到堆中。

void getTuneResult(int n)#

使用此方法检索之前tune调用的结果。使用参数n调用此方法会将调优的参数集n复制到模型中。参数集按质量递减的顺序存储,参数集0为最佳。可用集的数量存储在属性TuneResultCount中。

一旦你获取了调优结果,你可以调用 optimize 来使用这些参数设置来优化模型,或者调用 write 将更改后的参数写入一个 .prm 文件。

请参考参数调优部分了解调优工具的详细信息。

Parameters:

n – 要检索的调优结果的索引。最佳结果作为索引0可用。存储结果的数量可在属性TuneResultCount中获取。

GRBVar getVarByName(const string &name)#

根据名称检索变量。如果多个变量具有相同的名称,此方法将任意选择一个。

Parameters:

name – 所需变量的名称。

Returns:

请求的变量。

GRBVar *getVars()#

检索模型中的所有变量的数组。

Returns:

模型中所有变量的数组。请注意,此数组是堆分配的,必须由用户返回到堆中。

void optimize()#

优化模型。用于优化的算法取决于模型类型(连续模型的单纯形法或障碍法;MIP模型的分支定界法)。成功完成后,此方法将填充模型的解决方案相关属性。有关属性的更多信息,请参见属性部分。

请参考本节,了解与使用有限精度浮点算术解决精确定义的数学模型相关的一些实际问题。

请注意,此方法将处理所有待处理的模型修改。

void optimizeasync()#

异步优化模型。此例程立即返回。您的程序可以在优化在后台进行时执行其他计算。要检查异步优化的状态,请查询模型的状态属性。值为IN_PROGRESS表示优化尚未完成。当您完成前台任务时,必须调用sync以使您的前台程序与异步优化任务同步。

请注意,在后台运行优化时,您可以进行的Gurobi调用集合非常有限。具体来说,您只能执行属性查询,并且只能查询一些属性(如下所列)。对正在运行的模型或在同一Gurobi环境中构建的任何其他模型的任何其他调用都将失败,并返回错误代码优化进行中

请注意,在其他环境中构建的模型没有这样的限制。因此,例如,您可以创建多个环境,然后让一个前台程序启动多个同时进行的异步优化,每个优化都在其自己的环境中进行。

如前所述,您可以在异步优化进行时查询状态属性的值。其他可以查询的属性包括:ObjValObjBoundIterCountNodeCountBarIterCount。在每种情况下,返回的值反映了优化到该点的进度。任何尝试查询不在此列表中的属性值都将返回OPTIMIZATION_IN_PROGRESS错误。

string optimizeBatch()#

向集群管理器提交一个新的批处理请求。返回BatchID(一个字符串),它唯一地标识集群管理器中的作业,并可用于查询此请求的状态(从此程序或任何其他程序)。一旦请求完成,BatchID也可以用于检索相关的解决方案。要提交批处理请求,您必须通过设置VTagCTagQCTag属性中的至少一个来标记模型的至少一个元素。有关批处理优化的更多详细信息,请参阅批处理优化部分。

请注意,此例程将处理所有待处理的模型修改。

Example:
// submit batch request
batchID = model->optimizeBatch();
GRBModel presolve()#

对模型执行预求解。

请注意,此函数计算的预解模型可能与优化模型时计算的预解模型不同。

Returns:

原始模型的预解版本。

void read(const string &filename)#

此方法是从文件导入数据到模型的通用入口点。它可以用于读取连续模型的基础文件、MIP模型的起始向量、MIP模型的变量提示、MIP模型的分支优先级或参数设置。读取的数据类型由文件后缀决定。文件格式在文件格式部分中描述。

请注意,读取文件不会处理所有待处理的模型修改。这些修改可以通过调用GRBModel::update来处理。

还要注意,如果你想从文件中读取一个新模型,这不是要使用的方法。为此,请使用GRBModel 构造函数。构造函数的一个变体将包含新模型的文件名作为其参数。

Parameters:

filename – 要读取的文件名。文件的后缀必须是 .bas(用于LP基础),.mst.sol(用于MIP 启动),.hnt(用于MIP提示),.ord(用于优先级顺序), .attr(用于一组属性设置),或 .prm(用于参数文件)。后缀可以选择性地跟随 .zip.gz.bz2.7z.xz

void remove(GRBConstr constr)#

从模型中移除一个线性约束。请注意,由于我们采用延迟更新的方法,更改实际上不会生效,直到您更新模型(使用 GRBModel::update)、优化模型(使用 GRBModel::optimize),或将模型写入磁盘(使用 GRBModel::write)。

Parameters:

constr – 要移除的线性约束。

void remove(GRBGenConstr genconstr)#

从模型中移除一个通用约束。请注意,由于我们采用延迟更新的方法,更改实际上不会生效,直到您更新模型(使用GRBModel::update)、优化模型(使用GRBModel::optimize)或将模型写入磁盘(使用GRBModel::write)。

Parameters:

genconstr – 要移除的通用约束。

void remove(GRBQConstr qconstr)#

从模型中移除一个二次约束。请注意,由于我们采用延迟更新的方法,更改实际上不会生效,直到您更新模型(使用GRBModel::update)、优化模型(使用GRBModel::optimize)或将模型写入磁盘(使用GRBModel::write)。

Parameters:

qconstr – 要移除的二次约束。

void remove(GRBSOS sos)#

从模型中移除一个SOS约束。请注意,由于我们采用延迟更新的方法,更改实际上不会生效,直到您更新模型(使用GRBModel::update)、优化模型(使用GRBModel::optimize)或将模型写入磁盘(使用GRBModel::write)。

Parameters:

sos – 要移除的SOS约束。

void remove(GRBVar var)#

从模型中移除一个变量。请注意,由于我们采用延迟更新的方法,更改实际上不会生效,直到您更新模型(使用GRBModel::update)、优化模型(使用GRBModel::optimize)或将模型写入磁盘(使用GRBModel::write)。

Parameters:

var – 要移除的变量。

void reset(int clearall = 0)#

将模型重置为未解决状态,丢弃任何先前计算的解决方案信息。请注意,由于我们的延迟更新方法,更改实际上不会生效,直到您更新模型(使用GRBModel::update)、优化模型(使用GRBModel::optimize)或将模型写入磁盘(使用GRBModel::write)。

Parameters:

clearall – (可选)值为1时,丢弃影响求解过程但不影响实际模型的附加信息(目前包括MIP起始点、变量提示、分支优先级、惰性标志和分区信息)。默认值为0时,仅丢弃解决方案。

void setCallback(GRBCallback *cb)#

为模型设置回调对象。Gurobi求解器将定期调用此对象上的callback()方法。您将有机会从此回调中获取有关优化状态的更详细信息。有关更多信息,请参阅GRBCallback的文档。

请注意,一个模型只能有一个回调方法,因此此调用将替换现有的回调。要禁用先前设置的回调,请使用NULL参数调用此方法。

void set(GRB_DoubleParam param, double newvalue)#

设置一个双精度值参数的值。

在模型上设置参数和在环境上设置参数(即通过GRBEnv::set)的区别在于,前者修改的是单个模型的参数,而后者修改的是随后使用该环境构建的每个模型的参数(并且对于之前使用该环境构建的模型,参数保持不变)。

Parameters:
  • param – 正在修改的参数。

  • newvalue – 参数所需的新值。

void set(GRB_IntParam param, int newvalue)#

设置一个整型参数的值。

在模型上设置参数和在环境上设置参数(即通过GRBEnv::set)的区别在于,前者修改的是单个模型的参数,而后者修改的是随后使用该环境构建的每个模型的参数(并且对于之前使用该环境构建的模型,参数保持不变)。

Parameters:
  • param – 正在修改的参数。

  • newvalue – 参数所需的新值。

void set(GRB_StringParam param, string newvalue)#

设置字符串类型参数的值。

在模型上设置参数和在环境上设置参数(即通过GRBEnv::set)的区别在于,前者修改的是单个模型的参数,而后者修改的是随后使用该环境构建的每个模型的参数(并且对于之前使用该环境构建的模型,参数保持不变)。

Parameters:
  • param – 正在修改的参数。

  • newvalue – 参数所需的新值。

void set(GRB_CharAttr attr, const GRBVar *vars, char *newvalues, int count)#

为变量数组设置一个字符型变量属性。

Parameters:
  • attr – 正在修改的属性。

  • vars – 一个变量数组,其属性值正在被修改。

  • newvalues – 每个输入变量的属性所需的新值。

  • count – 要设置的变量属性的数量。

void set(GRB_CharAttr attr, const GRBConstr *constrs, char *newvalues, int count)#

为约束数组设置一个字符值约束属性。

Parameters:
  • attr – 正在修改的属性。

  • constrs – 一个约束数组,其属性值正在被修改。

  • newvalues – 每个输入约束的属性的期望新值。

  • count – 要设置的约束属性的数量。

void set(GRB_CharAttr attr, const GRBQConstr *qconstrs, char *newvalues, int count)#

为二次约束数组设置一个字符值的二次约束属性。

Parameters:
  • attr – 正在修改的属性。

  • constrs – 一个二次约束数组,其属性值正在被修改。

  • newvalues – 每个输入二次约束属性的期望新值。

  • count – 要设置的二次约束属性的数量。

void set(GRB_DoubleAttr attr, double newvalue)#

设置一个双精度值的模型属性。

Parameters:
  • attr – 正在修改的属性。

  • newvalue – 属性的期望新值。

void set(GRB_DoubleAttr attr, const GRBVar *vars, double *newvalues, int count)#

为变量数组设置一个双精度值的变量属性。

Parameters:
  • attr – 正在修改的属性。

  • vars – 一个变量数组,其属性值正在被修改。

  • newvalues – 每个输入变量的属性所需的新值。

  • count – 要设置的变量属性的数量。

void set(GRB_DoubleAttr attr, const GRBConstr *constrs, double *newvalues, int count)#

为约束数组设置一个双值约束属性。

Parameters:
  • attr – 正在修改的属性。

  • constrs – 一个约束数组,其属性值正在被修改。

  • newvalues – 每个输入约束的属性的期望新值。

  • count – 要设置的约束属性的数量。

void set(GRB_DoubleAttr attr, const GRBQConstr *qconstrs, double *newvalues, int count)#

为一系列二次约束设置一个双值二次约束属性。

Parameters:
  • attr – 正在修改的属性。

  • constrs – 一个二次约束数组,其属性值正在被修改。

  • newvalues – 每个输入二次约束属性的期望新值。

  • count – 要设置的二次约束属性的数量。

void set(GRB_IntAttr attr, int newvalue)#

设置一个整数值模型属性的值。

Parameters:
  • attr – 正在修改的属性。

  • newvalue – 属性的期望新值。

void set(GRB_IntAttr attr, const GRBVar *vars, int *newvalues, int count)#

为变量数组设置一个整数值的变量属性。

Parameters:
  • attr – 正在修改的属性。

  • vars – 一个变量数组,其属性值正在被修改。

  • newvalues – 每个输入变量的属性所需的新值。

  • count – 要设置的变量属性的数量。

void set(GRB_IntAttr attr, const GRBConstr *constrs, int *newvalues, int count)#

为约束数组设置一个整数值的约束属性。

Parameters:
  • attr – 正在修改的属性。

  • constrs – 一个约束数组,其属性值正在被修改。

  • newvalues – 每个输入约束的属性的期望新值。

  • count – 要设置的约束属性的数量。

void set(GRB_StringAttr attr, string newvalue)#

设置字符串值模型属性的值。

Parameters:
  • attr – 正在修改的属性。

  • newvalue – 属性的期望新值。

void set(GRB_StringAttr attr, const GRBVar *vars, string *newvalues, int count)#

为变量数组设置一个字符串值的变量属性。

Parameters:
  • attr – 正在修改的属性。

  • vars – 一个变量数组,其属性值正在被修改。

  • newvalues – 每个输入变量的属性所需的新值。

  • count – 要设置的变量属性的数量。

void set(GRB_StringAttr attr, const GRBConstr *constrs, string *newvalues, int count)#

为约束数组设置一个字符串值的约束属性。

Parameters:
  • attr – 正在修改的属性。

  • constrs – 一个约束数组,其属性值正在被修改。

  • newvalues – 每个输入约束的属性的期望新值。

  • count – 要设置的约束属性的数量。

void set(GRB_StringAttr attr, const GRBQConstr *qconstrs, string *newvalues, int count)#

为二次约束数组设置一个字符串值的二次约束属性。

Parameters:
  • attr – 正在修改的属性。

  • constrs – 一个二次约束数组,其属性值正在被修改。

  • newvalues – 每个输入二次约束属性的期望新值。

  • count – 要设置的二次约束属性的数量。

void setObjective(GRBLinExpr linexpr, int sense = 0)#

将模型目标设置为线性表达式(对于多目标优化,请参见setObjectiveN)。

请注意,您也可以使用Obj变量属性来修改模型目标的线性部分。如果您希望混合使用这两种方法,请注意此方法会替换整个现有目标,而Obj属性可用于修改单个线性项。

Parameters:
  • linexpr – 新的线性模型目标。

  • sense – (可选)优化方向(GRB_MINIMIZE 用于最小化,GRB_MAXIMIZE 用于最大化)。省略此参数以使用 ModelSense 属性值来确定方向。

void setObjective(GRBQuadExpr quadexpr, int sense = 0)#

将模型目标设置为一个二次表达式。请注意,此方法会替换整个现有的目标,包括线性项,即使给定的二次表达式没有线性项。

Parameters:
  • quadexpr – 新的二次模型目标。

  • sense – (可选)优化方向(GRB_MINIMIZE 用于最小化,GRB_MAXIMIZE 用于最大化)。省略此参数以使用 ModelSense 属性值。

void setObjectiveN(GRBLinExpr expr, int index, int priority = 0, double weight = 1, double abstol = 0, double reltol = 0, string name = "")#

将替代优化目标设置为等于线性表达式。

请参考关于 多目标的讨论,以获取更多关于使用替代目标的信息。

请注意,你也可以使用ObjN变量属性来修改替代目标。如果你希望混合使用这两种方法,请注意此方法会替换整个现有目标,而ObjN属性可用于修改单个项。

Parameters:
  • expr – 新的替代目标。

  • index – 新目标的索引。如果使用索引0,此例程将更改主要优化目标。

  • priority – 替代目标的优先级。这将初始化此目标的ObjNPriority属性。

  • weight – 替代目标的权重。这将初始化此目标的ObjNWeight属性。

  • abstol – 替代目标的绝对容差。这将初始化此目标的ObjNAbsTol属性。

  • reltol – 替代目标的相对容差。这将初始化此目标的ObjNRelTol属性。

  • name – 替代目标的名称。这将初始化此目标的ObjNName属性。

void setPWLObj(GRBVar var, int npoints, double x[], double y[])#

为变量设置分段线性目标函数。

此方法的参数指定了一个定义单变量分段线性目标函数的点列表。具体来说,\(x\)\(y\) 参数给出了函数顶点的坐标。

有关分段线性目标函数的更多详细信息,请参阅 此讨论

Parameters:
  • var – 正在设置目标函数的变量。

  • npoints – 定义分段线性函数的点数。

  • x – 定义分段线性函数的点的\(x\)值。必须按非递减顺序排列。

  • y – 定义分段线性函数的点的 \(y\) 值。

GRBModel singleScenarioModel()#

从多场景模型中捕获单个场景。使用 ScenarioNumber 参数来指示要捕获的场景。

调用此方法的模型必须是多场景模型,结果将是一个单场景模型。

Returns:

单一场景的模型。

void sync()#

等待之前的异步优化调用完成。

调用 optimizeasync 会立即将控制权返回给调用程序。调用者可以在优化进行时执行其他计算,并通过查询各种模型属性来检查优化的进度。sync 调用会强制调用程序等待,直到异步优化调用完成。在删除相应的模型对象之前,您必须调用 sync

如果优化本身遇到任何问题,sync 调用会抛出异常。换句话说,此方法抛出的异常是 optimize 本身在原始方法不是异步的情况下会抛出的异常。

请注意,即使您知道异步优化已经完成,您也需要调用sync

void terminate()#

生成一个请求以终止当前的优化。此方法可以在优化过程中的任何时间调用(从回调、另一个线程、中断处理程序等)。请注意,通常情况下,请求不会立即被执行。

当优化停止时,状态 属性将等于 GRB_INTERRUPTED

void tune()#

执行自动搜索以改进性能的参数设置。完成后,此方法会存储找到的最佳参数集。可以通过查询TuneResultCount属性的值来确定存储的参数集数量。可以使用getTuneResult来检索实际设置。

请参考参数调优部分了解调优工具的详细信息。

void update()#

处理任何待处理的模型修改。

void write(const string &filename)#

此方法是用于将优化数据写入文件的通用入口点。它可以用于写入优化模型、解向量、基向量、起始向量或参数设置。写入的数据类型由文件后缀决定。文件格式在文件格式部分中描述。

请注意,将模型写入文件将处理所有待处理的模型修改。在写入其他模型信息(如解决方案、基础等)时也是如此。

还要注意的是,当你编写一个Gurobi参数文件(PRM)时,所有未设置为默认值的整数或双精度参数都会被保存,但不会将任何字符串参数保存到文件中。

最后,请注意,当IgnoreNames=1时,在写入文件时,变量和约束的名称将被替换为默认名称。

Parameters:

filename – 要写入的文件名。文件类型编码在文件名的后缀中。有效的后缀包括 .mps.rew.lp.rlp 用于写入模型本身,.dua.dlp 用于写入对偶化模型(仅限纯 LP),.ilp 用于写入与不可行模型相关的 IIS(参见 GRBModel::computeIIS 获取更多信息),.sol 用于写入由 SolutionNumber 参数选择的解决方案,.mst 用于写入起始向量,.hnt 用于写入提示文件,.bas 用于写入 LP 基础,.prm 用于写入修改后的参数设置,.attr 用于写入模型属性,或 .json 用于以 JSON 格式写入解决方案信息。如果您的系统安装了压缩工具(例如,Windows 上的 7zzip,以及 Linux 或 macOS 上的 gzipbzip2unzip),则文件可以被压缩,因此还接受 .zip.gz.bz2.7z.xz 等附加后缀。