SIMLIB/C++  3.07
optimize.h
Go to the documentation of this file.
1 /////////////////////////////////////////////////////////////////////////////
2 //! \file optimize.h Basic optimization framework + methods
3 //
4 // Copyright (c) 2000-2004 Petr Peringer
5 //
6 // This library is licensed under GNU Library GPL. See the file COPYING.
7 //
8 
9 // EXPERIMENTAL
10 // parameters for optimization purposes
11 
12 #ifndef __SIMLIB_OPTIMIZE_H
13 #define __SIMLIB_OPTIMIZE_H
14 
15 namespace simlib3 {
16 
17 class Param
18 {
19  const char *name; // name of parameter c-string
20  double min;
21  double max;
22  double value;
23  void limit(double &x)
24  {
25  if (x > max)
26  x = max;
27  if (x < min)
28  x = min;
29  }
30  public:
31  Param():
32  name(0), min(0), max(0), value(min)
33  { } // for arrays
34  Param (const char *n, double a, double b):
35  name(n), min(a), max(b), value(min)
36  { }
37  void Print() const;
38  Param & operator = (double x) {
39  value = x;
40  limit(value);
41  return *this;
42  }
43  double Value() const { return value; }
44  operator double () const { return value; }
45  double Min() const { return min; }
46  double Max() const { return max; }
47  double Range() const { return max - min; }
48  const char *Name() const { return name; }
49  // TODO: [defaults are O.K.]
50  // Param & operator = (const Param &x);
51  // Param(const Param &x);
52 };
53 
54 ////////////////////////////////////////////////////////////////////////////
55 // parameter vector
56 //
58 {
59  int n;
60  Param *p;
61  int search(const char *name);
62  public:
63 //TODO: ParameterVector(): n(0), p(0) {}
64 //TODO: void Add(const Param&p) { add to the end } // pp.Add(Param("x",1,5));
65  ParameterVector(int sz, Param * a); // initialize by array
68  ~ParameterVector();
69  Param & operator[] (int i) { return p[i]; }
70  const Param & operator[] (int i) const { return p[i]; }
71  int size() const { return n; }
72  void PrintValues() const;
73  void Print() const;
74  // Prototypes !!!###
75  Param & operator[](const char *name) {
76  return p[search(name)];
77  }
78  friend bool operator == (const ParameterVector & p1,
79  const ParameterVector & p2);
80 };
81 
82 // Type of function to optimize
83 typedef double (*opt_function_t) (const ParameterVector & p);
84 
85 // Predefined optimization methods
87  double rho, double epsilon, int itermax);
88 
89 double Optimize_simann(opt_function_t f, ParameterVector & p, int MAXT);
90 
92  double MAXITER);
93 
94 }
95 
96 #endif // __SIMLIB_OPTIMIZE_H
double Optimize_gradient(opt_function_t f, ParameterVector &p, double MAXITER)
double Max() const
Definition: optimize.h:46
const char * name
Definition: optimize.h:19
double Optimize_simann(double(*f)(const ParameterVector &p), ParameterVector &p, int MAXT)
Definition: opt-simann.cc:52
Param(const char *n, double a, double b)
Definition: optimize.h:34
double min
Definition: optimize.h:20
double Optimize_hooke(opt_function_t f, ParameterVector &parameter, double rho, double epsilon, int itermax)
Definition: opt-hooke.cc:57
const char * Name() const
Definition: optimize.h:48
Implementation of class CalendarList interface is static - using global functions in SQS namespace...
Definition: algloop.cc:32
double Range() const
Definition: optimize.h:47
void Print() const
Definition: opt-param.cc:21
double value
Definition: optimize.h:22
bool operator==(const ParameterVector &p1, const ParameterVector &p2)
Definition: opt-param.cc:86
double(* opt_function_t)(const ParameterVector &p)
Definition: optimize.h:83
double max
Definition: optimize.h:21
double Min() const
Definition: optimize.h:45
Param & operator[](const char *name)
Definition: optimize.h:75
Param & operator=(double x)
Definition: optimize.h:38
double Value() const
Definition: optimize.h:43
void limit(double &x)
Definition: optimize.h:23