我很想从 GAMS 和 AMPL 的用户那里获得关于这些语言的优缺点的意见。
3 回答
在功能方面,它们几乎相同,可以表达大多数类型的优化问题。就个人而言,我更喜欢 AMPL,因为它具有直观和富有表现力的语法,并且在书中有很好的记录。AMPL 的另一个重要优势是,尽管它是商业的,但您可以避免供应商锁定,因为有一个开源替代方案 - GNU MathProg。另一方面,GAMS 过去拥有比 AMPL 更先进的 IDE,尽管它随着新AMPL IDE的引入而改变。
您可以在其 Wikipedia 文章: AMPL和GAMS中找到 George Dantzig 在 AMPL 和 GAMS 中提出的相同运输问题的示例。
这个博客有以下内容要说:
这两个系统在他们正在做的事情和广泛使用方面都非常好,所以你不会真的选择任何一个错误。我可能会建议为您的同事和合作者使用的建模系统添加额外的点。这使得交换模型和数据更容易,并且在讨论问题、技巧、问题等时也更容易。
Bob Fourer (AMPL) 回答:
很难找到可以在两个竞争系统上提供同样专家建议的人,因为一旦您熟悉其中一个,您通常没有太多动力继续学习另一个。但这里有一些来自我几乎不带偏见的观点的评论。
AMPL 的设计理念是更接近数学符号,并且通常比 GAMS 更自然地使用,并且在这方面更胜一筹。GAMS 模型通常依赖于比其 AMPL 模型更特殊的约定和重新表述;一个典型的例子是经常广泛使用 GAMS $ 运算符来施加各种条件。此外,尽管有 IDE,GAMS 基本上更像是一个批处理系统,而 AMPL 提供了更灵活的选项来交互式探索模型和结果。最后,虽然在某些领域 GAMS 是通过长期使用建立起来的,但我仍然看到这些领域的建模者选择 AMPL,特别是当他们开展不依赖于现有 GAMS 模型的新项目时。
在我看来,AMPL 和 GAMS 在实践中比这里建议的更接近(例如,你在 GAMS 中使用 $,在 AMPL 中使用 :)。在做实际工作时,我实际上稍微更喜欢 GAMS 语法,因为它更紧凑一些,并且很明显求和结束的地方(在 AMPL 中,这是基于运算符的优先级,在 GAMS 中,总和在视觉上用括号括起来)。
在我看来,所有的语法考虑都只是个人喜好问题。AMPL 和 GAMS 语言都易于学习,并且在可以考虑的模型类型方面可以说提供了相同的范围。
在写这篇文章的时候,GAMS 提供了大量的求解器。话虽如此,AMPL 的求解器列表并不是 GAMS 求解器列表的子集。对于特定的应用程序,我建议在购买 AMPL 或 GAMS 之前对求解器进行基准测试(例如,通过 NEOS 服务器进行优化)。
就个人而言,我更喜欢 AMPL 的语法,因为它更接近数学符号。然而,我更喜欢将 GAMS 用于工业应用,主要是因为求解器的可用性以及它在许多行业中的嵌入/验证。这通常简化了与已经使用 GAMS 的行业合作伙伴/客户的对话。