Ewolucja różnicowa SciPy

Ewolucja Roznicowa Scipy



Ten artykuł dotyczy SciPy Differential Evolution (DE). SciPy to biblioteka języka Python, a Differential Evolution to metoda lub funkcja biblioteki SciPy. Większość ludzi uczy się Pythona, niezależnie od tego, czy są programistami, czy nie, ponieważ liczne biblioteki i funkcje Pythona sprawiają, że jest on bardzo bezpieczny i niezawodny. SciPy jest często używany do rozwiązywania równań różniczkowych i algebraicznych, interpolacji, optymalizacji itp. Tutaj omawiamy użycie SciPy DE, aby pomóc Ci zrozumieć, jak zaimplementować funkcję ewolucji różniczkowej SciPy w aplikacjach Pythona.

Czym jest ewolucja różnicowa SciPy w języku Python?

Scipy to powierzchowna, bezpłatna i zrozumiała biblioteka służąca do rozwiązywania problemów naukowych i matematycznych. SciPy jest skarbnicą dla programistów, ponieważ jego biblioteka jest pełna cennych modułów. SciPy rozszerza funkcjonalność NumPy o cenny klaster algorytmów. Biblioteka SciPy zawiera podpakiety, których można używać do obliczeń, takie jak scipy.io, scipy.optimize itp. SciPy tworzy funkcję „ewolucyjnej ewolucji” i wiele zaawansowanych funkcji w pakiecie scipy.optimize. Scipy.optimize służy do optymalizacji w aplikacjach Pythona.

The Differential Evolution Function to funkcja globalna uzyskana przez pakiet optymalizacji SciPy, która służy do znajdowania globalnego minimum funkcji wielowymiarowych. Może zarządzać wielowymiarowymi funkcjami celu, które są nieliniowe i nieróżniczkowalne. Jest to algorytm wyszukiwania służący do wyszukiwania obszarów ciągłych funkcji przestrzennych. Ta funkcja działa na wartościach rzeczywistych.







Składnia różniczkowej funkcji ewolucji

Funkcja różnicowej ewolucji jest obecna w Pythonie przy użyciu funkcji differential_evolution (). Składnia różniczkowej funkcji ewolucji jest pokazana poniżej:





Przyjrzyjmy się parametrom funkcji:





Funkcja musi być wywoływalna za pomocą f(x,*args); granice odnoszą się do sekwencji zmiennych, które można określić na dwa sposoby: strategia jest opcjonalna lub ciąg z wartością domyślną „best1bin”; maxiter jest opcjonalny lub jest wartością int; popsize jest int lub opcjonalne; tol jest int lub opcjonalne; wartość mutacji jest zmiennoprzecinkowa lub opcjonalna; wartość rekombinacji jest zmiennoprzecinkowa lub opcjonalna; ziarno to none, int, NumPy i Random.

W następnej sekcji omówimy różniczkową funkcję ewolucji za pomocą prostych przykładów.



Przykład 1

Zacznijmy od prostego przykładu, który rozwinie twoje zainteresowanie zrozumieniem koncepcji różniczkowej funkcji ewolucyjnej. Użyliśmy funkcji differential_evolution(), aby znaleźć wartość minimalną. Jednak aby znaleźć minimalną wartość, funkcja wymagała granic wyszukiwania i zdefiniowanej funkcji celu, którą można wywoływać. W rezultacie definiujemy funkcję przed użyciem funkcji differential_evolution w programie. Kod referencyjny programu jest wymieniony poniżej:

import liczba Jak np
z ostry import optymalizować
z ostry. optymalizować import różnicowa_ewolucja
import matplotlib. pyplot Jak py
z matplotlib import cm

pok funkcja ( p ) :

   z , x = p

h = np. kwadrat ( z ** 4 + x ** 4 )

powrót np. kwadrat ( h )


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

rez = różnicowa_ewolucja ( funkcja , DE_granice )

wydrukować ( rez )

Zaimportowaliśmy biblioteki takie jak SciPy i NumPy do obliczeń numerycznych tablic. Zaimportowaliśmy funkcję differential_evolution z modułu scipy.optimize. Następnie za pomocą słowa kluczowego „def” definiujemy wywoływalną funkcję celu i przekazujemy parametr „p”. Udało nam się zdefiniować funkcję, która znajduje pierwiastek kwadratowy z dodawania zmiennych NumPy, czyli z, x. Wartość pierwiastka kwadratowego jest przechowywana w zmiennej „h”. Zwracamy wartość pierwiastka kwadratowego w zdefiniowanej funkcji. Jest zwracany jako argument.

Następnie ustalamy granice zmiennej, którą można wyszczególnić, wyjaśniając minimalne i maksymalne wartości funkcji. Wykonujemy funkcję differential_evolution z argumentem „DE_bounds”. Wywołaliśmy wartość funkcji ze zmienną o nazwie res. Na koniec używamy instrukcji print, aby pokazać wynik. Wynik został wyświetlony po uruchomieniu programu. Oczekiwany zrzut ekranu wyjściowego pokazano poniżej:

Funkcja Differential_evolution() pokazuje, że minimalna wartość funkcji jest wyświetlana w punkcie (0, 0).

Przykład 2

To kolejny przykład różniczkowej funkcji ewolucji. W tym przypadku bierzemy tablice i stosujemy między nimi różne operacje. Kod referencyjny programu jest wymieniony poniżej:

import liczba jak np
z ostry import optymalizować
z ostry. optymalizować import różnicowa_ewolucja

pok funkcja_celu ( d ) :
powrót ( d [ 1 ] - 1.2 ) / 2 + 0,5 * d [ 0 ] * 1.3 * ( d [ 1 ] + 0,5 ) ** 3

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

disp = różnicowa_ewolucja ( funkcja_celu , _miedza , poprozmiar = 80 , Polskie = Fałszywe )

wydrukować ( disp )

Jak pokazano na poprzednim zrzucie ekranu, pomyślnie zaimportowaliśmy do programu bibliotekę SciPy.optimize.differential_evolution oraz bibliotekę NumPy. Teraz definiujemy funkcję celu, w imieniu której znajdujemy wartość minimalną. Przekazaliśmy wyrażenie matematyczne w funkcji celu i zwróciliśmy wartość jako argument do zdefiniowanej funkcji. Granica między wartościami funkcji jest koniecznością. Tak więc po zdefiniowaniu funkcji ustaliliśmy obie wartości (maksimum i minimum).

Po zdefiniowaniu wszystkich istotnych zmiennych wywołaliśmy funkcję differential_evolution, aby znaleźć minimalną wartość funkcji. Minimalną wartość zwracaną przez funkcję zapisaliśmy w zmiennej o nazwie disp. Na końcu programu przekazujemy zmienną disp w instrukcji print, aby wyświetlić wynik. Po uruchomieniu programu na ekranie wraz z granicami wyświetlana jest minimalna wartość zdefiniowanej funkcji. Poniżej przedstawiono dane wyjściowe:

Przykład 3

Jak widać, ewolucja różniczkowa zwraca różne wartości minimalne funkcji celu na podstawie jej definicji. Tutaj bierzemy inny przykład związany z ewolucją różnicową (). Kod referencyjny tego programu pokazano poniżej:

import liczba Jak np
od ostry import optymalizować
od ostry. optymalizować import różnicowa_ewolucja

pok obj_funkcja ( opera ) :
powrót 3 ** 9 / 0,2 + 6 / 3 * 2 ** dwadzieścia

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

na zewnątrz = różnicowa_ewolucja ( obj_funkcja , granica , Polskie = Prawdziwe )

wydrukować ( „Wyjście to:” , na zewnątrz )

Biblioteki zostały pomyślnie zaimportowane do tego programu, ponieważ bez nich nie możemy wykonać pożądanych operacji. W rezultacie włączamy do programu bibliotekę SciPy. Następnie zdefiniuj funkcję celu z wymaganą operacją. Znajdujemy minimalną wartość tej zdefiniowanej funkcji. Po dostosowaniu granicy funkcji wywołaliśmy zdefiniowaną funkcję w ewolucji różniczkowej, aby znaleźć minimalną wartość funkcji. Jest to następnie przechowywane w zmiennej. Wyświetlamy to, wywołując tę ​​​​zmienną w instrukcji print. Wyjście tego programu pokazano poniżej:

Tak jak na poprzednim zrzucie ekranu, minimalna wartość funkcji to [0.29236931, 0.16808904]. Możesz także uruchomić te przykłady w swoim środowisku, aby lepiej zrozumieć koncepcję funkcji differential_evolution.

Wniosek

Zróbmy krótkie podsumowanie tego artykułu. Poznaliśmy podstawową funkcjonalność metody różnicowej ewolucji, która należy do biblioteki SciPy w Pythonie. Python jest najnowszym językiem z wieloma elastycznymi bibliotekami. Większości programistów pomagano w rozwiązywaniu złożonych struktur kodu za pomocą predefiniowanych funkcji i bibliotek. Ewolucja różnicowa to funkcja optymalizacji pakietu SciPy lub metoda używana do minimalizacji. Używając tych poprzednich przykładów w kodzie, lepiej rozumiesz koncepcję różnicowej ewolucji.