Ricerca…


Sintassi

  1. importa numpy come np
  2. da scipy.optimize import _minimize
  3. da speciale di importazione scipy
  4. importare matplotlib.pyplot come plt

Osservazioni

Notare il carattere di sottolineatura prima di "riduci a icona" quando si importa da scipy.optimize; '_minimize' Inoltre, ho testato le funzioni da questo link prima di fare questa sezione, e ho scoperto che avevo meno problemi / ha funzionato più velocemente, se ho importato 'special' separatamente. La funzione Rosenbrock nella pagina collegata non era corretta: devi prima configurare la barra dei colori; Ho pubblicato un codice alternativo ma penso che potrebbe essere migliore.

Ulteriori esempi in arrivo.

Vedi qui per una spiegazione di Hessian Matrix

Esempio di ottimizzazione (dorato)

Il metodo 'Golden' minimizza una funzione unimodale restringendo l'intervallo nei valori estremi

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()

Immagine risultante

golgen_small

Esempio di ottimizzazione (Brent)

Il metodo di Brent è una combinazione algoritmica più complessa di altri algoritmi di ricerca delle radici; tuttavia, il grafico risultante non è molto diverso dal grafico generato dal metodo d'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))

Grafico risultante

brent_sml

Uscite:

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

Funzione Rosenbrock

Pensa che questo esempio potrebbe essere migliore ma ottieni il succo

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow