SciPy Differential Evolution

Scipy Differential Evolution



Den här artikeln handlar om SciPy Differential Evolution (DE). SciPy är biblioteket för Python-språket, och Differential Evolution är metoden eller funktionen för SciPy-biblioteket. De flesta människor har lärt sig Python, oavsett om de är utvecklare eller inte, eftersom Pythons många bibliotek och funktioner gör det mycket säkert och pålitligt. SciPy används ofta för att lösa differentialekvationer och algebraiska ekvationer, interpolation, optimering, etc. Här diskuterar vi SciPy DE-användning för att hjälpa dig förstå hur man implementerar SciPy differentialutvecklingsfunktionen i Python-applikationer.

Vad är SciPy Differential Evolution i Python Language?

Scipy är ett ytligt, gratis och begripligt bibliotek som används för att lösa vetenskapliga och matematiska problem. SciPy är en skattkista för utvecklare eftersom dess bibliotek är fullt av värdefulla moduler. SciPy utökar NumPy-funktionaliteten med ett värdefullt kluster av algoritmer. SciPy-biblioteket har underpaket som kan användas för beräkningar, som scipy.io, scipy.optimize, etc. SciPy producerar en 'differential evolution'-funktion och många kraftfulla funktioner i scipy.optimize-paketet. scipy.optimize används för optimering i Python-applikationer.

Funktionen Differential Evolution är en global funktion som förvärvats av SciPy optimize-paketet som används för att hitta det globala minimumet av multivariatfunktioner. Den kan hantera flerdimensionella objektivfunktioner som är icke-linjära och icke-differentieringsbara. Det är en sökalgoritm som används för att söka i områden med kontinuerliga rymdfunktioner. Denna funktion fungerar på verkliga värden.







Syntax för differentiell utvecklingsfunktion

Funktionen differential evolution finns i Python med funktionen differential_evolution (). Syntaxen för differentialevolutionsfunktionen visas nedan:





Låt oss gå över funktionsparametrarna:





Funktionen måste kunna anropas med f(x,*args); bounds hänvisar till sekvensen av variabler som kan specificeras på två sätt: strategi är valfri eller en sträng med standardvärdet 'best1bin'; maxiter är valfritt eller ett int-värde; popsize är int eller valfritt; tol är int eller valfritt; mutationsvärdet är flytande eller valfritt; rekombinationsvärdet är flytande eller valfritt; fröet är none, int, NumPy och Random.

I nästa avsnitt kommer vi att diskutera en differentiell evolutionsfunktion med hjälp av enkla exempel.



Exempel 1

Låt oss börja med ett enkelt exempel som kommer att utveckla ditt intresse för att förstå begreppet differentiell evolutionsfunktion. Vi använde differential_evolution()-funktionen för att hitta minimivärdet. Men för att hitta minimivärdet krävde funktionen sökgränser och en definierad anropbar målfunktion. Som ett resultat definierar vi en funktion innan vi använder funktionen differential_evolution i programmet. Referenskoden för programmet nämns nedan:

importera numpy som t.ex.
från krypigt importera optimera
från krypigt. optimera importera differentiell_evolution
importera matplotlib. pyplot som py
från matplotlib importera centimeter

def func ( sid ) :

Med , x = sid

h = t.ex. sqrt ( med ** 4 + x ** 4 )

lämna tillbaka t.ex. sqrt ( h )


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

res = differentiell_evolution ( func , DE_gränser )

skriva ut ( res )

Vi importerade bibliotek som SciPy och NumPy för numeriska arrayberäkningar. Vi importerade differential_evolution-funktionen från modulen scipy.optimize. Sedan, med nyckelordet 'def', definierar vi den anropbara objektivfunktionen och skickar parametern 'p'. Vi har framgångsrikt definierat funktionen som hittar kvadratroten av additionen av NumPy-variablerna, vilket är z, x. Kvadratrotvärdet lagras i variabeln 'h'. Vi returnerar kvadratrotvärdet i den definierade funktionen. Det returneras som ett argument.

Efter det bestämmer vi gränserna för variabeln som kan specificeras genom att förklara min- och maxvärdena för funktionen. Vi kör differential_evolution-funktionen med 'DE_bounds'' som argument. Vi kallade funktionsvärdet med en variabel som heter res. I slutändan använder vi utskriftssatsen för att visa resultatet. Resultatet visades efter att programmet körts. Den förväntade skärmdumpen visas nedan:

Differential_evolution() visar att minimivärdet för funktionen visas vid punkt (0, 0).

Exempel 2

Detta är ytterligare ett exempel på differentialevolutionsfunktionen. I detta tar vi arrayer och tillämpar olika operationer mellan dem. Referenskoden för programmet nämns nedan:

importera numpy som t.ex.
från krypigt importera optimera
från krypigt. optimera importera differentiell_evolution

def objektiv_funktion ( d ) :
lämna tillbaka ( d [ 1 ] - 1.2 ) / 2 + 0,5 *d [ 0 ] * 1.3 * ( d [ 1 ] + 0,5 ) ** 3

_gräns = [ ( - 0,3 , 0,3 ) , ( - 0,3 , 0,3 ) ]

disp = differentiell_evolution ( objektiv_funktion , _gräns , popsize = 80 , putsa = Falsk )

skriva ut ( disp )

Som visas i föregående skärmdump har vi framgångsrikt importerat SciPy.optimize.differential_evolution-biblioteket och NumPy-biblioteket till programmet. Nu definierar vi en objektiv funktion för vilken vi hittar ett minimivärde. Vi skickade det matematiska uttrycket i objektivfunktionen och returnerade ett värde som ett argument till den definierade funktionen. Gränsen mellan funktionsvärden är ett måste. Så efter att ha definierat funktionen fixade vi båda värdena (maximum och minimum).

Efter att ha definierat alla väsentliga variabler anropade vi differential_evolution-funktionen för att hitta minimivärdet för en funktion. Vi sparade funktionens lägsta returvärde i en variabel som heter disp. I slutet av programmet skickar vi variabeln disp i utskriftssatsen för att visa resultatet. Efter att ha kört programmet visas minimivärdet för den definierade funktionen på skärmen med gränser. Följande är utgången:

Exempel 3

Som vi kan se returnerar differentiell evolution olika minimivärden för en objektiv funktion baserat på dess definition. Här tar vi ett annat exempel relaterat till differential_evolution(). Referenskoden för detta program visas nedan:

importera numpy som t.ex.
från krypigt importera optimera
från krypigt. optimera importera differentiell_evolution

def obj_func ( oper ) :
lämna tillbaka 3 ** 9 / 0,2 + 6 / 3 * 2 ** tjugo

gräns = [ ( - 0,5 , 0,5 ) , ( - 0,5 , 0,5 ) ]

ut = differentiell_evolution ( obj_func , gräns , putsa = Sann )

skriva ut ( 'Utgången är:' , ut )

Biblioteken har framgångsrikt importerats till detta program eftersom vi inte kan utföra de operationer vi önskar utan dem. Som ett resultat inkluderar vi SciPy-biblioteket i programmet. Därefter definierar du målfunktionen med önskad operation. Vi hittar minimivärdet för den definierade funktionen. Efter att ha justerat funktionens gräns anropade vi den definierade funktionen i differentiell utveckling för att hitta funktionens minimivärde. Detta hålls sedan i variabeln. Vi visar detta genom att anropa denna variabel i utskriftssatsen. Resultatet av detta program visas nedan:

Som i föregående skärmdump är funktionens lägsta värde [0,29236931, 0,16808904]. Du kan också köra dessa exempel i din miljö för att bättre förstå funktionskonceptet differential_evolution.

Slutsats

Låt oss ta en snabb sammanfattning av den här artikeln. Vi förstod den grundläggande funktionaliteten hos differential evolution-metoden som tillhör SciPy-biblioteket i Python. Python är det senaste språket, med många flexibla bibliotek. De flesta utvecklare fick hjälp med att lösa komplexa kodstrukturer av fördefinierade funktioner och bibliotek. Differential evolution är en SciPy-paketoptimeringsfunktion eller -metod som används för minimering. När du använder dessa tidigare exempel i kod förstår du tydligare konceptet differentiell evolution.