IMP  2.2.1
The Integrative Modeling Platform
QuasiNewton.h
Go to the documentation of this file.
1 /**
2  * \file IMP/gsl/QuasiNewton.h
3  * \brief A GSL-based Quasi-Newton optimizer
4  *
5  * Copyright 2007-2014 IMP Inventors. All rights reserved.
6  */
7 
8 #ifndef IMPGSL_QUASI_NEWTON_H
9 #define IMPGSL_QUASI_NEWTON_H
10 
11 #include <IMP/gsl/gsl_config.h>
12 
13 #include "GSLOptimizer.h"
14 
15 IMPGSL_BEGIN_NAMESPACE
16 
17 //! A quasi-Newton optimizer taken from GSL
18 /** \untested{QuasiNewton}
19  */
20 class IMPGSLEXPORT QuasiNewton : public GSLOptimizer {
21  double initial_step_, line_step_, min_gradient_;
22 
23  public:
25 
26  // default 0.01
27  void set_initial_step(double length) {
28  IMP_USAGE_CHECK(length > 0 && length <= 4,
29  "The initial step is relative to the rescaled attributes"
30  << " and so should not be much larger than 1.");
31  initial_step_ = length;
32  }
33 
34  // default 0.01
35  void set_line_step(double d) {
36  IMP_USAGE_CHECK(d > 0 && d <= 4,
37  "The minimum size is relative to the rescaled attributes"
38  << " and so should not be much larger than 1 "
39  << "(and must be non-zero).");
40  line_step_ = d;
41  }
42 
43  // default 0.001
44  void set_minimum_gradient(double d) {
45  IMP_USAGE_CHECK(d > 0 && d <= 1, "The minimum gradient is relative.");
46  min_gradient_ = d;
47  }
48  virtual Float do_optimize(unsigned int max_steps) IMP_OVERRIDE;
50 };
51 
52 IMPGSL_END_NAMESPACE
53 
54 #endif /* IMPGSL_QUASI_NEWTON_H */
A base class for GSL-based optimizers.
Definition: GSLOptimizer.h:22
#define IMP_USAGE_CHECK(expr, message)
A runtime test for incorrect usage of a class or method.
#define IMP_OBJECT_METHODS(Name)
Define the basic things needed by any Object.
A quasi-Newton optimizer taken from GSL.
Definition: QuasiNewton.h:20
double Float
Basic floating-point value (could be float, double...)
Definition: base/types.h:20
A base class for GSL-based optimizers.
Class for storing model, its restraints, constraints, and particles.
Definition: kernel/Model.h:72