C# 如何使用DotNumerics解决线性规划问题?
我对数值分析很感兴趣。我一直在使用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 {
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;
}
}
}