Optimización de enjambre de partículas Optimización de PSO Red neuronal de BP (PSO-BP) Predicción de regresión: implementación de código de Matlab

1. Algoritmo de enjambre de partículas PSO

        La optimización de enjambre de partículas (PSO) es un algoritmo heurístico clásico propuesto por Kennedy y otros en 1995. Inspirado en la investigación sobre el comportamiento de depredación de las aves, PSO hace que el grupo se posicione del desorden al orden en el espacio de solución a través de la cooperación y el intercambio de información entre los individuos del grupo, y los miembros del grupo aprenden de su propia experiencia y la de otros miembros. cambiando constantemente el modo de búsqueda para encontrar la solución óptima. Debido a las ventajas de menos parámetros de ajuste y una velocidad de convergencia rápida, PSO se usa actualmente ampliamente en los campos de optimización de entrenamiento de redes neuronales y otras funciones de optimización.

        La idea básica del algoritmo PSO es simular los individuos de la bandada de pájaros a través de partículas, y estas partículas tienen los atributos de velocidad y posición. Cada partícula en el enjambre de partículas busca la solución óptima de forma independiente en su propio espacio de búsqueda y comparte información con otras partículas para encontrar la solución óptima global actual. Luego, cada partícula ajusta su velocidad y posición de acuerdo con la solución óptima global actual, iterativo continuo actualización para obtener la solución óptima global. Los pasos de implementación del algoritmo PSO son los siguientes:

(1) Inicialice parámetros como el número máximo de iteraciones, el tamaño de la población, el factor de aprendizaje individual, el factor de aprendizaje social, el peso de inercia, etc., inicialice la posición del enjambre de partículas y calcule la aptitud inicial de las partículas para obtener la partícula óptima inicial ;

(2) Calcular la aptitud de la población y actualizar la posición de la partícula óptima del enjambre de partículas actual;

(3) Actualizar la posición y la aptitud de la partícula óptima global hasta el momento;

(4) Repita los pasos (2)~(3) hasta que se obtenga la posición individual óptima y el estado físico óptimo, luego salte fuera del bucle. Después de un número finito de iteraciones, cada partícula en el enjambre de partículas se acercará a la solución óptima.

2. Construcción del modelo de predicción PSO-BP

        En el proceso de establecimiento de la red neuronal BP, la configuración aleatoria de los pesos de conexión dará lugar a errores en los resultados de la predicción, y el entrenamiento de descenso de gradiente tiene las desventajas de la velocidad lenta y los mínimos locales, y es difícil lograr el óptimo global en el entrenamiento de la red neuronal. El algoritmo de optimización de enjambre de partículas PSO se utiliza para optimizarlo y mejorar la precisión de la predicción y la capacidad de generalización. El proceso de construcción es:

(1) Normalizar los datos, establecer una red neuronal de BP, determinar la topología e inicializar los pesos y umbrales de la red;

(2) inicializar los parámetros de PSO, parámetros como el número máximo de iteraciones, el tamaño de la población, el factor de aprendizaje individual, el factor de aprendizaje social, el peso de inercia, etc.;

(3) Inicializar la posición de la población de PSO y calcular la cantidad de elementos variables que deben optimizarse de acuerdo con la estructura de la red neuronal de BP;

(4) Optimización de PSO, la función de aptitud se establece en el error cuadrático medio predicho por la red BP, el proceso de optimización de PSO se cicla, la posición de la partícula óptima se actualiza continuamente hasta el número máximo de iteraciones, y el algoritmo de PSO es terminado;

(5) Los parámetros de umbral de peso optimizados del algoritmo PSO se asignan a la red neuronal BP, es decir, se genera el modelo PSO-BP óptimo, y el PSO-BP se usa para entrenamiento y predicción y se compara con la red BP antes. mejoramiento.

Adquisición de código: haga clic directamente aquí para saltar icono-predeterminado.png?t=N3I4http://t.csdn.cn/GIUzd

3. Código clave

%% 建立BP模型
net=newff(inputn,outputn,hiddennum_best,{'tansig','purelin'},'trainlm');
 
% 设置BP参数
net.trainParam.epochs=1000;        % 训练次数
net.trainParam.lr=0.01;            % 学习速率
net.trainParam.goal=0.00001;       % 训练目标最小误差
net.trainParam.show=25;            % 显示频率
net.trainParam.mc=0.01;            % 动量因子
net.trainParam.min_grad=1e-6;      % 最小性能梯度
net.trainParam.max_fail=6;         % 最高失败次数

%% 初始化PSO参数
popsize=10;   %初始种群规模
maxgen=50;   %最大进化代数
dim=inputnum*hiddennum_best+hiddennum_best*hiddennum_best+hiddennum_best+hiddennum_best*outputnum+outputnum;    %自变量个数
lb=repmat(-3,1,dim);    %自变量下限
ub=repmat(3,1,dim);   %自变量上限
c1 = 2;  % 每个粒子的个体学习因子,也称为个体加速常数
c2 = 2;  % 每个粒子的社会学习因子,也称为社会加速常数
w = 0.9;  % 惯性权重
vmax =3*ones(1,dim); % 粒子的最大速度
vmax=repmat(vmax,popsize,1);

%% 初始化粒子的位置和速度
x = zeros(popsize,dim);
for i = 1: dim
    x(:,i) = lb(i) + (ub(i)-lb(i))*rand(popsize,1);   % 随机初始化粒子所在的位置在定义域内
end
v = -vmax + 2*vmax .* rand(popsize,dim);  % 随机初始化粒子的速度

%% 计算适应度
fit = zeros(popsize,1);  % 初始化这n个粒子的适应度全为0
for i = 1:popsize  % 循环整个粒子群,计算每一个粒子的适应度
    [fit(i),NET]= fitness(x(i,:),inputnum,hiddennum_best,outputnum,net,inputn,outputn,output_train,inputn_test,outputps,output_test);   % 调用函数来计算适应度
    eval( strcat('NETA.net',int2str(i),'=NET;'))
end 
pbest = x;   % 初始化这n个粒子迄今为止找到的最佳位置
ind = find(fit == min(fit), 1);  % 找到适应度最小的那个粒子的下标
gbest = x(ind,:);  % 定义所有粒子迄今为止找到的最佳位置
fit_gbest=fit(ind);  
eval( strcat('Net=NETA.net',int2str(ind ),';'));
eval( strcat('NETT=NETA.net',int2str(ind),';'));

%% 进化过程
for d = 1:maxgen  % 开始迭代,一共迭代K次
    for i = 1:popsize   % 依次更新第i个粒子的速度与位置
        v(i,:) = w*v(i,:) + c1*rand(1)*(pbest(i,:) - x(i,:)) + c2*rand(1)*(gbest - x(i,:));  % 更新第i个粒子的速度
        for j = 1: dim
            if v(i,j) < -vmax(j)
                v(i,j) = -vmax(j);
            elseif v(i,j) > vmax(j)
                v(i,j) = vmax(j);
            end
        end
        x(i,:) = x(i,:) + v(i,:); % 更新第i个粒子的位置
        for j = 1: dim
            if x(i,j) < lb(j)
                x(i,j) = lb(j);
            elseif x(i,j) > ub(j)
                x(i,j) = ub(j);
            end
        end
        [fit(i),NET] = fitness(x(i,:),inputnum,hiddennum_best,outputnum,net,inputn,outputn,output_train,inputn_test,outputps,output_test); 
        eval( strcat('NETA.net',int2str(i),'=NET;'))      [fit_pbest,~]=fitness(pbest(i,:),inputnum,hiddennum_best,outputnum,net,inputn,outputn,output_train,inputn_test,outputps,output_test);
        if fit(i) <fit_pbest    
           pbest(i,:) = x(i,:);   
           fit_pbest =fit(i);
           eval( strcat('NETT=NETA.net',int2str(i),';'))
        end
        %更新历史最优粒子位置
        if  fit_pbest < fit_gbest  
            gbest = pbest(i,:);   
            fit_gbest=fit_pbest;
            eval( strcat('Net=NETT;'));
        end
    end
    Convergence_curve(d) =fit_gbest;  % 更新第d次迭代得到的最佳的适应度
    waitbar(d/maxgen,h0,[num2str(d/maxgen*100),'%'])
    if getappdata(h0,'canceling')
        break
    end
end

%% 权重阈值更新
w1=Best_pos(1:inputnum*hiddennum_best); 
B1=Best_pos(inputnum*hiddennum_best+1:inputnum*hiddennum_best+hiddennum_best);  
w2=Best_pos(inputnum*hiddennum_best+hiddennum_best+1:inputnum*hiddennum_best+hiddennum_best+hiddennum_best*outputnum); 
B2=Best_pos(inputnum*hiddennum_best+hiddennum_best+hiddennum_best*outputnum+1:inputnum*hiddennum_best+hiddennum_best+hiddennum_best*outputnum+outputnum);   

%矩阵重构
net.iw{1,1}=reshape(w1,hiddennum_best,inputnum);
net.lw{2,1}=reshape(w2,outputnum,hiddennum_best);
net.b{1}=reshape(B1,hiddennum_best,1);
net.b{2}=reshape(B2,outputnum,1);

4. Resultados de la simulación

(1) Según la fórmula empírica, el número óptimo de nodos de capa oculta se obtiene a través del número de nodos de entrada y salida:

(2) Gráfico de comparación de predicción y gráfico de error de PSO-BP y BP

  (3) Varios indicadores de error y precisión de predicción de BP y PSO-BP

 (4) Curva de evolución de aptitud PSO del algoritmo de optimización de enjambre de partículas

  (5) Diagrama de regresión de los modelos BP y PSO-BP

  (6) Histogramas de error de los modelos BP y PSO-BP

 Cuatro Conclusión

    Cabe señalar que el algoritmo de enjambre de partículas PSO y la red neuronal BP son algoritmos basados ​​en la aleatoriedad, por lo que los resultados de optimización del mismo conjunto de parámetros pueden ser diferentes y se requieren experimentos repetidos para verificar la solidez y confiabilidad del modelo.

Supongo que te gusta

Origin blog.csdn.net/baoliang12345/article/details/130494343
Recomendado
Clasificación