33#ifndef __H__UG__LIB_DISC__OPERATOR__NON_LINEAR_OPERATOR__LINE_SEARCH__
34#define __H__UG__LIB_DISC__OPERATOR__NON_LINEAR_OPERATOR__LINE_SEARCH__
69template <
typename TVector>
116template <
typename TVector>
160 std::stringstream ss;
207 number norm, norm_old = defect;
208 bool converged =
false;
209 std::vector<number> vRho;
217 <<
" + Iter lambda Defect Rate \n");
228 bool acceptedNewtonUpdate =
m_newtonUpdater->updateSolution(u, 1.0, u, (-1)*lambda,
p);
230 if( ! acceptedNewtonUpdate )
232 UG_LOG(
"Update in Line Search did not work.\n");
233 norm = std::numeric_limits<number>::max();
264 vRho.push_back(norm/norm_old);
269 << k <<
": " << std::setw(11)
270 << std::resetiosflags( ::std::ios::scientific )<<
272 << std::scientific << norm <<
" " << vRho.back() <<
"\n");
275 if(vRho.back() <= 1 -
m_alpha * std::fabs(lambda))
295 number rho_min = vRho.front();
296 for(
size_t i = 1; i < vRho.size(); ++i)
298 if(rho_min > vRho[i])
317 best+1 <<
", Rate = "<< vRho[best] <<
".\n");
326 UG_LOG(
"Update in Line Search kmax did not work.\n");
328 norm = std::numeric_limits<number>::max();
358 UG_LOG(
"ERROR in 'StandardLineSearch::search':"
359 " maximum defect-limit is reached.\n");
398 UG_LOG(
"unable to fix local Newton updates" << std::endl );
Definition smart_pointer.h:108
Definition line_search.h:71
virtual std::string config_string() const =0
returns information about configuration parameters
virtual bool createNewtonUpdater()=0
virtual void set_offset(std::string offset)=0
set string to be printed before each output of line search
virtual ~ILineSearch()
virtual destructor
Definition line_search.h:106
virtual void setNewtonUpdater(SmartPtr< NewtonUpdaterGeneric< TVector > > nU)=0
TVector vector_type
Definition line_search.h:73
virtual bool search(SmartPtr< IOperator< vector_type > > spOp, vector_type &u, vector_type &p, vector_type &d, number defect)=0
describes a mapping X->Y
Definition operator.h:86
Definition newtonUpdaterGeneric.h:25
standard implementation of the line search based on the "sufficient descent"
Definition line_search.h:118
SmartPtr< NewtonUpdaterGeneric< TVector > > m_newtonUpdater
Definition line_search.h:466
void set_reduce_factor(number factor)
sets factor by which line search factor is multiplied in each step
Definition line_search.h:174
std::string m_offset
number of spaces inserted before output
Definition line_search.h:462
number m_lambdaStart
initial step length scaling
Definition line_search.h:441
int m_maxSteps
maximum number of steps to be performed
Definition line_search.h:438
void set_check_all(bool bCheckAll)
sets iff all the max_steps line search steps must be tested even if the sufficient descent is achieve...
Definition line_search.h:183
void set_suff_descent_factor(number factor)
sets the factor controlling the sufficient descent
Definition line_search.h:177
vector_type s
solution in line direction
Definition line_search.h:434
number m_alpha
sufficient descent factor
Definition line_search.h:447
virtual std::string config_string() const
returns information about configuration parameters
Definition line_search.h:158
TVector vector_type
Definition line_search.h:121
number m_maxDefect
maximum allowed defect
Definition line_search.h:450
void set_maximum_defect(number maxDef)
sets maximum allowed norm of the defect (an exception is thrown if this value if exceeded)
Definition line_search.h:186
virtual void set_offset(std::string offset)
set string to be printed before each output of line search
Definition line_search.h:192
void set_maximum_steps(int steps)
sets maximum number of line search steps
Definition line_search.h:168
void set_verbose(bool level)
sets if info should be printed
Definition line_search.h:189
virtual void setNewtonUpdater(SmartPtr< NewtonUpdaterGeneric< TVector > > nU)
Definition line_search.h:410
void set_lambda_start(number start)
sets start factor
Definition line_search.h:171
StandardLineSearch(int maxSteps, number lambdaStart, number lambdaReduce, bool bAcceptBest)
constructor
Definition line_search.h:136
StandardLineSearch()
default constructor (setting default values)
Definition line_search.h:125
void set_accept_best(bool bAcceptBest)
sets iff after max_steps the best try is used
Definition line_search.h:180
bool m_bAcceptBest
accept best
Definition line_search.h:456
virtual bool search(SmartPtr< IOperator< vector_type > > spOp, vector_type &u, vector_type &p, vector_type &d, number defect)
Definition line_search.h:195
bool m_bCheckAll
check all
Definition line_search.h:459
bool m_verbose
verbosity level
Definition line_search.h:453
StandardLineSearch(int maxSteps, number lambdaStart, number lambdaReduce, bool bAcceptBest, bool bCheckAll)
constructor
Definition line_search.h:147
number m_lambdaReduce
reduction factor for the step length
Definition line_search.h:444
virtual bool createNewtonUpdater()
Definition line_search.h:415
const NullSmartPtr SPNULL
The equivalent to NULL for smart pointers.
Definition smart_pointer.h:90
#define UG_LOG(msg)
Definition log.h:367
double number
Definition types.h:124
void VecScaleAdd(vector_t &vOut, typename vector_t::value_type s1, const vector_t &v1, typename vector_t::value_type s2, const vector_t &v2)
Scales two Vectors, adds them and returns the sum in a third vector.
Definition math_vector_functions_common_impl.hpp:265
#define PROFILE_BEGIN_GROUP(name, groups)
Definition profiler.h:255