Algoritmo genético (algoritmo genético)

1. Introducción

El algoritmo genético (algoritmo genético) sigue el principio de "supervivencia del más apto" y "supervivencia del más apto". Es una especie de algoritmo de búsqueda aleatoria que se basa en la selección natural y los mecanismos genéticos naturales del mundo biológico.

El algoritmo genético simula el proceso de evolución de una población artificial. A través de los mecanismos de Selección, Cruce y Mutación, se retiene un conjunto de individuos candidatos en cada iteración, y este proceso se repite. Después de que la población ha evolucionado a lo largo de varias generaciones En circunstancias ideales, su aptitud alcanza el estado *** aproximado óptimo *** .

Desde que se propuso el algoritmo genético, ha sido ampliamente utilizado, especialmente en los campos de optimización de funciones, programación de producción, reconocimiento de patrones, red neuronal, control adaptativo, etc., el algoritmo genético ha jugado un papel muy importante y ha mejorado la solución de algunos problemas. eficacia.


2. Composición del algoritmo genético

  • Código -> Crear cromosoma
  • Individual -> Población
  • Función fitness
  • Operador genético
    • Seleccione
    • cruzar
    • Mutaciones
  • Parámetros de operación
    • Ya sea para elegir la operación de élite
    • Tamaño de la poblacion
    • Longitud del cromosoma
    • El número máximo de iteraciones
    • Probabilidad de cruce
    • Probabilidad de mutación


2.1 Codificación y decodificación

El primer paso para implementar algoritmos genéticos es aclarar los métodos de codificación y decodificación para resolver el problema.

Para problemas de optimización de funciones, generalmente hay dos métodos de codificación, cada uno con ventajas y desventajas

  • Codificación de números reales: use directamente números reales para representar genes, que es fácil de entender y no requiere un proceso de decodificación, pero es fácil de converger prematuramente y caer en la optimalidad local.
  • Codificación binaria: alta estabilidad, gran diversidad de población, pero requiere un gran espacio de almacenamiento, necesita decodificarse y es difícil de entender


Para resolver el problema máximo de la función, elegí la codificación binaria.
Tome nuestra función objetivo f (x) = x + 10sin (5x) + 7cos (4x), x∈ [0,9] como ejemplo.

Si la precisión de la solución se establece en 4 dígitos después del punto decimal, el espacio de la solución de x se puede dividir en (9-0) × (1e + 4) = 90000 partes iguales.

2 ^ 16 <90000 <2 ^ 17, se requieren números binarios de 17 bits para representar estas soluciones. En otras palabras, un código de solución es una cadena binaria de 17 bits.

Al principio, estas cadenas binarias se generan aleatoriamente.

Una de esas cadenas binarias representa una cadena de cromosomas, donde la longitud de la cadena de cromosomas es 17.

Para cualquiera de estos cromosomas, ¿cómo restaurarlo (decodificarlo) a un valor en el intervalo [0,9]?

Para este problema, podemos usar la siguiente fórmula para decodificar:

x = 0 + decimal(chromosome)×(9-0)/(2^17-1)

decimal (): convierte un número binario en un número decimal.

Fórmula general de decodificación:

f(x), x∈[lower_bound, upper_bound]
x = lower_bound + decimal(chromosome)×(upper_bound-lower_bound)/(2^chromosome_size-1)

lower_bound: el límite inferior del dominio de función
upper_bound: el límite superior del dominio de función
chromosome_size: la longitud del cromosoma

Mediante la fórmula anterior, podemos decodificar con éxito la cadena de cromosomas binarios en una solución de número real decimal en el intervalo [0,9].

2.2 Los

"cromosomas" individuales y de población expresan una determinada característica, y el portador de esta característica se denomina "individuo".

Para que el problema de resolver el valor máximo de la función unaria a resolver en este experimento, el individuo puede ser representado por el cromosoma construido en la sección anterior, y hay un cromosoma en un individuo.

Muchos de estos individuos forman una población, lo que significa un conjunto de puntos unidimensionales (segmento de línea [0,9] en el eje x).

2.3 Función de aptitud En

los algoritmos genéticos, la calidad de un individuo (solución) se evalúa mediante el valor de la función de aptitud En este problema, f (x) es la función de aptitud.

Cuanto mayor sea el valor de la función de aptitud, mayor será la calidad de la solución.

La función de adecuación es el motor de la evolución de los algoritmos genéticos y el único criterio de selección natural, su diseño debe combinarse con los requisitos del propio problema.

2.4 Operadores genéticos

Esperamos tener tal población, los valores de la función correspondientes a los individuos que contiene están muy cerca del valor máximo de f (x) en [0,9], pero esta población puede no ser tan buena al principio. Porque las cadenas de cromosomas individuales se generan aleatoriamente.

¿Cómo hacer que la población sea excelente?

Evolución continua.

En cada evolución, tratamos de mantener a los individuos excelentes en la población tanto como sea posible, descartamos a los indeseables y realizamos un cruce cromosómico entre los individuos excelentes, y algunos individuos también pueden mutar.

Cada vez que una población evoluciona, se producirá un individuo óptimo. El individuo óptimo de todas las generaciones de la población puede ser el punto en el dominio correspondiente al valor máximo de la función f (x).

Si la población evoluciona sin cesar, siempre se puede encontrar la mejor solución. Pero, de hecho, tenemos un tiempo limitado y, por lo general, detenemos la evolución cuando obtenemos una solución que se ve bien.

Para una población determinada, ¿cómo darle la capacidad de evolucionar ?

  • Primera opción (selección)
    • La operación de selección consiste en seleccionar la mayoría de los pares de individuos superiores de la población de la generación anterior. Un par de individuos superiores se denomina par de padres, y los padres pueden transmitir sus genes a la siguiente generación hasta que el número de individuos de la próxima generación alcance Límite superior de población
    • Antes de la operación de selección, organice a los individuos de la población de acuerdo con su aptitud de pequeños a grandes
    • Usando el método de selección de la ruleta (por supuesto, hay muchos otros métodos de selección), la probabilidad de que cada individuo sea seleccionado es proporcional al valor de su función de aptitud.
    • El método de selección de la ruleta es aleatorio y es posible que se pierdan mejores individuos en el proceso de selección, por lo que el mecanismo de élite se puede utilizar para seleccionar directamente a los mejores individuos de la generación anterior.
  • CROSS seguido (Crossover)
    • Dos cromosomas diferentes que se van a cruzar (padres) intercambian parte de sus genes de una manera determinada de acuerdo con la tasa de cruce
    • Se utiliza el método de cruce de un solo punto, también se pueden usar otros métodos de cruce
  • Finalmente variación (mutación)
    • Los cromosomas se mutan de acuerdo con la probabilidad de mutación (mutate_rate)
    • Se utiliza el método de mutación de un solo punto, también se pueden utilizar otros métodos de mutación


En términos generales, la tasa cruzada (cross_rate) es relativamente grande y la tasa de mutación (mutate_rate) es extremadamente baja. Para problemas como resolver el valor máximo de una función, establezco la tasa de cruce (cross_rate) en 0.6 y la tasa de mutación (mutate_rate) en 0.01.

Porque el algoritmo genético cree que el cruce de dos cromosomas parentales excelentes tiene más probabilidades de producir una descendencia excelente, y la posibilidad de producir una descendencia excelente si se mutan es extremadamente baja, pero también existe la posibilidad de mutar una descendencia muy buena a la vez. Esto también está en consonancia con las características de la evolución biológica en la naturaleza.


3. Proceso de algoritmo genético
Escribí un programa de prueba en matlab.
Adjunte el código https://github.com/yanshengjia/artificial-intelligence/tree/master/genetic-algorithm-for-functional-maximum-problem

test results

  • El mejor individuo: 00011111011111011
  • Aptitud óptima: 24.8554
  • El individuo óptimo corresponde al valor de la variable independiente: 7.8569
  • El número de iteraciones necesarias para lograr el resultado óptimo: Después de muchos experimentos, se encuentra que el número de iteraciones para lograr la convergencia varía de 20 a más de 100


La relación entre el número de iteraciones y la aptitud media (eje horizontal: número de iteraciones, eje vertical: aptitud media)


Existen herramientas listas para usar que pueden utilizar directamente algoritmos genéticos, como Matlab.
Finalmente, presentaré cómo usar algoritmos genéticos en Matlab.

Use GA en MATLAB

1. Abra la herramienta Optimización, seleccione el algoritmo ga-genético en Solver, complete @target en la función Fitness

2. Cree un nuevo target.m en la carpeta de su proyecto y observe que la ruta actual de MATLAB es suya La ruta de la carpeta del proyecto

3. Escriba la función de aptitud en target.m, como

function [ y ] = target(x)
y = -x-10*sin(5*x)-7*cos(4*x);
end

* GA en MATLAB solo resuelve el valor mínimo (aproximado) de la función, por lo que la función objetivo debe invertirse primero .

4. Abra la herramienta Optimización, ingrese la cantidad de variables y el valor del dominio de la variable independiente (Límites), haga clic en Inicio y se ejecutará el algoritmo genético. Finalmente, puede ver el valor mínimo (aproximado) de la función en el cuadro de salida, el número de iteraciones hasta este grado (iteración actual) y el valor de la variable independiente final (punto final)

5. En la herramienta Optimization-ga, hay muchas opciones . A través de estas opciones, puede configurar las siguientes propiedades

  • Población (población)
  • Selección
  • Crossover (Crossover)
  • Mutación
  • Criterios de detención
  • Funciones gráficas

Supongo que te gusta

Origin blog.csdn.net/qq_41371349/article/details/105157871
Recomendado
Clasificación