来源:

DE(差分进化)优化算法MATLAB源码详细中文注解 - CSDN博客

https://blog.csdn.net/u013337691/article/details/53018827?locationNum=3&fps=1

以优化SVR算法的参数c和g为例,对DE(差分进化)算法MATLAB源码进行了详细中文注解。 
完整程序和示例文件地址:http://download.csdn.net/detail/u013337691/9671714 
百度云链接: http://pan.baidu.com/s/1dEYAHS9 密码: 6xw5

function [bestc,bestg,test_pre]=my_DE_SVR(para,input_train,output_train,input_test,output_test)
% 参数向量 parameters [n,N_iteration,beta_min,beta_max,pCR]
% n为种群规模,N_iteration为迭代次数
% beta_min 缩放因子下界 Lower Bound of Scaling Factor
% beta_max=0.8; % 缩放因子上界 Upper Bound of Scaling Factor
% pCR 交叉概率 Crossover Probability
% 要求输入数据为列向量(矩阵)%% 数据归一化
[input_train,rule1]=mapminmax(input_train');
[output_train,rule2]=mapminmax(output_train');
input_test=mapminmax('apply',input_test',rule1);
output_test=mapminmax('apply',output_test',rule2);
input_train=input_train';
output_train=output_train';
input_test=input_test';
output_test=output_test';
%% 利用差分进化(DE)算法选择最佳的SVR参数
nPop=para(1); % 种群规模 Population Size
MaxIt=para(2); % 最大迭代次数Maximum Number of Iterations
nVar=2; % 自变量维数,此例需要优化两个参数c和g Number of Decision Variables
VarSize=[1,nVar]; % 决策变量矩阵大小 Decision Variables Matrix Size
beta_min=para(3); % 缩放因子下界 Lower Bound of Scaling Factor
beta_max=para(4); % 缩放因子上界 Upper Bound of Scaling Factor
pCR=para(5); %  交叉概率 Crossover Probability
lb=[0.01,0.01]; % 参数取值下界
ub=[100,100]; % 参数取值上界
%% 初始化 Initialization
empty_individual.Position=[]; % 种群初始化
empty_individual.Cost=[]; % 种群目标函数值初始化
BestSol.Cost=inf; % 最优值初始化
pop=repmat(empty_individual,nPop,1); % 将保存种群信息的结构体扩展为结构体矩阵,行数等于种群大小
for i=1:nPop % 遍历每个个体pop(i).Position=init_individual(lb,ub,nVar,1); % 随机初始化个体    pop(i).Cost=fobj(pop(i).Position,input_train,output_train,input_test,output_test); % 计算个体目标函数值if pop(i).Cost<BestSol.Cost % 如果个体目标函数值优于当前最优值BestSol=pop(i); % 更新最优值end
end
BestCost=zeros(MaxIt,1); % 初始化迭代最优值
%% 主循环 DE Main Loop
for it=1:MaxItfor i=1:nPop % 遍历每个个体x=pop(i).Position; % 提取个体位置% 随机选择三个个体以备变异使用A=randperm(nPop); % 个体顺序重新随机排列A(A==i)=[]; % 当前个体所排位置腾空(产生变异中间体时当前个体不参与)a=A(1);b=A(2);c=A(3);% 变异操作 Mutationbeta=unifrnd(beta_min,beta_max,VarSize); % 随机产生缩放因子y=pop(a).Position+beta.*(pop(b).Position-pop(c).Position); % 产生中间体% 防止中间体越界y=max(y,lb);y=min(y,ub);% 交叉操作 Crossoverz=zeros(size(x)); % 初始化一个新个体j0=randi([1,numel(x)]); % 产生一个伪随机数,即选取待交换维度编号???for j=1:numel(x) % 遍历每个维度if j==j0 || rand<=pCR % 如果当前维度是待交换维度或者随机概率小于交叉概率z(j)=y(j); % 新个体当前维度值等于中间体对应维度值elsez(j)=x(j); % 新个体当前维度值等于当前个体对应维度值endendNewSol.Position=z; % 交叉操作之后得到新个体NewSol.Cost=fobj(NewSol.Position,input_train,output_train,input_test,output_test); % 新个体目标函数值if NewSol.Cost<pop(i).Cost % 如果新个体优于当前个体pop(i)=NewSol; % 更新当前个体if pop(i).Cost<BestSol.Cost % 如果当前个体(更新后的)优于最优个体BestSol=pop(i); % 更新最优个体endendend    % 保存当前迭代最优个体函数值 Update Best CostBestCost(it)=BestSol.Cost;
end
bestc=BestSol.Position(1,1);
bestg=BestSol.Position(1,2);
%% 图示寻优过程
plot(BestCost);
xlabel('Iteration');
ylabel('Best Val');
grid on;
%% 利用回归预测分析最佳的参数进行SVM网络训练
cmd_cs_svr=['-s 3 -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg)];
model_cs_svr=svmtrain(output_train,input_train,cmd_cs_svr); % SVM模型训练
%% SVM网络回归预测
[output_test_pre,~]=svmpredict(output_test,input_test,model_cs_svr); % SVM模型预测及其精度
test_pre=mapminmax('reverse',output_test_pre',rule2);
test_pre = test_pre';
  • 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
%% SVR_fitness -- objective function
function fitness=fobj(cv,input_train,output_train,input_test,output_test)
% cv为长度为2的横向量,即SVR中参数c和v的值cmd = ['-s 3 -t 2',' -c ',num2str(cv(1)),' -g ',num2str(cv(2))];
model=svmtrain(output_train,input_train,cmd); % SVM模型训练
[~,fitness]=svmpredict(output_test,input_test,model); % SVM模型预测及其精度
fitness=fitness(2); % 以平均均方误差MSE作为优化的目标函数值
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
function x=init_individual(xlb,xub,dim,sizepop)
% 参数初始化函数
% lb:参数下界,行向量
% ub:参数上界,行向量
% dim:参数维度
% sizepop 种群规模
% x:返回sizepop*size(lb,2)的参数矩阵
xRange=repmat((xub-xlb),[sizepop,1]);
xLower=repmat(xlb,[sizepop,1]);
x=rand(sizepop,dim).*xRange+xLower;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
clear
clc
close all
load wndspd % 示例数据为风速(时间序列)数据,共144个样本
%% PSO-SVR
% 训练/测试数据准备(用前3天预测后一天),用前100天做训练数据
input_train(1,:)=wndspd(1:97);
input_train(2,:)=wndspd(2:98);
input_train(3,:)=wndspd(3:99);
output_train=[wndspd(4:100)]';
input_test(1,:)=wndspd(101:end-3);
input_test(2,:)=wndspd(102:end-2);
input_test(3,:)=wndspd(103:end-1);
output_test=[wndspd(104:end)]';
para=[30,200,0.2,0.8,0.2];
[bestc,bestg,test_pre]=my_DE_SVR(para,input_train',output_train',input_test',output_test');
% 预测误差计算
MSE=mymse(output_test',test_pre)
MAE=mymae(output_test',test_pre)
MAPE=mymape(output_test',test_pre)
FVD=myfvd(output_test',test_pre)
CDFR=mycdfr(output_test',test_pre)
%% 预测结果图
err_pre=output_test'-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(output_test,'bo-');
legend('预测','原始',0)
set(gcf,'unit','centimeters','position',[0.5,13,30,5])
toc

奈何没有数据集

差分优化算法(DE)matlb源码中文注解相关推荐

  1. C++N queensN皇后的优化算法(附完整源码)

    N queensN皇后的优化算法 N queensN皇后的优化算法的完整源码(定义,实现,main函数测试) N queensN皇后的优化算法的完整源码(定义,实现,main函数测试) #includ ...

  2. 多目标人工秃鹫优化算法(MATLAB源码分享,智能优化算法) 提出了一种多目标版本的人工秃鹫优化算法(AVOA)

    多目标人工秃鹫优化算法(MATLAB源码分享,智能优化算法) 提出了一种多目标版本的人工秃鹫优化算法(AVOA),用于多目标优化问题. AVOA的灵感来源于非洲秃鹫的生活方式. 档案.网格和领导者选择 ...

  3. 差分优化算法——DE

  4. GRBL V1.1f源码中文注解--GCode篇

    Grbl是一个用于控制机器的运动的免费的,开源的,高性能的软件,制造物体或使东西移动,并将直接在Arduino平台上运行.如果制造商运动是一个行业,Grbl将是行业标准. 大多数开源3D打印机的核心都 ...

  5. FA(萤火虫算法)MATLAB源码详细中文注解

    以优化SVM算法的参数c和g为例,对FA(萤火虫算法)MATLAB源码进行了逐行中文注解. 完整程序和示例文件地址:http://download.csdn.net/detail/u013337691 ...

  6. 头脑风暴算法BSO优化BP神经网络-matlab源码

    原理:头脑风暴算法主要运用聚类和变异,他是通过模拟人们的解决问题的思想,办法而创立. 算法采用K-means聚类算法,将相似的个体聚成k类,并将人为设定的适应度函数值最优的个体作为聚类的中心.当然,为 ...

  7. 【Matlab多目标优化求解】遗传优化萤火虫算法求解多目标优化问题【含源码 1484期】

    一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]遗传优化萤火虫算法求解多目标优化问题[含源码 1484期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  8. 【Matlab多目标优化求解】粒子群算法求解智能微电网多目标优化问题【含源码 383期】

    一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]粒子群算法求解智能微电网多目标优化问题[含源码 383期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  9. 【Matlab多目标优化求解】粒子群算法求解配电网抢修优化问题【含源码 777期】

    一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]粒子群算法求解配电网抢修优化问题[含源码 777期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

最新文章

  1. Cocos2d-x3.0 TestCPP文件夹笔记
  2. 再见 Python,Hello Julia!
  3. jq实现点事图片移动_新品速递 | 移动云图片文字识别类产品全新版本惊喜登场...
  4. MS_DOS头部 IMAGE_DOS_HEADER
  5. HP服务器ile进系统,HP GEN10服务器UEFI安装Windows Sverver 2012 R2教程
  6. svn 地址中文_iGit自助迁移SVN工程解密
  7. fixed 相对于父容器定位
  8. python学习中软件开发知识点_Python 学习知识点总结归纳
  9. App自动化测试前期准备---android SDK配置
  10. Spark源码系列(二)RDD详解
  11. matlab程序设计课件,《MATLAB程序设计》PPT课件.ppt
  12. 从零开始学习CANoe(二)—— CANdb++ 创建 dbc文件
  13. 安卓外置SD卡linux,Android获取机身存储、内置SD卡与外置TF卡路径
  14. android 模拟器 评测,安卓模拟器哪个更好?四款主流安卓模拟器测评
  15. 更好地保护眼睛从现在做起!
  16. mds聚类matlab,机器学习C9笔记:MDS聚类可视化
  17. windows怎么查看本地80端口被占用
  18. 04、Netty学习笔记—(黏包半包及协议设计解析)
  19. Java实现excel大数据量导出
  20. clip python_python中numpy模块下的np.clip()的用法

热门文章

  1. neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead
  2. 干货|建议初创团队起初也要构建分布式应用
  3. postgresql开发中可能有用的知识
  4. JAVA条件表达式的陷阱
  5. 加密货币银行是什么?它又将如何运作?
  6. 如何选择分布式系统(区块链)协议?
  7. 巨石加密_点餐:如何吃一个可怕的巨石
  8. 遂宁专业计算机学校,遂宁计算机专业中职学校哪家强
  9. Python培训分享:Python发展前景怎么样?
  10. 什么是Python线程?Python线程如何创建?