我需要求解方程和约束的欠定线性系统,然后找到最小化的成本函数的特定解决方案。 这需要在纯粹的便携式托管代码将在.NET和Mono运行工作要做。 什么免费软件库在那里,我可以用它来实现这一点?
所有的由自由库提供的优化算法我已发现仅支持在单个变量间隔的限制,例如0 < x < 1
而不是象约束x + 2y < 4
我也发现,往往是线性方程组的求解器只支持线性系统的一种解决方案。
到目前为止我发现的最接近的是DotNumerics ,其包括用于根据确定的线性系统求解奇异值分解,但它的优化算法仅支持单变量约束(据我可以告诉)。
有询问线性规划等几个问题,但我的主要要求是多变量约束和解决欠定系统。 我还没有找到支持多变量约束的自由库。
ALGLIB是通常去到库之类的线性解法。 我想给那个绝望之前好好看看。
如果您正在为.NET开发(即不是Windows应用商店,Windows Phone的或Silverlight),那么我肯定会推荐你看看lpsolve ,适合于大型LP和/或MILP问题。 下载的x86或x64的包含各lpsolve DLL开发档案:s,然后下载.NET API包含有P C#文件归档/ Invoke调用的API lpsolve在所有相关功能。
另一种替代方法是使用CLP从求解器COIN-OR项目,经由CoinMP预编译二进制文件。 有可用的C#包装DLL 这里 。
如果您还需要纯粹的托管代码,ALGLIB可能是你最好的选择(由Marc Gravell上面的建议),但要注意的是,ALGLIB开源许可证GPL使用。 如果你想使用ALGLIB在自己的代码没有它透露给开源社区,你需要购买商业ALGLIB许可证。
一个快速的互联网搜索还揭示了单纯LP算法的纯C#实现在这里 。 我不能确定作者,我不知道这个实现是正确的还是任何质量。 该代码似乎非常便携不过,即使是在Windows应用商店,Windows Phone的,Silverlight和单声道背景的条款。
线性规划是用于做的正是你所要求的。 多变量约束是线性规划完全正常。 免费看像求解lpsolve( http://sourceforge.net/projects/lpsolve/ ),GLPK( http://www.gnu.org/software/glpk/ )或CBC( HTTPS://projects.coin-or .ORG / CBC )例如。
我接受的是,上述建议是不是在C#和没有管理.NET程序集外的开箱。 如果这对你是一个大忌,那么也许你可以尝试自己从其中一个库的源代码建立一个版本。 可能需要相当多的工作的,但 - 我还没有尝试过。
这也是从你原来的问题,或大或复杂的你正在尝试解决的问题还不清楚。 如果您有必须采取离散值的变量,那么你就需要一个求解器库,将做分支定界或类似的,否则如果其纯粹的线性和连续的,那么你可以只使用一个单一的算法。 它在很多教科书的,如果你不能找到一个预建版本。
如果它的一个非常微小的问题(几十个变量和约束),或者只是线性和连续的,那么你可以逃脱自己的新鲜(便携,纯托管代码)实现,但如果你有成千上万的约束和变量,你可能很难得到你所需要的性能。 如果你有一个大而复杂的问题,你可能是出于运气,你可能需要一个商业求解得到你所需要的答案。