# VB Nonlinear Programming Example

← All NMath Code Examples

```ï»¿Imports System

Imports CenterSpace.NMath.Core
Imports CenterSpace.NMath.Analysis

Namespace CenterSpace.NMath.Analysis.Examples.VisualBasic

''' A .NET example in Visual Basic
Module NonlinearProgrammingExample

Sub Main()

Dim Objective As DoubleFunctional = New ObjectiveFunction()
Dim Problem As New NonlinearProgrammingProblem(Objective)

' Dimensionality of the objective and constraint function domains
Dim xDimension As Integer = 2

' Add constraint x0*x1 - x0 -x1 <= -1.5

' Add constraint x0*x1 >= -10

' Set some options on the solver by creating an Options object and setting
' some properties, then use it to construct the solver instance.
Dim solveroptions As New ActiveSetLineSearchSQP.Options()
solveroptions.StepDirectionTolerance = 0.00000001
solveroptions.FunctionChangeTolerance = 0.000001
' Since our constraints are nearly linear (one quadratic term) we'll
' use the simpler constant step size.
solveroptions.StepSizeCalculator = New ConstantSQPStepSize(1)

' Create the solver with the above options and use it to solve the problem.
Dim Solver As New ActiveSetLineSearchSQP(solveroptions)

' Initial solution guess
Dim x0 As New DoubleVector(-1.0, 1.0)
Dim success As Boolean = Solver.Solve(Problem, x0)

Console.WriteLine()

Console.WriteLine(If(success, "Solver was successful", "Solver encountered a problem."))
Console.WriteLine("Termination status = " & Solver.SolverTerminationStatus.ToString())
Console.WriteLine("X = " & Solver.OptimalX.ToString())
Console.WriteLine("f(x) = " & Solver.OptimalObjectiveFunctionValue)
Console.WriteLine("Iterations = " & Solver.Iterations)

Console.WriteLine()
Console.WriteLine("Press Enter Key")

End Sub

Function Constraint1(ByVal X As DoubleVector) As Double
Return X(0) * X(1) - X(0) - X(1)
End Function

Function Constraint2(ByVal x As DoubleVector) As Double
Return x(0) * x(1)
End Function

End Module

' <summary>
' f(x) = exp(x0)*(4*x0^2 + 2*x1^2 + 4*x0*x1 + 2*x1 + 1)
' </summary>
Class ObjectiveFunction
Inherits DoubleFunctional

' <summary>
' Constructor. Must initialize the base Module with dimension
' of the domain, 2 in this case.
' </summary>
Public Sub New()
MyBase.New(2)
End Sub

' <summary>
' Evaluate the objective function at a point x.
' </summary>
' <param name="x">The point at which to evaluate the function.</param>
' <returns>The value of the objective function.</returns>
Public Overrides Function Evaluate(ByVal X As DoubleVector) As Double
Dim x0 As Double = X(0)
Dim x1 As Double = X(1)
Return Math.Exp(x0) * (4 * x0 * x0 + 2 * x1 * x1 + 4 * x0 * x1 + 2 * x1 + 1)
End Function

' <summary>
' Returns the gradient of the objective function at a point x.
' </summary>
' <param name="x">The point at which to evaluate the gradient.</param>
Dim x0 As Double = X(0)
Dim x1 As Double = X(1)
Dim ex0 As Double = Math.Exp(x0)
grad(0) = ex0 * (4 * x0 * x0 + 2 * x1 * x1 + 4 * x0 * x1 + 2 * x1 + 1) + ex0 * (8 * x0 + 4 * x1)
grad(1) = ex0 * (4 * x0 + 4 * x1 + 2)
End Sub

End Class
End Namespace

```
← All NMath Code Examples
Top