我是靠谱客的博主 粗心面包,最近开发中收集的这篇文章主要介绍【LSSVM回归预测】基于matlab鸽群算法优化最小二乘支持向量机PIO-LSSVM数据回归预测【含Matlab源码 2237期】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

⛄一、鸽群算法简介

基于鸽群在归巢过程中的特殊导航行为,Duan等提出了一种仿生群体智能优化算法———鸽群优化算法.在这个算法中,通过模仿鸽子在寻找目标的不同阶段使用不同导航工具这一机制,提出了2种不同的算子模型:

1)地图和指南针算子(map and compass operator).鸽子可以使用磁性物体感知地磁场,然后在头脑中形成地图.它们把太阳高度作为指南针来调整飞行方向,当它们接近目的地的时候,它们对太阳和磁性物体的依赖性便减小.

2)地标算子(landmark operator).地标算子用来模拟导航工具中地标对鸽子的影响.当鸽子飞近目的地时,它们将更多依赖附近的地标.如果鸽子对地标熟悉,将直接飞向目的地.否则,它们将跟随那些对地标熟悉的鸽子飞行.

在鸽群优化模型中,使用虚拟的鸽子模拟导航过程.依据地图和指南针算子(如图2所示)的原理,初始化鸽子的位置和速度,并且在多维搜索空间中,鸽子的位置和速度在每一次迭代中都会得到更新.其位置和速度分别记作
在这里插入图片描述
图2 地图和指南针算子模型
在这里插入图片描述
式中i=1,2,…,N.每只鸽子依据
在这里插入图片描述
更新其位置Xi及速度Vi.式中:R是地图和指南针因数,取值范围设定成01;rand是取值范围在01的随机数;Nc是目前迭代次数;Xgbest是在Nc-1次迭代循环后,通过比较所有鸽子的位置得到的全局最优位置.当该循环次数达到所要求的迭代次数后即停止地图和指南针算子的工作,进入地标算子中继续工作.

如图3所示,在地标算子中,每一次迭代后鸽子的数量都会减少一半.那些远离目的地的鸽子对地标不熟悉,它们将不再有分辨路径的能力,因而被舍去.Xcenter是剩余鸽子的中心位置,将被当作地标,即作为飞行的参考方向,由此依据下列方程:
在这里插入图片描述
对鸽子的位置Xi进行更新.其中
在这里插入图片描述
同样,以上迭代循环至最大迭代次数后,地标算子也停止工作.
在这里插入图片描述
图3 地标算子模型

⛄二、部分源代码

clc
close all
clear
format long

tic
%==============================================================
%%导入数据
data=xlsread(‘1.xlsx’);
[row,col]=size(data);
x=data(:,1:col-1);
y=data(:,col);
set=1; %设置测量样本数
row1=row-set;%
train_x=x(1:row1,:);
train_y=y(1:row1,:);
test_x=x(row1+1:row,:);%预测输入
test_y=y(row1+1:row,:);%预测输出
train_x=train_x’;
train_y=train_y’;
test_x=test_x’;
test_y=test_y’;

%%数据归一化
[train_x,minx,maxx, train_yy,miny,maxy] =premnmx(train_x,train_y);
test_x=tramnmx(test_x,minx,maxx);
train_x=train_x’;
train_yy=train_yy’;
train_y=train_y’;
test_x=test_x’;
test_y=test_y’;
%% 参数初始化
lb=[0.1 0.01];%参数c g的变化的最小值.
ub=[1000 100];%参数c g的变化的最大值.
maxgen=100; % 进化次数 300
sizepop=10; % 种群规模30
dim=2;
%%定义lssvm相关参数
type=‘f’;
kernel = ‘RBF_kernel’;
proprecess=‘proprecess’;
fitness=@(x)fobj(x,train_x,train_yy,type,kernel,proprecess,test_x,test_y,miny,maxy,train_y);

[ global_fitness,global_x,fit_gen]=PIO(sizepop,maxgen,lb,ub,dim,fitness);
%% 结果分析
plot(fit_gen,‘LineWidth’,2);
title([‘鸽群算法优化lssvm适应度曲线’,‘(终止代数=’,num2str(maxgen),‘)’],‘FontSize’,13);
xlabel(‘进化代数’);ylabel(‘误差适应度’);

bestc = global_x(1);
bestg = global_x(2);

gam=bestc;
sig2=bestg;
model=initlssvm(train_x,train_yy,type,gam,sig2,kernel,proprecess);%原来是显示
model=trainlssvm(model);%原来是显示
%求出训练集和测试集的预测值
[train_predict_y,zt,model]=simlssvm(model,train_x);
[test_predict_y,zt,model]=simlssvm(model,test_x);
%预测数据反归一化
train_predict=postmnmx(train_predict_y,miny,maxy);%预测输出
test_predict=postmnmx(test_predict_y,miny,maxy);
%计算均方差
trainmse=sum((train_predict-train_y).^2)/length(train_y)
%testmse=sum((test_predict-test_y).^2)/length(test_y)

for i=1:set
RD(i)=(test_predict(i)-test_y(i))/test_y(i)*100;
end
for i=1:set
D(i)=test_predict(i)-test_y(i);
end

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]段海滨,叶飞.鸽群优化算法研究进展[J].北京工业大学学报. 2017,43(01)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

最后

以上就是粗心面包为你收集整理的【LSSVM回归预测】基于matlab鸽群算法优化最小二乘支持向量机PIO-LSSVM数据回归预测【含Matlab源码 2237期】的全部内容,希望文章能够帮你解决【LSSVM回归预测】基于matlab鸽群算法优化最小二乘支持向量机PIO-LSSVM数据回归预测【含Matlab源码 2237期】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部