我正在开发一个matlab应用程序,我需要大大提高速度。我正在使用linprog来解决一个2约束线性程序,其中约有10,000个变量由0和1限定。 Linprog对我的应用来说非常慢。我有什么方法可以改进以提高速度吗?或者您是否知道一些与matlab兼容的共享软件(我预算紧张)会有用吗?
答案 0 :(得分:1)
如果你不介意一个不在matlab但是使用MEX接口的实现,也许glpk和glpkmex可以提供帮助
http://glpkmex.sourceforge.net/
或者,lpsolve也可以提供帮助,但对于大规模问题,它不如glpk库好: http://web.mit.edu/lpsolve/doc/MATLAB.htm
如果您能够掌握它,那么IBM ILOG CPLEX实际上是解决大规模问题的最佳方案之一。有一个matlab接口(http://www-01.ibm.com/software/integration/optimization/cplex-optimizer/connectors/),如果你没有许可证,可以尝试获得扩展试用版本。
在特殊情况下,通过查看目标函数中的系数并根据约束条件确定哪个约束将处于活动状态,可以显着简化您的问题。假设您正在最小化目标函数,则不参与活动约束的变量可以设置为最小值或最大值(根据您的描述为0或1),具体取决于它们在目标函数中的系数是正还是负。如果你正在做最大化,那么反过来。这减少了变量的数量=)。
答案 1 :(得分:0)
听起来像是一个带有框约束的线性程序(可能被称为约束约束)给我。您是否正确设置了这些框约束?有关详细信息,请参阅reference。