ConicBundle
Public Member Functions | List of all members
ConicBundle::PSCModelParametersObject Class Referenceabstract

abstract interface for PSCModel for the model selection routine select_model() More...

#include <PSCModelParametersObject.hxx>

Inheritance diagram for ConicBundle::PSCModelParametersObject:
ConicBundle::CBout ConicBundle::BundleParameters ConicBundle::PSCModelParameters

Public Member Functions

int init (const BundleParameters &bp)
 initialize BundleParameters to given values, if bp is a SumModleParametersObject alos set n_local_models to its values, otherwise leave it unchanged
 
 PSCModelParametersObject (const CBout *cb=0, int cbinc=-1)
 default constructor
 
 PSCModelParametersObject (const BundleParameters &bp, const CBout *cb=0, int cbinc=-1)
 copy constructor for BundleParameters
 
 PSCModelParametersObject (const PSCModelParametersObject &sms)
 copy constructor
 
virtual ~PSCModelParametersObject ()
 virtual destructor, implemented in PSCModelParameters.cxx
 
int get_minorant (MinorantPointer &mp, CH_Matrix_Classes::Real &mp_coeff, const CH_Matrix_Classes::Matrix &P, const CH_Matrix_Classes::Matrix &d, PSCOracle *oracle, CH_Matrix_Classes::Integer modification_id)
 Compute the aggregate minornat corresponding to the matrix P*Diag(d)*P'/sum(d) for the given oracle and aggregate it to (or, if empty or mp_coeff=0., store it in) mp; P has orthonormal columns and d is a nonengative vector of appropriate size.
 
virtual int select_model (CH_Matrix_Classes::Matrix &modelvecs, MinorantPointer &model_aggregate, CH_Matrix_Classes::Matrix &topvecs, CH_Matrix_Classes::Matrix &Ritz_values, CH_Matrix_Classes::Integer &activedim, CH_Matrix_Classes::Integer &keepsize, CH_Matrix_Classes::Integer &skippedsize, CH_Matrix_Classes::Real primal_Ritzval, const CH_Matrix_Classes::Matrix &primaleigs, const CH_Matrix_Classes::Matrix &primalvecs, const MinorantPointer &primal_aggregate, CH_Matrix_Classes::Real primal_aggregate_coeff, CH_Matrix_Classes::Real growthrate, const CH_Matrix_Classes::Matrix &primalgrowth, const CH_Matrix_Classes::Matrix &dualgrowth, const CH_Matrix_Classes::Matrix &cand_Ritzvec, const CH_Matrix_Classes::Matrix &cand_Ritzval, PSCOracle *oracle, CH_Matrix_Classes::Integer modification_id, FunctionTask function_task, CH_Matrix_Classes::Real function_factor, BundleModel::ModelUpdate model_update, CH_Matrix_Classes::Integer center_id, const CH_Matrix_Classes::Matrix &center_y, CH_Matrix_Classes::Integer cand_id, const CH_Matrix_Classes::Matrix &cand_y, CH_Matrix_Classes::Real model_maxviol, CH_Matrix_Classes::Real diffval_center_aggregate, BundleProxObject &H)=0
 PSCModel calls this for selecting the next positive semidefinite model. More...
 
- 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
 
virtual int mfile_data (std::ostream &out) const
 writes problem data to the given outstream
 
- Public Member Functions inherited from ConicBundle::BundleParameters
virtual int get_max_model_size () const
 returns the value of the variable
 
virtual int get_max_bundle_size () const
 returns the value of the variable
 
virtual int get_update_rule () const
 returns the value of the variable
 
virtual int set_max_model_size (int mms)
 sets the value of the variable
 
virtual int set_max_bundle_size (int mbs)
 sets the value of the variable
 
virtual int set_update_rule (int ur)
 sets the value of the variable
 
 BundleParameters (const BundleParameters &bp)
 often works well: small model of size 2 and some history in bundle size for use in scaling
 
 BundleParameters (int modelsize=-1, int bundlesize=-1, int updaterule=-1)
 often works well for fast initial progress: small model of size 2 and some history in bundle size for use in scaling; default values give no preference at all
 
virtual ~BundleParameters ()
 virtual destructor
 
virtual BundleParametersclone_BundleParameters () const
 return a new clone object of this on the heap (caller needs to delete the result)
 

Additional Inherited Members

- Protected Attributes inherited from ConicBundle::BundleParameters
int max_model_size
 maximum number of minorants to be selected for the cutting model (numbers<=1 for no limit, numbers >=2 impose a strict limit)
 
int max_bundle_size
 suggested maximum number of latest minorants stored for use in a model, for constructing variable metric information etc. (negative numbers give no preference; the size may be increased internally in case of confliciting requirements, eg. in n_model_size or by variable metric routines)
 
int update_rule
 in case several update rules are available
 

Detailed Description

abstract interface for PSCModel for the model selection routine select_model()

Because PSCModel implements a model for an AffineMatrixFunction given support function over the positive semidefinite cone, all subgradients are described by points inside this cone. For generating the model it suffices to know the extreme rays or faces. These may described by an orthonormal basis of the subspace of the eigenspaces of nonzero eigenvales. There is no need to consider the generated minorants at all as long as the generating primal matrices are covered by the subspace.

The model is a face of the semidefinite cone spanned by the orthonormal columns of modelvecs – this face includes the candidate and maybe part of the aggregate – possibly in convex combination with a particular positive semidefinite matrix that is needed to span the aggregate; in slight abuse of notation this additional matrix is called the model_aggregate and its conribution to the full aggregate is the model_aggregate_coeff. The eigenvector-eigenvalue pair primalvecs and primaleigs (sorted nonincreasingly) describe the part of the aggregate in the face spanned by modelvecs on input; the columns of primalvecs are also orthonormal and span the same space as modelvecs on input. growthrate, primalgrowth and dualgrowth help to estimate how many of the eigenvalues could actually be active in the final optimal solution (the interior point code never gets to zero eigenvalues). For good convergence it seems important to keep at least the part that is reduced slower than the dual side and maybe more in addition to the new subspace due to the new eigenvalue computation.

The results of the oracle call in the candidate point cand_y are stored in cand_Ritzvecs and cand_Ritzvals (sorted nonincreasingly). Due to numerical imprecision or early termination they need not deliver the actual maximal eigenvectors and eigenvalues. In order to obtain a more stable guess of those, they are used together with the previously important subspace to first form the common subspace of both and to determine the spectral decomposition of the projection of the AffineMatrixFunction at cand_y. The results for the projected matrix are stored in topvecs (orthonormal columns) and Ritz_values (sorted nondecreasingly). Quite often the maximum Ritz_value is a bit larger than the value returned by the eigenvalue computation and the first column of topvecs is typically a better estimate tan that of cand_Ritzvecs, but the latter brings in more new direction infomation.

The task of this routine is to

Member Function Documentation

◆ select_model()

virtual int ConicBundle::PSCModelParametersObject::select_model ( CH_Matrix_Classes::Matrix modelvecs,
MinorantPointer model_aggregate,
CH_Matrix_Classes::Matrix topvecs,
CH_Matrix_Classes::Matrix Ritz_values,
CH_Matrix_Classes::Integer activedim,
CH_Matrix_Classes::Integer keepsize,
CH_Matrix_Classes::Integer skippedsize,
CH_Matrix_Classes::Real  primal_Ritzval,
const CH_Matrix_Classes::Matrix primaleigs,
const CH_Matrix_Classes::Matrix primalvecs,
const MinorantPointer primal_aggregate,
CH_Matrix_Classes::Real  primal_aggregate_coeff,
CH_Matrix_Classes::Real  growthrate,
const CH_Matrix_Classes::Matrix primalgrowth,
const CH_Matrix_Classes::Matrix dualgrowth,
const CH_Matrix_Classes::Matrix cand_Ritzvec,
const CH_Matrix_Classes::Matrix cand_Ritzval,
PSCOracle oracle,
CH_Matrix_Classes::Integer  modification_id,
FunctionTask  function_task,
CH_Matrix_Classes::Real  function_factor,
BundleModel::ModelUpdate  model_update,
CH_Matrix_Classes::Integer  center_id,
const CH_Matrix_Classes::Matrix center_y,
CH_Matrix_Classes::Integer  cand_id,
const CH_Matrix_Classes::Matrix cand_y,
CH_Matrix_Classes::Real  model_maxviol,
CH_Matrix_Classes::Real  diffval_center_aggregate,
BundleProxObject H 
)
pure virtual

PSCModel calls this for selecting the next positive semidefinite model.

Parameters
[in,out]modelvecson input: orthonormal basis of the subspace used in the last semidefinite model on output: orthonormal subspace basis to be used in the next semidefinite model, it includes the subspace of the primalvecs of the keepsize largest primaleigs. In particular for null steps the remaining columns of primalvecs with nonzero primaleigs have to be included with the current aggregate in a new aggregate of the model; this will be taken care of outside this routine aftwards
[in,out]model_aggregate(MinorantPointer) aggregate in use in the last and then the next model.
[in,out]topvecson input: orthonormal basis of the collected subspace that is supposed to approximate the eigenspace to the largest eigenvalues, see Ritz_values on output: same thing but maybe reduced in size
[in,out]Ritz_valueson input: Ritz_values in cand_y for the vectors in topvecs on output: same thing but maybe reduced in size as in topvecs
[in,out]activedimon input: the dimension of the subspace (first columns in topvecs) regarded as active in the last iterations of the bundle subproblem solution on output: the dimension of the subspace (first columns of topvecs) regarded as (maybe weakly) active now (typically it will increase during null steps and may be tightened at descent steps)
[out]keepsizecolumns 0..keepsize-1 of primalvecs (corresponding to the keepsize largest primaleigs) are included in modelvecs. The remaining columns need to be aggregated afterwards into the aggregate of the model
[out]skippedsizecolumns activedim..activedim+skippedsize-1 of topvecs should be used for setting up the scaling matrix after descent steps.
[in]primal_Ritzvalthe (common) Ritz value of the active subspace of the model (if not available use some guess like Ritz_values(0))
[in]primaleigseigenvalues of the last primal semdifinite model matrix (sorted nonincreasingly)
[in]primalvecscorresponding (orthonormal) eigenvectors to primaleigs
[in]primal_aggregate(MinorantPointer) aggregate in use in the last model.
[in]primal_aggregate_coeffcoefficient on how strongly the aggregated was used in the last primal solution to the model
[in]growthrate(Real) factor <X,Z>/<X^-,Z^->, where X^- and Z⁻- are the last but one iterates of the interior point method
[in]primalgrowth(Matrix) factor by which primaleigs changed in the last interior point iteration
[in]dualgrowth(Matrix) factor by which the dual Ritz values to primalvecs changed during the last interior point iteration
[in]cand_Ritzvec(const Matrix&) the (orthonormal) vectors returned by the evaluation call to the oracle
[in]cand_Ritzval(const Matrix&) the Ritz values of cand_Ritzvec returned by the evaluation call to the oracle
[in]oraclegives access to the evaluation oracle
[in]modification_idthe identifier for the current version of the function accounting for dynamic modifications
[in]function_tasksee FunctionTask
[in]function_factorinterpreted according to function_task and the coefficients sum up to at most this value
[in]model_updateinforms about whether cand_y is the result of a null_step or descent_step or a new set up.
[in]center_idthe identifier of the center point
[in]center_ythe center point
[in]cand_idthe identifier of the candidate point
[in]cand_ythe candidate (mostly differnt from the center), close to it the model should be good
[in]model_maxviola minorant violated by this would have caused a null step
[in]diffval_center_aggregatedifference of center value to aggregate value (nonnegative, without function_factor)
[in]Hthe variable metric used in the proximal term (function_factor is already removed in this)
Returns
  • 0 on success
  • 1 on failure

Implemented in ConicBundle::PSCModelParameters.

Referenced by PSCModelParametersObject().


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