相关文章:
《数学建模中提升目标、变量和约束的紧凑度的几种技巧》
《计算机存储精度引起的模型数值问题》
如前文所述,当数学模型当中的约束系数过大时,会增加模型的求解难度,这一点会在预处理当中改善;另一方面是,当模型的约束系数差距过大时(系数范围很广),会发生数值问题,即造成求解结果的不稳定(求解时间长或求解结果有误),因此在建模当中有着这样一些准则,就是约束函数当中的项,应该具有可比较的大小,以便将计算误差降至最低。
简而言之,就是控制约束函数的项的系数差距。以下介绍避免这种约束系数过大的2种技巧。
现有一个约束如下:
x ? 1 0 6 y ≥ 0 y ∈ [ 0 , 10 ] x-10^6y\geq 0\\ y\in [0,10] x?106y≥0y∈[0,10]
方法1:增加中间变量(这个方法的效果往往不明显):
x ? 10 y 1 ≥ 0 y 1 ? 10 y 2 = 0 y 2 ? 10 y 3 = 0 y 3 ? 10 y 4 = 0 y 4 ? 10 y 5 = 0 y 5 ? 10 y = 0 y ∈ [ 0 , 10 ] x-10y_1\geq 0 \\ y_1-10y_2= 0 \\ y_2-10y_3= 0\\y_3-10y_4= 0\\y_4-10y_5= 0\\y_5-10y= 0\\y\in [0,10] x?10y1?≥0y1??10y2?=0y2??10y3?=0y3??10y4?=0y4??10y5?=0y5??10y=0y∈[0,10]
方法2:改变变量的取值范围(更常用):
x ? 1 0 3 y ′ ≥ 0 y ′ ∈ [ 0 , 1 0 4 ] x-10^3y'\geq 0\\y'\in[0, 10^4] x?103y′≥0y′∈[0,104]
通过改变变量 y y y 的范围成为新的变量 y ′ y' y′,来降低约束系数的范围。其中 y ′ = 1 0 3 y y'=10^3y y′=103y。