【SVM回归预测】基于matlab混沌灰狼算法优化SVM回归预测【含Matlab源码 1576期】

举报
海神之光 发表于 2022/05/28 23:32:37 2022/05/28
【摘要】 一、混沌灰狼算法简介 1 Tent混沌反向学习策略 为保持种群多样性和使初始化种群个体尽可能均匀分布。在目前文献中,采用较多的是混沌映射Logistic,但它在[0,0.1]和[0.9,1]两个范围的取...

一、混沌灰狼算法简介

1 Tent混沌反向学习策略
为保持种群多样性和使初始化种群个体尽可能均匀分布。在目前文献中,采用较多的是混沌映射Logistic,但它在[0,0.1]和[0.9,1]两个范围的取值概率较高,而且寻优速度受Logistic遍历不均匀性的影响,会降低算法效率。单梁等指出Tent映射比Logistic具有更好的遍历均匀性和更快的迭代速度。且在[0,1]间产生的混沌序列分布均匀。而Tent映射表达式如下:
在这里插入图片描述
笔者根据Tent映射的特性,在可行域中产生Tent映混沌序列,提出了Tent混沌反向初始化方法学习初始化策略,即利用Tent混沌序列产生初始解Xi,为每个初始解产生对应的反向解OPi=K(XdminXdmax)-Xi,其中K为[0,1]间的随机数。最后对两类解排序选择,将适应度值较优的前N个解作为初始种群的解,这有助于求解效率的提高与解质量的改善。

2 位置更新调整策略
在灰狼种群接近目标过程中,其位置更新方程式(12)表现出α、β和δ位置的同等重要性,却忽略了三者的不同特征,灰狼α的领导位置与最优解的所占比例在式(12)中没有得到很好的体现。本文采用适应度值去衡量个体重要性,对位置更新方程式(12)进行改进,采用式(15)进行位置更新:
在这里插入图片描述
3 混沌局部搜索策略
混沌具有相空间的遍历性和内在随机性,利用混沌序列的搜索算法可以在迭代中产生局部最优解的许多邻域点,进行优化搜索能够跳出局部最优。本文采用的Tent混沌搜索是以当前搜索到的灰狼群体的最优位置Xk=(xk1,xk2,…,xk D)为基础,利用Tent混沌搜索产生的最优解作为新的灰狼位置或灰狼种群的全局极值,使其跳出局部最优。假设[Xdmin,Xdmax]是搜索空间范围,Xdmin、Xdmax分别表示所有初始解中第d维向量的最小值和最大值。混沌搜索主要步骤如下:
在这里插入图片描述

二、部分源代码

tic % 计时
%% 清空环境导入数据
clear
clc
close all
format long
load wndspd
%% HGWO-SVR
% 训练/测试数据准备
x=wndspd;
embed=6;        % 用多少个来预测
test_size=12;   % 预测多少个数据
[input_train,output_train,input_test,output_test]=transfer(x,embed,1,1,1,length(x)-test_size);
input_train=input_train'; % 训练集输入 m行n列,m表示样本个数,n表示每次用多少个预测下1个
output_train=output_train'; % 训练集输出 m行1列
input_test=input_test'; % 测试集输入   p行n列,p表示预测多少个数据
output_test=output_test'; % 测试集输出 p行1列
para=[20,20,0.2,0.8,0.2];
% 分别表示:种群规模、最大迭代次数、缩放因子下界、缩放因子上界、交叉概率
[bestc,bestg,test_pre]=my_HGWO_SVR(para,input_train,output_train,input_test,output_test);

%% 打印参数选择结果
disp('打印选择结果');
str=sprintf('Best bestc = %g,Best bestg = %g',bestc,bestg);
disp(str)

%% 画图
err_pre=x(end-test_size+1:end)-test_pre;
figure('Name','测试数据残差图')
set(gcf,'unit','centimeters','position',[0.5,5,30,5])
plot(err_pre,'*-');
figure('Name','原始-预测图')
plot(test_pre,'*r-');hold on;plot(x(end-test_size+1:end),'bo-');
legend('预测','原始')
set(gcf,'unit','centimeters','position',[0.5,13,30,5])

%% 预测性能计算
result=[x(end-test_size+1:end),test_pre];
MAE=mymae(result(:,1),result(:,2));
MAPE=mymape(result(:,1),result(:,2));
MSE=mymse(result(:,1),result(:,2));

%% 显示程序运行时间
toc
function [X_train,Y_train,X_test,Y_test]=transfer(indata,lag_day,horizon,interval,start_train,end_train)

%   input   
%   indata           : N * 1 vector with the input of original data
%   lag                : 1 * 1
%   horizon         : 1 * 1
%   start_train     : 1 * 1
%   end_train       : 1 * 1
%   length_test     : 1 * 1

%  output

%    X_train              : x  for training 
%    Y_train              : y  for training 
%    X_test               : x  for testing
%    Y_test               : y  for testing

total_lag_day=lag_day+horizon-1;
input_node=ceil(lag_day/interval);
index=start_train;
train_size=end_train-start_train+1-total_lag_day;
for i=1:train_size
   orip(:,i)= indata(index:index+lag_day -1);
   T(i)=indata(index+total_lag_day,1);
   pointer=lag_day;
   for j=input_node:-1:1 
      P(j,i)=orip(pointer,i);
      pointer=pointer-interval;
   end
   index=index+1;
end
start_test=end_train+1;
start_test=start_test-total_lag_day;
index=start_test;
testsize=length(indata)-start_test+1-total_lag_day;
for i=1:testsize
   oritestp(:,i) = indata(index:index+lag_day -1);
   act(i)=indata(index + total_lag_day );
   pointer= lag_day;
   for j=input_node:-1:1
      testp(j,i)=oritestp(pointer,i);
      pointer=pointer-interval;
   end
   index=index+1;
end

X_train=P;
Y_train=T;
X_test=testp;
Y_test=act;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94

三、运行结果

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

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
[4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
[5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.
[6]徐辰华,李成县,王尤军,林小峰.基于混沌灰狼优化算法的氧化铝质量指标预测模型[J].广西大学学报(自然科学版). 2016,41(06)

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/121798306

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。