SciPy Evoluzione differenziale

Scipy Evoluzione Differenziale



Questo articolo riguarda SciPy Differential Evolution (DE). SciPy è la libreria del linguaggio Python e Differential Evolution è il metodo o la funzione della libreria SciPy. La maggior parte delle persone ha imparato Python, siano essi sviluppatori o meno, poiché le numerose librerie e funzioni di Python lo rendono molto sicuro e affidabile. SciPy è spesso usato per risolvere equazioni differenziali e algebriche, interpolazione, ottimizzazione, ecc. Qui, stiamo discutendo l'uso di SciPy DE per aiutarti a capire come implementare la funzione di evoluzione differenziale di SciPy nelle applicazioni Python.

Che cos'è l'evoluzione differenziale di SciPy nel linguaggio Python?

Scipy è una libreria superficiale, gratuita e comprensibile utilizzata per risolvere problemi scientifici e matematici. SciPy è uno scrigno del tesoro per gli sviluppatori perché la sua libreria è piena di moduli preziosi. SciPy espande le funzionalità di NumPy con un prezioso cluster di algoritmi. La libreria SciPy ha sottopacchetti che possono essere utilizzati per i calcoli, come scipy.io, scipy.optimize, ecc. SciPy produce una funzione di 'evoluzione differenziale' e molte potenti funzioni nel pacchetto scipy.optimize. Il scipy.optimize viene utilizzato per l'ottimizzazione nelle applicazioni Python.

La funzione di evoluzione differenziale è una funzione globale acquisita dal pacchetto di ottimizzazione SciPy che viene utilizzata per trovare il minimo globale delle funzioni multivariate. Può gestire funzioni obiettivo multidimensionali non lineari e non differenziabili. È un algoritmo di ricerca utilizzato per cercare aree di funzioni spaziali continue. Questa funzione lavora su valori reali.







Sintassi della funzione di evoluzione differenziale

La funzione di evoluzione differenziale è presente in Python utilizzando la funzione different_evolution(). La sintassi della funzione di evoluzione differenziale è mostrata di seguito:





Esaminiamo i parametri della funzione:





La funzione deve essere richiamabile con f(x,*args); i limiti si riferiscono alla sequenza di variabili che possono essere specificate in due modi: la strategia è facoltativa o una stringa con il valore predefinito 'best1bin'; maxiter è facoltativo o un valore int; popsize è int o facoltativo; tol è int o facoltativo; il valore della mutazione è in float o facoltativo; il valore di ricombinazione è in float o facoltativo; il seme è none, int, NumPy e Random.

Nella prossima sezione, discuteremo una funzione di evoluzione differenziale con l'aiuto di semplici esempi.



Esempio 1

Cominciamo con un semplice esempio che svilupperà il tuo interesse nella comprensione del concetto di funzione di evoluzione differenziale. Abbiamo usato la funzione different_evolution() per trovare il valore minimo. Ma, per trovare il valore minimo, la funzione richiede limiti di ricerca e una funzione obiettivo richiamabile definita. Di conseguenza, definiamo una funzione prima di utilizzare la funzione differenziale_evoluzione nel programma. Di seguito si riporta il codice di riferimento del programma:

importare intorpidito come per esempio.
a partire dal scipy importare ottimizzare
a partire dal scipy. ottimizzare importare differenziale_evoluzione
importare matplotlib. pyplot come py
a partire dal matplotlib importare cm

def funz ( p ) :

con , X = p

h = per esempio. sqrt ( con ** 4 +x** 4 )

Restituzione per esempio. sqrt ( h )


DE_limiti = [ [ - 6 , 6 ] , [ - 6 , 6 ] ]

ris = differenziale_evoluzione ( funz , DE_limiti )

Stampa ( ris )

Abbiamo importato librerie come SciPy e NumPy per calcoli numerici di array. Abbiamo importato la funzione different_evolution dal modulo scipy.optimize. Quindi, con la parola chiave “def”, definiamo la funzione obiettivo richiamabile e passiamo il parametro “p”. Definiamo con successo la funzione che trova la radice quadrata dell'addizione delle variabili NumPy, che è z, x. Il valore della radice quadrata è memorizzato nella variabile 'h'. Restituiamo il valore della radice quadrata nella funzione definita. Viene restituito come argomento.

Successivamente, fissiamo i limiti della variabile che può essere dettagliata spiegando i valori minimo e massimo della funzione. Eseguiamo la funzione different_evolution con 'DE_bounds'' come argomento. Abbiamo chiamato il valore della funzione con una variabile denominata res. Alla fine, usiamo l'istruzione print per mostrare l'output. Il risultato è stato visualizzato dopo aver eseguito il programma. Lo screenshot di output previsto è mostrato di seguito:

Differential_evolution() mostra che il valore minimo della funzione è visualizzato al punto (0, 0).

Esempio 2

Questo è un altro esempio della funzione di evoluzione differenziale. In questo, prendiamo gli array e applichiamo diverse operazioni tra di loro. Di seguito si riporta il codice di riferimento del programma:

importare intorpidito come per esempio.
a partire dal scipy importare ottimizzare
a partire dal scipy. ottimizzare importare differenziale_evoluzione

def obiettivo_func ( d ) :
Restituzione ( d [ 1 ] - 1.2 ) / 2 + 0,5 * d [ 0 ] * 1.3 * ( d [ 1 ] + 0,5 ) ** 3

_limiti = [ ( - 0.3 , 0.3 ) , ( - 0.3 , 0.3 ) ]

disp = differenziale_evoluzione ( obiettivo_func , _limiti , popsize = 80 , polacco = Falso )

Stampa ( disp )

Come mostrato nello screenshot precedente, abbiamo importato con successo la libreria SciPy.optimize.differential_evolution e la libreria NumPy nel programma. Ora definiamo una funzione obiettivo per conto della quale troviamo un valore minimo. Abbiamo passato l'espressione matematica nella funzione obiettivo e restituito un valore come argomento alla funzione definita. Il confine tra i valori delle funzioni è un must. Quindi, dopo aver definito la funzione, abbiamo fissato entrambi i valori (massimo e minimo).

Dopo aver definito tutte le variabili essenziali, abbiamo chiamato la funzione differenziale_evoluzione per trovare il valore minimo di una funzione. Abbiamo salvato il valore di ritorno minimo della funzione in una variabile chiamata disp. Alla fine del programma, passiamo la variabile disp nell'istruzione print per visualizzare il risultato. Dopo aver eseguito il programma, il valore minimo della funzione definita viene visualizzato sullo schermo con i limiti. Quanto segue è l'output:

Esempio 3

Come possiamo vedere, l'evoluzione differenziale restituisce diversi valori minimi di una funzione obiettivo in base alla sua definizione. Qui, prendiamo un altro esempio relativo a different_evolution(). Il codice di riferimento per questo programma è mostrato di seguito:

importare intorpidito come per esempio.
a partire dal scipy importare ottimizzare
a partire dal scipy. ottimizzare importare differenziale_evoluzione

def obj_func ( oper ) :
Restituzione 3 ** 9 / 0.2 + 6 / 3 * 2 ** venti

confine = [ ( - 0,5 , 0,5 ) , ( - 0,5 , 0,5 ) ]

fuori = differenziale_evoluzione ( obj_func , confine , polacco = Vero )

Stampa ( 'L'output è: ' , fuori )

Le librerie vengono importate con successo in questo programma perché non possiamo eseguire le operazioni che desideriamo senza di esse. Di conseguenza, includiamo la libreria SciPy nel programma. Successivamente, definire la funzione obiettivo con l'operazione richiesta. Troviamo il valore minimo di quella funzione definita. Dopo aver regolato il limite della funzione, abbiamo chiamato la funzione definita nell'evoluzione differenziale per trovare il valore minimo della funzione. Questo viene poi mantenuto nella variabile. Lo mostriamo chiamando questa variabile nell'istruzione print. L'output di questo programma è mostrato di seguito:

Come nello screenshot precedente, il valore minimo della funzione è [0.29236931, 0.16808904]. Puoi anche eseguire questi esempi nel tuo ambiente per comprendere meglio il concetto di funzione differenziale_evoluzione.

Conclusione

Facciamo un rapido riepilogo di questo articolo. Abbiamo colto la funzionalità di base del metodo di evoluzione differenziale che appartiene alla libreria SciPy in Python. Python è il linguaggio più recente, con numerose librerie flessibili. La maggior parte degli sviluppatori è stata aiutata a risolvere complesse strutture di codice da funzioni e librerie predefinite. L'evoluzione differenziale è una funzione o un metodo di ottimizzazione del pacchetto SciPy utilizzato per la minimizzazione. Quando si utilizzano questi esempi precedenti nel codice, si comprende più chiaramente il concetto di evoluzione differenziale.