模型属性#
这些是模型属性,意味着它们与整个模型相关联(而不是与模型的特定变量或约束相关联)。您应该使用各种get例程之一来检索属性的值。这些在本节的开头有描述。对于面向对象的接口,模型属性是通过在模型对象本身上调用get方法来检索的。对于用户可以直接修改的属性,您可以使用各种set方法之一。
尝试查询一个不可用的属性将会产生一个错误。在C语言中,属性查询例程将返回一个DATA_NOT_AVAILABLE错误代码。面向对象的接口将会抛出一个异常。
可以在质量属性、多目标属性和多场景属性部分找到其他模型属性。
NumConstrs#
类型:
int可修改:
No
模型中的线性约束数量。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
NumVars#
类型:
int可修改:
No
模型中的决策变量数量。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
NumSOS#
类型:
int可修改:
No
模型中特殊有序集(SOS)约束的数量。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
NumQConstrs#
类型:
int可修改:
No
模型中二次约束的数量。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
NumGenConstrs#
类型:
int可修改:
No
模型中一般约束的数量。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
非零元素数量#
类型:
int可修改:
No
模型中线性约束的非零系数数量。对于具有超过20亿个非零系数的模型,请使用DNumNZs。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
DNumNZs#
类型:
double可修改:
No
模型中线性约束的非零系数数量。此属性以双精度格式提供,以准确计算包含超过20亿个非零系数的模型中的非零数量。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
NumQNZs#
类型:
int可修改:
No
二次目标中Q矩阵下三角中的项数。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
NumQCNZs#
类型:
int可修改:
No
二次约束中非零系数的数量。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
NumIntVars#
类型:
int可修改:
No
模型中的整数变量数量。这包括二进制变量和一般整数变量。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
NumBinVars#
类型:
int可修改:
No
模型中的二进制变量数量。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
NumPWLObjVars#
类型:
int可修改:
No
模型中具有分段线性目标函数的变量数量。您可以使用适用于您语言的适当getPWLObj方法查询特定变量的函数(在C、C++、C#、Java和Python中)。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
模型名称#
类型:
string可修改:
Yes
模型的名称。该名称对Gurobi算法没有影响。当模型被求解时,以及当模型被写入文件时,它会在Gurobi日志文件中输出。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
模型感知#
类型:
int可修改:
Yes
优化方向。默认值1表示目标是最小化目标。将此属性设置为-1将方向更改为最大化。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
ObjCon#
类型:
double可修改:
Yes
一个常数值,被添加到模型目标中。默认值为0。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
指纹#
类型:
int可修改:
No
基于模型数据和可能影响优化过程的属性计算的哈希值。目的是在任何有意义的方面不同的模型将具有不同的指纹(几乎总是如此)。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
ObjVal#
类型:
double可修改:
No
当前解的目标值。如果模型被求解到最优,则此属性给出最优目标值。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
ObjBound#
类型:
double可修改:
No
最优目标的最著名界限。在求解模型时,算法会同时维护最优目标值的下界和上界。对于最小化模型,上界是最著名可行解的目标值,而下界则给出了最佳可能目标的界限。
对于MIP模型,与ObjBoundC相比,此属性利用目标整数信息来舍入到更紧的界限。例如,如果已知目标取整数值且当前最佳界限为1.5,ObjBound将返回2.0,而ObjBoundC将返回1.5。
对于LP模型,ObjBound 和 ObjBoundC 总是返回相同的值。还要注意,这些属性仅在求解结束后设置,在回调调用期间无效。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
ObjBoundC#
类型:
double可修改:
No
最优目标的最著名界限。在求解模型时,算法会同时维护最优目标值的下界和上界。对于最小化模型,上界是已知最佳可行解的目标值,而下界则给出了最佳可能目标的界限。
对于MIP模型,与ObjBound相比,此属性不利用目标整数信息来舍入到更紧的界限。例如,如果已知目标取整数值且当前最佳界限为1.5,ObjBound将返回2.0,而ObjBoundC将返回1.5。
对于LP模型,ObjBound 和 ObjBoundC 总是返回相同的值。请注意,这些属性仅在求解结束后设置,在回调调用期间无效。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
PoolObjBound#
类型:
double可修改:
No
未发现的MIP解的目标界限。MIP求解器在MIP搜索过程中存储找到的解,但它只对那些目标至少与PoolObjBound一样好的解提供质量保证。具体来说,进一步探索MIP搜索树不会找到目标比PoolObjBound更好的解。
PoolObjBound 和 ObjBound 的区别在于,前者为未发现的解决方案提供了一个目标界限,而后者为任何解决方案提供了一个界限。请注意,只有当参数 PoolSearchMode 设置为 2 时,PoolObjBound 和 ObjBound 才能有不同的值。
请参阅解决方案池部分以获取关于此主题的更详细讨论。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
PoolObjVal#
类型:
double可修改:
No
此属性用于查询到目前为止为该问题找到的可行解池中存储的第\(k\)个解的目标值。您可以使用SolutionNumber参数设置\(k\)。
可以使用SolCount属性查询存储的解决方案数量。
请参阅解决方案池部分以获取关于此主题的更详细讨论。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
MIPGap#
类型:
double可修改:
No
当前的相对MIP最优性差距;计算方式为
\(\vert ObjBound-ObjVal\vert/\vert ObjVal\vert\)(其中 ObjBound
和 ObjVal 分别是MIP目标界限和当前解的目标值。当尚未找到当前解、没有可用的目标界限或当前解的目标值为0时,返回 GRB_INFINITY。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
运行时#
类型:
double可修改:
No
最近优化的运行时间(以秒为单位)。请注意,Gurobi优化器报告的所有时间都是挂钟时间。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
工作#
类型:
double可修改:
No
最近优化所花费的工作量。与运行时间相比,工作量是确定性的,这意味着每次在相同的硬件上使用相同的参数和属性设置解决相同的模型时,您将得到完全相同的结果。此指标的度量单位是任意的。一个工作单位大致对应于单线程上的一秒,但这在很大程度上取决于运行Gurobi的硬件和正在解决的模型。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
已用内存#
类型:
double可修改:
No
当前环境中分配给模型的内存总量(以GB为单位)。
最大内存使用量#
类型:
double可修改:
No
模型所在环境在任何时间点分配的最大内存量(以GB为单位)。
状态#
类型:
int可修改:
No
模型的当前优化状态。状态值在状态代码部分中描述。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
解决方案计数#
类型:
int可修改:
No
最近优化中存储的解决方案数量。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
迭代次数#
类型:
double可修改:
No
在最近的优化过程中执行的单纯形迭代次数。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
BarIterCount#
类型:
int可修改:
No
在最近的优化过程中执行的障碍迭代次数。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
节点计数#
类型:
double可修改:
No
最近一次优化中探索的分支切割节点数量。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
并发窗口方法#
类型:
int可修改:
No
此属性用于在通过并发优化解决连续问题后查询获胜方法。在这种情况下,它返回相应的方法标识符0(用于原始单纯形法)、1(用于对偶单纯形法)或2(用于障碍法)。在所有其他情况下,返回-1。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
IsMIP#
类型:
int可修改:
No
指示模型是否为MIP。请注意,任何离散元素都会使模型成为MIP。离散元素包括二进制、整数、半连续、半整数变量、SOS约束和一般约束。此外,具有多目标或多场景的模型被视为MIP模型,即使所有变量都是连续的且所有约束都是线性的。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
是QP#
类型:
int可修改:
No
指示模型是否为二次规划问题。请注意,具有二次目标和二次约束的模型被分类为QCP,而不是QP。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
IsQCP#
类型:
int可修改:
No
指示模型是否具有二次约束。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
IsMultiObj#
类型:
int可修改:
No
指示模型是否具有多个目标。
请注意,当模型只有一个目标时(NumObj = 1)的情况稍微有些模糊。如果您使用setObjectiveN来设置您的目标,或者如果您设置了任何多目标属性(例如,ObjNPriority),那么该模型被视为多目标模型。否则,它不是。
要将多目标模型重置为单目标模型,您应将NumObj属性设置为0,调用模型更新,然后设置新的单目标。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
IISMinimal#
类型:
int可修改:
No
指示当前不可约不一致子系统(IIS)是否最小。此属性仅在您对不可行模型计算了IIS后才可用。它通常取值为1,但如果IIS计算提前停止(例如,由于时间限制或用户中断),它可能取值为0。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
最大系数#
类型:
double可修改:
No
线性约束矩阵中的最大矩阵系数(绝对值)。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
最小系数#
类型:
double可修改:
No
线性约束矩阵中的最小非零矩阵系数(绝对值)。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
最大边界#
类型:
double可修改:
No
最大(有限)变量边界。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
最小边界#
类型:
double可修改:
No
最小(非零)变量边界。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
最大对象系数#
类型:
double可修改:
No
最大线性目标系数(绝对值)。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
最小目标系数#
类型:
double可修改:
No
最小(非零)线性目标系数(绝对值)。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
MaxRHS#
类型:
double可修改:
No
最大线性约束右侧值(绝对值)。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
最小右侧值#
类型:
double可修改:
No
最小(非零)线性约束右侧值(绝对值)。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
最大QC系数#
类型:
double可修改:
No
所有二次约束矩阵中二次部分的最大系数(绝对值)。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
最小QC系数#
类型:
double可修改:
No
所有二次约束矩阵的二次部分中的最小(非零)系数(绝对值)。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
MaxQCLCoeff#
类型:
double可修改:
No
所有二次约束矩阵线性部分中的最大系数(绝对值)。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
最小QCL系数#
类型:
double可修改:
No
所有二次约束矩阵线性部分中的最小(非零)系数(绝对值)。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
MaxQCRHS#
类型:
double可修改:
No
最大二次约束右侧值(绝对值)。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
MinQCRHS#
类型:
double可修改:
No
最小(非零)二次约束右侧值(绝对值)。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
MaxQObjCoeff#
类型:
double可修改:
No
目标中二次项的最大系数(绝对值)。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
MinQObjCoeff#
类型:
double可修改:
No
目标函数中二次项的最小(非零)系数(绝对值)。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
OpenNodeCount#
类型:
double可修改:
No
最近一次优化结束时开放的branch-and-cut节点数量。开放节点是指已创建但尚未探索的节点。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
Kappa#
类型:
double可修改:
No
当前LP基矩阵的估计条件数。仅适用于基本解。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
KappaExact#
类型:
double可修改:
No
当前LP基矩阵的精确条件数。仅适用于基本解。计算精确条件数比从Kappa属性获得的估计值要昂贵得多。仅适用于基本解。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
Farkas证明#
类型:
double可修改:
No
一起,属性FarkasDual和FarkasProof为给定的不可行问题提供了不可行性证书。具体来说,FarkasDual提供了一个向量\(\lambda\),可以用来从原始约束中形成以下不等式,该不等式在变量的界限内显然是不可行的:
即使原始约束条件混合了小于和大于的意义,这个不等式仍然有效,因为如果第\(i\)个约束条件是\(\leq\)意义,则\(\lambda_i \geq 0\);如果第\(i\)个约束条件是\(\geq\)意义,则\(\lambda_i \leq 0\)。
让
是这个不等式的系数并且
作为其右侧。当\(L_j\)和\(U_j\)是变量\(x_j\)的下限和上限时,如果\(U_j = \infty\),我们有\(\bar{a}_j \geq 0\),如果\(L_j = -\infty\),则有\(\bar{a}_j \leq 0\)。
通过设置\(x^*_j := L_j\)对于\(\bar{a}_j > 0\)和\(x^*_j := U_j\)对于\(\bar{a}_j < 0\),可以实现Farkas约束的最小违反。然后,我们可以计算最小违反为
其中 \(\beta>0\)。
FarkasProof 属性给出了 \(\beta\) 的值。
这些属性仅在参数 InfUnbdInfo 设置为1时可用。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
调优结果计数#
类型:
int可修改:
No
调优工具运行后,此属性报告存储的参数集数量。如果未找到改进的参数集,此值将为零,其上限由TuneResults参数确定。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
NumStart#
类型:
int可修改:
Yes
模型中MIP起始点的数量。减少此属性将丢弃现有的MIP起始点。增加它将创建新的MIP起始点(初始化为undefined)。
您可以使用StartNumber参数来查询或修改不同MIP起始的起始值,或追加一个新的起始值。StartNumber的值应始终小于NumStart。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。
许可证过期#
类型:
int可修改:
No
许可证过期日期。格式为YYYYMMDD,例如,如果当前使用的许可证在2018年7月20日过期,结果将是20180720。如果许可证没有过期日期,结果将是99999999。
此属性适用于节点许可证和Gurobi计算服务器的客户端。遗憾的是,此属性不适用于Gurobi令牌服务器的客户端。
有关如何查询或修改属性的示例,请参阅我们的 属性示例。