ConicBundle
Public Member Functions | Private Member Functions | Private Attributes | List of all members
ConicBundle::BundleDenseTrustRegionProx Class Reference

implements the abstract interface ConicBundle::BundleProxObject for $\|y-\hat{y}\|_H^2$ for general symmetric H+weight*I (H is assumed to be positive semidefinite without checking) giving rise to an augmented model with dense variable metric More...

#include <BundleDenseTrustRegionProx.hxx>

Inheritance diagram for ConicBundle::BundleDenseTrustRegionProx:
ConicBundle::BundleProxObject ConicBundle::VariableMetric ConicBundle::QPSolverProxObject ConicBundle::CBout

Public Member Functions

 BundleDenseTrustRegionProx (const CH_Matrix_Classes::Symmatrix &Hin, VariableMetricSelection *vp=0, bool local_metric=false, bool bounds_scaling=false, CBout *cb=0, int cbinc=-1)
 initialize to this Matrix and set the variable_metric option (false by default)
 
 BundleDenseTrustRegionProx (CH_Matrix_Classes::Integer dim=0, VariableMetricSelection *vp=0, bool local_metric=false, bool bounds_scaling=false, CBout *cb=0, int cbinc=-1)
 initialize H to the zero Matrix of this dimension (on the diagonal the weight will be added) and set the variable_metric option (false by default)
 
void set_weightu (CH_Matrix_Classes::Real in_weightu)
 set the weight of the proximal term
 
CH_Matrix_Classes::Real get_weightu () const
 returns the current weight of the proximal term
 
CH_Matrix_Classes::Real get_term_corr () const
 returns a correction factor for termination precision if the quadratic term is strong
 
const CH_Matrix_Classes::Symmatrixinit (CH_Matrix_Classes::Symmatrix &in_H)
 set H with the information, whether it is factored
 
bool get_factored () const
 returns true iff get_Hchol() returns the factord matrix of H with weightu
 
const CH_Matrix_Classes::Symmatrixget_H () const
 returns the metric matrix without weightu
 
const CH_Matrix_Classes::Symmatrixget_Hchol () const
 returns the stored factorization of H with weightu (up to date if get_factored()==true)
 
CH_Matrix_Classes::Integer dim () const
 returns the order of the matrix
 
const CH_Matrix_Classes::Realoperator() (CH_Matrix_Classes::Integer i, CH_Matrix_Classes::Integer j)
 returns H(i,j) (without including weightu)
 
virtual CH_Matrix_Classes::Real norm_sqr (const CH_Matrix_Classes::Matrix &B) const
 returns $|B|^2_H$ (with weightu included in H)
 
virtual CH_Matrix_Classes::Real dnorm_sqr (const MinorantPointer &B) const
 returns $|B|^2_{H^{-1}}$ (with weightu included in H)
 
virtual bool is_DLR () const
 return true if H is of the form diagonal matrix plus Gram matrix of a low rank matrix
 
virtual int add_H (CH_Matrix_Classes::Symmatrix &big_sym, CH_Matrix_Classes::Integer start_index=0) const
 add H to the dense symmetric matrix as a principal submatrix starting at position start_index
 
virtual CH_Matrix_Classes::Matrixadd_Hx (const CH_Matrix_Classes::Matrix &x, CH_Matrix_Classes::Matrix &outplusHx, CH_Matrix_Classes::Real alpha=1.) const
 adds $alpha*Hx$ to outplusHx and returns this
 
virtual CH_Matrix_Classes::Matrixapply_Hinv (CH_Matrix_Classes::Matrix &x) const
 returns $H^{-1}x$
 
virtual void get_precond (CH_Matrix_Classes::Matrix &inD, const CH_Matrix_Classes::Matrix *&Vp) const
 returns a suitable approximation for preconditioning, see BundleProxObject::get_precond
 
virtual int compute_QP_costs (CH_Matrix_Classes::Symmatrix &Q, CH_Matrix_Classes::Matrix &d, CH_Matrix_Classes::Real &offset, const MinorantPointer &constant_minorant, const MinorantBundle &bundle, const CH_Matrix_Classes::Matrix &y, const MinorantPointer &groundset_minorant, CH_Matrix_Classes::Indexmatrix *yfixed)
 computes the dual QP costs Q, d, and the constant offset to the bundle subproblem, see BundleProxObject::compute_QP_costs
 
virtual int update_QP_costs (CH_Matrix_Classes::Symmatrix &delta_Q, CH_Matrix_Classes::Matrix &delta_d, CH_Matrix_Classes::Real &delta_offset, const MinorantPointer &constant_minorant, const MinorantBundle &bundle, const CH_Matrix_Classes::Matrix &center_y, const MinorantPointer &groundset_minorant, const MinorantPointer &delta_groundset_minorant, const CH_Matrix_Classes::Indexmatrix &delta_index, CH_Matrix_Classes::Indexmatrix *yfixed)
 updates the dual QP costs Q, d, and the constant offset to the bundle subproblem, see BundleProxObject::update_QP_costs
 
virtual int apply_modification (const GroundsetModification &gsmdf)
 when BundleSolver is called to modify the groundset it also calls this
 
virtual BundleProxObjectprojected_clone (const CH_Matrix_Classes::Indexmatrix &indices)
 in order to allow for fixed variables, this generates a clone restricted to the given indices
 
virtual bool supports_diagonal_bounds_scaling () const
 this implementation does not support a diagonal scaling heuristic, therefore the following routine has to return true.
 
virtual int diagonal_bounds_scaling_update (const CH_Matrix_Classes::Matrix &)
 if supported, D_update has to contain nonnegative numbers that are permanently added to the diagonal here. It is important to keep track of this change only if afterwards update_QP_costs is called before compute_QP_costs. In this case the only nonzero enries in D_update must be those of delta_index
 
virtual bool supports_dense_variable_metric () const
 returns true if dynamic scaling with dense symmetric matrices is supported
 
virtual bool supports_lowrank_variable_metric () const
 returns true if dynamic scaling with low rank structure is supported
 
virtual bool supports_diagonal_variable_metric () const
 returns true if dynamic scaling with diagonal matrices is supported
 
virtual int apply_variable_metric (VariableMetricModel *groundset, VariableMetricModel *model, const CH_Matrix_Classes::Matrix &aggr, CH_Matrix_Classes::Integer y_id, const CH_Matrix_Classes::Matrix &y, bool descent_step, CH_Matrix_Classes::Real &current_weight, CH_Matrix_Classes::Real model_maxviol, const CH_Matrix_Classes::Indexmatrix *new_indices=0)
 see DynamicScaling
 
virtual int add_variable_metric (CH_Matrix_Classes::Symmatrix &addH)
 see BundleProxObject::add_variable_metric()
 
virtual int add_variable_metric (CH_Matrix_Classes::Matrix &diagH, CH_Matrix_Classes::Matrix &vecH)
 see BundleProxObject::add_lowrank_variable_metric()
 
virtual int push_aft (const AffineFunctionTransformation *aft)
 see BundleProxObject::push_aft();
 
virtual int pop_aft ()
 see BundleProxObject::pop_aft();
 
virtual int mfile_data (std::ostream &out) const
 output the description of the scaling in mfile-suitable format
 
- Public Member Functions inherited from ConicBundle::BundleProxObject
 BundleProxObject (VariableMetricSelection *vp=0, bool local_scaling=false, bool bounds_scaling=false, CBout *cb=0, int cbincr=-1)
 default constructor, switching on dynamic scaling only works for classes with corresponding support
 
virtual void set_short_QPsteps (CH_Matrix_Classes::Integer shortQPst)
 may be used to indicate seemingly conservative step sizes possibly due to the quadratic term
 
virtual CH_Matrix_Classes::Integer get_short_QPsteps ()
 retrieves the number of conservative step sizes possibly due to the quadratic term passed on to this
 
int apply_factor (CH_Matrix_Classes::Real f)
 allows AFTModel and SumModel to accumulate a compensation factor for tracing the effects of recursive applications of function_factor in update_model (does not affect H but can be retrieved by get_factor() for this purpose)
 
CH_Matrix_Classes::Real get_factor ()
 returns the current accumulated compensation factor by which H would need to be scaled in order to reflect the curvature relative to the current function without function_factor;
 
- Public Member Functions inherited from ConicBundle::VariableMetric
virtual ~VariableMetric ()
 virtual destructor
 
 VariableMetric (VariableMetricSelection *vp=0, bool use_loc_metric=false, bool use_bnds_scaling=false, CBout *cbo=0, int cbinc=-1)
 default constructor; if vp is not zero, ownership of *vp is passed over to *this and *this will delete vp
 
VariableMetricSelectionget_variable_metric_selection () const
 returns 0 or an available VariableMetricSelection object, that may be employed for computing a variable metric term in accordance with the value of use_local_metric
 
void set_variable_metric_selection (VariableMetricSelection *vp=0)
 sets use_variable_metric; the object passed is then owned by this
 
bool employ_variable_metric () const
 returns true if some dynamic scaling is supported and switched on
 
bool get_use_bounds_scaling () const
 returns use_bounds_scaling
 
void set_use_bounds_scaling (bool bounds_scaling)
 sets use_bounds_scaling
 
bool employ_diagonal_bounds_scaling () const
 if the respective implementation supports a diagonal bounds scaling heuristic, the following routine has to return true; see also diagonal_bounds_scaling_update()
 
bool get_use_local_metric () const
 returns use_local_metric
 
void set_use_local_metric (bool local_metric)
 sets use_local_metric
 
- Public Member Functions inherited from ConicBundle::CBout
virtual void set_out (std::ostream *out=0, int print_level=1)
 Specifies the output level (out==NULL: no output at all, out!=NULL and level=0: errors and warnings, level>0 increasingly detailed information) More...
 
virtual void set_cbout (const CBout *cb, int incr=-1)
 Specifies the output level relative to the given CBout class. More...
 
void clear_cbout ()
 reset to default settings (out=0,print_level=1)
 
 CBout (const CBout *cb=0, int incr=-1)
 calls set_cbout
 
 CBout (std::ostream *outp, int pl=1)
 initialize correspondingly
 
 CBout (const CBout &cb, int incr=0)
 copy constructor
 
virtual bool cb_out (int pl=-1) const
 Returns true if out!=0 and (pl<print_level), pl<0 should be used for WARNINGS and ERRORS only, pl==0 for usual output.
 
std::ostream & get_out () const
 If cb_out() returned true, this returns the output stream, but it will abort if called with out==0.
 
std::ostream * get_out_ptr () const
 returns the pointer to the output stream
 
int get_print_level () const
 returns the print_level
 
- Public Member Functions inherited from ConicBundle::QPSolverProxObject
virtual ~QPSolverProxObject ()
 virtual destructor
 

Private Member Functions

void compute_corr ()
 computes the correction value, here min(1,dim/trace(H))
 

Private Attributes

CH_Matrix_Classes::Symmatrix H
 the metric matrix without weightu added to it
 
CH_Matrix_Classes::Symmatrix Hchol
 if is_facotred==ture this holds the Cholesky factor of (H+weightu*I)
 
bool is_factored
 true iff Hchol is computed for the current H and weightu
 
CH_Matrix_Classes::Symmatrix Hind_chol
 holds the Cholesky factor of (H+weightu*I) with old_fixed_ind deleted if the dimension fits
 
CH_Matrix_Classes::Real weightu
 the current weightu added to H
 
CH_Matrix_Classes::Real corr_val
 the correction value for correcting termination precision
 
CH_Matrix_Classes::Indexmatrix old_fixed_ind
 the fixed indices for which the QP_costs were computed
 
CH_Matrix_Classes::Matrix _A
 for compute_QP_costs() this holds the non_fixed part of the subgradients
 
CH_Matrix_Classes::Matrix _b
 for compute_QP_costs() this holds the constant subgradient
 
CH_Matrix_Classes::Matrix _c
 for compute_QP_costs() this holds the offset values of the subgradients
 
CH_Matrix_Classes::Real _delta
 for compute_QP_costs() this holds the constant offset
 
CH_Matrix_Classes::Matrix _y
 for compute_QP_costs() this holds the non_fixed part of center_y
 
CH_Matrix_Classes::Matrix LinvA
 for compute_QP_costs() this holds L^{-1}*_A
 
CH_Matrix_Classes::Matrix Lty
 for compute_QP_costs() this holds L^T*_y
 
CH_Matrix_Classes::Symmatrix oldQ
 the old quadratic cost matrix
 
CH_Matrix_Classes::Matrix oldd
 the old linear cost term;
 
CH_Matrix_Classes::Real oldoffset
 the old costant cost term;
 
const CH_Matrix_Classes::Indexmatrixnew_indices
 if values should be computed for a new subset indices, this is stored here
 
std::vector< const AffineFunctionTransformation * > aft_stack
 in add_variable_metric() the stack serves to transform the given data
 

Additional Inherited Members

- Protected Attributes inherited from ConicBundle::BundleProxObject
CH_Matrix_Classes::Real factor
 used to accumulate a compensation factor for function_factor; this factor is not included in H but can be applied externally via get_factor() if required
 
CH_Matrix_Classes::Integer short_QPsteps
 the QP may signal short steps that seem due to the quadratic term by setting this counter via set_short_QPsteps()
 
- Static Protected Attributes inherited from ConicBundle::BundleProxObject
static const CH_Matrix_Classes::Integer xdim_threshold = 100
 constant for possible use if QP coefficients are to be computed in parallel (still purely experimental)
 

Detailed Description

implements the abstract interface ConicBundle::BundleProxObject for $\|y-\hat{y}\|_H^2$ for general symmetric H+weight*I (H is assumed to be positive semidefinite without checking) giving rise to an augmented model with dense variable metric


The documentation for this class was generated from the following file: