快好知 kuaihz

[转载]Lingo求解非线性模型的加速方法

    对于非线性模型求解十分困难,因此建立利于提高求解效率的模型,以增加求解速度和解的可靠性是十分必要的。

    (一)为变量定界

    较好地使用变量界限可以最大限度地提高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

    在可能的情况下要尽量回避使用非平滑关系。具有非平滑约束的模型一般来说求解十分困难。因此应尽量将非平滑关系平滑化,如使用整型变量。

    (五)减少整型限制

    减少整型限制的数量可明显减少求解时间。当变量值较大时,可通过求解没有整型限制的模型后取整找到可以接受的结果,其耗费的求解时间仅相当于求解整数模型的一小部分。然而,对一个解取整后,此解可能不再是可行解或最优解。

本站资源来自互联网,仅供学习,如有侵权,请通知删除,敬请谅解!
搜索建议:非线性  非线性词条  求解  求解词条  模型  模型词条  加速  加速词条  转载  转载词条