| | | |

Matemática Numérica III

3 Otimização

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

3.3 Método do gradiente conjugado

Em revisão

Métodos do gradiente conjugado são obtidos escolhendo-se as direções descendentes

d(k)=-f(x(k))+βkd(k-1), (3.38)

onde βk é um escalar escolhido de forma que as direções {d(k)} sejam mutuamente ortogonais com respeito a uma dada norma. Por exemplo, o método de Fletcher-Reeves consiste em escolher

βk=f(x(k))f(x(k))f(x(k-1))f(x(k-1)), (3.39)

o que garante que as direções sejam mutuamente ortogonais com respeito ao produto interno euclidiano.

Exemplo 3.3.1.

Implementação do Método de Fletcher-Reeves para a minimização da função de Rosenbrock dada no Exemplo 3.1.1.

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
24# dimensao do prob
25n = 2
26
27# num max iters
28maxiter = 100000
29# tolerancia
30tol = 1e-10
31
32# aprox. inicial
33x = np.zeros(n)
34
35# iteracoes CG
36gf = grad(x)
37d = -gf
38
39for k in range(maxiter):
40
41  # pesquisa linear
42  alpha = spopt.line_search(fun, grad, x, d)[0]
43
44  # atualizacao
45  x = x + alpha * d
46
47  nad = npla.norm(alpha * d)
48  nfun = npla.norm(fun(x))
49
50  print(f"{k+1}: {alpha:1.2e} {nad:1.2e} {nfun:1.2e}")
51
52  if ((nfun < tol) or np.isnan(nfun)):
53    break
54
55  # prepara nova iter
56  ngf = grad(x)
57
58  beta = np.dot(ngf,ngf)/np.dot(gf,gf)
59  d = -ngf + beta * d
60
61  gf = ngf

3.3.1 Variantes

Há várias variantes do método Fletcher-Reeves999Para mais detalhes, consultemos [Nocedal2006]. Algumas das mais empregadas são:

  • Método de Polak-Ribière

    βk=f(k+1)(f(k+1)-f(k))f(k)2 (3.40)
  • Método de Hestenes-Stiefel

    βk=f(k+1)(f(k+1)-f(k))(f(k+1)-f(k))d(k) (3.41)

Exercícios

Em revisão

E. 3.3.1.

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

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

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.3.2.

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

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

para 𝒙[-4.5,4.5]2.


f(3,0.5)=0

E. 3.3.3.

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

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

f(0,-1)=3

E. 3.3.4.

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

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

para 𝒙[-10,10]2.


f(1,3)=0

E. 3.3.5.

Aplique um método do gradiente conjugado para computar o ponto mínimo da função de Rastrigin

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

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
| | | |