SciPy diferencinė evoliucija

Scipy Diferencine Evoliucija



Šis straipsnis yra apie SciPy Differential Evolution (DE). „SciPy“ yra „Python“ kalbos biblioteka, o „Differential Evolution“ yra „SciPy“ bibliotekos metodas arba funkcija. Daugelis žmonių mokosi Python, nesvarbu, ar jie kūrėjai, ar ne, nes daugybė Python bibliotekų ir funkcijų daro jį labai saugų ir patikimą. SciPy dažnai naudojamas diferencialinėms ir algebrinėms lygtims spręsti, interpoliacijai, optimizavimui ir kt. Čia aptariame SciPy DE naudojimą, kad padėtume suprasti, kaip įdiegti SciPy diferencialinės evoliucijos funkciją Python programose.

Kas yra SciPy diferencinė evoliucija Python kalboje?

Scipy yra paviršutiniška, nemokama ir suprantama biblioteka, naudojama moksliniams ir matematiniams klausimams spręsti. „SciPy“ yra lobių dėžutė kūrėjams, nes jos bibliotekoje pilna vertingų modulių. „SciPy“ išplečia „NumPy“ funkcionalumą su vertingu algoritmų grupe. SciPy bibliotekoje yra antrinių paketų, kuriuos galima naudoti skaičiavimams, pvz., scipy.io, scipy.optimize ir kt. SciPy sukuria „diferencinės evoliucijos“ funkciją ir daug galingų funkcijų pakete scipy.optimize. Scipy.optimize naudojamas optimizuoti Python programose.

Diferencialinės evoliucijos funkcija yra visuotinė funkcija, įgyta naudojant SciPy optimizavimo paketą, kuri naudojama norint rasti visuotinį kelių kintamųjų funkcijų minimumą. Jis gali valdyti daugiamates objektyvines funkcijas, kurios yra netiesinės ir nediferencijuojamos. Tai paieškos algoritmas, naudojamas ieškant ištisinių erdvės funkcijų srityse. Ši funkcija veikia su tikromis vertėmis.







Diferencialinės evoliucijos funkcijos sintaksė

Diferencialinė evoliucijos funkcija yra Python naudojant diferencialinės_evoliucijos () funkciją. Diferencialinės evoliucijos funkcijos sintaksė parodyta žemiau:





Peržiūrėkime funkcijos parametrus:





Funkcija turi būti iškviečiama naudojant f(x,*args); ribos nurodo kintamųjų seką, kurią galima nurodyti dviem būdais: strategija yra neprivaloma arba eilutė su numatyta reikšme „best1bin“; maxiter yra neprivaloma arba int reikšmė; popsize yra int arba neprivaloma; tol yra int arba neprivaloma; mutacijos reikšmė yra plūduriuojanti arba neprivaloma; rekombinacijos reikšmė yra plūduriuojanti arba neprivaloma; sėklos nėra, int, NumPy ir Random.

Kitame skyriuje aptarsime diferencinės evoliucijos funkciją, naudodami paprastus pavyzdžius.



1 pavyzdys

Pradėkime nuo paprasto pavyzdžio, kuris paskatins jūsų susidomėjimą suprasti diferencinės evoliucijos funkcijos sampratą. Norėdami rasti mažiausią reikšmę, naudojome funkciją differential_evolution(). Tačiau norint rasti mažiausią reikšmę, funkcijai reikia paieškos ribų ir apibrėžtos iškviečiamos tikslo funkcijos. Dėl to mes apibrėžiame funkciją prieš naudodami programoje funkciją differential_evolution. Programos nuorodos kodas nurodytas žemiau:

importuoti nelygus kaip pvz.
scipy importuoti optimizuoti
scipy. optimizuoti importuoti diferencialinė_evoliucija
importuoti matplotlib. pyplot kaip py
matplotlib importuoti cm

def func ( p ) :

su , x = p

h = pvz. kv ( su ** 4 + x** 4 )

grąžinti pvz. kv ( h )


DE_ribos = [ [ - 6 , 6 ] , [ - 6 , 6 ] ]

res = diferencinė_evoliucija ( func , DE_ribos )

spausdinti ( res )

Mes importavome tokias bibliotekas kaip SciPy ir NumPy masyvo skaitiniams skaičiavimams. Importavome funkciją differential_evolution iš scipy.optimize modulio. Tada raktiniu žodžiu „def“ apibrėžiame iškviečiamą tikslo funkciją ir perduodame parametrą „p“. Sėkmingai apibrėžiame funkciją, kuri randa NumPy kintamųjų pridėjimo kvadratinę šaknį, kuri yra z, x. Kvadratinės šaknies reikšmė išsaugoma kintamajame „h“. Grąžiname kvadratinės šaknies reikšmę apibrėžtoje funkcijoje. Jis grąžinamas kaip argumentas.

Po to mes nustatome kintamojo, kurį galima detalizuoti, ribas, paaiškindami funkcijos min ir max reikšmes. Vykdome diferencialinės_evoliucijos funkciją kaip argumentą „DE_ribos“. Funkcijos reikšmę iškvietėme su kintamuoju pavadinimu res. Galų gale mes naudojame spausdinimo teiginį, kad parodytume išvestį. Rezultatas buvo rodomas paleidus programą. Numatoma išvesties ekrano kopija parodyta žemiau:

Differential_evolution() rodo, kad taške (0, 0) rodoma mažiausia funkcijos reikšmė.

2 pavyzdys

Tai dar vienas diferencinės evoliucijos funkcijos pavyzdys. Čia paimame masyvus ir tarp jų taikome skirtingas operacijas. Programos nuorodos kodas nurodytas žemiau:

importuoti nelygus kaip pvz.
scipy importuoti optimizuoti
scipy. optimizuoti importuoti diferencinė_evoliucija

def objekto_funkcija ( d ) :
grąžinti ( 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 = diferencinė_evoliucija ( objekto_funkcija , _ribos , popsize = 80 , lenkas = Netiesa )

spausdinti ( disp )

Kaip parodyta ankstesnėje ekrano kopijoje, sėkmingai importavome SciPy.optimize.differential_evolution biblioteką ir NumPy biblioteką į programą. Dabar apibrėžiame tikslinę funkciją, kurios vardu randame mažiausią reikšmę. Mes perdavėme matematinę išraišką tikslo funkcijoje ir grąžinome reikšmę kaip argumentą apibrėžtai funkcijai. Riba tarp funkcijų reikšmių yra būtina. Taigi, apibrėžę funkciją, fiksavome abi reikšmes (maksimalią ir mažiausią).

Apibrėžę visus esminius kintamuosius, norėdami rasti mažiausią funkcijos reikšmę, iškvietėme funkciją differential_evolution. Mes išsaugojome mažiausią funkcijos grąžinimo reikšmę kintamajame, vadinamame disp. Programos pabaigoje spausdinimo sakinyje perduodame disp kintamąjį, kad būtų rodomas rezultatas. Paleidus programą, ekrane su ribomis rodoma minimali apibrėžtos funkcijos reikšmė. Toliau pateikiama išvestis:

3 pavyzdys

Kaip matome, diferencinė evoliucija pateikia skirtingas minimalias tikslo funkcijos reikšmes, pagrįstas jos apibrėžimu. Čia paimame kitą pavyzdį, susijusį su diferencial_evolution(). Šios programos nuorodos kodas parodytas žemiau:

importuoti nelygus kaip pvz.
scipy importuoti optimizuoti
scipy. optimizuoti importuoti diferencinė_evoliucija

def obj_func ( oper ) :
grąžinti 3 ** 9 / 0.2 + 6 / 3 * 2 ** dvidešimt

riba = [ ( - 0.5 , 0.5 ) , ( - 0.5 , 0.5 ) ]

išeiti = diferencinė_evoliucija ( obj_func , riba , lenkas = Tiesa )

spausdinti ( 'Išvestis yra:' , išeiti )

Bibliotekos sėkmingai importuojamos į šią programą, nes be jų negalime atlikti norimų operacijų. Dėl to į programą įtraukiame SciPy biblioteką. Po to apibrėžkite tikslo funkciją su reikiama operacija. Randame mažiausią tos apibrėžtos funkcijos reikšmę. Pakoregavę funkcijos ribą, mes iškvietėme apibrėžtą funkciją diferencine evoliucija, kad surastume mažiausią funkcijos reikšmę. Tada tai išsaugoma kintamajame. Tai rodome iškviesdami šį kintamąjį spausdinimo sakinyje. Šios programos išvestis parodyta žemiau:

Kaip ir ankstesnėje ekrano kopijoje, mažiausia funkcijos reikšmė yra [0,29236931, 0,16808904]. Taip pat galite paleisti šiuos pavyzdžius savo aplinkoje, kad geriau suprastumėte diferencialinės_evoliucijos funkcijos koncepciją.

Išvada

Trumpai apžvelgsime šį straipsnį. Mes supratome pagrindines diferencinės evoliucijos metodo, priklausančio Python SciPy bibliotekai, funkcionalumą. Python yra naujausia kalba, turinti daugybę lanksčių bibliotekų. Daugeliui kūrėjų sudėtingas kodo struktūras padėjo išspręsti iš anksto nustatytos funkcijos ir bibliotekos. Diferencialinė evoliucija yra SciPy paketo optimizavimo funkcija arba metodas, naudojamas minimizavimui. Kai naudojate šiuos ankstesnius pavyzdžius kode, aiškiau suprantate diferencinės evoliucijos sąvoką.