SciPy diferenciālā evolūcija

Scipy Diferenciala Evolucija



Šis raksts ir par SciPy Differential Evolution (DE). SciPy ir Python valodas bibliotēka, un Differential Evolution ir SciPy bibliotēkas metode vai funkcija. Lielākā daļa cilvēku ir apguvuši Python valodu neatkarīgi no tā, vai viņi ir izstrādātāji vai nē, jo Python daudzās bibliotēkas un funkcijas padara to ļoti drošu un uzticamu. SciPy bieži izmanto diferenciālo un algebrisko vienādojumu risināšanai, interpolācijai, optimizācijai utt. Šeit mēs apspriežam SciPy DE izmantošanu, lai palīdzētu jums saprast, kā Python lietojumprogrammās ieviest SciPy diferenciālās evolūcijas funkciju.

Kas ir SciPy diferenciālā evolūcija Python valodā?

Scipy ir virspusēja, bezmaksas un saprotama bibliotēka, ko izmanto zinātnisku un matemātisko jautājumu risināšanai. SciPy ir dārgumu kaste izstrādātājiem, jo ​​tās bibliotēka ir pilna ar vērtīgiem moduļiem. SciPy paplašina NumPy funkcionalitāti ar vērtīgu algoritmu kopu. SciPy bibliotēkā ir apakšpaketes, ko var izmantot aprēķiniem, piemēram, scipy.io, scipy.optimize utt. SciPy rada “diferenciālās evolūcijas” funkciju un daudzas jaudīgas funkcijas pakotnē scipy.optimize. Scipy.optimize tiek izmantots optimizācijai Python lietojumprogrammās.

Diferenciālās evolūcijas funkcija ir globāla funkcija, ko iegūst SciPy optimizēšanas pakotne un ko izmanto, lai atrastu globālo daudzfaktoru funkciju minimumu. Tas var pārvaldīt daudzdimensiju mērķa funkcijas, kas ir nelineāras un nediferencējamas. Tas ir meklēšanas algoritms, ko izmanto nepārtrauktu kosmosa funkciju apgabalu meklēšanai. Šī funkcija darbojas uz reālām vērtībām.







Diferenciālās evolūcijas funkcijas sintakse

Diferenciālās evolūcijas funkcija ir pieejama Python, izmantojot funkciju differential_evolution (). Diferenciālās evolūcijas funkcijas sintakse ir parādīta zemāk:





Apskatīsim funkcijas parametrus:





Funkcijai jābūt izsaucamai ar f(x,*args); robežas attiecas uz mainīgo secību, ko var norādīt divos veidos: stratēģija nav obligāta vai virkne ar noklusējuma vērtību “best1bin”; maxiter ir neobligāts vai int vērtība; popsize ir int vai neobligāts; tol ir int vai neobligāts; mutācijas vērtība ir peldošā vai neobligāta; rekombinācijas vērtība ir peldošā vai neobligāta; sēklas nav, int, NumPy un Random.

Nākamajā sadaļā mēs apspriedīsim diferenciālās evolūcijas funkciju, izmantojot vienkāršus piemērus.



1. piemērs

Sāksim ar vienkāršu piemēru, kas attīstīs jūsu interesi izprast diferenciālās evolūcijas funkcijas jēdzienu. Lai atrastu minimālo vērtību, mēs izmantojām funkciju differential_evolution(). Bet, lai atrastu minimālo vērtību, funkcijai bija nepieciešamas meklēšanas robežas un definēta izsaucamā mērķa funkcija. Rezultātā mēs definējam funkciju, pirms programmā izmantojam funkciju differential_evolution. Programmas atsauces kods ir minēts zemāk:

imports nejutīgs piem.
no scipy imports optimizēt
no scipy. optimizēt imports diferenciālā_evolūcija
imports matplotlib. pyplot py
no matplotlib imports cm

def func ( lpp ) :

Ar , x = lpp

h = piem. sqrt ( ar ** 4 + x** 4 )

atgriezties piem. sqrt ( h )


DE_bounds = [ [ - 6 , 6 ] , [ - 6 , 6 ] ]

res = diferenciālā_evolūcija ( func , DE_bounds )

drukāt ( res )

Masīva skaitliskiem aprēķiniem mēs importējām bibliotēkas, piemēram, SciPy un NumPy. Mēs importējām funkciju differential_evolution no moduļa scipy.optimize. Pēc tam ar atslēgvārdu “def” definējam izsaucamo mērķa funkciju un nododam parametru “p”. Mēs veiksmīgi definējam funkciju, kas atrod kvadrātsakni no NumPy mainīgo pievienošanas, kas ir z, x. Kvadrātsaknes vērtība tiek saglabāta mainīgajā “h”. Mēs atgriežam kvadrātsaknes vērtību definētajā funkcijā. Tas tiek atgriezts kā arguments.

Pēc tam mēs nosakām mainīgā robežas, ko var precizēt, izskaidrojot funkcijas min un max vērtības. Mēs izpildām funkciju differential_evolution ar “DE_bounds” kā argumentu. Mēs izsaucām funkcijas vērtību ar mainīgo ar nosaukumu res. Galu galā mēs izmantojam drukāšanas paziņojumu, lai parādītu izvadi. Rezultāts tika parādīts pēc programmas palaišanas. Paredzamais izvades ekrānuzņēmums ir parādīts zemāk:

Differential_evolution() parāda, ka funkcijas minimālā vērtība tiek parādīta punktā (0, 0).

2. piemērs

Šis ir vēl viens diferenciālās evolūcijas funkcijas piemērs. Šajā gadījumā mēs ņemam masīvus un starp tiem veicam dažādas darbības. Programmas atsauces kods ir minēts zemāk:

imports nejutīgs piem.
no scipy imports optimizēt
no scipy. optimizēt imports diferenciālā_evolūcija

def object_func ( d ) :
atgriezties ( d [ 1 ] - 1.2 ) / 2 + 0.5 *d [ 0 ] * 1.3 * ( d [ 1 ] + 0.5 ) ** 3

_ribos = [ ( - 0.3 , 0.3 ) , ( - 0.3 , 0.3 ) ]

disp = diferenciālā_evolūcija ( object_func , _ribos , popsize = 80 , pulēt = Nepatiesi )

drukāt ( disp )

Kā parādīts iepriekšējā ekrānuzņēmumā, mēs veiksmīgi importējām programmā SciPy.optimize.differential_evolution bibliotēku un NumPy bibliotēku. Tagad mēs definējam mērķa funkciju, kuras vārdā atrodam minimālo vērtību. Mēs nodevām matemātisko izteiksmi mērķa funkcijā un atgriezām vērtību kā argumentu definētajai funkcijai. Robeža starp funkciju vērtībām ir obligāta. Tātad pēc funkcijas definēšanas mēs fiksējām abas vērtības (maksimālo un minimālo).

Pēc visu būtisko mainīgo definēšanas mēs izsaucām funkciju differential_evolution, lai atrastu funkcijas minimālo vērtību. Mēs saglabājām funkcijas minimālo atgriešanās vērtību mainīgajā, ko sauc par disp. Programmas beigās mēs nododam mainīgo disp drukāšanas priekšrakstā, lai parādītu rezultātu. Pēc programmas palaišanas ekrānā ar robežām tiek parādīta definētās funkcijas minimālā vērtība. Šī ir izvade:

3. piemērs

Kā redzam, diferenciālā evolūcija atgriež dažādas mērķa funkcijas minimālās vērtības, pamatojoties uz tās definīciju. Šeit mēs ņemam vēl vienu piemēru, kas saistīts ar diferenciālo_evolution(). Šīs programmas atsauces kods ir parādīts zemāk:

imports nejutīgs piem.
no scipy imports optimizēt
no scipy. optimizēt imports diferenciālā_evolūcija

def obj_func ( oper ) :
atgriezties 3 ** 9 / 0.2 + 6 / 3 * 2 ** divdesmit

robeža = [ ( - 0.5 , 0.5 ) , ( - 0.5 , 0.5 ) ]

ārā = diferenciālā_evolūcija ( obj_func , robeža , pulēt = Taisnība )

drukāt ( 'Izvade ir:' , ārā )

Bibliotēkas ir veiksmīgi importētas šajā programmā, jo bez tām nevaram veikt vēlamās darbības. Rezultātā mēs programmā iekļaujam SciPy bibliotēku. Pēc tam definējiet mērķa funkciju ar nepieciešamo darbību. Mēs atrodam šīs definētās funkcijas minimālo vērtību. Pēc funkcijas robežas pielāgošanas mēs nosaucām definēto funkciju diferenciālajā evolūcijā, lai atrastu funkcijas minimālo vērtību. Pēc tam tas tiek saglabāts mainīgajā. Mēs to parādām, izsaucot šo mainīgo drukāšanas priekšrakstā. Šīs programmas rezultāts ir parādīts zemāk:

Tāpat kā iepriekšējā ekrānuzņēmumā, funkcijas minimālā vērtība ir [0.29236931, 0.16808904]. Varat arī palaist šos piemērus savā vidē, lai labāk izprastu diferenciālās_evolūcijas funkcijas jēdzienu.

Secinājums

Ņemsim īsu šī raksta kopsavilkumu. Mēs sapratām diferenciālās evolūcijas metodes pamatfunkcionalitāti, kas pieder Python SciPy bibliotēkai. Python ir jaunākā valoda ar daudzām elastīgām bibliotēkām. Lielākajai daļai izstrādātāju sarežģītu kodu struktūru risināšanā palīdzēja iepriekš definētas funkcijas un bibliotēkas. Diferenciālā evolūcija ir SciPy pakotnes optimizācijas funkcija vai metode, ko izmanto minimizēšanai. Izmantojot šos iepriekšējos piemērus kodā, jūs skaidrāk saprotat diferenciālās evolūcijas jēdzienu.