C# 如何使用DotNumerics解决线性规划问题?

C# 如何使用DotNumerics解决线性规划问题?,c#,.net,numerical-methods,C#,.net,Numerical Methods,我对数值分析很感兴趣。我一直在使用DotNumerics开源应用程序。我的线性系统如下所示: 1 * x + 3 * y <= 150 2 * x + 1 * y <= 100 我正在尝试解决z(优化…) 。我也给作者发了电子邮件,但他没有回复 using DotNumerics.Optimization; using DotNumerics; namespace App.SimplexCalcLinearProgramming { class Program {

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

1 * x + 3 * y <= 150
2 * x + 1 * y <= 100
我正在尝试解决
z
(优化…)

。我也给作者发了电子邮件,但他没有回复

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 <= 100
             *
             * where x >= 0, y >= 0
             *
             * z = 10 * x + 15 * y
             *
             * Solve for z
             */
            double f = 0;
            f = 10*x[0]+15*x[1];
            return f;
        }
    }
}
使用DotNumerics.优化;
使用数字运算;
命名空间App.SimpleCalcLinearProgramming
{
班级计划
{
静态void Main(字符串[]参数)
{
单纯形=新单纯形();
double[]initialGuess=新的双精度[2];
初始猜测[0]=0.1;
初始猜测[1]=2;
double[]最小值=simplex.ComputeMin(AmacFunction,initialGuess);
minimum.ToList().ForEach(q=>Console.Write(q.ToString()+“\n”);
Console.ReadKey();
}
静态双A函数(双[]x)
{
/*
*1*x+3*y=0
*
*z=10*x+15*y
*
*求z
*/
双f=0;
f=10*x[0]+15*x[1];
返回f;
}
}
}

我认为DotNumerics本身无法解决LP问题。就我对文档的理解而言,所实现的(下坡单纯形法)仅用于解决简单的最小化问题,而不是LP问题

上一次我在c#中解LP时,我使用了.net包装器

如果下载lpsolve包,它应该附带一个.net示例。您也可以将其插入(),但我认为MSF存在一些许可问题,您不能将其免费用于商业应用程序。不过,无国界医生组织也可能会感兴趣


同样,您可以简单地使用lpsolve而不使用MSF。Lpsolve是一个非常好的LP解算器,除非您有大量的大小问题。然后,至少应该四处寻找替代方案,并将性能/适应性与您的特定问题进行比较

哦,我不知道那个工具。我将不得不从后面看这个问题。我没有使用dotNumerics,但是如果这是一个你试图解决的LP,你是否考虑过使用-Microsoft解算器?我的数学可能已经过时了,但是IIRC最小化是线性规划问题的一个子集(至少对于线性系统),我没有这样看。但我想你们可以说,线性系统的最小化就像求解一个没有约束的线性规划?我是在回答“最小化是线性规划的子集”。我见过被称为“单纯形法”的算法,它和LP并没有太大关系,更像是“嘿,它有点使用三角形,让我们称之为单纯形”。但我真的不确定。好吧,我迷路了。你可能是对的,我的数学变得生疏了,术语混乱了。dotnumerics实现的方法似乎是一种非常严格的优化方法,与LP中使用的单纯形没有直接关系。除此之外,它使用三角形(或高维多面体)。但我没有接受过正式的数学培训:)如果我胡说八道,我很乐意改正!
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 <= 100
             *
             * where x >= 0, y >= 0
             *
             * z = 10 * x + 15 * y
             *
             * Solve for z
             */
            double f = 0;
            f = 10*x[0]+15*x[1];
            return f;
        }
    }
}