我在Netbeans with Java上使用CPLEX解算器做一个项目。我们有几个要解决的优化问题,我已经通过在Java中编码所有约束,目标和变量来解决其中一个问题,而不使用AMPL。但是,我团队中的某些人想要使用AMPL 因此,由于我不想阅读所有AMPL书籍以找到答案,是否有明显的理由宁可使用AMPL而不是“手动”编码所有约束?此外,AMPL可以集成到Netbeans中吗?我没有找到任何关于这方面的文件。 当约束需要“灵活”时,AMPL是否有用(我的意思是,我们不能提前猜测约束的确切数量,它取决于用户修复的参数,模块化是一个高重要性因素......)< / p>
我很想知道很快就会听到这个消息!
感谢您的帮助
答案 0 :(得分:3)
AMPL是一种代数建模语言,引用该链接:
AMPL的一个优点是它的语法相似 优化问题的数学符号。
例如,这可以允许您在不事先知道模型尺寸的情况下定义约束组。或许,您可以更快地对模型进行重大更改。 (你必须考虑你实际上会这样做的频率。)
然而,有人可能会说AMPL的“明显优势”是支持数十种不同的求解器。您可以创建模型并使用CPLEX解决它,但随后决定要使用其他解算器(例如,Gurobi,Xpress等)。在AMPL Solvers网页上,他们有以下建议:
我们建议您测试替代解算器以确定哪个 为您的需求提供最佳的价格和性能折衷。
AMPL API网页说有一个Java API,所以应该允许你将它包含在Netbeans项目中,但我对此没有经验。
在一天结束时,您还可以争辩说这些“优势”是品味问题。正如您已经完成的那样,直接使用CPLEX Java API,如果满足您的要求,肯定是一种有效的解决方案。它可以让您更有效地构建模型,使用AMPL可能不支持的解算器特定/高级功能,并对模型公式进行更细粒度的控制。
答案 1 :(得分:3)
您刚刚编写了一个优化模型,以优化您公司的小部件制作。您的公司在$ SOLVER1上获得了非常好的交易,因此您正在使用它。
在接下来的十年中,当您的老板向您提出新的要求时,您会改进并扩展该模型。到那时为止,您可能拥有数万行优化代码作为系统的一部分,到目前为止,这对您公司的运营至关重要。
贵公司的原始许可协议已经过期,$ SOLVER1的制造商大幅增加了许可费用,因此您现在每年要支付数十万美元的许可费用。
与此同时,竞争对手公司的boffins刚刚发布了新版本的SOLVER2。它有一些花哨的新算法可以解决小部件优化问题,速度提高20%,并找到比$ SOLVER1给你更好的解决方案。它的成本不超过$ SOLVER1,性能更好。
与此同时,开源社区发布了$ FREESOLVER。它可能不如顶级商业选项那么强大,但它与十年前的$ SOLVER1一样好,如果你不是每年支付10万美元的许可,你可以租得很多服务器的时间来弥补它。
...所以,你是否在一个平台上编写了优化模型,让你切换到一个新的求解器,并利用这些机会,而不必放弃十年&#39;值得代码?
能够快速轻松地切换求解器具有巨大的优势。我知道有一家公司为他们的工作使用了三种不同的解算器:他们尝试在云中运行两种不同的开源解算器,如果这些解决方案都找不到适当的解决方案那么他们会把它扔到具有更智能算法的昂贵解算器。开源求解器可以处理90%的问题,因此他们只需要使用商业解算器,最后10%,这样他们就可以大大节省许可成本。
我们在工作中讨论的一个选项是使用商业解算器进行关键任务工作,以及开源替代方案,用于培训或小规模原型制作等应用程序,我们也不会这样做要求。这样我们就可以最大限度地减少商业解算器许可所需的并发用户数量。
(并且,是的,仍然存在与平台锁定的问题,但像AMPL这样的平台显着比高端商业解决方案便宜。)
答案 2 :(得分:2)
完全同意rkersh所说的一切。另请注意,无论是使用代数建模语言还是通过其中一个更直接的API编写,都不应该以难以编码问题大小等细节的方式编写模型。
此外,使用建模语言为您提供了额外的抽象级别/层次,这可以提供帮助,特别是在与其他人共享或解释您的模型时,与一系列标准问题类型等进行比较,但我更喜欢坚果 - 并且感觉&#39;感觉&#39;使用更直接的API,几乎从不需要(或有时间和预算)重新制定我的模型。
答案 3 :(得分:2)
答案 4 :(得分:0)
为了简短说明使用AMPL的优缺点,只需使用Java(AMPL)而不是汇编语言(CPLEX)进行比较。