• 大小: 4KB
    文件类型: .m
    金币: 2
    下载: 0 次
    发布日期: 2024-02-03
  • 语言: Matlab
  • 标签: 烟花算法  

资源简介

优化算法,MATLAB烟花算法源代码,所有计算过程整合到一个m文件中,直接编辑适应度函数,即可实现求解计算

资源截图

代码片段和文件信息

%烟花算法进行函数优化
%fitness适应度函数,N烟花数,D变量维数,M变异火花数,Er爆炸半径,En爆炸数目
%LBUB分别为变量上下界,T为迭代次数,ab为爆炸数目限制因子
clear;clc
N=100;   % N烟花数
D=2;     % D变量维数
M=5;     % M变异火花数
En=6;    % En爆炸数目
Er=5;    % Er爆炸半径
a=0.3;   % ab为爆炸数目限制因子
b=0.6;
T=500;   % T为迭代次数

%求最大值变量上下界
LB=[-5.12-5.12];
UB=[5.125.12];

%随机在解空间初始化N个烟花位置
x = zeros(ND);
for i=1:N
    x(i:)=LB+rand(1D).*(UB-LB);
end
%循环迭代
E_Spark=zeros(TDN);
Fit = zeros(1N);
F = zeros(1T);
for t=1:T
    %计算每个烟花适应度值
    for i=1:N
        Fit(i)=fitness(x(i:));
    end
    [F(t)~]=min(Fit);
    Fmin=min(Fit);
    Fmax=max(Fit);
    %计算每个烟花的爆炸半径E_R和爆炸数目E_N以及产生的爆炸火花
    E_R = zeros(1N);
    E_N = zeros(1N);
    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)            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(1D));  % 位置偏移
            E_Spark(j:i)=x(i:)+h;    % 第i个烟花(三维数组的i页)产生的第j(三维数组的j行)个火花
            for k=1:D   %越界检测
                if E_Spark(jki)>UB(k)||E_Spark(jki)                    E_Spark(jki)=LB(k)+rand*(UB(k)-LB(k));   %映射规则
                end
            end
        end
    end
    %产生高斯变异火花Mut_Spark随机选择M个烟花进行变异
    

评论

共有 条评论