Skip to content

数值稳定性与建模质量 ​

数值建模关注的是:在有限精度、有限域和求解器编码下,模型的数学含义仍然成立。反复需要明确的四项声明是:变量边界、单位与缩放、任何 Big-M 常数的推导方式,以及严格边界或等式边界上容差的解释。

本页通过一个小型生产模型展开这些概念,同时说明何时改写是精确的、何时是有意的近似,以及如何用对称性破除规则去掉重复解而不改变业务最优值。讨论与求解器无关,不虚构当前 OSPF API。

1. 为什么边界与单位属于模型语义 ​

有限边界不只是性能提示。它决定模型允许哪些方案,也常常提供条件约束或析取约束所需的证明。如果 x∈[L,U],条件表达式能够放宽到什么程度,就受到 L 和 U 的限制。

单位同样重要。残差 0.1 可能代表 0.1 千克、分钟、小时或金额。可行性容差、严格边界余量、目标权重和 Big-M 常数,都继承它们所在表达式的单位。改变单位却不改变这些量,就改变了模型。

缩放是有意的变量代换,用来使系数和残差处于相近数量级。缩放应当作为模型变换的一部分记录,而不是只对打印给求解器的矩阵进行处理。

2. 完整的有界示例:两个相同工厂 ​

2.1 业务描述与数据 ​

有两个完全相同的工厂,总产量必须为五个整数单位。开工工厂最多生产六个单位,开工固定成本为 4 美元,每个生产单位的成本为 1 美元。“大批次”表示一个工厂的产量严格超过三个单位。大批次指标会被下游规则使用,因此模型必须正确分类。

工厂 i产量上界 Ui开工固定成本单位成本
16$4$1
26$4$1

两个工厂在所有数据和规则上都相同,所以交换工厂标签不应改变可行性或成本。

2.2 变量、中间值与约束 ​

令 xi 为整数产量,yi 为开工指标,hi 为大批次指标:

xi∈{0,1,…,6},yi,hi∈{0,1}(i=1,2).

定义总产量和总成本中间值:

Q=x1+x2,Cost=4(y1+y2)+x1+x2.

需求与开工规则为:

Q=5,xi≤6yi(i=1,2).

第二条在 xi≥0 且 xi≤6 时是精确的:当 yi=0 时它强制 xi=0;当 yi=1 时,它不会删除生产上界已经允许的任何值。

对于整数产量,“严格超过三个”精确等价于 xi≥4。用两个独立推导的 Big-M 值编码两个分支:

xi≥4−4(1−hi),xi≤3+3hi(i=1,2).

最后选择两个工厂标签对称类中的一个代表:

y1≥y2.

成本目标为:

minCost.

虽然 Q=5 把成本中的变动部分固定为五,但保留成本定义和中间值可以清楚表达含义,也便于推广到需求不等式的模型。

2.3 推导 Big-M 值 ​

对于下界分支,当 hi=0 时,约束必须允许声明域中的最小产量 xi=0:

0≥4−Mi−⟹Mi−≥4.

因此 Mi−=4 是紧的。当 hi=1 时,该行变为 xi≥4。

对于上界分支,当 hi=1 时,约束必须允许最大产量 xi=6:

6≤3+Mi+⟹Mi+≥3.

因此 Mi+=3 是紧的。当 hi=0 时,该行变为 xi≤3。

使用一个通用的 M=106,在仍满足其他边界时逻辑上可能有效,但会使非活动分支不必要地松弛,并可能损害数值条件。若在下界行中使用 M=2,则它是错误的:当 hi=0 时会错误排除 xi=0。

一般地,对上界条件行

g(x)≤b+My,

最小的非负有效值由下式决定:

M≥maxx∈D(g(x)−b).

对下界条件行

g(x)≥b−M(1−y),

则使用:

M≥maxx∈D(b−g(x)).

最大值应在声明的域及其背景约束上计算,而不是在一个无界的数学变量上计算。对仿射 g,可以使用有效变量边界,或求解一个很小的辅助优化问题来得到该最大值。不同的行通常需要不同的 M。

2.4 手算一个最优解 ​

考虑:

(x1,x2,y1,y2,h1,h2)=(5,0,1,0,1,0).

总产量为 Q=5+0=5。开工行给出 5≤6 和 0≤0。对工厂 1,h1=1 给出 x1≥4、x1≤6;对工厂 2,h2=0 给出 x2≤3。对称行是 1≥0。成本中间值为:

Cost=4(1+0)+5+0=9 美元.

任何可行方案都必须至少开工一个工厂,因为 Q=5。开工一个工厂成本 4 美元,生产五个单位的变动成本为 5 美元,因此 9 美元是下界;上面的方案达到该下界,所以它是最优的。

如果没有对称行,(0,5,0,1,0,1) 是同样好的第二个见证。y1≥y2 保留第一个代表,而不改变可达目标值。

3. 以声明单位进行缩放与容差换算 ​

假设一个相关时间变量原本以分钟表示:

0≤tmin≤1440.

定义小时变量 t=tmin/60,同一边界变为:

0≤t≤24.

例如,分钟等式 tmin+smin≤1440,在两个变量都转换为小时后变为 t+s≤24。可行方案没有改变,只是坐标发生了变化,系数也保持在更有用的数量级。把分转换为美元同理:350 分变为 3.50 美元。

所有相关量也必须一起换算。0.1 分钟的残差容差,在小时中是:

εhour=0.160 小时≈0.001667 小时.

约束同一个时间表达式的 Big-M 若原来是 1440 分钟,转换后就是 24 小时。把一个时间目标从分钟改成小时,却保留原来的目标权重或展示容差,会无声地改变政策。

4. 严格不等式与精确/近似边界 ​

4.1 整数变量:精确转换 ​

对于整数 x,

x>3⟺x≥4.

因此,工厂示例中的两个 Big-M 行能对 {0,…,6} 中的每个整数值做精确分类:

xi有效 hi
0,1,2,30
4,5,61

离散边界没有理由使用 10−10 这样的微小数值 epsilon;自然步长是一个生产单位,并且应以模型声明的单位表示。

4.2 连续变量:声明的余量是政策选择 ​

对于实数 x∈[0,6],严格集合 x>3 在边界处是开集。普通闭合的混合整数线性约束不能把这个严格关系原样表示成非严格行。实际政策可以选择 δ=0.1 的余量并使用:

x≥3.1−(3.1−0)(1−h),x≤3+(6−3)h.

此时 h=1 表示 x≥3.1,h=0 表示 x≤3。(3,3.1) 中的数值没有分支。这是有意的近似或保守接受政策,不是 x>3 的精确编码。

余量应来自测量分辨率、合同政策或声明的分离要求,而不应只因为它小于求解器可行性容差就随意选择。如果开区间中的值有业务意义,应显式建模第三种状态,或采用能够表达该语义的方式;不要把两分支近似悄悄标成精确。

4.3 数值容差不是严格边界余量 ​

对于等式 a(x)=b,数值检查可能接受:

|a(x)−b|≤εnum.

这个带宽说明如何分类计算得到的解。业务余量 δ 则改变可行域或分支含义。两者都需要单位、尺度和方向。一个解在数值容差内,并不自动意味着它满足合同服务容差。

5. 对称性破除 ​

两个可互换工厂会产生两个交换标签后的见证。由于两个工厂在域、容量、成本和其他规则上完全相同,y1≥y2 在这里有效。需求迫使至少一个工厂开工,所以当恰好开工一个时,它选择工厂 1。

相对于目标值,对称性破除是精确的:每个方案都可以置换成满足代表性规则的方案,并保持相同的目标和业务含义。它本身不会改善业务计划,只会减少重复搜索分支,并使代表解的选择更可预测;如果还存在其他对称性,它并不保证完整方案唯一。

如果两个工厂在成本、容量、可用性、质量或任一约束上不同,该规则就不再有效。交换标签可能改变可行性或价值。安全的模型应在加入对称规则前确认完全可互换,包括可选规则和成本。类似的字典序代表规则也可用于可互换车辆、房间或相同机器。

6. 精确改写与近似 ​

审查数值模型时,可以使用下面的分类:

构造在所声明模型中的状态
xi≤6yi 且 0≤xi≤6精确的开工连接
整数 xi 上 xi>3⟺xi≥4精确的离散严格转换
根据有效边界得到 Mi−=4,Mi+=3精确的指示分支
不进行舍入的 t=tmin/60精确的坐标变换
对实数 x 用 x≥3.1 替代 x>3声明的保守近似
接受 $a(x)-b
对真正相同的工厂使用 y1≥y2精确且保持目标值的代表选择

精确性描述的是针对已声明域、边界和单位的数学变换。数值接受容差是独立的报告或求解器约定;它不会把近似或开边界政策变成精确等式。如果边界只是估计,根据它推导的 Big-M 就不是证明;如果缩放过程中舍入了输入数据,变换在代数上也不再精确。

7. 在 OSPF 中的概念性组织 ​

可以通过以下概念职责让数值语义保持可见:

  1. 数据或领域上下文拥有物理单位、有限边界、整数性、数据精度以及用于对称性的等价类。
  2. 模型上下文拥有原始业务规则:开工、严格服务阈值、等式和允许的近似余量。
  3. 编译边界推导逐行边界与 Big-M,执行已记录的缩放,并保留每次转换是精确的、基于容差的还是近似的。同时应保留每条生成行所依据的源规则。
  4. 求解结果上下文以缩放单位和业务单位报告数值、残差、分支指标、目标值、对称代表选择,以及任何未解决的数值或最优性状态。

编译器架构 讨论语义模型与后端机制的分离。求解结果 从报告角度说明:没有单位、残差容差或证明状态的解值是不完整的。在询问某个目标为何不能改善时,临界约束分析 应使用原始有界规则及其业务语义,而不是一个没有解释的内部 Big-M 行。

这里的组织是概念性的,刻意不暗示某个当前的类名或函数名。

8. 常见陷阱 ​

8.1 猜一个通用 Big-M ​

过大的常数会削弱连续松弛并放大舍入误差;过小的常数会删除有效方案。应从有限边界推导每个 M,并写出推导过程。如果没有可靠边界,应先改写或取得边界,而不是用更大的数字掩盖不确定性。

8.2 边界与数据不一致 ​

如果声明容量为六,但输入行允许产量八,那么有效数据要么让模型不可行,要么说明边界错误。Big-M 推导、缩放和对称性声明都依赖同一个权威边界。

8.3 用机器 epsilon 表示业务边界 ​

严格服务阈值不会因为加上 10−12 就变得有意义。应选择千克、分钟、金额或相关离散步长中的余量。过小的余量可能被求解器容差吞掉,过大的余量则会删除真实方案。

8.4 换算单位前比较残差 ​

0.001 小时约为 0.06 分钟。如果不做换算,就把它与 0.001 分钟的要求直接比较,会得出错误结论。应同时保存内部尺度和用户可读单位。

8.5 对非相同对象应用对称性 ​

如果机器容量或可用性不同,按任意 ID 排序并不安全。加入代表性顺序前,应验证包括可选规则和成本在内的完全可互换性。

8.6 把近似当成等价 ​

epsilon 余量会产生空档;舍入系数会改变边界;近似的非线性包络可能遗漏可行点。应标注该选择,量化受影响的单位,并把它写进结果和审查证据。

8.7 忘记缩放目标与报告 ​

把变量从分钟改成小时却保持目标系数不变,会改变该目标的相对价值。加权多目标项也一样。应一致地转换约束、目标、容差和展示值。

9. 相关页面 ​