← All NMath Code Examples
using System;
using CenterSpace.NMath.Core;
namespace CenterSpace.NMath.Examples.CSharp
{
class QuadraticProgrammingExample
{
/// Example illustrating the use of the ActiveSetQPSolver class to
/// solve a Quadratic Programming (QP) problem.
static void Main( string[] args )
{
// Minimize q(x) = (x0 - 1)^2 + (x1 - 2.5)^2
// subject to -x0 + 2*x1 <= 2
// x0 - 2*x1 >= -6
// -x0 + 2*x1 >= -2
// x0 >= 0
// x1 >= 0
// Translating the objective function into the form
// 0.5*xHx + xc
// yields
// H = | 2 0 |
// | 0 2 |
//
// x = [-2 -5]
var H = new DoubleMatrix( "2x2[2 0 0 2]" );
var c = new DoubleVector( -2.0, -5.0 );
// Set up the QP problem
var problem = new QuadraticProgrammingProblem( H, c );
problem.AddUpperBoundConstraint( new DoubleVector( -1.0, 2.0 ), 2.0 );
problem.AddLowerBoundConstraint( new DoubleVector( 1.0, -2.0 ), -6.0 );
problem.AddLowerBoundConstraint( new DoubleVector( -1.0, 2.0 ), -2.0 );
// add the lower bound of 0 for x0
problem.AddLowerBound( 0, 0 );
// add the lower bound of 0 for x1
problem.AddLowerBound( 1, 0 );
var solver = new ActiveSetQPSolver();
Console.WriteLine();
if ( !solver.Solve( problem ) )
{
// Solver failed to find a solution. Print out the solver status.
Console.WriteLine( "Solver failed. Status = {0}", solver.Status );
return;
}
// Solver found a solution. Print out the optimal x and objective function
// values and the number of iterations.
Console.WriteLine( "Solver found solution (x0, x1) = ({0}, {1}) after {2} iterations",
solver.OptimalX[0], solver.OptimalX[1], solver.Iterations );
Console.WriteLine( "Optimal objective function value = {0}", solver.OptimalObjectiveFunctionValue );
Console.WriteLine();
Console.WriteLine( "Press Enter Key" );
Console.Read();
}
}
}
← All NMath Code Examples