Modelado matemático: algoritmo de optimización inteligente y su implementación en Python

Introducción a los algoritmos de optimización inteligentes.

El problema de optimización se refiere a encontrar la solución óptima o el valor de parámetro entre muchas soluciones o valores de parámetros bajo ciertas condiciones, de modo que se puedan optimizar uno o más indicadores funcionales, o se puedan maximizar o minimizar algunos indicadores de rendimiento del sistema. Los problemas de optimización existen ampliamente en muchos campos, como el procesamiento de señales, el procesamiento de imágenes, la programación de la producción, la asignación de tareas, el reconocimiento de patrones, el control automático y el diseño mecánico. El método de optimización es una tecnología de aplicación basada en matemáticas para resolver diversos problemas de optimización. Se han utilizado ampliamente varios métodos de optimización en los campos mencionados anteriormente y han producido enormes beneficios económicos y sociales. La práctica ha demostrado que mediante métodos de optimización se puede mejorar la eficiencia del sistema, reducir el consumo de energía y utilizar racionalmente los recursos, y este efecto se hará más evidente a medida que aumente la escala de los objetos de procesamiento.
En muchas disciplinas como la electrónica, las comunicaciones, la informática, la automatización, la robótica, la economía y la gestión, siguen surgiendo muchos problemas complejos de optimización combinatoria. Frente a estos problemas de optimización a gran escala, los métodos de optimización tradicionales (como el método de Newton, el método simplex, etc.) necesitan atravesar todo el espacio de búsqueda, no pueden completar la búsqueda en poco tiempo y son propensos a la "explosión combinada" de buscar. Por ejemplo, muchos problemas de optimización de ingeniería a menudo requieren encontrar soluciones óptimas o soluciones cuasi óptimas en espacios de búsqueda enormes y complejos. En vista de la complejidad, la no linealidad, las restricciones y las dificultades de modelado de los problemas prácticos de ingeniería, la búsqueda de algoritmos de optimización eficientes se ha convertido en uno de los principales contenidos de investigación de disciplinas relacionadas.
Inspirándose en la inteligencia humana, la naturaleza social de los grupos biológicos o las leyes de los fenómenos naturales, las personas han inventado muchos algoritmos de optimización inteligentes para resolver los complejos problemas de optimización anteriores, que incluyen principalmente: algoritmos genéticos que imitan el mecanismo de evolución biológica de la naturaleza; a través de la cooperación y competencia entre individuos dentro de un grupo Algoritmo de evolución diferencial para optimizar la búsqueda; algoritmo inmunológico para simular el aprendizaje y las funciones cognitivas del sistema inmunológico biológico; algoritmo de colonia de hormigas para simular el comportamiento colectivo de búsqueda de caminos de las hormigas; algoritmo de enjambre de partículas para simular el comportamiento grupal de bandadas de pájaros y bancos de peces; derivado del recocido de material sólido El algoritmo de recocido simulado del proceso; el algoritmo de búsqueda tabú que simula el proceso de memoria intelectual humana; el algoritmo de red neuronal que simula las características de comportamiento de las redes neuronales animales; etc. Estos algoritmos tienen una cosa en común, es decir, se desarrollan simulando o revelando ciertos fenómenos y procesos naturales o el comportamiento inteligente de grupos biológicos, en el campo de la optimización se les llama algoritmos de optimización inteligentes, son simples, versátiles, y fácil de procesar en paralelo.
Implementación de Python basada en la biblioteca scikit-opt:

# 安装
pip install scikit-opt

Evolución diferencial (DE)

La evolución diferencial (DE) es una tecnología informática evolutiva emergente. Fue propuesto por Storn et al. en 1995. Su idea original era resolver el problema polinómico de Chebyshev, pero más tarde se descubrió que el algoritmo de evolución diferencial también es una tecnología eficaz para resolver problemas de optimización complejos.
El algoritmo de evolución diferencial es un algoritmo de optimización basado en la teoría de la inteligencia grupal, es una búsqueda de optimización inteligente generada a través de la cooperación y competencia entre los individuos dentro del grupo. Sin embargo, en comparación con los cálculos evolutivos, el algoritmo de evolución diferencial conserva la estrategia de búsqueda global basada en la población y utiliza codificación de números reales, operaciones de mutación simples basadas en diferencias y una estrategia de supervivencia competitiva "uno a uno" para reducir la complejidad. de cálculos evolutivos. Al mismo tiempo, la capacidad de memoria única del algoritmo de evolución diferencial le permite rastrear dinámicamente la situación de búsqueda actual para ajustar su estrategia de búsqueda. Tiene una fuerte capacidad de convergencia global y robustez, y no requiere el uso de información característica del problema. Es adecuado para resolver algunos problemas: Problemas de optimización complejos que son difíciles o incluso imposibles de resolver utilizando métodos de programación matemática convencionales.

Problemas de programación lineal/no lineal:

'''
min f(x1, x2, x3) = x1^2 + x2^2 + x3^2
s.t.
    x1*x2 >= 1
    x1*x2 <= 5
    x2 + x3 = 1
    0 <= x1, x2, x3 <= 5
'''

def obj_func(p):
    x1, x2, x3 = p
    return x1 ** 2 + x2 ** 2 + x3 ** 2

constraint_eq = [
    lambda x: 1 - x[1] - x[2]
]
constraint_ueq = [
    lambda x: 1 - x[0] * x[1],
    lambda x: x[0] * x[1] - 5
]

from sko.DE import DE

de = DE(func=obj_func, n_dim=3, size_pop=50, max_iter=800, lb=[0, 0, 0], ub=[5, 5, 5],
        constraint_eq=constraint_eq, constraint_ueq=constraint_ueq)

best_x, best_y = de.run()
print('best_x:', best_x, '\n', 'best_y:', best_y)

Algoritmo genético (GA)

El algoritmo genético (GA) es un algoritmo de búsqueda de optimización global adaptativo formado mediante la simulación de los procesos genéticos y evolutivos de organismos en el entorno natural. Fue propuesto por primera vez por el profesor JH Holland en los Estados Unidos y se originó a partir de la investigación sobre sistemas adaptativos naturales y artificiales en la década de 1960. En la década de 1970, KA De Jong realizó una gran cantidad de cálculos de optimización de funciones puramente numéricas en computadoras basándose en la idea Experimento de algoritmos genéticos: En la década de 1980, DJ Goldberg resumió el algoritmo genético basándose en una serie de trabajos de investigación.
El algoritmo genético es un método estocástico de búsqueda y optimización global desarrollado imitando el mecanismo de evolución biológica de la naturaleza. Se basa en la teoría de la evolución de Darwin y la teoría de la genética de Mendel y es esencialmente un método de búsqueda global paralelo, eficiente, que puede adquirir y acumular automáticamente conocimientos sobre el espacio de búsqueda durante el proceso de búsqueda y controlar de forma adaptativa el proceso de búsqueda. la solución óptima. Operación del algoritmo genético: utilizando el principio de "supervivencia del más apto", se genera sucesivamente una solución casi óptima entre una población de soluciones potenciales. En cada generación, la selección individual se realiza basándose en el valor de aptitud del individuo en el dominio del problema y el método de reconstrucción tomado de la genética natural para generar una nueva solución aproximada. Este proceso conduce a la evolución de los individuos de la población, y los nuevos individuos resultantes se adaptan mejor al medio ambiente que los individuos originales.

Problemas de programación lineal/no lineal:

import numpy as np
def schaffer(p):
    '''
    This function has plenty of local minimum, with strong shocks
    global minimum at (0,0) with value

Supongo que te gusta

Origin blog.csdn.net/weixin_43603658/article/details/133086883
Recomendado
Clasificación