NDOSolver / FiOracle
Interfaces and Solvers for NonDifferentiable Optimization
Loading...
Searching...
No Matches
Stepsize.h
Go to the documentation of this file.
1/*--------------------------------------------------------------------------*/
2/*--------------------------- File Stepsize.h ------------------------------*/
3/*--------------------------------------------------------------------------*/
19/*--------------------------------------------------------------------------*/
20/*----------------------------- DEFINITIONS --------------------------------*/
21/*--------------------------------------------------------------------------*/
22
23#ifndef __Stepsize
24 #define __Stepsize /* self-identification: #endif at the end of the file */
25
26/*--------------------------------------------------------------------------*/
27/*------------------------------ INCLUDES ----------------------------------*/
28/*--------------------------------------------------------------------------*/
29
30#include "SubGrad.h"
31#include "OPTvect.h"
32
33#include <algorithm>
34
35/*--------------------------------------------------------------------------*/
36/*----------------------------- NAMESPACE ----------------------------------*/
37/*--------------------------------------------------------------------------*/
38
39namespace NDO_di_unipi_it
40{
41
42 class SubGrad; // forward declaration of class SubGrad
43
44/*--------------------------------------------------------------------------*/
45/*-------------------------- CLASS Stepsize --------------------------------*/
46/*--------------------------------------------------------------------------*/
47/*--------------------------- GENERAL NOTES --------------------------------*/
48/*--------------------------------------------------------------------------*/
63{
64
65/*--------------------------------------------------------------------------*/
66/*----------------------- PUBLIC PART OF THE CLASS -------------------------*/
67/*--------------------------------------------------------------------------*/
68
69 public:
70
71/*--------------------------------------------------------------------------*/
72/*--------------------- PUBLIC METHODS OF THE CLASS ------------------------*/
73/*--------------------------------------------------------------------------*/
74/*---------------------------- CONSTRUCTOR ---------------------------------*/
75/*--------------------------------------------------------------------------*/
100 Stepsize( SubGrad *slvr , istream *iStrm = 0 )
101 {
102 if( ! slvr )
103 throw NDOException("Stepsize::Stepsize: no subgradient solver ");
104 Solver = slvr;
105
106 if( iStrm )
107 DfltdSfInpt( iStrm , LpsFct , HpNum( 1 ) );
108
109 STPLog = 0;
110 STPLLvl = 0;
111
112 } // end( Stepsize::Stepsize )
113
115/*-------------------------- OTHER INITIALIZATIONS -------------------------*/
116/*--------------------------------------------------------------------------*/
126 virtual void SetSTPLog( std::ostream *outs = 0 , const char lvl = 0 )
127 {
128 if( ( STPLog = outs ) )
129 STPLLvl = lvl;
130 else
131 STPLLvl = 0;
132 }
133
134/*--------------------------------------------------------------------------*/
137 virtual void Format( void )
138 {
140 FiLev = - Inf< HpNum >();
141 }
142
144/*-------------------- METHODS FOR STEPSIZE COMPUTATION --------------------*/
145/*--------------------------------------------------------------------------*/
159 virtual void NewStep( void ) = 0;
160
161/*--------------------------------------------------------------------------*/
166 virtual bool NeedsdkM1Gk( void ) { return( false ); }
167
169/*---------------------- METHODS FOR READING RESULTS -----------------------*/
170/*--------------------------------------------------------------------------*/
197 virtual HpNum GetStepsize( bool StepIsIncr = false )
198 {
199 HpNum denomin, step;
200 const HpNum STEpZro = 1e-8;
201
202 if( StepIsIncr ) {
203 HpNum LipCns = GetOracle()->GetGlobalLipschitz();
204 denomin = LipCns * LipCns * HpNum( LpsFct * GetNItIcr() );
205 }
206 else
207 denomin = GetDNorm();
208
209 if( denomin <= ( STEpZro * std::max( ABS( ReadFiBar() ) , HpNum(1) ) ) )
210 step = 1;
211 else {
212 HpNum Beta_ = Beta;
213 if( Beta_ >= std::min( 2.0 , MaxBeta ) )
214 Beta_ = std::min( 2.0 - STEpZro , MaxBeta );
215 step = Beta_ * ( ReadFiBar() - FiLev ) / denomin;
216 }
217
218 return( step );
219
220 } // end( GetStepsize )
221
222/*--------------------------------------------------------------------------*/
229 virtual HpNum GetLev( void ) { return( FiLev ); }
230
231/*--------------------------------------------------------------------------*/
238 virtual HpNum GetBeta( void ) { return( Beta ); }
239
241/*------------- METHODS FOR ADDING / REMOVING / CHANGING DATA --------------*/
242/*--------------------------------------------------------------------------*/
253 virtual void SetMaxBeta( const HpNum alpha )
254 {
255 MaxBeta = alpha;
256 }
257
259/*------------------------------ DESTRUCTOR --------------------------------*/
260/*--------------------------------------------------------------------------*/
264 virtual ~Stepsize() {}
265
267/*---------------------- PROTECTED PART OF THE CLASS -----------------------*/
268/*--------------------------------------------------------------------------*/
269
270 protected:
271
272/*--------------------------------------------------------------------------*/
273/*-------------------------- PROTECTED METHODS -----------------------------*/
274/*--------------------------------------------------------------------------*/
278 virtual bool UpdateTargetLevel( void ) { return( false ); }
279
280/*--------------------------------------------------------------------------*/
290/*--------------------------------------------------------------------------*/
294
295/*--------------------------------------------------------------------------*/
300
301/*--------------------------------------------------------------------------*/
305
306/*--------------------------------------------------------------------------*/
310
311/*--------------------------------------------------------------------------*/
314 HpNum GetdGk( void );
315
316/*--------------------------------------------------------------------------*/
320
321/*--------------------------------------------------------------------------*/
326
327/*--------------------------------------------------------------------------*/
331
332/*--------------------------------------------------------------------------*/
336
338/*----------------------- PROTECTED DATA STRUCTURES -----------------------*/
339/*--------------------------------------------------------------------------*/
340
342 std::ostream *STPLog;
343 char STPLLvl;
344
348
350
351/*--------------------------------------------------------------------------*/
352
353 }; // end( class Stepsize )
354
356/*--------------------------------------------------------------------------*/
357/*--------------------------------------------------------------------------*/
358
359}; // end( namespace NDO_di_unipi_it )
360
361/*--------------------------------------------------------------------------*/
362/*--------------------------------------------------------------------------*/
363
364#endif /* Stepsize.h included */
365
366/*--------------------------------------------------------------------------*/
367/*------------------------ End File Stepsize.h -----------------------------*/
368/*--------------------------------------------------------------------------*/
Definition FiOracle.h:231
virtual HpNum GetGlobalLipschitz(cIndex wFi=Inf< Index >())
Definition FiOracle.h:778
Definition FiOracle.h:66
Definition Stepsize.h:63
virtual HpNum GetStepsize(bool StepIsIncr=false)
Definition Stepsize.h:197
std::ostream * STPLog
the output stream object
Definition Stepsize.h:342
virtual void SetSTPLog(std::ostream *outs=0, const char lvl=0)
Definition Stepsize.h:126
HpNum Beta
beta factor
Definition Stepsize.h:346
virtual void NewStep(void)=0
char STPLLvl
the "level of verbosity"
Definition Stepsize.h:343
HpNum LpsFct
scaling factor
Definition Stepsize.h:349
Stepsize(SubGrad *slvr, istream *iStrm=0)
Definition Stepsize.h:100
virtual bool UpdateTargetLevel(void)
Definition Stepsize.h:278
virtual bool NeedsdkM1Gk(void)
Definition Stepsize.h:166
SubGrad * Solver
(pointer to) the SubGrad solver
Definition Stepsize.h:341
HpNum MaxBeta
maximum value for beta factor
Definition Stepsize.h:347
HpNum FiLev
the target level
Definition Stepsize.h:345
virtual void Format(void)
Definition Stepsize.h:137
virtual void SetMaxBeta(const HpNum alpha)
Definition Stepsize.h:253
virtual HpNum GetBeta(void)
Definition Stepsize.h:238
FiOracle * GetOracle(void)
virtual HpNum GetLev(void)
Definition Stepsize.h:229
Definition SubGrad.h:148
double HpNum
"finer" floating point numbers
Definition OPTtypes.h:98
unsigned int Index
Index in a vector ( >= 0 )
Definition OPTtypes.h:60
static constexpr T Inf(void) noexcept
Inf< T >() = infinity value for T.
Definition OPTUtils.h:357
void DfltdSfInpt(istream *iStrm, T &Param, const T Dflt, const char cmntc='#')
Definition OPTUtils.h:392
Definition Bundle.h:68