2011-05-18 42 views
6

我對數值分析非常感興趣。我一直在使用DotNumerics開源應用程序。我的線性系統如下:如何使用DotNumerics解決線性規劃問題?

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

其中x >= 0, y >= 0

z = 10 * x + 15 * y 

我試圖解決z(優化...)

I can use Simplex method to solve above problem as found in this link。我還通過電子郵件發送了作者,但他沒有回覆。

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; 
     } 
    } 
} 
+1

哦,不知道那個工具。我將不得不稍後再看這 – 2011-05-18 18:40:13

+0

還沒有使用dotNumerics,但如果它是一個你正在嘗試解決的LP,你有沒有考慮過使用 - 微軟解決方案http://msdn.microsoft.com/en-us/library/ ff524509(v = vs.93).aspx – Gangadhar 2011-05-18 18:40:48

回答

7

我不認爲DotNumerics本身可以解決LP問題。據我解釋文件,Nelder–Mead(下坡簡單法)實施僅用於解決簡單的最小化問題,而不是LP問題。

我最後一次在c#中解決LP問題時,我使用了一個.net包裝器,以LP_Solve

如果您下載lpsolve軟件包,它應該附帶.net的示例。您也可以將其插入microsoft solver foundationsee here),但我認爲MSF有一些授權問題,您不能在商業應用程序中自由使用它。不過,無國界醫生也可能會感興趣。

同樣,您可以簡單地使用不帶MSF的lpsolve。除非你有大量的尺寸問題,否則Lpsolve是一個相當不錯的LP解算器。那麼至少可以考慮替代方案,並比較性能/適應性與您的特定問題。

+0

我的數學可能會變得生疏,但IIRC最小化是線性規劃問題的一個子集(至少對於線性系統) – sehe 2011-05-18 18:48:02

+0

我沒有這樣看過。但是我想你可以說線性系統的最小化就像解決一個沒有約束的LP一樣? – 2011-05-18 18:49:24

+0

我在回答「最小化是線性規劃的一個子集」。我已經看到算法被稱爲「單純形法」,與LP沒有多大關係,更像是「嘿,它有點用三角形,可以稱之爲單純形」。但我真的不確定。這是一段時間:) – 2011-05-18 18:51:27