主要内容

本页采用了机器翻译。点击此处可查看英文原文。

调整整数线性规划

有些“整数”解不是整数

通常,解 x(intcon) 中一些假定为整数值的分量并不是精确的整数。intlinprog 将整数 IntegerTolerance 范围内的所有解值视为整数。

要将所有假定整数四舍五入为精确整数,请使用 round 函数。

x(intcon) = round(x(intcon));

小心

四舍五入可能会导致解变得不可行。舍入后检查可行性:

max(A*x - b) % see if entries are not too positive, so have small infeasibility
max(abs(Aeq*x - beq)) % see if entries are near enough to zero
max(x - ub) % positive entries are violated bounds
max(lb - x) % positive entries are violated bounds

大型分量不是整数值

当解分量的绝对值超过 2.1e9 时,intlinprog 并不强制要求其值为整数。当您的解包含此种分量时,intlinprog 会发出警告。如果您收到此警告,请检查该解,确认该解中应为整数值的分量是否接近整数。

不允许使用较大的系数

intlinprog 不允许问题的各分量(例如 fub 中的系数)的值超过 1e20,也不允许 AAeq 的各分量的值超过 1e15。如果您尝试对这样的问题运行 intlinprogintlinprog 会出错。

如果出现此错误,有时您可以扩展问题以获得较小的系数:

  • 对于 f 中过大的系数,尝试将 f 乘以一个小的缩放因子。

  • 对于过大的约束系数,尝试将所有边界和约束矩阵乘以相同的小缩放因子。

参考

[1] Williams, H. Paul. Model Building in Mathematical Programming, 5th Edition. Wiley, 2013.