Optimización
Optimización
Optimización
Con Newton CG, se utiliza el método de Newton para calcular la dirección de búsqueda
de las primeras etapas de la optimización, pero cuando alcanza una cierta cantidad de
iteraciones o cuando se detecta que la dirección Newton es inestable, se cambia a la
dirección de búsqueda del método de gradiente conjugado.
2
Función Rosenbrock
3
def rosenbrock(x):
"""Función de Rosenbrock"""
return (1 - x[0])**2 + 100*(x[1] - x[0]**2)**2
def rosenbrock_grad(x):
"""Gradiente de la función de Rosenbrock"""
grad = np.zeros_like(x)
grad[0] = -2*(1-x[0]) - 400*x[0]*(x[1] - x[0]**2)
grad[1] = 200*(x[1] - x[0]**2)
return grad
return x
PREGUNTAS:
Una posible estrategia es realizar una búsqueda en línea para encontrar un punto
inicial adecuado, esto implica elegir un punto inicial aleatorio realizar una
iteración con el método de Newton con gradiente conjugado y evaluar la función
en ese punto, luego, se puede mover el punto inicial en la dirección opuesta al
gradiente y repetir el proceso hasta que se encuentre un mínimo local aceptable.
Sin embargo a medida que el método se aleja del mínimo, la curvatura se vuelve
más aguda y la convergencia se vuelve más lenta, además la tasa de
convergencia también depende de la elección del parámetro de búsqueda en
línea, que afecta la distancia que se mueve en cada iteración.
5
solución pero no tan pequeño como para aumentar el tiempo de cómputo sin
mejorar significativamente la precisión.
import numpy as np
def egg_holder(x):
def egg_holder_grad(x):
grad = np.zeros(2)
return grad
#Definir una función para realizar la iteración usando el método de Newton con
gradiente conjugado:
x = x0.copy()
grad = grad_fun(x)
p = -grad
k=0
#Mientras ||gk|| > tol: Calcular la matriz Hessiana Hk de la función en el punto xk.
9
hess = np.zeros((2,2))
hess[1,0] = hess[0,1
x += alpha * p
grad_old = grad.copy()
grad = grad_fun(x)
p = -grad + beta * p
break
k += 1
return x, fun(x), k
x0 = np.array([-10, 10])
PREGUNTAS:
rápidamente, sin embargo, si no está cerca, puede quedar atrapado en uno de los
mínimos locales.