对于非线性模型求解十分困难,因此建立利于提高求解效率的模型,以增加求解速度和解的可靠性是十分必要的。
(一)为变量定界
较好地使用变量界限可以最大限度地提高LINGO 的求解效率。例如,假设一个变量的取值范围为1 到100,但是最优解不大可能在50 到75 的范围之外。这种情况下,用@BND 函数将变量的上限明确地指定为50,下限为75,可以大大节省求解的时间。另外,定界还可以使求解避开数学上有问题的区域,如无定义区域。例如,在约束条件1/X 中,给X 定一个最小界限,这样有助于使X 不会靠近0。
(二)为变量指定初值
在模型中,变量的初值会影响LINGO求解的“路线”。如果以一个接近最优解的初值开始计算,将大大地减少求解的时间,但是在很多情况下并不清楚最佳初值。不过,在可以选定比较合理的初值时,就应该在初始化域使用这些初值,这对于模型的求解很有帮助。若存在以下两种对求解结果不确定的情况,可考虑更换初值重新求解:
1)可能有比LINGO返回值更优的解;
2)即使LINGO返回的信息报告显示“未找到可行解”,但仍可能存在可行解。
(三)确定模型的合理数量级范围
为了便于求解,模型中用到的单位的数量级要尽量保持一致。如果模型中最大的数是最小数的1000 倍,LINGO就会在求解模型时遇到困难,也会影响求解的精确度。
例如下面的经济问题:利息率为8.5%(0. 085),预算的约束条件为$ 12 850 000。这两个数的数量级相差109。而在LINGO中,可以接受的最大差别为104。在这个例子中,预算可表示为百万美元的倍数,也就是说可以用$ 12.85 代替12 850 000。这样,数量级的差别就控制在104 之内了。
(四)简化关系
在实际操作中,应尽量使用线性关系,而非非线性关系。一些非线性表达式完全可以用线性关系表示。最简单的例子就是前面提到的两个变量比值的形式:
X/Y< 10
这个约束条件是非线性的,因为X 被Y除。为了线性化这一约束,可以在等式两边同乘以Y,
该约束就变为:
X< 10 × Y
在可能的情况下要尽量回避使用非平滑关系。具有非平滑约束的模型一般来说求解十分困难。因此应尽量将非平滑关系平滑化,如使用整型变量。
(五)减少整型限制
减少整型限制的数量可明显减少求解时间。当变量值较大时,可通过求解没有整型限制的模型后取整找到可以接受的结果,其耗费的求解时间仅相当于求解整数模型的一小部分。然而,对一个解取整后,此解可能不再是可行解或最优解。