SciPy diferenciálna evolúcia

Scipy Diferencialna Evolucia



Tento článok je o SciPy Differential Evolution (DE). SciPy je knižnica jazyka Python a Differential Evolution je metóda alebo funkcia knižnice SciPy. Väčšina ľudí sa učí Python, či už sú vývojári alebo nie, pretože početné knižnice a funkcie Pythonu ho robia veľmi bezpečným a spoľahlivým. SciPy sa často používa na riešenie diferenciálnych a algebraických rovníc, interpoláciu, optimalizáciu atď. Tu diskutujeme o použití SciPy DE, aby sme vám pomohli pochopiť, ako implementovať funkciu diferenciálnej evolúcie SciPy v aplikáciách Python.

Čo je diferenciálna evolúcia SciPy v jazyku Python?

Scipy je povrchná, bezplatná a zrozumiteľná knižnica používaná na riešenie vedeckých a matematických problémov. SciPy je pokladnica pre vývojárov, pretože jej knižnica je plná vzácnych modulov. SciPy rozširuje funkčnosť NumPy o hodnotný zhluk algoritmov. Knižnica SciPy obsahuje podbalíky, ktoré možno použiť na výpočty, ako napríklad scipy.io, scipy.optimize atď. Scipy.optimize sa používa na optimalizáciu v aplikáciách Python.

Funkcia diferenciálnej evolúcie je globálna funkcia získaná balíkom optimalizácie SciPy, ktorá sa používa na nájdenie globálneho minima funkcií s viacerými premennými. Dokáže riadiť viacrozmerné objektívne funkcie, ktoré sú nelineárne a nediferencovateľné. Je to vyhľadávací algoritmus používaný na vyhľadávanie oblastí spojitých priestorových funkcií. Táto funkcia funguje na skutočných hodnotách.







Syntax funkcie diferenciálnej evolúcie

Funkcia diferenciálnej evolúcie je prítomná v Pythone pomocou funkcie diferenciálnej evolúcie (). Syntax funkcie diferenciálnej evolúcie je uvedená nižšie:





Pozrime sa na parametre funkcie:





Funkcia musí byť volateľná s f(x,*args); bounds odkazuje na postupnosť premenných, ktoré môžu byť špecifikované dvoma spôsobmi: stratégia je voliteľná alebo reťazec s predvolenou hodnotou „best1bin“; maxiter je voliteľný alebo int hodnota; popsize je int alebo voliteľné; tol je int alebo voliteľné; hodnota mutácie je plávajúca alebo voliteľná; rekombinačná hodnota je v pohyblivej alebo voliteľnej hodnote; seed je none, int, NumPy a Random.

V ďalšej časti budeme diskutovať o diferenciálnej evolučnej funkcii pomocou jednoduchých príkladov.



Príklad 1

Začnime jednoduchým príkladom, ktorý rozvinie váš záujem o pochopenie konceptu funkcie diferenciálnej evolúcie. Na zistenie minimálnej hodnoty sme použili funkciu Different_evolution(). Na nájdenie minimálnej hodnoty však funkcia vyžadovala hranice vyhľadávania a definovanú volateľnú cieľovú funkciu. V dôsledku toho definujeme funkciu pred použitím funkcie Different_evolution v programe. Referenčný kód programu je uvedený nižšie:

importovať numpy ako napr.
od scipy importovať optimalizovať
od scipy. optimalizovať importovať diferenciálna_evolúcia
importovať matplotlib. pyplot ako py
od matplotlib importovať cm

def func ( p ) :

s , X = p

h = napr. sqrt ( s ** 4 + x ** 4 )

vrátiť napr. sqrt ( h )


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

res = diferenciálna_evolúcia ( func , DE_bounds )

vytlačiť ( res )

Na numerické výpočty polí sme importovali knižnice ako SciPy a NumPy. Importovali sme funkciu Different_evolution z modulu scipy.optimize. Potom s kľúčovým slovom „def“ definujeme volateľnú cieľovú funkciu a odovzdáme parameter „p“. Úspešne sme zadefinovali funkciu, ktorá nájde druhú odmocninu zo súčtu premenných NumPy, čo je z, x. Hodnota druhej odmocniny je uložená v premennej „h“. V definovanej funkcii vrátime odmocninu. Vráti sa ako argument.

Potom určíme hranice premennej, ktorú možno rozčleniť vysvetlením minimálnych a maximálnych hodnôt funkcie. Vykonávame funkciu diferenciálnej evolúcie s argumentom „DE_bounds““. Funkčnú hodnotu sme nazvali premennou s názvom res. Nakoniec použijeme tlačový príkaz na zobrazenie výstupu. Výsledok sa zobrazil po spustení programu. Očakávaný výstup obrazovky je uvedený nižšie:

Differential_evolution() ukazuje, že minimálna hodnota funkcie je zobrazená v bode (0, 0).

Príklad 2

Toto je ďalší príklad funkcie diferenciálnej evolúcie. V tomto prípade vezmeme polia a medzi nimi aplikujeme rôzne operácie. Referenčný kód programu je uvedený nižšie:

importovať numpy ako napr.
od scipy importovať optimalizovať
od scipy. optimalizovať importovať diferenciálna_evolúcia

def object_func ( d ) :
vrátiť ( d [ 1 ] - 1.2 ) / 2 + 0,5 * d [ 0 ] * 1.3 * ( d [ 1 ] + 0,5 ) ** 3

_medzí = [ ( - 0,3 , 0,3 ) , ( - 0,3 , 0,3 ) ]

disp = diferenciálna_evolúcia ( object_func , _medzí , popsize = 80 , leštiť = Nepravdivé )

vytlačiť ( disp )

Ako je znázornené na predchádzajúcej snímke obrazovky, do programu sme úspešne importovali knižnicu SciPy.optimize.differential_evolution a knižnicu NumPy. Teraz definujeme objektívnu funkciu, v mene ktorej nájdeme minimálnu hodnotu. Prešli sme matematický výraz v objektívnej funkcii a vrátili hodnotu ako argument do definovanej funkcie. Hranica medzi funkčnými hodnotami je nevyhnutná. Po definovaní funkcie sme teda zafixovali obe hodnoty (maximum aj minimum).

Po zadefinovaní všetkých podstatných premenných sme zavolali funkciu Different_evolution, aby sme našli minimálnu hodnotu funkcie. Minimálnu návratovú hodnotu funkcie sme uložili do premennej s názvom disp. Na konci programu odovzdáme v tlačovom príkaze premennú disp na zobrazenie výsledku. Po spustení programu sa minimálna hodnota definovanej funkcie zobrazí na obrazovke s hranicami. Nasleduje výstup:

Príklad 3

Ako vidíme, diferenciálna evolúcia vracia rôzne minimálne hodnoty objektívnej funkcie na základe jej definície. Tu uvádzame ďalší príklad týkajúci sa diferenciálnej evolúcie (). Referenčný kód tohto programu je uvedený nižšie:

importovať numpy ako napr.
od scipy importovať optimalizovať
od scipy. optimalizovať importovať diferenciálna_evolúcia

def obj_func ( oper ) :
vrátiť 3 ** 9 / 0,2 + 6 / 3 * 2 ** dvadsať

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

von = diferenciálna_evolúcia ( obj_func , hranica , leštiť = Pravda )

vytlačiť ( 'Výstup je:' , von )

Knižnice sa úspešne importujú do tohto programu, pretože bez nich nemôžeme vykonávať požadované operácie. Výsledkom je, že do programu zahrnieme knižnicu SciPy. Potom definujte účelovú funkciu s požadovanou operáciou. Nájdeme minimálnu hodnotu tejto definovanej funkcie. Po úprave hranice funkcie sme zavolali definovanú funkciu v diferenciálnom vývoji, aby sme našli minimálnu hodnotu funkcie. To sa potom uchováva v premennej. Zobrazujeme to volaním tejto premennej v príkaze print. Výstup tohto programu je uvedený nižšie:

Rovnako ako na predchádzajúcej snímke obrazovky je minimálna hodnota funkcie [0,29236931, 0,16808904]. Tieto príklady môžete spustiť aj vo svojom prostredí, aby ste lepšie porozumeli konceptu funkcie Different_evolution.

Záver

Urobme si rýchlu rekapituláciu tohto článku. Pochopili sme základnú funkčnosť metódy diferenciálnej evolúcie, ktorá patrí do knižnice SciPy v Pythone. Python je najnovší jazyk s množstvom flexibilných knižníc. Väčšine vývojárov pomáhali pri riešení zložitých štruktúr kódu preddefinované funkcie a knižnice. Diferenciálna evolúcia je funkcia optimalizácie balíka SciPy alebo metóda používaná na minimalizáciu. Keď použijete tieto predchádzajúce príklady v kóde, jasnejšie pochopíte koncept diferenciálnej evolúcie.