基于粒子群算法优化核极限学习机实现数据预测matlab代码
2022/1/31 11:34:50
本文主要是介绍基于粒子群算法优化核极限学习机实现数据预测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. 中国矿业大学.
部分理论引用网络文献,若有侵权联系博主删除。
这篇关于基于粒子群算法优化核极限学习机实现数据预测matlab代码的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22项目:远程温湿度检测系统
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南