避免约束系数过大的2种技巧

相关文章:
《数学建模中提升目标、变量和约束的紧凑度的几种技巧》
《计算机存储精度引起的模型数值问题》


如前文所述,当数学模型当中的约束系数过大时,会增加模型的求解难度,这一点会在预处理当中改善;另一方面是,当模型的约束系数差距过大时(系数范围很广),会发生数值问题,即造成求解结果的不稳定(求解时间长或求解结果有误),因此在建模当中有着这样一些准则,就是约束函数当中的项,应该具有可比较的大小,以便将计算误差降至最低。

简而言之,就是控制约束函数的项的系数差距。以下介绍避免这种约束系数过大的2种技巧。

现有一个约束如下:

x − 1 0 6 y ≥ 0 y ∈ [ 0 , 10 ] x-10^6y\geq 0\\ y\in [0,10] x106y0y[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] x10y10y110y2=0y210y3=0y310y4=0y410y5=0y510y=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] x103y0y[0,104]

通过改变变量 y y y 的范围成为新的变量 y ′ y' y,来降低约束系数的范围。其中 y ′ = 1 0 3 y y'=10^3y y=103y

你可能感兴趣的:(运筹优化决策,#,数学建模,数学建模,约束系数范围过大)