模拟退火粒子群优化算法控制程序
%%%%%基于模拟退火粒子群优化函数——轮盘赌策略迭代
%%%%惯性权重二次缩减
clc
clear
%%%%
%导入训练数据和测试数据
train_input=xlsread('Sample Data2',['AA2:AG111']);
train_out=xlsread('Sample Data2',['Z2:Z111']);
test_input=xlsread('Sample Data2',['AA112:AH141']);
test_out=xlsread('Sample Data2',['Z112:Z141']);
%%归一化
[train_data ,pstrain0] = mapminmax(train_input',0,1);
[test_data] = mapminmax('apply',test_input',pstrain0);
[train_result,pstrain1] = mapminmax(train_out',0,1);
[test_result] = mapminmax('apply',test_out',pstrain1);
%%取转置
train_data = train_data';
train_result=train_result';
test_data = test_data';
%%参数初始化
N=80; %%%种群规模
c1=1.5;
c2=2.0;
c1f=0.5;c1i=2.5; %c1f、c1i表示对应的最终和初始值
c2f=2.5;c2i=0.5; %%%%认知因子
wmax=1.2;
wmin=0.8; %%%%惯性权重的取值范围
xmax=[1000 100];
xmin=[0.1 0.01];%%%%%%位置范围
M=400; %%%%%迭代次数
%MaxC=10; %%%%%混沌搜索步数
D=2; %%%%%问题维数
vmax=[500 50];
vmin=[-500 -50]; %%%%速度范围
lamda=0.8; %%%%退火常数
eps=10^(-8); %机器的浮点运算误差限,当某个数小于它时则记为0
%%定义LSSVM相关参数
type='function estimation'; %回归
%type=’c’,表示classification 分类,type=’f’,表示回归。
kernel='RBF_kernel'; %LSSVM的核函数选取为径向基内核
proprecess='proprecess';
%proprecess表明数据已归一化处理,original表明数据没有进行归一化处理
format long;
%%
%------初始化种群的个体------------
for i=1:N
for j=1:D
x(i,j)=(xmax(1,j)-xmin(1,j))*rand(1,1)+xmin(1,j); %随机初始化位置
v(i,j)=vmax(1,j)*rands(1,1); %随机初始化速度
end
end
%------先计算各个粒子的适应度,并初始化个体适应度P(i)和群体最优适应度Pg----------------------
for i=1:N
%%%%%计算各个粒子的适应度p(i)
gam=x(i,1);sig2=x(i,2);
model=initlssvm(train_data,train_result,type,gam,sig2,kernel,proprecess);
model=trainlssvm(model);
%求出训练集和测试集的预测值
[train_predict_y,zt,model]=simlssvm(model,train_data);
[test_predict_y,zt,model]=simlssvm(model,test_data);
%训练集和测试集的预测数据反归一化
train_predict=mapminmax('reverse',train_predict_y',pstrain1);%训练集预测值
test_predict=mapminmax('reverse',test_predict_y',pstrain1); %测试集预测值
%%%%预测数据四舍五入保留一位有效数字
train_predict=roundn(train_predict,-1);
test_predict=roundn(test_predict,-1);
%计算均方差
result=[train_out;test_out];
predict=[train_predict';test_predict'];
allmse=(sum(((result-predict)./result).^2))/length(result);
fitness(i)=allmse; %以所有数据的预测值计算的均方差为适应度值
p(i)=fitness(i);
y(i,:)=x(i,:);
end
pg = x(N,:); %Pg为全局最优
for i=1:(N-1)
%%%%%计算群体粒子的最优适应度pg
gam=pg(1);sig2=pg(2);
model=initlssvm(train_data,train_result,type,gam,sig2,kernel,proprecess);
model=trainlssvm(model);
%求出训练集和测试集的预测值
[train_predict_y,zt,model]=simlssvm(model,train_data);
[test_predict_y,zt,model]=simlssvm(model,test_data);
%训练集和测试集的预测数据反归一化
train_predict=mapminmax('reverse',train_predict_y',pstrain1);%训练集预测值
test_predict=mapminmax('reverse',test_predict_y',pstrain1); %测试集预测值
%%%%预测数据四舍五入保留一位有效数字
train_predict=roundn(train_predict,-1);
test_predict=roundn(test_predict,-1);
%计算均方差
result=[train_out;test_out];
predict=[train_predict';test_predict'];
allmse=(sum(((result-predict)./result).^2))/length(result);
global_fitness=allmse; %以所有数据的预测值计算的均方差为适应度值
if p(i)
pg=x(i,:);
end
end
%%
%------进入主要循环,按照公式依次迭代------------
T=global_fitness/log(5); %%%设置初始温度
for t=1:M
groupFit=global_fitness %%%%群体最优
%%%根据轮盘赌策略公式确定当前温度下各粒子的适配值
for i=1:N
Tfit(i) = exp( - (p(i) - groupFit)/T);
end
SumTfit = sum(Tfit);
Tfit = Tfit/SumTfit;
pBet = rand();
for i=1:N
ComFit(i)=sum(Tfit(1:i));
if pBet<=ComFit(i)
pg_plus=x(i,:);
break;
end
end
c1f=c1i+(c1f-c1i)*t/M;%%c1f递减
c2f=c2i+(c2f-c2i)*t/M; %%c2f递增
C=c1+c2;
ksi=2/abs(2-C-sqrt(C^2-4*C));
%%%%%%%更新粒子的速度与位置
for i=1:N
v(i,:)=ksi*(v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg_plus-x(i,:)));
x(i,:)=x(i,:)+v(i,:);
%%%限制粒子的速度与位置的大小在取值范围之内
for j=1:D
if v(i,j)>vmax(1,j)
v(i,j)=vmax(1,j);
end
if v(i,j)
v(i,j)=vmin(1,j);
end
if x(i,j)>xmax(1,j)
x(i,j)=xmax(1,j);
end
if x(i,j)
x(i,j)=xmin(1,j);
end
end
%%%%%%%计算更新后粒子的适应度
gam=x(i,1);sig2=x(i,2);
model=initlssvm(train_data,train_result,type,gam,sig2,kernel,proprecess);
model=trainlssvm(model);
%求出训练集和测试集的预测值
[train_predict_y,zt,model]=simlssvm(model,train_data);
[test_predict_y,zt,model]=simlssvm(model,test_data);
%训练集和测试集的预测数据反归一化
train_predict=mapminmax('reverse',train_predict_y',pstrain1);%训练集预测值
test_predict=mapminmax('reverse',test_predict_y',pstrain1); %测试集预测值
%%%%预测数据四舍五入保留一位有效数字
train_predict=roundn(train_predict,-1);
test_predict=roundn(test_predict,-1);
%计算均方差
result=[train_out;test_out];
predict=[train_predict';test_predict'];
allmse=(sum(((result-predict)./result).^2))/length(result);
fitness(i)=allmse; %以所有数据的预测值计算的均方差为适应度值
local_fit(i)=fitness(i);
if local_fit(i)
p(i)=local_fit(i);
y(i,:)=x(i,:);
end
if p(i) pg=y(i,:);
end
end
T=T*lamda;%%%%%%降温
yy(t)=groupFit;
end
xm=pg'
fv=groupFit
hold on
plot(yy,'g')
hold off
%title(['适应度曲线 ' '终止代数=' num2str(M)]);
%xlabel('进化代数');ylabel('适应度');
模拟退火粒子群优化算法控制程序相关推荐
- 【优化求解】基于自适应模拟退火粒子群优化算法求解单目标优化问题matlab代码
1 简介 针对PSO算法在求解问题的优化问题中易陷入局部收敛且收敛速度较慢等缺陷,引入一种初始化改进策略,并将模拟退火算法与PSO算法相结合,提出了一种全新的算法.该算法将寻优过程分为两个阶段:为了提 ...
- matlab——智能算法之粒子群优化算法、模拟退火算法、遗传算法
智能算法之粒子群优化算法: %% 初始化种群 f= % 函数表达式 % 求这个函数的最大值 figure(1);ezplot(f,[0,0.01,20]); N = 50; % 初始种群个数 d = ...
- 粒子群优化算法分布式电源选址定容 matlab源代码,分析了分布式电源接入配电网前后对网络损耗的影响,在此基础上提出采用混合模拟退火算法的改进粒子群优化算法进行分布式电源选址和定代码按照高水平文章复现
(1)粒子群优化算法分布式电源选址定容 如图12 matlab源代码,代码按照高水平文章复现,保证正确 分析了分布式电源接入配电网前后对网络损耗的影响,在此基础上提出采用混合模拟退火算法的改进粒子群优 ...
- 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用
粒子群优化算法-Python版本和Matlab函数 particleswarm 调用 前两天分享了粒子群优化算法的原理和Matlab原理实现,本文分享一下Python代码下的PSO实现以及Matlab ...
- 2021-01-26 粒子群优化算法(PSO)以及Matlab实现
粒子群优化算法(PSO)以及Matlab实现 1.粒子群算法 粒子群算法是一种智能优化算法.关于智能,个人理解,不过是在枚举法的基础上加上了一定的寻优机制.试想一下枚举法,假设问题的解空间很小,比如一 ...
- 基于动态邻域的切换粒子群优化算法
英文: A Dynamic Neighborhood-Based Switching Particle Swarm Optimization Algorithm 摘要: 本文提出了一种基于动态邻域的切 ...
- 智能算法系列之粒子群优化算法
本博客封面由ChatGPT + DALL·E 2共同创作而成. 文章目录 前言 1. 算法思想 2. 细节梳理 2.1 超参数的选择 2.2 一些trick 3. 算法实现 3.1 问题场景 3. ...
- 粒子群优化算法(PSO算法)
目录 粒子群算法的发展 粒子群算法的概述 粒子群算法的步骤与实现 算法步骤 算法的实现(MATLAB) 调用示例 关于惯性权重[^7] 自适应权重法 随机权重法 关于学习因子[^8] 同步变化的学习因 ...
- 改进粒子群优化算法(IWAPSO)的MATLAB源程序
改进粒子群优化算法(IWAPSO)的MATLAB源程序 作者:aaron8967 主页:http://aaron8967.blog.51cto.com 说明:粒子群优化算法(Particle S ...
最新文章
- 搭建Zabbix分布式监控
- JBPM对象主键生成机制
- c# enum 解析
- 9soc sensor与bayer sensor 区别,内外置isp
- nodejs读取本地txt文件并输出到浏览器
- flink的scala版本的wordcount+flink没有输出结果的几种原因
- javascript --- DOM0级、DOM2级、跨浏览器 的事件处理程序
- C# 哈希表(Hashtable)用法笔记
- C/C++中near和far的区别
- chrome样式不生效_Chrome开发者工具的11个使用技巧
- 一个比较完整的pytorch项目
- sfm点云代码_PCL点云显示sfm数据
- Layabox 2 使用其它编辑器开发layabox2d
- 15.2,opencv绘制人脸识别框
- OneTab插件的替代产品-OneTab Pro
- 组合导航(六):惯性导航误差建模
- 传统企业PaaS平台功能设计与业务上云思考
- CTSCAPIO 2017游记
- echarts设置标题样式,echarts设置主标题和副标题样式
- matlab绘制磁场图,基于Matlab的电磁场图示化教学
热门文章
- 实验五 输入输出练习_JAVA
- ubuntu13.10上交叉编译win32运行的vlc2.0.3总结
- 【Socket网络编程】11.网络编程中的 数据封装 和 数据拆封
- jQuery最佳实践
- Vue.js Class 与 Style 绑定
- java中byte, iso-8859-1, UTF-8,乱码的根源
- MFC90条技巧-带目录
- 【Visual C++】一些开发心得与调试技巧
- Coursera课程Python for everyone:Quiz: Multi-Table Relational SQL
- 鸟哥的Linux私房菜(基础篇)- 第二十五章、 Linux 备份策略