Evolución 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 aprendido Python, ya sean desarrolladores o no, ya que las numerosas bibliotecas y características de Python lo hacen muy seguro y confiable. SciPy es ampliamente utilizado para resolver ecuaciones diferenciales y algebraicas, interpolación, optimización, etc. Aquí discutimos el uso de SciPy DE para ayudarlo a comprender cómo implementar la función de desarrollo de diferencias de SciPy en aplicaciones de Python.
Contenidos
¿Qué es SciPy Differential Evolution en el lenguaje Python?
Scipy es una biblioteca poco profunda, gratuita y fácil de entender para resolver problemas científicos y matemáticos. SciPy es un tesoro para los desarrolladores ya que su biblioteca está llena de módulos valiosos. 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 encontrar regiones de funciones espaciales continuas. Esta función trabaja con valores reales.
Sintaxis de la función de evolución diferencial
La función de evolución diferencial existe en Python y utiliza 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 un valor predeterminado de best1bin; maxiter es opcional o un valor int; popsize es int u opcional; tol es int u opcional; el valor de mutación es punto flotante u opcional; el valor de recombinación es punto flotante u opcional; la semilla es none, int, NumPy y Random. En la siguiente sección discutiremos una función de evolución diferencial usando ejemplos simples.
Ejemplo 1
Comencemos con un ejemplo simple que lo hará interesarse en comprender el concepto de la 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 necesitaba 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 proporciona a continuación: importar numpy como np desde scipy importar optimizar desde scipy.optimize importar diferencial_evolución importar matplotlib.pyplot como py desde matplotlib importar cmdef func(p): z,x=ph = np.sqrt(z ** 4 + x ** 4) devuelve np.sqrt(h)DE_bounds=[[-6,6],[-6,6]]res = differential_evolution(func, DE_bounds)print(res) Importamos bibliotecas como SciPy y NumPy para cálculos numéricos con matrices. Importamos la función different_evolution del módulo scipy.optimize. Luego definimos la función de destino invocable con la palabra clave «def» y pasamos el parámetro «p». Definimos con éxito la función que encuentra la raíz cuadrada de sumar la variable NumPy, es decir, 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 las variables que se pueden descomponer 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. Al hacerlo, tomamos matrices y aplicamos varias operaciones entre ellas. El código de referencia del programa se proporciona a continuación: import numpy as np from scipy import optimize from scipy.optimize import difference_evolutiondef object_func(d): return ( 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)]disp=differential_evolution(objective_func,_bounds,popsize=80,polish=False)print(disp) Como se muestra en la captura de pantalla anterior, hemos importado con éxito la biblioteca SciPy.optimize.differential_evolution y la biblioteca NumPy al programa. Ahora definimos una función objetivo para 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, establecemos 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. Almacenamos el valor mínimo de retorno 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 con límites se muestra en la pantalla. La siguiente es la salida:
Ejemplo 3
Como vemos, la evolución diferencial proporciona 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: import numpy as np from scipy import optimize from scipy.optimize import difference_evolutiondef obj_func(oper): return 3 ** 9 / 0.2 + 6 /3 *2 ** 20boundary=[(-0.5,0.5),(-0.5,0.5)]out=differential_evolution(obj_func,boundary,polish=True)print(‘Output is : ‘, out) Las bibliotecas se han importado con éxito a este programa porque no podemos realizar las operaciones solicitadas sin ellas. Por esta razón, 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 esta 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. Indicamos 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 es el valor mínimo de la función [0.29236931, 0.16808904]. También puede ejecutar estos ejemplos en su entorno para comprender mejor el concepto de la función de evolución diferencial.
Conclusión
Vamos a resumir este artículo brevemente. Entendimos 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 minificación. El uso de estos ejemplos anteriores en el código lo ayudará a comprender mejor el concepto de evolución diferencial.