1 模型

为了提高空气质量预测精度,提出一种基于粒子群算法优化极限学习机的空气质量预测模型.运用粒子群算法优化极限学习机的初始权值和偏置,在保证预测误差最小的情况下实现空气质量最优预测.选择平均绝对百分比误差,均方根误差和平均绝对误差作为评价指标,通过PSO-ELM和ELM五个模型预测结果对比发现,PSO-ELM可以有效提高空气质量预报的预测精度,可为空气质量预测提供新的方法和途径.

PSO优化调度约束条件 python_粒子群优化

PSO优化调度约束条件 python_PSO优化调度约束条件 python_02

PSO优化调度约束条件 python_极限学习机_03

2 部分代码

%% 初始化

clear

close all

clc

format shortg

warning off

addpath('func_defined')

%% 读取读取

data_train=xlsread('Data-tiaoshi.xlsx','Train','A1:E90'); %%使用xlsread函数读取EXCEL中对应范围的数据即可  

data_test=xlsread('Data-tiaoshi.xlsx','Test','A1:D20'); %%使用xlsread函数读取EXCEL中对应范围的数据即可  

%输入输出数据%% 划分训练集、测试集

input=data_train(:,1:end-1);    %data的第一列-倒数第二列为特征指标

output=data_train(:,end);  %data的最后面一列为输出的指标值

% output_test=data_test(:,end)';  %data的最后面一列为输出的指标值

N=length(output);   %全部样本数目

testNum=15;   %设定测试样本数目

trainNum=N-testNum;    %计算训练样本数目

input_train = input(1:trainNum,:)';

output_train =output(1:trainNum)';

input_test =input(trainNum+1:trainNum+testNum,:)';

output_test =output(trainNum+1:trainNum+testNum)';

%% 数据归一化

[inputn,inputps]=mapminmax(input_train,-1,1);

[outputn,outputps]=mapminmax(output_train);

inputn_test=mapminmax('apply',input_test,inputps);

%% 绘制进化曲线

figure(1)

plot(Convergence_curve,'r-','linewidth',2)

xlabel('进化代数')

ylabel('均方误差')

legend('最佳适应度')

title('PSO的进化曲线')

%% 优化后的参数训练ELM极限学习机模型

[IW1,B1,LW1,TF,TYPE] = elmtrain(inputn,outputn,hiddennum_best,gbest);          %IW1   B1  LW1为优化后的ELM求得的训练参数

%% 优化后的ELM模型测试

an1=elmpredict(inputn_test,IW1,B1,LW1,TF,TYPE); 

test_simu1=mapminmax('reverse',an1,outputps);

%误差指标

[mae1,mse1,rmse1,mape1,error1,errorPercent1]=calc_error(output_test,test_simu1);

%% 作图

figure(2)

plot(output_test,'g-.o','linewidth',1)

hold on

plot(test_simu0,'b-*','linewidth',1)

hold on

plot(test_simu1,'r-v','linewidth',1)

legend('真实值','ELM预测值','PSO-ELM预测值')

xlabel('测试样本编号')

ylabel('指标值')

title('优化前后的ELM模型预测值和真实值对比图')

figure(3)

plot(error0,'b-*','markerfacecolor','r')

hold on

plot(error1,'r-v','markerfacecolor','r')

legend('ELM预测误差','PSO-ELM预测误差')

xlabel('测试样本编号')

ylabel('预测偏差')

title('优化前后的ELM模型预测值和真实值误差对比图')

disp(' ')

disp('/')

disp('打印结果表格')

disp('样本序号     实测值      ELM预测值  PSO-ELM值   ELM误差   PSO-ELM误差')

for i=1:testNum

    disp([i output_test(i),test_simu0(i),test_simu1(i),error0(i),error1(i)])

end

input_test2=data_test(:,1:end)';    %data的第一列-倒数第二列为特征指标

inputn_test2=mapminmax('apply',input_test2,inputps);

an2=elmpredict(inputn_test2,IW1,B1,LW1,TF,TYPE); 

test_simu2=mapminmax('reverse',an2,outputps);

figure(5)

plot(test_simu2,'b-')

xlabel('测试样本编号')

ylabel('指标值')

3 仿真结果

PSO优化调度约束条件 python_粒子群优化_04

PSO优化调度约束条件 python_极限学习机_05

PSO优化调度约束条件 python_粒子群优化_06