Diferencialna evolucija SciPy

Diferencialna Evolucija Scipy



Ta članek govori o SciPy Differential Evolution (DE). SciPy je knjižnica jezika Python, Differential Evolution pa metoda ali funkcija knjižnice SciPy. Večina ljudi se uči Python, ne glede na to, ali so razvijalci ali ne, saj je Python zaradi številnih knjižnic in funkcij zelo varen in zanesljiv. SciPy se pogosto uporablja za reševanje diferencialnih in algebrskih enačb, interpolacijo, optimizacijo itd. Tukaj razpravljamo o uporabi SciPy DE, da vam pomagamo razumeti, kako implementirati funkcijo diferencialne evolucije SciPy v aplikacijah Python.

Kaj je diferencialna evolucija SciPy v jeziku Python?

Scipy je površna, brezplačna in razumljiva knjižnica, ki se uporablja za reševanje znanstvenih in matematičnih vprašanj. SciPy je zakladnica za razvijalce, saj je njegova knjižnica polna dragocenih modulov. SciPy razširja funkcionalnost NumPy z dragoceno skupino algoritmov. Knjižnica SciPy ima podpakete, ki jih je mogoče uporabiti za izračune, kot so scipy.io, scipy.optimize itd. SciPy proizvaja funkcijo »diferencialne evolucije« in številne zmogljive funkcije v paketu scipy.optimize. Scipy.optimize se uporablja za optimizacijo v aplikacijah Python.

Diferencialna evolucijska funkcija je globalna funkcija, pridobljena s paketom za optimizacijo SciPy, ki se uporablja za iskanje globalnega minimuma multivariatnih funkcij. Lahko upravlja večdimenzionalne ciljne funkcije, ki so nelinearne in jih ni mogoče diferenciirati. Je iskalni algoritem, ki se uporablja za iskanje območij zveznih prostorskih funkcij. Ta funkcija deluje na realnih vrednostih.







Sintaksa diferencialne evolucijske funkcije

Funkcija diferencialne evolucije je prisotna v Pythonu z uporabo funkcije differential_evolution (). Sintaksa funkcije diferencialne evolucije je prikazana spodaj:





Oglejmo si parametre funkcije:





Funkcijo je treba klicati s f(x,*args); meje se nanašajo na zaporedje spremenljivk, ki jih je mogoče podati na dva načina: strategija je neobvezna ali niz s privzeto vrednostjo »best1bin«; maxiter je neobvezen ali int vrednost; popsize je int ali neobvezna; tol je int ali izbirno; vrednost mutacije je v float ali neobvezna; vrednost rekombinacije je plavajoča ali neobvezna; seme je nič, int, NumPy in naključno.

V naslednjem razdelku bomo razpravljali o diferencialni evolucijski funkciji s pomočjo preprostih primerov.



Primer 1

Začnimo z enostavnim primerom, ki bo razvil vaše zanimanje za razumevanje koncepta diferencialne evolucijske funkcije. Za iskanje najmanjše vrednosti smo uporabili funkcijo differential_evolution(). Toda za iskanje najmanjše vrednosti je funkcija zahtevala iskalne meje in definirano ciljno funkcijo, ki jo je mogoče priklicati. Posledično definiramo funkcijo pred uporabo funkcije differential_evolution v programu. Referenčna koda programa je navedena spodaj:

uvoz numpy kot npr.
od scipy uvoz optimizirati
od scipy. optimizirati uvoz diferencialna_evolucija
uvoz matplotlib. pyplot kot py
od matplotlib uvoz cm

def funk ( str ) :

z , x = str

h = npr. sqrt ( z ** 4 + x ** 4 )

vrnitev npr. sqrt ( h )


DE_meje = [ [ - 6 , 6 ] , [ - 6 , 6 ] ]

res = diferencialna_evolucija ( funk , DE_meje )

tiskanje ( res )

Za numerične izračune nizov smo uvozili knjižnice, kot sta SciPy in NumPy. Funkcijo differential_evolution smo uvozili iz modula scipy.optimize. Nato s ključno besedo “def” definiramo ciljno funkcijo, ki jo je mogoče poklicati, in posredujemo parameter “p”. Uspešno definiramo funkcijo, ki poišče kvadratni koren seštevka spremenljivk NumPy, ki je z, x. Vrednost kvadratnega korena je shranjena v spremenljivki 'h'. V definirani funkciji vrnemo vrednost kvadratnega korena. Vrne se kot argument.

Po tem določimo meje spremenljivke, ki jo je mogoče razčleniti z razlago najmanjših in največjih vrednosti funkcije. Funkcijo differential_evolution izvedemo z 'DE_bounds' kot argumentom. Funkcijsko vrednost smo poklicali s spremenljivko z imenom res. Na koncu uporabimo stavek za tiskanje, da prikažemo izhod. Rezultat je bil prikazan po zagonu programa. Pričakovani izhodni posnetek zaslona je prikazan spodaj:

Differential_evolution() kaže, da je najmanjša vrednost funkcije prikazana na točki (0, 0).

Primer 2

To je še en primer diferencialne evolucijske funkcije. Pri tem vzamemo nize in med njimi uporabimo različne operacije. Referenčna koda programa je navedena spodaj:

uvoz numpy kot npr.
od scipy uvoz optimizirati
od scipy. optimizirati uvoz diferencialna_evolucija

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

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

disp = diferencialna_evolucija ( objektivna_fun , _meje , popsize = 80 , loščiti = False )

tiskanje ( disp )

Kot je prikazano na prejšnjem posnetku zaslona, ​​smo v program uspešno uvozili knjižnici SciPy.optimize.differential_evolution in NumPy. Zdaj definiramo ciljno funkcijo, v imenu katere najdemo minimalno vrednost. Posredovali smo matematični izraz v ciljni funkciji in vrnili vrednost kot argument definirani funkciji. Meja med vrednostmi funkcij je nujna. Tako smo po definiranju funkcije popravili obe vrednosti (največjo in najmanjšo).

Po definiranju vseh bistvenih spremenljivk smo poklicali funkcijo differential_evolution, da bi našli najmanjšo vrednost funkcije. Najmanjšo vrnjeno vrednost funkcije smo shranili v spremenljivko disp. Na koncu programa posredujemo spremenljivko disp v stavku za tiskanje, da prikažemo rezultat. Po zagonu programa se na zaslonu izpiše najmanjša vrednost definirane funkcije z mejami. Izhod je naslednji:

Primer 3

Kot lahko vidimo, diferencialna evolucija vrne različne minimalne vrednosti ciljne funkcije na podlagi njene definicije. Tukaj vzamemo še en primer, povezan z differential_evolution(). Referenčna koda za ta program je prikazana spodaj:

uvoz numpy kot npr.
od scipy uvoz optimizirati
od scipy. optimizirati uvoz diferencialna_evolucija

def obj_func ( oper ) :
vrnitev 3 ** 9 / 0,2 + 6 / 3 * 2 ** dvajset

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

ven = diferencialna_evolucija ( obj_func , meja , loščiti = Prav )

tiskanje ( 'Izhod je:' , ven )

Knjižnice so uspešno uvožene v ta program, ker brez njih ne moremo izvajati želenih operacij. Posledično v program vključimo knjižnico SciPy. Nato definirajte ciljno funkcijo z zahtevano operacijo. Poiščemo najmanjšo vrednost te definirane funkcije. Po prilagoditvi meje funkcije smo poklicali definirano funkcijo v diferencialni evoluciji, da bi našli minimalno vrednost funkcije. To se nato ohrani v spremenljivki. To prikažemo s klicem te spremenljivke v izjavi za tiskanje. Rezultat tega programa je prikazan spodaj:

Kot na prejšnjem posnetku zaslona je najmanjša vrednost funkcije [0,29236931, 0,16808904]. Te primere lahko zaženete tudi v svojem okolju, da bolje razumete koncept funkcije differential_evolution.

Zaključek

Na hitro povzamemo ta članek. Dojeli smo osnovno funkcionalnost metode diferencialne evolucije, ki pripada knjižnici SciPy v Pythonu. Python je najnovejši jezik s številnimi prilagodljivimi knjižnicami. Večini razvijalcev so pri reševanju zapletenih struktur kode pomagale vnaprej določene funkcije in knjižnice. Diferencialna evolucija je funkcija optimizacije paketa SciPy ali metoda, ki se uporablja za minimizacijo. Ko uporabite te prejšnje primere v kodi, jasneje razumete koncept diferencialne evolucije.