我需要求解欠定线性方程组和约束,然后找到最小化成本函数的特定解决方案。这需要通过在 .NET 和 Mono 中运行的纯可移植托管代码来完成。我可以使用哪些免费可用的库来实现此目的?
我发现免费库提供的所有优化算法仅支持单个变量的区间约束,例如0 < x < 1
,而不是像这样的约束x + 2y < 4
。我还发现,线性方程求解器通常仅支持具有一种解的线性系统。
到目前为止我发现的最接近的是点数值 http://www.dotnumerics.com/,其中包括用于求解欠定线性系统的奇异值分解,但其优化算法仅支持单变量约束(据我所知)。
还有其他几个关于线性规划的问题,但我的关键要求是多变量约束和解决欠定系统。我还没有找到支持多变量约束的免费库。
如果您正在为 .NET 进行开发(即不是 Windows Store、Windows Phone 或 Silverlight),那么我绝对建议您看一下lpsolve http://sourceforge.net/projects/lpsolve/,适用于大型 LP 和/或 MILP 问题。下载x86 http://sourceforge.net/projects/lpsolve/files/lpsolve/5.5.2.0/lp_solve_5.5.2.0_dev_win32.zip/download or x64 http://sourceforge.net/projects/lpsolve/files/lpsolve/5.5.2.0/lp_solve_5.5.2.0_dev_win64.zip/download包含各自的开发档案lpsolveDLL:s,然后下载.NET API http://sourceforge.net/projects/lpsolve/files/lpsolve/5.5.2.0/lp_solve_5.5.2.0_cs.net.zip/download包含 C# 文件的存档,其中包含对文件中所有相关函数的 P/Invoke 调用lpsolve API.
另一种选择是使用CLP http://www.coin-or.org/projects/Clp.xml解算器从COIN-OR http://www.coin-or.org/projects/项目,通过CoinMP http://www.coin-or.org/download/binary/CoinMP/预编译的二进制文件。有一个 C# 包装器 DLL 可用here http://astarte.csr.unibo.it/coinORwrapper/coinORwrapper.htm.
If you do如果需要纯托管代码,ALGLIB 可能是您的最佳选择(如上面 Marc Gravell 所建议的),但请注意 ALGLIB 开源许可证使用 GPL。如果您想在自己的代码中使用 ALGLIB 而不将其公开给开源社区,则需要购买商业 ALGLIB 许可证。
快速的互联网搜索还揭示了 Simplex LP 算法的纯 C# 实现here http://pastebin.com/n9YUR7Ej。我无法识别作者,也不知道这个实现是否正确或是否具有任何质量。不过,即使在 Windows Store、Windows Phone、Silverlight 和 Mono 环境中,该代码似乎也具有高度可移植性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)