New Version 6.0!

Try it for free with our fully functional 60-day trial version.

Download now!

QuickStart Samples

Linear Programming QuickStart Sample (Visual Basic)

Illustrates solving linear programming (LP) problems using classes in the Extreme.Mathematics.Optimization.LinearProgramming namespace in Visual Basic.

C# code F# code IronPython code Back to QuickStart Samples

Option Infer On

' The linear programming classes reside in their own namespace.
Imports Extreme.Mathematics.Optimization
' Vectors and matrices are in the Extreme.Mathematics.LinearAlgebra
' namespace
Imports Extreme.Mathematics

Namespace Extreme.Numerics.QuickStart.VB
    ' Illustrates solving linear programming problems
    ' using the classes in the Extreme.Mathematics.Optimization
    ' namespace of the Extreme Optimization Numerical Libraries for .NET.
    Module LinearProgramming

        Sub Main()
            ' This QuickStart illustrates the three ways to create a Linear Program.

            ' The first is in terms of matrices. The coefficients
            ' are supplied as a matrix. The cost vector, right-hand side
            ' and constraints on the variables are supplied as a vector.

            ' The cost vector:
            Dim c = Vector.Create(-1.0, -3.0, 0.0, 0.0, 0.0, 0.0)
            ' The coefficients of the constraints:
            Dim A = Matrix.Create(4, 6, New Double() _
            { _
                1, 1, 1, 0, 0, 0, _
                1, 1, 0, -1, 0, 0, _
                1, 0, 0, 0, 1, 0, _
                0, 1, 0, 0, 0, 1 _
            }, MatrixElementOrder.RowMajor)
            ' The right-hand sides of the constraints:
            Dim b = Vector.Create(1.5, 0.5, 1.0, 1.0)

            ' We're now ready to call the constructor.
            ' The last parameter specifies the number of equality
            ' constraints.
            Dim lp1 As New LinearProgram(c, A, b, 4)

            ' Now we can call the Solve method to run the Revised
            ' Simplex algorithm:
            Dim x = lp1.Solve()
            ' The GetDualSolution method returns the dual solution:
            Dim y = lp1.GetDualSolution()
            Console.WriteLine("Primal: {0:F1}", x)
            Console.WriteLine("Dual:   {0:F1}", y)
            ' The optimal value is returned by the Extremum property:
            Console.WriteLine("Optimal value:   {0:F1}", lp1.OptimalValue)

            ' The second way to create a Linear Program is by constructing
            ' it by hand. We start with an 'empty' linear program.
            Dim lp2 As New LinearProgram()

            ' Next, we add two variables: we specify the name, the cost,
            ' and optionally the lower and upper bound.
            lp2.AddVariable("X1", -1.0, 0, 1)
            lp2.AddVariable("X2", -3.0, 0, 1)

            ' Next, we add constraints. Constraints also have a name.
            ' We also specify the coefficients of the variables,
            ' the lower bound and the upper bound.
            lp2.AddLinearConstraint("C1", Vector.Create(1.0, 1.0), 0.5, 1.5)
            ' If a constraint is a simple equality or inequality constraint,
            ' you can supply a LinearProgramConstraintType value and the
            ' right-hand side of the constraint.

            ' We can now solve the linear program:
            x = lp2.Solve()
            y = lp2.GetDualSolution()
            Console.WriteLine("Primal: {0:F1}", x)
            Console.WriteLine("Dual:   {0:F1}", y)
            Console.WriteLine("Optimal value:   {0:F1}", lp2.OptimalValue)

            ' Finally, we can create a linear program from an MPS file.
            ' The MPS format is a standard format.
            Dim lp3 = MpsReader.Read("..\..\..\data\sample.mps")
            ' We can go straight to solving the linear program:
            x = lp3.Solve()
            y = lp3.GetDualSolution()
            Console.WriteLine("Primal: {0:F1}", x)
            Console.WriteLine("Dual:   {0:F1}", y)
            Console.WriteLine("Optimal value:   {0:F1}", lp3.OptimalValue)

            Console.Write("Press Enter key to exit...")
        End Sub

    End Module

End Namespace