数学优化软件免费/开源

计算科学 优化 线性规划
2021-12-03 05:10:50

我想写数学优化软件。在大学里,他们教我如何使用 AMPL+CPLEX/SCIP/MINOS/Couenne 等,这就足够了。但我无法负担我个人使用的 AMPL 费用,我不想对问题的规模有任何限制。

  • 有没有真正免费的 AMPL 替代品?
  • 如果我编写使用像 Couenne 这样的开源优化器库的 C++ 代码,我可以使用该软件赚钱吗?(例如,我看到 Android 相机使用了一个开源的 LMS 优化器。)
4个回答

有没有真正免费的 AMPL 替代品?

是的!(很抱歉,Geoff,与您相矛盾。)AMPL 有一个真正的免费替代品。JuMP是一种建立在 Julia 之上的免费开源建模语言。它能够对大规模线性、混合整数和最近的非线性规划问题进行建模。SCIP 支持以及混合整数非线性规划即将推出。查看文档并让我们知道是否有任何方法可以提供帮助。Julia 仍然是一门年轻的语言,因此您不应该期望 C++ 或 AMPL 的稳定性,但如果您愿意成为早期采用者,您将获得自由软件历史上不具备的性能和特性的组合.

如果我编写使用像 Couenne 这样的开源优化器库的 C++ 代码,我可以使用该软件赚钱吗?

JuMP 是 LGPL 许可的,这意味着如果您遵守许可条款,您可以将其用作闭源商业产品的一部分。JuMP 依赖于具有各自许可证的求解器(商业和开源)。

由 yeesian 编辑:

看起来很有趣,谢谢!不过,在接受此答案之前,我将等待对其进行测试(或了解其他用户的反馈)。

有一些可用的简单示例,用于城市规划数独旅行推销员它也被用于 MIT 课程 15.S60“运筹学软件工具”(github repo)。有关支持的求解器的更新列表,请查看JuliaOpt 网站

AMPL 有免费的替代品吗?

(编辑:我说得太早了;感谢 mlubin 指出这一点。)如果您不太在意方便,可以使用开源格式来指定非线性程序(SIF 和 NOP 格式),但是您有将该格式转换为您的求解器可以实际使用的形式。由于 CUTEr/CUTEst 测试集使用 SIF 格式,您可以利用给定求解器与这些测试集的任何接口,并使其适应读取您想要生成的任何 SIF 文件。

就流行的建模框架而言,GAMS 有一个免费试用版,但公式中允许的决策变量的数量是有上限的。NEOS 具有 GAMS 和 AMPL 接口,因此您可以在 NEOS 上提交作业,然后通过电子邮件等方式检索结果。

那里有免费的建模框架,比如 PuLP(轻量级,用于 LP;我在我的论文中使用过)和 Pyomo,所以你也许可以使用它们。Miles (mlubin) 在他的回答中谈到了一个基于 Julia 的框架。可以在此预印本中找到部分框架列表。

您还可以编写特定于求解器的代码。例如,Couenne 是免费提供的,您可以使用其原生 API 来解决问题。当然,为您可能要使用的每个求解器重复此过程是不方便的。

如果我编写使用像 Couenne 这样的开源优化器的 C++ 代码,我可以使用该软件赚钱吗?

IANAL,这取决于许可证。例如,Couenne 根据 Eclipse Public License (EPL) 获得许可。它并不禁止您将软件用于商业目的(例如,在设计设备时)。快速阅读许可证(我再次强调一下,IANAL)表明您可以销售基于 Couenne 的商业软件,如果您将 Couenne 源代码作为该软件的一部分,那么您还必须提供 Couenne 源代码或告诉人们如何获得它。

同样,只要您遵守相应许可的条款,BSD 和 GPL 许可的软件也可以进行商业销售。在 GPL 的情况下,您还必须免费提供源代码。

如果您还没有,请查看DAKOTA。非常广泛的优化能力和良好的支持。它在 LGPL 许可下是免费的,这意味着您可以在受某些限制的商业应用程序中使用它(我相信您必须动态链接而不是静态链接,并且仍然允许修改该 LGPL 部分,但如果出现以下情况,显然请咨询律师这对你来说是一个重要的问题。)

已经提到过,但您应该将Pyomo-Coopr视为一种类似于 AMPL(但使用 Python)的建模语言,它具有与各种第三方求解器的接口。