避免大M取值过大引起的数值问题

在数学建模当中,常常会见到大M法,它之所以叫大M法,是因为它涉及到一个(绝对值)较大的系数M,这个大M的值应大于约束中的连续变量或者约束表达式可能取到的任何合理值,M值取过大往往会造成优化问题求解的不稳定性。举以下例子:

x ≤ 1 0 6 y x ≥ 0 y ∈ { 0 , 1 } x\leq 10^6y\\x\geq 0\\ y\in \{0,1\} x≤106yx≥0y∈{0,1}

大M约束通常用在将二元变量的信息传播给连续变量,如上述例子,只有当 y = 1 y=1 y=1 时, x x x 才能取到非0的整数值,假如求解器的整数容忍误差为 1 0 − 5 10^{-5} 10−5(详见相关文章),则 y = 0.000009999 y=0.000009999 y=0.000009999 满足整数条件,被视为等于0,但此时代入上述约束后,得到 x ≤ 9.999 x\leq 9.999 x≤9.999, x x x 最大可以取到 9 的正整数值,并不符合一开始说的只有 y = 1 y=1 y=1 时, x x x 才能取到非 0 整数值的关系。尽管我们能够调整求解器的整数容忍误差,但当大M的取值更大时,就不能避免这种情况。

因此,另一个常用的方式是通过额外的信息来收紧大M的值(详见相关文章),对于整数容忍误差为 1 0 − 5 10^{-5} 10−5 的求解器而言,大M的值比 1 0 − 5 10^{-5} 10−5 小就能实现目标,例如上述约束,在如下形式:

x ≤ 1 0 3 y x ≥ 0 y ∈ { 0 , 1 } x\leq 10^3y\\x\geq 0\\ y\in \{0,1\} x≤103yx≥0y∈{0,1}

即使 y = 0.000009999 y=0.000009999 y=0.000009999,约束也仅允许 x ≤ 0.009999 x\leq 0.009999 x≤0.009999,满足约束的初始意图。

特别的,如果我们自己用大M法实在是难以收紧大M的取值,不得不用较大的值进行约束,则可以利用一些求解器自带的SOS约束函数(当 y = 0 ⇒ x = 0 y=0\Rightarrow x=0 y=0⇒x=0),这些SOS约束函数在求解器内部也是通过大M法进行转化,且会以一定的额外求解时间为代价。

相关推荐
smppbzyc1 小时前
2026华中杯数学建模A题【城市绿色物流配送调度】原创论文分享
数学建模·华中杯·2026华中杯·2026华中杯a题·华中杯数学建模竞赛·2026华中杯数学建模竞赛
热心网友俣先生2 小时前
2026年东北三省数学建模联赛赛题浅析-助攻快速选题
数学建模
做cv的小昊7 小时前
【TJU】研究生应用统计学课程笔记(5)——第二章 参数估计(2.3 C-R不等式)
c语言·笔记·线性代数·机器学习·数学建模·r语言·概率论
fie88897 小时前
免疫优化算法在物流配送中心选址中的应用
算法·数学建模
数模竞赛Paid answer7 小时前
2024年华数杯数学建模B题VLSI电路单元的自动布局解题全过程文档及程序
数学建模·数据分析·华数杯
热心网友俣先生7 小时前
2026年东北三省数学建模联赛赛题参考答案
数学建模
smppbzyc7 小时前
2026东北三省数学建模B题【大型展销会临时工招聘与排班优化问题】原创论文分享
数学建模·东北三省数学建模·东三省数学建模·2026东三省数学建模·2026东三省数学建模b题·2026东北三省数学建模竞赛
做cv的小昊1 天前
【TJU】应用统计学——第七周作业(4.2 多元线性回归分析、4.3 可化为线性回归的曲线回归、4.4 单因子方差分析)
线性代数·算法·数学建模·矩阵·回归·线性回归·概率论
wjcroom1 天前
通俗数学3-电和磁
数学建模·物理学
weixin_468466851 天前
排列组合算法之隔板问题与错排公式
c++·算法·数学建模·排列组合·竞赛·错排·隔板