混合粒子群算法:基于模拟退火的算法
更新时间:2023-03-11 12:37:01 阅读量: 教育文库 文档下载
混合粒子群算法:基于模拟退火的算法
1. 算法原理
模拟退火算法在搜索过程中具有概率突跳的能力,能够有效地避免搜索过程中陷入局部极小解。模拟退火算法在退火过程中不但接受好的解,而且还以一定的概率接受差得解,同时这种概率受到温度参数的控制,其大小随温度的下降而减小。
2. 算法步骤
(1) 随机初始化种群中各微粒的位置和速度;
(2) 评价每个微粒的适应度,将当前各微子的位置和适应值存储在各微子的pi中,将所
有pbest的中适应最优个体的位置和适应值存储在pg中;
(3) 确定初始温度;
(4) 根据下式确定当前温度下各pi的适配值:
eN?(f(pi)?f(pg))/tTF(pi)?
?(f(pi)?f(pg))/t?ei?1(5) 采用轮盘赌策略从所有pi中确定全局最优的某个替代值pg?,然后根据下式更新各
微粒的速度和位置:
vi,j(t?1)???vi,j(t)?c1r1[pi,j?xi,j(t)]?c2r2[pg,j?xi,j(t)]?
xi,j(t?1)?xi,j(t)?vi,j(t?1),j?1,2,...d
??2?C?2C?4C2,C?c1?c2
(6) 计算各微粒新的目标值,更新各微粒的pi值及群体的pg值;
(7) 进行退温操作;
(8) 若满足停止条件(通常为预设的运算精度或迭代次数),搜索停止,输出结果,否知
返回(4)继续搜索;
(9) 初始温度和退温温度对算法有一定的影响,一般采用如下的初温和退温方式:
tk?1??kk,t0?f(pg)/ln5
3. 算法MATLAB实现
在MATLAB中编程实现的基于杂交的粒子群算法优化函数为:SimuAPSO。
功能:用基于模拟退火的粒子群算法求解无约束优化问题。
调用格式:[xm,fv]?SimuAPSO(fitness,N,c1,c2,lamda,M,D) 其中,fitness:待优化的目标函数; N:粒子数目; c1:学习因子1; c2:学习因子2;
a lamd:退火常数;
M:最大迭代次数;
D:自变量的个数;
xm:目标函数取最小值时的自变量值; fv:目标函数的最小值。
基于模拟退火的粒子群算法的MATLAB代码如下: function [xm,fv]=SimuAPSO(fitness,N,c1,c2,lamda,M,D) % fitness:待优化的目标函数; % N:粒子数目; % c1:学习因子1; % c2:学习因子2;
% lamda:退火常数; % M:最大迭代次数; % D:自变量的个数;
% xm:目标函数取最小值时的自变量值; % fv:目标函数的最小值。 format long;
for i=1:N
for j=1:D
x(i,j)=randn; %随机初始化位置 v(i,j)=randn; %随机初始化速度 end end for i=1:N
p(i)=fitness(x(i,:)); y(i,:)=x(i,:); end
pg=x(N,:); %pg为全局最优 for i=1:(N-1)
if fitness(x(i,:)) end end T=fitness(pg)/log(5); %初始温度 for t=1:M groupFit=fitness(pg); for i=1:N %当前温度下各个pi的适应值 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 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,:); if fitness(x(i,:)) if p(i) T=T*lamda; end xm=pg'; fv=fitness(pg); 例 基于模拟退火的粒子群算法应用实例。求下面函数的最小值 ?f(x)??0.01???5?1?i?11i??xi?1?2????,?10?xi?10,i?1,2,...5 取粒子数目为40,学习因子都取2.05,迭代步数取10000,退火常数取为0.5。 解: 首先建立目标函数文件fitness.m: function F=fitness(x) F=0; for i=1:5 F=F+1/(i+(x(i)-1)^2); end F=1/(0.01+F); 在MATLAB命令窗口中输入: >> [xm,fv]=SimuAPSO(@fitness,40,2.05,2.05,0.5,10000,5) 所得结果为: xm = 0.999999992830566 0.999999968868289 1.000000045205848 0.999999990239291 0.999999963875179 fv = 0.436046511627907 从结果可以看出,基于模拟退火的粒子群算法求得的结果精度是非常高的。
正在阅读:
混合粒子群算法:基于模拟退火的算法03-11
“两人三足齐奔跑,博雅生活欢乐多”第二周主题活动报道06-04
村镇银行关于理财、同业情况报告10-20
《狼性销售精英魔鬼特训》 - 图文01-02
第七章 结构游戏207-19
工贸行业安全生产标准化评定标准汇编04-08
吸饵钓法03-08
安全教育-道路运输企业安全教育培训计划03-11
基于单片机的烟雾检测报警系统06-21
小学生每日优秀作文06-15
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 算法
- 退火
- 粒子
- 混合
- 基于
- 模拟