% ----------------------- README ------------------------------------------
% ------------------- 原创声明 -------------------------------------------
% -------------- 最后一次修改:2023/7/10 -----------------------------------
% ------------------- 欢迎关注₍^.^₎♡ -------------------------------------
% -------------- 项目:模拟退火-粒子群自适应优化算法应用于函数寻优 ------------
% -------------- 微信公众号:KAU的云实验台 ----------------------------------
% -------------- CSDN:KAU的云实验台 ---------------------------------------
% -------------------------------------------------------------------------
%% 自适应改进策略:
% 1 非线性修改惯性权重,根据全局最优点的距离调整
% 2 混沌映射初始化粒子-Logistic映射
% 3 学习因子异步动态变化
%% 适应度越小越好
%% 清空环境
clc
clear
close all
fun = @Rosenbrock_;%Sphere_ Griewank_ Rastrigin_ Rosenbrock_
%种群
% SP
% popmax=100;popmin=-100;
% GR(这个函数需把粒子的Vmax Vmin改一下 因为范围太大)
% popmax=600;popmin=-600;
% RA
% popmax=5.12;popmin=-5.12;
% RO
popmax=30;popmin=-30;
%% 参数初始化
%粒子群算法中的两个参数
maxgen=300; % 进化次数
sizepop=100; %种群规模
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 改进1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 动态学习因子
c1fun = @(t) 2*sin(pi/2*(1-t/maxgen))^2;
c2fun = @(t) 2*sin(pi*t/(2*maxgen))^2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 改进1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 速度上下限
Vmax=0.5;
Vmin=-0.5;
% 变量维度
D=2;
% 线性递减惯性权重
wmax=0.9;
wmin=0.4;
% 模拟退火参数
lamda = 0.8;% 退火系数
%% 产生初始粒子和速度
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 改进2 %%%%%%%%%%%%%%%%%%%%%%%%%%%
% 混沌初始化
Z = zeros(sizepop, D);
% 随机生成一个d维向量
Z(1, :) = rand(1, D);
% 利用logistic生成sizepop个向量
for i=2:sizepop
Z(i,:) = 4.0*Z(i-1,:).*(1-Z(i-1,:));
end
% 将z的各个分量载波到对应变量的取值区间
pop = zeros(sizepop, D);
for i=1:sizepop
pop(i,:) = popmin + (popmax - popmin).*Z(i,:);
V(i,:)=(Vmax-Vmin).*Z(i,:)+Vmin; %初始化速度
%计算适应度
fitness(i)=fun(pop(i,:)); %染色体的适应度
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 改进2 %%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 个体极值和群体极值
[bestfitness bestindex]=min(fitness);
zbest=pop(bestindex,:); %全局最佳
gbest=pop; %个体最佳
fitnessgbest=fitness; %个体最佳适应度值
fitnesszbest=bestfitness; %全局最佳适应度值
favg = sum(fitness)/sizepop;
fmax = max(fitness);
% 退火初温
T=-fitnesszbest/log(0.2);
%% 迭代寻优
for i=1:maxgen
c1 = c1fun(i);
c2 = c2fun(i);
% 计算粒子的退火算法适应度
for ii=1:sizepop
Tfit(ii) = exp( - (fitness(ii) - fitnesszbest)/T);
end
SumTfit = sum(Tfit);
Tfit = Tfit/SumTfit;
pBet = rand();
% 将满足条件的第iii个粒子代替全局最优
for iii=1:sizepop
ComFit(iii) = sum(Tfit(1:iii));
if pBet <= ComFit(iii)
zbest_plus = pop(iii,:);
break;
end
end
% 更新粒子速度
for j=1:sizepop
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 改进3 %%%%%%%%%%%%%%%%%%%%%%%%%
% 惯性权重非线性递减
if fitness(j) <= favg % 若适应度优于平均值 惯性权重小
w = wmin + (fmax-fitness(j))*(wmax-wmin)/(fmax-favg);
else
w = wmax;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 改进3 %%%%%%%%%%%%%%%%%%%%%%%%%
%速度更新
V(j,:) = w*V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest_plus - pop(j,:));
V(j,find(V(j,:)>Vmax))=Vmax;
V(j,find(V(j,:)<Vmin))=Vmin;
%位置更新
pop(j,:)=pop(j,:)+V(j,:);
pop(j,find(pop(j,:)>popmax))=popmax;
pop(j,find(pop(j,:)<popmin))=popmin;
%适应度值
fitness(j)=fun(pop(j,:));
end
% 适应度,平均适应度,最劣
favg = sum(fitness)/sizepop;
fmax = max(fitness);
% 更新种群
for j=1:sizepop
%个体最优更新
if fitness(j) < fitnessgbest(j)
gbest(j,:) = pop(j,:);
fitnessgbest(j) = fitness(j);
end
%群体最优更新
if fitness(j) < fitnesszbest
zbest = pop(j,:);
fitnesszbest = fitness(j);
end
end
T = T*lamda;
yy1(i)=fitnesszbest;
end
fitnesszbest1 = fitnesszbest;
zbest1 = zbest;
%% 结果分析
save SA-IPSO.mat yy1 zbest1 fitnesszbest1
plot(yy1,'Color',[021 151 165]/255,'LineWidth',3)
title('SA-IPSO最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);
disp('*************************************************');
disp('目标函数取最小值时的自变量:');
zbest
disp('目标函数的最小值为:')
fitnesszbest
disp('**************************************************');
qq_39031990
- 粉丝: 0
- 资源: 3
最新资源
- 动力总成项目质量管理流程及节点验收标准解析
- 人工智能图像迁移作业-使用VGG19网络迁移学习实现图片风格迁移项目python源码+模型.zip
- 基于 Direct3D 的软件的调试工具.zip
- 基于C#的实时数据监控与报警系统实现关键步骤
- 在游戏窗口顶部写入消息的库.zip
- 扩展EC2 Linux实例的EBS根卷
- 在没有 CUDA 支持的移动设备上使用 Direct 3D(级别 9.3)执行立体匹配算法 .zip
- 在无边框窗口中玩您最喜爱的游戏不再需要花费时间按 Alt-Tab .zip
- OPC Server的C#代码,采用wtopcsvr.dll开发
- 在图形应用程序中呈现 Windows 字体的小型单头 C++ 库.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈