Buscar..


Sintaxis

  1. importar numpy como np
  2. desde scipy.optimize import _minimize
  3. desde scipy import especial
  4. importar matplotlib.pyplot como plt

Observaciones

Tenga en cuenta el subrayado antes de 'minimizar' al importar desde scipy.optimize; '_minimize' Además, probé las funciones de este enlace antes de hacer esta sección y descubrí que tenía menos problemas / funcionó más rápido, si importaba 'especial' por separado. La función de Rosenbrock en la página vinculada era incorrecta: primero debe configurar la barra de colores; He publicado un código alternativo, pero creo que podría ser mejor.

Más ejemplos por venir.

Vea aquí para una explicación de Hessian Matrix

Ejemplo de optimización (dorado)

El método 'Golden' minimiza una función unimodal al reducir el rango en los valores extremos

import numpy as np
from scipy.optimize import _minimize
from scipy import special
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 500)
y = special.j0(x)
optimize.minimize_scalar(special.j0, method='golden')
plt.plot(x, y)
plt.show()

Imagen resultante

golgen_small

Ejemplo de optimización (Brent)

El método de Brent es una combinación de algoritmos más complejos de otros algoritmos de búsqueda de raíces; sin embargo, el gráfico resultante no es muy diferente del gráfico generado a partir del método de oro.

import numpy as np
import scipy.optimize as opt
from scipy import special
import matplotlib.pyplot as plt
    
x = np.linspace(0, 10, 500)
y = special.j0(x)
# j0 is the Bessel function of 1st kind, 0th order
minimize_result = opt.minimize_scalar(special.j0, method='brent')
the_answer = minimize_result['x']
minimized_value = minimize_result['fun']
# Note: minimize_result is a dictionary with several fields describing the optimizer,
# whether it was successful, etc. The value of x that gives us our minimum is accessed
# with the key 'x'. The value of j0 at that x value is accessed with the key 'fun'.
plt.plot(x, y)
plt.axvline(the_answer, linestyle='--', color='k')
plt.show()
print("The function's minimum occurs at x = {0} and y = {1}".format(the_answer, minimized_value))

Gráfica resultante

brent_sml

Salidas:

The function's minimum occurs at x = 3.8317059554863437 and y = -0.4027593957025531

Función de Rosenbrock

Creo que este ejemplo podría ser mejor pero obtienes la esencia

import numpy as np
from scipy.optimize import _minimize
from scipy import special
import matplotlib.pyplot as plt
from matplotlib import cm
from numpy.random import randn

x, y = np.mgrid[-2:2:100j, -2:2:100j]
plt.pcolor(x, y, optimize.rosen([x, y]))
plt.plot(1, 1, 'xw')

# Make plot with vertical (default) colorbar
data = np.clip(randn(100, 100), -1, 1)
cax = plt.imshow(data, cmap=cm.coolwarm)

# Add colorbar, make sure to specify tick locations to match desired  ticklabels 
cbar = plt.colorbar(cax, ticks=[-2, 0, 2])  # vertically oriented colorbar
plt.axis([-2, 2, -2, 2])
plt.title('Rosenbrock function') #add title if desired
plt.xlabel('x')
plt.ylabel('y')

plt.show()  #generate

Rosenbrock



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow