SHOGUN  3.2.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
lbfgs.h
Go to the documentation of this file.
1 /*
2  * C library of Limited memory BFGS (L-BFGS).
3  *
4  * Copyright (c) 1990, Jorge Nocedal
5  * Copyright (c) 2007-2010 Naoaki Okazaki
6  * All rights reserved.
7  *
8  * Permission is hereby granted, free of charge, to any person obtaining a copy
9  * of this software and associated documentation files (the "Software"), to deal
10  * in the Software without restriction, including without limitation the rights
11  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12  * copies of the Software, and to permit persons to whom the Software is
13  * furnished to do so, subject to the following conditions:
14  *
15  * The above copyright notice and this permission notice shall be included in
16  * all copies or substantial portions of the Software.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24  * THE SOFTWARE.
25  */
26 
27 #ifndef __LBFGS_H__
28 #define __LBFGS_H__
29 
30 #include <shogun/lib/config.h>
31 
32 #include <shogun/lib/common.h>
33 
34 namespace shogun
35 {
36 
49 enum {
56 
124 };
125 
129 enum {
168 };
169 
175 typedef struct {
184  int m;
185 
195 
203  int past;
204 
216 
226 
233 
240 
249 
258 
265 
276 
288 
297 
312 
326 
336 
337 
356  void *instance,
357  const float64_t *x,
358  float64_t *g,
359  const int n,
360  const float64_t step
361  );
362 
383 typedef int (*lbfgs_progress_t)(
384  void *instance,
385  const float64_t *x,
386  const float64_t *g,
387  const float64_t fx,
388  const float64_t xnorm,
389  const float64_t gnorm,
390  const float64_t step,
391  int n,
392  int k,
393  int ls
394  );
395 
414  void *instance,
415  const float64_t *x,
416  const float64_t *d,
417  const int n,
418  const float64_t step
419  );
420 
421 /*
422 A user must implement a function compatible with ::lbfgs_evaluate_t (evaluation
423 callback) and pass the pointer to the callback function to lbfgs() arguments.
424 Similarly, a user can implement a function compatible with ::lbfgs_progress_t
425 (progress callback) to obtain the current progress (e.g., variables, function
426 value, ||G||, etc) and to cancel the iteration process if necessary.
427 Implementation of a progress callback is optional: a user can pass \c NULL if
428 progress notification is not necessary.
429 
430 In addition, a user must preserve two requirements:
431  - The number of variables must be multiples of 16 (this is not 4).
432  - The memory block of variable array ::x must be aligned to 16.
433 
434 This algorithm terminates an optimization
435 when:
436 
437  ||G|| < \epsilon \cdot \max(1, ||x||) .
438 
439 In this formula, ||.|| denotes the Euclidean norm.
440 */
441 
482 int lbfgs(
483  int n,
484  float64_t *x,
485  float64_t *ptr_fx,
486  lbfgs_evaluate_t proc_evaluate,
487  lbfgs_progress_t proc_progress,
488  void *instance,
489  lbfgs_parameter_t *param,
490  lbfgs_adjust_step_t proc_adjust_step=NULL
491  );
492 
502 
505 } // namespace shogun
506 
507 #endif/*__LBFGS_H__*/

SHOGUN Machine Learning Toolbox - Documentation