1 @c /lbfgs.texi/1.2/Sat Dec 9 06:10:42 2006//
5 * Definições para lbfgs::
8 @node Introdução a lbfgs, Definições para lbfgs, Top, Top
9 @section Introdução a lbfgs
11 @code{lbfgs} é uma implementação do algoritmo[1] L-BFGS (Broyden-Fletcher-Goldfarb-Shanno)
12 para resolver problemas de minimização não limitada através de um algoritmo de memória limitada quasi-Newton (BFGS).
13 Esse algoritmo é chamado de método de memória limitada porque uma aproximação de baixo ranque da
14 inverso da matriz Hessiana é armazenado em lugar da inversa da matriz Hessiana completa.
15 O programa foi escrito origináriamente em Fortran [2] por Jorge Nocedal,
16 incorporando algumas funções originalmente escritas por Jorge J. Moré e David J. Thuente,
17 e traduzidas para Lisp automaticamente através do programa @code{f2cl}.
18 O pacote do Maxima @code{lbfgs} compreende o código traduzido e adicionalmente
19 uma interface de função que gerencia alguns detallhes.
23 [1] D. Liu and J. Nocedal. "On the limited memory BFGS method for large
24 scale optimization". @i{Mathematical Programming B} 45:503--528 (1989)
26 [2] http://netlib.org/opt/lbfgs_um.shar
28 @node Definições para lbfgs, , Introdução a lbfgs, Top
29 @section Definições para lbfgs
31 @deffn {Função} lbfgs (@var{FOM}, @var{X}, @var{X0}, @var{epsilon}, @var{iprint})
33 Encontra uma solução aproximada da minimização não limitada de número de mérito @var{FOM}
34 sobre a lista de variáveis @var{X},
35 começando a partir da estimativa inicial @var{X0},
36 tal que @math{norm grad FOM < epsilon max(1, norm X)}.
38 O algoritmo aplicado é um algoritmo de memória limitada[1] quasi-Newton (BFGS).
39 Esse algoritmo é chamado de método de memória limitada porque uma aproximação de baixo ranque da
40 inverso da matriz Hessiana é armazenado em lugar da inversa da matriz Hessiana completa.
42 @var{iprint} controla as messaens de progresso mostradas através de @code{lbfgs}.
46 @code{@var{iprint}[1]} controla a frequência das mensagens de progresso.
49 Nenhuma mensagem de progresso.
51 Messagens na primeira iteração e na última iteração.
53 Mostra uma mensagem a cada @code{@var{iprint}[1]} iterações.
56 @code{@var{iprint}[2]} controla a quantidade de informações fornecidas pelas mensagens de progresso (verbosidade).
59 Mostra na tela o contador de iterações, o número de avaliações de @var{FOM}, o valor de @var{FOM},
60 a norma do gradiente de @var{FOM}, e o comprimento do salto.
62 O mesmo que @code{@var{iprint}[2] = 0}, adicionando @var{X0} e o gradiente de @var{FOM} avaliado em @var{X0}.
64 O mesmo que @code{@var{iprint}[2] = 1}, adicionando valores de @var{X} a cada iteração.
66 O mesmo que @code{@var{iprint}[2] = 2}, adicionando o gradiente de @var{FOM} a cada iteração.
70 Veja também @code{lbfgs_nfeval_max} e @code{lbfgs_ncorrections}.
74 [1] D. Liu and J. Nocedal. "On the limited memory BFGS method for large
75 scale optimization". @i{Mathematical Programming B} 45:503--528 (1989)
81 @c FOM : '((1/length(X))*sum((F(X[i]) - Y[i])^2, i, 1, length(X)));
82 @c X : [1, 2, 3, 4, 5];
83 @c Y : [0, 0.5, 1, 1.25, 1.5];
84 @c F(x) := A/(1 + exp(-B*(x - C)));
86 @c estimates : lbfgs (FOM, '[A, B, C], [1, 1, 1], 1e-4, [1, 0]);
87 @c plot2d ([F(x), [discrete, X, Y]], [x, -1, 6]), ''estimates;
91 (%o1) /usr/share/maxima/5.10.0cvs/share/lbfgs/lbfgs.mac
92 (%i2) FOM : '((1/length(X))*sum((F(X[i]) - Y[i])^2, i, 1, length(X)));
94 sum((F(X ) - Y ) , i, 1, length(X))
96 (%o2) -----------------------------------
98 (%i3) X : [1, 2, 3, 4, 5];
100 (%i4) Y : [0, 0.5, 1, 1.25, 1.5];
101 (%o4) [0, 0.5, 1, 1.25, 1.5]
102 (%i5) F(x) := A/(1 + exp(-B*(x - C)));
104 (%o5) F(x) := ----------------------
105 1 + exp((- B) (x - C))
108 (%o6) ((----------------- - 1.5) + (----------------- - 1.25)
109 - B (5 - C) - B (4 - C)
112 + (----------------- - 1) + (----------------- - 0.5)
113 - B (3 - C) - B (2 - C)
117 + --------------------)/5
120 (%i7) estimates : lbfgs (FOM, '[A, B, C], [1, 1, 1], 1e-4, [1, 0]);
121 *************************************************
122 N= 3 NUMBER OF CORRECTIONS=25
124 F= 1.348738534246918D-01 GNORM= 2.000215531936760D-01
125 *************************************************
127 I NFN FUNC GNORM STEPLENGTH
129 1 3 1.177820636622582D-01 9.893138394953992D-02 8.554435968992371D-01
130 2 6 2.302653892214013D-02 1.180098521565904D-01 2.100000000000000D+01
131 3 8 1.496348495303005D-02 9.611201567691633D-02 5.257340567840707D-01
132 4 9 7.900460841091139D-03 1.325041647391314D-02 1.000000000000000D+00
133 5 10 7.314495451266917D-03 1.510670810312237D-02 1.000000000000000D+00
134 6 11 6.750147275936680D-03 1.914964958023047D-02 1.000000000000000D+00
135 7 12 5.850716021108205D-03 1.028089194579363D-02 1.000000000000000D+00
136 8 13 5.778664230657791D-03 3.676866074530332D-04 1.000000000000000D+00
137 9 14 5.777818823650782D-03 3.010740179797255D-04 1.000000000000000D+00
139 THE MINIMIZATION TERMINATED WITHOUT DETECTING ERRORS.
141 (%o7) [A = 1.461933911464101, B = 1.601593973254802,
142 C = 2.528933072164854]
143 (%i8) plot2d ([F(x), [discrete, X, Y]], [x, -1, 6]), ''estimates;
149 @defvr {Variãvel} lbfgs_nfeval_max
150 Valor por omissão: 100
154 @defvr {Variãvel} lbfgs_ncorrections
155 Valor por omissão: 25