SciPy Differential Evolution

Scipy Differential Evolution



See artikkel räägib SciPy Differential Evolutionist (DE). SciPy on Pythoni keele raamatukogu ja Differential Evolution on SciPy teegi meetod või funktsioon. Enamik inimesi on Pythonit õppinud, olenemata sellest, kas nad on arendajad või mitte, kuna Pythoni arvukad teegid ja funktsioonid muudavad selle väga turvaliseks ja usaldusväärseks. SciPyt kasutatakse sageli diferentsiaal- ja algebravõrrandite lahendamiseks, interpoleerimiseks, optimeerimiseks jne. Siin käsitleme SciPy DE kasutamist, et aidata teil mõista, kuidas Pythoni rakendustes SciPy diferentsiaalevolutsiooni funktsiooni rakendada.

Mis on SciPy diferentsiaalne evolutsioon Pythoni keeles?

Scipy on pealiskaudne, tasuta ja arusaadav raamatukogu, mida kasutatakse teaduslike ja matemaatiliste probleemide lahendamiseks. SciPy on arendajatele aardekast, sest selle raamatukogu on täis väärtuslikke mooduleid. SciPy laiendab NumPy funktsionaalsust väärtusliku algoritmide klastri abil. SciPy teegis on alampakette, mida saab kasutada arvutuste tegemiseks, nagu scipy.io, scipy.optimize jne. SciPy toodab 'diferentsiaalse evolutsiooni' funktsiooni ja palju võimsaid funktsioone paketis scipy.optimize. Faili scipy.optimize kasutatakse Pythoni rakenduste optimeerimiseks.

Differential Evolution Function on SciPy optimeerimispaketiga hangitud globaalne funktsioon, mida kasutatakse mitme muutujaga funktsioonide globaalse miinimumi leidmiseks. See suudab hallata mittelineaarseid ja mittediferentseeruvaid mitmemõõtmelisi sihtfunktsioone. See on otsingualgoritm, mida kasutatakse pidevate ruumifunktsioonide alade otsimiseks. See funktsioon töötab tegelike väärtustega.







Diferentsiaalse evolutsiooni funktsiooni süntaks

Diferentsiaalse evolutsiooni funktsioon on Pythonis olemas, kasutades funktsiooni differential_evolution (). Diferentsiaalse evolutsiooni funktsiooni süntaks on näidatud allpool:





Vaatame üle funktsiooni parameetrid:





Funktsioon peab olema väljakutsutav funktsiooniga f(x,*args); bounds viitab muutujate jadale, mida saab määrata kahel viisil: strateegia on valikuline või string vaikeväärtusega “best1bin”; maxiter on valikuline või int väärtus; popsize on int või valikuline; tol on int või valikuline; mutatsiooni väärtus on ujuvas või valikuline; rekombinatsiooni väärtus on ujuv või valikuline; seeme on none, int, NumPy ja Random.

Järgmises osas käsitleme lihtsate näidete abil diferentsiaalset evolutsioonifunktsiooni.



Näide 1

Alustame lihtsa näitega, mis arendab teie huvi diferentsiaalse evolutsiooni funktsiooni kontseptsiooni mõistmise vastu. Minimaalse väärtuse leidmiseks kasutasime funktsiooni differential_evolution(). Kuid minimaalse väärtuse leidmiseks vajas funktsioon otsingupiire ja määratletud kutsutavat sihtfunktsiooni. Selle tulemusena määratleme funktsiooni enne funktsiooni differential_evolution kasutamist programmis. Programmi viitekood on märgitud allpool:

importida tuim nagu nt.
alates scipy importida optimeerida
alates scipy. optimeerida importida diferentsiaalne_evolutsioon
importida matplotlib. pyplot nagu py
alates matplotlib importida cm

def func ( lk ) :

koos , x = lk

h = nt. sqrt ( koos ** 4 + x ** 4 )

tagasi nt. sqrt ( h )


DE_piirid = [ [ - 6 , 6 ] , [ - 6 , 6 ] ]

res = diferentsiaalne_evolutsioon ( func , DE_piirid )

printida ( res )

Importisime massiivi numbriliste arvutuste jaoks teeke, nagu SciPy ja NumPy. Importisime funktsiooni differential_evolution moodulist scipy.optimize. Seejärel defineerime märksõnaga “def” kutsutava eesmärgifunktsiooni ja edastame parameetri “p”. Defineerime edukalt funktsiooni, mis leiab NumPy muutujate liitmise ruutjuure, milleks on z, x. Ruutjuure väärtus salvestatakse muutujasse “h”. Tagastame määratud funktsioonis ruutjuure väärtuse. See tagastatakse argumendina.

Pärast seda määrame kindlaks muutuja piirid, mida saab kirjeldada, selgitades funktsiooni min ja max väärtusi. Me käivitame funktsiooni differential_evolution argumendina 'DE_bounds'. Me kutsusime funktsiooni väärtuse muutuja nimega res. Lõpuks kasutame väljundi kuvamiseks printimise avaldust. Tulemus kuvati pärast programmi käivitamist. Eeldatav väljundi ekraanipilt on näidatud allpool:

Differential_evolution() näitab, et funktsiooni minimaalne väärtus kuvatakse punktis (0, 0).

Näide 2

See on veel üks näide diferentsiaalse evolutsiooni funktsioonist. Selles võtame massiive ja rakendame nende vahel erinevaid toiminguid. Programmi viitekood on märgitud allpool:

importida tuim nagu nt.
alates scipy importida optimeerida
alates scipy. optimeerida importida diferentsiaalne_evolutsioon

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

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

disp = diferentsiaalne_evolutsioon ( objektiivne_funktsioon , _piirid , popsize = 80 , lihvima = Vale )

printida ( disp )

Nagu eelmisel ekraanipildil näidatud, importisime edukalt programmi SciPy.optimize.differential_evolution teegi ja NumPy teegi. Nüüd defineerime eesmärgifunktsiooni, mille nimel leiame minimaalse väärtuse. Edastasime matemaatilise avaldise eesmärgifunktsioonis ja tagastasime defineeritud funktsioonile argumendina väärtuse. Funktsiooni väärtuste vaheline piir on kohustuslik. Niisiis, pärast funktsiooni määratlemist fikseerisime mõlemad väärtused (maksimaalne ja minimaalne).

Pärast kõigi oluliste muutujate määratlemist kutsusime funktsiooni miinimumväärtuse leidmiseks funktsiooni differential_evolution. Salvestasime funktsiooni minimaalse tagastusväärtuse muutujas nimega disp. Programmi lõpus anname tulemuse kuvamiseks edasi printlauses muutuja disp. Pärast programmi käivitamist kuvatakse ekraanil defineeritud funktsiooni minimaalne väärtus koos piiridega. Järgmine on väljund:

Näide 3

Nagu näeme, tagastab diferentsiaalevolutsioon selle definitsiooni alusel eesmärgifunktsiooni erinevad miinimumväärtused. Siin on veel üks näide, mis on seotud funktsiooniga differential_evolution(). Selle programmi viitekood on näidatud allpool:

importida tuim nagu nt.
alates scipy importida optimeerida
alates scipy. optimeerida importida diferentsiaalne_evolutsioon

def obj_func ( oper ) :
tagasi 3 ** 9 / 0.2 + 6 / 3 * 2 ** kakskümmend

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

välja = diferentsiaalne_evolutsioon ( obj_func , piiri , lihvima = Tõsi )

printida ( 'Väljund on:' , välja )

Teegid imporditakse sellesse programmi edukalt, sest ilma nendeta ei saa me soovitud toiminguid teha. Selle tulemusena kaasame programmi SciPy teegi. Pärast seda defineerige eesmärgifunktsioon vajaliku toiminguga. Leiame selle määratletud funktsiooni minimaalse väärtuse. Pärast funktsiooni piiri reguleerimist kutsusime määratletud funktsiooni diferentsiaalevolutsioonis funktsiooni minimaalse väärtuse leidmiseks. Seejärel hoitakse seda muutujas. Kuvame selle, kutsudes seda muutujat print-lauses. Selle programmi väljund on näidatud allpool:

Nagu ka eelmisel ekraanipildil, on funktsiooni minimaalne väärtus [0,29236931, 0,16808904]. Funktsiooni differential_evolution kontseptsiooni paremaks mõistmiseks saate neid näiteid ka oma keskkonnas käivitada.

Järeldus

Teeme selle artikli kiire kokkuvõtte. Mõistsime Pythoni SciPy teeki kuuluva diferentsiaalevolutsiooni meetodi põhifunktsioone. Python on uusim keel, millel on palju paindlikke teeke. Enamikku arendajaid aitasid keerukate koodistruktuuride lahendamisel eelnevalt määratletud funktsioonid ja teegid. Diferentsiaalne evolutsioon on SciPy paketi optimeerimise funktsioon või meetod, mida kasutatakse minimeerimiseks. Kui kasutate neid eelmisi näiteid koodis, saate selgemini aru diferentsiaalse evolutsiooni kontseptsioonist.