Evolución diferencial de SciPy

Evolucion Diferencial De Scipy



Este artículo trata sobre SciPy Differential Evolution (DE). SciPy es la biblioteca del lenguaje Python, y Differential Evolution es el método o función de la biblioteca SciPy. La mayoría de las personas han estado aprendiendo Python, ya sean desarrolladores o no, ya que las numerosas bibliotecas y funciones de Python lo hacen muy seguro y confiable. SciPy se usa con frecuencia para resolver ecuaciones diferenciales y algebraicas, interpolación, optimización, etc. Aquí, analizamos el uso de SciPy DE para ayudarlo a comprender cómo implementar la función de evolución diferencial de SciPy en aplicaciones de Python.

¿Qué es la evolución diferencial de SciPy en el lenguaje Python?

Scipy es una biblioteca superficial, gratuita y comprensible que se utiliza para resolver problemas científicos y matemáticos. SciPy es un cofre del tesoro para los desarrolladores porque su biblioteca está llena de valiosos módulos. SciPy amplía la funcionalidad de NumPy con un valioso grupo de algoritmos. La biblioteca SciPy tiene subpaquetes que se pueden usar para cálculos, como scipy.io, scipy.optimize, etc. SciPy produce una función de 'evolución diferencial' y muchas funciones poderosas en el paquete scipy.optimize. El scipy.optimize se usa para la optimización en aplicaciones de Python.

La función de evolución diferencial es una función global adquirida por el paquete de optimización SciPy que se utiliza para encontrar el mínimo global de funciones multivariadas. Puede gestionar funciones objetivo multidimensionales que no son lineales ni diferenciables. Es un algoritmo de búsqueda utilizado para buscar áreas de funciones espaciales continuas. Esta función trabaja sobre valores reales.







Sintaxis de la función de evolución diferencial

La función de evolución diferencial está presente en Python utilizando la función different_evolution(). La sintaxis de la función de evolución diferencial se muestra a continuación:





Repasemos los parámetros de la función:





La función debe poder llamarse con f(x,*args); los límites se refieren a la secuencia de variables que se pueden especificar de dos maneras: la estrategia es opcional o una cadena con el valor predeterminado 'best1bin'; maxiter es opcional o un valor int; popsize es int u opcional; tol es int u opcional; el valor de mutación está en coma flotante u opcional; el valor de recombinación está en coma flotante u opcional; la semilla es none, int, NumPy y Random.

En la siguiente sección, discutiremos una función de evolución diferencial con la ayuda de ejemplos sencillos.



Ejemplo 1

Comencemos con un ejemplo sencillo que desarrollará su interés en comprender el concepto de función de evolución diferencial. Usamos la función different_evolution() para encontrar el valor mínimo. Pero, para encontrar el valor mínimo, la función requería límites de búsqueda y una función objetivo invocable definida. Como resultado, definimos una función antes de usar la función different_evolution en el programa. El código de referencia del programa se menciona a continuación:

importar entumecido como p.ej.
desde espía importar optimizar
desde espía optimizar importar diferencial_evolución
importar matplotlib. pyplot como py
desde matplotlib importar cm

definitivamente función ( pag ) :

con , X = pag

h = p.ej. sqrt ( con ** 4 +x** 4 )

    devolver p.ej. sqrt ( h )


DE_límites = [ [ - 6 , 6 ] , [ - 6 , 6 ] ]

resolución = diferencial_evolución ( función , DE_límites )

imprimir ( resolución )

Importamos bibliotecas como SciPy y NumPy para cálculos numéricos de matriz. Importamos la función different_evolution del módulo scipy.optimize. Luego, con la palabra clave 'def', definimos la función objetivo invocable y pasamos el parámetro 'p'. Definimos con éxito la función que encuentra la raíz cuadrada de la suma de las variables NumPy, que es z, x. El valor de la raíz cuadrada se almacena en la variable 'h'. Devolvemos el valor de la raíz cuadrada en la función definida. Se devuelve como un argumento.

Después de eso, establecemos los límites de la variable que se puede desglosar explicando los valores mínimo y máximo de la función. Ejecutamos la función different_evolution con ‘DE_bounds”’ como argumento. Llamamos a la función valor con una variable llamada res. Al final, usamos la declaración de impresión para mostrar la salida. El resultado se mostró después de ejecutar el programa. La captura de pantalla de salida esperada se muestra a continuación:

Differential_evolution() muestra que el valor mínimo de la función se muestra en el punto (0, 0).

Ejemplo 2

Este es otro ejemplo de la función de evolución diferencial. En esto, tomamos arreglos y aplicamos diferentes operaciones entre ellos. El código de referencia del programa se menciona a continuación:

importar entumecido como p.ej.
desde espía importar optimizar
desde espía optimizar importar diferencial_evolución

definitivamente función_objetivo ( d ) :
    devolver ( d [ 1 ] - 1.2 ) / 2 + 0.5 * d [ 0 ] * 1.3 * ( d [ 1 ] + 0.5 ) ** 3

_límites = [ ( - 0.3 , 0.3 ) , ( - 0.3 , 0.3 ) ]

disipar = diferencial_evolución ( función_objetivo , _límites , tamaño pop = 80 , polaco = Falso )

imprimir ( disipar )

Como se muestra en la captura de pantalla anterior, importamos con éxito la biblioteca SciPy.optimize.differential_evolution y la biblioteca NumPy al programa. Ahora, definimos una función objetivo en nombre de la cual encontramos un valor mínimo. Pasamos la expresión matemática en la función objetivo y devolvimos un valor como argumento a la función definida. El límite entre los valores de la función es imprescindible. Entonces, después de definir la función, fijamos ambos valores (máximo y mínimo).

Después de definir todas las variables esenciales, llamamos a la función different_evolution para encontrar el valor mínimo de una función. Guardamos el valor de retorno mínimo de la función en una variable llamada disp. Al final del programa, pasamos la variable disp en la declaración de impresión para mostrar el resultado. Después de ejecutar el programa, el valor mínimo de la función definida se muestra en la pantalla con límites. La siguiente es la salida:

Ejemplo 3

Como podemos ver, la evolución diferencial devuelve diferentes valores mínimos de una función objetivo en función de su definición. Aquí, tomamos otro ejemplo relacionado con different_evolution(). El código de referencia para este programa se muestra a continuación:

importar entumecido como p.ej.
desde espía importar optimizar
desde espía optimizar importar diferencial_evolución

definitivamente obj_func ( opera ) :
    devolver 3 ** 9 / 0.2 + 6 / 3 * 2 ** 20

Perímetro = [ ( - 0.5 , 0.5 ) , ( - 0.5 , 0.5 ) ]

fuera = diferencial_evolución ( obj_func , Perímetro , polaco = Verdadero )

imprimir ( 'La salida es: ' , fuera )

Las bibliotecas se importan con éxito a este programa porque no podemos realizar las operaciones que deseamos sin ellas. Como resultado, incluimos la biblioteca SciPy en el programa. Después de eso, defina la función objetivo con la operación requerida. Encontramos el valor mínimo de esa función definida. Después de ajustar el límite de la función, llamamos a la función definida en evolución diferencial para encontrar el valor mínimo de la función. Esto se mantiene en la variable. Mostramos esto llamando a esta variable en la declaración de impresión. La salida de este programa se muestra a continuación:

Como en la captura de pantalla anterior, el valor mínimo de la función es [0.29236931, 0.16808904]. También puede ejecutar estos ejemplos en su entorno para comprender mejor el concepto de función diferencial_evolución.

Conclusión

Hagamos un resumen rápido de este artículo. Captamos la funcionalidad básica del método de evolución diferencial que pertenece a la biblioteca SciPy en Python. Python es el lenguaje más reciente, con numerosas bibliotecas flexibles. La mayoría de los desarrolladores recibieron ayuda para resolver estructuras de código complejas mediante funciones y bibliotecas predefinidas. La evolución diferencial es una función o método de optimización del paquete SciPy que se utiliza para la minimización. Cuando utiliza estos ejemplos anteriores en el código, comprende más claramente el concepto de evolución diferencial.