Minimizar una función en Python
minimize baja la pendiente desde un punto inicial, con o sin gradientes.
import numpy as np
from scipy import optimize
def rosenbrock(v):
x, y = v
return (1 - x) ** 2 + 100 * (y - x ** 2) ** 2
resultado = optimize.minimize(rosenbrock, x0=np.array([-1.0, 2.0]))
print(resultado.success, resultado.x.round(4), round(resultado.fun, 8))
print(resultado.nit, resultado.message[:32])
escalar = optimize.minimize_scalar(lambda x: (x - 3.5) ** 2 + 1,
bounds=(0, 10), method="bounded")
print(round(escalar.x, 4), round(escalar.fun, 4))
Cómo funciona
x0es la conjetura inicial, y en problemas no convexos importa.res.xes el minimizador;res.fun, el valor ahí.methodelige el algoritmo; el que viene por defecto suele bastar.
Palabras clave y builtins usados aquí
asdeflambdaprintreturnround
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 458
- Tokens
- 156
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 85 segundos.
Paso 1 de 4 en Optimización; paso 10 de 23 en Computación científica con SciPy.