CGAL 6.1 - Linear and Quadratic Programming Solver

Loading...
Searching...
No Matches
List of all members
NonnegativeQuadraticProgram Concept Reference
Reference Manual » Concepts

## Definition

A model of `NonnegativeQuadraticProgram` describes a convex quadratic program of the form.

\begin{eqnarray*} \mbox{(QP)}& \mbox{minimize} & \qpx^{T}D\qpx+\qpc^{T}\qpx+c_0 \\ &\mbox{subject to} & A\qpx\qprel \qpb, \\ & & \qpx \geq 0 \end{eqnarray*}

in \( n\) real variables \( \qpx=(x_0,\ldots,x_{n-1})\). Here,

- \( A\) is an \( m\times n\) matrix (the constraint matrix),
- \( \qpb\) is an \( m\)-dimensional vector (the right-hand side),

- \( \qprel\) is an \( m\)-dimensional vector of relations from \( \{\leq, =, \geq\}\),

- \( D\) is a symmetric positive-semidefinite \( n\times n\) matrix (the quadratic objective function),

- \( \qpc\) is an \( n\)-dimensional vector (the linear objective function), and

- \( c_0\) is a constant.

The description is given by appropriate random-access iterators over the program data, see below. The program therefore comes in dense representation which includes zero entries.

Has models
  `CGAL::Quadratic_program<NT>`
  `CGAL::Quadratic_program_from_mps<NT>`
  `CGAL::Nonnegative_quadratic_program_from_iterators<A_it, B_it, R_it, FL_it, L_it, FU_it, U_it, D_it, C_it>`

The value types of all iterator types (nested iterator types, respectively, for `A_iterator` and `D_iterator`) must be convertible to some common `IntegralDomain` `ET`.

See also
  `QuadraticProgram`
  `LinearProgram`
  `NonnegativeLinearProgram`

## Types
typedef unspecified_type | A_iterator
| A random access iterator type to go columnwise over the constraint matrix \( A\).
typedef unspecified_type | B_iterator
| A random access iterator type to go over the entries of the right-hand side \( \qpb\).
typedef unspecified_type | R_iterator
| A random access iterator type to go over the relations \( \qprel\).
typedef unspecified_type | D_iterator
| A random access iterator type to go rowwise over the matrix \( 2D\).
typedef unspecified_type | C_iterator
| A random access iterator type to go over the entries of the linear objective function vector \( c\).

## Operations
int | get_n () const
| returns the number \( n\) of variables (number of columns of \( A\)) in `qp`.
int | get_m () const
| returns the number \( m\) of constraints (number of rows of \( A\)) in `qp`.
A_iterator | get_a () const
| returns an iterator over the columns of \( A\).
B_iterator | get_b () const
| returns an iterator over the entries of \( \qpb\).
R_iterator | get_r () const
| returns an iterator over the entries of \( \qprel\).
D_iterator | get_d () const
| returns an iterator over the rows of \( 2D\).
C_iterator | get_c () const
| returns an iterator over the entries of \( \qpc\).
std::iterator_traits< C_iterator >::value_type | get_c0 () const
| returns the constant term \( c_0\) of the objective function.

## Member Typedef Documentation

## ◆ A_iterator

typedef unspecified_type NonnegativeQuadraticProgram::A_iterator

A random access iterator type to go columnwise over the constraint matrix \( A\).

The value type is a random access iterator type for an individual column that goes over the entries in that column.

## ◆ D_iterator

typedef unspecified_type NonnegativeQuadraticProgram::D_iterator

A random access iterator type to go rowwise over the matrix \( 2D\).

The value type is a random access iterator type for an individual row that goes over the entries in that row, up to (and including) the entry on the main diagonal.

## ◆ R_iterator

typedef unspecified_type NonnegativeQuadraticProgram::R_iterator

A random access iterator type to go over the relations \( \qprel\).

The value type of `R_iterator` is `CGAL::Comparison_result`.

## Member Function Documentation

## ◆ get_a()

A_iterator NonnegativeQuadraticProgram::get_a | ( |  | ) | const

returns an iterator over the columns of \( A\).

The corresponding past-the-end iterator is `get_a()+get_n()`. For \( j=0,\ldots,n-1\), `*(get_a()+j)` is a random access iterator for column \( j\).

## ◆ get_b()

B_iterator NonnegativeQuadraticProgram::get_b | ( |  | ) | const

returns an iterator over the entries of \( \qpb\).

The corresponding past-the-end iterator is `get_b()+get_m()`.

## ◆ get_c()

C_iterator NonnegativeQuadraticProgram::get_c | ( |  | ) | const

returns an iterator over the entries of \( \qpc\).

The corresponding past-the-end iterator is `get_c()+get_n()`.

## ◆ get_d()

D_iterator NonnegativeQuadraticProgram::get_d | ( |  | ) | const

returns an iterator over the rows of \( 2D\).

The corresponding past-the-end iterator is `get_d()+get_n()`. For \( i=0,\ldots,n-1\), `*(get_d()+i)` is a random access iterator for the entries in row \( i\) below or on the diagonal. The valid range of this iterator is guaranteed to have length \( i+1\) but not more. Values to the right of the diagonal are deduced from the symmetry requirement on \( D\).

## ◆ get_r()

R_iterator NonnegativeQuadraticProgram::get_r | ( |  | ) | const

returns an iterator over the entries of \( \qprel\).

The corresponding past-the-end iterator is `get_r()+get_m()`. The value `CGAL::SMALLER` stands for \( \leq\), `CGAL::EQUAL` stands for \( =\), and `CGAL::LARGER` stands for \( \geq\).