]> Top Introdu{No value for `cedilha'}ão a lbfgs lbfgs é uma implementa{No value for `cedilha'}ão do algorítmo[1] L-BFGS (Broyden-Fletcher-Goldfarb-Shanno) para resolver problemas de minimiza{No value for `cedilha'}ão não limitada através de um algorítmo de memória limitada quasi-Newton (BFGS). Esse algorítmo é chamado de método de memória limitada porque uma aproxima{No value for `cedilha'}ão de baixo ranque da inverso da matriz Hessiana é armazenado em lugar da inversa da matriz Hessiana completa. O programa foi escrito origináriamente em Fortran [2] por Jorge Nocedal, incorporando algumas fun{No value for `cedilha'}ões originalmente escritas por Jorge J. Moré e David J. Thuente, e traduzidas para Lisp automaticamente através do programa f2cl. O pacote do Maxima lbfgs compreende o código traduzido e adicionalmente uma interface de fun{No value for `cedilha'}ão que gerencia alguns detallhes. Referências: [1] D. Liu and J. Nocedal. "On the limited memory BFGS method for large scale optimization". Mathematical Programming B 45:503–528 (1989) [2] http://netlib.org/opt/lbfgs_um.shar Defini{No value for `cedilha'}ões para lbfgs lbfgs — Fun{No value for `cedilha'}ão: lbfgs ( FOM , X , X0 , epsilon , iprint ) Encontra uma solu{No value for `cedilha'}ão aproximada da minimiza{No value for `cedilha'}ão não limitada de número de mérito FOMsobre a lista de variáveis X,come{No value for `cedilha'}ando a partir da estimativa inicial X0,tal que norm grad FOM < epsilon max(1, norm X).O algorítmo aplicado é um algorítmo de memória limitada[1] quasi-Newton (BFGS).Esse algorítmo é chamado de método de memória limitada porque uma aproxima{No value for `cedilha'}ão de baixo ranque dainverso da matriz Hessiana é armazenado em lugar da inversa da matriz Hessiana completa.iprint controla as messaens de progresso mostradas através de lbfgs. iprint[1] iprint[1] controla a freqüência das mensagens de progresso. iprint[1] < 0 Nenhuma mensagem de progresso. iprint[1] = 0 Messagens na primeira itera{No value for `cedilha'}ão e na última itera{No value for `cedilha'}ão. iprint[1] > 0 Mostra uma mensagem a cada iprint[1] itera{No value for `cedilha'}ões. iprint[2] iprint[2] controla a quantidade de informa{No value for `cedilha'}ões fornecidas pelas mensagens de progresso (verbosidade). iprint[2] = 0 Mostra na tela o contador de itera{No value for `cedilha'}ões, o número de avalia{No value for `cedilha'}ões de FOM, o valor de FOM,a norma do gradiente de FOM, e o comprimento do salto. iprint[2] = 1 O mesmo que iprint[2] = 0, adicionando X0 e o gradiente de FOM avaliado em X0. iprint[2] = 2 O mesmo que iprint[2] = 1, adicionando valores de X a cada itera{No value for `cedilha'}ão. iprint[2] = 3 O mesmo que iprint[2] = 2, adicionando o gradiente de FOM a cada itera{No value for `cedilha'}ão. Veja também lbfgs_nfeval_max e lbfgs_ncorrections.Referências:[1] D. Liu and J. Nocedal. "On the limited memory BFGS method for largescale optimization". Mathematical Programming B 45:503–528 (1989)Exemplo: (%i1) load (lbfgs); (%o1) /usr/share/maxima/5.10.0cvs/share/lbfgs/lbfgs.mac (%i2) FOM : '((1/length(X))*sum((F(X[i]) - Y[i])^2, i, 1, length(X))); 2 sum((F(X ) - Y ) , i, 1, length(X)) i i (%o2) ----------------------------------- length(X) (%i3) X : [1, 2, 3, 4, 5]; (%o3) [1, 2, 3, 4, 5] (%i4) Y : [0, 0.5, 1, 1.25, 1.5]; (%o4) [0, 0.5, 1, 1.25, 1.5] (%i5) F(x) := A/(1 + exp(-B*(x - C))); A (%o5) F(x) := ---------------------- 1 + exp((- B) (x - C)) (%i6) ''FOM; A 2 A 2 (%o6) ((----------------- - 1.5) + (----------------- - 1.25) - B (5 - C) - B (4 - C) %e + 1 %e + 1 A 2 A 2 + (----------------- - 1) + (----------------- - 0.5) - B (3 - C) - B (2 - C) %e + 1 %e + 1 2 A + --------------------)/5 - B (1 - C) 2 (%e + 1) (%i7) estimates : lbfgs (FOM, '[A, B, C], [1, 1, 1], 1e-4, [1, 0]); ************************************************* N= 3 NUMBER OF CORRECTIONS=25 INITIAL VALUES F= 1.348738534246918D-01 GNORM= 2.000215531936760D-01 ************************************************* I NFN FUNC GNORM STEPLENGTH 1 3 1.177820636622582D-01 9.893138394953992D-02 8.554435968992371D-01 2 6 2.302653892214013D-02 1.180098521565904D-01 2.100000000000000D+01 3 8 1.496348495303005D-02 9.611201567691633D-02 5.257340567840707D-01 4 9 7.900460841091139D-03 1.325041647391314D-02 1.000000000000000D+00 5 10 7.314495451266917D-03 1.510670810312237D-02 1.000000000000000D+00 6 11 6.750147275936680D-03 1.914964958023047D-02 1.000000000000000D+00 7 12 5.850716021108205D-03 1.028089194579363D-02 1.000000000000000D+00 8 13 5.778664230657791D-03 3.676866074530332D-04 1.000000000000000D+00 9 14 5.777818823650782D-03 3.010740179797255D-04 1.000000000000000D+00 THE MINIMIZATION TERMINATED WITHOUT DETECTING ERRORS. IFLAG = 0 (%o7) [A = 1.461933911464101, B = 1.601593973254802, C = 2.528933072164854] (%i8) plot2d ([F(x), [discrete, X, Y]], [x, -1, 6]), ''estimates; (%o8) lbfgs_nfeval_max — Variãvel: lbfgs_nfeval_max Valor padrão: 100 lbfgs_ncorrections — Variãvel: lbfgs_ncorrections Valor padrão: 25