Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1...

30
Otimização Numérica Prof. Wagner H. Bonat Universidade Federal do Paraná Departamento de Estatística Laboratório de Estatística e Geoinformação LEG/DEST/UFPR Otimização Numérica 1 / 30

Transcript of Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1...

Page 1: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Otimização Numérica

Prof. Wagner H. Bonat

Universidade Federal do ParanáDepartamento de Estatística

Laboratório de Estatística e Geoinformação

LEG/DEST/UFPR Otimização Numérica 1 / 30

Page 2: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Programação não-linear

Sumário

1 Programação não-linear

2 Método Golden-Search ou Brent

3 Método de Nelder-Mead

4 Métodos baseados em gradiente

5 Métodos baseados em hessiano

6 Métodos baseados em simulação

7 Recomendações

LEG/DEST/UFPR Otimização Numérica 2 / 30

Page 3: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Programação não-linear

Métodos de otimização não-linear

Os métodos são em geral categorizados baseado na dimensionalidade1 Unidimensional: Golden Section search.2 Multidimensional.

Caso multidimensional, tem-se pelo menos quatro tipos de algoritmos1 Não baseados em gradiente: Nelder-Mead;2 Baseados em gradiente: Gradiente descendente e variações;3 Baseados em hessiano: Newton e quasi-Newton (BFGS);4 Algoritmos baseados em simulação e ideias genéticas: Simulating

Annealing (SANN).

A função genérica optim() em R fornece interface aos principaisalgoritmos de otimização.Vamos discutir as principais ideias por traz de cada tipo de algoritmo.Existe uma infinidade de variações e implementações.

LEG/DEST/UFPR Otimização Numérica 3 / 30

Page 4: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Método Golden-Search ou Brent

Sumário

1 Programação não-linear

2 Método Golden-Search ou Brent

3 Método de Nelder-Mead

4 Métodos baseados em gradiente

5 Métodos baseados em hessiano

6 Métodos baseados em simulação

7 Recomendações

LEG/DEST/UFPR Otimização Numérica 4 / 30

Page 5: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Método Golden-Search ou Brent

Programação não-linear: Problemas unidimensionais

Golden Section Search é o mais popular e muito eficiente.Algoritmo

1 Define a razão de ouro ψ =√

5−12 = 0.618;

2 Escolha um intervalo [a, b] que contenha a solução;3 Avalie f (x1) onde x1 = a + (1− ψ)(b − a) e compare com f (x2) onde

x2 = a + ψ(b − a);4 Se f (x1) < f (x2) continua a procura em [a, x1] caso contrário em [x2, b].

Em R a função optimize() implementa este método.args(optimize)

# function (f, interval, ..., lower = min(interval), upper = max(interval),# maximum = FALSE, tol = .Machine$double.eps^0.25)# NULL

Na função optim() esse método é chamado de Brent.LEG/DEST/UFPR Otimização Numérica 5 / 30

Page 6: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Método Golden-Search ou Brent

Exemplo: Otimização unidimensional

Minize a função f (x) = |x − 2|+ 2|x − 1|.Implementando e otimizando.

xx <- c()fx <- function(x) {

out <- abs(x-2) + 2*abs(x-1)xx <<- c(xx, x)return(out)

}out <- optimize(f = fx, interval = c(-3,3))out

# $minimum# [1] 1.000021## $objective# [1] 1.000021

LEG/DEST/UFPR Otimização Numérica 6 / 30

Page 7: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Método Golden-Search ou Brent

Exemplo: Otimização unidimensional

Traço do algoritmo.par(mfrow = c(1,1), mar=c(2.6, 3, 1.2, 0.5), mgp = c(1.6, 0.6, 0))fx <- function(x) abs(x-2) + 2*abs(x-1)plot(fx, 0, 3)for(i in 1:length(xx)) {

text(x = xx[i], y = fx(xx[i]), label = i)}

0.0 0.5 1.0 1.5 2.0 2.5 3.0

12

34

5

x

fx

2

3

456

7891011121314151617181920212223242526

LEG/DEST/UFPR Otimização Numérica 7 / 30

Page 8: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Método de Nelder-Mead

Sumário

1 Programação não-linear

2 Método Golden-Search ou Brent

3 Método de Nelder-Mead

4 Métodos baseados em gradiente

5 Métodos baseados em hessiano

6 Métodos baseados em simulação

7 Recomendações

LEG/DEST/UFPR Otimização Numérica 8 / 30

Page 9: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Método de Nelder-Mead

Método de Nelder-Mead (gradient free)

Algoritmo de Nelder-Mead1 Escolha um simplex com n + 1 pontos p1(x1, y1), . . . pn+1(xn+1, yn+1),

sendo n o número de parâmetros.2 Calcule f (pi) e ordene por tamanho f (p1) ≤ . . . f (pn).3 Avalie se o melhor valor é bom o suficiente, se for, pare.4 Delete o ponto com maior/menor f (pi) do simplex.5 Escolha um novo ponto pro simplex.6 Volte ao passo 2.

LEG/DEST/UFPR Otimização Numérica 9 / 30

Page 10: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Método de Nelder-Mead

Algoritmo de Nelder-Mead: Ilustração

−2 −1 0 1 2

−2

−1

01

2

x1

x2

−0.14

−0.12

−0.1

−0.08

−0.06

−0.04

−0.02

G 1

W 1

B 1M

R

LEG/DEST/UFPR Otimização Numérica 10 / 30

Page 11: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Método de Nelder-Mead

Algoritmo de Nelder-Mead: Escolhendo o novo ponto

Ponto central do lado melhor (B):

M =B + G

2 =

(x1 + x22 ,

y1 + y22

).

Refletir o simplex para o lado BG.

R = M + (M −W ) = 2M −W .

Se a função em R é menor que em W movemos na direção correta.1 Opção 1: Faça W = R e repita.2 Opção 2: Expandir usando o ponto E = 2R −M e W = E , repita.

Se a função em R e W são iguais contraia W para próximo a B, repita.A cada passo uma decisão lógica precisa ser tomada.

LEG/DEST/UFPR Otimização Numérica 11 / 30

Page 12: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Método de Nelder-Mead

Algoritmo de Nelder-Mead: Ilustração

−2 −1 0 1 2

−2

−1

01

2

x1

x2

−0.14

−0.12

−0.1

−0.08

−0.06

−0.04

−0.02

G 1

W 1

B 1M

RB 2

W 1

G 2

M

R

LEG/DEST/UFPR Otimização Numérica 12 / 30

Page 13: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Métodos baseados em gradiente

Sumário

1 Programação não-linear

2 Método Golden-Search ou Brent

3 Método de Nelder-Mead

4 Métodos baseados em gradiente

5 Métodos baseados em hessiano

6 Métodos baseados em simulação

7 Recomendações

LEG/DEST/UFPR Otimização Numérica 13 / 30

Page 14: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Métodos baseados em gradiente

Métodos baseado em gradiente

Use o gradiente de f (x), ou seja, f ′(x) para obter a direção de procura.1 f ′(x) pode ser obtido analiticamente;2 f ′(x) qualquer aproximação númerica.

A direção de procura sn é o negativo do gradiente no último ponto.Passos básicos

1 Calcule a direção de busca −f ′(x).2 Obtenha o próximo passo x (n+1) movendo com passo αn na direção de−f ′(x).

3 Tamanho do passo αn pode ser fixo ou variável.4 Repita até f ′(x i) ≈ 0 seja satisfeito.

LEG/DEST/UFPR Otimização Numérica 14 / 30

Page 15: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Métodos baseados em gradiente

Ilustração: Métodos baseado em gradiente

−2 −1 0 1 2

−2

−1

01

2

x1

x2

−0.14

−0.12

−0.1

−0.08

−0.06

−0.04

−0.02

23456789101112

1314

15161718192021222324

2526

27282930313233343536

3738

39404142434445464748

4950

51525354555657585960

616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294

LEG/DEST/UFPR Otimização Numérica 15 / 30

Page 16: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Métodos baseados em hessiano

Sumário

1 Programação não-linear

2 Método Golden-Search ou Brent

3 Método de Nelder-Mead

4 Métodos baseados em gradiente

5 Métodos baseados em hessiano

6 Métodos baseados em simulação

7 Recomendações

LEG/DEST/UFPR Otimização Numérica 16 / 30

Page 17: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Métodos baseados em hessiano

Métodos baseado em hessiano

Algoritmo de Newton-Raphson.Maximizar/minimizar uma função f (x) é o mesmo que resolver aequação não-linear f ′(x) = 0.Equação de iteração

x (i+1) = x (i) − J(x(i))−1f ′(x (i)),

onde J é a segunda derivada (hessiano) de f (x).J(x(i)) pode ser obtida analitica ou numericamente.J(x(i)) pode ser aproximada por uma função mais simples de calcular.Métodos Quasi-Newton (mais famoso BFGS).

LEG/DEST/UFPR Otimização Numérica 17 / 30

Page 18: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Métodos baseados em hessiano

Ilustração: Métodos baseado em hessiano (Newton)

−2 −1 0 1 2

−2

−1

01

2

x1

x2

−0.14

−0.12

−0.1

−0.08

−0.06

−0.04

−0.02

1

23

LEG/DEST/UFPR Otimização Numérica 18 / 30

Page 19: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Métodos baseados em hessiano

Métodos Quasi-Newton

Métodos quasi-Newton tentam imitar o método de Newton.A equação de iteração é dada por

x (i+1) = x(i) − αiHi f ′(x (i)),

onde Hi é alguma aproximação para o inverso do Hessiano.αi é o tamanho do passo.Denote δi = x (i+1) − x (i) e γi = f ′(x (i+1))− f ′(x (i)).Para obter Hi+1 o algoritmo impõe que

Hi+1γi = δi .

Algoritmo DFP

Hi+1 = Hi −Hiγiγ

>i H

γ>i Hiγi+δiδ>i

δ>i γi.

LEG/DEST/UFPR Otimização Numérica 19 / 30

Page 20: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Métodos baseados em hessiano

Métodos Quasi-Newton

Versão melhorada do DFP devido a Broyden, Fletcher, Goldfarb eShanno (BFGS).Aproxima o hessiano por

Hi+1 = Hi −δiγ>i Hi + Hiγiδ

>i

δ>i γi+

(1+ γ>i Hiγi

δ>i γi

)(δiδ>i

δ>i γi

).

Implementações modernas do BFGS usando wolfe line search paraencontrar αi .Considere ψ(α) = f (x (i) − αHi f ′(x (i))), encontre αi tal que

ψi(αi) ≤ ψi(0) + µψ′i(0)αi e ψ′i(αi) ≥ ηψ′i(0),

onde µ e η são constantes com 0 < µ ≤ η < 1.

LEG/DEST/UFPR Otimização Numérica 20 / 30

Page 21: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Métodos baseados em hessiano

Ilustração: Métodos baseado em hessiano (BFGS)

−2 −1 0 1 2

−2

−1

01

2

x1

x2

−0.14

−0.12

−0.1

−0.08

−0.06

−0.04

−0.02

234567891011

12131415161718192021

22232425262728293031

3233343536

3839404142

43444546474849505152535455565758

LEG/DEST/UFPR Otimização Numérica 21 / 30

Page 22: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Métodos baseados em simulação

Sumário

1 Programação não-linear

2 Método Golden-Search ou Brent

3 Método de Nelder-Mead

4 Métodos baseados em gradiente

5 Métodos baseados em hessiano

6 Métodos baseados em simulação

7 Recomendações

LEG/DEST/UFPR Otimização Numérica 22 / 30

Page 23: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Métodos baseados em simulação

Métodos baseado em simulação

Algoritmo genérico (maximização):1 Gere uma solução aleatória (x1);2 Calcule a função objetivo no ponto simulado f (x1);3 Gere uma solução na vizinhança (x2) do ponto em (1);4 Calcule a função objetivo no novo ponto f (x2):

Se f (x2) > f (x1) mova para x2.Se f (x2) < f (x1) TALVEZ mova para x2.

5 Repita passos 3-4 até atingir algum critério de convergência ou númeromáximo de iterações.

LEG/DEST/UFPR Otimização Numérica 23 / 30

Page 24: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Métodos baseados em simulação

Métodos baseado em simulação: Simulating annealing

Para decidir se um ponto x2 quando f (x2) < f (x1) será aceito, usa-seuma probabilidade de aceitação

a = exp (f (x2)− f (x1))/T ,

onde T é a temperatura (pense como um tuning).Se f (x2) > f (x1) então a > 1, assim o x2 será aceito comprobabilidade 1.Se f (x2) < f (x1) então 0 < a < 1.Assim, x2 será aceito se a > U(0, 1).Amostrador de Metropolis no contexto de MCMC (Markov ChainMonte Carlo).

LEG/DEST/UFPR Otimização Numérica 24 / 30

Page 25: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Métodos baseados em simulação

Ilustração: Métodos baseado em simulação (SANN)

−2 −1 0 1 2

−2

−1

01

2

x1

x2

−0.14

−0.12

−0.1

−0.08

−0.06

−0.04

−0.02

LEG/DEST/UFPR Otimização Numérica 25 / 30

Page 26: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Métodos baseados em simulação

Escolhendo o melhor método

Método de Newton é o mais eficiente (menos iterações).Porém, cada iteração pode ser cara computacionalmente.Cada iteração envolve a solução de um sistema p × p.Métodos quasi-Newton são eficientes, principalmente se o gradiente forobtido analiticamente.Quando a função é suave os métodos de Newton e quasi-Newtongeralmente convergem.Métodos baseados apenas em gradiente são simplescomputacionalmente.Em geral precisam de tuning o que pode ser dificil na prática.Método de Nelder-Mead é simples e uma escolha razoável.Métodos baseados em simulação são ideal para funções commáximos/minimos locais.Em geral são caros computacionalmente e portanto lentos.

LEG/DEST/UFPR Otimização Numérica 26 / 30

Page 27: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Recomendações

Sumário

1 Programação não-linear

2 Método Golden-Search ou Brent

3 Método de Nelder-Mead

4 Métodos baseados em gradiente

5 Métodos baseados em hessiano

6 Métodos baseados em simulação

7 Recomendações

LEG/DEST/UFPR Otimização Numérica 27 / 30

Page 28: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Recomendações

Escolhendo o melhor método

Em R o pacote optimx() fornece funções para avaliar e comparar odesempenho de métodos de otimização.Exemplo: Minimizando a Normal bivariada.Escrevendo a função objetivo

fx <- function(xx){-dmvnorm(xx)}

LEG/DEST/UFPR Otimização Numérica 28 / 30

Page 29: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Recomendações

Escolhendo o melhor método

Comparando os diversos algoritmos descritos.

require(optimx)

# Loading required package: optimx

res <- optimx(par = c(-1,1), fn = fx,method = c("BFGS","Nelder-Mead","CG"))

res

# p1 p2 value fevals gevals niter convcode# BFGS -1.772901e-06 1.772901e-06 -0.1591549 13 11 NA 0# Nelder-Mead 1.134426e-04 -1.503306e-04 -0.1591549 55 NA NA 0# CG -8.423349e-06 8.423349e-06 -0.1591549 97 49 NA 0# kkt1 kkt2 xtime# BFGS TRUE TRUE 0.005# Nelder-Mead TRUE TRUE 0.003# CG TRUE TRUE 0.016

LEG/DEST/UFPR Otimização Numérica 29 / 30

Page 30: Prof.WagnerH - LEG-UFPRotimizacao.pdf · Programação não-linear Sumário 1 Programaçãonão-linear 2 MétodoGolden-SearchouBrent 3 MétododeNelder-Mead 4 Métodosbaseadosemgradiente

Recomendações

Algumas recomendações

Otimização trata todos os parâmetros da mesma forma.Cuidado com parâmetros em escalas muito diferentes.Cuidado com parâmetros restritos.Recomendação: Torne todos os parâmetros irrestritos ou faça suafunção a prova de erros.Use o máximo possível de resultados analiticos.Tutorial V.

LEG/DEST/UFPR Otimização Numérica 30 / 30