ConstrainedOptPack: C++ Tools for Constrained (and Unconstrained) Optimization
Version of the Day
|
Implementation of initial KKT system for all variables initially fixed and free where #Ko = B_RR#. More...
#include <ConstrainedOptPack_QPSchurInitKKTSystemHessianSuperBasic.hpp>
Public Member Functions | |
void | initialize_kkt_system (const DVectorSlice &g, const MatrixOp &G, value_type etaL, const SpVectorSlice &dL, const SpVectorSlice &dU, const MatrixOp *F, BLAS_Cpp::Transp trans_F, const DVectorSlice *f, const DVectorSlice &d, const SpVectorSlice &nu, size_type *n_R, i_x_free_t *i_x_free, i_x_fixed_t *i_x_fixed, bnd_fixed_t *bnd_fixed, j_f_decomp_t *j_f_decomp, DVector *b_X, Ko_ptr_t *Ko, DVector *fo) const |
Initialize the KKT system where the variables are initiallly fixed and free and no constraints are in Ko. More... | |
Public Member Functions inherited from ConstrainedOptPack::QPSolverRelaxedQPSchur::InitKKTSystem | |
virtual | ~InitKKTSystem () |
virtual void | initialize_kkt_system (const Vector &g, const MatrixOp &G, value_type etaL, const Vector *dL, const Vector *dU, const MatrixOp *F, BLAS_Cpp::Transp trans_F, const Vector *f, const Vector *d, const Vector *nu, size_type *n_R, i_x_free_t *i_x_free, i_x_fixed_t *i_x_fixed, bnd_fixed_t *bnd_fixed, j_f_decomp_t *j_f_decomp, DVector *b_X, Ko_ptr_t *Ko, DVector *fo) const =0 |
Initializes the KKT system. More... | |
Additional Inherited Members | |
Public Types inherited from ConstrainedOptPack::QPSolverRelaxedQPSchur::InitKKTSystem | |
typedef std::vector< size_type > | i_x_free_t |
typedef std::vector< size_type > | i_x_fixed_t |
typedef std::vector< EBounds > | bnd_fixed_t |
typedef std::vector< size_type > | j_f_decomp_t |
typedef Teuchos::RCP< const MatrixSymOpNonsing > | Ko_ptr_t |
Implementation of initial KKT system for all variables initially fixed and free where #Ko = B_RR#.
In this implementation, #G# must support the {MatrixHessianSuperBasic} interface.
Definition at line 56 of file ConstrainedOptPack_QPSchurInitKKTSystemHessianSuperBasic.hpp.
void ConstrainedOptPack::QPSchurInitKKTSystemHessianSuperBasic::initialize_kkt_system | ( | const DVectorSlice & | g, |
const MatrixOp & | G, | ||
value_type | etaL, | ||
const SpVectorSlice & | dL, | ||
const SpVectorSlice & | dU, | ||
const MatrixOp * | F, | ||
BLAS_Cpp::Transp | trans_F, | ||
const DVectorSlice * | f, | ||
const DVectorSlice & | d, | ||
const SpVectorSlice & | nu, | ||
size_type * | n_R, | ||
i_x_free_t * | i_x_free, | ||
i_x_fixed_t * | i_x_fixed, | ||
bnd_fixed_t * | bnd_fixed, | ||
j_f_decomp_t * | j_f_decomp, | ||
DVector * | b_X, | ||
Ko_ptr_t * | Ko, | ||
DVector * | fo | ||
) | const |
Initialize the KKT system where the variables are initiallly fixed and free and no constraints are in Ko.
The Hessian for the QP without the relaxation #G# is represented as a {MatrixHessianSuperBasic} object and is:
#G = Q_R*B_RR*Q_R' + Q_R*op(B_RX)*Q_X' + Q_X*op(B_RX')*Q_R + Q_X*B_XX*Q_X'#
If #G# does not support the interface #MatrixHessianSuperBasic# then an exception will be thrown.
Given the above parts of #G#, define: #[nd,nd_R] = size(G.Q_R)# and #[nd,nd_X] = size(G.Q_X)#. Then initial KKT system is defined as:
#n_R = nd_R#\ if #i_x_free.size() > 0# then #i_x_free[(G.Q_R.begin()+l-1)->col_j()-1] = (G.Q_R.begin()+l-1)->row_i(), l = 1...nd_R#\ if #i_x_free.size() == 0# then #i_x_free is implicitly identity#\ #i_x_fixed[(G.Q_X.begin()+l-1)->col_j()-1] = (G.Q_X.begin()+l-1)->row_i(), l = 1...nd_X#\ #i_x_fixed[nd_X] = nd+1#\ #bnd_fixed[l-1] = G.bnd_fixed[l-1], l = 1...nd_X#\ #bnd_fixed[nd_X] = LOWER#\ #j_f_decomp[] = empty#\ #b_X[l-1] = { dL(i) if bnd_fixed[l-1] == LOWER or EQUALITY, dU(i) if bnd_fixed[l-1] == UPPER }# #, l = 1...nd_X (where i = i_x_fixed[l-1])#\ #b_X[nd_X] = etaL#\ #Ko = G.B_RR#\ #fo = - G.Q_R'*g - op(G.B_RX)*b_X(1:nd_X)#\\
Above, it is assumed that if #G.bnd_fixed[l-1] == EQUALITY#, that #dL(G.i_x_fixed[l-1]) == dU(G.i_x_fixed[l-1]# but this may not be inforced by this class.
If the {MatrixHessianSuperBasic} interface is not suppored by #G# then a {QPSchurInitKKTSystemHessianFull} strategy object is used to try to initialize the KKT system.