<分区>
我需要求解欠定的线性方程组和约束,然后找到最小化成本函数的特定解。这需要在将在 .NET 和 Mono 中运行的纯可移植托管代码中完成。我可以使用哪些免费可用的库来实现此目的?
我发现的免费库提供的所有优化算法都只支持单个变量的区间约束,例如0 < x < 1
,而不是像 x + 2y < 4
这样的约束.我还发现,线性方程求解器通常只支持具有一种解的线性系统。
目前我找到的最接近的是 DotNumerics ,其中包括用于求解欠定线性系统的奇异值分解,但其优化算法仅支持单变量约束(据我所知)。
关于线性规划还有其他几个问题,但我的主要要求是多变量约束和求解欠定系统。我还没有找到支持多变量约束的免费库。
如果您正在为 .NET 开发(即不是 Windows 应用商店、Windows Phone 或 Silverlight),那么我肯定会建议您看一下 lpsolve ,这适用于大型 LP 和/或 MILP 问题。下载x86或 x64包含相应 lpsolve DLL:s 的开发文件,然后下载 .NET API包含一个 C# 文件的存档,其中包含对 lpsolve API 中所有相关函数的 P/Invoke 调用。
另一种选择是使用 CLP来自 COIN-OR 的求解器项目,通过 CoinMP预编译的二进制文件。有可用的 C# 包装器 DLL here .
如果您确实需要纯托管代码,ALGLIB 可能是您最好的选择(如上文 Marc Gravell 所建议),但请注意 ALGLIB 开源许可证使用 GPL。如果您想在自己的代码中使用 ALGLIB 而不向开源社区公开,则需要购买商业 ALGLIB 许可证。
通过互联网快速搜索还可以找到 Simplex LP 算法的纯 C# 实现 here .我无法确定作者,也不知道这个实现是否正确或质量如何。不过,即使在 Windows 应用商店、Windows Phone、Silverlight 和 Mono 上下文中,代码看起来确实具有高度可移植性。