0
点赞
收藏
分享

微信扫一扫

基于粒子群算法优化核极限学习机实现数据预测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. 中国矿业大学.

部分理论引用网络文献,若有侵权联系博主删除。

图片

举报

相关推荐

0 条评论