3o Exercício de casa - versão 2

Jacques Wainer

versão 2: modificação no BFGS para usar e não usar o gradiente. Ponto inicial do descida do gradiente com busca em linha, e o ponto inicial (não sei porque precisa) do BOBYQA.

Pode ser feito individualmente ou em duplas.

data para entrega: até meia note de 30/4 (5a feira)

Nos vamos encontrar o mínimo da função de Himmelblau (de 2 variáveis \(x\) e \(y\):

\[f(x, y) = (x^2+y-11)^2 + (x + y^2 -7)^2\]

que não é uma função convexa: ela tem 4 mínimos

Use os seguintes algoritmos de otimização:

Utilize a função minimize do scipy para o conjugado gradiente, BFGS (use o L-BFGS-B) e Nelder-Mead.

Use os valores default para tolerancia e outros parametros.

O NEWUOA é uma das versão de uma família de otimização sem gradiente de Powell. . Algum site menciona que a ultima versão é o BOBYQA. Mas note que o NEWUOA é para problemas Unconstained (sem restrição), e o BOBYQA é para Bounded (boxed). Nenhuma das duas versões estão no scipy.minimize - voce terá que instalar algum pacote extra para usa-los (por exemplo NlOpy ou Py-BOBYQA ou algum outro). (O minimize tem uma opção de algoritmo chamado “Powell” mas eu não sei que particular algoritmo é esse, nem se ele é da família de algoritmos sem gradiente de Powell).

Para a descida do gradiente com busca em linha, utilize ou a função minimize-scalar ou a função line-search do scipy (vc escolhe a versão do algoritmo de busca em linha: secante, golden ratio, Brent)

Para cada um dos 5 algoritmos de otimização acima, imprima

Discuta rapidamente esses resultados.