使用Gurobi和AMPL而不是使用Gurobi直接API (java、C#、C++等)有哪些优点?为了解决大的MIP问题?当使用Gurobi的API而不是AMPL时是否有性能上的好处?
发布于 2014-11-12 04:36:07
直到90年代中期,使用具有大规模问题的MIP解决程序(因此不包括电子表格)的唯一实用选项是:
当时,对于具有非平凡复杂性的MIP模型,AMPL模型将更加简洁、可读性更强,更易于维护。即使在今天,AMPL模型看起来更像数学公式,而不是其他任何东西。
AMPL的一个优点是它的数据结构,但是现在C#、Java和C++的标准库都有很好的数据结构。AMPL的另一个优点是它的语法看起来非常直观。
subject to {j in J} sum {i in I} x[i,j] <= b[j]但是新的C++0x和最新版本的Java的语法更接近于此。
AMPL在求解器之间是可移植的,但是在求解器之间的接口并没有太大的不同。虽然将应用程序从一个解决程序移植到另一个应用程序并不是一项简单的任务,但对我来说,这并不像尝试转换数据库(比如从MySQL到Postgres)那样重要。
AMPL有一些具体的缺点。对于大多数业务应用程序来说,将AMPL引入项目意味着在混合中添加另一种编程语言。花在学习AMPL上的时间只适用于编写数学编程模型。与Java、C#甚至C++相比,AMPL的用户基数很小,对底层技术的改进只有一家小公司(到处都是非常聪明的人,但仍然只有一家小公司)。如果您想要使用混合方法来解决优化问题(例如,具有生成额外列的启发式的列生成策略),则只剩下一些函数。如果您想要运行求解器,直到达到1%的最优性,但至少运行10秒,则不能使用AMPL,但可以使用Gurobi之一进行回调。
Python可以提供这两个世界中最好的。它是一种通用的编程语言,是一个广泛的应用领域。Gurobi有自己的Python,但是有一些内部域特定的语言,比如PuLP和皮奥莫,它们可以在求解器之间移植。
发布于 2014-11-11 23:08:28
与Gurobi相比,与Gurobi一起使用AMPL有几个优点:
直接使用Gurobi可能会带来性能上的好处,至少本机C是这样的。但是,与解决时间相比,AMPL增加的开销通常较小,特别是在MIP问题中。
免责声明:我是AMPL的软件开发人员。
https://stackoverflow.com/questions/26858236
复制相似问题