typestar

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

  1. x0 es la conjetura inicial, y en problemas no convexos importa.
  2. res.x es el minimizador; res.fun, el valor ahí.
  3. method elige el algoritmo; el que viene por defecto suele bastar.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 4 en Optimización; paso 10 de 23 en Computación científica con SciPy.

← Anterior Siguiente →