Диференциална еволюция на SciPy

Diferencialna Evolucia Na Scipy



Тази статия е за SciPy Differential Evolution (DE). SciPy е библиотеката на езика Python, а Differential Evolution е методът или функцията на библиотеката SciPy. Повечето хора учат Python, независимо дали са разработчици или не, тъй като многобройните библиотеки и функции на Python го правят много сигурен и надежден. SciPy често се използва за решаване на диференциални и алгебрични уравнения, интерполация, оптимизация и т.н. Тук обсъждаме използването на SciPy DE, за да ви помогнем да разберете как да внедрите функцията за диференциална еволюция на SciPy в приложения на Python.

Какво представлява диференциалната еволюция на SciPy в езика Python?

Scipy е повърхностна, безплатна и разбираема библиотека, използвана за разрешаване на научни и математически проблеми. SciPy е съкровище за разработчиците, защото библиотеката му е пълна с ценни модули. SciPy разширява функционалността на NumPy с ценен клъстер от алгоритми. Библиотеката SciPy има под-пакети, които могат да се използват за изчисления, като scipy.io, scipy.optimize и т.н. SciPy произвежда функция за „диференциална еволюция“ и много мощни функции в пакета scipy.optimize. Scipy.optimize се използва за оптимизиране в приложения на Python.

Функцията за диференциална еволюция е глобална функция, придобита от пакета за оптимизиране на SciPy, която се използва за намиране на глобалния минимум от многовариантни функции. Той може да управлява многомерни целеви функции, които са нелинейни и недиференцируеми. Това е алгоритъм за търсене, използван за търсене на области на непрекъснати пространствени функции. Тази функция работи върху реални стойности.







Синтаксис на диференциална еволюционна функция

Функцията за диференциална еволюция присъства в Python, използвайки функцията differential_evolution (). Синтаксисът на функцията за диференциална еволюция е показан по-долу:





Нека да разгледаме параметрите на функцията:





Функцията трябва да може да се извиква с f(x,*args); границите се отнасят до последователността от променливи, които могат да бъдат определени по два начина: стратегията е незадължителна или низ със стойността по подразбиране „best1bin“; maxiter е незадължителен или int стойност; popsize е int или незадължителен; tol е int или незадължителен; стойността на мутацията е в float или незадължителна; стойността на рекомбинацията е в float или незадължителна; семето е none, int, NumPy и Random.

В следващия раздел ще обсъдим диференциална еволюционна функция с помощта на лесни примери.



Пример 1

Нека започнем с директен пример, който ще развие интереса ви към разбирането на концепцията за диференциална еволюционна функция. Използвахме функцията differential_evolution(), за да намерим минималната стойност. Но за да намери минималната стойност, функцията изисква граници за търсене и дефинирана целева функция за извикване. В резултат на това ние дефинираме функция, преди да използваме функцията differential_evolution в програмата. Референтният код на програмата е споменат по-долу:

импортиране numpy като напр.
от scipy импортиране оптимизиране
от scipy. оптимизиране импортиране диференциална_еволюция
импортиране matplotlib. pyplot като py
от matplotlib импортиране см

деф функ ( стр ) :

с , х = стр

ч = напр. sqrt ( с ** 4 + x ** 4 )

връщане напр. sqrt ( ч )


DE_граници = [ [ - 6 , 6 ] , [ - 6 , 6 ] ]

рез = диференциална_еволюция ( функ , DE_граници )

печат ( рез )

Импортирахме библиотеки като SciPy и NumPy за числени изчисления на масиви. Импортирахме функцията differential_evolution от модула scipy.optimize. След това с ключовата дума „def“ дефинираме целевата функция, която може да бъде извикана, и предаваме параметъра „p“. Успешно дефинираме функцията, която намира корен квадратен от добавянето на променливи NumPy, което е z, x. Стойността на квадратния корен се съхранява в променливата „h“. Връщаме стойността на корен квадратен в дефинираната функция. Връща се като аргумент.

След това определяме границите на променливата, която може да бъде детайлизирана чрез обяснение на минималните и максималните стойности на функцията. Изпълняваме функцията differential_evolution с 'DE_bounds' като аргумент. Нарекохме стойността на функцията с променлива с име res. В крайна сметка използваме оператора за печат, за да покажем изхода. Резултатът се показва след стартиране на програмата. Очакваната изходна екранна снимка е показана по-долу:

Differential_evolution() показва, че минималната стойност на функцията се показва в точка (0, 0).

Пример 2

Това е друг пример за диференциалната еволюционна функция. При това вземаме масиви и прилагаме различни операции между тях. Референтният код на програмата е споменат по-долу:

импортиране numpy като напр.
от scipy импортиране оптимизиране
от scipy. оптимизиране импортиране диференциална_еволюция

деф цел_функция ( д ) :
връщане ( д [ 1 ] - 1.2 ) / 2 + 0,5 * д [ 0 ] * 1.3 * ( д [ 1 ] + 0,5 ) ** 3

_граници = [ ( - 0,3 , 0,3 ) , ( - 0,3 , 0,3 ) ]

разп = диференциална_еволюция ( цел_функция , _граници , popsize = 80 , полиране = Невярно )

печат ( разп )

Както е показано на предишната екранна снимка, ние успешно импортирахме библиотеката SciPy.optimize.differential_evolution и библиотеката NumPy в програмата. Сега дефинираме целева функция, от името на която намираме минимална стойност. Предадохме математическия израз в целевата функция и върнахме стойност като аргумент на дефинираната функция. Границата между стойностите на функцията е задължителна. И така, след като дефинирахме функцията, фиксирахме и двете стойности (максимална и минимална).

След като дефинирахме всички основни променливи, извикахме функцията differential_evolution, за да намерим минималната стойност на функция. Записахме минималната върната стойност на функцията в променлива, наречена disp. В края на програмата предаваме променливата disp в оператора за печат, за да покажем резултата. След стартиране на програмата, минималната стойност на дефинираната функция се показва на екрана с граници. Следното е резултатът:

Пример 3

Както виждаме, диференциалната еволюция връща различни минимални стойности на целева функция въз основа на нейната дефиниция. Тук ще вземем друг пример, свързан с differential_evolution(). Референтният код за тази програма е показан по-долу:

импортиране numpy като напр.
от scipy импортиране оптимизиране
от scipy. оптимизиране импортиране диференциална_еволюция

деф obj_func ( опер ) :
връщане 3 ** 9 / 0,2 + 6 / 3 * 2 ** двадесет

граница = [ ( - 0,5 , 0,5 ) , ( - 0,5 , 0,5 ) ]

навън = диференциална_еволюция ( obj_func , граница , полиране = Вярно )

печат ( „Изходът е:“ , навън )

Библиотеките са успешно импортирани в тази програма, защото не можем да извършваме операциите, които желаем без тях. В резултат на това ние включваме библиотеката SciPy в програмата. След това дефинирайте целевата функция с необходимата операция. Намираме минималната стойност на тази дефинирана функция. След като коригирахме границата на функцията, извикахме дефинираната функция в диференциална еволюция, за да намерим минималната стойност на функцията. След това това се запазва в променливата. Ние показваме това, като извикваме тази променлива в израза за печат. Резултатът от тази програма е показан по-долу:

Както в предишната екранна снимка, минималната стойност на функцията е [0.29236931, 0.16808904]. Можете също така да изпълните тези примери във вашата среда, за да разберете по-добре концепцията за функция differential_evolution.

Заключение

Нека направим кратко резюме на тази статия. Разбрахме основната функционалност на метода за диференциална еволюция, който принадлежи към библиотеката SciPy в Python. Python е най-новият език с множество гъвкави библиотеки. Повечето разработчици бяха подпомогнати при решаването на сложни кодови структури от предварително дефинирани функции и библиотеки. Диференциалната еволюция е функция или метод за оптимизиране на пакет SciPy, използван за минимизиране. Когато използвате тези предишни примери в кода, разбирате по-ясно концепцията за диференциална еволюция.