← All NMath Code Examples
Imports System
Imports CenterSpace.NMath.Core
Namespace CenterSpace.NMath.Examples.VisualBasic
<summary>
A .NET example in Visual Basic showing how to use the interior point quadratic
programming solver <c>InteriorPointQPSolver</c> to solve a quadratic
programming problem.
</summary>
Module InteriorPointQPExample
Sub Main()
Use the InteriorPointQPSolver class to solve a quadratic programming
problem of the form
0.5*xHx + xc
Our problem will have 4 variables and eight constraints. In addition
the variables will be required to be nonnegative.
Construct the 4x4 H matrix and c vector for the problem.
Dim HMatrixData As Double(,) = New Double(,) {{3.0625, 0.0, 0.0, 0.0},
{0.0, 0.0405, 0.0, 0.0},
{0.0, 0.0, 0.0271, -0.0031},
{0.0, 0.0, -0.0031, 0.0054}}
Dim H As New DoubleMatrix(HMatrixData)
Dim C As New DoubleVector(-2671.0, -135.0, -103.0, -19.0)
Construct the quadratic programming problem from H and C.
Dim Problem As New QuadraticProgrammingProblem(H, C)
Our problem will have 8 linear constraints and will be of the form
Cx <= b
Where C is an 8x4 matrix and b is a vector of length 8.
Construct the C matrix and b vector.
Dim CMatrixData As Double(,) = New Double(,) {
{-0.0401, -0.0162, -0.0039, 0.0002},
{-0.1326, -0.0004, -0.0034, 0.0006},
{1.5413, 0.0, 0.0, 0.0},
{0.0, 0.0203, 0.0, 0.0},
{0.0, 0.0, 0.0136, -0.0075},
{0.0, 0.0, -0.0016, 0.0027},
{0.016, 0.0004, 0.0005, 0.0002}
}
Dim CMatrix As New DoubleMatrix(CMatrixData)
Dim B As New DoubleVector(-92.6, -29.0, 2671.0, 135.0, 103.0, 19.0, 10.0)
Now, add the constraints to the problem.
Dim I As Integer
For I = 0 To CMatrix.Rows - 1
Problem.AddUpperBoundConstraint(CMatrix.Row(I), B(I))
Next
Add variable bounds. Variable values are required to be >= 0.
For I = 0 To 3
Problem.AddLowerBound(I, 0.0)
Next
Construct the solver.
Dim Solver As New InteriorPointQPSolver()
Set parameters for the solve.
Dim SolverParams As New InteriorPointQPSolverParams
SolverParams.KktForm = InteriorPointQPSolverParams.KktFormOption.Blended
SolverParams.Tolerance = 0.000001
SolverParams.MaxDenseColumnRatio = 0.9
SolverParams.PresolveLevel = InteriorPointQPSolverParams.PresolveLevelOption.Full
SolverParams.SymbolicOrdering = InteriorPointQPSolverParams.SymbolicOrderingOption.ApproximateMinDegree
Solver.Solve(Problem, SolverParams)
Console.WriteLine("\nSolver Parameters:")
Console.WriteLine(SolverParams.ToString())
Console.WriteLine("\nResult = " & Solver.Result)
Console.WriteLine("Optimal x = " & NMathFunctions.Round(Solver.OptimalX, 0).ToString())
Console.WriteLine("Optimal Function value = " & Solver.OptimalObjectiveFunctionValue.ToString("F3"))
Console.WriteLine("iterations = " & Solver.IterationCount)
Console.WriteLine()
Console.WriteLine("Press Enter Key")
Console.Read()
End Sub
End Module
End Namespace
← All NMath Code Examples