| | | |

Matemática Numérica III

3 Otimização

Ajude a manter o site livre, gratuito e sem propagandas. Colabore!

3.2 Método de Newton

Em revisão

O método de Newton666Isaac Newton, 1642 - 1727, matemático, físico, astrônomo, teólogo e autor inglês. Fonte: Wikipédia: Isaac Newton. para problemas de otimização é um método de declive com direções descendentes

𝒅(k)=-H-1(𝒙(k))f(𝒙(k)), (3.23)

assumindo que a hessiana H seja definida positiva dentro de uma vizinhança suficientemente grande do ponto de mínimo 𝒙*. Esta escolha é baseada no polinômio de Taylor da função objetivo f

f(𝒙(k+1))f(𝒙(k))+f(𝒙(k))𝒅(k)+12𝒅(k)H(𝒙(k))𝒅(k). (3.24)

Com isso, escolhemos 𝒙(k+1) de forma a minimizar o lado direito desta aproximação, i.e.

di(k)(f(𝒙(k))+f(𝒙(k))𝒅(k)+12𝒅(k)H(𝒙(k))𝒅(k))=0 (3.25)

para i=1,2,,n. Ou seja, temos

f(𝒙(k))+H(𝒙(k))𝒅(k)=𝟎 (3.26)

o que leva a (3.23).

Observação 3.2.1.(Computação da direção)

Na implementação computacional, não é necessário computar a inversa da hessiana, a direção d(k) pode ser mais eficientemente computada resolvendo-se

H(x(k))d(k)=-f(x(k)). (3.27)
Observação 3.2.2.(Solver linear)

O método usado para computar a solução de (3.27) é chamado de solver linear. Por exemplo, Newton-Krylov777Alexei Nikolajewitsch Krylov, 1863 - 1945, engenheiro e matemático russo. Fonte: Wikipédia: Alexei Krylov. é o nome dado ao método de Newton que utiliza um método de subespaço de Krylov como solver linear. Mais especificamente, Newton-GMRES quando o GMRES é escolhido como solver linear. Uma escolha natural é Newton-GC, tendo em vista que o método de gradiente conjugado é ideal para matriz simétrica e definida positiva.

Exemplo 3.2.1.

Seguindo o Exemplo 3.1.1, temos que a hessiana associada é a matriz simétrica H=[hi,j]i,j=1n,n com

h1,1 =2fx12=1200x12-400x2+2 (3.28)
h1,2 =2fx1x2=-400x1 (3.29)
hi,j =2fxixj=200(δi,j-2xi-1δi-1,j)-400(δi+1,j-2xiδi,j)
-400δi,j(xi+1-xi2)+2δi,j (3.30)
hn-1,n =2fxn-1xn=-400xn-1 (3.31)
hn,n =2fxn-1=200 (3.32)

Notemos que a hessiana é uma matriz tridiagonal.

1import numpy as np
2import numpy.linalg as npla
3import scipy.optimize as spopt
4
5# fun obj
6def fun(x):
7  '''
8  Funcao de Rosenbrock
9  '''
10  return sum(100.*(x[1:]-x[:-1]**2.)**2. + (1.-x[:-1])**2.)
11
12# gradiente da fun
13def grad(x):
14  xm = x[1:-1]
15  xm_m1 = x[:-2]
16  xm_p1 = x[2:]
17  der = np.zeros_like(x)
18  der[1:-1] = 200*(xm-xm_m1**2) - 400*(xm_p1 - xm**2)*xm - 2*(1-xm)
19  der[0] = -400*x[0]*(x[1]-x[0]**2) - 2*(1-x[0])
20  der[-1] = 200*(x[-1]-x[-2]**2)
21
22  return der
23
24def hess(x):
25  x = np.asarray(x)
26  H = np.diag(-400*x[:-1],1) - np.diag(400*x[:-1],-1)
27  diagonal = np.zeros_like(x)
28  diagonal[0] = 1200*x[0]**2-400*x[1]+2
29  diagonal[-1] = 200
30  diagonal[1:-1] = 202 + 1200*x[1:-1]**2 - 400*x[2:]
31  H = H + np.diag(diagonal)
32
33  return H
34
35# dimensao
36n = 2
37
38# num max iters
39maxiter = 100000
40# tolerancia
41tol = 1e-10
42
43# aprox. inicial
44x = np.zeros(n)
45
46for k in range(maxiter):
47
48  # direcao descendente
49  d = npla.solve (hess(x),-grad(x))
50
51  # pesquisa linear
52  alpha = spopt.line_search(fun, grad, x, d)[0]
53
54  # atualizacao
55  x = x + alpha * d
56
57  nad = npla.norm(alpha * d)
58  nfun = npla.norm(fun(x))
59
60  print(f"{k+1}: {alpha:1.2e} {nad:1.2e} {nfun:1.2e}")
61
62  if ((nfun < tol) or np.isnan(nfun)):
63    break
Observação 3.2.3.(Métodos quasi-Newton)

Métodos tipo Newton são aqueles que utilizam uma aproximação para a inversa da matriz hessiana. Uma estratégia comumente aplicada, é a de atualizar a hessiana apenas em algumas iterações, baseando-se em uma estimativa da taxa de convergência. Na Subseção 2.1.1, exploramos esta técnica no contexto de resolução de sistemas não lineares.

Exercícios

Em revisão

E. 3.2.1.

Aplique o método de Newton para computar o ponto mínimo da função de Rosenbrock888Howard Harry Rosenbrock, 1920 - 2010, engenheiro britânico. Fonte: Wikipedia: Howard Harry Rosenbrock.

f(𝒙)=i=1n100(xi+1-xi2)2+(1-xi)2 (3.33)

com

  1. a)

    n=2.

  2. b)

    n=3.

  3. c)

    n=4.

  4. d)

    n=5.

  5. e)

    n=10.


f(𝟏)=0

E. 3.2.2.

Aplique o método de Newton para computar o ponto mínimo da função de Beale [Beale1955a]

f(x,y)=(1.5-x+xy)2 (3.34)
+(2.25-x+xy2)2
+(2.625-x+xy3)2.

para 𝒙[-4.5,4.5]2.


f(3,0.5)=0

E. 3.2.3.

Aplique o método de Newton para computar o ponto mínimo da função de Goldstein-Price [Goldstein1971a]

f(x,y)=[1+(x+y+1)2(19-14x (3.35)
+3x2-14y+6xy+3y2)]
×[30+(2x-3y)2(18-32x
+12x2+48y-36xy+27y2)]

f(0,-1)=3

E. 3.2.4.

Aplique o método de Newton para computar o ponto mínimo da função de Booth

f(x,y)=(x+2y-7)2+(2x+y-5)2 (3.36)

para 𝒙[-10,10]2.


f(1,3)=0

E. 3.2.5.

Aplique o método de Newton para computar o ponto mínimo da função de Rastrigin

f(x)=10n+i=1n[xi2-10cos(2πxi)], (3.37)

para 𝒙[-5.12,5.12]n, com

  1. a)

    n=2.

  2. b)

    n=3.

  3. c)

    n=4.

  4. d)

    n=5.

  5. e)

    n=10.


f(𝟎)=0


Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Pedro H A Konzen
| | | |