首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与java一起使用gurobi与使用ampl使用gurobi

与java一起使用gurobi与使用ampl使用gurobi
EN

Stack Overflow用户
提问于 2014-11-11 05:34:12
回答 2查看 1.6K关注 0票数 2

使用Gurobi和AMPL而不是使用Gurobi直接API (java、C#、C++等)有哪些优点?为了解决大的MIP问题?当使用Gurobi的API而不是AMPL时是否有性能上的好处?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-12 04:36:07

直到90年代中期,使用具有大规模问题的MIP解决程序(因此不包括电子表格)的唯一实用选项是:

  • 创建下院议员文件
  • 使用低级别C接口 (在cplex中称为可调用库 )
  • 使用特定于域的语言,如AMPL或牙龈

当时,对于具有非平凡复杂性的MIP模型,AMPL模型将更加简洁、可读性更强,更易于维护。即使在今天,AMPL模型看起来更像数学公式,而不是其他任何东西。

AMPL的一个优点是它的数据结构,但是现在C#、Java和C++的标准库都有很好的数据结构。AMPL的另一个优点是它的语法看起来非常直观。

代码语言:javascript
复制
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皮奥莫,它们可以在求解器之间移植。

票数 4
EN

Stack Overflow用户

发布于 2014-11-11 23:08:28

与Gurobi相比,与Gurobi一起使用AMPL有几个优点:

  1. 如果你将来需要的话,你可以很容易地切换到其他的解决方法。
  2. 声明式AMPL模型通常比用于通过API构造问题的过程代码更容易阅读和更高级别。
  3. AMPL分离了求解器过程,这对解决大问题很有帮助。例如,如果解决程序内存不足,这将不会影响AMPL。
  4. AMPL提供内置功能,可从数据库和电子表格导入数据并导出数据。
  5. AMPL有一个活跃的社区,可以说比包括Gurobi在内的任何个人解决者都要大。例如,AMPL谷歌集团拥有超过1700个成员,并且增长迅速。当然,AMPL无法在用户基础上与通用语言(如C++或Java )竞争,但只有很小一部分的C++或Java用户进行数学优化。

直接使用Gurobi可能会带来性能上的好处,至少本机C是这样的。但是,与解决时间相比,AMPL增加的开销通常较小,特别是在MIP问题中。

免责声明:我是AMPL的软件开发人员。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26858236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档