[Solución de optimización] Optimización de la señal de tráfico urbano basada en el algoritmo genético mejorado IGA de matalb [incluido el código fuente 215 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 entorno 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 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 = 50;                     % 种群规模
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)=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);
    t4 = C-L - t(1)-t(2)-t(3);
flag=1;
if (t(1)<bound(1,1))||(t(2)<bound(2,1))||(t(3)<bound(3,1))||(t(1)>bound(1,2))||(t(2)>bound(2,2))||(t(3)>bound(3,2))||t4<22||t4>33
    flag=0;
end     
function ret=Mutation(pmutation,lenchrom,chrom,sizepop,num,maxgen,bound)
% 本函数完成变异操作
% pcorss                input  : 变异概率
% lenchrom              input  : 染色体长度
% chrom     input  : 染色体群
% sizepop               input  : 种群规模
% opts                  input  : 变异方法的选择
% pop                   input  : 当前种群的进化代数和最大的进化代数信息
% bound                 input  : 每个个体的上届和下届
% maxgen                input  :最大迭代次数
% num                   input  : 当前迭代次数
% ret                   output : 变异后的染色体
k1 = 0.6;   k2 = 0.7;
k3 = 0.001; k4 = 0.01;
% 计算适应度
for j=1:sizepop
    x=chrom(j,:);    % 解码
    f(j)=fun(x);     % 染色体的适应度 
end
fmax = max(f);      % 适应度最大值
fmin = min(f);      % 适应度最小值
favg = mean(f);     % 适应度平均值

for i=1:sizepop   %每一轮for循环中,可能会进行一次变异操作,染色体是随机选择的,变异位置也是随机选择的,
    %但该轮for循环中是否进行变异操作则由变异概率决定(continue控制)
    % 随机选择一个染色体进行变异
    pick=rand;
    while pick==0
        pick=rand;
    end
    index=ceil(pick*sizepop);
    
     f1 = fun( chrom(index(1),:) );  % 个体适应度值
     f3 = max(f1);                   % 两者中大者
     if f3>=favg
         pmutation = k3*(fmax - f3)./(fmax-favg);
     else
         pmutation = k4;
     end
    
    % 变异概率决定该轮循环是否进行变异
    pick=rand;
    if pick>pmutation
        continue;
    end
    flag=0;
    num = 0;
    chrom1 = chrom(i,:);
    while flag==0&&num<=20 
        % 变异位置
        pick=rand;
        while pick==0      
            pick=rand;
        end
        pos=ceil(pick*sum(lenchrom));  %随机选择了染色体变异的位置,即选择了第pos个变量进行变异
    
        pick=rand; %变异开始     
        fg=(rand*(1-num/maxgen))^2;
        if pick>0.5
            chrom(i,pos)=chrom(i,pos)+(bound(pos,2)-chrom(i,pos))*fg;
        else
            chrom(i,pos)=chrom(i,pos)-(chrom(i,pos)-bound(pos,1))*fg;
        end   %变异结束
        

Tres, resultados en ejecución

Inserte la descripción de la imagen aquí

Cuatro, comentarios

Código completo o escritura agregue QQ1564658423 revisión anterior
>>>>>>
[Optimización] basada en el algoritmo de lobo gris de optimización de enjambre de partículas de Matlab [incluido el código fuente de Matlab 006]
[Optimización] basado en el algoritmo de optimización de lobo gris multiobjetivo de Matlab MOGWO [incluido Matlab problema de código fuente 007]
[solución optimizada] 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 optimizada] problema de vendedor de múltiples viajes basado en el algoritmo genético de Matlab [incluido el código fuente de Matlab 016]
[optimizado solución】 Encuentre la ruta más corta basada en el algoritmo genético de Matlab [incluido el código fuente 023 de Matlab]
[Solución de optimización] Problema de empaque 3D basado en recocido simulado y genético de Matlab [incluido el código fuente de Matlab 031]
[Solución de optimización] Resuelva la optimización del intervalo de salida del vehículo basado en el algoritmo genético matlab Problema [Incluye el código fuente 132 de Matlab]
[Solución de optimización] Algoritmo de enjambre de krill [Incluye el código fuente 133 de matlab]
[Solución de optimización] Algoritmo de evolución diferencial [Incluye el código fuente 134 de Matlab]
[Solución de optimización] Método de función de penalización basado en Optimización de restricciones de matlab [Incluir código fuente de Matlab 163 período]
[Solución de optimización] Basado en el algoritmo de lobo gris mejorado de matlab para resolver el modelo de pirólisis de petróleo pesado [Incluir código fuente de Matlab período 164]
[Solución optimizada] Basado en falla de red de distribución del algoritmo de colonia de hormigas de Matlab ubicación [Incluir el punto 165 del código fuente de Matlab]
[Solución de optimización basada en el algoritmo genético de matalb para resolver el problema de optimización del reabastecimiento de material de la isla [incluido el código fuente 172 de Matlab]
[Solución de optimización] Algoritmo de optimización inmune de la población de coronavirus (CHIO) [incluido el código fuente 186 de Matlab ]
[Solución de optimización] Algoritmo de optimización Golden Eagle (GEO)) 【Incluir el código fuente de Matlab 187 período】
[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 [Incluir el código fuente 212 de Matlab]
[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) [Incluir el código fuente de Matlab 213 período]
[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 [ Incluyendo el código fuente de Matlab 214 período]

Supongo que te gusta

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