变量#

决策变量捕捉优化的结果。在一个可行的解决方案中,决策变量的计算值满足所有模型约束。其中一些约束与单个变量相关(例如,变量边界),而其他约束捕捉变量之间的关系。我们首先考虑可以添加到Gurobi模型中的不同类型的决策变量,以及与这些变量类型相关的隐式和显式约束。

在开始之前,我们应该指出数学编程模型中变量的一个重要特性:它们的计算解值只会满足界限到一定的容忍度,这意味着变量可能会违反其声明的界限。数学编程从根本上建立在线性代数之上,特别是线性方程组的数值解。这些线性系统是使用有限精度算术来求解的,这意味着小的误差是不可避免的。对于一些模型,大的误差也是不可避免的;我们将在本节后面回到这个话题。

可用的变量类型有 连续型一般整数型二进制型半连续型半整数型

连续变量#

最简单且约束最少的可用变量类型是连续变量。这种变量可以在其下限和上限之间取任何值。在数学规划中,惯例是变量是非负的,除非另有说明,因此如果你没有明确提供变量的界限,你应该假设下限为0,上限为无限。

Gurobi API 提供了一个符号常量,允许您指示边界是无限的(在 C 和 C++ 中为 GRB_INFINITY,在 C#、Java 和 Python 中为 GRB.INFINITY)。一个变量可以有一个无限的上界,一个无限的下界(负无穷),或者两者都有。具有无限上界和下界的变量被称为自由变量。任何大于 1e30 的边界都被视为无限。

如前所述,变量可能会因容差而违反其边界。在变量边界的情况下,相关的容差值就是FeasibilityTol。你可以减少这个容差参数的值,但由于数值误差,可能无法达到你想要的精度。

通用整数变量#

一般整数变量比连续变量受到更多的约束。除了遵守指定的下限和上限外,整数变量还取整数值。

由于有限精度算术的限制,整数变量通常会取不完全整数的值。允许的整数违反程度由IntFeasTol参数控制。您可以收紧此参数以减少这些整数违反的程度,但解决优化问题的成本可能会因此显著增加。

二元变量#

二进制变量是可以添加到模型中最受限制的变量类型。二进制变量的取值为0或1。

再次,由于有限精度算术的限制,二进制变量通常会取不完全整数的值。允许的整数违反的大小由IntFeasTol参数控制。

半连续和半整数变量#

您还可以向模型添加半连续或半整数变量。半连续变量的特性是它取值为0,或在指定的下限和上限之间的值。半整数变量增加了额外的限制,即变量还必须取整数值。

再次强调,这些变量可能会在容忍度范围内违反这些限制。 在这种情况下,相关的容忍度是IntFeasTol(即使 对于半连续变量也是如此)。