基于粒子群算法优化核极限学习机实现数据预测matlab代码
作者:互联网
1 简介
煤与瓦斯突出是煤矿煤炭生产过程中面临的主要动力灾害之一。研究表明,在有发生煤与瓦斯突出的矿井中,煤层均发育一定程度的构造煤,且构造煤厚度越大,瓦斯突出的危险性越严重。因此,如果能够准确预测出煤层中构造煤的厚度,将对煤矿的安全管理和煤层气的开发与利用起到至关重要的作用。针对目前构造煤厚度预测方法精度不高的问题,提出利用粒子群算法优化极限学习机的方法来对构造煤厚度进行预测。首先,利用主成分分析技术对三维地震属性进行降维处理,在降低地震属性维数的同时,消除变量之间的相关性;之后,构建了基于全局多项式核函数和局部高斯径向基核函数的混合核极限学习机模型,并利用粒子群算法优化混合核极限学习机的核参数;同时,针对粒子群算法较易陷入局部最优的问题,在粒子群算法中加入模拟退火的思想、随迭代次数减小的惯性权重以及基于随机反向学习的变异操作,使粒子群算法可以更容易跳出局部极小值点,得到更优结果。此外,为了增强模型的泛化性能,在核函数的基础上加入L2正则项,有效的避免了噪声和异常点对模型泛化性能的影响。最后,本文将预测模型应用到阳煤集团新景矿区芦南二采区中部15#煤层中,预测得到的采区构造煤厚度与实际地质资料具有较高的一致性,并将已知钻孔点的预测数据提取出来与实际的钻孔值相比较,具有较高的吻合性。仿真结果表明,本文提出的预测模型预测精度较高,预测误差较小,可以推广用于实际采区的构造煤厚度预测。
2 部分代码
clc;
clear;
close all;
%% Problem Definition
model=CreateModel();
CostFunction=@(x) MyCost(x,model); % Cost Function
nVar=model.nPlant; % Number of Decision Variables
VarSize=[1 nVar]; % Size of Decision Variables Matrix
VarMin=0; % Lower Bound of Variables
VarMax=1; % Upper Bound of Variables
%% PSO Parameters
MaxIt=200; % Maximum Number of Iterations
nPop=100; % Population Size (Swarm Size)
% w=1; % Inertia Weight
% wdamp=0.99; % Inertia Weight Damping Ratio
% c1=2; % Personal Learning Coefficient
% c2=2; % Global Learning Coefficient
% Constriction Coefficients
phi1=2.05;
phi2=2.05;
phi=phi1+phi2;
chi=2/(phi-2+sqrt(phi^2-4*phi));
w=chi; % Inertia Weight
wdamp=1; % Inertia Weight Damping Ratio
c1=chi*phi1; % Personal Learning Coefficient
c2=chi*phi2; % Global Learning Coefficient
% Velocity Limits
VelMax=0.1*(VarMax-VarMin);
VelMin=-VelMax;
%% Initialization
empty_particle.Position=[];
empty_particle.Cost=[];
empty_particle.Out=[];
empty_particle.Velocity=[];
empty_particle.Best.Position=[];
empty_particle.Best.Cost=[];
empty_particle.Best.Out=[];
particle=repmat(empty_particle,nPop,1);
BestSol.Cost=inf;
for i=1:nPop
% Initialize Position
particle(i).Position=unifrnd(VarMin,VarMax,VarSize);
% Initialize Velocity
particle(i).Velocity=zeros(VarSize);
% Evaluation
[particle(i).Cost, particle(i).Out]=CostFunction(particle(i).Position);
% Update Personal Best
particle(i).Best.Position=particle(i).Position;
particle(i).Best.Cost=particle(i).Cost;
particle(i).Best.Out=particle(i).Out;
% Update Global Best
if particle(i).Best.Cost<BestSol.Cost
BestSol=particle(i).Best;
end
end
BestCost=zeros(MaxIt,1);
%% PSO Main Loop
for it=1:MaxIt
for i=1:nPop
% Update Velocity
particle(i).Velocity = w*particle(i).Velocity ...
+c1*rand(VarSize).*(particle(i).Best.Position-particle(i).Position) ...
+c2*rand(VarSize).*(BestSol.Position-particle(i).Position);
% Apply Velocity Limits
particle(i).Velocity = max(particle(i).Velocity,VelMin);
particle(i).Velocity = min(particle(i).Velocity,VelMax);
% Update Position
particle(i).Position = particle(i).Position + particle(i).Velocity;
% Velocity Mirror Effect
IsOutside=(particle(i).Position<VarMin | particle(i).Position>VarMax);
particle(i).Velocity(IsOutside)=-particle(i).Velocity(IsOutside);
% Apply Position Limits
particle(i).Position = max(particle(i).Position,VarMin);
particle(i).Position = min(particle(i).Position,VarMax);
% Evaluation
[particle(i).Cost, particle(i).Out] = CostFunction(particle(i).Position);
% Update Personal Best
if particle(i).Cost<particle(i).Best.Cost
particle(i).Best.Position=particle(i).Position;
particle(i).Best.Cost=particle(i).Cost;
particle(i).Best.Out=particle(i).Out;
% Update Global Best
if particle(i).Best.Cost<BestSol.Cost
BestSol=particle(i).Best;
end
end
end
BestCost(it)=BestSol.Cost;
disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
w=w*wdamp;
end
%% Results
3 仿真结果
4 参考文献
[1]马晨佩, 李明辉, 巩强令, & 杨白月. (2021). 基于麻雀搜索算法优化支持向量机的滚动轴承故障诊断. 科学技术与工程, 21(10), 5.
[2]盛晓晨, 史旭东, 熊伟丽. 改进粒子群优化的极限学习机软测量建模方法[J]. 计算机应用研究, 2020, 37(6):5.
[3]范君. 基于粒子群算法优化混合核极限学习机的构造煤厚度预测研究与应用. Diss. 中国矿业大学.
部分理论引用网络文献,若有侵权联系博主删除。
标签:particle,学习机,算法,Cost,matlab,Velocity,Position,Best,Out 来源: https://blog.csdn.net/Matlab0111/article/details/122752408