[Solución de optimización] Optimización de la señal de tráfico urbano basada en el algoritmo genético mejorado de matalb (GA + IGA) [incluido el código fuente 213 de Matlab]

1. Introducción

1 La teoría básica del algoritmo genético La
genética cree que la herencia es un código genético de instrucción encapsulado en cada célula y contenido en el cromosoma en forma de genes.Cada gen tiene una posición especial y controla una propiedad especial. El individuo producido por cada gen tiene un cierto grado de adaptabilidad al medio. La hibridación y mutación de genes pueden producir descendencia que se adapte al medio ambiente A través de la selección natural de la supervivencia del más apto, se conserva la estructura genética con un alto valor de aptitud.
El algoritmo genético se basa en la teoría genética de la "supervivencia del más apto" y expresa la solución del problema de optimización como el proceso de "supervivencia del más apto" de los "cromosomas". A través de la evolución de generaciones de duplicación, cruce y mutación de el grupo "cromosoma", finalmente lo obtenemos. Es el individuo que es más adaptable al medio para obtener la solución óptima o satisfactoria al problema. Este es un algoritmo de optimización general altamente paralelo, aleatorio y adaptativo.
Una serie de ventajas del algoritmo genético lo han hecho cada vez más importante en los últimos años, y ha sido ampliamente utilizado para resolver problemas de optimización en muchos campos, incluida su exitosa aplicación en el campo del transporte.
2 Características del
algoritmo genético El algoritmo genético es un algoritmo de búsqueda probabilística de optimización global autoadaptativa formado mediante la simulación del proceso genético y evolutivo en un entorno natural biológico. Es una especie de algoritmo de búsqueda robusto que se puede utilizar en el cálculo de optimización de sistemas complejos y, en comparación con otros algoritmos de optimización, tiene muchas características.
Hay tres algoritmos de optimización tradicionales principales: algoritmos de enumeración, heurísticos y de búsqueda:
1. Método de
enumeración El método de enumeración enumera todas las soluciones factibles en el conjunto de soluciones factibles para encontrar la solución óptima exacta. Para funciones continuas, este método requiere primero la discretización, de modo que nunca se alcance la solución óptima debido al procesamiento discreto. Además, cuando el espacio de enumeración es relativamente grande, la eficiencia de la solución de este algoritmo es muy baja y consume mucho tiempo.
2. Algoritmo
heurístico El algoritmo heurístico busca una regla heurística que pueda producir una solución factible para encontrar una solución óptima o una solución óptima aproximada. La eficiencia del algoritmo heurístico es relativamente alta, pero para cada problema que necesita ser resuelto, se debe encontrar su regla heurística única Esta regla heurística generalmente no es universal y no es adecuada para otros problemas.
3. Algoritmo de búsqueda
El algoritmo de búsqueda realiza una operación de búsqueda en un subconjunto del conjunto de soluciones factibles para encontrar la solución óptima o la solución óptima aproximada del problema. Si bien el algoritmo de búsqueda no puede garantizar que se obtenga la solución óptima al problema, si se utilizan adecuadamente algunos conocimientos heurísticos, se puede lograr un buen equilibrio entre la calidad y la eficiencia de la solución aproximada.
3 El flujo de trabajo del algoritmo genético básico
Inserte la descripción de la imagen aquí
4 Función de aptitud
Inserte la descripción de la imagen aquí
5 Operador de
selección La selección, también conocida como replicación, es el proceso de seleccionar individuos con fuerte vitalidad en un grupo para generar un nuevo grupo. El algoritmo genético utiliza operadores de selección para realizar la supervivencia del más apto en los individuos del grupo y selecciona de acuerdo con la aptitud de cada individuo. Los individuos con mayor aptitud tienen más probabilidades de heredarse en la población de la próxima generación; viceversa. De esta manera, el valor de aptitud de los individuos del grupo se puede acercar continuamente a la solución óptima. La determinación del operador de selección afecta directamente a los resultados del cálculo del algoritmo genético.
A continuación, se muestran algunos operadores de selección típicos y de uso común:
1. Selección de ruleta
2. Selección de competición aleatoria
3. Selección de recorrido aleatorio
4. Ordenar selección
5. Selección de liga
6 Operadores de cruce
A continuación se presentan varios operadores de cruce adecuados para individuos con codificación binaria o individuos con codificación decimal.
l. Crossover de un
solo punto Crossover de un solo punto (Crossover de un punto), también conocido como cruce simple, y es el operador cruzado básico más común. Comienza con un punto de selección aleatorio en una cadena binaria. Por cada par de individuos que están emparejados entre sí, intercambian cromosomas parciales de los dos individuos en sus puntos de cruce de acuerdo con la probabilidad de cruce establecida, generando así dos nuevos individuos.
2. Cruce de
dos puntos y cruce de múltiples puntos El cruce de dos puntos se refiere al establecimiento de dos puntos de cruce en la cadena de código individual y luego al intercambio genético parcial. El proceso específico del cruce de dos puntos es:
(1) Dos puntos de cruce se establecen inmediatamente en las dos cadenas de códigos individuales que se emparejan entre sí.
(2) Intercambie parte de los cromosomas de dos individuos entre los dos puntos de intersección establecidos.
3. Cruce uniforme El cruce
uniforme significa que los genes en cada locus de dos individuos emparejados se intercambian con la misma probabilidad de cruzamiento para formar dos nuevos individuos. La operación específica se puede utilizar para determinar cómo cada gen del nuevo individuo es proporcionado por cada individuo padre mediante el establecimiento de una máscara.
4. Cruce aritmético El cruce
aritmético se refiere a la combinación lineal de dos individuos para producir dos nuevos individuos. Para poder realizar operaciones de combinación lineal, el objeto de operación de la intersección aritmética es generalmente el individuo representado por el código numérico de coma flotante.
7 Operador de mutación La
llamada operación de mutación en el algoritmo genético se refiere a reemplazar el valor genético de algún locus en la cadena de codificación del cromosoma individual con otros alelos del locus para formar un nuevo individuo. La mutación es uno de los principales métodos del algoritmo genético para generar nuevos individuos. La operación de mutación puede mantener la diversidad de la población durante la operación del algoritmo, evitar eficazmente la madurez prematura y mejorar la capacidad de búsqueda local del algoritmo genético.
El operador de mutación en el algoritmo genético también debe seleccionarse y diseñarse de acuerdo con diferentes requisitos.Los siguientes son varios operadores de mutación de uso común.
8 Mejora del algoritmo genético
Inserte la descripción de la imagen aquí

En segundo lugar, el código fuente

%% GA
%% 清空环境变量
clc,clear,close all
warning off
% feature jit off
%% 遗传算法参数初始化
maxgen = 50;                      % 进化代数,即迭代次数
sizepop = 100;                     % 种群规模
pcross = [0.7];                    % 交叉概率选择,01之间
pmutation = [0.1];                 % 变异概率选择,01之间
%染色体设置
lenchrom=ones(1,3);    % t1、t2、t3
bound=[38,59;26,37;33,44;];   % 数据范围
%---------------------------种群初始化------------------------------------
individuals=struct('fitness',zeros(1,sizepop), 'chrom',[]);  %将种群信息定义为一个结构体
avgfitness = [];                      %每一代种群的平均适应度
bestfitness = [];                     %每一代种群的最佳适应度
bestchrom = [];                       %适应度最好的染色体

%% 初始化种群
for i=1:sizepop
    % 随机产生一个种群
    individuals.chrom(i,:)=Code(lenchrom,bound); % 编码(binary和grey的编码结果为一个实数,float的编码结果为一个实数向量)
    x=individuals.chrom(i,:);
    % 计算适应度
    individuals.fitness(i)=fun(x);   % 染色体的适应度 
end

%% 找最好的染色体
[bestfitness bestindex] = min(individuals.fitness);
bestchrom = individuals.chrom(bestindex,:);    % 最好的染色体
% 记录每一代进化中最好的适应度和平均适应度
trace = [bestfitness]; 

%% 迭代求解最佳初始阀值和权值
% 进化开始
for i=1:maxgen
    disp(['迭代次数:  ',num2str(i)])
    % 选择
    individuals=Select(individuals,sizepop); 
    % 交叉
    individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound);
    % 变异
    individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,i,maxgen,bound);

    % 计算适应度
    for j=1:sizepop
        x=individuals.chrom(j,:);        % 解码
        individuals.fitness(j)=fun(x);   % 染色体的适应度 
    end
%% 改进的GA
%% 清空环境变量
% clc,
clear % ,close all % 清除变量空间
warning off      % 消除警告
% feature jit off  % 加速代码执行
%% 遗传算法参数初始化
maxgen = 50;                      % 进化代数,即迭代次数
sizepop = 100;                     % 种群规模
pcross = [0.7];                    % 交叉概率选择,01之间
pmutation = [0.01];                 % 变异概率选择,01之间
delta = 0.1;
% 城市交通信号系统参数
C = 140;
L = 10;
load('data.mat')  % 包含交通流量q以及饱和流量xij
q = q./3600;      % 转化为秒s
xij = xij./3600;  % 转化为秒s
%染色体设置
lenchrom=ones(1,3);    % t1、t2、t3
bound=[38,59;26,37;33,44;];   % 数据范围
%---------------------------种群初始化------------------------------------
individuals=struct('fitness',zeros(1,sizepop), 'chrom',[]);  %将种群信息定义为一个结构体
avgfitness = [];                      %每一代种群的平均适应度
bestfitness = [];                     %每一代种群的最佳适应度
bestchrom = [];                       %适应度最好的染色体

%% 初始化种群
for i=1:sizepop
    % 随机产生一个种群
    individuals.chrom(i,:)=Code(lenchrom,bound); % 编码(binary和grey的编码结果为一个实数,float的编码结果为一个实数向量)
    x=individuals.chrom(i,:);
    % 计算适应度
    individuals.fitness(i)=fun1(x);   % 染色体的适应度 
end

%% 找最好的染色体
[bestfitness bestindex] = min(individuals.fitness);
bestchrom = individuals.chrom(bestindex,:);    % 最好的染色体
% 记录每一代进化中最好的适应度和平均适应度
trace = [bestfitness]; 

%% 迭代求解最佳初始阀值和权值
% 进化开始
for i=1:maxgen
    disp(['迭代次数:  ',num2str(i)])
    % 选择
    individuals=Select1(individuals,sizepop); 
    % 交叉
    individuals.chrom=Cross1(pcross,lenchrom,individuals.chrom,sizepop,bound);
    % 变异
    individuals.chrom=Mutation1(pmutation,lenchrom,individuals.chrom,sizepop,i,maxgen,bound);

    % 计算适应度
    for j=1:sizepop
        x=individuals.chrom(j,:);        % 解码
        individuals.fitness(j)=fun1(x);   % 染色体的适应度 
    end
    fmax = max(individuals.fitness);     % 适应度最大值
    fmin = min(individuals.fitness);     % 适应度最小值
    favg = mean(individuals.fitness);  % 适应度平均值
    individuals.fitness = (individuals.fitness + abs(fmin))./(fmax+fmin+delta); %适应度标定
    
  
    [newbestfitness,newbestindex]=min(individuals.fitness);
    [worestfitness,worestindex]=max(individuals.fitness);
   
    if bestfitness>newbestfitness
        bestfitness=newbestfitness;
        bestchrom=individuals.chrom(newbestindex,:);
    end

Tres, resultados en ejecución

Inserte la descripción de la imagen aquí

Cuatro, comentarios

Agregue QQ1564658423 para completar el código o la escritura.
Revisión >>>>>>
[Optimización] basada en el algoritmo de lobo gris de optimización de enjambre de partículas de Matlab [incluido el código fuente 006 de Matlab]
[Solución de optimización] basado en el algoritmo de optimización de lobo gris multiobjetivo de Matlab MOGWO [incluido el código fuente de Matlab 007]
[Optimización Solución] Diseño óptimo de las estaciones de carga basado en el algoritmo de enjambre de partículas de Matlab [incluido el código fuente de Matlab 012]
[Solución de optimización] Problema de vendedor de múltiples viajes basado en el algoritmo genético de Matlab [incluido el código fuente de Matlab 016]
[Solución de optimización] Encuentre el más corto basado en Ruta del algoritmo genético matlab [Incluyendo el código fuente 023 de Matlab]
[Solución de optimización] Problema de empaque tridimensional basado en recocido simulado y genético de Matlab [Incluido el código fuente 031 de Matlab]
[Solución de optimización] Basado en el algoritmo genético matlab para resolver el problema de optimización del vehículo intervalo de salida [Incluyendo el código fuente 132 de Matlab]
[Solución óptima] fuente del algoritmo krill matlab que contiene [133]
[] solución de optimización de evolución diferencial que contiene la fuente Matlab [134]
[] solución de optimización basada en la optimización restringida método de función de penalización matlab que comprende la fuente Matlab [ 163]
[Solución de optimización basada en el algoritmo de lobo gris mejorado de matlab para resolver el modelo de pirólisis de petróleo pesado [incluido el código fuente 164 de Matlab]
[solución optimizada] basada en la ubicación de fallas en la red de distribución del algoritmo de colonia de hormigas de Matlab [incluido el código fuente 165 de Matlab]
[solución optimizada ] basado en el algoritmo genético matalb Resolver el problema de optimización del suministro de material de la isla [Incluido el código fuente 172 de Matlab]
[Solución de optimización] Algoritmo de optimización inmune de manada de coronavirus (CHIO) [Incluido el código fuente 186 de Matlab]
[Solución de optimización] Algoritmo de solución de optimización Golden Eagle (GEO ) [Incluido el código fuente de Matlab 187】
[Solución de optimización multiobjetivo] Solución de optimización multiobjetivo basada en el algoritmo matlab golden eagle (MOGEO) [incluido el código fuente 188 de Matlab]
[Solución de optimización] Solución de optimización de red neuronal BP basada en la interfaz GUI de Matlab [Código fuente 208 de Matlab]
[Optimización solución] Solución de optimización de algoritmo genético basada en la interfaz GUI de Matlab [incluido el código fuente 209 de Matlab]
[Solución de optimización] Análisis de optimización de aproximación numérica basado en el algoritmo inmune de Matlab [incluido el código fuente 211 de Matlab] [Solución de optimización] Análisis de optimización de funciones basado en el algoritmo heurístico de Matlab
[Incluido el punto 212 del código fuente de Matlab]

Supongo que te gusta

Origin blog.csdn.net/TIQCmatlab/article/details/113641331
Recomendado
Clasificación