我正在研究线性和非线性编程(优化)框架的选项。
要求是:
支持线性和非线性编程问题。 100-1000个变量和最多约1000个约束(我收集的很简单)。非线性问题具有涉及多个变量的乘法或除法的约束 - 没有比这更复杂的了。
与MS环境(SQL Server,MS Access,.NET,Excel)完美集成
很高兴支持临时问题定义(即某种脚本语言或支持在Excel前端定义和解决问题)
我会单独使用Excel,但我还需要能够以编程方式(.NET环境)与解算器接口以解决更大的问题。
对于程序化访问,我打算为求解器开发一个抽象接口(因此我们可以根据需要更改求解器)。然后我偶然发现了已经有这个界面的MS Solver Foundation(http://code.msdn.microsoft.com/solverfoundation)。我想知道它是否符合我们的其他要求以及用户对它的看法。
答案 0 :(得分:4)
事实证明,Microsoft Solver Foundation不支持非线性编程。截至2010年1月,该团队的official word就是他们正在考虑这个问题,但这不是他们的直接计划。
所以我已经确定AMPL作为建模语言界面,KNITRO作为解算器算法。 KNITRO看起来不错,因为它显然包含三种算法(Interior Point Method的两种变体和Active Set method的一种变体)。另请参阅KNITRO的维基百科页面。
我在一个优秀的门户网站上试用了这两个评估版后,我选择了AMPL和KNITRO,这个网站显然由美国国家科学基金会和美国能源部Argonne National Laboratory资助,名为NEOS。 NEOS提供了一个Web界面,用于使用AMPL或GAMS(以及一些求解器,其他几个)上传您的数学模型,然后通过结果网页和电子邮件返回结果。据说有一个用于提交问题的电子邮件界面,但我没有成功实现这一点。
现在,这一切都要花钱。 KNITRO和AMPL是商业产品。最终解决方案的成本约为8000美元。不便宜。如果你正在寻找免费的解决方案,我认为这些选项几乎仅限于解决方案的IPOPT(我也尝试过NEOS并发现它运行良好,但由于其他非技术原因我无法选择它)和放弃AMPL界面。您可以通过IPOPT的API设置问题。与Micrsoft Solver Foundation的API不同,IPOPT接口有点复杂,而且最具挑战性的是,它要求您的调用应用程序实现回调,以计算模型的非线性方程的第一个(也可能是第二个)导数。建模语言界面(如AMPL)会为您解决这个问题,因为它们能够计算用其语言编写的所有方程式的符号导数。
答案 1 :(得分:3)
根据您列出的要求,Microsoft Solver Foundation看起来符合您的所有要求,然后满足您的要求。阅读“什么是解决者基金会?” Solver Foundation网站上的文档。它提到线性编程,非线性编程,.NET开发,可以在Excel中使用,Solver Foundation还附带一个Microsoft Office Excel插件,在熟悉的界面中提供完整的建模环境。
答案 2 :(得分:3)
我已经尝试过Solver Foundation,因为我在过去曾尝试(未成功)解决了一个问题,并在2天内解决了这个问题,包括学习Solver API。 求解器性能很好,SFS(Solver Foundation Services)API 非常棒。
答案 3 :(得分:1)
基于GNU的GLPK库是一个很棒的免费选项。我毫不担心地抛出了1000和1000的色谱柱问题。它需要一些不同的问题定义格式,但对我来说最容易通过C或C ++ API使用。它背后的引擎的改进一直在发生。我相信一些包装器也是可用的(即Perl,Python)。