如何使用DotNumerics解决线性编程问题?

我对数值分析很感兴趣。 我一直在使用DotNumerics开源应用程序。 我的线性系统如下:

1 * x + 3 * y <= 150 2 * x + 1 * y <= 100 

其中x >= 0, y >= 0

 z = 10 * x + 15 * y 

我想解决z (优化……)

我可以使用Simplex方法来解决此链接中的上述问题 。 我也通过电子邮件发送了作者,但他没有回复。

 using DotNumerics.Optimization; using DotNumerics; namespace App.SimplexCalcLinearProgramming { class Program { static void Main(string[] args) { Simplex simplex = new Simplex(); double[] initialGuess = new double[2]; initialGuess[0] = 0.1; initialGuess[1] = 2; double[] minimum = simplex.ComputeMin(AmacFunction, initialGuess); minimum.ToList().ForEach(q => Console.Write(q.ToString() + "\n")); Console.ReadKey(); } static double AmacFunction(double[] x) { /* * 1 * x + 3 * y <= 150 * 2 * x + 1 * y = 0, y >= 0 * * z = 10 * x + 15 * y * * Solve for z */ double f = 0; f = 10*x[0]+15*x[1]; return f; } } } 

我不认为DotNumerics可以自己解决LP问题。 据我解释文档,实现的Nelder-Mead (下坡单纯形法)仅用于解决简单的最小化问题,而不是LP问题。

我最后一次在c#中解决了LP,我在LP_Solve中使用了一个.net包装器。

如果您下载了lpsolve软件包,它应该附带一个.net示例。 你也可以将它插入微软求解器基础 ( 见这里 ),但我认为MSF有一些许可问题,你不能自由地用于商业应用。 但是,无国界医生可能也很有趣。

同样,您可以简单地使用没有MSF的lpsolve。 Lpsolve是一个非常好的LP求解器,除非你有大量的问题。 然后,至少可以考虑替代方案并比较性能/适应性来解决您的特定问题。