aGrUM  0.20.3
a C++ library for (probabilistic) graphical models
IApproximationSchemeConfiguration.h
Go to the documentation of this file.
1 /**
2  *
3  * Copyright (c) 2005-2021 by Pierre-Henri WUILLEMIN(@LIP6) & Christophe GONZALES(@AMU)
4  * info_at_agrum_dot_org
5  *
6  * This library is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this library. If not, see <http://www.gnu.org/licenses/>.
18  *
19  */
20 
21 
22 /**
23  * @file
24  * @brief This file contains getters and setters defintion for
25  * ApproximationSchem settings
26  *
27  * @see ApproximationScheme
28  *
29  * @author Pierre-Henri WUILLEMIN(@LIP6)
30  */
31 #ifndef GUM_APPROXIMATION_SCHEME_CONFIGURATION_H
32 #define GUM_APPROXIMATION_SCHEME_CONFIGURATION_H
33 
34 #include <agrum/agrum.h>
35 #include <agrum/tools/core/math/math_utils.h>
36 #include <agrum/tools/core/signal/signaler.h>
37 #include <agrum/tools/core/timer.h>
38 
39 namespace gum {
40 
41  /**
42  * @class IApproximationSchemeConfiguration
43  * @brief Approximation Scheme.
44  * @ingroup approximationpolicy_group
45  *
46  * @warning Doxygen does not like spanning command on multiple line, so we
47  * could not configure it with the correct include directive. Use the
48  * following code snippet to include this file.
49  * @code
50  * #include <agrum/tools/core/approximations/IApproximationSchemeConfiguration.h>
51  * @endcode
52  *
53  * An interface for configuration of approximation scheme.
54  */
56  public:
57  /// Progression, error and time.
58  Signaler3< Size, double, double > onProgress;
59 
60  /// Criteria messageApproximationScheme
62 
63  /// The different state of an approximation scheme.
64  enum class ApproximationSchemeSTATE : char
65  {
66  Undefined,
67  Continue,
68  Epsilon,
69  Rate,
70  Limit,
71  TimeLimit,
72  Stopped
73  };
74 
75  // ======================================================================
76  /// @name Constructor and destructor
77  // ======================================================================
78  /// @{
79  /**
80  * @brief Class constructors.
81  */
83 
84  /**
85  * @brief Class destructor.
86  */
88  /// @}
89 
90  // ======================================================================
91  /// @name Getters and setters
92  // ======================================================================
93  /// @{
94 
95  /**
96  * @brief Returns the approximation scheme message.
97  * @return Returns the approximation scheme message.
98  */
100 
101  /**
102  * @brief Given that we approximate f(t), stopping criterion on
103  * |f(t+1)-f(t)|.
104  *
105  * If the criterion was disabled it will be enabled.
106  *
107  * @param eps The new epsilon value.
108  * @throw OutOfLowerBound Raised if eps < 0.
109  */
110  virtual void setEpsilon(double eps) = 0;
111 
112  /**
113  * @brief Returns the value of epsilon.
114  * @return Returns the value of epsilon.
115  */
116  virtual double epsilon() const = 0;
117 
118  /**
119  * @brief Disable stopping criterion on epsilon.
120  */
121  virtual void disableEpsilon() = 0;
122 
123  /**
124  * @brief Enable stopping criterion on epsilon.
125  */
126  virtual void enableEpsilon() = 0;
127 
128  /**
129  * @brief Returns true if stopping criterion on epsilon is enabled, false
130  * otherwise.
131  * @return Returns true if stopping criterion on epsilon is enabled, false
132  * otherwise.
133  */
134  virtual bool isEnabledEpsilon() const = 0;
135 
136  /**
137  * @brief Given that we approximate f(t), stopping criterion on
138  * d/dt(|f(t+1)-f(t)|).
139  *
140  * If the criterion was disabled it will be enabled
141  *
142  * @param rate The minimal epsilon rate.
143  * @throw OutOfLowerBound if rate<0
144  */
145  virtual void setMinEpsilonRate(double rate) = 0;
146 
147  /**
148  * @brief Returns the value of the minimal epsilon rate.
149  * @return Returns the value of the minimal epsilon rate.
150  */
151  virtual double minEpsilonRate() const = 0;
152 
153  /**
154  * @brief Disable stopping criterion on epsilon rate.
155  */
156  virtual void disableMinEpsilonRate() = 0;
157 
158  /**
159  * @brief Enable stopping criterion on epsilon rate.
160  */
161  virtual void enableMinEpsilonRate() = 0;
162 
163  /**
164  * @brief Returns true if stopping criterion on epsilon rate is enabled,
165  * false otherwise.
166  * @return Returns true if stopping criterion on epsilon rate is enabled,
167  * false otherwise.
168  */
169  virtual bool isEnabledMinEpsilonRate() const = 0;
170 
171  /**
172  * @brief Stopping criterion on number of iterations.
173  *
174  * If the criterion was disabled it will be enabled.
175  *
176  * @param max The maximum number of iterations.
177  * @throw OutOfLowerBound Raised if max <= 1.
178  */
179  virtual void setMaxIter(Size max) = 0;
180 
181  /**
182  * @brief Returns the criterion on number of iterations.
183  * @return Returns the criterion on number of iterations.
184  */
185  virtual Size maxIter() const = 0;
186 
187  /**
188  * @brief Disable stopping criterion on max iterations.
189  */
190  virtual void disableMaxIter() = 0;
191 
192  /**
193  * @brief Enable stopping criterion on max iterations.
194  */
195  virtual void enableMaxIter() = 0;
196 
197  /**
198  * @brief Returns true if stopping criterion on max iterations is enabled,
199  * false otherwise.
200  * @return Returns true if stopping criterion on max iterations is enabled,
201  * false otherwise.
202  */
203  virtual bool isEnabledMaxIter() const = 0;
204 
205  /**
206  * @brief Stopping criterion on timeout.
207  *
208  * If the criterion was disabled it will be enabled.
209  *
210  * @param timeout The timeout value in seconds.
211  * @throw OutOfLowerBound Raised if timeout <= 0.0.
212  */
213  virtual void setMaxTime(double timeout) = 0;
214 
215  /**
216  * @brief Returns the timeout (in seconds).
217  * @return Returns the timeout (in seconds).
218  */
219  virtual double maxTime() const = 0;
220 
221  /**
222  * @brief Returns the current running time in second.
223  * @return Returns the current running time in second.
224  */
225  virtual double currentTime() const = 0;
226 
227  /**
228  * @brief Disable stopping criterion on timeout.
229  * @return Disable stopping criterion on timeout.
230  */
231  virtual void disableMaxTime() = 0;
232 
233  /**
234  * @brief Enable stopping criterion on timeout.
235  */
236  virtual void enableMaxTime() = 0;
237 
238  /**
239  * @brief Returns true if stopping criterion on timeout is enabled, false
240  * otherwise.
241  * @return Returns true if stopping criterion on timeout is enabled, false
242  * otherwise.
243  */
244  virtual bool isEnabledMaxTime() const = 0;
245 
246  /**
247  * @brief How many samples between two stopping is enable.
248  * @param p The new period value.
249  * @throw OutOfLowerBound Raised if p < 1.
250  */
251  virtual void setPeriodSize(Size p) = 0;
252 
253  /**
254  * @brief Returns the period size.
255  * @return Returns the period size.
256  */
257  virtual Size periodSize() const = 0;
258 
259  /**
260  * @brief Set the verbosity on (true) or off (false).
261  * @param v If true, then verbosity is turned on.
262  */
263  virtual void setVerbosity(bool v) = 0;
264 
265  /**
266  * @brief Returns true if verbosity is enabled.
267  * @return Returns true if verbosity is enabled.
268  */
269  virtual bool verbosity() const = 0;
270 
271  /**
272  * @brief Returns the approximation scheme state.
273  * @return Returns the approximation scheme state.
274  */
276 
277  /**
278  * @brief Returns the number of iterations.
279  * @return Returns the number of iterations.
280  * @throw OperationNotAllowed Raised if the scheme did not perform.
281  */
282  virtual Size nbrIterations() const = 0;
283 
284  /**
285  * @brief Returns the scheme history.
286  * @return Returns the scheme history.
287  * @throw OperationNotAllowed Raised if the scheme did not performed or
288  * if verbosity is set to false.
289  */
290  virtual const std::vector< double >& history() const = 0;
291  };
292 } // namespace gum
293 
294 #ifndef GUM_NO_INLINE
295 # include <agrum/tools/core/approximations/IApproximationSchemeConfiguration_inl.h>
296 #endif
297 
298 #endif // GUM_APPROXIMATION_SCHEME_CONFIGURATION_H
virtual double epsilon() const =0
Returns the value of epsilon.
virtual void setMaxTime(double timeout)=0
Stopping criterion on timeout.
virtual bool isEnabledMaxTime() const =0
Returns true if stopping criterion on timeout is enabled, false otherwise.
Signaler3< Size, double, double > onProgress
Progression, error and time.
virtual void disableMaxTime()=0
Disable stopping criterion on timeout.
virtual void enableEpsilon()=0
Enable stopping criterion on epsilon.
INLINE void emplace(Args &&... args)
Definition: set_tpl.h:643
virtual bool isEnabledEpsilon() const =0
Returns true if stopping criterion on epsilon is enabled, false otherwise.
virtual bool isEnabledMinEpsilonRate() const =0
Returns true if stopping criterion on epsilon rate is enabled, false otherwise.
virtual ApproximationSchemeSTATE stateApproximationScheme() const =0
Returns the approximation scheme state.
virtual Size nbrIterations() const =0
Returns the number of iterations.
virtual Size periodSize() const =0
Returns the period size.
virtual void disableMinEpsilonRate()=0
Disable stopping criterion on epsilon rate.
virtual const std::vector< double > & history() const =0
Returns the scheme history.
virtual void enableMaxTime()=0
Enable stopping criterion on timeout.
Signaler1< std::string > onStop
Criteria messageApproximationScheme.
virtual double maxTime() const =0
Returns the timeout (in seconds).
virtual void setMaxIter(Size max)=0
Stopping criterion on number of iterations.
virtual void setVerbosity(bool v)=0
Set the verbosity on (true) or off (false).
virtual Size maxIter() const =0
Returns the criterion on number of iterations.
virtual double currentTime() const =0
Returns the current running time in second.
std::string messageApproximationScheme() const
Returns the approximation scheme message.
virtual void setEpsilon(double eps)=0
Given that we approximate f(t), stopping criterion on |f(t+1)-f(t)|.
virtual double minEpsilonRate() const =0
Returns the value of the minimal epsilon rate.
virtual void setMinEpsilonRate(double rate)=0
Given that we approximate f(t), stopping criterion on d/dt(|f(t+1)-f(t)|).
virtual bool isEnabledMaxIter() const =0
Returns true if stopping criterion on max iterations is enabled, false otherwise. ...
virtual void disableEpsilon()=0
Disable stopping criterion on epsilon.
ApproximationSchemeSTATE
The different state of an approximation scheme.
virtual void setPeriodSize(Size p)=0
How many samples between two stopping is enable.
virtual void disableMaxIter()=0
Disable stopping criterion on max iterations.
virtual void enableMinEpsilonRate()=0
Enable stopping criterion on epsilon rate.
virtual void enableMaxIter()=0
Enable stopping criterion on max iterations.
virtual bool verbosity() const =0
Returns true if verbosity is enabled.