【DELM预测】基于探路者算法改进深度学习极限学习机实现数据预测附matlab代码

​ 1 简介

人工神经网络的最大缺点是训练时间太长从而限制其实时应用范围,近年来,极限学习机(Extreme Learning Machine, ELM)的提出使得前馈神经网络的训练时间大大缩短,然而当原始数据混杂入大量噪声变量时,或者当输入数据维度非常高时,极限学习机算法的综合性能会受到很大的影响.深度学习算法的核心是特征映射,它能够摒除原始数据中的噪声,并且当向低维度空间进行映射时,能够很好的起到对数据降维的作用,因此我们思考利用深度学习的优势特性来弥补极限学习机的弱势特性从而改善极限学习机的性能.为了进一步提升DELM预测精度,本文采用探路者算法进一步优化DELM超参数,仿真结果表明,改进算法的预测精度更高。

     

编辑

     

编辑

     

编辑

     

编辑

     

编辑

2 部分代码

%___________________________________________________________________________%
%  Pathfinder Algorithm (PFA) source codes version for desing problems      %
%                                                                           %
%  Developed in MATLAB R2016b                                               %
%                                                                           %
%  Author and developer: Hamza YAPICI                                       %
%                                                                           %
%  hyapici@erbakan.edu.tr                                                   %
% This is a simple codes of PFA inspired by                                 %
% collective movements and leadership behaviours                            %
% of animals.                                                               %                                                                      %
%   paper: Yapici H, Cetinkaya N.                                           %
%               A new meta-heuristic optimizer:                             % 
%               Pathfinder algorithm.                                       %
%               Applied Soft Computing. 2019.                               %
%___________________________________________________________________________%
% clear all
% clc
% format long;
% ObjectiveFunction = @Obj_function3; % Objective Function: Obj_function-Welded Beam Design, 
                        % Obj_function2-Tension/Compression, Obj_function3-pressure vessel,
                        % Obj_function4-cantilever beam design
% initialization
%  = 300; 
% problem_size = 4;
% N = pop_size;
% dim = problem_size;
% max_iter = 500;
function [global_pop,fit_global, minc]=PFA(N ,dim ,max_iter,lb,ub,ObjectiveFunction)
% pressure vessel
Lb=lb*ones(1,dim);
Ub=ub*ones(1,dim);
problem_size=dim;
pop_size=N;
% Welded beam
% Lb=[.1 .1 .1 .1];
% Ub=[2 10 10 2];
% cantilever beam
% Lb=[0 0 0 0 0];
% Ub=[100 100 100 100 100];
% Tension/Compression
% Lb=[.05 .25 2];
% Ub=[2 1.3 15];
% first population
for j=1:problem_size
    pop(:,j)=Lb(j)+(Ub(j)-Lb(j)).*rand(pop_size,1);
end
% calculate the fitness of first population
for ik=1:pop_size
    pop_fitness(ik)=ObjectiveFunction(pop(ik,:));
end
% find pathfinder
fitness=pop_fitness;
[fit_global, index]=min(pop_fitness);
pop_old=pop;
global_pop=pop(index,:); path_p=global_pop;
path_old=path_p;
ub=Ub; lb=Lb;
minc(1)=fit_global;
meanc(1)=mean(pop_fitness);
iter=1;
% iterative loop
while iter < max_iter
        iter = iter+1;
        % parameters of PFA
        u1=-1+(1-(-1)).*rand(N,1);
        u2=-1+(1-(-1)).*rand(1,dim);
        r3=rand(1,dim);
        eps=(1 - iter/(max_iter)).*u1;
        A=u2.*exp(-2.*iter/max_iter);
        % update pathfinder
        path_p(1,:) = path_p(1,:) + ...
                ((2).*r3(1,:)).*(path_old(1,:) - path_p(1,:)) + 1.*A(1,:);
        Flag4ub=path_p(1,:)>ub(1,:); % check bounds                                                    % check lower bound for pathfinder
        Flag4lb=path_p(1,:)<lb(1,:);                                                     % check upper bound for pathfinder
        path_p(1,:)=(path_p(1,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
%         for j=1:problem_size
%             if path_p(1,j)<Lb(j)
%                 path_p(1,j)=Lb(j);
%             end
%             if path_p(1,j)>Ub(j)
%                 path_p(1,j)=Ub(j);
%             end
%         end
        path_old=path_p;
        path_fitness=ObjectiveFunction(path_p(1,:));
        [fitness, index] = sort(fitness);                                                 
        pop=pop(index,:);
        if path_fitness<fitness(1)                                                        % compare new fitness with old
            fitness(1)=path_fitness;
            pop(1,:)=path_p(1,:);    
        else
            fitness(1)=fitness(1);
            pop(1,:)=pop(1,:);
        end
        % update follower members
        for ii=2:pop_size
%            d=sqrt(abs(((pop(ii,:)).^2 - (pop(ii-1,:)).^2)));
           d=sqrt(sum(((pop(ii,:)) - (pop(ii-1,:))).^2));                        % calculate D(i,j)
           alpha=1+rand(1,dim);                                                            % assign alpha
           beta=1+rand(1,dim);                                                             % and beta
           pop(ii,:) = pop(ii,:) ...
                + ((alpha(1,:)).*rand).*(global_pop(1,:) - pop(ii,:)) ...
                + ((beta(1,:)).*rand).*(pop_old(ii-1,:) - pop(ii,:)) + 1.*(eps(ii,1).*d);         % update position of followers
           Flag4ub=pop(ii,:)>ub(1,:);
           Flag4lb=pop(ii,:)<lb(1,:);
           pop(ii,:)=(pop(ii,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
%             for j=1:dim
% 
%                 if pop(ii,j)<Lb(j)
%                     pop(ii,j)=Lb(j);
%                 end
%                 if pop(ii,j)>Ub(j)
%                     pop(ii,j)=Ub(j);
%                 end
%             end
        end
        for i=1:pop_size
            fitness(i)=ObjectiveFunction(pop(i,:));                                 % calculate new fitness of followers
            if fitness(i) < pop_fitness(i)                                          % update position via new fitness
                pop_fitness(i) = fitness(i);
                pop_old(i,:) = pop(i, :);
                bsf_index = i;
            else
                pop_fitness(i) = pop_fitness(i);
                pop_old(i,:) = pop_old(i, :);
            end
        end
        % Find new pathfinder
        [fit_global, index] = min(pop_fitness);
        global_pop = pop_old(index,:);
        path_p=global_pop;
        minc(iter+1)=fit_global;
        disp(['numevals:' num2str(iter) ...
            ' - best:' num2str(fit_global) ]);
end
% output variables
% x=global_pop;
% y=fit_global
% meanc=mean(minc)

3 仿真结果

     

编辑

     

编辑

4 参考文献

[1]马萌萌. 基于深度学习的极限学习机算法研究[D]. 中国海洋大学, 2016.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值