SciPy Differential Evolution

Scipy Differential Evolution



Denne artikel handler om SciPy Differential Evolution (DE). SciPy er Python-sprogets bibliotek, og Differential Evolution er metoden eller funktionen af ​​SciPy-biblioteket. De fleste mennesker har lært Python, uanset om de er udviklere eller ej, da Pythons mange biblioteker og funktioner gør det meget sikkert og pålideligt. SciPy bruges ofte til at løse differential- og algebraiske ligninger, interpolation, optimering osv. Her diskuterer vi brugen af ​​SciPy DE for at hjælpe dig med at forstå, hvordan du implementerer SciPy differentialudviklingsfunktionen i Python-applikationer.

Hvad er SciPy Differential Evolution i Python-sproget?

Scipy er et overfladisk, gratis og forståeligt bibliotek, der bruges til at løse videnskabelige og matematiske problemer. SciPy er en skattekiste for udviklere, fordi dens bibliotek er fyldt med værdifulde moduler. SciPy udvider NumPy-funktionaliteten med en værdifuld klynge af algoritmer. SciPy-biblioteket har underpakker, der kan bruges til beregninger, såsom scipy.io, scipy.optimize osv. SciPy producerer en 'differential evolution'-funktion og mange kraftfulde funktioner i scipy.optimize-pakken. scipy.optimize bruges til optimering i Python-applikationer.

Funktionen Differential Evolution er en global funktion erhvervet af SciPy-optimeringspakken, der bruges til at finde det globale minimum af multivariate funktioner. Den kan håndtere multidimensionelle objektivfunktioner, der er ikke-lineære og ikke-differentierbare. Det er en søgealgoritme, der bruges til at søge områder med kontinuerlige rumfunktioner. Denne funktion fungerer på reelle værdier.







Syntaks for differentiel udviklingsfunktion

Funktionen differential evolution er til stede i Python ved at bruge funktionen differential_evolution (). Syntaksen for den differentielle udviklingsfunktion er vist nedenfor:





Lad os gennemgå funktionsparametrene:





Funktionen skal kunne kaldes med f(x,*args); bounds refererer til sekvensen af ​​variabler, der kan specificeres på to måder: strategi er valgfri eller en streng med standardværdien 'best1bin'; maxiter er valgfri eller en int-værdi; popsize er int eller valgfri; tol er int eller valgfri; mutationsværdien er i float eller valgfri; rekombinationsværdien er i float eller valgfri; frøet er ingen, int, NumPy og Random.

I det næste afsnit vil vi diskutere en differentiel evolution funktion ved hjælp af nemme eksempler.



Eksempel 1

Lad os begynde med et ligetil eksempel, der vil udvikle din interesse i at forstå begrebet differentiel evolution funktion. Vi brugte differential_evolution()-funktionen til at finde minimumsværdien. Men for at finde minimumsværdien krævede funktionen søgegrænser og en defineret kaldbar objektiv funktion. Som et resultat definerer vi en funktion, før vi bruger differential_evolution-funktionen i programmet. Referencekoden for programmet er nævnt nedenfor:

importere nusset som for eksempel.
fra krydret importere optimere
fra krydret. optimere importere differentiel_evolution
importere matplotlib. pyplot som py
fra matplotlib importere cm

def func ( s ) :

med , x = s

h = for eksempel. sqrt ( med ** 4 + x ** 4 )

Vend tilbage for eksempel. sqrt ( h )


DE_grænser = [ [ - 6 , 6 ] , [ - 6 , 6 ] ]

res = differentiel_evolution ( func , DE_grænser )

Print ( res )

Vi importerede biblioteker som SciPy og NumPy til array numeriske beregninger. Vi importerede differential_evolution-funktionen fra scipy.optimize-modulet. Derefter definerer vi med nøgleordet 'def' den kaldbare objektivfunktion og sender parameteren 'p'. Vi har med succes defineret den funktion, der finder kvadratroden af ​​NumPy-variablens addition, som er z, x. Kvadratrodsværdien gemmes i variablen 'h'. Vi returnerer kvadratrodsværdien i den definerede funktion. Det returneres som et argument.

Derefter afregner vi grænserne for den variable, der kan specificeres ved at forklare min- og maksværdierne for funktionen. Vi udfører differential_evolution-funktionen med 'DE_bounds'' som argument. Vi kaldte funktionsværdien med en variabel ved navn res. I sidste ende bruger vi print-erklæringen til at vise output. Resultatet blev vist efter at have kørt programmet. Det forventede output-skærmbillede er vist nedenfor:

Differential_evolution() viser, at minimumsværdien af ​​funktionen vises ved punkt (0, 0).

Eksempel 2

Dette er endnu et eksempel på differentialevolutionsfunktionen. I dette tager vi arrays og anvender forskellige operationer mellem dem. Referencekoden for programmet er nævnt nedenfor:

importere nusset som for eksempel.
fra krydret importere optimere
fra krydret. optimere importere differentiel_evolution

def objektiv_funktion ( d ) :
Vend tilbage ( d [ 1 ] - 1.2 ) / 2 + 0,5 *d [ 0 ] * 1.3 * ( d [ 1 ] + 0,5 ) ** 3

_grænser = [ ( - 0,3 , 0,3 ) , ( - 0,3 , 0,3 ) ]

disp = differentiel_evolution ( objektiv_funktion , _grænser , popstørrelse = 80 , polere = Falsk )

Print ( disp )

Som vist i det forrige skærmbillede importerede vi SciPy.optimize.differential_evolution-biblioteket og NumPy-biblioteket til programmet. Nu definerer vi en objektiv funktion, på vegne af hvilken vi finder en minimumsværdi. Vi bestod det matematiske udtryk i objektivfunktionen og returnerede en værdi som et argument til den definerede funktion. Grænsen mellem funktionsværdier er et must. Så efter at have defineret funktionen fik vi begge værdier (maksimum og minimum).

Efter at have defineret alle væsentlige variabler, kaldte vi differential_evolution-funktionen for at finde minimumsværdien af ​​en funktion. Vi gemte funktionens minimum returværdi i en variabel kaldet disp. I slutningen af ​​programmet sender vi disp-variablen i print-sætningen for at vise resultatet. Efter at have kørt programmet, vises minimumværdien af ​​den definerede funktion på skærmen med grænser. Følgende er output:

Eksempel 3

Som vi kan se, returnerer differentiel evolution forskellige minimumsværdier af en objektiv funktion baseret på dens definition. Her tager vi et andet eksempel relateret til differential_evolution(). Referencekoden for dette program er vist nedenfor:

importere nusset som for eksempel.
fra krydret importere optimere
fra krydret. optimere importere differentiel_evolution

def obj_func ( oper ) :
Vend tilbage 3 ** 9 / 0,2 + 6 / 3 * 2 ** tyve

grænse = [ ( - 0,5 , 0,5 ) , ( - 0,5 , 0,5 ) ]

ud = differentiel_evolution ( obj_func , grænse , polere = Sand )

Print ( 'Output er:' , ud )

Bibliotekerne importeres med succes til dette program, fordi vi ikke kan udføre de operationer, vi ønsker, uden dem. Som et resultat inkluderer vi SciPy-biblioteket i programmet. Derefter skal du definere den objektive funktion med den nødvendige operation. Vi finder minimumsværdien af ​​den definerede funktion. Efter at have justeret funktionens grænse, kaldte vi den definerede funktion i differentiel udvikling for at finde funktionens minimumsværdi. Dette holdes så i variablen. Vi viser dette ved at kalde denne variabel i print-sætningen. Outputtet af dette program er vist nedenfor:

Som i det forrige skærmbillede er minimumsværdien af ​​funktionen [0.29236931, 0.16808904]. Du kan også køre disse eksempler i dit miljø for bedre at forstå funktionskonceptet differential_evolution.

Konklusion

Lad os tage en hurtig opsummering af denne artikel. Vi forstod den grundlæggende funktionalitet af den differentielle evolution-metode, der hører til SciPy-biblioteket i Python. Python er det seneste sprog med adskillige fleksible biblioteker. De fleste udviklere fik hjælp til at løse komplekse kodestrukturer af foruddefinerede funktioner og biblioteker. Differential evolution er en SciPy-pakkeoptimeringsfunktion eller -metode, der bruges til minimering. Når du bruger disse tidligere eksempler i kode, forstår du tydeligere begrebet differentiel evolution.