c# - .NET/C# 的线性编程库

标签 c# .net mono mathematical-optimization linear-programming

<分区>

我需要求解欠定的线性方程组和约束,然后找到最小化成本函数的特定解。这需要在将在 .NET 和 Mono 中运行的纯可移植托管代码中完成。我可以使用哪些免费可用的库来实现此目的?

我发现的免费库提供的所有优化算法都只支持单个变量的区间约束,例如0 < x < 1 ,而不是像 x + 2y < 4 这样的约束.我还发现,线性方程求解器通常只支持具有一种解的线性系统。

目前我找到的最接近的是 DotNumerics ,其中包括用于求解欠定线性系统的奇异值分解,但其优化算法仅支持单变量约束(据我所知)。

关于线性规划还有其他几个问题,但我的主要要求是多变量约束和求解欠定系统。我还没有找到支持多变量约束的免费库。

最佳答案

如果您正在为 .NET 开发(即不是 Windows 应用商店、Windows Phone 或 Silverlight),那么我肯定会建议您看一下 lpsolve ,这适用于大型 LP 和/或 MILP 问题。下载x86x64包含相应 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 上下文中,代码看起来确实具有高度可移植性。

关于c# - .NET/C# 的线性编程库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16462448/

相关文章:

c# - 如何使用两个不同的数字生成唯一 key ,然后使用这些数字之一检索此 key

c# - NHibernate 使用 WCF 序列化延迟加载的实体

c# - 如何在 C# 中监视和重新启动引发异常的任务?

.net - 当前的 .NET SDK 不支持面向 .NET Core 2.1。面向 .NET Core 2.0 或更低版本,或者使用支持 .NET Core 2.1 的 .NET SDK

c# - MonoTouch native 崩溃调用 CGPDFDictionary.GetArray

c# - Xamarin/Mono TLS 异常

c# - TDD : Any pattern for constant testing?

c# - Windows 2003 上的 .NET 应用程序性能问题

dll - 在 Linux 上添加对外部 .dll 的引用

c# - 从 C# 列表中获取唯一的 3 位数 zip