SciPy Differensial Evolution

Scipy Differensial Evolution



Denne artikkelen handler om SciPy Differential Evolution (DE). SciPy er biblioteket til Python-språket, og Differential Evolution er metoden eller funksjonen til SciPy-biblioteket. De fleste har lært Python, enten de er utviklere eller ikke, siden Pythons mange biblioteker og funksjoner gjør det veldig sikkert og pålitelig. SciPy brukes ofte til å løse differensial- og algebraiske ligninger, interpolering, optimalisering osv. Her diskuterer vi SciPy DE-bruk for å hjelpe deg med å forstå hvordan du implementerer SciPy-differensialevolusjonsfunksjonen i Python-applikasjoner.

Hva er SciPy Differential Evolution i Python Language?

Scipy er et overfladisk, gratis og forståelig bibliotek som brukes til å løse vitenskapelige og matematiske problemer. SciPy er en skatteboks for utviklere fordi biblioteket er fullt av verdifulle moduler. SciPy utvider NumPy-funksjonaliteten med en verdifull klynge av algoritmer. SciPy-biblioteket har underpakker som kan brukes til beregninger, som scipy.io, scipy.optimize, etc. SciPy produserer en 'differensiell evolusjon'-funksjon og mange kraftige funksjoner i scipy.optimize-pakken. scipy.optimize brukes for optimalisering i Python-applikasjoner.

Differensial Evolution Function er en global funksjon anskaffet av SciPy optimize-pakken som brukes til å finne det globale minimum av multivariate funksjoner. Den kan administrere flerdimensjonale objektivfunksjoner som er ikke-lineære og ikke-differensierbare. Det er en søkealgoritme som brukes til å søke i områder med kontinuerlige romfunksjoner. Denne funksjonen fungerer på reelle verdier.







Syntaks for differensiell evolusjonsfunksjon

Differensialevolusjonsfunksjonen er til stede i Python ved å bruke funksjonen differential_evolution (). Syntaksen til differensialevolusjonsfunksjonen er vist nedenfor:





La oss gå over funksjonsparametrene:





Funksjonen må kunne kalles med f(x,*args); bounds refererer til sekvensen av variabler som kan spesifiseres på to måter: strategi er valgfri eller en streng med standardverdien 'best1bin'; maxiter er valgfritt eller en int-verdi; popsize er int eller valgfritt; tol er int eller valgfritt; mutasjonsverdien er flytende eller valgfri; rekombinasjonsverdien er flytende eller valgfri; frøet er none, int, NumPy og Random.

I neste avsnitt vil vi diskutere en differensiell evolusjonsfunksjon ved hjelp av enkle eksempler.



Eksempel 1

La oss begynne med et enkelt eksempel som vil utvikle din interesse for å forstå konseptet med differensiell evolusjonsfunksjon. Vi brukte funksjonen differential_evolution() for å finne minimumsverdien. Men for å finne minimumsverdien krevde funksjonen søkegrenser og en definert anropbar objektivfunksjon. Som et resultat definerer vi en funksjon før vi bruker funksjonen differential_evolution i programmet. Referansekoden til programmet er nevnt nedenfor:

import nusset som f.eks.
fra scipy import optimalisere
fra krypende. optimalisere import differensiell_evolusjon
import matplotlib. pyplot som py
fra matplotlib import cm

def func ( s ) :

med , x = s

h = f.eks. sqrt ( med ** 4 + x ** 4 )

komme tilbake f.eks. sqrt ( h )


DE_grenser = [ [ - 6 , 6 ] , [ - 6 , 6 ] ]

res = differensiell_evolusjon ( func , DE_grenser )

skrive ut ( res )

Vi importerte biblioteker som SciPy og NumPy for numeriske array-beregninger. Vi importerte funksjonen differential_evolution fra scipy.optimize-modulen. Deretter, med nøkkelordet 'def', definerer vi den anropbare objektivfunksjonen og sender parameteren 'p'. Vi definerer funksjonen som finner kvadratroten av addisjonen til NumPy-variablene, som er z, x. Kvadratrotverdien lagres i variabelen 'h'. Vi returnerer kvadratrotverdien i den definerte funksjonen. Det returneres som et argument.

Etter det avgjør vi grensene for variabelen som kan spesifiseres ved å forklare min- og maksverdiene til funksjonen. Vi utfører funksjonen differential_evolution med 'DE_bounds'' som argument. Vi kalte funksjonsverdien med en variabel kalt res. Til slutt bruker vi print-setningen for å vise resultatet. Resultatet ble vist etter å ha kjørt programmet. Det forventede utdataskjermbildet er vist nedenfor:

Differential_evolution() viser at minimumsverdien til funksjonen vises ved punkt (0, 0).

Eksempel 2

Dette er et annet eksempel på differensial evolusjonsfunksjonen. I dette tar vi matriser og bruker forskjellige operasjoner mellom dem. Referansekoden til programmet er nevnt nedenfor:

import nusset som f.eks.
fra scipy import optimalisere
fra scipy. optimalisere import differensiell_evolusjon

def objektiv_funksjon ( d ) :
komme tilbake ( d [ 1 ] - 1.2 ) / 2 + 0,5 *d [ 0 ] * 1.3 * ( d [ 1 ] + 0,5 ) ** 3

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

disp = differensiell_evolusjon ( objektiv_funksjon , _grenser , popsize = 80 , pusse = Falsk )

skrive ut ( disp )

Som vist i forrige skjermbilde, importerte vi SciPy.optimize.differential_evolution-biblioteket og NumPy-biblioteket til programmet. Nå definerer vi en objektiv funksjon som vi finner en minimumsverdi på vegne av. Vi passerte det matematiske uttrykket i objektivfunksjonen og returnerte en verdi som et argument til den definerte funksjonen. Grensen mellom funksjonsverdier er et must. Så, etter å ha definert funksjonen, fikset vi begge verdiene (maksimum og minimum).

Etter å ha definert alle essensielle variabler, kalte vi funksjonen differential_evolution for å finne minimumsverdien til en funksjon. Vi lagret funksjonens minste returverdi i en variabel kalt disp. På slutten av programmet sender vi disp-variabelen i print-setningen for å vise resultatet. Etter å ha kjørt programmet, vises minimumsverdien for den definerte funksjonen på skjermen med grenser. Følgende er utgangen:

Eksempel 3

Som vi kan se, returnerer differensiell evolusjon forskjellige minimumsverdier for en objektiv funksjon basert på dens definisjon. Her tar vi et annet eksempel relatert til differential_evolution(). Referansekoden for dette programmet er vist nedenfor:

import nusset som f.eks.
fra krypende import optimalisere
fra scipy. optimalisere import differensiell_evolusjon

def obj_func ( oper ) :
komme tilbake 3 ** 9 / 0,2 + 6 / 3 * 2 ** tjue

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

ute = differensiell_evolusjon ( obj_func , grense , pusse = ekte )

skrive ut ( 'Utdata er:' , ute )

Bibliotekene er vellykket importert til dette programmet fordi vi ikke kan utføre operasjonene vi ønsker uten dem. Som et resultat inkluderer vi SciPy-biblioteket i programmet. Definer deretter målfunksjonen med den nødvendige operasjonen. Vi finner minimumsverdien til den definerte funksjonen. Etter å ha justert funksjonens grense, kalte vi den definerte funksjonen i differensiell utvikling for å finne funksjonens minimumsverdi. Denne beholdes da i variabelen. Vi viser dette ved å kalle denne variabelen i print-setningen. Utgangen av dette programmet er vist nedenfor:

Som i forrige skjermbilde er minimumsverdien for funksjonen [0.29236931, 0.16808904]. Du kan også kjøre disse eksemplene i ditt miljø for bedre å forstå funksjonskonseptet differential_evolution.

Konklusjon

La oss ta en rask oppsummering av denne artikkelen. Vi tok tak i den grunnleggende funksjonaliteten til differensialevolusjonsmetoden som tilhører SciPy-biblioteket i Python. Python er det nyeste språket, med mange fleksible biblioteker. De fleste utviklere ble hjulpet til å løse komplekse kodestrukturer av forhåndsdefinerte funksjoner og biblioteker. Differensiell evolusjon er en SciPy-pakkeoptimaliseringsfunksjon eller -metode som brukes for minimering. Når du bruker disse tidligere eksemplene i kode, forstår du begrepet differensiell evolusjon tydeligere.