SciPy diferenciální evoluce

Scipy Diferencialni Evoluce



Tento článek je o SciPy Differential Evolution (DE). SciPy je knihovna jazyka Python a Differential Evolution je metoda nebo funkce knihovny SciPy. Většina lidí se učí Python, ať už jsou vývojáři nebo ne, protože četné knihovny a funkce Pythonu jej činí velmi bezpečným a spolehlivým. SciPy se často používá pro řešení diferenciálních a algebraických rovnic, interpolaci, optimalizaci atd. Zde diskutujeme o použití SciPy DE, abychom vám pomohli pochopit, jak implementovat funkci diferenciální evoluce SciPy v aplikacích Pythonu.

Co je diferenciální evoluce SciPy v jazyce Python?

Scipy je povrchní, bezplatná a srozumitelná knihovna používaná k řešení vědeckých a matematických problémů. SciPy je pokladnice pro vývojáře, protože její knihovna je plná cenných modulů. SciPy rozšiřuje funkčnost NumPy o hodnotný shluk algoritmů. Knihovna SciPy má dílčí balíčky, které lze použít pro výpočty, jako je scipy.io, scipy.optimize atd. SciPy vytváří funkci „diferenciální evoluce“ a mnoho výkonných funkcí v balíčku scipy.optimize. Scipy.optimize se používá pro optimalizaci v aplikacích Python.

Funkce diferenciálního evoluce je globální funkce získaná balíčkem optimalizace SciPy, který se používá k nalezení globálního minima funkcí s více proměnnými. Dokáže spravovat vícerozměrné objektivní funkce, které jsou nelineární a nediferencovatelné. Je to vyhledávací algoritmus používaný k prohledávání oblastí spojitých prostorových funkcí. Tato funkce funguje na skutečných hodnotách.







Syntaxe funkce diferenciální evoluce

Funkce diferenciální evoluce je v Pythonu přítomna pomocí funkce diferenciální_evoluce (). Syntaxe funkce diferenciální evoluce je uvedena níže:





Pojďme se podívat na parametry funkce:





Funkce musí být volatelná pomocí f(x,*args); bounds odkazuje na posloupnost proměnných, které lze specifikovat dvěma způsoby: strategie je volitelná nebo řetězec s výchozí hodnotou „best1bin“; maxiter je volitelný nebo int hodnota; popsize je int nebo volitelné; tol je int nebo volitelné; hodnota mutace je v float nebo volitelné; rekombinační hodnota je v float nebo volitelná; seed je none, int, NumPy a Random.

V další části probereme diferenciální evoluční funkci pomocí jednoduchých příkladů.



Příklad 1

Začněme jednoduchým příkladem, který rozvine váš zájem o pochopení konceptu diferenciální evoluční funkce. K nalezení minimální hodnoty jsme použili funkci diferenciální_evoluce(). K nalezení minimální hodnoty však funkce vyžadovala hranice hledání a definovanou volatelnou účelovou funkci. V důsledku toho definujeme funkci před použitím funkce diferenciální_evoluce v programu. Referenční kód programu je uveden níže:

import nemotorný tak jako např.
z scipy import optimalizovat
z scipy. optimalizovat import diferenciální_evoluce
import matplotlib. pyplot tak jako py
z matplotlib import cm

def func ( p ) :

S , X = p

h = např. sqrt ( s ** 4 + x ** 4 )

vrátit se např. sqrt ( h )


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

res = diferenciální_evoluce ( func , DE_bounds )

vytisknout ( res )

Importovali jsme knihovny jako SciPy a NumPy pro numerické výpočty polí. Importovali jsme funkci diferenciální_evoluce z modulu scipy.optimize. Poté s klíčovým slovem „def“ definujeme funkci volatelného cíle a předáme parametr „p“. Úspěšně jsme nadefinovali funkci, která najde druhou odmocninu sčítání proměnných NumPy, což je z, x. Hodnota druhé odmocniny je uložena v proměnné „h“. V definované funkci vrátíme hodnotu druhé odmocniny. Je vráceno jako argument.

Poté určíme hranice proměnné, kterou lze rozepsat, vysvětlením minimálních a maximálních hodnot funkce. Provedeme funkci diferenciální_evoluce s argumentem ‚DE_bounds‘‘. Funkční hodnotu jsme zavolali pomocí proměnné res. Nakonec použijeme příkaz print k zobrazení výstupu. Výsledek se zobrazil po spuštění programu. Očekávaný výstupní snímek obrazovky je uveden níže:

Differential_evolution() ukazuje, že minimální hodnota funkce je zobrazena v bodě (0, 0).

Příklad 2

Toto je další příklad funkce diferenciální evoluce. V tomto případě vezmeme pole a aplikujeme mezi nimi různé operace. Referenční kód programu je uveden níže:

import nemotorný tak jako např.
z scipy import optimalizovat
z scipy. optimalizovat import diferenciální_evoluce

def objektivní_funkce ( d ) :
vrátit se ( d [ 1 ] - 1.2 ) / 2 + 0,5 *d [ 0 ] * 1.3 * ( d [ 1 ] + 0,5 ) ** 3

_meze = [ ( - 0,3 , 0,3 ) , ( - 0,3 , 0,3 ) ]

disp = diferenciální_evoluce ( objektivní_funkce , _meze , popsize = 80 , polština = Nepravdivé )

vytisknout ( disp )

Jak ukazuje předchozí snímek obrazovky, úspěšně jsme do programu importovali knihovnu SciPy.optimize.differential_evolution a knihovnu NumPy. Nyní definujeme účelovou funkci, pro kterou najdeme minimální hodnotu. Předali jsme matematický výraz v objektivní funkci a vrátili hodnotu jako argument definované funkci. Hranice mezi funkčními hodnotami je nutností. Po definování funkce jsme tedy zafixovali obě hodnoty (maximum i minimum).

Po definování všech podstatných proměnných jsme zavolali funkci diferenciální_evoluce, abychom našli minimální hodnotu funkce. Minimální návratovou hodnotu funkce jsme uložili do proměnné disp. Na konci programu předáme v tiskovém příkazu proměnnou disp, aby se zobrazil výsledek. Po spuštění programu se na obrazovce zobrazí minimální hodnota definované funkce s hranicemi. Následuje výstup:

Příklad 3

Jak vidíme, diferenciální evoluce vrací různé minimální hodnoty objektivní funkce na základě její definice. Zde si vezmeme další příklad související s diferenciální_evolucí(). Referenční kód tohoto programu je uveden níže:

import nemotorný tak jako např.
z scipy import optimalizovat
z scipy. optimalizovat import diferenciální_evoluce

def obj_func ( oper ) :
vrátit se 3 ** 9 / 0,2 + 6 / 3 * 2 ** dvacet

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

ven = diferenciální_evoluce ( obj_func , hranice , polština = Skutečný )

vytisknout ( 'Výstup je:' , ven )

Knihovny jsou úspěšně importovány do tohoto programu, protože bez nich nemůžeme provádět požadované operace. Výsledkem je, že do programu zahrneme knihovnu SciPy. Poté definujte účelovou funkci s požadovanou operací. Najdeme minimální hodnotu této definované funkce. Po úpravě hranice funkce jsme zavolali definovanou funkci v diferenciálním vývoji, abychom našli minimální hodnotu funkce. To se pak uchovává v proměnné. To zobrazíme voláním této proměnné v příkazu print. Výstup tohoto programu je uveden níže:

Stejně jako na předchozím snímku obrazovky je minimální hodnota funkce [0,29236931, 0,16808904]. Tyto příklady můžete také spustit ve svém prostředí, abyste lépe porozuměli konceptu funkce Different_evolution.

Závěr

Pojďme si tento článek rychle shrnout. Pochopili jsme základní funkcionalitu metody diferenciální evoluce, která patří do knihovny SciPy v Pythonu. Python je nejnovější jazyk s mnoha flexibilními knihovnami. Většině vývojářů pomáhaly při řešení složitých struktur kódu předdefinované funkce a knihovny. Diferenciální evoluce je funkce optimalizace balíčku SciPy nebo metoda používaná pro minimalizaci. Když použijete tyto předchozí příklady v kódu, jasněji pochopíte koncept diferenciální evoluce.