CGAL 4.5 - Linear and Quadratic Programming Solver
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
CGAL::Quadratic_program< NT > Class Template Reference

#include <CGAL/QP_models.h>

Definition

An object of class Quadratic_program describes a convex quadratic program of the form

(QP)minimizexTDx+cTx+c0subject toAxb,lxu

in n real variables x=(x0,,xn1).

Here,

  • A is an m×n matrix (the constraint matrix),
  • b is an m-dimensional vector (the right-hand side),
  • is an m-dimensional vector of relations from {,=,},

  • l is an n-dimensional vector of lower bounds for x, where ljR{} for all j
  • u is an n-dimensional vector of upper bounds for x, where ujR{} for all j

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

  • c is an n-dimensional vector (the linear objective function), and
  • c0 is a constant.

If D=0, the program is a linear program; if the variable bounds are x0, we have a nonnegative program.

This class allows you to build your program entry by entry, using the set-methods below.

If you only need to wrap existing (random-access) iterators over your own data, then you may use any of the four models Quadratic_program_from_iterators<A_it, B_it, R_it, FL_it, L_it, FU_it, U_it, D_it, C_it>, Linear_program_from_iterators<A_it, B_it, R_it, FL_it, L_it, FU_it, U_it, C_it>, Nonnegative_quadratic_program_from_iterators<A_it, B_it, R_it, D_it, C_it>, and Nonnegative_linear_program_from_iterators<A_it, B_it, R_it, C_it>.

If you want to read a quadratic program in MPSFormat from a stream, please use the model Quadratic_program_from_mps<NT>.

Is Model Of:

QuadraticProgram

LinearProgram

NonnegativeQuadraticProgram

NonnegativeLinearProgram

Example

QP_solver/first_qp.cpp

QP_solver/first_lp.cpp

QP_solver/first_nonnegative_qp.cpp

QP_solver/first_nonnegative_lp.cpp

QP_solver/invert_matrix.cpp

See Also
Quadratic_program_from_iterators<A_it, B_it, R_it, FL_it, L_it, FU_it, U_it, D_it, C_it>
Linear_program_from_iterators<A_it, B_it, R_it, FL_it, L_it, FU_it, U_it, C_it>
Nonnegative_quadratic_program_from_iterators<A_it, B_it, R_it, D_it, C_it>
Nonnegative_linear_program_from_iterators<A_it, B_it, R_it, C_it>
Quadratic_program_from_mps<NT>
Examples:
QP_solver/first_lp.cpp, QP_solver/first_nonnegative_lp.cpp, QP_solver/first_nonnegative_qp.cpp, QP_solver/first_qp.cpp, QP_solver/first_qp_basic_constraints.cpp, QP_solver/invert_matrix.cpp, QP_solver/print_first_lp.cpp, QP_solver/print_first_nonnegative_lp.cpp, QP_solver/print_first_nonnegative_qp.cpp, and QP_solver/print_first_qp.cpp.

Types

typedef unspecified_type NT
 The number type of the program entries.
 

Creation

 Quadratic_program (CGAL::Comparison_result default_r=CGAL::EQUAL, bool default_fl=true, const NT &default_l=0, bool default_fu=false, const NT &default_u=0)
 constructs a quadratic program with no variables and no constraints, ready for data to be added. More...
 

Operations

bool is_linear () const
 returns true if and only if qp is a linear program.
 
bool is_nonnegative () const
 returns true if and only if qp is a nonnegative program.
 
void set_a (int j, int i, const NT &val)
 sets the entry Aij in column j and row i of the constraint matrix A of qp to val. More...
 
void set_b (int i, const NT &val)
 sets the entry bi of qp to val. More...
 
void set_r (int i, CGAL::Comparison_result rel)
 sets the entry i of qp to rel. More...
 
void set_l (int j, bool is_finite, const NT &val=NT(0))
 if is_finite, this sets the entry lj of qp to val, otherwise it sets lj to . More...
 
void set_u (int j, bool is_finite, const NT &val=NT(0))
 if is_finite, this sets the entry uj of qp to val, otherwise it sets uj to . More...
 
void set_c (int j, const NT &val)
 sets the entry cj of qp to val. More...
 
void set_c0 (const NT &val)
 sets the entry c0 of qp to val. More...
 
void set_d (int i, int j, const NT &val)
 sets the entries 2Dij and 2Dji of qp to val. More...
 

Constructor & Destructor Documentation

template<typename NT >
CGAL::Quadratic_program< NT >::Quadratic_program ( CGAL::Comparison_result  default_r = CGAL::EQUAL,
bool  default_fl = true,
const NT default_l = 0,
bool  default_fu = false,
const NT default_u = 0 
)

constructs a quadratic program with no variables and no constraints, ready for data to be added.

Unless relations are explicitly set, they will be of type default_r. Unless bounds are explicitly set, they will be as specified by default_fl (finite lower bound?), default_l (lower bound value if lower bound is finite), default_fu (finite upper bound?), and default_l (upper bound value if upper bound is finite). If all parameters take their default values, we thus get equality constraints and bounds x0 by default. Numerical entries that are not explicitly set will default to 0.

Precondition
if default_fl == default_fu == true, then default_l <= default_u.

Member Function Documentation

template<typename NT >
void CGAL::Quadratic_program< NT >::set_a ( int  j,
int  i,
const NT val 
)

sets the entry Aij in column j and row i of the constraint matrix A of qp to val.

An existing entry is overwritten. qp is enlarged if necessary to accomodate this entry.

template<typename NT >
void CGAL::Quadratic_program< NT >::set_b ( int  i,
const NT val 
)

sets the entry bi of qp to val.

An existing entry is overwritten. qp is enlarged if necessary to accomodate this entry.

template<typename NT >
void CGAL::Quadratic_program< NT >::set_c ( int  j,
const NT val 
)

sets the entry cj of qp to val.

An existing entry is overwritten. qp is enlarged if necessary to accomodate this entry.

template<typename NT >
void CGAL::Quadratic_program< NT >::set_c0 ( const NT val)

sets the entry c0 of qp to val.

An existing entry is overwritten.

template<typename NT >
void CGAL::Quadratic_program< NT >::set_d ( int  i,
int  j,
const NT val 
)

sets the entries 2Dij and 2Dji of qp to val.

Existing entries are overwritten. qp is enlarged if necessary to accomodate these entries.

Precondition
j <= i
template<typename NT >
void CGAL::Quadratic_program< NT >::set_l ( int  j,
bool  is_finite,
const NT val = NT(0) 
)

if is_finite, this sets the entry lj of qp to val, otherwise it sets lj to .

An existing entry is overwritten. qp is enlarged if necessary to accomodate this entry.

template<typename NT >
void CGAL::Quadratic_program< NT >::set_r ( int  i,
CGAL::Comparison_result  rel 
)

sets the entry i of qp to rel.

CGAL::SMALLER means that the i-th constraint is of type "\f$ \leq\f$", CGAL::EQUAL means "\f$ =\f$", and CGAL::LARGER encodes "\f$ \geq\f$". An existing entry is overwritten. qp is enlarged if necessary to accomodate this entry.

template<typename NT >
void CGAL::Quadratic_program< NT >::set_u ( int  j,
bool  is_finite,
const NT val = NT(0) 
)

if is_finite, this sets the entry uj of qp to val, otherwise it sets uj to .

An existing entry is overwritten. qp is enlarged if necessary to accomodate this entry.