变量属性#

这些是变量属性,意味着它们与模型中的特定变量相关联。您应该使用各种get例程之一来检索属性的值。这些在本节的开头有描述。对于面向对象的接口,变量属性通过在变量对象上调用get方法来检索。对于用户可以直接修改的属性,您可以使用各种set方法之一。

尝试查询一个不可用的属性将会产生一个错误。在C语言中,属性查询例程将返回一个DATA_NOT_AVAILABLE错误代码。面向对象的接口将会抛出一个异常。

可以在多目标属性多场景属性部分找到其他变量属性。

LB#

  • 类型: double

  • 可修改: Yes

变量下界。请注意,任何小于或等于 -1e20 的值都被视为负无穷大。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

UB#

  • 类型: double

  • 可修改: Yes

变量上限。请注意,任何大于或等于1e20的值都被视为无限。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

对象#

  • 类型: double

  • 可修改: Yes

线性目标系数。在我们的面向对象接口中,您通常使用setObjective方法来设置目标,但此属性提供了设置或修改线性目标项的替代方法。

请注意,此属性与我们的分段线性目标功能相互作用。如果您为变量设置了分段线性目标函数,这将自动将Obj属性设置为零。同样,如果您为变量设置了Obj属性,这将自动删除任何先前指定的分段线性目标。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

变量名#

  • 类型: string

  • 可修改: Yes

变量名称。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

VTag#

  • 类型: string

  • 可修改: Yes

变量的标签。

如果您将以JSON格式检索模型的解决方案,您可能会为计划检索解决方案信息的每个变量定义一个标签。每个变量标签必须是唯一的,如果使用了任何标签(变量标签、约束标签、二次约束标签),只有带标签的元素才会出现在JSON解决方案字符串中。标签必须由可打印的US-ASCII字符组成。使用扩展字符或转义字符将导致错误。标签的最大支持长度为10240个字符。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

VType#

  • 类型: char

  • 可修改: Yes

变量类型('C' 表示连续型,'B' 表示二元型,'I' 表示 整数型,'S' 表示半连续型,或 'N' 表示半整数型)。 二元变量必须为0或1。整数变量可以取指定下限和上限之间的任何 整数值。半连续变量可以取指定下限和上限之间的任何值,或者取零值。 半整数变量可以取指定下限和上限之间的任何整数值,或者取零值。

有关变量类型的更多信息,请参阅本节

有关如何查询或修改属性的示例,请参阅我们的 属性示例

X#

  • 类型: double

  • 可修改: No

当前解决方案中的变量值。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

Xn#

  • 类型: double

  • 可修改: No

次优MIP解中的变量值。使用参数 SolutionNumber 来指示要检索的替代解。解按目标值恶化的顺序排序。因此,当 SolutionNumber 为1时,Xn 返回找到的次优解。当 SolutionNumber 等于其默认值0时,查询属性 Xn 等同于查询属性 X

在MIP搜索过程中找到的次优解的数量将取决于几个参数的值。其中最重要的是PoolSolutionsPoolSearchModePoolGap。请参阅解决方案池部分以获取关于此主题的更详细讨论。

仅适用于MIP模型。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

RC#

  • 类型: double

  • 可修改: No

当前解决方案中的降低的成本。仅适用于凸的、连续的模型。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

BarX#

  • 类型: double

  • 可修改: No

最佳障碍迭代中的变量值(在交叉之前)。仅在选择了障碍算法时可用。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

开始#

  • 类型: double

  • 可修改: Yes

当前的MIP起始向量。当可用时,MIP求解器将尝试从此向量构建初始解。请注意,起始向量可以部分填充——MIP求解器将尝试为缺失的起始值填充值。如果您希望将变量的起始值保持未定义状态,您可以避免为该变量设置Start属性,或者您可以将其设置为特殊的undefined值(在C和C++中为GRB_UNDEFINED,在Java、.NET和Python中为GRB.UNDEFINED)。

如果Gurobi MIP求解器日志显示您的MIP起始点没有产生新的当前最优解,请注意可能有多种解释。一种可能是您的MIP起始点不可行。另一种更常见的可能是Gurobi启发式算法找到了一个与MIP起始点产生的解一样好的解,因此MIP起始点解被截断。最后,如果您指定了一个部分MIP起始点,可能在这个部分起始点上进行的有限MIP探索不足以找到新的当前最优解。如果您希望Gurobi更努力地尝试完成部分起始点,可以尝试将StartNodeLimit参数设置为更大的值。

如果你解决了一系列模型,其中一个是通过修改前一个模型构建的,并且如果你没有提供MIP起始点,那么Gurobi将尝试从前一个模型的解自动构建一个起始点。如果你不希望它尝试这样做,你应该在开始后续求解之前重置模型。如果你提供了一个MIP起始点,但更希望使用前一个解作为起始点,你应该清除你的起始点(通过将所有变量的Start属性设置为undefined)。

如果您有多个起始向量,您可以通过使用Start属性与NumStart属性和StartNumber参数结合来提供给Gurobi。具体来说,使用NumStart属性来指示您将提供多少个起始向量。然后将StartNumber参数设置为0到NumStart-1之间的值,以指示您提供的是哪个起始向量。对于每个StartNumber的值,填充Start属性以提供该起始向量。Gurobi将使用所有提供的起始向量。作为替代方案,您可以通过将StartNumber参数设置为-1来将新的MIP起始向量附加到您的模型中。在这种情况下,每当您读取MIP起始向量或使用函数为一组变量设置MIP起始值时,将创建一个新的MIP起始向量,参数NumStart将增加,任何未指定的变量将保留为undefined

如果你想诊断一个不可行的MIP起点,你可以尝试将模型中的变量固定为MIP起点中的值(通过设置它们的上下界属性)。如果生成的MIP模型不可行,你可以在这个模型上计算IIS以获得额外的信息,这些信息应该有助于识别不可行性的原因。

仅影响MIP模型。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

变量提示值#

  • 类型: double

  • 可修改: Yes

一组用户提示。如果您知道某个变量在MIP模型的高质量解决方案中可能取特定值,您可以提供该值作为提示。您还可以(可选地)使用VarHintPri属性提供关于您对提示的置信度的信息。

Gurobi MIP求解器将以多种方式使用这些变量提示。提示将影响Gurobi用于寻找可行解决方案的启发式方法,以及Gurobi为探索MIP搜索树所做的分支决策。一般来说,高质量的提示应该能够更快地产生高质量的MIP解决方案。相反,低质量的提示会导致一些浪费的努力,但不应导致性能的显著下降。

变量提示和MIP起始点在概念上相似,但它们的行为方式非常不同。如果您指定了一个MIP起始点,Gurobi MIP求解器将尝试从提供的变量值集合中构建一个可行的解。如果您知道一个解,您应该使用MIP起始点将其提供给求解器。相比之下,变量提示为MIP求解器提供指导,影响整个求解过程。如果您对变量的可能值有一个大致的了解,您应该通过变量提示提供这些信息。

如果您希望将变量的提示值保留为未定义,您可以避免为该变量设置VarHintVal属性,或者将其设置为特殊的undefined值(在C和C++中为GRB_UNDEFINED,在Java、.NET和Python中为GRB.UNDEFINED,在R中为NA,在Matlab中为nan)。

请注意,从模型中删除变量将导致多个属性被丢弃(变量提示和分支优先级)。如果您希望它们保留,您的程序需要在删除变量并进行后续模型更新调用后重新填充它们。

仅影响MIP模型。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

变量提示优先级#

  • 类型: int

  • 可修改: Yes

用户提示的优先级。在通过VarHintVal属性提供变量提示后,您还可以选择提供提示优先级,以表明您对提示的信心程度。

提示优先级是相对的。如果你对一个变量的提示值比另一个更有信心,你只需要为更可靠的提示设置一个更大的优先级值。变量的默认提示优先级为0。

请参考VarHintVal讨论以获取有关变量提示作用的更多详细信息。

仅影响MIP模型。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

分支优先级#

  • 类型: int

  • 可修改: Yes

变量分支优先级。此属性的值用作在MIP搜索期间选择分支的分数变量的主要标准。具有较大值的变量总是优先于具有较小值的变量。使用标准分支变量选择标准来打破平局。默认的变量分支优先级值为零。

请注意,从模型中删除变量将导致多个属性被丢弃(变量提示和分支优先级)。如果您希望它们保持不变,您的程序需要在删除变量并进行后续模型更新调用后重新填充它们。

仅影响MIP模型。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

分区#

  • 类型: int

  • 可修改: Yes

变量分区。MIP求解器可以使用用户提供的分区信息执行解决方案改进启发式算法。提供的分区号可以是正数,表示在解决相应编号的子MIP时应包括该变量,0表示该变量应包含在每个子MIP中,或-1表示该变量不应包含在任何子MIP中。未包含在子MIP中的变量将固定为其在当前最优解中的值。默认情况下,所有变量的初始值为-1。

举个例子,假设你正在解决一个有400个变量的模型,并且你将变量0-99的分区属性设置为-1,变量100-199设置为0,变量200-299设置为1,变量300-399设置为2。启发式算法将解决两个子MIP模型:子MIP 1将固定变量0-99和300-399为它们在当前解中的值,并解决其余部分,而子MIP 2将固定变量0-99和200-299。

使用PartitionPlace参数来控制分区启发式算法的运行位置。

仅影响MIP模型。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

VBasis#

  • 类型: int

  • 可修改: Yes

给定变量在当前基中的状态。可能的值包括 0(基本),-1(在下界的非基本),-2(在上界的非基本), 和-3(超基本)。请注意,如果您希望指定一个高级 起始基,您必须为模型中的所有约束和变量设置基状态信息。仅适用于基本 解决方案。

请注意,如果您通过PStartDStartVBasisCBasis提供了一个有效的起始极值点,那么默认情况下LP预解将被禁用。对于预解能显著减少问题规模的模型,这可能会影响性能。要启用预解,必须将参数LPWarmStart设置为2。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

PStart#

  • 类型: double

  • 可修改: Yes

初始开始向量。

对于LP模型,这定义了当前的单纯形起始向量。如果你为模型中的每个变量设置了PStart值,并为每个约束设置了DStart值,那么单纯形将使用这些值来计算一个热启动基。请注意,如果你使用单纯形基(使用VBasisCBasis)来热启动你的线性程序,你将获得更好的性能。PStart属性应该只在没有基或不想禁用预解的情况下使用。

对于非凸的(MI)QCP和(MI)NLP模型,这定义了某些原始启发式算法的起点。如果你为模型中的每个变量设置了PStart值,那么这些启发式算法更有可能在给定起点附近收敛到可行点。

对于其他问题类型,Pstart 值将被忽略。

如果你想为MIP、非凸(MI)QCP或(MI)NLP模型提供一个可行的初始解,你应该使用开始属性来输入它。

请注意,任何待处理或在设置PStart之后进行的模型修改(添加变量或约束、更改系数等)都将丢弃起始值。您应该在完成模型修改后再设置此属性。如果您想撤回之前指定的起始值,请将任何PStart值设置为GRB_UNDEFINED

请注意,如果您通过PStartDStartVBasisCBasis提供了一个有效的起始极值点,那么默认情况下LP预解将被禁用。对于预解能显著减少问题规模的模型,这可能会影响性能。要启用预解,必须将参数LPWarmStart设置为2。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

IISLB#

  • 类型: int

  • 可修改: No

对于一个不可行的模型,指示下界是否参与计算不可约不一致子系统(IIS)。请注意,二进制变量的边界被视为变量类型中的隐含内容,永远不会参与IIS。

只有在您计算了IIS之后才可用。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

IISLBForce#

  • 类型: int

  • 可修改: Yes

在计算不可行模型的不可约不一致子系统(IIS)时,指示是否应将变量下界包含在IIS中或从IIS中排除。

默认值-1让IIS算法决定。

如果属性设置为0,则该界限不符合包含在IIS中的条件。

如果属性设置为1,则边界包含在IIS中,并且IIS算法从不考虑移除它的可能性。

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

有关更多详细信息,请参阅Model.computeIIS文档。

此属性对于LPs被忽略。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

IISUB#

  • 类型: int

  • 可修改: No

对于一个不可行的模型,指示上界是否参与计算不可约不一致子系统(IIS)。请注意,二进制变量的边界被视为变量类型中的隐含内容,永远不会参与IIS。

只有在您计算了IIS之后才可用。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

IISUBForce#

  • 类型: int

  • 可修改: Yes

在计算不可行模型的不可约不一致子系统(IIS)时,指示是否应将变量上限包含在IIS中或从IIS中排除。

默认值-1让IIS算法决定。

如果属性设置为0,则该界限不符合包含在IIS中的条件。

如果属性设置为1,则边界包含在IIS中,并且IIS算法从不考虑移除它的可能性。

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

有关更多详细信息,请参阅Model.computeIIS文档。

此属性对于LPs被忽略。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

PoolIgnore#

  • 类型: int

  • 可修改: Yes

在解决MIP模型时,Gurobi优化器会维护一个解决方案池,其中包含在搜索过程中找到的最佳解决方案。PoolIgnore属性允许你丢弃一些解决方案。具体来说,如果多个解决方案仅在PoolIgnore设置为1的变量上有所不同,则只有具有最佳目标的解决方案会保留在池中。该属性的默认值为0,意味着该变量应被用来区分解决方案。

当与PoolSearchMode参数结合使用时,此属性特别有用。通过识别那些不捕捉解决方案之间有意义的差异的变量,您可以确保池中包含一些有趣的多样性。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

PWLObjCvx#

  • 类型: int

  • 可修改: No

指示变量是否具有凸分段线性目标。如果变量上的分段线性目标函数是非凸的,则返回0。如果函数是凸的,或者变量上的目标函数是线性的,则返回1。

此属性对于隔离导致具有分段线性目标函数的连续模型变为MIP的特定变量非常有用。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

SAObjLow#

  • 类型: double

  • 可修改: No

目标系数敏感性信息:当前最优基保持最优的最小目标系数值。仅适用于基本解。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

SAObjUp#

  • 类型: double

  • 可修改: No

目标系数敏感性信息:当前最优基保持最优的最大目标系数值。仅适用于基本解。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

SALBLow#

  • 类型: double

  • 可修改: No

下界敏感性信息:当前最优基保持最优的最小下界值。仅适用于基本解。

请注意,如果变量是固定的,则没有可用的敏感性信息,此属性的值即为变量的值。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

SALBUp#

  • 类型: double

  • 可修改: No

下界敏感性信息:当前最优基保持最优的最大下界值。仅适用于基本解。

请注意,如果变量是固定的,则没有可用的敏感性信息,此属性的值即为变量的值。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

SAUBLow#

  • 类型: double

  • 可修改: No

上界敏感性信息:当前最优基保持最优的最小上界值。仅适用于基本解。

请注意,如果变量是固定的,则没有可用的敏感性信息,此属性的值即为变量的值。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

SAUBUp#

  • 类型: double

  • 可修改: No

上界敏感性信息:当前最优基保持最优的最大上界值。仅适用于基本解。

请注意,如果变量是固定的,则没有可用的敏感性信息,此属性的值即为变量的值。

有关如何查询或修改属性的示例,请参阅我们的 属性示例

UnbdRay#

  • 类型: double

  • 可修改: No

无界射线(仅适用于无界线性模型)。提供一个向量,当将其添加到任何可行解时,会产生一个新的解,该解也是可行的,但改进了目标。仅当参数InfUnbdInfo设置为1时可用。

有关如何查询或修改属性的示例,请参阅我们的 属性示例