Geogram Version 1.9.6-rc
A programming library of geometric algorithms
Loading...
Searching...
No Matches
optimizer.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2000-2022 Inria
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * * Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution.
13 * * Neither the name of the ALICE Project-Team nor the names of its
14 * contributors may be used to endorse or promote products derived from this
15 * software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 * POSSIBILITY OF SUCH DAMAGE.
28 *
29 * Contact: Bruno Levy
30 *
31 * https://www.inria.fr/fr/bruno-levy
32 *
33 * Inria,
34 * Domaine de Voluceau,
35 * 78150 Le Chesnay - Rocquencourt
36 * FRANCE
37 *
38 */
39
40#ifndef GEOGRAM_NUMERICS_OPTIMIZER
41#define GEOGRAM_NUMERICS_OPTIMIZER
42
49
50class HESSIAN_MATRIX;
51
58namespace GEO {
59
77 class GEOGRAM_API Optimizer : public Counted {
78 public:
84 typedef void (* funcgrad_callback)(
85 index_t N, double* x, double& f, double* g
86 );
87
92 typedef void (* newiteration_callback)(
93 index_t N, const double* x, double f, const double* g, double gnorm
94 );
95
101 typedef void (* evalhessian_callback)(
102 index_t N, double* x, double& f, double* g, HESSIAN_MATRIX& hessian
103 );
104
121 static Optimizer* create(const std::string& name = "default");
122
127 virtual void optimize(double* x) = 0;
128
132 void set_N(index_t N) {
133 n_ = N;
134 }
135
139 index_t get_N() const {
140 return n_;
141 }
142
147 void set_M(index_t M) {
148 m_ = M;
149 }
150
154 index_t get_M() const {
155 return m_;
156 }
157
161 void set_max_iter(index_t maxiter) {
162 max_iter_ = maxiter;
163 }
164
169 return max_iter_;
170 }
171
176 void set_funcgrad_callback(funcgrad_callback fp) {
177 funcgrad_callback_ = fp;
178 }
179
184 void set_newiteration_callback(newiteration_callback fp) {
185 newiteration_callback_ = fp;
186 }
187
195 void set_evalhessian_callback(evalhessian_callback fp) {
196 evalhessian_callback_ = fp;
197 }
198
203 void set_epsg(double eg) {
204 epsg_ = eg;
205 }
206
211 void set_epsf(double ef) {
212 epsf_ = ef;
213 }
214
219 void set_epsx(double ex) {
220 epsx_ = ex;
221 }
222
226 void set_verbose(bool verb) {
227 verbose_ = verb;
228 }
229
230 protected:
236
240 ~Optimizer() override;
241
242 protected:
252
253 funcgrad_callback funcgrad_callback_;
254 newiteration_callback newiteration_callback_;
255 evalhessian_callback evalhessian_callback_;
256
258 double epsg_, epsf_, epsx_;
259
260 bool verbose_;
261 };
262
268
278
284#define geo_register_Optimizer_creator(type, name) \
285 geo_register_creator(GEO::OptimizerFactory, type, name)
286}
287
288#endif
Assertion checking mechanism.
Base class for reference-counted objects.
Definition counted.h:71
Factory for types without constructor arguments.
Definition factory.h:292
Optimizer minimizes a multivariate function.
Definition optimizer.h:77
void set_max_iter(index_t maxiter)
Defines the maximum number of iterations.
Definition optimizer.h:161
~Optimizer() override
Optimizer destructor.
void set_M(index_t M)
Defines the inner number of iterations.
Definition optimizer.h:147
void set_epsg(double eg)
Defines the stopping criterion in terms of gradient magnitude.
Definition optimizer.h:203
index_t get_N() const
Returns the number of variables.
Definition optimizer.h:139
Optimizer()
Optimizer constructor.
void set_evalhessian_callback(evalhessian_callback fp)
Defines the callback that evaluates the Hessian of function to be minimized (second order derivatives...
Definition optimizer.h:195
index_t get_max_iter() const
Returns the maximum number of iterations.
Definition optimizer.h:168
Factory0< Optimizer > OptimizerFactory
Optimizer Factory.
Definition optimizer.h:277
void set_epsx(double ex)
Defines the stopping criterion in terms of variation of x.
Definition optimizer.h:219
SmartPointer< Optimizer > Optimizer_var
Smart pointer that contains an Optimizer object.
Definition optimizer.h:267
void set_verbose(bool verb)
Enables or disables verbose logs.
Definition optimizer.h:226
index_t get_M() const
Returns the inner number of iterations.
Definition optimizer.h:154
index_t max_iter_
Definition optimizer.h:251
void set_funcgrad_callback(funcgrad_callback fp)
Defines the callback that evaluates the function to be minimized and its gradient.
Definition optimizer.h:176
virtual void optimize(double *x)=0
Minimizes a function, starting from initial value x.
void set_epsf(double ef)
Defines the stopping criterion in terms of function value.
Definition optimizer.h:211
static Optimizer * create(const std::string &name="default")
Creates an Optimizer.
void set_N(index_t N)
Defines the number of variables.
Definition optimizer.h:132
void set_newiteration_callback(newiteration_callback fp)
Defines a callback that will be called at each iteration.
Definition optimizer.h:184
A smart pointer with reference-counted copy semantics.
Base class of reference-counted objects, to be used with smart pointers.
Generic factory mechanism.
Common include file, providing basic definitions. Should be included before anything else by all head...
Global Vorpaline namespace.
Definition basic.h:55
geo_index_t index_t
The type for storing and manipulating indices.
Definition numeric.h:329
Types and functions for numbers manipulation.
Pointers with automatic reference counting.