SciPy Differential Evolution

Scipy Differential Evolution



Tämä artikkeli käsittelee SciPy Differential Evolutionia (DE). SciPy on Python-kielen kirjasto ja Differential Evolution on SciPy-kirjaston menetelmä tai toiminto. Useimmat ihmiset ovat oppineet Pythonia, olivatpa he kehittäjiä tai eivät, koska Pythonin lukuisat kirjastot ja toiminnot tekevät siitä erittäin turvallisen ja luotettavan. SciPyä käytetään usein differentiaali- ja algebrallisten yhtälöiden ratkaisemiseen, interpolointiin, optimointiin jne. Tässä keskustelemme SciPy DE:n käytöstä auttaaksemme sinua ymmärtämään, kuinka SciPy-differentiaalisen evoluution funktio voidaan toteuttaa Python-sovelluksissa.

Mikä on SciPy Differential Evolution Python-kielessä?

Scipy on pinnallinen, ilmainen ja ymmärrettävä kirjasto, jota käytetään ratkaisemaan tieteellisiä ja matemaattisia kysymyksiä. SciPy on aarrelaatikko kehittäjille, koska sen kirjasto on täynnä arvokkaita moduuleja. SciPy laajentaa NumPy-toiminnallisuutta arvokkaalla algoritmiklusterilla. SciPy-kirjastossa on alipaketteja, joita voidaan käyttää laskelmiin, kuten scipy.io, scipy.optimize jne. SciPy tuottaa 'differentiaalisen evoluution' funktion ja monia tehokkaita toimintoja scipy.optimize-paketissa. Scipy.optimize-tiedostoa käytetään optimointiin Python-sovelluksissa.

Differential Evolution Function on SciPy-optimointipaketin hankkima globaali funktio, jota käytetään monimuuttujafunktioiden globaalin minimimäärän löytämiseen. Se pystyy hallitsemaan moniulotteisia tavoitefunktioita, jotka ovat epälineaarisia ja erottumattomia. Se on hakualgoritmi, jota käytetään etsimään jatkuvien avaruusfunktioiden alueita. Tämä toiminto toimii todellisilla arvoilla.







Differentiaalisen evoluutiofunktion syntaksi

Differentiaalinen evoluutiofunktio on Pythonissa käyttämällä differential_evolution () -funktiota. Differentiaalisen evoluutiofunktion syntaksi on esitetty alla:





Käydään läpi funktion parametrit:





Funktio on kutsuttava komennolla f(x,*args); bounds viittaa muuttujien sarjaan, joka voidaan määrittää kahdella tavalla: strategia on valinnainen tai merkkijono, jonka oletusarvo on 'best1bin'; maxiter on valinnainen tai int-arvo; popsize on int tai valinnainen; tol on int tai valinnainen; mutaatioarvo on kelluva tai valinnainen; rekombinaatioarvo on kelluva tai valinnainen; siemen on none, int, NumPy ja Random.

Seuraavassa osiossa käsittelemme differentiaalista evoluutiofunktiota yksinkertaisten esimerkkien avulla.



Esimerkki 1

Aloitetaan yksinkertaisella esimerkillä, joka kehittää kiinnostustasi ymmärtää differentiaalisen evoluutiofunktion käsite. Käytimme differential_evolution()-funktiota minimiarvon löytämiseen. Mutta minimiarvon löytämiseksi funktio vaati hakurajoja ja määritellyn kutsuttavan tavoitefunktion. Tämän seurauksena määritämme funktion ennen differential_evolution-funktion käyttämistä ohjelmassa. Ohjelman viitekoodi on mainittu alla:

tuonti nuhjuinen kuten esim.
alkaen scipy tuonti optimoida
alkaen scipy. optimoida tuonti differential_evolution
tuonti matplotlib. pyplot kuten py
alkaen matplotlib tuonti cm

def func ( s ) :

kanssa , x = s

h = esimerkiksi. sqrt ( kanssa ** 4 + x ** 4 )

palata esim. sqrt ( h )


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

res = differential_evolution ( func , DE_bounds )

Tulosta ( res )

Toimme kirjastot, kuten SciPy ja NumPy, taulukon numeerisia laskelmia varten. Toimme differential_evolution-funktion scipy.optimize-moduulista. Sitten avainsanalla 'def' määritetään kutsuttava tavoitefunktio ja välitetään parametri 'p'. Määritämme onnistuneesti funktion, joka löytää NumPy-muuttujien yhteenlaskun neliöjuuren, joka on z, x. Neliöjuuren arvo tallennetaan muuttujaan 'h'. Palautamme neliöjuuren arvon määritetyssä funktiossa. Se palautetaan argumenttina.

Sen jälkeen selvitetään eriteltävissä olevan muuttujan rajat selittämällä funktion min ja max arvot. Suoritamme differential_evolution-funktion argumenttina 'DE_bounds'. Kutsuimme funktion arvoa muuttujalla nimeltä res. Loppujen lopuksi käytämme tulosteen näyttämiseen print-lausetta. Tulos tuli näkyviin ohjelman suorittamisen jälkeen. Odotettu tulosteen kuvakaappaus näkyy alla:

Differential_evolution() osoittaa, että funktion pienin arvo näytetään pisteessä (0, 0).

Esimerkki 2

Tämä on toinen esimerkki differentiaalisesta evoluutiofunktiosta. Tässä otamme taulukoita ja teemme niiden välillä erilaisia ​​operaatioita. Ohjelman viitekoodi on mainittu alla:

tuonti nuhjuinen kuten esim.
alkaen scipy tuonti optimoida
alkaen scipy. optimoida tuonti differential_evolution

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

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

disp = differential_evolution ( target_func , _bounds , popsize = 80 , kiillottaa = Väärä )

Tulosta ( disp )

Kuten edellisestä kuvakaappauksesta käy ilmi, toimme onnistuneesti SciPy.optimize.differential_evolution-kirjaston ja NumPy-kirjaston ohjelmaan. Nyt määritämme tavoitefunktion, jonka puolesta löydämme minimiarvon. Välitimme matemaattisen lausekkeen tavoitefunktiossa ja palautimme arvon argumenttina määritettyyn funktioon. Funktioarvojen välinen raja on pakollinen. Joten funktion määrittämisen jälkeen kiinnitimme molemmat arvot (maksimi ja minimi).

Kun olet määritellyt kaikki olennaiset muuttujat, kutsuimme differential_evolution-funktiota löytääksemme funktion vähimmäisarvon. Tallensimme funktion pienimmän palautusarvon muuttujaan nimeltä disp. Ohjelman lopussa välitämme disp-muuttujan print-käskyssä tuloksen näyttämiseksi. Kun ohjelma on suoritettu, määritellyn funktion vähimmäisarvo näytetään ruudulla rajoilla. Tuotos on seuraava:

Esimerkki 3

Kuten näemme, differentiaalinen evoluutio palauttaa eri vähimmäisarvot tavoitefunktiolle sen määritelmän perusteella. Tässä otamme toisen esimerkin, joka liittyy differential_evolution(). Tämän ohjelman viitekoodi näkyy alla:

tuonti nuhjuinen kuten esimerkiksi.
alkaen scipy tuonti optimoida
alkaen scipy. optimoida tuonti differential_evolution

def obj_func ( oper ) :
palata 3 ** 9 / 0.2 + 6 / 3 * 2 ** kaksikymmentä

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

ulos = differential_evolution ( obj_func , rajaa , kiillottaa = Totta )

Tulosta ( 'Tuloste on:' , ulos )

Kirjastot on tuotu tähän ohjelmaan onnistuneesti, koska emme voi suorittaa haluamiamme toimintoja ilman niitä. Tämän seurauksena sisällytämme SciPy-kirjaston ohjelmaan. Tämän jälkeen määritä tavoitefunktio vaaditulla operaatiolla. Löydämme määritetyn funktion vähimmäisarvon. Kun funktion rajaa oli säädetty, kutsuimme määriteltyä funktiota differentiaalisessa kehityksessä löytääksemme funktion minimiarvon. Tämä säilytetään sitten muuttujassa. Näytämme tämän kutsumalla tätä muuttujaa print-lauseessa. Tämän ohjelman tulos näkyy alla:

Kuten edellisessä kuvakaappauksessa, funktion vähimmäisarvo on [0,29236931, 0,16808904]. Voit myös suorittaa nämä esimerkit ympäristössäsi ymmärtääksesi paremmin differential_evolution-funktion käsitteen.

Johtopäätös

Otetaanpa lyhyt yhteenveto tästä artikkelista. Ymmärsimme Pythonin SciPy-kirjastoon kuuluvan differentiaalisen evoluution menetelmän perustoiminnot. Python on uusin kieli, jossa on lukuisia joustavia kirjastoja. Useimmat kehittäjät saivat apua monimutkaisten koodirakenteiden ratkaisemisessa ennalta määritetyillä funktioilla ja kirjastoilla. Differentiaalinen evoluutio on SciPy-paketin optimointitoiminto tai -menetelmä, jota käytetään minimointiin. Kun käytät näitä aiempia esimerkkejä koodissa, ymmärrät selkeämmin differentiaalisen evoluution käsitteen.