ConicBundle
SOCIPBundleBlock.hxx
Go to the documentation of this file.
1 
2 
3 #ifndef CONICBUNDLE_SOCIPBUNDLEBLOCK_HXX
4 #define CONICBUNDLE_SOCIPBUNDLEBLOCK_HXX
5 
14 #include "SOCIPBlock.hxx"
15 
16 namespace ConicBundle {
17 
22 
29 {
30 private:
34 
35 public:
38 
40  SOCIPBundleBlock(CH_Matrix_Classes::Integer dim=0, CBout* cb=0,int cbinc=-1);
41 
44 
47 
49  virtual int copy_from(InteriorPointBundleBlock*);
50 
53  {return bundle_dim;}
54 
57 
60 
63 
65  virtual int add_trace(CH_Matrix_Classes::Matrix& vec,
67  CH_Matrix_Classes::Integer startindex);
68 
71  CH_Matrix_Classes::Integer startindex);
72 
73  // after the bundle subproblem is solved, this retrieves the local linear solution vector; if linx_activity is set, the values between zero and one indicate the guess on the coefficients activity level
74  // virtual int get_linx(CH_Matrix_Classes::Matrix& linx,
75  // CH_Matrix_Classes::Matrix* linx_activity=0) const;
76 
83  int Btrans,
84  int Atrans,
85  CH_Matrix_Classes::Integer startindex_model,
86  MinorantBundle& globalbundle,
87  CH_Matrix_Classes::Integer startindex_bundle);
88 
95  int Atrans,
96  int Btrans,
97  CH_Matrix_Classes::Integer startindex_model,
98  MinorantBundle& globalbundle,
99  CH_Matrix_Classes::Integer startindex_bundle);
100 
103  add_BDBt(const CH_Matrix_Classes::Matrix& diagvec,
105  bool minus,
106  CH_Matrix_Classes::Integer startindex,
108  CH_Matrix_Classes::Integer startindex_model,
109  MinorantBundle& globalbundle,
110  CH_Matrix_Classes::Integer startindex_bundle);
111 
115  CH_Matrix_Classes::Integer startindex_model,
116  MinorantBundle& global_bundle,
117  CH_Matrix_Classes::Integer startindex_bundle);
118 
122  MinorantBundle& global_bundle,
123  CH_Matrix_Classes::Integer startindex_bundle);
124 
126  virtual int get_sysviol_model(CH_Matrix_Classes::Matrix& sysviol_model,
127  CH_Matrix_Classes::Integer startindex_model,
128  const CH_Matrix_Classes::Matrix& dy,
129  const CH_Matrix_Classes::Real deltatrdual,
130  MinorantBundle& global_bundle,
131  CH_Matrix_Classes::Integer startindex_bundle);
132 
134  virtual int set_bundle_z(const CH_Matrix_Classes::Matrix& y,
135  MinorantBundle& global_bundle,
136  CH_Matrix_Classes::Integer startindex_bundle,
137  CH_Matrix_Classes::Real& add_center_value);
138 
140  virtual int add_trace_to_diff_model(CH_Matrix_Classes::Real trace_dual);
141 
144 
146  virtual int do_bundle_step(CH_Matrix_Classes::Real alpha,
147  const CH_Matrix_Classes::Matrix& y,
148  MinorantBundle& globalbundle,
149  CH_Matrix_Classes::Integer startindex_bundle,
150  CH_Matrix_Classes::Real tracedual,
151  CH_Matrix_Classes::Real trace_rhs);
152 
154  virtual int set_modelrhs(CH_Matrix_Classes::Matrix& globalrhs,
156  CH_Matrix_Classes::Real rhscorr,
157  CH_Matrix_Classes::Integer startindex_model);
158 
160  virtual int add_BtinvsysB(CH_Matrix_Classes::Symmatrix& globalsys,
161  const MinorantBundle& bundle,
162  CH_Matrix_Classes::Integer startindex_bundle) ;
163 
187  MinorantBundle& globalbundle,
188  CH_Matrix_Classes::Integer startindex_bundle,
189  CH_Matrix_Classes::Matrix& trafotrace,
190  CH_Matrix_Classes::Integer startindex_trace);
191 
192 
217  CH_Matrix_Classes::Matrix& ipBtrvec,
218  MinorantBundle& globalbundle,
219  CH_Matrix_Classes::Integer startindex_bundle,
220  const CH_Matrix_Classes::Matrix& trafotrace,
221  CH_Matrix_Classes::Integer startindex_trace);
222 
223 
241  virtual int add_pcsubspace(CH_Matrix_Classes::Matrix& lowrank,
242  CH_Matrix_Classes::Matrix& sigma_guess,
243  const CH_Matrix_Classes::Matrix& Diag_inv,
245  CH_Matrix_Classes::Real diaginvval,
246  CH_Matrix_Classes::Matrix & minus_trmult,
247  CH_Matrix_Classes::Real schur_trace,
248  MinorantBundle& globalbundle,
249  CH_Matrix_Classes::Integer startindex_bundle);
250 
251 
254  CH_Matrix_Classes::Matrix& subspace,
255  CH_Matrix_Classes::Integer startindex_subsspace,
256  MinorantBundle& globalbundle,
257  CH_Matrix_Classes::Integer startindex_bundle);
258 
260  virtual int add_BtinvsysB_times(const CH_Matrix_Classes::Matrix& in_vec,
261  CH_Matrix_Classes::Matrix& out_vec,
262  CH_Matrix_Classes::Real zeta_inval,
263  CH_Matrix_Classes::Real* zeta_outval,
264  MinorantBundle& globalbundle,
265  CH_Matrix_Classes::Integer startindex_bundle);
266 
268  virtual int set_dx_xizsolvestep(const CH_Matrix_Classes::Matrix& step_y,
269  const CH_Matrix_Classes::Real step_trdual,
270  MinorantBundle& globalbundle,
271  CH_Matrix_Classes::Integer startindex_bundle);
272 
274  virtual int get_socx(CH_Matrix_Classes::Matrix& socx,
275  CH_Matrix_Classes::Real* socx_activity,
276  CH_Matrix_Classes::Real trace_rhs,
277  bool cautious) const;
278 
279 
280 
281 };
282 
283 
285 
286 }
287 
288 #endif
289 
int Integer
all integer numbers in calculations and indexing are of this type
Definition: matop.hxx:40
virtual CH_Matrix_Classes::Real evaluate_trace_dx()
return the change in "trace" value caused by the current step
CH_Matrix_Classes::Matrix Bt
matrix representation of bundle
Definition: SOCIPBundleBlock.hxx:31
virtual int add_pcsubspace(CH_Matrix_Classes::Matrix &lowrank, CH_Matrix_Classes::Matrix &sigma_guess, const CH_Matrix_Classes::Matrix &Diag_inv, CH_Matrix_Classes::Real minval, CH_Matrix_Classes::Real diaginvval, CH_Matrix_Classes::Matrix &minus_trmult, CH_Matrix_Classes::Real schur_trace, MinorantBundle &globalbundle, CH_Matrix_Classes::Integer startindex_bundle)
append to lowrank "large" columns that should serve well for generating a low rank projection of the ...
interface for interior point variable and routines specific to primal dual complementarity conditions...
Definition: SOCIPBlock.hxx:27
virtual CH_Matrix_Classes::Real dualviol_2normsqr()
return the squared Euclidean norm of the dual model violation
double Real
all real numbers in calculations are of this type
Definition: matop.hxx:50
virtual CH_Matrix_Classes::Real evaluate_trace_z()
return the "trace" value of the current point
virtual int set_bundle_z(const CH_Matrix_Classes::Matrix &y, MinorantBundle &global_bundle, CH_Matrix_Classes::Integer startindex_bundle, CH_Matrix_Classes::Real &add_center_value)
set z to the slack of the bundle and return a value>=0 that needs to be added to make it feasible ...
int add_bundle_xizinvsqrt_projection(CH_Matrix_Classes::Matrix &glob_lowrank, CH_Matrix_Classes::Matrix &subspace, CH_Matrix_Classes::Integer startindex_subsspace, MinorantBundle &globalbundle, CH_Matrix_Classes::Integer startindex_bundle)
add bundle*sqrt(inv(xiz))*subspace to glob_lowrank with bundle(:,si_bundle+1:si_bundle+dim_bundle()-1...
virtual CH_Matrix_Classes::Integer dim_bundle() const
returns the number of consecutive bundle elements this cone makes use of
Definition: SOCIPBundleBlock.hxx:52
virtual InteriorPointBundleBlock * clone()
returns a clone
virtual int add_BtinvsysB(CH_Matrix_Classes::Symmatrix &globalsys, const MinorantBundle &bundle, CH_Matrix_Classes::Integer startindex_bundle)
add the "scaled" minorant outer products to globalsys, where the correct minroants start at the given...
virtual int set_dx_xizsolvestep(const CH_Matrix_Classes::Matrix &step_y, const CH_Matrix_Classes::Real step_trdual, MinorantBundle &globalbundle, CH_Matrix_Classes::Integer startindex_bundle)
compute dx (and then dz) given step_y and step_trdual on basis of the last rhs computed for the model...
virtual int add_trace_to_diff_model(CH_Matrix_Classes::Real trace_dual)
add trace_dual*trace to diff_model for the right hand side (negative of current model violation) ...
virtual int set_modelrhs(CH_Matrix_Classes::Matrix &globalrhs, CH_Matrix_Classes::Real rhsmu, CH_Matrix_Classes::Real rhscorr, CH_Matrix_Classes::Integer startindex_model)
If mu is not zero, always add the centering term for this mu as well;.
virtual CH_Matrix_Classes::Symmatrix & add_BDBt(const CH_Matrix_Classes::Matrix &diagvec, CH_Matrix_Classes::Symmatrix &bigS, bool minus, CH_Matrix_Classes::Integer startindex, CH_Matrix_Classes::Matrix &Bt, CH_Matrix_Classes::Integer startindex_model, MinorantBundle &globalbundle, CH_Matrix_Classes::Integer startindex_bundle)
add the main diagonal block tranpose(projection)*diagvec*projection to bigS starting at startindex ...
void clear(CH_Matrix_Classes::Integer dim=0)
reset all point information to zero for dimension dim, the rest to zero
Matrix class of symmetric matrices with real values of type Real
Definition: symmat.hxx:43
virtual int copy_from(InteriorPointBundleBlock *)
copies to content of the argument to this; to work *this must be a clone of the argument; sofar this ...
conic bundle method solver for sum of convex functions. See the ConicBundle_Manual for a quick introd...
Definition: CBSolver.hxx:22
virtual int set_xizinvsqrt_trace(CH_Matrix_Classes::Matrix &vec, CH_Matrix_Classes::Integer startindex)
set the trace premultiplied by sqrt(inv(xiz)) in vec[startindex+0,...,startindex+dim_bundle()-1] ...
base class for uniform use of WARNINGS and ERRORS (at some point in time)
Definition: CBout.hxx:30
CH_Matrix_Classes::Matrix sqrBnorms
if rowdim>0 it holds the squared norm of each subgradient in the same sequence as in B ...
Definition: SOCIPBundleBlock.hxx:33
virtual CH_Matrix_Classes::Matrix & B_times(const CH_Matrix_Classes::Matrix &A, CH_Matrix_Classes::Matrix &C, CH_Matrix_Classes::Real alpha, CH_Matrix_Classes::Real beta, int Btrans, int Atrans, CH_Matrix_Classes::Integer startindex_model, MinorantBundle &globalbundle, CH_Matrix_Classes::Integer startindex_bundle)
C=beta*C+alpha*B*A where B and A may be transposed; carry out the model part of this beginning at sta...
virtual int get_socx(CH_Matrix_Classes::Matrix &socx, CH_Matrix_Classes::Real *socx_activity, CH_Matrix_Classes::Real trace_rhs, bool cautious) const
after the bundle subproblem is solved, this retrieves the local SOCIP solution vector; if socx_activi...
virtual int add_trace(CH_Matrix_Classes::Matrix &vec, CH_Matrix_Classes::Real alpha, CH_Matrix_Classes::Integer startindex)
add alpha*trace_vec to vec starting at startindex
CH_Matrix_Classes::Integer bundle_dim
dimension of the bundle (in case of subspace projections this may differ from vecdim ...
Definition: InteriorPointBundleBlock.hxx:34
int Schur_transform_bundle(CH_Matrix_Classes::Matrix &glob_lowrank, MinorantBundle &globalbundle, CH_Matrix_Classes::Integer startindex_bundle, CH_Matrix_Classes::Matrix &trafotrace, CH_Matrix_Classes::Integer startindex_trace)
provides basic information for low rank preconditioning (in the extreme case solving) for the case of...
Matrix class for real values of type Real
Definition: matrix.hxx:74
virtual int add_BtinvsysB_times(const CH_Matrix_Classes::Matrix &in_vec, CH_Matrix_Classes::Matrix &out_vec, CH_Matrix_Classes::Real zeta_inval, CH_Matrix_Classes::Real *zeta_outval, MinorantBundle &globalbundle, CH_Matrix_Classes::Integer startindex_bundle)
out_vec+=BtinvsysB*in_vec
interior point variables and routines specific to primal dual complementarity conditions of a second ...
Definition: SOCIPBundleBlock.hxx:28
std::vector< MinorantPointer > MinorantBundle
a bundle is a vector with MinorantPointer entries
Definition: MinorantPointer.hxx:24
virtual CH_Matrix_Classes::Matrix & get_Bt(CH_Matrix_Classes::Matrix &Bt, CH_Matrix_Classes::Integer startindex_model, MinorantBundle &global_bundle, CH_Matrix_Classes::Integer startindex_bundle)
get the current matrix for the coupling matrix Bt in the first row of blocks
virtual CH_Matrix_Classes::Matrix & times_B(const CH_Matrix_Classes::Matrix &A, CH_Matrix_Classes::Matrix &C, CH_Matrix_Classes::Real alpha, CH_Matrix_Classes::Real beta, int Atrans, int Btrans, CH_Matrix_Classes::Integer startindex_model, MinorantBundle &globalbundle, CH_Matrix_Classes::Integer startindex_bundle)
C=beta*C+alpha*A*B where A and B may be transposed; carry out the model part of this beginning at sta...
SOCIPBundleBlock(CH_Matrix_Classes::Integer dim=0, CBout *cb=0, int cbinc=-1)
default constructor, allows to intialize the dimension
Header declaring the class ConicBundle::SOCIPBlock.
virtual int add_modelx_aggregate(CH_Matrix_Classes::Real &val, CH_Matrix_Classes::Matrix &vec, MinorantBundle &global_bundle, CH_Matrix_Classes::Integer startindex_bundle)
adds opB transposed times modelx (without constant affine term) to the arguments
virtual int do_bundle_step(CH_Matrix_Classes::Real alpha, const CH_Matrix_Classes::Matrix &y, MinorantBundle &globalbundle, CH_Matrix_Classes::Integer startindex_bundle, CH_Matrix_Classes::Real tracedual, CH_Matrix_Classes::Real trace_rhs)
move to (x+alpha*dx, z+alpha*dz), update diff_model and possibly reduce the model size if some part i...
abstract interface for interior point routines specific to primal dual complementarity conditions of ...
Definition: InteriorPointBundleBlock.hxx:31
Header declaring the class ConicBundle::InteriorPointBundleBlock.
virtual int add_bundle_xizinv_diagonal(CH_Matrix_Classes::Matrix &diagonal, CH_Matrix_Classes::Matrix &ipBtrvec, MinorantBundle &globalbundle, CH_Matrix_Classes::Integer startindex_bundle, const CH_Matrix_Classes::Matrix &trafotrace, CH_Matrix_Classes::Integer startindex_trace)
add diag(Bt*sqrt(invsys)*(I-lambda*trvec*trvec&#39;)*sqrt(invsys)*B) to diagonal
virtual CH_Matrix_Classes::Real evaluate_trace_x()
return the "trace" value of the current point
CH_Matrix_Classes::Matrix Boffset
columnvector of bundle offsets
Definition: SOCIPBundleBlock.hxx:32
virtual int get_sysviol_model(CH_Matrix_Classes::Matrix &sysviol_model, CH_Matrix_Classes::Integer startindex_model, const CH_Matrix_Classes::Matrix &dy, const CH_Matrix_Classes::Real deltatrdual, MinorantBundle &global_bundle, CH_Matrix_Classes::Integer startindex_bundle)
set the model violation for the current system solution for the precomputed rhs on basis of the y and...