%% 烟花算法进行函数优化
%fitness适应度函数,N烟花数,D变量维数,M变异火花数,Er爆炸半径,En爆炸数目
clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
rng('default');
N=30; % N烟花数
D=2; % D变量维数
M=5; % M变异火花数
En=6; % En爆炸数目
Er=5; % Er爆炸半径
a=0.3; % a,b为爆炸数目限制因子
b=0.6;
T=200; % T为迭代次数
%随机在解空间初始化N个烟花位置
x = zeros(N,D);
for i=1:N
x(i,1)=unifrnd(100,500,1,1); %随机初始化位置
x(i,2)=unifrnd(69,79,1,1);
end
%循环迭代
E_Spark=zeros(T,D,N);
Fit = zeros(1,N);
F = zeros(1,T);
for t=1:T
%计算每个烟花适应度值
for i=1:N
Fit(i)=fun_1(x(i,:));
end
[F(t),~]=min(Fit);
Fmin=min(Fit);
Fmax=max(Fit);
%计算每个烟花的爆炸半径E_R和爆炸数目E_N以及产生的爆炸火花
E_R = zeros(1,N);
E_N = zeros(1,N);
for i=1:N
E_R(i)=Er*((Fit(i)-Fmin+eps)/(sum(Fit)-N*Fmin+eps)); %爆炸半径
E_N(i)=En*((Fmax-Fit(i)+eps)/(N*Fmax-sum(Fit)+eps)); %爆炸数目
if E_N(i)<a*En % 爆炸数目限制
E_N(i)=round(a*En);
elseif E_N(i)>b*En
E_N(i)=round(b*En);
else
E_N(i)=round(E_N(i));
end
%产生爆炸火花 E_Spark
for j=2:(E_N(i)+1) % 第i个烟花共产生E_N(i)个火花
E_Spark(1,:,i)=x(i,:); % 将第i个烟花保存为第i个火花序列中的第一个,爆炸产生的火花从序列中的第二个开始存储(即烟花为三维数组每一页的第一行)
h=E_R(i)*(-1+2*rand(1,D)); % 位置偏移
E_Spark(j,:,i)=x(i,:)+h; % 第i个烟花(三维数组的i页)产生的第j(三维数组的j行)个火花
if E_Spark(j,1,i)>500||E_Spark(j,1,i)<100
E_Spark(j,1,i)=unifrnd(100,500,1,1);
end
if E_Spark(j,2,i)>79||E_Spark(j,2,i)<69
E_Spark(j,2,i)= unifrnd(69,79,1,1);
end
end
end
%产生高斯变异火花Mut_Spark,随机选择M个烟花进行变异
Mut=randperm(N); % 随机产生1-N内的N个数
for m1=1:M % M个变异烟花
m=Mut(m1); % 随机选取烟花
for n=1:E_N(m)
e=1+sqrt(1)*randn(1,D); %高斯变异参数,方差为1,均值也为1的1*D随机矩阵
E_Spark(n,:,m)=E_Spark(n,:,m).*e;
if E_Spark(n,1,m)>500||E_Spark(n,1,m)<100
E_Spark(n,1,m)=unifrnd(100,500,1,1);
end
if E_Spark(n,2,m)>79||E_Spark(n,2,m)<69
E_Spark(n,2,m)= unifrnd(69,79,1,1);
end
% end
end
end
%选择操作,从烟花、爆炸火花、变异火花里(都包含在三维数组中)选取N个优良个体作为下一代(先将最优个体留下,然后剩下的N-1个按轮盘赌原则选取)
n=sum(E_N)+N; %烟花、火花总个数
q=1;
Fitness = zeros(1,1);
E_Sum = zeros(1,D);
for i=1:N % 三维转二维
for j=1:(E_N(i)+1) % 三维数组每一页的行数(即每个烟花及其产生的火花数之和)
E_Sum(q,:)=E_Spark(j,:,i); % 烟花与火花总量
Fitness(q)=fun_1(E_Sum(q,:)); % 计算所有烟花、火花的适应度,用于选取最优个体
q=q+1;
end
end
[Fitness,X]=sort(Fitness); % 适应度升序排列
x(1,:)=E_Sum(X(1),:); % 最优个体
dist=pdist(E_Sum); % 求解各火花两两间的欧式距离
S=squareform(dist); % 将距离向量重排成n*n数组,第i行之和即为第i个火花到其他火花的距离之和
P = zeros(1,n);
for i=1:n % 分别求各行之和
P(i)=sum(S(i,:));
end
[P,Ix]=sort(P,'descend');% 将距离按降序排列,选取前N-1个,指的是如果个体密度较高,即该个体周围有很多其他候选者个体时,该个体被选择的概率会降低
for i=1:(N-1)
x(i+1,:)=E_Sum(Ix(i),:);
end
end
%求最大值输出
[F(T),Y]=min(Fit);
fmin=min(F);
xm=x(Y,:);
fprintf('xm=%f %f\n',xm(1),xm(2));
fprintf('fmin=%f\n',fmin);
figure(1);
t=1:T;
plot(t,F)
xlabel('迭代次数')
ylabel('目标函数值')
title('FWA算法迭代曲线');
save R1.mat t F
没有合适的资源?快使用搜索试试~ 我知道了~
基于matlab的烟花优化算法求解单目标问题,对比PSO优化+仿真录像
共11个文件
m:5个
jpg:3个
mat:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 144 浏览量
2022-10-26
03:17:50
上传
评论
收藏 2.12MB RAR 举报
温馨提示
1.版本:matlab2021a,我录制了仿真操作录像,可以跟着操作出仿真结果 2.领域:烟花优化算法 3.内容:基于matlab的烟花优化算法求解单目标问题,对比PSO优化+仿真录像 4.适合人群:本,硕等教研学习使用
资源推荐
资源详情
资源评论
收起资源包目录
基于matlab的烟花优化算法求解单目标问题,对比PSO优化.rar (11个子文件)
基于matlab的烟花优化算法求解单目标问题,对比PSO优化
matlab
compared.m 286B
Runme_fw.m 4KB
func
bls.m 345B
fun_1.m 106B
Runme_pso.m 2KB
R1.mat 5KB
R2.mat 3KB
11.jpg 22KB
23.jpg 15KB
24.jpg 18KB
操作录像0034.avi 5.09MB
共 11 条
- 1
资源评论
- afdsfsffd2022-11-13这个资源总结的也太全面了吧,内容详实,对我帮助很大。
fpga和matlab
- 粉丝: 17w+
- 资源: 2636
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 手手势检测3-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 学生成绩链表处理-C语言实现学生成绩链表处理技术解析与应用
- 手套手势检测7-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- CentOS bridge 工具包 bridge-utils-1.6-1.33.x86-64.rpm
- 手势检测7-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 基于python flask实现某瓣数据可视化数据分析平台
- awewq1132323
- 手写流程图检测31-YOLO(v5至v8)、COCO、CreateML、Darknet、Paligemma、TFRecord数据集合集.rar
- frida拦截微信小程序云托管API
- 肝脏及其肿瘤分割的 CT 数据集,已经切片成jpg数据,约2w张数据和mask
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功