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

Differencial Naa Evolucia Scipy



Эта статья о дифференциальной эволюции SciPy (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); bounds относится к последовательности переменных, которые могут быть указаны двумя способами: стратегия является необязательной или строкой со значением по умолчанию «best1bin»; maxiter является необязательным или имеет значение типа int; popsize является целым или необязательным; tol является целым или необязательным; значение мутации находится в формате с плавающей запятой или необязательно; значение рекомбинации находится в плавающем или необязательном формате; семя нет, int, NumPy и Random.

В следующем разделе мы обсудим дифференциальную эволюционную функцию с помощью простых примеров.



Пример 1

Давайте начнем с простого примера, который разовьет ваш интерес к пониманию концепции дифференциальной эволюционной функции. Мы использовали функцию Differential_evolution(), чтобы найти минимальное значение. Но чтобы найти минимальное значение, функции требовались границы поиска и определенная вызываемая целевая функция. В результате мы определяем функцию перед использованием в программе функции Differential_Evolution. Справочный код программы указан ниже:

импорт пустышка как например
от острый импорт оптимизировать
от крутой оптимизировать импорт дифференциальная_эволюция
импорт матплотлиб. pyplot как пи
от matplotlib импорт см

деф функция ( п ) :

с , Икс знак равно п

час знак равно например кв ( с ** 4 + х ** 4 )

возвращаться например кв ( час )


DE_bounds знак равно [ [ - 6 , 6 ] , [ - 6 , 6 ] ]

разрешение знак равно дифференциальная_эволюция ( функция , DE_bounds )

Распечатать ( разрешение )

Мы импортировали библиотеки, такие как SciPy и NumPy, для числовых расчетов массивов. Мы импортировали функцию Differential_Evolution из модуля scipy.optimize. Затем с помощью ключевого слова «def» мы определяем вызываемую целевую функцию и передаем параметр «p». Мы успешно определяем функцию, которая находит квадратный корень из сложения переменных NumPy, то есть z, x. Значение квадратного корня хранится в переменной «h». Мы возвращаем значение квадратного корня в определенной функции. Он возвращается в качестве аргумента.

После этого мы устанавливаем границы переменной, которую можно детализировать, объясняя минимальное и максимальное значения функции. Мы выполняем функцию Differential_evolution с аргументом «DE_bounds». Мы вызвали значение функции с помощью переменной с именем res. В конце мы используем оператор печати для отображения вывода. Результат отображался после запуска программы. Ожидаемый скриншот вывода показан ниже:

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

Пример 2

Это еще один пример функции дифференциальной эволюции. При этом мы берем массивы и применяем к ним различные операции. Справочный код программы указан ниже:

импорт пустышка как например
от острый импорт оптимизировать
от крутой оптимизировать импорт дифференциальная_эволюция

деф target_func ( д ) :
возвращаться ( д [ 1 ] - 1,2 ) / 2 + 0,5 * д [ 0 ] * 1,3 * ( д [ 1 ] + 0,5 ) ** 3

_bounds знак равно [ ( - 0,3 , 0,3 ) , ( - 0,3 , 0,3 ) ]

дисп знак равно дифференциальная_эволюция ( target_func , _bounds , попсайз знак равно 80 , полировать знак равно ЛОЖЬ )

Распечатать ( дисп )

Как показано на предыдущем снимке экрана, мы успешно импортировали в программу библиотеку SciPy.optimize. Differential_evolution и библиотеку NumPy. Теперь определим целевую функцию, от имени которой найдем минимальное значение. Мы передали математическое выражение в целевую функцию и вернули значение в качестве аргумента определенной функции. Граница между значениями функции является обязательной. Итак, после определения функции мы зафиксировали оба значения (максимальное и минимальное).

Определив все необходимые переменные, мы вызвали функцию Differential_Evolution, чтобы найти минимальное значение функции. Мы сохранили минимальное возвращаемое значение функции в переменной с именем disp. В конце программы мы передаем переменную disp в оператор печати для отображения результата. После запуска программы минимальное значение заданной функции отображается на экране с границами. Вывод следующий:

Пример 3

Как мы видим, дифференциальная эволюция возвращает разные минимальные значения целевой функции в зависимости от ее определения. Здесь мы возьмем еще один пример, связанный с дифференциальной_эволюцией(). Справочный код для этой программы показан ниже:

импорт пустышка как например
от острый импорт оптимизировать
от крутой оптимизировать импорт дифференциальная_эволюция

деф 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 или метод, используемый для минимизации. Когда вы используете эти предыдущие примеры в коде, вы более четко понимаете концепцию дифференциальной эволюции.