Как решить проблему линейного программирования, используя DotNumerics? - PullRequest
7 голосов
/ 18 мая 2011

Я действительно заинтересован в численном анализе.Я использую приложение с открытым исходным кодом 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 <= 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 Ответ

7 голосов
/ 18 мая 2011

Я не думаю, что DotNumerics может решить проблемы с LP самостоятельно.Насколько я понимаю, документация Nelder – Mead (метод симплексного спуска) используется только для решения простых задач минимизации, а не задач LP.

В последний раз, когда я решал LP в c #, я использовал оболочку .net для LP_Solve .

Если вы загружаете пакет lpsolve, он должен сопровождаться примером для .net.Вы также можете подключить его к Microsoft Solver Foundation ( см. Здесь ), но я думаю, у MSF есть некоторые проблемы с лицензированием, и вы не можете свободно использовать его для коммерческих приложений.Но, тем не менее, MSF может быть интересно проверить.

Опять же, вы можете просто использовать lpsolve без MSF.Lpsolve - довольно хороший LP-решатель, если у вас нет проблем с большими размерами.Тогда, возможно, стоит хотя бы найти альтернативы и сравнить производительность / адаптивность с вашей конкретной проблемой.

...