差分优化算法(DE)matlb源码中文注解
来源:
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源码中文注解相关推荐
- C++N queensN皇后的优化算法(附完整源码)
N queensN皇后的优化算法 N queensN皇后的优化算法的完整源码(定义,实现,main函数测试) N queensN皇后的优化算法的完整源码(定义,实现,main函数测试) #includ ...
- 多目标人工秃鹫优化算法(MATLAB源码分享,智能优化算法) 提出了一种多目标版本的人工秃鹫优化算法(AVOA)
多目标人工秃鹫优化算法(MATLAB源码分享,智能优化算法) 提出了一种多目标版本的人工秃鹫优化算法(AVOA),用于多目标优化问题. AVOA的灵感来源于非洲秃鹫的生活方式. 档案.网格和领导者选择 ...
- 差分优化算法——DE
- GRBL V1.1f源码中文注解--GCode篇
Grbl是一个用于控制机器的运动的免费的,开源的,高性能的软件,制造物体或使东西移动,并将直接在Arduino平台上运行.如果制造商运动是一个行业,Grbl将是行业标准. 大多数开源3D打印机的核心都 ...
- FA(萤火虫算法)MATLAB源码详细中文注解
以优化SVM算法的参数c和g为例,对FA(萤火虫算法)MATLAB源码进行了逐行中文注解. 完整程序和示例文件地址:http://download.csdn.net/detail/u013337691 ...
- 头脑风暴算法BSO优化BP神经网络-matlab源码
原理:头脑风暴算法主要运用聚类和变异,他是通过模拟人们的解决问题的思想,办法而创立. 算法采用K-means聚类算法,将相似的个体聚成k类,并将人为设定的适应度函数值最优的个体作为聚类的中心.当然,为 ...
- 【Matlab多目标优化求解】遗传优化萤火虫算法求解多目标优化问题【含源码 1484期】
一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]遗传优化萤火虫算法求解多目标优化问题[含源码 1484期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...
- 【Matlab多目标优化求解】粒子群算法求解智能微电网多目标优化问题【含源码 383期】
一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]粒子群算法求解智能微电网多目标优化问题[含源码 383期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...
- 【Matlab多目标优化求解】粒子群算法求解配电网抢修优化问题【含源码 777期】
一.代码运行视频(哔哩哔哩) [Matlab多目标优化求解]粒子群算法求解配电网抢修优化问题[含源码 777期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...
最新文章
- Cocos2d-x3.0 TestCPP文件夹笔记
- 再见 Python,Hello Julia!
- jq实现点事图片移动_新品速递 | 移动云图片文字识别类产品全新版本惊喜登场...
- MS_DOS头部 IMAGE_DOS_HEADER
- HP服务器ile进系统,HP GEN10服务器UEFI安装Windows Sverver 2012 R2教程
- svn 地址中文_iGit自助迁移SVN工程解密
- fixed 相对于父容器定位
- python学习中软件开发知识点_Python 学习知识点总结归纳
- App自动化测试前期准备---android SDK配置
- Spark源码系列(二)RDD详解
- matlab程序设计课件,《MATLAB程序设计》PPT课件.ppt
- 从零开始学习CANoe(二)—— CANdb++ 创建 dbc文件
- 安卓外置SD卡linux,Android获取机身存储、内置SD卡与外置TF卡路径
- android 模拟器 评测,安卓模拟器哪个更好?四款主流安卓模拟器测评
- 更好地保护眼睛从现在做起!
- mds聚类matlab,机器学习C9笔记:MDS聚类可视化
- windows怎么查看本地80端口被占用
- 04、Netty学习笔记—(黏包半包及协议设计解析)
- Java实现excel大数据量导出
- clip python_python中numpy模块下的np.clip()的用法
热门文章
- neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead
- 干货|建议初创团队起初也要构建分布式应用
- postgresql开发中可能有用的知识
- JAVA条件表达式的陷阱
- 加密货币银行是什么?它又将如何运作?
- 如何选择分布式系统(区块链)协议?
- 巨石加密_点餐:如何吃一个可怕的巨石
- 遂宁专业计算机学校,遂宁计算机专业中职学校哪家强
- Python培训分享:Python发展前景怎么样?
- 什么是Python线程?Python线程如何创建?