SciPy Diferencijalna evolucija

Scipy Diferencijalna Evolucija



Ovaj je članak o SciPy Differential Evolution (DE). SciPy je biblioteka jezika Python, a Differential Evolution je metoda ili funkcija biblioteke SciPy. Većina ljudi uči Python, bilo da su programeri ili ne, budući da ga Pythonove brojne biblioteke i funkcije čine vrlo sigurnim i pouzdanim. SciPy se često koristi za rješavanje diferencijalnih i algebarskih jednadžbi, interpolaciju, optimizaciju itd. Ovdje raspravljamo o upotrebi SciPy DE kako bismo vam pomogli razumjeti kako implementirati SciPy funkciju diferencijalne evolucije u Python aplikacijama.

Što je SciPy diferencijalna evolucija u jeziku Python?

Scipy je površna, besplatna i razumljiva biblioteka koja se koristi za rješavanje znanstvenih i matematičkih pitanja. SciPy je kutija s blagom za programere jer je njegova biblioteka puna dragocjenih modula. SciPy proširuje funkcionalnost NumPy vrijednim klasterom algoritama. Biblioteka SciPy ima podpakete koji se mogu koristiti za izračune, poput scipy.io, scipy.optimize itd. SciPy proizvodi funkciju 'diferencijalne evolucije' i mnoge moćne funkcije u paketu scipy.optimize. Scipy.optimize se koristi za optimizaciju u Python aplikacijama.

Funkcija diferencijalne evolucije je globalna funkcija koju je preuzeo SciPy optimize paket koji se koristi za pronalaženje globalnog minimuma multivarijatnih funkcija. Može upravljati višedimenzionalnim objektivnim funkcijama koje su nelinearne i nediferencijabilne. To je algoritam pretraživanja koji se koristi za pretraživanje područja kontinuiranih prostornih funkcija. Ova funkcija radi na stvarnim vrijednostima.







Sintaksa funkcije diferencijalne evolucije

Funkcija diferencijalne evolucije prisutna je u Pythonu pomoću funkcije differential_evolution (). Sintaksa funkcije diferencijalne evolucije prikazana je u nastavku:





Prođimo kroz parametre funkcije:





Funkcija se mora pozivati ​​pomoću f(x,*args); granice se odnose na niz varijabli koje se mogu specificirati na dva načina: strategija je izborna ili niz sa zadanom vrijednošću “best1bin”; maxiter je izborna ili int vrijednost; popsize je int ili opcionalno; tol je int ili opcijski; vrijednost mutacije je u float ili izborno; vrijednost rekombinacije je u float ili izborno; sjeme je none, int, NumPy i Random.

U sljedećem odjeljku raspravljat ćemo o funkciji diferencijalne evolucije uz pomoć jednostavnih primjera.



Primjer 1

Počnimo s izravnim primjerom koji će razviti vaš interes za razumijevanje koncepta diferencijalne evolucijske funkcije. Koristili smo funkciju differential_evolution() da pronađemo minimalnu vrijednost. No, da bi se pronašla minimalna vrijednost, funkcija je zahtijevala granice pretraživanja i definiranu funkciju cilja koja se može pozvati. Kao rezultat toga, definiramo funkciju prije upotrebe funkcije differential_evolution u programu. Referentni kod programa naveden je u nastavku:

uvoz numpy kao npr.
iz scipy uvoz optimizirati
iz scipy. optimizirati uvoz diferencijalna_evolucija
uvoz matplotlib. pyplot kao py
iz matplotlib uvoz cm

def funk ( str ) :

s , x = str

h = npr. sqrt ( sa ** 4 + x ** 4 )

povratak npr. sqrt ( h )


DE_granice = [ [ - 6 , 6 ] , [ - 6 , 6 ] ]

res = diferencijalna_evolucija ( funk , DE_granice )

ispisati ( res )

Uvezli smo biblioteke kao što su SciPy i NumPy za numeričke izračune nizova. Uvezli smo funkciju differential_evolution iz modula scipy.optimize. Zatim, ključnom riječi 'def', definiramo funkciju cilja koja se može pozvati i prosljeđujemo parametar 'p'. Uspješno smo definirali funkciju koja pronalazi kvadratni korijen zbroja varijabli NumPy, a to je z, x. Vrijednost kvadratnog korijena pohranjuje se u varijabli 'h'. Vraćamo vrijednost kvadratnog korijena u definiranoj funkciji. Vraća se kao argument.

Nakon toga utvrđujemo granice varijable koje se mogu detaljizirati objašnjavajući minimalne i maksimalne vrijednosti funkcije. Izvršavamo funkciju differential_evolution s 'DE_bounds' kao argumentom. Pozvali smo vrijednost funkcije pomoću varijable imena res. Na kraju koristimo naredbu ispisa za prikaz izlaza. Rezultat je prikazan nakon pokretanja programa. Očekivani izlazni snimak zaslona prikazan je u nastavku:

Differential_evolution() pokazuje da je minimalna vrijednost funkcije prikazana u točki (0, 0).

Primjer 2

Ovo je još jedan primjer funkcije diferencijalne evolucije. U ovome uzimamo nizove i primjenjujemo različite operacije između njih. Referentni kod programa naveden je u nastavku:

uvoz numpy kao npr.
iz scipy uvoz optimizirati
iz scipy. optimizirati uvoz diferencijalna_evolucija

def objektivna_funkcija ( d ) :
povratak ( d [ 1 ] - 1.2 ) / 2 + 0,5 * d [ 0 ] * 1.3 * ( d [ 1 ] + 0,5 ) ** 3

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

disp = diferencijalna_evolucija ( objektivna_funkcija , _granice , popsize = 80 , polirati = lažno )

ispisati ( disp )

Kao što je prikazano na prethodnoj snimci zaslona, ​​uspješno smo uvezli biblioteku SciPy.optimize.differential_evolution i biblioteku NumPy u program. Sada definiramo funkciju cilja u ime koje nalazimo minimalnu vrijednost. Proslijedili smo matematički izraz u funkciji cilja i vratili vrijednost kao argument definiranoj funkciji. Granica između vrijednosti funkcije je obavezna. Dakle, nakon definiranja funkcije, fiksirali smo obje vrijednosti (maksimum i minimum).

Nakon definiranja svih bitnih varijabli, pozvali smo funkciju differential_evolution kako bismo pronašli minimalnu vrijednost funkcije. Spremili smo minimalnu povratnu vrijednost funkcije u varijablu pod nazivom disp. Na kraju programa, prosljeđujemo disp varijablu u ispis naredbi za prikaz rezultata. Nakon pokretanja programa, minimalna vrijednost definirane funkcije se prikazuje na ekranu s granicama. Sljedeći je izlaz:

Primjer 3

Kao što vidimo, diferencijalna evolucija vraća različite minimalne vrijednosti objektivne funkcije na temelju njezine definicije. Ovdje ćemo uzeti još jedan primjer koji se odnosi na differential_evolution(). Referentni kod za ovaj program prikazan je ispod:

uvoz numpy kao npr.
iz scipy uvoz optimizirati
iz scipy. optimizirati uvoz diferencijalna_evolucija

def obj_func ( oper ) :
povratak 3 ** 9 / 0,2 + 6 / 3 * 2 ** dvadeset

granica = [ ( - 0,5 , 0,5 ) , ( - 0,5 , 0,5 ) ]

van = diferencijalna_evolucija ( obj_func , granica , polirati = Pravi )

ispisati ( 'Izlaz je:' , van )

Knjižnice su uspješno uvezene u ovaj program jer bez njih ne možemo izvršiti operacije koje želimo. Kao rezultat toga, u program uključujemo biblioteku SciPy. Nakon toga definirati funkciju cilja sa traženom operacijom. Pronalazimo minimalnu vrijednost te definirane funkcije. Nakon podešavanja granice funkcije, pozvali smo definiranu funkciju u diferencijalnu evoluciju kako bismo pronašli minimalnu vrijednost funkcije. To se zatim čuva u varijabli. To prikazujemo pozivanjem ove varijable u izjavi za ispis. Ishod ovog programa prikazan je u nastavku:

Kao i na prethodnoj snimci zaslona, ​​minimalna vrijednost funkcije je [0,29236931, 0,16808904]. Također možete pokrenuti ove primjere u svom okruženju kako biste bolje razumjeli koncept funkcije differential_evolution.

Zaključak

Uzmimo kratki rezime ovog članka. Shvatili smo osnovnu funkcionalnost metode diferencijalne evolucije koja pripada biblioteci SciPy u Pythonu. Python je najnoviji jezik s brojnim fleksibilnim bibliotekama. Većini programera u rješavanju složenih struktura koda pomogle su unaprijed definirane funkcije i biblioteke. Diferencijalna evolucija je SciPy funkcija optimizacije paketa ili metoda koja se koristi za minimizaciju. Kada ove prethodne primjere koristite u kodu, jasnije ćete razumjeti koncept diferencijalne evolucije.