Você está na página 1de 91

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/358891652

Introdução à Otimização Não Linear

Preprint · February 2022


DOI: 10.13140/RG.2.2.26320.17924/1

CITATIONS READS

0 1,390

1 author:

Alexandre L M Levada
Universidade Federal de São Carlos
129 PUBLICATIONS   386 CITATIONS   

SEE PROFILE

Some of the authors of this publication are also working on these related projects:

Unsupervised metric learning View project

Information geometry in random field models View project

All content following this page was uploaded by Alexandre L M Levada on 27 February 2022.

The user has requested enhancement of the downloaded file.


Departamento de Computação
Centro de Ciências Exatas e Tecnologia
Universidade Federal de São Carlos

Introdução à Otimização Não Linear


Apostila com teoria, exercícios e soluções

Prof. Alexandre Luis Magalhães Levada


Email: alexandre.levada@ufscar.br
Sumário

Prólogo: Porque estudar otimização matemática?


Aula 01: Polinômio de Taylor
Aula 02: Otimização Irrestrita 1D
Aula 03: Otimização Multivariada
Aula 04: O Método do Gradiente Descendente/Ascendente
Aula 05: Convergência do Gradiente Descendente/Ascendente
Aula 06: O Método de Newton Multivariado
Aula 07: O Método do Gradiente Conjugado
Aula 08: O Método do Gradiente Conjugado Generalizado
Aula 09: Métodos quasi-Newton
Aula 10: Multiplicadores de Lagrange
Aula 11: Condições de Karush-Kuhn-Tucker (KKT)
Bibliografia
Prólogo: Porque estudar otimização matemática?

Frequentemente, estudantes de cursos de graduação se perguntam no início de um semestre letivo:


porque eu tenho que estudar essa disciplina em questão? No caso de estudantes de Computação,
Engenharias, Estatística e Matemática, uma dessas disciplinas costuma ser Otimização Matemática.
Saber como otimizar funções através de métodos matemáticos é um requisito para profissionais de
diversas áreas de atuação, como Ciência dos Dados, Pesquisa Operacional, Aprendizado de
Máquina, Processamento de Sinais e Imagens, Visão Computacional, dentre outras.

O conhecimento básico do Cálculo Diferencial é desejável, pois a maioria das ferramentas


matemáticas empregadas ao longo do texto fazem referência direta ao conceito de derivadas de
primeira e segunda ordens.

Esta apostila é uma tentativa de organizar as minhas notas de aula utilizadas durante a oferta da
disciplina Otimização Matemática, para os alunos da Engenharia de Computação da Universidade
Federal de São Carlos no ano de 2019. O conteúdo do texto engloba apenas aspectos relacionados a
Programação Não Linear. A apostila de Programação Linear, a qual pode ser considerada um
material introdutório a esta apostila, pode ser encontrada em:
https://www.researchgate.net/publication/358582117_Introducao_a_Programacao_Linear

Iniciamos a disciplina com uma breve introdução à expansão de Taylor, que é um ferramental
matemático muito importante na otimização matemática. Ela tem como objetivo aproximar funções
não lineares arbitrárias por polinômios. Mas porque aproximar por polinômios? Facilita a
tratabilidade matemática no cálculo diferencial e integral (derivar e integrar polinômios é bem mais
fácil!). De modo geral, a intuição é que a derivada da função em um ponto x0 é o coeficiente angular
da reta tangente no ponto (inclinação), que define uma aproximação linear para a função em x0.
Podemos generalizar e obter aproximações de segunda, terceira e ordens superiores.

Na segunda aula, discutimos aspectos básicos da otimização irrestrita 1D. O objetivo da otimização
irrestrita unidimensional é otimizar uma função arbitrária f(x) de R em R. A condição necessária
para um ponto x* ser extremo é f'(x) = 0 (derivada no ponto é nula). Se a segunda derivada f''(x) é
negativa, então temos um ponto de máximo. Se a segunda derivada f''(x) é positiva, então temos um
ponto de mínimo. Se a segunda derivada f''(x) é nula, então temos um ponto de inflexão (mudança
na concavidade). Apresentamos uma breve introdução aos métodos da Bissecção e de Newton.

Na terceira aula, estudaremos a otimização de funções de múltiplas variáveis. Na otimização


multivariada, o objetivo consiste em encontrar os mínimos/máximos de uma função f de R n em R.
Para isso, precisamos generalizar os conceitos de primeira e segunda derivadas. O vetor gradiente,
que aponta para o sentido de maior crescimento da função, é composto pelas derivadas parciais de
primeira ordem da função em relação a cada uma das variáveis. A matriz Hessiana é composta pelas
derivadas parciais de segunda ordem, sendo uma ferramenta poderosa para a análise da concavidade
local da função.

Na quarta aula, estudaremos o método numérico mais conhecido para otimização não linear: o
gradiente descendente. Trata-se de um método iterativo para otimizar funções que são duas vezes
diferenciáveis continuamente. A ideia básica consiste em gerar pontos sucessivos na direção do
gradiente da função (direção de maior crescimento) em problemas de maximização ou na direção do
negativo do gradiente em problemas de minimização. A condição de parada para o método ocorre
quando o gradiente torna-se o vetor nulo (ponto extremo). A otimalidade global não pode ser
garantida a menos que se prove com antecedência que a função em questão é côncava ou convexa.
Em casos de convergência a máximos/mínimos locais, a solução depende fortemente da
inicialização do método (chute inicial). O método do gradiente descendente tornou-se muito
conhecido pois é a base para o treinamento das redes neurais profundas, sendo utilizado na
minimização da função de erro, que contém milhares de variáveis (pesos sinápticos da rede).

Na quinta aula, desejamos responder a seguinte pergunta: porque o método do gradiente


descendente funciona? Ou seja, porque ele converge para um ponto extremo da função? O objetivo
desta estudo é fornecer garantias teóricas de que método do gradiente descendente/ascendente
realmente funciona, ou seja, desejamos entender, através de argumentos matemáticos, porque ele
converge para os pontos extremos e como essa convergência ocorre. Para estudarmos a
convergência do método gradiente descendente precisamos definir o que são funções suaves, uma
vez que essa é uma condição muito importante para o bom comportamento do método. Veremos que
a taxa de convergência (que é linear) depende diretamente da razão entre o maior e o menor
autovalor da matriz Hessiana .

Na sexta aula, estudaremos o método de Newton multivariado. O método gradiente descendente


possui convergência linear, ou seja, pode ser lento em algumas situações. Podemos generalizar o
método de Newton para funções de múltiplas variáveis, substituindo a derivada primeira pelo
gradiente e a derivada segunda pela matriz Hessiana. Pode-se mostrar que o método de Newton
possui convergência quadrática, o que representa na prática convergência a solução ótima em bem
menos passos que o gradiente descendente. Uma limitação no entanto é o aumento no custo
computacional, uma vez que precisamos calcular e inverter a matriz Hessiana, o que torna esse
método inviável em alguns casos. Esta aula apresenta uma introdução ao método de Newton
multivariado, com exemplos práticos e comparações com o gradiente descendente.

Na sétima aula, estudaremos o método do gradiente conjugado. O método do gradiente descendente


é computacionalmente simples, mas possui convergência lenta. O método de Newton possui
convergência rápida, mas o custo computacional o torna proibitivo em diversos problemas,
principalmente devido ao cálculo e inversão da matriz Hessiana. O método do gradiente conjugado
pode ser considerado um meio termo entre o gradiente descendente e o método de Newton. O seu
objetivo principal é acelerar a convergência do gradiente descendente evitando elevar o custo
computacional. A motivação do método do gradiente conjugado é a solução de problemas de
otimização quadrática.

Na oitava aula generalizaremos o método do gradiente conjugado para que seja possível otimizar
funções não lineares arbitrárias. Um problema do método do gradiente conjugado é que a função
objetivo deve ser sempre quadrática. Em muitos problemas isso não ocorre. Veremos o método do
gradiente conjugado generalizado, também conhecido como não linear, que pode ser utilizado na
otimização de funções arbitrárias, não apenas quadráticas. A principal diferença aqui é que a a
matriz A não é explícita nessas funções objetivo, de modo que o método do gradiente conjugado
tradicional requer alguns ajustes. Deve se ter em mente que para funções não lineares arbitrárias,
isto é, que não são quadráticas, o número máximo de iterações do método generalizado não é
limitado a n (número de variáveis do problema de otimização). Em outras palavras, a convergência
pode não ser tão rápida quanto no problema de otimização quadrática.

Na nona aula, estudaremos os método quasi-Newton. Um problema com o método de Newton e


também do método do gradiente conjugado generalizado é que ambos requerem o cálculo analítico
da matriz Hessiana, ou seja, devemos obter expressões matemáticas para todas as derivadas parciais
de segunda ordem. Em muitos problemas práticos do mundo real, essa tarefa pode ser
extremamente complicada, ou até mesmo inviável/impossível. Os métodos quasi-Newton buscam
aproximações para a matriz Hessiana e sua inversa, com o intuito de reduzir o custo computacional.
Na décima aula, estudaremos os problemas de otimização não linear com restrições de igualdade.
Para resolver essa classe de problemas, será apresentado a técnica matemática conhecida como
multiplicadores de Lagrange. Discutiremos a intuição por trás de sua fundamentação teórica e
resolveremos diversos exercícios.

Por fim, na última aula, estudaremos os problemas de otimização não lineares com restrições de
desigualdade. Apresentaremos as condições de KKT (Karush-Kuhn-Tucker) para a obtenção da
solução ótima neste tipo de problema. A ideia consiste em generalizar os multiplicadores de
Lagrange, de modo a limitar a solução desejada à região viável, através da ativação ou não das
restrições.

De modo geral, trata-se de um curso introdutório e com foco no funcionamento dos método
computacionais, porém ainda sim mantendo um nível razoável de formalismo matemático. Desejo a
todos bons estudos!
Aula 1: O Polinômio de Taylor

Objetivo: aproximar funções não lineares arbitrárias por polinômios.

Porque aproximar por polinômios?


Facilita a tratabilidade matemática no cálculo diferencial e integral (derivar e integral polinômios é
mais fácil!)

Intuição: derivada da função em um ponto x 0 é o coeficiente angular da reta tangente no ponto


(inclinação). Define uma aproximação linear para a função em x0.

Ideia: Podemos generalizar e obter aproximações de 2a, 3a e ordens superiores.

Seja f(x) uma função não linear. A reta tangente no ponto (x0, y0) é dada por:

y− y 0 =m(x−x 0)

Como o coeficiente angular desta reta é a derivada no ponto:

y− y 0 =f '( x0 )( x−x 0 )

o que nos leva a:

y=f ( x 0 )+ f ' (x 0 )( x−x 0)

Note que na vizinhança de x0 a reta tangente é bem ajustada a função f(x).

Então, acabamos de construir uma aproximação de 1a ordem, dada por:

f (x)≈f (x 0 )+f ' ( x0 )( x−x 0 )


Ex: f ( x)= √ x , em que x > 0 e x0 = 4

f (x 0)=f (4)=2

A derivada de f(x) é dada por:

1 −1 /2 1
f ' (x)= x =
2 2 √x

1
e então temos f ' (4)= .
4

Portanto, a aproximação linear para f(x) fica:

1
f ( x)≈2+ ( x−4)
4

Para um valor de x igual 4.3, temos:

√ 4.3=2.073644 (valor real da função)

0.3
f (4.3)=2+ =2.075 (valor da aproximação linear)
4

de modo que temos uma boa aproximação. Mas seria possível melhorar ainda mais? Sim, se
utilizarmos o polinômio de Taylor de 2a ordem, dado por:

1 2
P2 (x)=f ( x 0 )+ f ' ( x0 )(x−x 0 )+ f ' '( x 0 )(x−x 0)
2

Ex: Como fica a aproximação de 2a ordem de f ( x)= √ x ao redor de x0 = 4?

Note que a segunda derivada de f(x) é dada por:

1 −3 / 2 1
f ' ' ( x)=− x =−
4 4√x
3

1
de modo que f ' ' (4)=−
32

Portanto, a aproximação de 2a ordem é dada por:

1 1
P2 (x)=2+ ( x−4)− (x−4)2
4 64

o que nos leva ao seguinte valor no ponto x = 4.3: P2 (4.3)=2.073537 (muito mais próximo)

Podemos generalizar o polinômio de Taylor para a k-ésima ordem como:

1 1 1
Pk (x)=f ( x0 )+f ' (x 0)(x−x 0 )+ f ' '( x0 )( x−x 0 )2+ f (3 ) ( x 0)( x−x 0 )3+ ...+ f (k) (x 0 )(x−x 0)k
2! 3! k!
onde f (k) denota a k-ésima derivada da função.

Ex: Encontre o polinômio de Taylor de ordem k para para a função e x ao redor de x0 = 0.

Note que f ' (x)=f ' ' (x )=...=f (k) (x)=e x

Como x0 = 0, então temos:

f (0)=f ' (0)=f ' ' (0)=...=e 0=1

o que nos leva a:


2 3 k
x x x
Pk (x)=1+ x+ + +...+
2 6 k!

Calculando o valor da aproximação em x = 0.3 (vizinhança de x 0) para a aproximação de 2a ordem


(k = 2), chegamos a:

P2 (0.3)=1.345

o que é muito próximo do valor real de e 0.3=1.34985 . Note que no limite, quando k →∞ , a
aproximação torna-se exata e chegamos na identidade:

x

xk
e =∑
k =0 k!

Ex: Calcule o polinômio de Taylor de ordem k das funções f(x) = sen(x) e g(x) = cos(x) em x0 = 0.

Consideração sobre a expansão de Taylor no caso multivariado

Considere uma função de uma única variável f: R → R. Sabemos que a aproximação de Taylor de
ordem 2 de f(x) em torno de um ponto x0 é dada por:

1 2
f (x)=f (x 0 )+ f '( x 0 )(x−x 0)+ f ' ' (x 0 )( x−x 0)
2

No caso de múltiplas variáveis em que f: R n → R, a expansão é obtida em completa analogia com a


anterior, apenas substituindo a derivada primeira pelo gradiente (vetor das derivadas primeiras) e a
derivada segunda pela matriz Hessiana (matriz das derivadas segundas):

T 1 T
f ( ⃗x )=f ( ⃗x 0 )+ ∇ f ( ⃗x 0 ) ( ⃗x −⃗x 0 )+ ( ⃗x −⃗x 0 ) H ( ⃗x 0)( ⃗x −⃗x 0)
2

De forma alternativa podemos expressar a equação anterior de outra maneira. Defina o vetor

h=⃗x −⃗x 0 . Então, note que ⃗x =⃗x 0 + ⃗
h e a expressão fica:

T 1 T
f ( ⃗x 0+ ⃗
h )=f ( ⃗x 0 )+ ∇ f ( ⃗x 0 ) ⃗h + ⃗h H ( ⃗x 0 ) ⃗h
2

que é a forma utilizada nos teoremas que serão vistos nas aulas de otimização no R n. Portanto, as
duas formas são totalmente equivalentes.
Aula 2: Otimização irrestrita 1D

Problema: maximizar f(x), com f(x) sendo uma função arbitrária.


*
Condição necessária e suficiente: f ' (x)=0 em x=x (derivada é zero no ponto de max).

Método da Bissecção

Um dos métodos mais antigos e simples para maximizar o valor de uma função num intervalo.

Seja f(x) uma função côncava, ou seja, f’’(x) < 0 para todo x e seja x* o máximo de f(x). Então,
note que:

- Se f ' (x)>0 , então x* está a direita de x (x é um limite inferior)


- Se f ' (x)<0 , então X* está a esquerda de x (x é um limite superior)

Dessa forma, podemos desenvolver o seguinte algoritmo iterativo:

Inicialização

a) Selecione ϵ ≤10−3 (tolerância)


b) Selecione x (ponto em que f’(x) > 0)
c) Selecione x (ponto em que f’(x) < 0)
x+ x
d) Faça x ' =
2

Iterações

1. Calcule f’(x) em x = x’
2. Se f ' (x)≥0 , faça x=x '
3. Se f ' (x)≤0 , faça x=x '
x+ x
4. Calcule x ' =
2
5. Repita os passos de 1 a 4 até que x−x≤2 ϵ
* Pontos positivos e negativos do método da bissecção

Vantagem: simples e de fácil implementação


Desvantagens: requer funções côncavas e convergência lenta, pois a única informação sobre a
função f(x) empregada pelo método é o valor da primeira derivada no ponto.

Ex: Aplique o método da bissecção para resolver o seguinte problema

maximizar f (x)=12 x−3 x 4−2 x 6

Iremos supor a tolerância ϵ =10−6 . Primeiramente, vamos calcular a primeira derivada:


3 5
f ' (x)=12−12 x −12 x

Note que no ponto x = 0, f’(x) > 0 e que no ponto x = 1, f’(x) < 0. Sendo assim, temos x=0 e
x=1 .

Calculando a segunda derivada, temos:


2 4
f ' ' (x)=−12(3 x +5 x )≤0

Como a segunda derivada é negativa para todo x, temos que a função em questão é côncava e,
portanto, podemos aplicar o método da bissecção.

1a iteração: x’ = (0 + 1) / 2 = 0.5
f’(x’) = 10.125 > 0
x=0.5

2a iteração: x’ = (0.5 + 1) / 2 = 0.75


f’(x’) = 4.089
x=0.75

3a iteração: x’ = (0.75 + 1) / 2 = 0.875


f’(x’) = -2.194
x=0.875
...

Iremos omitir os cálculos restantes devido ao elevado número de passos necessários para a
convergência, mas a solução ótima é x* = 0.83762.

Análise da convergência

A cada iteração k do método da bissecção o intervalo I k =[ x k , x k ] é dividido ao meio. Seja


|I k| o tamanho do intervalo I k . Então:

|I k−1| |I k−2| |I k−3| |I 0| x 0 −x 0


|I k|= = 2 = 3 =...= k =
2 2 2 2 2k
*
Note que a solução ótima deve pertencer a todos os intervalos I k , ou seja: x ∈ I k ,∀ k .

Isso implica em ϵ k =(x k −x* )≤|I k|


onde x k denota o ponto médio do intervalo Ik e ϵk denota o erro na iteração k. Mas,
como:

1
lim =0
k→∞ 2k

então temos que:

lim |I k|=0
k→∞

o que implica em:

lim ϵk =0
k→∞

e portanto lim x k −x *=0 , o que finalmente nos leva a lim x k =x * .


k→∞ k→∞

A pergunta que resta é: quão rápido xk converge para a solução ótima x*?

Def: Um método iterativo tem convergência linear se:


* *
|x k+1−x |≤c|x k −x |

ou seja,

|ϵ k+1|≤c|ϵk|

Isso significa que o erro no próximo passo depende linearmente do erro no passo atual.

Def: Um método iterativo tem convergência quadrática se:

|x k+1−x *|≤c ( x k −x *)2

ou seja,
2
|ϵ k+1|≤c ϵk

Isso significa que o erro no próximo passo depende do quadrado do erro no passo atual.

Qual das duas convergências seria melhor?

Sem dúvidas, a convergência quadrática é mais rápida! Porque?

Note que quando estamos nos aproximando da solução ótima, o erro é pequeno. Então para valores
pequenos (tipicamente menores que 1), a função quadrática define um menor limite superior.

Voltando ao método da bissecção, note que:

ϵ k ≤|I k|
Então, no pior caso temos:

x 0−x 0 1 x 0− x0 1
ϵ k =|I k|= k
= = ϵ k−1
2 2 2k−1 2

o que indica uma convergência linear, o que é uma taxa de convergência lenta.

O Método de Newton

Método matemático para encontrar raízes de uma função f(x), ou seja, encontrar x tal que f(x) = 0

Ideia: a partir de x0 aproximar a função de maneira linear (reta tangente) e computar x k+1 como o
ponto que intercepta o eixo x, repetindo o processo até atingir o zero da função.

A equação paramétrica da reta que passa pelo ponto ( x 0 , y 0 ) é dada por:

y− y 0 =m(x−x 0)

Se a reta é tangente a curva ela tem coeficiente angular m=f ' ( x 0) (derivada no ponto):

y−f ( x 0 )=f ' ( x 0)( x−x 0 )


Isolando y na expressão anterior:

y=f ( x 0 )+ f ' (x 0 )( x−x 0)

Desejamos encontrar o valor de x em que a reta tangente intercepta a abscissa (eixo horizontal):

f (x 0)+ f ' ( x 0)(x−x 0 )=0


Dividindo ambis os lados por f ' (x 0) (assumimos aqui que o ponto inicial não é um ponto de
máximo ou de mínimo da função, ou seja, possui derivada diferente de zero):

f (x 0 )
+ x−x 0=0
f '( x 0 )

Isolando a variável x, temos:

f ( x0 )
x=x 0−
f ' (x0 )

Como o processo é iterativo (repete-se várias vezes), temos a seguinte relação de recorrência:

f ( xk)
x k+1=x k −
f ' ( xk )

onde o valor inicial x0 é escolhido arbitrariamente (não pode ser ponto em que derivada é nula).

A pergunta que surge é: mas como podemos utilizar o método de Newton para maximizar uma
função?

maximizar f(x)

Basta resolver a equação f’(x) = 0. Para isso, modificamos a iteração para:

f ' ( xk )
x k+1=x k −
f ' ' (x k )

onde f’’(x) denota a derivada segunda da função.


*
Sabemos que conforme k aumenta, x k →x . Porém, quão rápida é essa convergência?

Teorema: O método de Newton possui taxa de convergência quadrática (é rápido).

Seja f(x) uma função contínua com primeira e segunda derivadas definidas e com raiz α .
Podemos utilizar o polinômio de Taylor de 2 a ordem para aproximar f(x) em uma vizinhança de
α como:

1 2
f ( α )=f ( x k )+ f ' (x k )( α −x k )+ f ' ' ( x k )( α −x k ) =0
2

Dividindo ambos os lados da equação por f ' (x k ) e rearranjando os termos, temos:

f ( xk ) 1 f ' ' ( xk) 2


+ α −x k =− ( α −x k )
f ' (x k ) 2 f ' (x k )

Mas, da iteração do método de Newton, sabemos que:

f ( xk)
x k+1=x k −
f ' ( xk )
o que nos leva a:

f ' ' (x k ) 2
α −x k+1=− ( α −x k )
2 f ' (x k )

Como α −x k =ϵ k , ao tomar o valor absoluto de ambos os lados, podemos escrever:

|f ' ' (x k )| 2
|ϵ k+1|=− ϵ
2|f ' (x k )| k

o que mostra claramente que a taxa de convergência é quadrática.

Portanto, o método de Newton é muito mais rápido que o método da bissecção.

Algoritmo

Inicialização

a) Defina ϵ <10−3
b) Escolha x0

Iterações

Enquanto |x k+1−x k|≤ϵ

f ' ( xk )
x k+1=x k −
f ' ' (x k )

Ex: Aplique o método de Newton para resolver o seguinte problema de maximização:

max f ( x)=12 x−3 x 4−2 x 6

Note que a primeira e segunda derivadas de f(x) são:


3 5
f ' (x)=12(1−x −x )
f ' ' (x)=−12(3 x 2 +5 x 4 )

o que nos leva a seguinte iteração:

1−x 3−x 5
x k+1=x k +
3 x 2 +5 x 4
Aula 3: Otimização multivariada

Até o presente momento, estamos estudando como maximizar/minimizar funções de uma única
variável. Porém, para lidar com funções de múltiplas variáveis, é necessário estender o ferramental
matemático empregado até aqui, principalmente o conceito de primeira e segunda derivadas.

Def: Considere uma função f : Rn → R , ou seja, f (⃗x ) retorna um valor real e ⃗x =[x 1 ,... , x n]
é um vetor n-dimensional. O vetor gradiente dessa função no ponto ⃗x é dado pelas derivadas
parciais em relação a cada uma das variáveis x i , i = 1, 2,…, n.

∂f ∂f ∂f
∇ f ( ⃗x )=
[ ,
∂ x1 ∂ x2
, ... ,
∂ xn ]
O vetor gradiente é uma generalização da primeira derivada, sendo o vetor que aponta para a
direção de maior crescimento da função no ponto ⃗x (maior taxa de variação). Note que se a
magnitude do vetor gradiente, ‖∇ f‖ , é elevada, estamos em uma região de grande variação da
função.

Def: Considere uma função f : Rn → R , ou seja, f (⃗x ) retorna um valor real e ⃗x =[x 1 ,... , x n]
é um vetor n-dimensional. A matriz Hessiana dessa função no ponto ⃗x é dada pelas derivadas
parciais de segunda ordem em relação a cada uma das variáveis x i , i = 1, 2,…, n.

2 2 2
∂ f ∂ f ∂ f

[ ]
2
...
∂ x1 ∂ x1 ∂ x2 ∂ x1 ∂ xn
2 2 2
∂ f ∂ f ∂ f
H (⃗x )= ∂ x 2 ∂ x1 2
...
∂ x2 ∂ x2 ∂ xn
⋮ ⋮ ⋱ ⋮
2 2 2
∂ f ∂ f ∂ f
...
∂ xn ∂ x1 ∂ xn ∂ x2 ∂ x 2n

A matriz Hessiana é simétrica, uma vez que a ordem da diferenciação não importa.

Uma definição importante é a de ponto extremo. Podemos definir formalmente um ponto extremo
conforme a seguir.
Def: Um ponto extremo de f (⃗x ) define um máximo ou mínimo da função. Um ponto ⃗x é um
máximo se:

f (⃗x + ⃗h)≤f (⃗x )

para todo ⃗ h=[h 1 , ... ,h n ] em que |hi| para todo i é suficientemente pequeno. Em outras
palavras, ⃗x é máximo se todo ponto na vizinhança não excede f (⃗x ) . De modo análogo, ⃗x
é mínimo se f (⃗x + ⃗h)≥f (⃗x ) , para todo ⃗
h=[h 1 , ... ,h n ] .

Lembrando que funções não côncavas/convexas admitem máximos/mínimos locais, sendo que a
obtenção do máximo/mínimo global não é sempre garantida.

Algumas considerações importantes:

1. Note que a 1a derivada é nula em todos os pontos extremos.


a) se além disso, a derivada segunda é negativa, então temos um ponto de máximo.
b) se além disso, a derivada segunda é positiva, então temos um ponto de mínimo.
c) se além disso, a derivada segunda também é nula, temos um ponto de inflexão ou sela, ou
seja, um ponto em que a concavidade da função muda.

Os resultados a seguir demonstram matematicamente as afirmações acima, mas antes veremos um


detalhe sobre a expansão de Taylor no caso multivariado.
Relembrando a expansão de Taylor no caso multivariado

Considere uma função de uma única variável f: R → R. Sabemos que a aproximação de Taylor de
ordem 2 de f(x) em torno de um ponto x0 é dada por:

1 2
f ( x)=f ( x 0 )+ f ' (x 0 )( x−x 0)+ f ' '( x 0 )(x−x 0)
2

No caso de múltiplas variáveis em que f: R n → R, a expansão é obtida em completa analogia com a


anterior, apenas substituindo a derivada primeira pelo gradiente (vetor das derivadas parciais) e a
derivada segunda pela matriz Hessiana (matriz das derivadas segundas):

1
f ( ⃗x )=f ( ⃗x 0 )+ ∇ f (⃗x 0 )T ( ⃗x −⃗x 0 )+ ( ⃗x −⃗x 0 )T H ( ⃗x 0)( ⃗x −⃗x 0)
2

De forma alternativa podemos expressar a equação anterior de outra maneira. Defina o vetor

h=⃗x −⃗x 0 . Então, note que ⃗x =⃗x 0 + ⃗
h e a expressão fica:

1
h )=f ( ⃗x 0 )+ ∇ f ( ⃗x 0 )T ⃗h + ⃗hT H ( ⃗x 0 )⃗h
f ( ⃗x 0+ ⃗
2

que é a forma utilizada nos teoremas que serão vistos nas aulas de otimização no R n. Portanto, as
duas formas são totalmente equivalentes.

Teorema: Uma condição necessária para ⃗x 0=[ x 1 ,... , x n] ser um ponto extremo de f (⃗x ) é que:

∇ f (⃗x 0 )=0

ou seja, o gradiente no ponto deve ser nulo. Em outras palavras, se o gradiente da função em um
determinado ponto ⃗x 0 é nulo, então esse ponto é um extremo da função (máximo/mínimo/sela) .

Prova:

Realizando uma expansão de Taylor de segunda ordem de f (⃗x ) na vizinhança de ⃗x 0 , temos:

T 1 T
f ( ⃗x 0+ ⃗
h )−f ( x⃗0 )=∇ f ( x⃗0 ) ⃗h + ⃗h H ( x⃗0 ) ⃗h
2

Para um ⃗ h suficientemente pequeno, o termo quadrático em ⃗


h torna-se desprezível (pois o
quadrado de um valor muito pequeno é menor ainda), ou seja:

f ( x⃗0+ ⃗h)−f ( x⃗0)≈ ∇ f ( x⃗0 )T ⃗


h

Mostraremos, por contradição, que ∇ f ( x⃗0 ) deve desaparecer em um ponto de mínimo x⃗0 ,
pois supondo que não desapareça, então para uma variável x j específica, a seguinte condição
será válida:

∂f ( x⃗0) ∂f ( x⃗0)
<0 ou >0
∂xj ∂xj
Em outras palavras, se o gradiente não é nulo, significa que ao menos uma de suas componentes é
positiva ou negativa (aqui consideramos a componente referente à variável x j ). Selecionando
h j com o sinal adequado (basta tomar o sinal oposto da derivada anterior), é sempre possível ter:

∂ f ( x⃗0)
hj <0
∂ xj

Fazendo todas as outras componentes de ⃗


h serem nulas, a expansão de Taylor resulta em:

f ( x⃗0+ ⃗h)−f ( x⃗0)< 0

o que implica em:

f ( x⃗0+ ⃗h)<f ( x⃗0)

Este resultado contradiz a premissa de que x⃗0 é um ponto de mínimo. Assim, ∇ f ( x⃗0 ) deve
ser nulo. Uma demonstração similar pode ser realizada para o caso de maximização.

A seguir iremos definir o que é uma matriz positiva semi-definida (negativa semi-definida).

Def: Uma matriz H é positiva semi-definida (negativa semi-definida) se uma das seguintes
condições é satisfeita:

1. ∀ x ,⃗x T H ⃗x ≥0 ( ∀ x ,⃗x T H ⃗x ≤0 )
2. Todo autovalor λ de H é maior ou igual (menor ou igual) a zero.
3. Todas as submatrizes principais possuem determinante maior ou igual (menor ou igual) a zero.

O seguinte resultado fornece condições suficientes para um ponto ser considerado extremo.

Teorema: A condição suficiente para um ponto estacionário x⃗0 ser um extremo (máximo ou
mínimo) é que a matriz Hessiana H ( x⃗0) (derivadas parciais de segunda ordem) satisfaça as
seguintes condições:

1. H ( x⃗0) é positiva semi-definida se x⃗0 é um ponto de mínimo.


1. H ( x⃗0) é negativa semi-definida se x⃗0 é um ponto de máximo.

Em outras palavras, temos que se a matriz Hessiana é positiva (negativa) semi-definida, então
tempos um ponto extremo é mínimo (máximo).

Prova:

Utilizando a expansão de Taylor de segunda ordem, podemos escrever:

T 1 T
f ( ⃗x 0+ ⃗
h )−f ( x⃗0 )=∇ f ( x⃗0 ) ⃗h + ⃗h H ( x⃗0 ) ⃗h
2

Dado que x⃗0 é um ponto estacionário, então o gradiente é nulo, ou seja, ∇ f ( x⃗0 )=0 . Assim,
temos:
1 T
f ( ⃗x 0+ ⃗
h )−f ( x⃗0 )= ⃗h H ( x⃗0) ⃗
h (*)
2

Se x⃗0 é um ponto de mínimo:

f ( x⃗0+ ⃗h)>f ( x⃗0)

fazendo com que a diferença no lado esquerdo de (*) seja obrigatoriamente positiva. Portanto, para
x⃗0 ser um ponto de mínimo, deve ser verdade que:

1 ⃗T
h H ( x⃗0 ) ⃗
h ≥0
2

ou seja, a matriz Hessiana H ( x⃗0) deve ser positiva semi-definida. Uma prova semelhante para o
caso de maximização mostra que a matriz Hessiana deve ser negativa semi-definida. Em geral, se a
matriz Hessiana H ( x⃗0) for indefinida, x⃗0 deve ser um ponto de inflexão (sela).

Ex: Determine os pontos extremos da função:

f (⃗x )=f (x 1 , x 2 , x 3 )=x 1+ 2 x 3 + x 2 x 3−x 21−x 22−x 23

Classifique os pontos extremos como mínimo, máximo ou inflexão (sela).

Sabemos que a condição necessária para termos um ponto extremo é dada por:

∂f ∂f ∂f
∇ f ( ⃗x )=
[ , ,
∂ x1 ∂ x2 ∂ x3 ]
=[ 0 , 0 , 0]

Isso nos leva as seguintes equações:

1−2 x 1=0 (I)


x 3−2 x 2=0 (II)
2+ x 2−2 x 3=0 (III)

1
Da equação (I) temos que x 1=
2

Isolando x3 na equação (II) temos:

x 3=2 x 2

2 4
Substituindo em (III), chegamos em x 2= , o que nos leva a x 3= .
3 3

1 2 4
Portanto, o ponto extremo é
*
x=
[ , ,
2 3 3 ] . É ponto de máximo, mínimo, ou inflexão?

Calculando as derivadas parciais de segunda ordem, temos:


∂2 f ∂2 f ∂2 f
=−2 =−2 =−2
∂ x 21 ∂ x 22 ∂ x 23

2 2 2
∂ f ∂ f ∂ f
=0 =0 =1
∂ x1 ∂ x2 ∂ x1 ∂ x3 ∂ x2∂ x3

o que nos leva a seguinte matriz Hessiana (lembrando que H é simétrica):

−2 0 0
*

[
H (⃗x )= 0 −2 1
0 1 −2 ]
Precisamos checar se a matriz Hessiana no ponto extremo é positiva semi-definida ou negativa
semi-definida. Há várias formas de verificar isso, mas aqui iremos optar por encontrar os
autovalores de H. Lembrando que os autovalores de um operador H são dados pela solução da
seguinte equação:

det ( H− λ I)=0

−2−λ 0 0
H− λ I = 0
0 [
−2− λ
1
1
−2− λ ]
Aplicando a regra de Sarrus, podemos calcular o determinante como:

−2− λ 0 0 −2−λ 0
det ( H− λ I )=
| 0
0
−2−λ
1
1
−2−λ
0
0 | 3
−2−λ =(−2− λ ) −(−2− λ )=0
1 |
Portanto, os autovalores são as raízes do polinômio característico:

(−2− λ )3 +(2+ λ )=0

É trivial observar que as soluções para a equação cúbica a seguir são:

λ 1=λ 2=λ 3=−2

Portanto, como todos os autovalores são negativos, H é negativa semi-definida e o ponto extremo é
um máximo.

Exercícios

1. Determine os pontos extremos das seguintes funções:

a) f (⃗x )=x 31 + x 32−3 x 1 x 2 com ⃗x =[x 1 , x 2 ]

b) f (⃗x )=2 x 21+ x22 + x 23 +6(x 1 + x 2+ x 3 )+2 x 1 x 2 x3 com ⃗x =[x 1 , x 2 , x 3 ]


2. Verifique se a função
2 2 2
f (⃗x )=2 x 1 x 2 x 3−4 x 1 x 3−2 x 2 x 3 + x 1+ x 2 + x 3−2 x1 −4 x 2 +4 x 3 com ⃗x =[x 1 , x 2 , x 3 ]

tem os seguintes pontos estacionários:

[0, 3, 1]
[0, 1, -1]
[1, 2, 0]
[2, 1, 1]
[2, 3, -1]

Em caso positivo, classifique cada um dos extremos como mínimo, máximo ou inflexão utilizando a
matriz Hessiana.

O método analítico visto nesta aula é uma ferramenta matemática muito importante em otimização
matemática. Porém, há um grave problema: a solução analítica nem sempre existe!

Considere o exemplo a seguir. Seja o problema de minimização abaixo.

minimizar f ( x1 , x2 )=x 1 e−x + sen ( x 1)−cos ( x 2)


2

Calculando o vetor gradiente, temos o seguinte sistema de equações:

e−x + cos(x 1 )
[ =0
][]
2

−x1 e + sen(x 2) 0
−x 2

Como isolar as variáveis? Impossível!

Solução: métodos numéricos (algoritmos computacionais).

Método mais conhecido = gradiente descendente/ascendente.

Veremos em detalhes o funcionamento desse método nas próximas aulas.


Aula 4: O método do gradiente descendente/ascendente

O método analítico visto nas aulas passadas é uma ferramenta matemática muito importante em
otimização matemática. Porém, há um grave problema: a solução analítica nem sempre existe!

Relembrando o problema anterior. Seja o problema de minimização abaixo.

minimizar f (x1 , x2 )=x 1 e−x + sen (x 1)−cos ( x 2)


2

Calculando o vetor gradiente, temos o seguinte sistema de equações:

e−x + cos( x 1 ) = 0
[ ][]
2

−x1 e + sen( x 2) 0
−x 2

Como isolar as variáveis? Impossível!

Solução: métodos numéricos (algoritmos computacionais).

A abordagem mais simples e conhecida é o método do gradiente descendente/ascendente. Trata-se


de um método iterativo para otimizar funções que são duas vezes diferenciáveis continuamente. A
ideia básica consiste em gerar pontos sucessivos na direção do gradiente da função (direção de
maior crescimento) em problemas de maximização ou na direção do negativo do gradiente em
problemas de minimização. A condição de parada para o método ocorre quando o gradiente torna-se
o vetor nulo (ponto extremo). A otimalidade global não pode ser garantida a menos que se garanta
com antecedência que a função em questão é côncava ou convexa. Em casos de convergência a
máximos/mínimos locais, a solução depende fortemente da inicialização do método (chute inicial).

A iteração do método do gradiente descendente/ascendente é dada por:

⃗x k+1= x⃗k −α ∇ f ( x⃗k ) (minimização)


⃗x k+1= x⃗k + α ∇ f ( x⃗k ) (maximização)

com α sendo o tamanho do passo, um parâmetro fundamental para o bom funcionamento e


convergência do método em questão.

Ex: Resolver o problema de maximização a seguir com o método analítico e comparar com o
1
resultado obtido pelo gradiente ascendente com α = e solução inicial x⃗0=[1 , 1] .
4

otimizar f (⃗x )=4 x 1+ 6 x2 −2 x 21−2 x 1 x 2−2 x22

1. Solução analítica: pela condição necessária temos que

∂f ∂f
∇ f ( ⃗x )= ,
[
∂ x1 ∂ x2 ]
=[ 0 , 0 ]

o que nos leva ao sistema de equações a seguir:

4−4 x 1−2 x 2=0 (I)


6−2 x 1−4 x 2=0 (II)
1
Multiplicando (I) por -2 e somando com (II), temos que x 1= .
3
4
Substituindo o valor de x 1 em (II), chega-se a x 2= .
3
1 4
Solução ótima: x *=[ ] ,
3 3
. Qual o valor da função no ponto?

1 4 1 14 16 4 2 8 32 28 42 42
f ( ⃗x* )=f (1/3 , 4 /3)=4 +6 −2 −2 −2 = +8− − − = − = =4.666666
3 3 9 33 9 3 9 9 9 3 9 9

Ponto de máximo ou mínimo?

Calculando a matriz Hessiana H (⃗x ) , temos:

H (⃗x )=[−4
−2 −4 ]
−2

Os autovalores de H são obtidos pela equação det ( H− λ I)=0 .

|−4−
−2
λ −2 =0
−4− λ |
o que nos leva a (−4− λ )2−4=0 . Desenvolvendo o quadrado, chega-se na equação quadrática:

λ 2+ 8 λ +12=0

cujas soluções são λ 1=−2 e λ 2=−6 . Portanto, trata-se de um ponto de máximo.

2. Método do gradiente ascendente

Sabemos que o vetor gradiente é dado por:

∂f
∇ f (⃗x )=
[ ][
∂ x1
∂f
∂ x2
=
4−4 x1−2 x 2
6−2 x 1−4 x 2 ]
1
Iremos considerar α = e x⃗0=[1 , 1] .
4

k = 1: ∇ f ( x⃗0 )=[−2 , 0]
1 1
x⃗1=[1 ,1]+ [−2, 0]= , 1
4 2 [ ]
k = 2: ∇ f ( x⃗1 )=[0 , 1]
1 1 1 5
[ ]
x⃗2= , 1 + [0 , 1]= ,
2 4 2 4 [ ]
1
k = 3: [ ]
∇ f ( x⃗2 )= − , 0
2
1 5 1 1 3 5
[ ] [
x⃗3= , + − ,0 = ,
2 4 4 2 8 4 ][ ]
1
k = 4: [ ]
∇ f ( x⃗3 )= 0 ,
4
1 5 1 1 3 21
[ ] [
x⃗4= , + 0 , = ,
2 4 4 4 8 16 ][ ]
1
k = 5: [ ]
∇ f ( x⃗4 )= − , 0
8
3 21 1 1 11 21
[ ] [
x⃗5= , + − ,0 =
8 16 4 8
,
][
32 16 ]
1
k = 6: [ ]
∇ f ( x⃗5 )= 0 ,
16
11 21 1 1 11 85
x⃗6=
[ ] [
, + 0,
32 16 4 16
= ,
32 64 ][ ]

Note que na sexta iteração a solução numérica já é próxima da solução ótima.

1 4
x *= [ ]
, =[0.333 , 1.333]
3 3

11 85
x⃗6=
[ ] ,
32 64
=[0.343 ,1.328]

Qual o valor da função no ponto?

f ( x⃗6 )=4.66652 (Muito próximo do ótimo!)

Uma das limitações é justamente a lenta convergência quando nos aproximamos da solução ótima.
Mas e se aumentarmos o tamanho do passo? Vamos refazer os cálculos do início considerando um
1
passo de tamanho α = .
2

k = 1: ∇ f ( x⃗0 )=[−2 , 0]
1
x⃗1=[ 1, 1 ] + [−2 , 0 ]=[0 , 1]
2

k = 2: ∇ f ( x⃗1 )=[2 , 2]
1
x⃗2=[ 0 ,1 ] + [ 2 ,2 ]=[2 ,1]
2
k = 3: ∇ f ( x⃗2 )=[−6 ,−2]
1
x⃗3=[ 2 ,1 ] + [ −6 ,−2 ]=[−1 ,0 ]
2
k = 4: ∇ f ( x⃗3 )=[8 , 8]
1
x⃗4= [−1 , 0 ] + [ 8 ,8 ] =[3 , 4 ]
2

k = 5: ∇ f ( x⃗4 )=[−44 ,−42]


...

Note que a magnitude do vetor gradiente cresce de maneira descontrolada! Isso significa que o
método está divergindo ao invés de convergir! Em outras palavras, temos de escolher o tamanho do
passo de maneira muito cautelosa, uma vez que valores acima de um determinado limiar podem
fazer o método divergir.

Problema: Tamanho do passo muito pequeno → convergência muito lenta.


Tamanho do passo grande → não converge

A regra básica nos diz que se o tamanho do passo for fixo ao longo de todas as iterações, devemos
escolher um α suficientemente pequeno.

Pergunta: Podemos definir valores para α automaticamente? SIM.

Veremos duas abordagens: ajuste adaptativo e line search.

a) Ajuste adaptativo de α

Fixe um valor de 0< β <1 (taxa de decaimento) e inicie com α =1 .

1 2
Enquanto f ( ⃗x −∇ f ( ⃗x ))> f ( ⃗x )− α‖∇ f ( ⃗x )‖
2

Faça α =α β

b) Line search

Ideia: a cada iteração, encontrar o tamanho do passo ótimo η*k .

Algoritmo:

1. Faça k = 0 e defina a solução inicial x⃗k


2. Calcule o gradiente ∇ f ( x⃗k )
3. Calcule o tamanho do passo ótimo como:

η*k =arg min { f ( x⃗k − η ∇ f ( x⃗k ))}


η

ou seja, desejamos encontrar o η que minimiza a função na direção do negativo do gradiente


4. Calcule ⃗x k+1= x⃗k −η*k ∇ f ( x⃗k ) e faça k = k + 1
5. Repita os passos de 2 a 4 até que ‖∇ f ( x⃗k )‖< ϵ
Problema: a minimização no passo 3 pode ser muito complicada dependendo da função objetivo, o
que pode inviabilizar essa abordagem.

Solução: aproximação de Taylor de segunda ordem da função na vizinhança de x⃗k


O problema de minimização em questão é definido como:

η*k =arg min { f ( x⃗k − η ∇ f ( x⃗k )) } (como função de η )


η

Primeiramente, lembre que a expansão de Taylor de segunda ordem no caso 1D ao redor do zero é
dada por:

1 2
f (x)=f (0)+ f ' (0) x+ f ' ' (0) x
2

Analogamente, utilizando a expansão de Taylor de segunda ordem ao redor de η=0 , podemos


escrever:
2
d η d2
f ( x⃗k −η ∇ f ( x⃗k ))≈f ( x⃗k )+ η
[ dη ]
f ( x⃗k − η ∇ f ( x⃗k ))
η=0
+
[
2 d η2
f ( x⃗k −η ∇ f ( x⃗k ))
] η=0

Note que, de acordo com a regra da cadeia, temos:

d d
f ( x⃗k − η ∇ f ( x⃗k ))=f ' ( x⃗k − η ∇ f ( x⃗k )) ( x⃗ −η ∇ f ( x⃗k ))
dη dη k

Sabendo que a derivada da função f é por definição o seu gradiente:

d T
f ( x⃗k − η ∇ f ( x⃗k ))=−∇ f ( x⃗k − η ∇ f ( x⃗k )) ∇ f ( x⃗k )

o que, para η=0 , simplifica-se para:

d
[ dη ] T
f ( x⃗k −η ∇ f ( x⃗k )) =−∇ f ( x⃗k ) ∇ f ( x⃗k )
η=0
(- produto escalar do gradiente consigo mesmo)

Note ainda que:


2
d d T
2
f ( x⃗k −η ∇ f ( x⃗k ))=−

[ ∇ f ( x⃗k − η ∇ f ( x⃗k )) ∇ f ( x⃗k ) ]

Como apenas o primeiro termo é função de η e aplicando a regra da cadeia, temos:


2
d T 2
2
f ( x⃗k −η ∇ f ( x⃗k ))=∇ f ( x⃗k ) ∇ f ( x⃗k − η ∇ f ( x⃗k )) ∇ f ( x⃗k )

o que, para η=0 , simplifica-se para:

2
d
[ dη
2
f ( x⃗k − η ∇ f ( x⃗k ))
] η=0
T 2
=∇ f ( x⃗k ) ∇ f ( x⃗k )∇ f ( x⃗k )

onde ∇ 2 f ( x⃗k )=H ( x⃗k ) é, por definição, a matriz Hessiana. Assim, temos nossa expansão de
Taylor de segunda ordem, dada por:
η2
f ( x⃗k −η ∇ f ( x⃗k ))≈f ( x⃗k )−η ∇ f ( x⃗k ) ∇ f ( x⃗k )+ ∇ f ( x⃗k )T H ( x⃗k ) ∇ f ( x⃗k )
T
2

Portanto, o valor ótimo η*k que minimiza a função pode ser obtido derivando a aproximação da
função e igualando o resultado a zero:

d
f ( x⃗k − η ∇ f ( x⃗k ))≈−∇ f ( x⃗k )T ∇ f ( x⃗k )+ η ∇ f ( x⃗k )T H ( x⃗k ) ∇ f ( x⃗k )=0

Isolando η finalmente chegamos a:


T
* ∇ f ( x⃗k ) ∇ f ( x⃗k )
η= T
(gradiente descendente)
∇ f ( x⃗k ) H ( x⃗k )∇ f ( x⃗k )

T
* −∇ f ( x⃗k ) ∇ f ( x⃗k )
η= T
(gradiente ascendente)
∇ f ( x⃗k ) H ( x⃗k )∇ f ( x⃗k )

Em resumo, o método do gradiente descendente com Line search é dado pelo algoritmo a seguir.

Algoritmo

1. Faça k = 0 e defina a solução inicial x⃗k


2. Calcule o gradiente ∇ f ( x⃗k )
3. Calcule a matriz Hessiana H ( x⃗k )=∇ 2 f ( x⃗k )
4. Calcule o tamanho do passo ótimo como:
T
* ∇ f ( x⃗k ) ∇ f ( x⃗k )
η=k T
∇ f ( x⃗k ) H ( x⃗k )∇ f ( x⃗k )

4. Calcule ⃗x k+1= x⃗k −η*k ∇ f ( x⃗k ) e faça k = k + 1


5. Repita os passos de 2 a 5 até que ‖∇ f ( x⃗k )‖< ϵ

O resultado a seguir mostra um padrão interessante no método gradiente descendente com Line
Search: os vetores gradientes em duas iterações sucessivas do método são sempre ortogonais.

Teorema: No método iterativo gradiente descendente com Line Search, a direção de dois sucessivos
gradientes é ortogonal.

Prova:

Seja f : Rn → R uma função arbitrária, com mínimo em ⃗x * . Pelo gradiente descendente, temos:
*
⃗x k+1= x⃗k −ηk ∇ f ( x⃗k )

*
De acordo com a estratégia Line Search, nk =arg min f (⃗x k +1) . A condição necessária para a
minimização é:

d
f ( ⃗x k+1 )=0

o que implica em:

d
f ' ( ⃗x k+1 ) ⃗x =0
d η k +1

Pela definição de gradiente, temos:

d
∇ f ( ⃗x k +1)T ( x⃗ − η ∇ f ( x⃗k ))=0
d ηk k k

o que finalmente resulta em:

−∇ f (⃗x k +1)T ∇ f ( x⃗k )=0

indicando que os dois gradientes sucessivos são ortogonais (produto escalar é zero)
2 2
Ex: Encontre o ponto extremo da função f (x1 , x2 )=2 x 1 x 2+ 2 x 2−x 1−2 x 2 . É um ponto de
máximo ou de mínimo?

a) Utilize o método analítico

Condição necessária

∇ f (x 1 , x 2 )=0

2 x 2−2 x1 0
[ 2 x 1+ 2−4 x2 ] []
=
0

Da primeira equação temos que x 1=x 2

Resolvendo a segunda equação, chegamos em x 1=x 2=1

Note que a matriz Hessiana é dada por:

H ( x⃗k )=
[−22 −42 ]
Os autovalores são as soluções da equação característica:

det ( H− λ I)=0

Calculando o determinante:

2
|−2−2 λ −4− λ | 2
=(−2−λ )(−4− λ )−4=0→ λ +6 λ + 4=0

Os autovalores são:

−6+ √ 20
λ 1= =−0,764
2
−6− √20
λ 2= =−5,236
2

Como ambos são negativos, H é negativa semi-definida e portanto o ponto extremo é um máximo.

b) Gradiente ascendente com Line Search

O primeiro passo consiste justamente em calcular o gradiente:

2 x 2−2 x1
∇ f ( x⃗k )=
[ 2 x 1+ 2−4 x2 ]
Como a matriz Hessiana é constante, temos H ( x⃗k )=
[−22 −42 ] para todo k

k = 0: x⃗0=[0 , 0]
∇ f ( x⃗0 )T =[0 , 2]
T
−∇ f ( x⃗0 ) ∇ f ( x⃗0)
η 0= T
∇ f ( x⃗0) H ( x⃗0 )∇ f ( x⃗0)
0
η0=
− [0 , 2]
2 [] =−
4
=
−4 1
=
−2 2 0 4 −16 4
[0 , 2] [
2 −4 2 ][ ] [ ]
[ 0 , 2]
−8
1 1 1
4 [ ][ ]
x⃗1= x⃗0+ η0 ∇ f ( x⃗0 )=[ 0 , 0 ] + [ 0 ,2 ] =[ 0 ,0 ] + 0 , = 0 ,
2 2

1
k = 1: x⃗1= 0 ,
[ ]
2
∇ f ( x⃗1 )T =[1 , 0]
T
−∇ f ( x⃗1) ∇ f ( x⃗1 )
η1 = T
∇ f ( x⃗1) H ( x⃗1) ∇ f ( x⃗1 )
1
η1 =
−[ 1 , 0 ]
0 [] =
−1
=
−1 1
=
2 1 −2 2
[ 1 , 0] [
−2
2 −4 0 ][ ] [ ]
[1 , 0] −2
2
1 1 1 1
[ ] [ ]
x⃗2= x⃗1+ η1 ∇ f ( x⃗1)= 0 , + [ 1, 0 ] = ,
2 2 2 2

1 1
k = 2: x⃗2= ,
2 2[ ]
∇ f ( x⃗2 )T =[0 ,1]
T
−∇ f ( x⃗2) ∇ f ( x⃗2 )
η2 = T
∇ f ( x⃗2) H ( x⃗2) ∇ f ( x⃗2 )
0
η2 =
−[ 0 , 1 ]
1 []=
−1
=
−1 1
=
2 0 2 −4 4
[ 0 , 1] −2
[
2 −4 1 ][ ] [ ]
[ 0 ,1 ]
−4
1 1 1 1 3
x⃗3= x⃗2+ η2 ∇ f ( x⃗2)=
[ ] [ ]
, + [ 0 ,1 ] = ,
2 2 4 2 4

1 3
k = 3: x⃗3=
[ ],
2 4
1
∇ f ( x⃗3 )T =
2 [ ]
,0
T
−∇ f ( x⃗3) ∇ f ( x⃗3)
η3 = T
∇ f ( x⃗3) H ( x⃗3 ) ∇ f ( x⃗3 )
1/2
η3 =
[ ]
− [ 1/2 , 0 ]
0
=
−1 /4
=
−1 /4 1
=
2 1 −1/2 2
[ 1/2 , 0 ] −2
[ ][ ]
2 −4 0 [ ]
/2 [ 1/2 ,0 ] −1
1
1 3 1 1 3 3
[ ] [ ][ ]
x⃗4= x⃗3 + η3 ∇ f ( x⃗3 )= , +
2 4 2 2
,0 = ,
4 4

3 3
k = 4: x⃗4=
[ ]
,
4 4
1
[ ]
∇ f ( x⃗4 )T = 0 ,
2
T
−∇ f ( x⃗4 ) ∇ f ( x⃗4 )
η 4= T
∇ f ( x⃗4 ) H ( x⃗4 )∇ f ( x⃗4 )
0
η 4=
[ ]
−[ 0 ,1 /2 ]
1/2
=
−1/4
=
−1/4 1
=
−2 2 0 1 −1 4
[ 0 ,1 /2 ] [ ][ ]
2 −4 1/2 [ ] [ 0 ,1/2 ]
−2
3 3 1 1 3 7
[ ] [ ][ ]
x⃗5= x⃗4 + η4 ∇ f ( x⃗4 )= , + 0 , = ,
4 4 4 2 4 8

3 7
k = 5: x⃗5=
[ ],
4 8
1
∇ f ( x⃗5 ) =
T
4 [ ]
,0
T
−∇ f ( x⃗5) ∇ f ( x⃗5)
η5 = T
∇ f ( x⃗5) H ( x⃗5 ) ∇ f ( x⃗5 )
− [ 1/4 , 0 ] 1 /4
η5 =
[ ] = −1/16 = −1/16 = 1
0
−1/8 2
[ 1/4 , 0 ] [−2 2 ][1 /4 ] [ 1/ 4 ,0 ] [−1 /2 ]
2 −4 0 1 /2

5 5 [ 34 78 ] 12 [ 14 , 0]=[ 78 , 78 ]
x⃗ = x⃗ + η ∇ f ( x⃗ )= , +
6 5

7 7
k = 6: x⃗6=
[ ]
,
8 8
1
∇ f ( x⃗6 )T = 0 ,
[ ] 4
−∇ f ( x⃗6 )T ∇ f ( x⃗6)
η6 =
∇ f ( x⃗6)T H ( x⃗6 )∇ f ( x⃗6)
0
η6 =
[ ] = −1/16 =−1/16 = 1
− [ 0 , 1/4 ]
1/4
−1/4 4
[ 0 , 1/4 ] [−2 2 ][ 0 ] [ 0 , 1/ 4 ] [1 /2 ]
2 −4 1 /4 −1

6 6 [ 78 78 ] 14 [ 14 ] [ 78 1516 ]
x⃗ = x⃗ + η ∇ f ( x⃗ )= , + 0 , = ,
7 6

7 15
k = 7: x⃗7=
[ ,
8 16 ]
1
∇ f ( x⃗7 ) =
T
8
,0
[ ]T
−∇ f ( x⃗7 ) ∇ f ( x⃗7)
η7 = T
∇ f ( x⃗7) H ( x⃗7 )∇ f ( x⃗7)
1/8
η7 =
− [ 1/8 , 0 ]
[ ]
0
=
−1/64
=
−1 /64 1
=
2 1/8 −1/32 2
[ 1/8 , 0 ] −2
[ ][ ]
2 −4 0 [ ] [ 1/8 ,0 ] −1 /4
1 /4
7 15 1 1 15 15
[ ] [ ][ ]
x⃗8= x⃗7 + η7 ∇ f ( x⃗7 )= ,
8 16 2 8
+ ,0 = ,
16 16

Note que nessa iteração a solução já está bem próxima da solução ótima ⃗x *=[1 ,1] .

É natural nos perguntarmos em que condições o método do gradiente descendente converge para a
solução ótima. Além disso, qual é a taxa de convergência do método? Quando o método é mais
rápido? Essas perguntas serão respondidas na próxima aula, onde iremos estudar garantias teóricas
para a convergência do método do gradiente descendente.
Aula 5: Convergência do gradiente descendente/ascendente

O objetivo desse estudo é fornecer garantias teóricas do porque o método do gradiente


descendente/ascendente de fato funciona, ou seja, desejamos entender porque ele converge para os
pontos extremos. Para estudarmos a convergência do método gradiente descendente precisamos
definir o que é uma função suave, uma vez que essa é uma condição muito importante para o bom
comportamento do método.

Def: Uma função f : Rn → R é L-suave se e somente se:

‖∇ f (⃗x )−∇ f (⃗y )‖≤L‖⃗x −⃗y‖ ∀ ⃗x , ⃗y∈Rn

Em outras palavras, são funções bem comportadas, no sentido de que a diferença entre os gradientes
é sempre limitada superiormente (não tem variação abrupta dos gradientes). Uma implicação é que
pontos próximos (vizinhos no espaço) sempre terão gradientes similares.

O lema a seguir será útil na demonstração do teorema da convergência do método do gradiente


descendente.

Lema: Se f é uma função L-suave, então ∀ ⃗x , ⃗y∈ Rn temos:

L
f ( ⃗y)≤f ( ⃗x )+ ∇ f ( ⃗x )T ( ⃗y −⃗x )+ ‖⃗y −⃗x‖2
2

O teorema a seguir garante a convergência do método do gradiente descendente.

Teorema: Se f é uma função L-suave e f * =min f ( x ) , então o método do gradiente descendente


2
com passo fixo η< converge para um ponto estacionário.
L
Prova:

Seja ⃗x + o resultado de 1 iteração do método gradiente descendente, ou seja:


+
⃗x =⃗x−η ∇ f ( ⃗x )

Então, pelo lema anterior, temos:

L
f ( ⃗x+ )≤f ( ⃗x )+ ∇ f ( ⃗x )T ( ⃗x+ −⃗x )+ ‖⃗x +−⃗x‖2
2

o que pode ser expresso por:

L
f ( ⃗x+ )≤f ( ⃗x )+ ∇ f ( ⃗x )T ( ⃗x −η ∇ f ( ⃗x )−⃗x )+ ‖⃗x − η ∇ f ( ⃗x )−⃗x‖2
2

Simplificando os termos comuns, temos:

+ η2 L
2 2
f (⃗x )≤f (⃗x )− η‖∇ f (⃗x )‖ + ‖∇ f (⃗x )‖
2

Colocando η em evidência:
ηL
f (⃗x+ )≤f (⃗x )− η 1− ( 2 )
‖∇ f (⃗x )‖2

o que finalmente nos leva a:

1
‖∇ f ( ⃗x )‖2 ≤ ( f (⃗x )−f (⃗x + ))
ηL
(
η 1−
2 )
Somando ambos os lados da equação anterior para todas iterações k = 0,…, n:

1
‖∇ f ( x⃗0 )‖2 +...+‖∇ f ( x⃗n)‖2≤ [ f ( x⃗0)−f ( x⃗1 )+ f ( x⃗1 )−f ( x⃗2)+...+f ( x ⃗n−1 )−f ( x⃗n) ]
ηL
(
η 1−
2 )
Note que o somatório do lado direito define uma soma telescópica e portanto os termos
intermediários são todos simplificados:
n
1 1
∑‖∇ f ( x⃗k )‖2≤ ηL
[ f ( x⃗0 )−f ( x⃗n)]≤
ηL
[ f ( x⃗0 )−f * ]
k=0
η 1−( 2 ) (
η 1−
2 )
Isso significa que o somatório dos gradientes converge para um valor finito! Para que isso aconteça,
a norma do gradiente deve diminuir a cada iteração k, ou seja:

lim ‖∇ f ( x⃗k )‖2=0


k→∞

o que implica em:

lim ∇ f ( x⃗k )=⃗


0
k→∞

que é a condição necessária para o ponto extremo. Portanto, o método do gradiente descendente
converge. A pergunta que surge é: quão rápido se dá essa convergência? Precisamos responder
como (f ( x⃗k )−f * )→0 e ‖x⃗k −⃗x *‖→0 . Para isso, precisamos de mais alguns resultados
teóricos.

Teorema: Se f (⃗x ) é uma função tal que H (⃗x )=∇ 2 f (⃗x )≽m I para todo ⃗x , ou seja, a
forma quadrática ⃗x T H ⃗x ≥m (o menor autovalor de H está limitado em m), então:

T m 2 n
f ( ⃗y)≥f ( ⃗x )+ ∇ f ( ⃗x ) ( ⃗y −⃗x )+ ‖⃗y −⃗x‖ ∀ ⃗x , ⃗y∈R
2

Prova:

É possível aproximar f (⃗y) ao redor de f (⃗x ) por uma expansão de Taylor de segunda ordem.

1
f ( ⃗y)=f ( ⃗x )+ ∇ f ( ⃗x )T ( ⃗y −⃗x )+ ( ⃗y−⃗x )T ∇ 2 f ( ⃗x )( ⃗y −⃗x )
2
Como H (⃗x )=∇ 2 f (⃗x )≽m I , segue que:

m
f ( ⃗y)≥f ( ⃗x )+ ∇ f ( ⃗x )T ( ⃗y −⃗x )+ ‖⃗y −⃗x‖2 (*)
2

Note que o lado direito de (*) é uma função quadrática de ⃗y para ⃗x fixo. Desejamos
encontrar quem é o y⃗m que minimiza o lado direito de (*). Derivando e igualando a zero, isto é,
calculando o gradiente em relação a ⃗y , temos:

∇ f (⃗x )+m( y⃗m−⃗x )=0

o que nos leva a:

1
y⃗m=⃗x − ∇ f ( ⃗x ) (maior limite inferior)
m

Da equação (*), sabemos que:

T m 2
f ( ⃗y)≥f ( ⃗x )+ ∇ f ( ⃗x ) ( y⃗m −⃗x )+ ‖ y⃗m −⃗x‖
2

o que nos leva a:


2
T 1 m 1
f (⃗y)≥f ( ⃗x )+ ∇ f (⃗x ) (⃗x − ∇ f (⃗x )−⃗x )+ ‖⃗
⃗x − ∇ f ( ⃗x )−⃗x‖
m 2 m

e após algumas simplificações:

1 1
f ( ⃗y)≥f ( ⃗x )− ‖∇ f ( ⃗x )‖2+ ‖∇ f ( ⃗x )‖2
m 2m

Por fim, chegamos a:

1 2
f ( ⃗y)≥f ( ⃗x )− ‖∇ f ( ⃗x )‖ (**)
2m
n
Como a equação (**) vale para todo ⃗x , ⃗y ∈R , vale também para o valor que minimiza a função
f, ou seja f (⃗x* ) :

* 1 2
f ( ⃗x )≥f ( ⃗x )− ‖∇ f ( ⃗x )‖
2m

Sendo assim, na k-ésima iteração do gradiente descendente, temos:

* 1 2
f ( x⃗k )−f ( ⃗x )≤ ‖∇ f ( x⃗k )‖ (A)
2m

Isso significa que se o gradiente é pequeno num ponto, então o valor da função naquele ponto é
próximo do mínimo/máximo da função.
Iremos estudar agora como ‖x⃗k −⃗x *‖→0 . Podemos derivar um limite para ‖x⃗k −⃗x *‖ , isto é a
distância entre ⃗x e um ponto ótimo ⃗x * . Aplicando a equação (*) com ⃗y=⃗x * , temos:

m
f ( ⃗x* )≥f ( ⃗x )+ ∇ f (⃗x )T ( ⃗x *−⃗x )+ ‖⃗x*− ⃗x‖2
2

Pela desigualdade de Cauchy-Scharwz:

|∇ f (⃗x )T (⃗x*−⃗x )|≤‖∇ f ( ⃗x )‖‖⃗x *−⃗x‖

Assim, podemos escrever:

* * m * 2
f ( ⃗x )≥f ( ⃗x )−‖∇ f ( ⃗x )‖‖⃗x −⃗x‖+ ‖⃗x −⃗x‖
2

Mas como f (⃗x* )≤f (⃗x ) , devemos obrigatoriamente ter:

m
−‖∇ f ( ⃗x )‖‖⃗x* −⃗x‖+ ‖⃗x *−⃗x‖2 ≤0
2

Dividindo ambos os lados por ‖x⃗k −⃗x *‖ :

m *
−‖∇ f ( ⃗x )‖+ ‖⃗x −⃗x‖≤0
2

o que nos leva a:

2
‖⃗x *−⃗x‖≤ ‖∇ f ( ⃗x )‖
m

Essa desigualdade nos diz que na k-ésima iteração a solução ótima encontra-se numa circunferência
centrada em x⃗k com raio proporcional à norma do gradiente! Quanto menor a norma do
gradiente, mais próximos estamos da solução ótima.

Teorema: Se f (⃗x ) é uma função tal que H (⃗x )=∇ 2 f (⃗x )≼MI para todo ⃗x , ou seja, a
forma quadrática ⃗x T H ⃗x ≤M (o maior autovalor de H está limitado em M), então:

T M 2
f ( ⃗y)≤f ( ⃗x )+ ∇ f ( ⃗x ) ( ⃗y −⃗x )+ ‖⃗y −⃗x‖
2

Prova:

É possível aproximar f (⃗y) ao redor de f (⃗x ) por uma expansão de Taylor de segunda ordem.

T 1 T 2
f ( ⃗y)=f ( ⃗x )+ ∇ f ( ⃗x ) ( ⃗y −⃗x )+ ( ⃗y−⃗x ) ∇ f ( ⃗x )( ⃗y −⃗x )
2
2
Como H (⃗x )=∇ f (⃗x )≼M I , segue que:

T M 2
f ( ⃗y)≤f ( ⃗x )+ ∇ f ( ⃗x ) ( ⃗y −⃗x )+ ‖⃗y −⃗x‖ (*)
2
Note que o lado direito de (*) é uma função quadrática de ⃗y para ⃗x fixo. Desejamos
encontrar quem é o y⃗M que minimiza o lado direito de (*). Derivando e igualando a zero, isto é,
calculando o gradiente em relação a ⃗y , temos:

∇ f (⃗x )+ M ( y⃗M −⃗x )=0

o que nos leva a:

1
y⃗M =⃗x − ∇ f ( ⃗x ) (menor limite superior )
M

Dos dois teoremas enunciados anteriormente, podemos escrever que:


n
mI≼H ( ⃗x )≼MI ∀ ⃗x ∈R

M
Def: A definição K= é um limite superior para o número de condição da matriz Hessiana
m
H (⃗x ) , ou seja, para a razão entre o maior e o menor autovalores de H (⃗x ) .
Se K≈1 , o problema é bem condicionado.
Se K ≫1 , o problema é mal condicionado (pequenas perturbações nos dados nos levam a
soluções completamente diferentes)

Mesmo que na prática não saibamos os valores de m e M, podemos calcular a matriz Hessiana e
obter o maior e menor autovalores. Veremos a seguir que esses autovalores são fundamentais na
convergência do gradiente descendente.

Teorema: O método do gradiente descendente em funções fortemente convexas utilizando um


1
passo η= converge linearmente, ou seja:
M
* *
f (⃗x k+1 )−f (⃗x )≤c(f (⃗x k )−f (⃗x ))

ou ainda:

ϵ k+1≤c ϵ k

Prova:

Seja ⃗x +=⃗x−η ∇ f ( ⃗x ) . Sabemos que:

1
(
f (⃗x+ )=f (⃗x − η ∇ f (⃗x ))≤f ⃗x −
M )
∇ f (⃗x ) (menor limite superior)

Note que utilizarmos a estratégia Line Search é possível escolher η de modo a minimizar o valor
de f na direção em questão.

1
Fazendo ⃗y=⃗x − ∇ f ( ⃗x ) e aplicando (*), temos:
M
2
1 1 M 1
+
(M ) M (
f (⃗x )≤f ⃗x − ∇ f (⃗x ) ≤f (⃗x )+ ∇ f (⃗x )T ⃗x − ∇ f (⃗x )−⃗x +
2 ) ‖ ‖
⃗x − ∇ f (⃗x )−⃗x
M
o que é equivalente a:
2
1 M 1
f (⃗x+ )≤f (⃗x )+ ∇ f (⃗x )T − ( M
∇ f (⃗x ) +) ‖
2
− ∇ f (⃗x )
M ‖
Simplificando os termos:

+ 1 2 1 2
f ( ⃗x )≤f ( ⃗x )− ‖∇ f ( ⃗x )‖ + ‖∇ f ( ⃗x )‖
M 2M

E por fim, agrupando:

+ 1 2
f ( ⃗x )≤f ( ⃗x )− ‖∇ f ( ⃗x )‖
2M

Subtraindo f (⃗x* ) de ambos os lados:

1
f ( ⃗x+ )−f ( ⃗x *)≤f ( ⃗x )−f ( ⃗x *)− ‖∇ f ( ⃗x )‖2 (#)
2M

Mas da equação (A), sabemos que:

1
f ( ⃗x )−f ( ⃗x * )≤ ‖∇ f ( ⃗x )‖2
2m

o que implica em:

‖∇ f ( ⃗x )‖2 ≥2m( f (⃗x )−f (⃗x *)) ($)


*
ou seja, o menor valor possível para a norma do vetor gradiente é 2 m(f (⃗x )−f (⃗x )) .
Substituindo ($) na equação (#), temos:

1
f ( ⃗x+ )−f ( ⃗x *)≤f ( ⃗x )−f ( ⃗x *)− 2 m(f ( ⃗x )−f ( ⃗x *))
2M

o que após algumas simplificações torna-se:

m
f (⃗x+ )−f (⃗x *)≤ 1− ( M )
(f (⃗x )−f ( ⃗x* ))

e portanto temos o resultado final de que:

ϵ k+1≤c ϵ k

Note que, na prática não sabemos os valores de m e M, mas podemos substituí-los pelo menor e
maior autovalores da matriz Hessiana. Lembrando que:

M λmax
K= =
m λmin
a constante c que controla a taxa de convergência linear é dada por:

1
c=1−
K

Neste momento, algumas observações importantes devem ser feitas. Primeiro, note que no caso de
K tender a 1, ou seja, o maior e menor autovalores são muito próximos, o gradiente descendente
converge em um único passo, pois:

f (⃗x+ )−f (⃗x *)≤0 (não pode ser negativo, então erro é zero em apenas uma iteração!)

Na prática, quanto mais próximo de 1 for K, mais rápida é a convergência. Por outro lado, quanto
maior for K, mais lenta a convergência.

Vimos nesta aula garantias teóricas de que o gradiente descende de fato converge para um ponto
extremo linearmente. Ao longo do curso, veremos que existem métodos mais rápidos como o
método de Newton multivariado e o método do gradiente conjugado.
Aula 6: O método de Newton multivariado

O método do gradiente descendente apesar de garantir a obtenção da solução ótima, possui uma
taxa de convergência lenta (linear). Podemos generalizar o método de Newton para funções de
múltiplas variáveis. Seja f : Rn → R uma função arbitrária. Usando uma expansão de Taylor de
segunda ordem podemos expressá-la como:

T 1 T
f ( x⃗k + p⃗k )≈f ( x⃗k )+ ∇ f ( ⃗x ) p⃗k + p⃗k H ( x⃗k ) p⃗k
2

A ideia consiste em encontrar a direção do vetor p⃗k que minimiza a função. Para isso, devemos
derivar em relação a p⃗k e igualar o resultado a zero:

∂ f ( x⃗ + p⃗ )=∇ f ( x⃗ )+ H ( x⃗ ) p⃗ =0
k k k k k
∂ p⃗k

Isolando p⃗k chegamos em:

p⃗k =−H −1 ( x⃗k )∇ f ( x⃗k )

Portanto, a iteração do método de Newton multivariado fica:


−1
⃗x k+1= x⃗k −H ( x⃗k ) ∇ f ( x⃗k )

Note que é exatamente a mesma expressão do caso 1D, onde a derivada primeira f’ é substituída
pelo vetor gradiente e a segunda derivada f’’ pela matriz Hessiana. Outra observação importante é
que no método de Newton, o sinal negativo da expressão é imutável, isto é, independente do
problema ser de minimização ou maximização, o sinal de menos permanece (essa é uma pequena
confusão que frequentemente ocorre com quem é familiarizado com o gradiente descendente.

Ex: maximizar f (x1 , x2 )=4 x 1+6 x 2−2 x 21−2 x1 x 2−2 x 22

a) Método analítico

O gradiente é dado por:

∂f
∇ f (⃗x )=
[ ][
∂ x1
∂f
∂ x2
=
4−4 x1−2 x 2
6−2 x 1−4 x 2 ]
o que equivale ao sistema linear a seguir:

4 x 1 +2 x2 =4
2 x1 + 4 x 2=6
Multiplicando a segunda equação por -2 e somando com a primeira resulta em:

−6 x 2=−12+4=−8
4 1
o que nos leva a x 2=
. Substituindo na segunda equação, é fácil verificar que x 1= .
3 3
1 4
*
Portanto a solução ótima é dada por ⃗x = ,
3 3
.[ ]
b) Gradiente ascendente

Calculando a matriz Hessiana, temos:

H (⃗x )=[−4
−2 −4 ]
−2

1
Iremos considerar α = e x⃗0=[1 , 1] .
4

k = 1: ∇ f ( x⃗0 )=[−2 , 0]
1 1
x⃗1=[1 ,1]+ [−2, 0]= , 1
4 2 [ ]
k = 2: ∇ f ( x⃗1 )=[0 , 1]
1 1 1 5
[ ]
x⃗2= , 1 + [0 , 1]= ,
2 4 2 4 [ ]
1
k = 3: [ ]
∇ f ( x⃗2 )= − , 0
2
1 5 1 1 3 5
[ ] [
x⃗3= , + − ,0 = ,
2 4 4 2 8 4 ][ ]
1
k = 4: [ ]
∇ f ( x⃗3 )= 0 ,
4
1 5 1 1 3 21
[ ] [
x⃗4= , + 0 , = ,
2 4 4 4 8 16 ][ ]
1
k = 5: [ ]
∇ f ( x⃗4 )= − , 0
8
3 21 1 1 11 21
[ ] [
x⃗5= , + − ,0 =
8 16 4 8
,
][
32 16 ]
1
k = 6: [ ]
∇ f ( x⃗5 )= 0 ,
16
11 21 1 1 11 85
x⃗6=
[ ] [
, + 0,
32 16 4 16
= ,
32 64 ][ ]

Note que na sexta iteração a solução numérica já é próxima da solução ótima (porém ainda não
convergiu para o valor exato!).

1 4
*
x=
[ ]
, =[0.333 , 1.333]
3 3
11 85
x⃗6=
[ ,
32 64 ]
=[0.343 ,1.328]

c) Método de Newton

A matriz inversa da Hessiana deve satisfazer H (⃗x ) H−1 (⃗x )=I , o que nos leva ao sistema
(lembrando que a inversa de uma matriz simétrica também é simétrica):

−2 a b 1 0
[−4
−2 −4 ][ b c ] [ 0 1 ]
=

que na forma de equações é dado por:

−4 a−2b=1
−4 b−2 c=0
−2 a−4 b=0
−2 b−4 c=1

Da terceira equação, temos que a=−2 b . Substituindo na primeira equação, temos:

8 b−2b=1

1 4
o que implica em b=
. Substituindo esse valor na segunda equação, temos 2 c=− , ou
6 6
1 4 1
seja, c=− . Por fim, chegamos que −2 a= , o que nos leva a a=− . Portanto, a
3 6 3
matriz inversa da Hessiana é dada por:

1 1
−1
H (⃗x )=
1
6
3

6
1
3
[ ]

Iremos considerar a solução inicial como x⃗0=[1 , 1] .

k = 1: ∇ f ( x⃗0 )=[ −2 , 0 ]
1 1 2
−1
H ( x⃗0) ∇ f ( x⃗0 )=

2 2
1
6
3 6 −2

1 5
3
[ ][ ] [ ]

1 0
= 3

2
3

[
x⃗1=[ 1, 1 ] − ,− = ,
3 3 3 3 ][ ]
2 4
k = 2: [
∇ f ( x⃗1 )= − ,
3 3 ]
1 1 2

1 5
[ ][ ] [ ]

H−1 ( x⃗1) ∇ f ( x⃗1 )= 3 6

1
1
6

1 4

1 4
3 3
0
3 = 1
3

[ ][ ][ ]
x⃗1= , − 0 , = ,
3 3 3 3 3

Com apenas duas iterações, o método de Newton converge para a solução exata.

Mas, porque isso ocorre?

O método do gradiente descendente possui taxa de convergência linear, ou seja, o erro no próximo
passo depende linearmente do erro atual.

Já o método de Newton possui taxa de convergência quadrática, ou seja, o erro no próximo passo
depende do quadrado do erro atual (decai mais rápido). Demonstramos em aulas anteriores que a
convergência do método de Newton é quadrática no caso 1D, então não iremos repetir o processo
aqui novamente. Apenas apresentaremos um teorema que garante a taxa de convergência quadrática
do método de Newton multivariado. Por outro lado, o custo computacional do método de Newton é
maior pois exige o cálculo da matriz Hessiana e sua inversão!

O método de Newton pode se tornar mais eficiente se evitarmos o cálculo da inversa da matriz
Hessiana. Note que de acordo com a iteração do método de Newton, temos:
−1
⃗x k+1− x⃗k =−H ( x⃗k ) ∇ f ( x⃗k )

Podemos renomear a diferença no lado direito fazendo p⃗k =⃗x k +1− x⃗k , o que nos leva a:

−1
p⃗k =−H ( x⃗k ) ∇ f ( x⃗k )

Multiplicando ambos os lados pela matriz Hessiana H ( x⃗k ) , chegamos em:

H ( x⃗k ) p⃗k =−∇ f ( x⃗k )

o que define um sistema de equações. Resolver um sistema de equações em geral é menos custoso
do que inverter uma matriz. Dada a solução do sistema, como p⃗k =⃗x k +1− x⃗k , basta fazermos:

⃗x k+1= x⃗k + p⃗k

uma vez que x⃗k é conhecido na iteração k.

Algoritmo: método de Newton

1. Faça k =0 e x⃗k ser a solução inicial.


2. Calcule o gradiente no ponto ∇ f ( x⃗k )
3. Calcule a matriz Hessiana no ponto H ( x⃗k )
4. Resolva o sistema linear para encontrar a direção de busca: H ( x⃗k ) p⃗k =−∇ f ( x⃗k )
5. Faça ⃗x k+1= x⃗k + p⃗k e k =k +1
6. Repita os passos 2 a 5 até que ‖∇ f ( x⃗k )‖≤ϵ
Podemos adicionar um parâmetro α k para controlar o tamanho do passo e utilizar a estratégia
Line Search para calcular seu valor ótimo.

Line Search no método de Newton

A ideia consiste em adotar uma estratégia similar ao que fizemos na descida do gradiente.
Desejamos a cada passo obter o tamanho do passo que satisfaz:

α k =arg min {f ( x⃗k + α p⃗k ) }


α

Utilizando uma expansão de Taylor de segunda ordem, temos:

2 2
d d
f ( x⃗k + α p⃗k )≈ f ( x⃗k )+ α[dα
f ( x⃗k + α p⃗k ) ] α=0
+ α
[
2 d α2
f ( x⃗k + α p⃗k )
]
α =0

Note que:

d d T
f ( x⃗k + α p⃗k )=f ' ( x⃗k + α p⃗k ) ( x⃗k + α p⃗k )=∇ f ( x⃗k + α p⃗k ) p⃗k
dα dα
T
o que para α =0 resulta em ∇ f ( x⃗k ) p⃗k . Note ainda que:

2
d d
2
f ( x⃗k + α p⃗k )=
d
[ ∇ f ( x⃗k + α p⃗k)T p⃗k ]= p⃗k T ∇ 2 f ( x⃗k +α p⃗k ) p⃗k
dα α
T 2 T
o que para α =0 resulta em p⃗k ∇ f ( x⃗k ) p⃗k = p⃗k H ( x⃗k ) p⃗k . Assim, podemos escrever a
seguinte aproximação:
2
f ( x⃗k + α p⃗k )≈ f ( x⃗k )+ α ∇ f ( x⃗k )T p⃗k + α p⃗k T H ( x⃗k ) p⃗k
2

e portanto, para encontrar o valor de α que minimiza a função devemos ter:

∂ T T
∂ α f ( x⃗k + α p⃗k )=∇ f ( x⃗k ) p⃗k + α p⃗k H ( x⃗k ) p⃗k =0

o que nos leva a:

α p⃗k T H ( x⃗k ) p⃗k =−∇ f ( x⃗k )T p⃗k

e finalmente temos:
T
−∇ f ( x⃗k ) p⃗k
αk= T
p⃗k H ( x⃗k ) p⃗k
Algoritmo: método de Newton com Line Search

1. Faça k =0 e x⃗k ser a solução inicial.


2. Calcule o gradiente no ponto ∇ f ( x⃗k )
3. Calcule a matriz Hessiana no ponto H ( x⃗k )
4. Resolva o sistema linear para encontrar a direção de busca: H ( x⃗k ) p⃗k =−∇ f ( x⃗k )
T
−∇ f ( x⃗k ) p⃗k
5. Calcule α k = T (tamanho do passo ótimo)
p⃗k H ( x⃗k ) p⃗k
6. Faça ⃗x k+1= x⃗k + p⃗k e k =k +1
7. Repita os passos 2 a 6 até que ‖∇ f ( x⃗k )‖≤ϵ

Ex: maximize f (x1 , x2 )=2 x 1 x 2+ 2 x 2−x 21−2 x 22 utilizando a solução inicial x⃗0=[0 , 0] e

O primeiro passo consiste justamente em calcular o gradiente:

2 x 2−2 x1
∇ f ( x⃗k )=
[ 2 x 1+ 2−4 x2 ]
Como a matriz Hessiana é constante, temos H ( x⃗k )=[−22 −42 ] para todo k.

a) o método do gradiente ascendente com a estratégia Line Search.

Como visto na aula anterior, as 8 primeiras iterações são dadas por:

k = 0: x⃗0=[0 , 0]
T
∇ f ( x⃗0 ) =[0 , 2]
T
−∇ f ( x⃗0 ) ∇ f ( x⃗0)
η 0= T
∇ f ( x⃗0) H ( x⃗0 ) ∇ f ( x⃗0)
0
η0=
− [0 , 2]
2 [] =−
4
=
−4 1
=
−2 2 0 4 −16 4
[0 , 2] [
2 −4 2 ][ ] [ ]
[ 0 , 2]
−8
1 1 1
4 [ ][ ]
x⃗1= x⃗0+ η0 ∇ f ( x⃗0 )=[ 0 , 0 ] + [ 0 ,2 ] =[ 0 ,0 ] + 0 , = 0 ,
2 2

1
k = 1: x⃗1= 0 ,
[ ]
2
∇ f ( x⃗1 )T =[1 , 0]
T
−∇ f ( x⃗1) ∇ f ( x⃗1 )
η1 = T
∇ f ( x⃗1) H ( x⃗1) ∇ f ( x⃗1 )
1
η1 =
−[ 1 , 0 ]
0 []=
−1
=
−1 1
=
2 1 −2 2
[ 1 , 0] −2
[
2 −4 0 ][ ] [ ]
[1 , 0] −2
2
1 1 1 1
[ ] [ ]
x⃗2= x⃗1+ η1 ∇ f ( x⃗1)= 0 , + [ 1, 0 ] = ,
2 2 2 2
1 1
k = 2: x⃗2=
[ ] ,
2 2
T
∇ f ( x⃗2 ) =[0 ,1]
T
−∇ f ( x⃗2) ∇ f ( x⃗2 )
η2 = T
∇ f ( x⃗2) H ( x⃗2) ∇ f ( x⃗2 )
0
η2 =
−[ 0 , 1 ]
[]
1
=
−1
=
−1 1
=
2 0 2 −4 4
[ 0 , 1] [
−2
2 −4 1 ][ ] [ ]
[ 0 ,1 ]
−4
1 1 1 1 3
[ ] [ ]
x⃗3= x⃗2+ η2 ∇ f ( x⃗2)= , + [ 0 ,1 ] = ,
2 2 4 2 4

1 3
k = 3: x⃗3=[ ] ,
2 4
1
T
∇ f ( x⃗3 ) =
2
,0
[ ]
−∇ f ( x⃗3)T ∇ f ( x⃗3)
η3 =
∇ f ( x⃗3)T H ( x⃗3 )∇ f ( x⃗3 )
1/2
η3 =
[ ]
− [ 1/2 , 0 ]
0
=
−1 /4
=
−1 /4 1
=
−2 2 1 /2 −1 −1/2 2
[ 1/2 , 0 ] [ ][ ]
2 −4 0 [ ] [ 1/2 ,0 ]
1
1 3 1 1 3 3
[ ] [ ][ ]
x⃗4= x⃗3 + η3 ∇ f ( x⃗3 )= , +
2 4 2 2
,0 = ,
4 4

3 3
k = 4: x⃗4=
[ ]
,
4 4
1
[ ]
T
∇ f ( x⃗4 ) = 0 ,
2
T
−∇ f ( x⃗4 ) ∇ f ( x⃗4 )
η 4= T
∇ f ( x⃗4 ) H ( x⃗4 ) ∇ f ( x⃗4 )
−[ 0 ,1 /2 ] 0
η 4=
[ ] 1/2
=
−1/4
=
−1/4 1
=
2 0 1 −1 4
[ 0 ,1 /2 ] [ ][ ]
−2
2 −4 1/2 [ ] [ 0 ,1/2 ]
−2
3 3 1 1 3 7
[ ] [ ][ ]
x⃗5= x⃗4 + η4 ∇ f ( x⃗4 )= , + 0 , = ,
4 4 4 2 4 8

3 7
k = 5: x⃗5=
[ ] ,
4 8
1
T
∇ f ( x⃗5 ) =
4
,0
[ ]
−∇ f ( x⃗5)T ∇ f ( x⃗5)
η5 =
∇ f ( x⃗5)T H ( x⃗5 )∇ f ( x⃗5 )
− [ 1/4 , 0 ] 1 /4
η5 =
[ ] = −1/16 = −1/16 = 1
0
−1/8 2
[ 1/4 , 0 ] [−2 2 ][1 /4 ] [ 1/ 4 ,0 ] [−1 /2 ]
2 −4 0 1 /2
3 7 1 1 7 7
x⃗ = x⃗ + η ∇ f ( x⃗ )=[ , ] + [ , 0 ]=[ , ]
6 5 5 5
4 8 2 4 8 8

7 7
k = 6: x⃗6=
[ ] ,
8 8
1
∇ f ( x⃗6 )T = 0 ,
[ ]
4
T
−∇ f ( x⃗6 ) ∇ f ( x⃗6)
η6 = T
∇ f ( x⃗6) H ( x⃗6 ) ∇ f ( x⃗6)
0
η6 =
[ ] = −1/16 =−1/16 = 1
− [ 0 , 1/4 ]
1/4
−1/4 4
[ 0 , 1/4 ] [−2 2 ][ 0 ] [ 0 , 1/ 4 ] [1 /2 ]
2 −4 1 /4 −1
7 7 1 1 7 15
6 6 [ 8 8 ] 4 [ 4 ] [ 8 16 ]
x⃗ = x⃗ + η ∇ f ( x⃗ )= , + 0 , = ,
7 6

7 15
k = 7: x⃗7=
[ ,
8 16 ]
1
∇ f ( x⃗7 )T =
8
,0 [ ]
T
−∇ f ( x⃗7 ) ∇ f ( x⃗7)
η7 = T
∇ f ( x⃗7) H ( x⃗7 ) ∇ f ( x⃗7)
1/8
η7 =
− [ 1/8 , 0 ]
[ ]
0
=
−1/64
=
−1 /64 1
=
−1/32 2
[ 1/8 , 0 ] −2 2 1/8 [ 1/8 ,0 ] −1 /4
[ ][ ] [ ]
2 −4 0 1 /4
7 15 1 1 15 15
[ ] [ ][ ]
x⃗8= x⃗7 + η7 ∇ f ( x⃗7 )= ,
8 16 2 8
+ ,0 = ,
16 16

Note que nessa iteração a solução está próxima da solução ótima ⃗x *=[1 ,1] , mas ainda são
necessárias mais iterações para a convergência ao valor exato.

b) o método de Newton com a estratégia Line Search.

k = 0: x⃗0=[0 , 0]
T
∇ f ( x⃗0 ) =[0 , 2]
H ( x⃗0) p⃗0=−∇ f ( x⃗0 ) → [−22 −42 ] [ pp ]=[−20 ]
1

2
Resolvendo o sistema linear

−2 p1+ 2 p2=0
{2 p1−4 p2=−2
temos p1= p2=1 , e portanto ⃗p=[1 , 1]

−[0 , 2] 1 []
1 −2 −2
α 0= = = =1
[ 1 , 1 ] −2 2 1 [1 ,1] 0
−2
[
2 −4 1 −2 ][ ] [ ]
⃗x 1= x⃗0+ α0 p⃗0=[0 ,0 ]+1[1, 1]=[1 ,1]

O método de Newton converge para a solução exata em apenas 1 iteração!


Muito mais rápido que gradiente ascendente.

O resultado a seguir garante que a taxa de convergência do método de Newton multivariado é


quadrática.

Teorema: Seja f (⃗x ) contínua e duplamente diferenciável e ⃗x * é um ponto para o qual o


gradiente é nulo, ou seja, ∇ f (⃗x )=0 . Suponha que a matriz Hessiana H (⃗x ) satisfaça as
seguintes condições:

−1 * 1
i. ∃h>0 / ‖H ( ⃗x )‖≤ (ou seja, a inversa da Hessiana no ponto de ótimo não explode)
h
(elementos da inversa da Hessiana são limitados superiormente)

ii. ∃β >0 , ∃L>0 tal que


* * *
‖H (⃗x )−H (⃗x )‖≤L‖⃗x −⃗x ‖ ∀ ⃗x / ‖⃗x −⃗x ‖≤β

(função L-suave de 2a ordem: Hessiana suave)

2h
*
Suponha que ⃗x satisfaça ‖⃗x −⃗x ‖< min β , { 3L }
Seja ⃗x +=⃗x−H−1 (⃗x ) ∇ f ( ⃗x ) uma iteração do método de Newton. Então, pode-se mostrar que:

+ *
‖⃗x −⃗x ‖≤ ( 32 Lh )‖⃗x −⃗x ‖* 2

O erro no próximo passo depende do quadrado do erro no passo atual. Isso significa que o método
de Newton tem taxa de convergência quadrática, sendo mais rápido que o gradiente descendente,
que tem convergência linear.

Omitiremos a prova completa deste teorema, mas o leitor interessado pode encontrá-la em [1].

Referências

[1] Robert M. Freund, Newton’s Method for Unconstrained Optimization, MIT, February, 2004.
Aula 7: O método do gradiente conjugado

O método do gradiente descendente é computacionalmente simples, mas possui convergência lenta.


O método de Newton possui convergência rápida, mas o custo computacional o torna proibitivo em
diversos problemas, principalmente devido ao cálculo e inversão da matriz Hessiana. O método do
gradiente conjugado pode ser considerado um meio termo entre o gradiente descendente e o método
de Newton.

Objetivo: acelerar a convergência do gradiente descendente evitando elevar o custo computacional.

A motivação do método do gradiente conjugado é a solução de problemas de otimização quadrática.

Otimização quadrática

O problema de otimização quadrática na forma de minimização é definido por:

1 T T
min ⃗x A ⃗x −⃗b ⃗x
x∈ R

n 2

onde A é uma matriz positiva semi-definida. Note que esse problema resume-se a resolver o sistema
linear A ⃗x =⃗b , uma vez que a condição necessária para a minimização da função quadrática
definida acima é justamente ∇ f (⃗x )= A ⃗x −⃗b=0 . Como ∇ 2 f (⃗x )=H (⃗x )= A , que é positiva
semi-definida, temos que a função é convexa e portanto ⃗x * é mínimo global. O método do
gradiente conjugado consegue resolver esse problema em no máximo n iterações. Na prática, para n
grande, requer menos de n iterações. No caso 2D, o método do gradiente conjugado converge em 1
ou 2 iterações no máximo.

Padrão zig-zag do gradiente descendente versus o padrão do gradiente conjugado


Um conceito fundamental no método do gradiente conjugado são as direções conjugadas.

Def: Direções A-conjugadas

Seja A uma matriz simétrica. Dizemos que os vetores { p⃗1 , p⃗2 , ... , p⃗k } , com pi ∈R n
⃗ são
T
pi A p⃗ j=0 , ∀ i≠ j .
conjugadas em relação a A (A-ortogonais) se ⃗

Note que se A = I, temos que vetores são ortogonais, por isso trata-se de uma generalização da
condição de ortogonalidade. Veremos a seguir que direções A-conjugadas implicam em
ortogonalidade.

Lema: Seja a uma matriz positiva semi-definida. Se o conjunto de vetores { p⃗1 , p⃗2 , ... , p⃗n } , com
pi≠⃗0 , são A-conjugados, então eles são linearmente independentes (L.I.), isto é, eles formam

uma base ortogonal para o espaço Rn .

Prova (por contradição):

Suponha que p⃗n é uma combinação linear de todos os outros n - 1 vetores do conjunto:

p⃗n=α 1 p⃗1 + α 2 p⃗2 +...+ α n−1 ⃗pn−1

Como ‖ p⃗n‖2A = ⃗pTn A p⃗n >0 , pois denota a A-norma de p⃗n ao quadrado, temos:

2 T
‖ p⃗n‖A = ⃗pn A ( α1 p⃗1+ α2 p⃗2+...+ αn−1 ⃗p n−1)

Aplicando a distributiva:

‖ p⃗n‖2A =α 1 ⃗pTn A p⃗1 + α 2 ⃗pTn A p⃗2 +...+ α n−1 ⃗pTn A p⃗n−1

Como os vetores { p⃗1 , p⃗2 , ... , p⃗n } são A-conjugados, chegamos a:

2
‖ p⃗n‖A =0+ 0+...+0=0

gerando uma contradição. Sendo assim, a hipótese inicial de que existe um vetor p⃗n que é uma
combinação linear de todos os outros n - 1 vetores do conjunto é FALSA! Portanto, os vetores
{ p⃗1 , p⃗2 , ... , p⃗n } são linearmente independentes.

Porque direções conjugadas são importantes?

1 T T
min ⃗x A ⃗x −⃗b ⃗x → A ⃗x =⃗
b
x∈ R

n 2

Seja ⃗x * a solução ótima e seja { p⃗0 , p⃗1 , ... , p⃗n−1 } um conjunto de vetores A-conjugados. Como
esses vetores são L. I., eles definem uma base ortogonal do Rn e assim:
*
⃗x =α1 p⃗1 + α2 p⃗2+ ...+ αn−1 ⃗p n−1

Então,
⃗pTi A ⃗x *=⃗p Ti A ( α 1 p⃗1 + α 2 p⃗2 +...+ α n−1 ⃗pn−1)=αi ⃗pTi A ⃗
pi

Isso implica em:

⃗pTi A ⃗x * ⃗pTi ⃗b
αi = =
⃗p Ti A ⃗p i ⃗pTi A ⃗pi

* *
ou seja, não precisamos conhecer a solução ótima ⃗x para obter αi . Voltando para ⃗x ,
temos:
n−1 n−1 T
* ⃗pi b⃗
⃗x =∑ α i ⃗
pi=∑ pi

i=0 i=0 ⃗pTi A ⃗pi

Não há necessidade de inversão de matrizes!

A expansão de ⃗x * é o resultado de um processo iterativo:

x⃗0=α 0 p⃗0
x⃗1= x⃗0+ α1 p⃗1
x⃗2= x⃗1+ α2 p⃗2

⃗x n−1=⃗x n−2+ αn−1 ⃗p n−1

O resultado a seguir formaliza essa ideia em termos matemáticos.

Teorema: Seja { p⃗0 , p⃗1 , ... , ⃗p n−1 } um conjunto de n vetores A-conjugados e seja x⃗0 um ponto
de partida inicial e arbitrário. Se aplicarmos as regras a seguir sucessivamente:

r⃗k =∇ f ( x⃗k )=A x⃗k −⃗


b

−⃗r Tk ⃗pk
α k= (*)
⃗p Tk A ⃗p k

⃗x k+1= x⃗k + α k p⃗k

então, após n iterações, x⃗n=⃗x * .

Prova: Como { p⃗0 , p⃗1 , ... , p⃗n−1 } são vetores L.I., eles formam uma base para o R n. Então,
podemos garantir que o erro em qualquer iteração pode ser expresso como combinação linear dos
vetores da base, ou seja, podemos escrever:

⃗x *− x⃗0=α 1 p⃗1 + α 2 p⃗2 +...+ α n−1 ⃗pn−1

Utilizando a regra ⃗x k+1= x⃗k + α k p⃗k , temos:

x⃗1= x⃗0+ α0 p⃗0


x⃗2= x⃗0+ α0 p⃗0 + α1 p⃗1
x⃗3= x⃗0+ α0 p⃗0 + α 1 p⃗1 + α2 p⃗2

*
x⃗n= x⃗0 + α0 p⃗0 + α 1 p⃗1 + α 2 p⃗2 +...+ αn −1 ⃗pn−1=⃗x

Agora, basta mostrar que os valores dos pesos αk são dados conforme a equação (*). Sabemos
que:
*
⃗x − x⃗0=α 0 p⃗0 + α1 p⃗1 +...+ α n−1 ⃗pn−1 (A)

⃗x k − x⃗0=α 0 p⃗0+ α1 p⃗1+...+ αk−1 ⃗p k−1 (B)

Então, podemos escrever:

b= A x⃗k − A ⃗x *= A( x⃗k −⃗x *)


r⃗k =∇ f ( x⃗k )=A x⃗k −⃗

Multiplicando a equação (A) por p⃗k T A , temos:

T * T T
p⃗k A(⃗x − x⃗0 )= p⃗k A (α1 p⃗1+ α2 p⃗2+...+ αn−1 ⃗p n−1 )=α k p⃗k A p⃗k

o que implica em:


T *
p⃗k A (⃗x − x⃗0)
αk= T
p⃗k A p⃗k

T
Multiplicando a equação (B) por p⃗k A , temos:

p⃗k T A(⃗x k − x⃗0 )= p⃗kT A ( α 0 p⃗0 + α 1 p⃗1 +...+ α k−1 ⃗pk−1 )=0

Mas sabemos que:


T * T * T * T T *
p⃗k A(⃗x − x⃗0 )= p⃗k A (⃗x − x⃗k + x⃗k − x⃗0)= p⃗k A (⃗x − x⃗k )+ p⃗k A ( x⃗k − x⃗0 )= p⃗k A(⃗x − x⃗k )

Podemos reescrever α k como:

T * T * T * T
p⃗k A (⃗x − x⃗0) p⃗k A(⃗x − x⃗k ) − p⃗k A ( x⃗k −⃗x ) − r⃗k p⃗k
α k= T
= T
= T
= T
p⃗k A p⃗k p⃗k A p⃗k p⃗k A p⃗k p⃗k A p⃗k

Veremos a seguir que o valor de α k é ótimo, no sentido de que define o tamanho do passo
adaptativo obtido a partir da estratégia Line Search para o nosso problema de otimização
quadrática. Lembre-se que desejamos resolver:

1
min f ( ⃗x )= ⃗x T A ⃗x −⃗
b T ⃗x
x∈ R

n 2

Sabemos que na iteração k + 1, temos:

⃗x k+1= x⃗k + α p⃗k


O objetivo da estratégia Line Search é minimizar a função:
1
g( α )=f ( x⃗k + α p⃗k )= ( x⃗k + α p⃗k )T A ( x⃗k + α p⃗k )−⃗bT ( x⃗k + α p⃗k )
2

Aplicando a distributiva para desenvolver os produtos:

1 1 1 1
g( α )= ⃗xTk A x⃗k + α ⃗x Tk A p⃗k + α ⃗pTk A x⃗k + α2 ⃗pTk A p⃗k −⃗
b T x⃗k −α ⃗
b T p⃗k
2 2 2 2

Note que a primeira e a quinta parcela da soma não são funções de α e podem ser descartados. A
segunda e a terceira parcela são de fato idênticas, de modo que a função pode ser escrita como:

1 2 T T T
g( α )= α ⃗p k A p⃗k + α ⃗pk A x⃗k −α ⃗b p⃗k
2

Derivando a equação em relação a α e igualando a zero, temos:


T T T
g '( α )=α ⃗pk A p⃗k + ⃗pk A x⃗k −⃗
b p⃗k =0

o que implica em:


T T T T
−⃗p k A x⃗k + ⃗pk ⃗b −⃗pk ( A x⃗k −⃗b) −⃗r k p⃗k
α= = = T
⃗p Tk A p⃗k ⃗pTk A p⃗k ⃗p k A p⃗k

que é justamente o valor obtido anteriormente. Portanto, definir o valor de α é uma boa opção
em termos de convergência, pois estamos utilizando a estratégia Line Search!

Uma pergunta natural que surge neste momento é: como podemos definir as direções p⃗k de
modo que elas sejam A-conjugadas?

O método da direção conjugada nos fornece uma maneira de computar cada novo vetor conjugado a
partir do vetor anterior ⃗pk−1 : o método funciona escolhendo cada direção p⃗k como uma
combinação linear do negativo do gradiente −r⃗k e o vetor conjugado anterior ⃗pk−1 . Daí vem
o nome gradiente conjugado!

A expressão que define a nova direção conjugada p⃗k é:

p⃗k =− r⃗k +βk ⃗pk−1

O problema consiste em encontrar o valor de βk . Multiplicando ambos os lados da equação


anterior por ⃗pTk−1 A , temos:

⃗pTk−1 A p⃗k =⃗p Tk−1 A (−r⃗k + βk ⃗pk−1 )

o que nos leva a:


T T
−⃗pk−1 A r⃗k + βk ⃗p k−1 A ⃗pk−1=0 (pois as direções ⃗pk−1 e p⃗k são A-conjugadas)

de modo que temos:


⃗pTk−1 A r⃗k
βk =
⃗p Tk−1 A ⃗pk−1

Note que o cálculo de βk requer duas multiplicações de matriz por vetor (uma no numerador e
outra no denominador) a cada iteração. Para acelerar o algoritmo, foi desenvolvida uma forma
computacionalmente mais eficiente para o cálculo de βk . Note que:

⃗x k+1= x⃗k + α k ⃗p k

Multiplicando ambos os lados pela matriz A:

A ⃗x k+1= A x⃗k + α k A ⃗pk

Subtraindo ⃗
b de ambos os lados:

A ⃗x k+1−⃗b= A x⃗k −⃗
b+ αk A ⃗p k

nos leva a:

⃗r k+1= r⃗k + α k A ⃗pk

Multiplicando ambos os lados por ⃗r Tk+1 :

⃗r Tk+1 ⃗r k+1=⃗r Tk +1 r⃗k + αk ⃗r Tk+1 A ⃗p k

Lembre-se que já provamos anteriormente nas aulas passadas que a direção de dois gradientes
sucessivos na estratégia Line Search é ortogonal, o que implica em ⃗r Tk+1 ⃗r k =0 . Assim, temos:

⃗r Tk+1 ⃗r k+1=α k ⃗r Tk+1 A ⃗pk

Dividindo ambos os lados por α ⃗pTk A p⃗k , temos:

⃗r Tk +1 A ⃗pk T
1 ⃗r k +1 ⃗r k+ 1
T
=α T
⃗pk A p⃗k k ⃗pk A p⃗k

Note que o termo do lado esquerdo da equação anterior é justamente βk+1 , o que nos leva a:

T
1 ⃗r ⃗r
βk+1= α kT+1 k +1 (A)
k ⃗pk A p⃗k

Mas sabemos que:


T
−⃗pk r⃗k
α k= T
(B)
⃗p k A p⃗k

Substituindo (B) em (A), temos:


− ⃗pTk A p⃗k ⃗r Tk+1 ⃗r k+1 −⃗r Tk+1 ⃗
r k+1
βk+1= =
⃗pTk r⃗k ⃗pTk A p⃗k ⃗pTk r⃗k

Mas de p⃗k =− r⃗k +βk ⃗pk−1 , multiplicando ambos os lados por r⃗k , temos:

⃗pTk r⃗k =−⃗r Tk r⃗k +βk ⃗pTk−1 r⃗k

Iremos mostrar a seguir, que ⃗pTk−1 r⃗k =0 (são ortogonais). Primeiramente, note que:

T T T * T *
⃗pk−1 r⃗k =⃗pk−1 ( A x⃗k −⃗b)=⃗pk−1 ( A x⃗k − A ⃗x )=⃗p k−1 A( x⃗k −⃗x )

Mas pela definição do método, temos que:

x⃗k = x⃗0 + α 0 p⃗0 + α 1 p⃗1 +...+ α k−1 ⃗pk−1

*
⃗x = x⃗0+ α0 p⃗0 + α 1 p⃗1 +...+ α k−1 ⃗pk−1 +...++ αn −1 ⃗pn−1

de modo que:

x⃗k −⃗x *=−α k p⃗k −α k+1 ⃗p k+1−...−α n−1 ⃗pn−1

Dessa forma, ao multiplicar ambos os lados por ⃗pTk−1 A , chegamos em:

⃗pTk−1 A (−α k p⃗k −α k+1 ⃗p k+1−...− αn−1 ⃗p n−1)

Aplicando a distributiva:
T T T
−α k ⃗pk−1 A p⃗k −−α k+1 ⃗pk−1 A p⃗k +1−...− αn−1 ⃗p k−1 A p⃗n−1

Mas como as direções são A-conjugadas, temos que cada uma das parcelas resulta em zero, fazendo
com que:

⃗pTk−1 r⃗k = ⃗pTk−1 A ( x⃗k −⃗x *)=0

Portanto, podemos concluir que:


T T
−⃗pk r⃗k =⃗r k r⃗k

o que nos leva a seguinte definição de βk+1 :

⃗r Tk+1 ⃗r k+1 ‖⃗r k+1‖2


βk+1= T
= 2
(razão entre as normas dos gradientes)
⃗r k ⃗r k ‖⃗r k‖

o que é computacionalmente mais eficiente que a forma anterior. Note que o valor de α k fica:

T
− ⃗pk ⃗r k ⃗r Tk ⃗r k ‖⃗r k‖
2
α k= T
= T
= 2
⃗p k A ⃗p k ⃗pk A ⃗pk ‖⃗pk‖A
Algoritmo: método do gradiente conjugado

1
f ( ⃗x )= ⃗x T A ⃗x −⃗bt ⃗x com A e b conhecidos
2

x⃗0 : solução inicial


r⃗0=∇ f ( x⃗0)=A x⃗0 −⃗ b (gradiente inicial)
p⃗0=− r⃗0 (direção conjugada inicial)
k =0
Enquanto ‖r⃗k‖2≥ϵ
{
⃗r T ⃗r
α k= T k k (calcula tamanho do passo)
⃗p k A ⃗p k

⃗x k+1= x⃗k + α k p⃗k (atualiza solução)

⃗r k+1= r⃗k + α k A p⃗k (atualiza gradiente)

⃗r Tk+1 ⃗r k+1
βk+1= T
(calcula beta)
⃗r k ⃗r k

⃗pk+1 =−⃗r k+1 + βk+1 ⃗p k (calcula nova direção A-conjugada)

k =k +1
}

A principal vantagem do gradiente conjugado é que ele pode seguir vales estreitos enquanto a
descida do gradiente desacelera e tende a percorrer um padrão zig-zag. Note também, que ao
contrário do método de Newton, não utilizamos a matriz Hessiana, o que é uma redução de custo
computacional considerável.

Convergência do gradiente conjugado

1 T t
Seja f ( ⃗x )= ⃗x A ⃗x −⃗b ⃗x a função objetivo a ser minimizada com A positiva semi-definida e
2

b arbitrários. Após k iterações do método do gradiente conjugado temos que:
k
√ q−1 ‖x⃗ −⃗x *‖
‖x⃗k −⃗x *‖A ≤2 ( √ q+ 1
0 ) ¿

λmax
onde q= é a razão entre o maior e o menor autovalor da matriz A .
λmin

Note que a forma se assemelha a uma convergência linear, porém a constante c é elevada a uma
potência k que depende diretamente da iteração do método. Por essa razão, dizemos que temos uam
convergência super linear (mais rápido que linear). Lembre-se que na descida do gradiente, a
convergência era linear, pois a constante c era fixa para toda iteração k do método. Já no método de
Newton a convergência era quadrática (mais rápida que super linear). Portanto, o método do
gradiente conjugado é considerado um meio termo entre descida do gradiente e método de Newton.
1 T
A= 2 −1
t
Ex: minimizar f ( ⃗x )= ⃗x A ⃗x −⃗b ⃗x , com
2 [
−1 2 ] , ⃗
b=[1 , 0] e x⃗0=[0 , 0]

k = 0: r⃗0= A x⃗0− ⃗
b=
[−12 −12 ][ 00]−[−10]=[−10]
p⃗ =− r⃗ =[ 1 ]
0 0
0
T [−1 , 0 ] [−1 ] [ −1 ,0 ] [−1 ]
⃗r ⃗r 0 0 0 0 1
α=0 = = =
⃗p A ⃗p [ −1 ,0 ] 2 −1 −1 [ −1 ,0 ] −2 2
T
0
[−1 2 ][ 0 ]
0
[1]
1 1
0 0
2 [2 ]
x⃗ = x⃗ + α p⃗ =[ 0 , 0 ] + [ 1, 0 ] = , 0
1 0

1 0
2 −1 2 ] [ 0 ] [ 0 ] 2 [−1 ] [ 0 ] [− ] [ − ]
1 2 −1 −1 −1 1 2
r⃗ =r⃗ + α A p⃗ =[ ] + [
1 0
−1
0 0 = + = −1 + 1 = 1
0
2 2
1 0
r⃗T1 ⃗r 1
[ 0 ,− ][ ]
2 −
1
2 1
β 1= = =
T
⃗r ⃗r 0 4
0 ][ ]
[ −1 , 0 −1
0
1 1 1 1
p⃗1=−r⃗1 + β1 p⃗0= 0 ,
2
+ 1, 0 ] = ,
2 4 4 2 [ ] [ [ ]
1 1
2 2
r 1‖ =0 + − = > ϵ
‖⃗
2 4 ( )
(continue, pois a norma do gradiente é grande)

1 0
⃗r T1 ⃗r 1
[ 0 ,− ][
2 −
1
2 ] 1
4
1
4 2
k = 1: α1 = = = = =
T
⃗p1 A ⃗p1 1 0 3 3
[ ][ ]
[]
1 1
1 1 2 −1 4 , 3 8
, [ ][
4 2 −1 2 1
4 2
] 4
2
1 2 1 1 1 1 1 2 1
x⃗2= x⃗1+ α1 p⃗1 = , 0 +
2 [ ] [ ][ ][ ][ ]
, = ,0 + , = ,
3 4 2 2 6 3 3 3
1 0
r⃗1=r⃗0+ 0 A p
⃗ 0α=
0 [ ] [ ][ ] [ ] [ ] [ ] [
−1 + 1 2 −1 −1 = −1 + 1 2 = −1 +
2 −1 2 0 0 2 −1 0 −
1
2
=

1
2 ][ ]
T 0,0 0
[ ][ ]
⃗r ⃗r 0
β2= 2T 2 = =0
⃗r 1 ⃗r 1 0
0 ,−
1
[ ][ ]
2 −
1
2
1 1
[ ] [ ][ ]
p⃗2=−r⃗2 + 2 p⃗1= 0 , 0 +0 , = 0 , 0
β
4 2

2 2 2
‖r⃗2‖ =0 +0 =0< ϵ (pare, pois norma do gradiente é nula!)
2 1
*
Portanto, a solução ótima é ⃗x = [ ],
3 3

A seguir apresentamos mais alguns exercícios práticos sobre o método do gradiente conjugado.

1 T
A= 3 −2
2
T
Ex: minimizar f ( ⃗x )= ⃗x A ⃗x −⃗b ⃗x com [
−2 3 ] , ⃗
b=[1 , 1] e x⃗0=[0 , 0] .

1 T
2
T
Ex: minimizar f ( ⃗x )= ⃗x A ⃗x −⃗b ⃗x com A=
[−24 −24 ] , ⃗
b=[4 , 1] e x⃗0=[0 , 0] .

4 2 4
1 T
2
T
Ex: minimizar f ( ⃗x )= ⃗x A ⃗x −⃗b ⃗x com A= 2
4
8
[ ] 4
3
2
3
6
4
, ⃗
b=[1 , 1, 1] e x⃗0=[0 , 0 , 0] .

1 T
2
T
Ex: minimizar f ( ⃗x )= ⃗x A ⃗x −⃗b ⃗x com A= 2
4 [ ] 4
3
3
6
, ⃗
b=[ 4 , 4 , 4] e x⃗0=[0 , 0 , 0] .

Um problema do método do gradiente conjugado é que a função objetivo deve ser sempre
quadrática. Em muitos problemas isso não ocorre. Na próxima aula, veremos o método do gradiente
conjugado não linear, que pode ser utilizado na otimização de qualquer função, mesmo não sendo
quadrática.
Aula 8: O método do gradiente conjugado generalizado

Um problema do método do gradiente conjugado é que a função objetivo deve ser sempre
quadrática. Em muitos problemas isso não ocorre. Nesta aula, veremos o método do gradiente
conjugado generalizado, também conhecido como não linear, que pode ser utilizado na otimização
de funções arbitrárias, não apenas quadráticas. A principal diferença aqui é que a a matriz A não é
explícita nessas funções objetivo, de modo que o método gradiente conjugado tradicional requer
alguns ajustes. Deve se ter em mente que para funções não lineares arbitrárias, isto é, que não são
quadráticas, o número máximo de iterações do método generalizado não é limitado a n (número de
variáveis do problema de otimização). Em outras palavras, a convergência pode não ser tão rápida
quanto no problema de otimização quadrática.

Em termos práticos, a ideia do método generalizado é bastante intuitiva: substituir o resíduo (erro)
pelo gradiente:

Resíduo: r⃗k = A x⃗k −⃗b


Gradiente: ∇ f ( x⃗k )

Na otimização quadrática, o resíduo é exatamente igual ao gradiente: ∇ f ( x⃗k )=r⃗k =A x⃗k −⃗


b .

Algoritmo: método do gradiente conjugado generalizado

Neste caso, a função objetivo f (⃗x ) é uma função não linear arbitrária.

x⃗0 : solução inicial


r⃗0=∇ f ( x⃗0) (é preciso calcular o gradiente a partir da função)
p⃗0=− r⃗0 (direção conjugada inicial)
k =0
Enquanto ‖r⃗k‖2≥ϵ
{
α k =arg min f ( x⃗k + α p⃗k ) (estratégia Line Search)
α

⃗x k+1= x⃗k + α k p⃗k (atualiza solução)

⃗r k+1=∇ f (⃗x k+1 ) (atualiza gradiente)

⃗r Tk+1 ⃗r k+1
βk+1= T
(calcula beta)
⃗r k ⃗r k

⃗pk+1 =−⃗r k+1 + βk+1 ⃗p k (calcula nova direção A-conjugada)

k =k +1
}

A estratégia Line Search no gradiente conjugado generalizado

Podemos aproximar f ( x⃗k + α p⃗k ) por uma expansão de Taylor de 2a ordem, ou seja:
Utilizando uma expansão de Taylor de segunda ordem, temos:

d 2
d2
f ( x⃗k + α p⃗k )≈ f ( x⃗k )+ α [ dα
f ( x⃗k + α p⃗k ) ] α=0

[
2 d α2
f ( x⃗k + α p⃗k )
]α =0

Note que:

d d
f ( x⃗k + α p⃗k )=f ' ( x⃗k + α p⃗k ) ( x⃗k + α p⃗k )=∇ f ( x⃗k + α p⃗k )T p⃗k
dα dα

o que para α =0 resulta em ∇ f ( x⃗k )T p⃗k . Note ainda que:

d2 d T T 2
2
f ( x⃗k + α p⃗k )=

[ ∇ f ( x⃗k + α p⃗k ) p⃗k ]= p⃗k ∇ f ( x⃗k + α p⃗k ) p⃗k

T 2 T
o que para α =0 resulta em p⃗k ∇ f ( x⃗k ) p⃗k = p⃗k H ( x⃗k ) p⃗k . Assim, podemos escrever a
seguinte aproximação:
2
f ( x⃗k + α p⃗k )≈ f ( x⃗k )+ α ∇ f ( x⃗k ) p⃗k + α p⃗k H ( x⃗k ) p⃗k
T T
2

e portanto, para encontrar o valor de α que minimiza a função devemos ter:

∂ f ( x⃗ + α p⃗ )=∇ f ( x⃗ )T p⃗ + α p⃗ T H ( x⃗ ) p⃗ =0
k k k k k k k
∂α

o que nos leva a:

α p⃗k T H ( x⃗k ) p⃗k =−∇ f ( x⃗k )T p⃗k

e finalmente temos:
T
−∇ f ( x⃗k ) p⃗k
αk= T
p⃗k H ( x⃗k ) p⃗k

Note que é necessário avaliar a matriz Hessiana em cada iteração, mas não precisamos invertê-la.
Como era esperado, substituímos o resíduo r⃗k pelo gradiente ∇ f ( x⃗k ) e a matriz A pela
matriz Hessiana H. Por essa razão, costuma-se dizer que no método do gradiente conjugado não
linear as direções p⃗k são H-conjugadas (e não A-conjugadas como na função quadrática).

Uma observação importante é que a matriz Hessiana H (⃗x ) varia com ⃗x , e portanto, quanto
mais rápido essa variação ocorre, mais rápido as direções de busca p⃗k perdem a propriedade
conjugada. Por essa razão, em geral, costuma-se resetar as direções a cada n iterações, fazendo
βk =0 .

Ex: minimizar f (⃗x )=x 1−x 2 + x 21−x 1 x 2 com o método do gradiente conjugado generalizado
utilizando x⃗0=[0 , 0]

Solução analítica: a condição necessária é dada portanto


∂f
∇ f (⃗x )=
[ ][
∂ x1
∂f
∂ x2
=
1+2 x 1−x 2
−1−x 1
=0
][]
0

Da segunda equação, temos que x 1=−1 . Substituindo na primeira equação, temos x 2=−1 .

A matriz Hessiana H é dada por:

H (⃗x )= 2 −1
[−1 0 ]
e portanto não depende de x (porque função é quadrática, no caso de funções de graus mais
elevados, a Hessiana depende de x).

Iremos proceder com a aplicação do método do gradiente conjugado generalizado.

x⃗0=[0 , 0]
r⃗0=∇ f ( x⃗0)=[1 ,−1]
p⃗0=−∇ f ( x⃗0)=[−1 ,1]
k = 0:

α 0= T
T
−∇ f ( x⃗0 ) p⃗0
=
[ ]
−[ 1 ,−1 ] −1
1
=
[ ]
−[ 1,−1 ] −1
1 2 1
= =
⃗p0 H ( x⃗0 ) p⃗0 [ −1 ,1 ] 2 −1 −1 4 2
[ ][ ]
−1 0 1 [ ]
[−1 , 1 ] −3
1
1 1 1
2 [ ]
x⃗1= x⃗0+ α0 p⃗0=[ 0 , 0 ] + [ −1 ,1 ] = − ,
2 2
1 1
[
r⃗1=∇ f ( x⃗1)= − ,−
2 2]
1


β 1= T =
T
[
r 1 ⃗r 1
− ,−
1 1
]
2 2
[] −


2
1
2
= =
1
2 1
2 4
⃗r 0 ⃗r 0 [ 1 ,−1 ] 1
[ ] −1
1 1 1 1 1 1 1 1 3
[ ] 2 2 4 [ ][
p⃗1=−r⃗1 + β1 p⃗0= , + [ −1, 1 ] = , + − , = ,
2 2 ][ ]
4 4 4 4

k = 1:
1

T
−∇ f ( x⃗1) p⃗1
α1 = T
⃗p 1 H ( x⃗1) p⃗1
=
1 1
[ ]
,
2 2

1
=
[]
4
3
4
=
1 −1
1
2
1
2
=−2

1 3 2 −1 4
[ ][
,
4 4 −1 0 3
4
1 3
,
4 4


]4
1
4
[ ] [ ][ ]
4
1 1 1 3 1 1 1 3
2 2[ ] [ ][
4 4 ][ ]
x⃗2= x⃗1+ α1 p⃗1 = − , − 2 , = − , − , =[−1 ,−1]
2 2 2 2
r⃗2=∇ f ( x⃗2)= [ 0 , 0 ]
T [0 , 0 ] 0 []
r ⃗r
⃗ 0 0
β1= 1T 1 = = =0
⃗r 0 ⃗r 0 1 1
1 1
− ,−
2 2 [ ]


2
1
2
[]
1 3
2

[ ]
p⃗2=−r⃗2 + β2 p⃗1= [ 0 , 0 ] +0 , =[ 0 , 0 ]
4 4

Note que neste ponto, a norma do gradiente é zero. Portanto, o método convergiu!

A solução ótima é portanto ⃗x *=[−1 ,−1] , como a solução do método analítico.

Variantes do gradiente conjugado

Diversos pesquisadores da área de otimização matemática propuseram melhorias no método do


gradiente conjugado generalizado, particularmente na forma em que o parâmetro βk é calculado.
A seguir listamos as fórmulas mais conhecidas para esse fim:

a) Fletcher-Reeves (padrão)

FR ⃗r Tk+ 1 ⃗r k+1
β =
k T
⃗r k ⃗r k

b) Polak-Ribière

PR ⃗r Tk+ 1( ⃗r k +1−r⃗k )
β =
k T
⃗r k ⃗r k

c) Hestenes-Stiefel

HS ⃗r Tk +1 ( ⃗r k+1−r⃗k )
β =−
k T
⃗p k (⃗r k +1−r⃗k )

d) Dai-Yuan:

⃗r Tk+1 ⃗r k+1
βDY
k =−
⃗pTk (⃗r k +1−r⃗k )

Uma escolha que se tornou bastante popular consiste em fazer:

βk+1=max {0 , βkPR+1 }

Lembrando que, numericamente, é recomendado resetar a direção de busca a cada n iterações, ou


seja, tomamos −∇ f ( x⃗k ) , fazendo βk =0 .
Aula 9: Métodos quasi-Newton

Um problema com o método de Newton e também do método do gradiente conjugado generalizado


é que ambos requerem o cálculo analítico da matriz Hessiana, ou seja, devemos obter expressões
matemáticas para todas as derivadas parciais de segunda ordem. Em muitos problemas práticos do
mundo real, essa tarefa pode ser extremamente complicada, ou até mesmo inviável/impossível.

Os métodos quasi-Newton buscam uma aproximação para a inversa da matriz Hessiana, ou seja,
H−1 ( x⃗k ) . Além disso, os métodos padrões para resolver sistemas como os encontrados no
método de Newton clássico:

H ( x⃗k )Δ x⃗k =−∇ f ( x⃗k )

requerem O(n3 ) operações, o que pode ser computacionalmente muito caro. A forma básica de
um método quasi-Newton é:

1. Faça k=0, x⃗k como a solução inicial e H k =I (aprox. para inverso da Hessiana=identidade)
2. Calcule o gradiente ∇ f ( x⃗k )
3. Encontre a direção de busca

p⃗k =−H k ∇ f ( x⃗k )

4. Execute a estratégia Line Search para estimar o tamanho o passo ótimo α k


5. Faça ⃗x k+1= x⃗k + α k p⃗k
6. Compute H k+1 atualizando a matriz Hessiana H k+1 =H k +U k (updating matrix) e atualize o
valor de k fazendo k = k + 1
7. Repita os passos de 2 a 6 até ‖∇ f ( x⃗k )‖≤ϵ

A aproximação Hk para o inverso da matriz Hessiana precisa satisfazer alguns critérios:

T
1. Simetria: H k =H k (isso significa que a U k =U Tk .

2. Condição quasi-Newton: Considere uma função f : Rn → R quadrática.

1 T T
f ( ⃗x )− ⃗x H ⃗x + ⃗
b ⃗x +c
2

em que H é a matriz Hessiana. Note que:

∇ f (⃗x )=H ⃗x + ⃗
b o que implica ⃗x =H−1 (∇ f (⃗x )−⃗
b)
∇ f (⃗y )=H ⃗y + b o que implica ⃗y=H ( ∇ f ( ⃗y )−⃗
⃗ −1
b)

Assim, temos que a diferença entre ⃗x e ⃗y é dada por:

⃗x −⃗y =H −1 ∇ f (⃗x )−H −1 ⃗b−H −1 ∇ f (⃗y)+ H −1 ⃗


b=H −1 (∇ f (⃗x )−∇ f ( ⃗y ))
Em outras palavras, duas iterações sucessivas do método devem satisfazer:

⃗x k+1− x⃗k =H k+1 (∇ f (⃗x k+1 )−∇ f ( x⃗k ))


Para funções não lineares, ou seja, que não são quadráticas, lembre-se que podemos aproximá-las
por uma expansão de Taylor de 2a ordem, de modo que mesmo assim temos:

⃗x k+1− x⃗k ≈ H k+1 ( ∇ f (⃗x k+1 )−∇ f ( x⃗k ))

Denotando por

Δ x⃗k =⃗x k +1− x⃗k


Δ g⃗k =∇ f (⃗x k +1)−∇ f ( x⃗k )

a condição quasi-Newton pode ser expressa por:

Δ x⃗k =H k+1 Δ g⃗k

3. A matriz Hk deve ser positiva semi-definida

Pode-se mostrar que se construirmos a matriz H k de modo a satisfazer as condições 1) e 2)


listadas acima, então certamente ela será positiva semi-definida.

Existem várias maneiras de construir H k+1 a partir de H k e U k . Um dos métodos


pioneiros, conhecido como DFP (Davidson, Fletcher and Powell) propõe como atualização o termo:
T T
Δ x⃗k Δ ⃗x k ( H k Δ g⃗k )( H k Δ g⃗k )
U k= T
− T
Δ ⃗x k Δ g⃗k gk H k Δ ⃗
Δ⃗ gk

onde Δ x⃗k =⃗x k +1− x⃗k e Δ g⃗k =∇ f (⃗x k +1)−∇ f ( x⃗k ) . A condição de simetria é garantida por
construção, uma vez que matrizes da forma ⃗z ⃗z T , com ⃗z ∈R n sendo um vetor coluna são
simétricas. Podemos verificar que a regra de atualização DFP satisfaz a condição quasi-Newton.
Note que temos:

Δ x⃗k Δ ⃗xTk ( H k Δ g⃗k )( H k Δ g⃗k )T


H k+1 =H k + −
Δ ⃗xTk Δ g⃗k Δ ⃗gTk H k Δ ⃗gk

Para isso, devemos mostrar que H k+1 Δ g⃗k =Δ x⃗k . Note que:

T T
Δ x⃗k Δ⃗xk Δ g⃗k ( H k Δ g⃗k )( H k Δ g⃗k ) Δ g⃗k
H k+1 Δ g⃗k =H k Δ g⃗k + T
− T
Δ ⃗x k Δ g⃗k g k H k Δ ⃗gk
Δ⃗

o que pode ser expresso como:


T T T
Δ x⃗k (Δ ⃗x k Δ g⃗k ) (H k Δ g⃗k )(Δ ⃗g k H k Δ g⃗k )
H k+1 Δ g⃗k =H k Δ g⃗k + T
− T
Δ ⃗x k Δ g⃗k Δ ⃗gk H k Δ ⃗gk

Como a matriz Hk é simétrica, podemos simplificar a expressão para:

H k+1 Δ g⃗k =H k Δ g⃗k +Δ x⃗k −H k Δ g⃗k =Δ x⃗k

o que mostra a validade da condição quasi-Newton. Na prática, essa condição significa que a regra
DFP mantém as propriedades da matriz Hessiana ao atualizar H k . Uma outra fórmula mais
recente que a DFP para atualizar a inversa da matriz Hessiana é a regra BFGS (Broyden, Fletcher,
Goldfarb e Shanno) definida por:

Δ ⃗gTk H k Δ ⃗gk Δ ⃗x k Δ⃗xTk (H k Δ g⃗k Δ ⃗x Tk )+( H k Δ g⃗k Δ ⃗x Tk )T


(
U k = 1+ T
Δ⃗x k Δ g⃗k )( T
Δ ⃗x k Δ g⃗k )(
− T
Δ ⃗x k Δ g⃗k )
De forma análoga a regra DFP, pode-se verificar que a regra BFGS satisfaz a condição quasi-
Newton. Note que temos:

Δ ⃗gTk H k Δ ⃗g k Δ ⃗x k Δ ⃗x Tk (H k Δ g⃗k Δ ⃗xTk )+( H k Δ g⃗k Δ ⃗x Tk )T


(
H k+1 =H k + 1+ T
Δ ⃗x k Δ g⃗k )( T
Δ ⃗x k Δ g⃗k )(
− T
Δ ⃗x k Δ g⃗k )
Novamente, devemos mostrar que H k+1 Δ g⃗k =Δ x⃗k . Para isso, observe que:

Δ ⃗gTk H k Δ ⃗
gk Δ ⃗x k Δ ⃗x Tk ( H k Δ g⃗k Δ ⃗x Tk )+( H k Δ g⃗k Δ ⃗x Tk )T
H k+1 Δ g⃗k =H k Δ g⃗k + 1+
( T
Δ ⃗x k Δ g⃗k )( T
Δ ⃗x k Δ g⃗k ) (
Δ g⃗k − T
Δ ⃗x k Δ g⃗k ) Δ g⃗k

o que é equivalente a:

T T T T
Δ ⃗g k H k Δ ⃗
gk Δ ⃗x k (Δ ⃗x k Δ g⃗k ) ( H k Δ g⃗k Δ ⃗x k Δ g⃗k )+(Δ ⃗x k Δ ⃗gk H k Δ ⃗g k )
H k+1 Δ g⃗k =H k Δ g⃗k + 1+
( T
Δ ⃗x k Δ g⃗k )( T
Δ⃗x k Δ g⃗k )(
− T
Δ⃗x k Δ g⃗k )
Após algumas simplificações, temos:
T T T
gk H k Δ ⃗
(Δ ⃗ g k ) Δ ⃗x k Hk Δ ⃗
g k (Δ ⃗x k Δ ⃗g k ) Δ ⃗x k (Δ ⃗g k H k Δ ⃗
g k)
H k+1 Δ g⃗k =H k Δ g⃗k +Δ x⃗k + T
− T
− T
Δ ⃗x k Δ ⃗gk Δ ⃗x k Δ ⃗gk Δ ⃗x k Δ ⃗gk

Como o 3o e o 5o termo são idênticos, pois os valores entre parêntesis são escalares) e possuem
sinais opostos, eles se cancelam. Simplificando ainda mais, chegamos em:

H k+1 Δ g⃗k =H k Δ g⃗k +Δ x⃗k −H k Δ ⃗


g k =Δ x⃗k

como exige a condição quasi-Newton.

Para que seja possível realizar a estratégia Line Search nos métodos quasi-Newto, além de
aproximar a inversa da matriz Hessiana, é preciso também de uma aproximação para a própria
Hessiana, denotada por B k , uma vez que ela é utilizada com cálculo do tamanho do passo ótimo.
Há diferentes formas para calcular tais aproximações, sendo as mais conhecidas as regras DFP e
BFGS. A seguir apresentamos um pseudo-código do método BFGS.

Algoritmo: método quasi-Newton BFGS

1. Faça k = 0, x⃗k igual à solução inicial e B k =H k =I


2. Calcule o gradiente ∇ f ( x⃗k )
3. Encontre a direção de busca:

p⃗k =−H k ∇ f ( x⃗k )


4. Calcule α k =arg min f ( x⃗k + α p⃗k ) utilizando uma aproximação de Taylor de 2a ordem como:
α

T
−∇ f ( x⃗k ) p⃗k
αk= T
⃗pk Bk p⃗k

5. Calcule ⃗x k+1= x⃗k + α k p⃗k


6. Calcule Δ x⃗k =⃗x k +1− x⃗k e Δ g⃗k =∇ f (⃗x k +1)−∇ f ( x⃗k )
7 Atualize a aproximação da matriz Hessiana B k como:

T T
Δ g⃗k Δ ⃗g k Bk Δ x⃗k (Bk Δ x⃗k )
B k+1=B k + T
− T
Δ⃗x k Δ ⃗
gk Δ ⃗x k Bk Δ x⃗k

8. Atualize a aproximação do inverso da matriz Hessiana Hk como:

T T T T T
Δ ⃗gk H k Δ ⃗g k Δ ⃗x k Δ ⃗x k ( H k Δ g⃗k Δ ⃗x k )+(H k Δ g⃗k Δ ⃗x k )
H k+1 =H k + 1+
( Δ ⃗xTk Δ g⃗k )( Δ ⃗x Tk Δ g⃗k )(

Δ ⃗xTk Δ g⃗k )
e faça k = k + 1

9. Repita os passo de 2 a 8 até que ‖∇ f ( x⃗k )‖≤ϵ .

Algumas observações importantes sobre os comportamentos extremos do método:

a) Se B k =H ( x⃗k ) e −1
H k =H ( x⃗k ) , então o método quasi-Newton se transforma no método de
Newton tradicional.

b) Se B k =H k =I , então o método quasi-Newton se transforma no gradiente descendente com


Line Search.

Algoritmo: método quasi-Newton DFP

1. Faça k = 0, x⃗k igual à solução inicial e B k =H k =I


2. Calcule o gradiente ∇ f ( x⃗k )
3. Encontre a direção de busca:

p⃗k =−H k ∇ f ( x⃗k )

4. Calcule α k =arg min f ( x⃗k + α p⃗k ) utilizando uma aproximação de Taylor de 2a ordem como:
α

T
−∇ f ( x⃗k ) p⃗k
αk= T
⃗pk Bk p⃗k

5. Calcule ⃗x k+1= x⃗k + α k p⃗k


6. Calcule Δ x⃗k =⃗x k +1− x⃗k e Δ g⃗k =∇ f (⃗x k +1)−∇ f ( x⃗k )
7 Atualize a aproximação da matriz Hessiana B k como:
T T T T T
Δ ⃗x k B k Δ⃗x k g k Δ ⃗gk
Δ⃗ Bk Δ ⃗x k Δ ⃗
g k +(B k Δ ⃗x k Δ ⃗g k )
(
B k+1=B k + 1+
Δ⃗x Tk Δ ⃗
gk )( Δ ⃗x Tk Δ ⃗gk )(

Δ ⃗x Tk Δ ⃗gk )
8. Atualize a aproximação do inverso da matriz Hessiana Hk como:

T T
Δ ⃗x k Δ ⃗x k (H k Δ ⃗gk )(H k Δ ⃗gk )
H k+1 =H k + T
− T
Δ ⃗x k Δ ⃗
gk Δ ⃗gk H k Δ ⃗gk

e faça k = k + 1

9. Repita os passo de 2 a 8 até que ‖∇ f ( x⃗k )‖≤ϵ .

O resultado a seguir mostra que os métodos quasi-Newton possuem convergência super-linear.

Teorema: Seja f (⃗x ) uma função fortemente convexa com matriz Hessiana ∇ 2 f (⃗x )=H (⃗x ) L-
suave, isto é:

‖H (⃗x k +1)−H ( x⃗k )‖≤L‖⃗x k+1− x⃗k‖

Então, o método quasi-Newton com regra DFP ou BFGS tem convergência super-linear, ou seja,
para k suficientemente grande:

‖⃗x k+1 −⃗x*‖≤c k ‖⃗x k −⃗x*‖

onde c k →0 .

Em resumo, temos as seguintes convergências:

Método Convergência

Gradiente descendente Linear


Gradiente conjugado Superlinear
quasi-Newton Superlinear
Newton Quadrática

Cada método possui suas vantagens e desvantagens, de modo que a escolha de qual utilizar depende
essencialmente do problema em questão e do número de variáveis da função objetivo. Como
exemplo de aplicação, citamos as redes neurais, em que a minimização da função de erro, que
tipicamente envolve milhares ou até mesmo milhões de variáveis (pesos sinápticos), é realizada
pelo método do gradiente descendente. Apesar da convergência mais lenta, é o único capaz de ligar
com um problema dessa magnitude.
Aula 10: Otimização não linear com restrições de igualdade

Até o presente momento, nosso interesse era resolver problemas de otimização não linear sem
restrições, ou seja, problemas em que os valores das variáveis da função objetivo não possuíam
restrição alguma (eram livres para ocupar qualquer região do R n). A partir de agora estamos
interessados em otimizar uma função não linear sujeita a restrições que também podem ser não-
lineares. A ideia é que o conjunto de soluções viáveis não é mais todo R n, mas sim um subconjunto
dele. Para isso, será introduzido o método dos multiplicadores de Lagrange.

Multiplicadores de Lagrange

Em matemática, particularmente em problemas de otimização, o método dos multiplicadores de


Lagrange permite encontrar extremos (máximos e mínimos) de uma função de uma ou mais
variáveis suscetíveis a uma ou mais restrições de igualdade. Por exemplo, considere o problema de
otimização.

max f (x , y ) sujeito a
g( x , y )=c

O objetivo consiste em encontrar x e y que maximizem f (x , y ) sujeito a uma restrição


(vermelho) g( x , y )=c . Note que agora, tanto a função objetivo quanto a restrição podem ser
não lineares.

Intuição: Em um ponto de máximo, f (x , y ) não pode aumentar em qualquer ponto vizinho onde
g( x , y )=c . Note que se pudesse aumentar, poderíamos andar sobre g( x , y )=c para crescer
o valor de f (x , y ) . Veremos a seguir que geometricamente isso significa que os gradientes de
f (x , y ) e g( x , y ) são paralelos nesse ponto.
Podemos visualizar os contornos da função f ( x , y ) dados por f ( x , y )=d i e o contorno de
g( x , y )=c
Resultado importante: O gradiente de uma função é sempre ortogonal a suas curvas de nível (pois o
gradiente sempre aponta para a direção de maior crescimento da função). Esse resultado pode ser
melhor compreendido a partir da demonstração do teorema a seguir.

Teorema: Sem perda de generalidade, considere z=f (x , y ) uma função de R2 em R .


Considere ainda a parametrização de f como x=x (t) e y= y (t ) para t∈ R . Suponha
ainda que o gradiente exista, ou seja, ∇ f (x , y)≠0 . Então, ∇ f ( x , y) é ortogonal a uma
curva de nível de f .

Prova: Iremos definir as nossas coordenadas no plano R2 parametricamente como o vetor


posição ⃗r (t)=(x (t) , y (t)) . Note que para todos os vetores ⃗r (t) pertencentes a uma curva de
nível de f , temos:

f (x( t), y (t ))=K (valor constante)

Derivando ambos os lados em relação a t:

d d
f (x (t), y (t))= K=0
dt dt

Mas pela regra da cadeia, podemos escrever:

df dx df dy
+ =0 (*)
dx dt dy dt

Sabemos que o vetor gradiente no ponto (x, y) é definido por:

⃗ f (x , y)= ∂ f , ∂ f
∇ (∂x ∂ y )
e o vetor tangente a curva no ponto (x, y) é definido por:
⃗r ' (t)=(x ' (t), y ' (t))= ( dxdt , dydt )
Portanto, podemos reescrever a equação (*) como:

⃗ f ( x (t ), y (t ))T ⃗r ' (t )=0


mostrando que o produto escalar entre os vetores é nulo. Portanto, o gradiente e o vetor tangente são
ortogonais. Na curva vermelha, g( x , y ) não muda (é constante) e nas curvas azuis, f ( x , y )
não muda (é constante). Suponha que caminhamos sobre a curva vermelha de g( x , y )=c .
Estamos interessados em pontos onde f (x , y ) não muda quando nos movemos (máximos). Para
que isso aconteça, devemos estar seguindo uma curva de nível de f. Isso significa que deve existir
um ponto P em que as duas curvas de nível são tangentes. Nesse ponto, os gradientes de f ( x , y )
e g( x , y ) são paralelos ali. Ou seja:

∇ f ( x , y)=λ ∇ g(x , y ) onde ( ∂∂ fx , ∂∂ fy )


∇f= e ( ∂∂ gx , ∂∂ gy )
∇ g=

para algum λ (o gradiente de f é um múltiplo do de g pois ambos apontam para uma mesma
direção, embora o sentido possa ser oposto). Essa variável λ é conhecida como multiplicador de
Lagrange

O método consiste em utilizar essa nova variável λ , chamada de multiplicador de Lagrange,


para definir uma nova função: a função Lagrangiana, como:

L( x , y , λ)=f (x , y)−λ(g ( x , y )−c )

Nesta função, o termo λ pode ser adicionado ou subtraído.

Resultado: Se (x*, y*) é um ponto de máximo para o problema original, então existe um λ tal
que (x * , y * , λ* ) é um ponto estacionário para a função lagrangiana L(x , y , λ) .

Ou seja, existe um ponto para o qual as derivadas parciais dessa função L(x , y , λ) são iguais a
zero. Em outras palavras, ao derivar a função Lagrangiana em relação a x, y e λ (basta tomar o
gradiente) e igualar ao resultado a zero, estamos na verdade resolvendo o problema de otimização
original pois:

∇ L(x , y , λ)=0 ⇔ ∇ f ( x , y )=λ g ( x , y )


{
g (x , y )=c

Para múltiplas restrições no problema, a generalização é direta:

max f (x , y ) s.r.
g1 ( x , y )=c1
g2 ( x , y )=c2
...
gk ( x , y )=c k

k
L( x , y , λ 1 , λ 2 , ... , λ k )=f ( x , y)−∑ λ i (g i ( x , y )−c i )
i=1
Ex: Resolva o seguinte problema de otimização não-linear com restrições de igualdade:

max f ( x . , y)=49−x 2− y 2 sujeito a


g( x , y )=x +3 y=10

A função Lagrangiana é dada por:

L(x , y , λ)=f ( x , y)−λ( g (x , y )−10)


2 2
L(x , y , λ)=49−x − y −λ (x+3 y −10)

Computando o gradiente de L(x , y , λ) e igualando o resultado a zero temos:

∂L

o que implica em:


[]
∂x
∇ L( x , y , λ)= L =⃗

∂y
∂L
∂λ
0

∂ L(x , y , λ)
=−2 x−λ=0 (I)
∂x

∂ L(x , y , λ)
=−2 y −3 λ=0 (II)
∂y

∂ L(x , y , λ)
=−x−3 y +10=0 (III)
∂λ


De (I) temos que x=− λ e de (II) temos que y=− . Substituindo em (III) nos leva a:
2 2

3λ 9λ
− λ −3 −
2 ( )
2
=−10 → λ +
2 2
=−10 → 5 λ=−10 → λ=−2

Substituindo o valor de λ em (I) temos:

−2 x +2=0 → x=1

Substituindo λ em (II) temos:

−2 y +6=0 → y=3

Portanto, (x * , y *)=(1, 3) e o máximo valor da função f (x , y )=49−1−9=39 .

Ex: Uma caixa retangular sem tampa deve ser feita com 12m 2 de papelão. Determine as dimensões
x,y e z que fornecem o volume máximo de tal caixa.
Função objetivo (a ser maximizada): volume
Restrição: área (base + 2 paredes + 2 paredes)

max f (x , y , z )=xyz sujeito a


g( x , y , z)=xy +2 xz +2 yz=12

Assim, a função Lagrangiana fica:

L( x , y , z , λ )=f ( x , y , z )−λ ( g( x , y , z)−c)= xyz−λ ( xy +2 xz +2 yz−12)

Igualando o gradiente a zero:

∂L ∂L ∂L ∂L
∇ L( x , y , z , λ )=⃗0 → =0, =0, =0, =0
∂x ∂y ∂z ∂λ

∂L ∂L ∂L
= yz− λ ( y +2 z)=0 (I), =xz− λ ( x +2 z )=0 (II), =xy− λ (2 x+ 2 y )=0 (III)
∂x ∂y ∂z

∂L
=xy+ 2 xz +2 yz=12 (IV)
∂λ
Isolando λ nas equações (I), (II) e (III):

yz xz xy
λ= = =
( y +2 z) ( x +2 z) (2 x+2 z)

o que nos leva as seguintes relações:

a) yz (x+ 2 z )=xz ( y +2 z) → y ( x +2 z )=x ( y +2 z)


b) yz (2 x+2 y )=xy ( y +2 z) → z (2 x +2 y)=x( y+ 2 z )
c) xz (2 x +2 y)=xy (x+ 2 z ) → z (2 x +2 y)= y ( x+ 2 z )

Relacionando a) com b) temos:

y (x +2 z )=x ( y +2 z)=z (2 x+ 2 y ) → xy +2 yz =2 xz +2 yz → y=2 z

Relacionando b) com c) temos:

z (2 x +2 y)=x( y+ 2 z )= y ( x +2 z ) → xy +2 xz =xy+ 2 yz → x= y

Assim, chegamos em x= y=2 z . Substituindo em (IV) temos:


g( x , y , z)=x 2 + x 2+ x2 −12=0 → 3 x2 =12 → x=2

Portanto, para maximizar o volume as dimensões da caixa devem ser, x=2 , y=2 e x=1 ,
o que resulta em um volume de 4m3

Ex: Resolva o seguinte problema de otimização não linear com restrições de igualdade. Note que a
restrição neste caso também é não linear.
2
max f ( x . , y)=x +2 y sujeito a
g( x , y )=x 2 + y 2=1

A função Lagrangiana fica:

L(x , y , λ )=x 2 +2 y−λ ( x 2+ y 2−1)

Igualando o gradiente a zero:

∂L ∂L ∂L ∂L
∇ L( x , y , z , λ )=⃗0 → =0, =0, =0, =0
∂x ∂y ∂z ∂λ

e portanto

∂L ∂L ∂L 2 2
=2 x−2 λ x=0 , =2−2 λ y =0 , =x + y =1
∂x ∂y ∂λ

o que resulta nas equações a seguir:

x−λ x =0 (I)

1− λ y=0 (II)

x 2+ y 2 =1 (III)

De (I) temos que x (1−λ )=0 e assim,

a) x=0 ou
b) λ =1

Assumindo a) e combinando com (III) temos

c) y=±1

Assumindo b) e combinando com II) temos y=1 , que é mais restrita que c)

Portanto, temos como soluções candidatas:

x=0, y=1 e
x=0 e y =−1

Como o máximo de f (x , y ) é obtido em x=0, y=1 , essa é a solução ótima.


Ex: Resolva o seguinte problema de otimização com restrições de igualdade. Note que neste caso
existem duas restrições.

min f (x , y , z , w)=x 2+ y 2+ z 2 + w2 sujeito a


g1 (x , y , z , w)=x+ y+ z + w=10
g2 ( x , y , z , w)=x − y+ z+3 w=6

A função Lagrangiana é definida por:

L( x , y , z , w , λ 1 , λ2 )=f (x , y , z , w)− λ1 ( g1 (x , y , z , w)−c 1)− λ2 ( g 2(x , y , z , w)−c 2 )

L( x , y , z , w , λ 1 , λ2 )=x 2+ y 2 + z 2 +w 2−λ 1( x+ y + z +w−10)− λ2 (x− y + z +3 w−6)

Aplicando o gradiente:

∂L ∂ L ∂ L ∂ L ∂L ∂L
∇ L( x , y , z , w , λ 1 , λ 2)= ⃗
0 → = = = = = =0
∂ x ∂ y ∂ z ∂ w ∂ λ1 ∂ λ2

o que nos leva as seguintes equações:

∂L ( λ 1 + λ 2)
=2 x− λ1 −λ 2=0 → x= (I)
∂x 2

∂L ( λ1 − λ 2 )
=2 y−λ 1+ λ2 =0 → y= (II)
∂y 2

∂L ( λ1 + λ 2)
=2 z− λ1 −λ 2=0 → z=x= (III)
∂z 2

∂L ( λ +3 λ2 )
=2 w− λ1−3 λ2=0 → w= 1 (IV)
∂w 2

∂L
=x + y + z +w=10 (V)
∂λ1

∂L
=x − y + z+3 w=6 (VI)
∂λ2

Substituindo as variáveis de (I), (II), (III) e (IV) nas equações (V) e (VI), temos:

( λ 1+ λ2 ) ( λ1 −λ 2) ( λ1 + λ2 ) ( λ1 +3 λ 2)
+ + + =10 → 4 λ1 + 4 λ 2=20
2 2 2 2

( λ 1+ λ2 ) ( λ 1−λ 2) (λ 1+ λ 2) ( λ1 +3 λ 2)
− + +3 =6 → 4 λ1 +12 λ 2=12
2 2 2 2

o que resulta no seguinte sistema linear de 2 equações e 2 variáveis:

λ1 + λ 2=5
{ λ1 +3 λ 2=3
Fazendo λ 1=5− λ2 e substituindo na 2a equação temos:

(5− λ2 )+3 λ2 =3 → 2 λ2=−2 → λ 2=−1

Assim, temos λ 1=5−(−1)=6 .

Portanto, a solução ótima é dada por:

6−1 5 6+1 7 6−1 5 6−3 3


x= = , y= = , z= = e w= =
2 2 2 2 2 2 2 2

com o valor da função sendo f ( 52 , 72 , 52 , 32 )= 254 + 494 + 254 + 94 = 1084 =27


Aplicação em ciência dos dados: Análise de componentes principais

A Análise de Componentes Principais é uma técnica para tratar dados de alta dimensionalidade que
utilizam as dependências entre as variáveis para representá-los de uma forma mais compacta sem
perda de informação relevante. PCA é uma dos métodos mais simples e robusto de realizar redução
de dimensionalidade. É uma das técnicas mais antigas e foi redescoberta muitas vezes em diversas
áreas da ciência, sendo conhecida também como Transformação de Karhunen-Loeve,
Transformação de Hotelling ou decomposição em valores singulares.

→ Método linear: assume hipótese de que daos encontram-se num subespaço Euclidiano do Rn
→ Método não supervisionado (não requer rótulos das classes)
→ Decorrelaciona os dados de entrada eliminando redundâncias

x1
d x
[]
⃗x ∈R = 2
...
xd

W pca
y1

[]
⃗y ∈R k = ... , k ≪d
yk

PCA pela Maximização da Variância

Seja Z =[T T , ST ] uma base ortonormal para Rd , como:


T
T =[ w⃗1, w⃗2, ... , w⃗k ] (d componentes que desejamos reter no processo de redução)
S T =[ w⃗k+1 , w⃗k +2 ,... , w⃗d ] (componentes restantes que deve ser descartadas)

onde T representa o novo sistema de eixos coordenados (subespaço PCA) e S representa o


subespaço eliminado durante redução de dimensionalidade.

O problema em questão pode ser resumido como: dado um espaço de entrada, deseja-se encontrar
as direções w⃗ i que, ao projetar os dados, maximizam a variância retida na nova representação.
Ou seja, queremos encontrar as direções em que o espalhamento dos dados é máximo (desejamos
reter o máximo da energia dos dados). A pergunta que surge é: quais são essas direções?
Primeiramente, note que podemos escrever ⃗x ∈ R d como (expansão na base ortonormal):
d d
⃗x =∑ ( x⃗T w⃗ j) w⃗ j=∑ c j w⃗ j (cj são os coeficientes da expansão)
j=1 j=1

Assim, o novo vetor ⃗y ∈R k pode ser obtido pela transformação:


d
T T T
⃗ Tj [ w⃗1, w⃗2, ... , w⃗k ]=[c1, c 2, ... , c k ]
⃗y=T ⃗x → ⃗y =⃗x T =∑ c j w
j=1

uma vez que usando a propriedade de ortonormalidade (base ortonormal):

⃗ i w⃗ j= 1, se i= j
{
T
w
0, se i≠ j

Dessa forma, busca-se uma transformação linear T que maximize a variância retida nos dados, ou
seja, que maximize o seguinte critério:
k
PCA 2 T 2
J 1 (T )=E[‖⃗y‖ ]=E [⃗y ⃗y ]=∑ E[c j ] (*)
j=1

Note que E[ ⃗y T ⃗y ]=E[ y 21 ]+ E[ y 22 ]+...+ E[ y 2k ] é justamente a soma das variâncias em cada eixo
coordenado da nova representação. Como c j =⃗xT w⃗ j (projeção de ⃗x em wj ⃗ ). Então:

k k k
PCA T T T T
J 1 (T )=∑ E[ w
⃗ ⃗x ⃗x w⃗ j ]=∑ w
j⃗ E[⃗x ⃗x ] w ⃗ Tj Σ x w⃗ j
⃗ j =∑ w j sujeito a w j‖=1
‖⃗
i=1 i=1 j=1

T
em que E[⃗x ⃗x ]=Σx denota a matriz de covariância dos dados observados.

O problema então consiste em resolver:


k
argmax w T
⃗ j Σx w sujeito a ‖w⃗ j‖=1, para j=1, 2, ..., k
w

⃗ j j=1
⃗j

o que significa encontrar as k direções ortogonais w⃗ j que maximizam o somatório acima.


Trata-se portanto de um problema de otimização com restrições de igualdade. É sabido que a
ferramente matemática mais adequada para esse tipo de problema são os multiplicadores de
Lagrange, utilizados para criar a função Lagrangiana, que incorpora as restrições diretamente na
função objetivo.
k k
J PCA
1 ⃗ Tj Σx w⃗ j −∑ λ j ( w
(T , λ j)=∑ w ⃗ Tj w⃗ j −1)
j=1 j=1

Derivando o funcional em relação a w⃗ j e igualando o resultado a zero, chega-se em:

∂ J (T , λ )=Σ w⃗ −λ w =0
j x j j j
∂ w⃗ j

o que nos leva a um problema clássico na álgebra linear: autovalores e autovetores.

Σ x w⃗ j=λ j w⃗ j (problema de otimização em que os multiplicadores de Lagrange são


autovalores da matriz de covariâncias)

Portanto, os vetores w⃗ j da nova base são autovetores da matriz de covariâncias.

→ w⃗ j : vetores da base PCA são autovetores de Σ x

Para otimizar o critério definido anteriormente, note que:


k k k k
argmax w T
⃗ j=argmax ∑ w
⃗ j Σx w
T
⃗ j= argmax ∑ λ j‖⃗
⃗j λjw w j‖ = argmax ∑ λ j
2

w

⃗ j j=1 w⃗ j j=1 w
⃗ j j=1 w⃗ j j=1

ou seja, devemos maximizar a soma dos k autovalores. Isso define a regra a ser utilizada pelo PCA:
devemos escolher para compor a nova base os K autovetores da matriz de covariâncias associados
aos K maiores autovalores. Após aplicar PCA, os dados projetados na base PCA não exibem
correlação, ou seja, a matriz de covariâncias torna-se diagonal.

Def: Toda matriz A simétrica e positiva semidefinida possui uma decomposição A=Q Λ QT onde
Q é a matriz dos autovetores (nas colunas) e Λ é a matriz diagonal dos autovalores. Sabemos
que matrizes de covariâncias são matrizes positivas semidefinidas.

Além disso, pode-se mostrar que se ⃗y= A ⃗x ( ⃗y é uma transformação linear de ⃗x ) então a
matriz de covariância de ⃗y é transformada por Σ y = A T Σ x A .

Combinando os fatos definidos acima, a matriz de covariâncias dos dados transformados Σ y é:

T T
Σ y= A Q Λ Q A

onde A é a matriz dos autovetores de Σ x , ou seja, é igual a Q e portanto:

λ1 0 ... 0
T T
Σ y =Q Q Λ Q Q=Λ=
0 λ2
0 0
0 0 [ ... 0
... 0
... λn ]
sendo que QT Q=I pois a base formada pelos autovetores é ortonormal
→ Dizemos portanto que após a transformação PCA, os dados encontram-se decorrelacionados
(não há correlação, elimina as dependências existentes entre as variáveis).

Interpretação geométrica no caso 2D

Algoritmo PCA

1. Ler dataset X ={⃗x 1 , ⃗x 2 ,⃗x 3, ... ,⃗x n } com ⃗x i∈ R d


n
1
2. Computar o vetor média μ x a matriz de covariâncias: Σ x = ∑ (⃗x i−⃗ μ x )T
μ x )(⃗xi −⃗
n i=1
3. Obter autovalores e autovetores de Σ x
4. Selecionar os k autovetores associados aos k maiores autovalores da matriz de covariâncias,
denotados por w⃗1, w⃗2, … , w⃗k
5. Definir a matriz de transformação W PCA =[ w⃗1, w⃗2, … , w⃗k ] ( n x k )
6. Projetar dados na nova base: ⃗y=W TPCA x⃗i com autovetores nas linhas de W TPCA , ou seja, a
matriz transposta é k x n e ⃗ x i vetor coluna n x 1

A seguir apresentamos um script em Python que implementa o método PCA para análise do
conjunto de dados IRIS, que possui n = 150 amostras, cada uma contendo m = 4 atributos. A matriz
de dados é portanto 150 x 4. Desejamos obter uma matriz de dados de dimensões 150 x 2, ou seja,
desejamos reduzir a dimensão dos dados pela metade. A ideia é que depois do PCA, é possível
plotar gráficos de dispersão dos dados e visualizar as amostras como pontos no plano.
import numpy as np
import sklearn.datasets as skdata
import matplotlib.pyplot as plt

'''
Aplica PCA nos dados para reduzir dimensionalidade para d

dados: matriz n x m, em que cada linha representa uma amostra


d: inteiro menor que m
'''
def PCA(dados, d):
# Autovalores e autovetores da matriz de covariâncias
v, w = np.linalg.eig(np.cov(dados.T))
# Ordena os autovalores
ordem = v.argsort()
# Seleciona os d autovetores associados aos d maiores autovalores
maiores_autovetores = w[:, ordem[-d:]]
# Monta a matriz de projeção
Wpca = maiores_autovetores
# Realiza a projeção dos dados no subespaço PCA
novos_dados = np.dot(Wpca.T, dados.T)

return novos_dados

# Início do script
X = skdata.load_iris()
dados = X['data']

# Aplica PCA
dados_pca = PCA(dados, 2)

# Plota dados
plt.figure(1)
plt.plot(dados_pca[0,0:51], dados_pca[1,0:51], '*', color='blue')
plt.plot(dados_pca[0,51:101], dados_pca[1,51:101], '*', color='red')
plt.plot(dados_pca[0,101:151], dados_pca[1,101:151], '*', color='green')
plt.show()
Aula 11: Otimização não linear com restrições de desigualdade

Vimos anteriormente que a solução de problemas de otimização não lineares com restrições de
igualdade são solucionados com o método dos multiplicadores de Lagrange. Nesta aula,
estudaremos problemas em que as restrições são desigualdades, ou seja, podem ser expressas da
forma g( x , y )≤c . Em suma, o problema de otimização na forma padrão é da forma:

maximizar f ( x1 , x2 , ... , x n ) sujeito a


g1 ( x 1 , x 2 , ... , x n )≤0
g2 (x 1 , x 2 , ... , x n )≤0

gm (x 1 , x 2 ,... , x n)≤0

Veremos a seguir que as condições de KKT (Karush-Kuhn-Tucker) definem uma ferramenta


matemática muito útil na solução de tais problemas.

Condições de Karush-Kuhn-Tucker

São condições básicas para determinar se um ponto é crítico em um problema de otimização não
linear com restrições de desigualdade. As condições de KKT reconhecem que existem duas
possibilidades para um ótimo local:

a) Nenhuma restrição está ativa no ponto de ótimo local: há uma colina/vale na função objetivo que
não está próxima do valor limite de uma restrição. Em casos como este, o gradiente será zero no
ótimo local (caso trivial).

b) Pelo menos uma restrição está ativa no ponto de ótimo local: neste caso, alguma restrição está
prevenindo o método de melhorar o valor da função objetivo. O gradiente não é zero!

As condições de KKT tratam os dois casos simultaneamente. Assim, devemos proceder como:

- Sempre escreva as restrições de modo que o lado direito (RHS) seja zero.
2 2 2 2
x 1+3 x 2≤5 se transforma em x 1+3 x 2−5≤0

- Dessa forma, restrições ativas sempre tem valor nulo, pois g( x)=0

- Restrições inativas tem um valor de função diferente de zero (i.e., g(x)=−4 ). Mas podemos
setar o multiplicador associado como λ =0 porque a restrição em questão está inativa.

- Portanto, sempre temos λ i gi ( x )=0 para i=1 ,2 , ... , m (cobre tanto restrições ativas quanto
inativas). Essa é conhecida como condição de ortogonalidade.

Podemos resumir o processo em 3 condições principais:

1. Condição Lagrangiana

∂ L(x ,... , x , λ , ... , λ )=0 para j=1, 2 ,... , n


1 n 1 m
∂ xj
2. Condição de ortogonalidade

λ i gi (x 1 ,... , x n)=0 para i=1 ,2 , ... , m

3. Restrições

gi (x 1 , ... , x n )≤0 para i=1 ,2 , ... , m

Uma observação importante é que no método dos multiplicadores de Lagrange, vimos que o sinal
do multiplicador λ i não importava (tanto faz o gradiente da restrição estar na mesma direção ou
direção contrária do gradiente da função objetivo).

Mas para as condições de KKT, o sinal de λ i importa! Basicamente, o sinal do multiplicador de


Lagrange nos diz se estamos ou não em um ponto de máximo local. Porque?

Lembre-se que todas as restrições estão na forma gi ( x 1 , x 2 , ... , x n )≤0 , para i=1 ,2 , ... , m . O
gradiente aponta para a direção de maior crescimento da função. Então, se uma restrição dessa
forma está ativa, ou seja, gi ( x 1 , x 2 , ... , x n )=0 , então se mover na direção do gradiente é proibido,
pois a restrição proíbe a função de aumentar).

Agora, suponha que desejamos maximizar a função objetivo: significa que desejamos nos mover na
direção do gradiente da função. Dessa forma, se estamos em um ponto tentando nos mover na
direção do gradiente mas uma desigualdade está ativa e o seu gradiente está na mesma direção do
gradiente da função, o multiplicador de Lagrange correspondente será positivo e estaremos em um
ponto de ótimo local (pois restrição está ativa). Em outras palavras, uma restrição de desigualdade
“segura” o ponto quando o multiplicador de Lagrange é positivo, o que nos leva a condição de não
negatividade dos λ i . Ou seja, se multiplicador de Lagrange é negativo, então não estamos em um
ponto crítico!
Note que se o gradiente da restrição apontasse para a direção oposta (para baixo na figura anterior, o
que implicaria em inverter a ordem do crescimento da restrição, ou seja, para baixo aumentaria e
para cima diminuiria), poderíamos continuar subindo a colina em direção ao máximo absoluto.

RESUMO

Para um problema de otimização não linear da forma

maximizar f ( x1 , x2 , ... , x n ) sujeito a


g1 ( x 1 , x 2 , ... , x n )≤0
g2 (x 1 , x 2 , ... , x n )≤0

gm (x 1 , x 2 ,... , x n)≤0

em que a função Lagrangiana é dada por:


m
L( x 1 , ... , x n , λ1 , ..., λm )=f ( x 1 , ... , x n )−∑ λi g i ( x1 , ... , x n )
i=1

as condições de KKT são dadas por:

∂L
i) =0 j=1, 2 ,... , n (Ponto de ótimo da Lagrangiana)
∂xj

ii) λ i gi ( x 1 ,... , x n)=0 i=1 ,2 , ... , m (Ortogonalidade)

iii) gi (x 1 , ... , x n )≤0 i=1 ,2 , ... , m (Não positividade)

iv) λ i≥0 i=1 ,2 , ... , m (Não negatividade)

Algumas perguntas:

- E se o modelo incluir também restrições de igualdade?


Basta remover as condições de λ i≥0 das respectivas restrições.

- E se tivermos um problema de minimização?


Há duas possibilidades:
1. Multiplicar função objetivo por -1 e converter para maximização: max z = min -z
2. Manter problema de minimização e substituir condições de não negatividade por não positividade

A seguir iremos resolver alguns exercícios sobre as condições de KKT.

Ex: Dado o problema de otimização a seguir

maximizar f (x1 , x2 )=10 x 21−x 22+ x 1 x2 sujeito a


2
x 1−x 2≥5
x 1 , x 2∈ R

Pergunta-se: O ponto (9 , 2) é um ótimo local? Justifique sua resposta.


Primeiro, devemos converter a restrição, que na forma padrão, fica:
2
−x 1+ x 2 +5≤0

A função Lagrangiana é dada por:


2 2 2
L( x 1 , x 2 , λ )=10 x1−x 2 + x 1 x 2− λ (−x 1 + x 2+5)

Assim, as condições de KKT são:

∂L
(I) =20 x 1 + x 2+ λ =0
∂ x1
∂L
(II) =−2 x 2 + x 1−2 λ x 2=0
∂ x2
(III) λ (−x 1+ x 22 +5)=0
2
(IV) −x 1+ x 2 +5≤0
(V) λ ≥0

Vamos testar se o ponto (9 , 2) satisfaz todas as condições. Substituindo esse ponto em (I), temos

180+2+ λ =0

o que implica em λ =−182 , o que claramente fera a condição (V) – não negatividade! Portanto,
a solução em questão, não é uma solução válida!

Ex: Resolva o seguinte problema de maximização

maximizar f (x1 , x2 )=5 x 1+ 4 x 2 sujeito a


x 1+ x 2≤10
x 1≤8

Reescrevendo as restrições, temos:

(I) x 1+ x 2−10≤0
(II) x 1−8≤0

A função Lagrangiana pode ser expressa como:

L(x 1 , x 2 , λ 1 , λ2)=5 x1 + 4 x 2−λ 1( x1 + x 22−10)− λ2 (x 1−8)

As próximas condições de KKT são:

∂L
(III) =5−λ 1−λ 2=0
∂ x1
∂L
(IV) =4−λ 1=0
∂ x2
(V) λ 1 ( x1 + x 2−10)=0
(VI) λ 2 ( x1 −8)=0
(VII) λ 1 , λ 2≥0
Note que de (IV) temos que λ 1=4 , o que nos leva a λ 2=5−4=1 .

Substituindo os valores nas equações (V) e (VI), chega no seguinte sistema de equações:

4 x 1+ 4 x 2=40
{ x1 −8=0

É fácil ver que x 1=8 e 4 x 2=8 , o que nos leva a x 2=2 .

*
Portanto, o ponto ⃗x =( 8 ,2) é um ponto de máximo local (confira que a Hessiana é negativa
semi-definida).

Ex: Resolva o seguinte problema de minimização a seguir

minimizar f ( x1 , x2 )=(x 1−3)2+( x 2−5)2 sujeito a

x 1+ x 2≤7

Escrevendo a restrição na forma padrão, temos:

(I) x 1+ x 2−7≤0

A função Lagrangiana é dada por:

L( x 1 , x 2 , λ )=(x 1−3)2 +(x 2−5)2− λ ( x 1 + x 2−7)

de modo que as derivadas são iguais a:

(II) 2( x 1−3)− λ=0


(III) 2( x 2−5)− λ=0

A condição de ortogonalidade é:

(IV) λ (x 1+ x 2−7)=0

Como temos um problema de minimização, as condições de não negatividade se transformam em


condições de não positividade:

(V) λ ≤0

Das equações (II) e (III), temos:

x 1=3+ λ e x 2=5+ λ
2 2

Substituindo esses valores na equação (IV) nos leva a:

λ 3+ λ +5+ λ −7 =0
( )
2 2

Simplificando, temos:
λ ( λ +1)=0

cujas soluções possíveis são λ =0 ou λ =−1 .

a) Caso 1: λ =0

Então, temos que x 1=3 e x 2=5 . Porém, note que a restrição, dada pela equação (I), falha!

3+5−7≤0 (solução inválida)

b) Caso 2: λ =−1

5 9
Neste caso, temos que x 1= e x 2= . Vamos checar se as condições de KKT são válidas.
2 2

5 9 14
(I) + −7= −7=7−7=0≤0 (OK)
2 2 2

(II) 2 ( 52 −3)+ 1=−1+1=0 (OK)

(III) 2 ( 92 −5)+1=−1+1=0 (OK)

(IV) −1 ( 52 + 92 −7)=−1(7−7)=0 (OK)

(V) λ =−1≤0 (OK)

Ex: Resolva o seguinte problema de minimização a seguir

minimizar f ( x1 , x2 , x3 )=x 21 +2 x22 +3 x 23 sujeito a

x 1−x 2−2 x 3≤12

x 1+2 x 2−3 x 3≤8

Reescrevendo as restrições, temos:

(I) x 1−x 2−2 x 3−12≤0


(II) x 1+2 x 2−3 x 3−8≤0

A função Lagrangiana é dada por:

L(x 1 , x 2 , x 3 , λ1 , λ2 )=x 21+ 2 x 22+ 3 x 23 −λ1 (x 1−x 2−2 x 3−12)−λ 2 (x 1+2 x 2−3 x 3−8)

Calculando as derivadas, temos:

∂L
(III) =2 x 1−λ 1−λ 2=0
∂ x1
∂L
(IV) =4 x 2+ λ 1−2 λ2=0
∂ x2

∂L
(V) =6 x 3 +2 λ 1+3 λ2=0
∂ x3

As condições de ortogonalidade são dadas por:

(VI) λ 1 (x1 −x2 −2 x 3−12)=0

(VII) λ 2 (x1 +2 x 2−3 x3 −8)=0

Como temos um problema de minimização, as restrições de não positividade são:

(VIII) λ 1 , λ 2≤0

Da equação (VI), temos que:

a) λ 1=0
b) x 1−x 2−2 x 3−12=0

- Análise do caso a)

Das equações (III), (IV) e (V), temos que:

λ2 λ2 λ2
x⃗1= x⃗2= x⃗1=−
2 2 2

Utilizando esses valores na equação (VII):

λ2 λ 2 λ
λ2 ( 2
+ 2 +3 −8 =0
2 2 )
Simplificando, temos:

λ 2 ( 3 λ2−8 )=0

8 8
que tem como soluções λ 2=0 ou
. Pela restrição de não positividade, λ 2=
λ 2= não é
3 3
viável, então resta apenas λ 2 =0 . Voltando para as equações (III), (IV) e (V), temos:

2 x 1=0 → x 1=0
4 x 2=0 → x 2=0
6 x 3=0 → x 3=0

Isso implica que a solução é ⃗x *=[0 , 0 , 0] . Note que a solução satisfaz todas as condições de
KKT e portanto é uma solução ótima viável (verifique que trata-se de um ponto de mínimo).

- Análise do caso b)
Temos que x 1−x 2−2 x 3−12=0 (*)

Usando as equações (III), (IV) e (V), temos:

( λ 1+ λ2 ) (2 λ2 −λ 1) (2 λ 1+3 λ2 )
x 1= x 2= x 3=−
2 4 6

Substituindo em (*), chegamos em:

( λ 1+ λ 2) (2 λ 2−λ 1) (2 λ1 +3 λ 2)
− + −12=0
2 4 6

o que é equivalente a:

6 λ1 +6 λ2−6 λ2 +3 λ 1+ 8 λ1 +12 λ 2−144


=0
12

Simplificando os termos, chegamos na seguinte equação:

17 λ 1+12 λ 2=144

Porém, as condições de não positividade dizem que λ 1 , λ 2≤0 . Como podemos ver, não existem
valores negativos que satisfaçam a igualdade acima. Portanto, a única solução do problema é:
*
⃗x =[ x 1 , x 2 , x 3 ]=[0 , 0 ,0 ]

Ex: Resolva o seguinte problema de minimização.

Minimizar f (x1 , x2 )=x 21 + x 22+60 x 1 sujeito a

x 1≥80

x 1+ x 2≥120

Reescrevendo as restrições na forma padrão, temos:

(I) −x 1+ 80≤0
(II) −x 1−x 2+120≤0

A função Lagrangiana fica:


2 2
L(x 1 , x 2 , λ 1 , λ2)=x 1+ x 2 +60 x 1−λ 1(−x1 +80)− λ2 (− x1−x 2 +120)

As condições de KKT são dadas por:

∂L
(III) =2 x 1+ 60+ λ 1+ λ2 =0
∂ x1

∂L
(IV) =2 x 2+ λ 2=0
∂ x2
(V) λ 1 (−x 1+80)=0

(VI) λ 2 (−x 1−x 2+120)=0

(VII) λ 1 , λ 2≤0 (minimização, então condição de não positividade)

Partindo da equação (V), temos duas situações:

Caso a) λ 1=0
Caso b) −x 1+ 80=0

- Análise do caso a) λ 1=0 :

Das equações (III) e (IV), temos:

− λ2 −60 λ2
x 1= =− −30
2 2

λ2
x 2=−
2

Usando esses valores na equação (VI):

λ2 ( λ2 + 30+ λ2 + 120)=0
2 2

o que nos leva a:

λ 2 ( λ 2+150)=0

cujas soluções são λ 2=0 ou λ 2=−150 . Temos outras duas possibilidades:

a1) λ 2=0 : neste caso, temos que

x 1=0−30=−30 e x 2=0

o que viola a condição (I). Solução inválida!

a2) λ 2=−150 : neste caso, temos que

150 150
x 1= −30=45 e x 2= =75
2 2

o que também viola a restrição (I). Solução inválida!

- Análise do caso b) −x 1+ 80=0 → x 1=80

Usando esse valor nas equações (III) e (IV) temos:

λ 2=−2 x2
Assim, podemos escrever:

−λ 1=λ 2+ 220 → λ 1=2 x 2−220 (*)

Substituindo a equação anterior na equação (VI), temos:

−2 x 2 (−80−x 2+ 120)=0

o que nos leva a:

−2 x 2 (−x 2 +40)=0

cujas soluções são x 2=0 ou x 2=40 .

Caso b1) x 2=0

De (*) temos que λ 1=−220 e λ 2=0

Note que a solução x 1=80 e x 2=0 viola a condição (II). Solução inválida!

Caso b2) −x 2+ 40=0

Note que temos x 2=40 . Da equação (*), temos que:

λ 1=80−220=−140

λ 2=−80

Portanto, a solução x 1=80 e x 2=40 é viável pois satisfaz todas as condições de KKT, dadas
pelas equações de (I) a (VII).

Ex: Resolva o seguinte problema de minimização.

minimizar f (x1 , x2 )=2 x 21+2 x 1 x 2 + x 22−10 x 1−10 x 2 sujeito a

2 2
x 1+ x 2≤5

3 x1 + x 2≤6

Note que temos uma restrição não linear, o que dificulta um pouco a álgebra nos cálculos manuais.
Utilize um computador para realizar os cálculos se necessário.

Solução ótima: ⃗x *=[ x 1 , x 2 ]=[1 , 2] com λ 1=−1 e λ 2=0


Bibliografia recomendada

Luenberger, D. L., Ye, Y.; Linear and Nonlinear Programming, 3a ed., Springer, 2008.

Yanasse, H. H., Arenales, M., Morabito, R., Armentano, V. A.; Pesquisa Operacional, 2nd ed.,
Elsevier, 2015.

J.Nocedal, S.J.Wright, “Numerical Optimization, Second Edition”, Springer, 2006.

S.Boyd, L.Vandenberghe “Convex Optimization”, Cambridge University Press, 2009.

Avriel, Mordecai. Nonlinear Programming: Analysis and Methods. Dover Publishing, 2003.

Bazaraa, Mokhtar S. and Shetty, C. M. Nonlinear programming. Theory and algorithms. John Wiley
& Sons, 1979.

Nocedal, Jorge and Wright, Stephen J. Numerical Optimization. Springer, 1999.

Jan Brinkhuis and Vladimir Tikhomirov, Optimization: Insights and Applications, Princeton
University Press, 2005.

Igor Griva, Stephen G. Nash and Ariela Sofer. Linear and nonlinear optimization. SIAM, 2a edição,
2009.

Changhyun Kwon, Julia Programming for Operations Research, 2 ed., 2021. Disponível em:
https://juliabook.chkwon.net/book/frontmatter

“The real voyage of discovery consists not in seeking new landscapes, but in having new eyes.”
(Marcel Proust)
Sobre o autor

Alexandre L. M. Levada é bacharel em Ciências da Computação pela Universidade Estadual


Paulista “Júlio de Mesquita Filho” (UNESP), mestre em Ciências da Computação pela
Universidade Federal de São Carlos (UFSCar) e doutor em Física Computacional pela Universidade
de São Paulo (USP). Atualmente é professor adjunto no Departamento de Computação da
Universidade Federal de São Carlos e seus interesses em pesquisa são: filtragem de ruído em
imagens e aprendizado de métricas via redução de dimensionalidade para problemas de
classificação de padrões.

View publication stats

Você também pode gostar