Evolução Diferencial SciPy

Evolucao Diferencial Scipy



Este artigo é sobre Evolução Diferencial SciPy (DE). SciPy é a biblioteca da linguagem Python, e Differential Evolution é o método ou função da biblioteca SciPy. A maioria das pessoas tem aprendido Python, sejam desenvolvedores ou não, já que as inúmeras bibliotecas e funções do Python o tornam muito seguro e confiável. O SciPy é freqüentemente usado para resolver equações diferenciais e algébricas, interpolação, otimização, etc. Aqui, estamos discutindo o uso do SciPy DE para ajudá-lo a entender como implementar a função de evolução diferencial do SciPy em aplicativos Python.

O que é evolução diferencial SciPy na linguagem Python?

Scipy é uma biblioteca superficial, gratuita e compreensível usada para resolver questões científicas e matemáticas. SciPy é uma caixa de tesouro para desenvolvedores porque sua biblioteca está cheia de módulos preciosos. O SciPy expande a funcionalidade do NumPy com um conjunto valioso de algoritmos. A biblioteca SciPy tem subpacotes que podem ser usados ​​para cálculos, como scipy.io, scipy.optimize, etc. SciPy produz uma função de “evolução diferencial” e muitas funções poderosas no pacote scipy.optimize. O scipy.optimize é usado para otimização em aplicativos Python.

A Função de Evolução Diferencial é uma função global adquirida pelo pacote de otimização SciPy que é usada para encontrar o mínimo global de funções multivariadas. Ele pode gerenciar funções objetivas multidimensionais que são não lineares e não diferenciáveis. É um algoritmo de busca usado para pesquisar áreas de funções de espaço contínuo. Esta função funciona em valores reais.







Sintaxe da Função de Evolução Diferencial

A função de evolução diferencial está presente em Python utilizando a função diferencial_evolution(). A sintaxe da função de evolução diferencial é mostrada abaixo:





Vamos ver os parâmetros da função:





A função deve ser chamada com f(x,*args); limites refere-se à sequência de variáveis ​​que podem ser especificadas de duas maneiras: a estratégia é opcional ou uma string com o valor padrão “best1bin”; maxiter é opcional ou um valor int; popsize é int ou opcional; tol é int ou opcional; o valor da mutação é flutuante ou opcional; valor de recombinação está em float ou opcional; a semente é nenhuma, int, NumPy e Random.

Na próxima seção, discutiremos uma função de evolução diferencial com a ajuda de exemplos fáceis.



Exemplo 1

Vamos começar com um exemplo direto que desenvolverá seu interesse em entender o conceito de função de evolução diferencial. Usamos a função diferencial_evolution() para encontrar o valor mínimo. Mas, para encontrar o valor mínimo, a função exigia limites de pesquisa e uma função objetivo chamável definida. Como resultado, definimos uma função antes de usar a função de evolução_diferencial no programa. O código de referência do programa é mencionado abaixo:

importar entorpecido Como por exemplo.
a partir de scipy importar otimizar
a partir de scipy. otimizar importar evolução_diferencial
importar matplotlib. pyplot Como py
a partir de matplotlib importar cm

def função ( p ) :

com , x = p

h = por exemplo. quadrado ( com ** 4 + x ** 4 )

Retorna por exemplo. quadrado ( h )


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

res = evolução_diferencial ( função , DE_bounds )

impressão ( res )

Importamos bibliotecas como SciPy e NumPy para cálculos numéricos de array. Importamos a função diferencial_evolution do módulo scipy.optimize. Então, com a palavra-chave “def”, definimos a função objetivo chamável e passamos o parâmetro “p”. Definimos com sucesso a função que encontra a raiz quadrada da adição das variáveis ​​NumPy, que é z, x. O valor da raiz quadrada é armazenado na variável “h”. Retornamos o valor da raiz quadrada na função definida. É retornado como um argumento.

Depois disso, estabelecemos os limites da variável que podem ser discriminados explicando os valores mínimo e máximo da função. Executamos a função de evolução_diferencial com ‘DE_bounds”’ como argumento. Chamamos o valor da função com uma variável chamada res. No final, usamos a instrução print para mostrar a saída. O resultado foi exibido após a execução do programa. A captura de tela de saída esperada é mostrada abaixo:

Differential_evolution() mostra que o valor mínimo da função é exibido no ponto (0, 0).

Exemplo 2

Este é outro exemplo da função de evolução diferencial. Neste, pegamos arrays e aplicamos diferentes operações entre eles. O código de referência do programa é mencionado abaixo:

importar entorpecido Como por exemplo.
a partir de scipy importar otimizar
a partir de scipy. otimizar importar evolução_diferencial

def função_objetiva ( d ) :
Retorna ( d [ 1 ] - 1.2 ) / 2 + 0,5 *d [ 0 ] * 1.3 * ( d [ 1 ] + 0,5 ) ** 3

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

disp = evolução_diferencial ( função_objetiva , _bounds , popsize = 80 , polonês = Falso )

impressão ( disp )

Conforme mostrado na captura de tela anterior, importamos com sucesso a biblioteca SciPy.optimize.differential_evolution e a biblioteca NumPy para o programa. Agora, definimos uma função objetivo em nome da qual encontramos um valor mínimo. Passamos a expressão matemática na função objetivo e retornamos um valor como argumento para a função definida. O limite entre os valores da função é obrigatório. Assim, após definir a função, fixamos ambos os valores (máximo e mínimo).

Depois de definir todas as variáveis ​​essenciais, chamamos a função de evolução_diferencial para encontrar o valor mínimo de uma função. Salvamos o valor mínimo de retorno da função em uma variável chamada disp. No final do programa, passamos a variável disp na instrução print para exibir o resultado. Após executar o programa, o valor mínimo da função definida é exibido na tela com limites. A seguir está a saída:

Exemplo 3

Como podemos ver, a evolução diferencial retorna diferentes valores mínimos de uma função objetivo com base em sua definição. Aqui, tomamos outro exemplo relacionado a diferencial_evolução(). O código de referência para este programa é mostrado abaixo:

importar entorpecido Como por exemplo.
a partir de scipy importar otimizar
a partir de scipy. otimizar importar evolução_diferencial

def obj_func ( operador ) :
Retorna 3 ** 9 / 0,2 + 6 / 3 * 2 ** vinte

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

Fora = evolução_diferencial ( obj_func , fronteira , polonês = Verdadeiro )

impressão ( 'Saída é: ' , Fora )

As bibliotecas são importadas com sucesso para este programa porque não podemos realizar as operações que desejamos sem elas. Como resultado, incluímos a biblioteca SciPy no programa. Depois disso, defina a função objetivo com a operação necessária. Encontramos o valor mínimo dessa função definida. Depois de ajustar o limite da função, chamamos a função definida em evolução diferencial para encontrar o valor mínimo da função. Isso é então mantido na variável. Exibimos isso chamando essa variável na instrução de impressão. A saída deste programa é mostrada abaixo:

Como na captura de tela anterior, o valor mínimo da função é [0,29236931, 0,16808904]. Você também pode executar esses exemplos em seu ambiente para entender melhor o conceito de função diferencial_evolução.

Conclusão

Vamos fazer uma rápida recapitulação deste artigo. Apreendemos a funcionalidade básica do método de evolução diferencial que pertence à biblioteca SciPy em Python. Python é a linguagem mais recente, com inúmeras bibliotecas flexíveis. A maioria dos desenvolvedores foi auxiliada na resolução de estruturas de código complexas por funções e bibliotecas predefinidas. A evolução diferencial é uma função ou método de otimização do pacote SciPy usado para minimização. Quando você usa esses exemplos anteriores no código, você entende mais claramente o conceito de evolução diferencial.