2011-05-18 39 views
6

Estoy realmente interesado en el análisis numérico. He estado usando la aplicación de código abierto DotNumerics. Mi sistema lineal es el siguiente:Cómo resolver el problema de programación lineal con DotNumerics?

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

donde x >= 0, y >= 0

z = 10 * x + 15 * y 

que estoy tratando de resolver z (optimización ...)

I can use Simplex method to solve above problem as found in this link. También he enviado un correo electrónico al autor, sin embargo, él no ha respondido.

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

Ooh, no sabía nada de esa herramienta. Tendré que mirar esto más tarde –

+0

No he usado dotNumerics, pero si se trata de un LP que está tratando de resolver, ¿ha considerado usar el - Microsoft Solver http://msdn.microsoft.com/en-us/library/ ff524509 (v = vs.93) .aspx – Gangadhar

Respuesta

7

No creo que DotNumerics pueda resolver problemas de LP por sí mismo. Por lo que interpreto la documentación, el Nelder–Mead (método simplex cuesta abajo) implementado solo se usa para resolver problemas simples de minimalización, no problemas de LP.

La última vez que resolví LP en C#, utilicé un contenedor .net en LP_Solve.

Si descarga el paquete lpsolve, debería venir con un ejemplo para .net. También puede conectarlo al microsoft solver foundation (see here), pero creo que MSF tiene algunos problemas de licencia y no puede usarlo libremente para aplicaciones comerciales. Pero aún así, MSF también puede ser interesante de revisar.

De nuevo, simplemente puede usar lpsolve sin MSF. Lpsolve es un buen solucionador de LP a menos que tengas problemas de tamaño masivo. Entonces puede valer la pena al menos buscar alternativas y comparar el rendimiento/adaptabilidad a su problema particular.

+0

mis matemáticas pueden estar oxidadas, pero la minimalización IIRC es un subconjunto de problemas de programación lineal (al menos para sistemas lineales) – sehe

+0

No lo he visto de esta manera. Pero supongo que se podría decir que la minimalización de un sistema lineal es como resolver un LP que no tiene restricciones. –

+0

Estaba respondiendo que "la minimalización es un subconjunto de la programación lineal". He visto algoritmos a los que se hace referencia como "método simplex" que no tenían mucha relación con el LP en absoluto, más bien como "hey, un poco usa triángulos, vamos a llamarlo simplex". Pero realmente no estoy seguro Hace un tiempo :) –

Cuestiones relacionadas