Evoluția diferențială SciPy

Evolutia Diferentiala Scipy



Acest articol este despre SciPy Differential Evolution (DE). SciPy este biblioteca limbajului Python, iar Differential Evolution este metoda sau funcția bibliotecii SciPy. Majoritatea oamenilor au învățat Python, indiferent dacă sunt sau nu dezvoltatori, deoarece numeroasele biblioteci și funcții Python îl fac foarte sigur și fiabil. SciPy este folosit frecvent pentru rezolvarea ecuațiilor diferențiale și algebrice, interpolare, optimizare etc. Aici, discutăm despre utilizarea SciPy DE pentru a vă ajuta să înțelegeți cum să implementați funcția de evoluție diferențială SciPy în aplicațiile Python.

Ce este evoluția diferențială SciPy în limbajul Python?

Scipy este o bibliotecă superficială, gratuită și ușor de înțeles, folosită pentru a rezolva probleme științifice și matematice. SciPy este o cutie de comori pentru dezvoltatori, deoarece biblioteca sa este plină de module prețioase. SciPy extinde funcționalitatea NumPy cu un grup valoros de algoritmi. Biblioteca SciPy are sub-pachete care pot fi folosite pentru calcule, cum ar fi scipy.io, scipy.optimize etc. SciPy produce o funcție de „evoluție diferențială” și multe funcții puternice în pachetul scipy.optimize. Scipy.optimize este folosit pentru optimizare în aplicațiile Python.

Funcția de evoluție diferențială este o funcție globală achiziționată de pachetul de optimizare SciPy care este utilizată pentru a găsi minimul global de funcții multivariate. Poate gestiona funcții obiective multidimensionale care sunt neliniare și nediferențiabile. Este un algoritm de căutare utilizat pentru a căuta zone de funcții spațiale continue. Această funcție funcționează pe valori reale.







Sintaxa funcției de evoluție diferențială

Funcția de evoluție diferențială este prezentă în Python utilizând funcția diferential_evolution (). Sintaxa funcției de evoluție diferențială este prezentată mai jos:





Să trecem peste parametrii funcției:





Funcția trebuie să fie apelabilă cu f(x,*args); bounds se referă la secvența de variabile care pot fi specificate în două moduri: strategia este opțională sau un șir cu valoarea implicită „best1bin”; maxiter este opțional sau o valoare int; popsize este int sau opțional; tol este int sau opțional; valoarea mutației este în float sau opțional; valoarea de recombinare este în float sau opțional; sămânța este none, int, NumPy și Random.

În secțiunea următoare, vom discuta despre o funcție de evoluție diferențială cu ajutorul unor exemple simple.



Exemplul 1

Să începem cu un exemplu simplu care vă va dezvolta interesul pentru înțelegerea conceptului de funcție de evoluție diferențială. Am folosit funcția diferential_evolution() pentru a găsi valoarea minimă. Dar, pentru a găsi valoarea minimă, funcția necesita limite de căutare și o funcție obiectiv apelabilă definită. Ca rezultat, definim o funcție înainte de a folosi funcția diferential_evolution în program. Codul de referință al programului este menționat mai jos:

import numpy la fel de de exemplu.
din scipy import optimiza
din scipy. optimiza import evoluţie_diferenţială
import matplotlib. pyplot la fel de py
din matplotlib import cm

def func ( p ) :

cu , X = p

h = de exemplu. sqrt ( cu ** 4 + x ** 4 )

întoarcere de exemplu. sqrt ( h )


DE_limite = [ [ - 6 , 6 ] , [ - 6 , 6 ] ]

res = evoluţie_diferenţială ( func , DE_limite )

imprimare ( res )

Am importat biblioteci precum SciPy și NumPy pentru calcule numerice ale matricei. Am importat funcția diferential_evolution din modulul scipy.optimize. Apoi, cu cuvântul cheie „def”, definim funcția obiectiv apelabilă și trecem parametrul „p”. Definim cu succes funcția care găsește rădăcina pătrată a adunării variabilelor NumPy, care este z, x. Valoarea rădăcinii pătrate este stocată în variabila „h”. Returnăm valoarea rădăcinii pătrate în funcția definită. Este returnat ca argument.

După aceea, stabilim limitele variabilei care pot fi detaliate explicând valorile minime și maxime ale funcției. Executăm funcția diferential_evolution cu „DE_bounds”’ ca argument. Am numit valoarea funcției cu o variabilă numită res. În cele din urmă, folosim instrucțiunea print pentru a afișa rezultatul. Rezultatul a fost afișat după rularea programului. Captura de ecran de ieșire așteptată este afișată mai jos:

Differential_evolution() arată că valoarea minimă a funcției este afișată la punctul (0, 0).

Exemplul 2

Acesta este un alt exemplu de funcție de evoluție diferențială. În aceasta, luăm matrice și aplicăm diferite operații între ele. Codul de referință al programului este menționat mai jos:

import numpy la fel de de exemplu.
din scipy import optimiza
din scipy. optimiza import evoluţie_diferenţială

def obiectiv_func ( d ) :
întoarcere ( d [ 1 ] - 1.2 ) / 2 + 0,5 * d [ 0 ] * 1.3 * ( d [ 1 ] + 0,5 ) ** 3

_limite = [ ( - 0,3 , 0,3 ) , ( - 0,3 , 0,3 ) ]

disp = evoluţie_diferenţială ( obiectiv_func , _limite , popsize = 80 , lustrui = Fals )

imprimare ( disp )

După cum se arată în captura de ecran anterioară, am importat cu succes biblioteca SciPy.optimize.differential_evolution și biblioteca NumPy în program. Acum, definim o funcție obiectivă în numele căreia găsim o valoare minimă. Am trecut expresia matematică în funcția obiectiv și am returnat o valoare ca argument pentru funcția definită. Limita dintre valorile funcției este obligatorie. Deci, după definirea funcției, am fixat ambele valori (maximum și minim).

După ce am definit toate variabilele esențiale, am numit funcția diferential_evolution pentru a găsi valoarea minimă a unei funcții. Am salvat valoarea minimă de returnare a funcției într-o variabilă numită disp. La sfârșitul programului, trecem variabila disp în instrucțiunea print pentru a afișa rezultatul. După rularea programului, valoarea minimă a funcției definite este afișată pe ecran cu limite. Următorul este rezultatul:

Exemplul 3

După cum putem vedea, evoluția diferențială returnează valori minime diferite ale unei funcții obiectiv pe baza definiției acesteia. Aici luăm un alt exemplu legat de diferential_evolution(). Codul de referință pentru acest program este prezentat mai jos:

import numpy la fel de de exemplu.
din scipy import optimiza
din scipy. optimiza import evoluţie_diferenţială

def obj_func ( oper ) :
întoarcere 3 ** 9 / 0,2 + 6 / 3 * 2 ** douăzeci

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

afară = evoluţie_diferenţială ( obj_func , limite , lustrui = Adevărat )

imprimare ( 'Ieșirea este: ' , afară )

Bibliotecile sunt importate cu succes în acest program deoarece nu putem efectua operațiunile pe care le dorim fără ele. Ca rezultat, includem biblioteca SciPy în program. După aceea, definiți funcția obiectiv cu operația necesară. Găsim valoarea minimă a acelei funcții definite. După ajustarea limitei funcției, am numit funcția definită în evoluție diferențială pentru a găsi valoarea minimă a funcției. Aceasta este apoi păstrată în variabilă. Afișăm acest lucru apelând această variabilă în instrucțiunea print. Rezultatul acestui program este prezentat mai jos:

Ca și în captura de ecran anterioară, valoarea minimă a funcției este [0,29236931, 0,16808904]. De asemenea, puteți rula aceste exemple în mediul dvs. pentru a înțelege mai bine conceptul funcției diferential_evolution.

Concluzie

Să facem o scurtă recapitulare a acestui articol. Am înțeles funcționalitatea de bază a metodei de evoluție diferențială care aparține bibliotecii SciPy în Python. Python este cel mai recent limbaj, cu numeroase biblioteci flexibile. Majoritatea dezvoltatorilor au fost ajutați în rezolvarea structurilor complexe de cod prin funcții și biblioteci predefinite. Evoluția diferențială este o funcție sau o metodă de optimizare a pachetului SciPy utilizată pentru minimizare. Când utilizați aceste exemple anterioare în cod, înțelegeți mai clar conceptul de evoluție diferențială.