资源简介

新出BFA优化算法,用于求解电力系统经济调度等优化问题,效果较好

资源截图

代码片段和文件信息

function [hisfbestvalbestmemberfbestfmean] = BFA(FUNNDimPopSizeMaxIter)

%% 参数初始化

nc = 4;                 % 最大连续前进步数

%% 环境参数初始化
his = zeros(1MaxIter);         % 全局最优点
his_idx = 1;%全局最优点出现的代数

%% 定义控制变量的上下界
Bound = FUN();          
Boundl=ones(NDimPopSize);
Boundu=ones(NDimPopSize);
for i=1:1:PopSize
    Boundl(:i)=Bound(:1);
    Boundu(:i)=Bound(:2);
end
LowerBound = Boundl.*ones(NDimPopSize);    % 每个细菌控制变量的下界
UpperBound = Boundu.*ones(NDimPopSize);    % 每个细菌控制变量的上界

%% 初始化转向角
angle = pi/4.*ones(NDim-1PopSize);     % 每个细菌的转向角
a = round(((NDim+1)^.5));               % 根据控制变量个数确定的细菌的最大转向角

%% 初始化细菌群体
population =  rand(NDim PopSize).*(UpperBound-LowerBound) + LowerBound;     % 随机初始化每个细菌的位置
vmax = ones(NDimPopSize);              % 初始化菌群的速度向量
for i = 1:NDim                         
    vmax(i:) = (UpperBound(i:)-LowerBound(i:)); % 最大的速度向量是变量的范围
end
r = norm(vmax(:1));                    % r 是最大速度向量的模
distance = r*repmat(ones(1PopSize)NDim1);    % 定义菌群中每个个体前进的步长
direction = zeros(NDimPopSize);                % 定义细菌转向的方向向量direction

%% 评价初始种群
fvalue = zeros(1PopSize);              % 初始化每个细菌个体的适应值
for i = 1:PopSize                       % 评价种群的中每个细菌个体
    fvalue(i) = FUN(population(:i));
end
[fbestvalindex] = min(fvalue);         %记录群体中最小的适应值及其编号    
bestmember = population(:index);       % 记录群体中最好的个体所在的位置

%% 寻优主循环
iteration = 0;
while iteration    iteration = iteration +1;           
    
    for j = 1:PopSize                   
        R1 = randn(1);                  % 产生步长公式中的随机数
        R2 = rand(NDim-11);            % 随机转向角公式中的随机数矩阵
        R3 = rand(NDim 1);             % 密度感应中吸引表达式中的随机数
        
       %% 确定转向角
        Tumbleangle = -(pi/(a^2)).*R2+angle(:j);   % 随机选择转向角
        distance(:j) = r*R1;                       % 随机选择前进步长
        direction(1j) = prod(cos(Tumbleangle(1:NDim-1)));      % 将转向角转换为笛卡尔坐标系中的转向向量
        for i = 2:NDim-1
            direction(ij) = sin(Tumbleangle(i)).*prod(cos(Tumbleangle(i:NDim-1)));
        end
        direction(NDimj) = sin(Tumbleangle(NDim-1));
        NewPosition = population(:j)+distance(:j).*direction(:j);            % 转向运动后细菌的新位置
        Outflag = (NewPosition>UpperBound(:j) | NewPosition        NewPosition = NewPosition-Outflag.*distance(:j).*direction(:j);       % 将变量控制在要求范围之内
        Newfvalue = FUN(NewPosition);   %计算新位置的适应值

     %% 前进运动
        searchcounter = 0;                          % 前进步数计数器
        while searchcounter < nc                    
            if Newfvalue < fvalue(j)               
                population(:j) = NewPosition;      % 新位置若更优秀的话细菌前进到新位置
                angle(:j) = Tumbleangle;           % 细菌的转向角更新为当前的转向角
                NewPosition = population(:j)+distance(:j).*direction(:j);                % 更新下一步的位置
                Outflag = (NewPosition>UpperBound(:j) | NewPosition

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5747  2013-05-14 21:41  BFA code\BFA.asv

     文件       5638  2013-05-14 21:41  BFA code\BFA.m

     文件     415968  2013-05-20 10:02  BFA code\bfa.txt

     文件        225  2013-05-14 21:41  BFA code\bfashell.asv

     文件        274  2013-05-14 21:41  BFA code\bfashell.m

     文件       2176  2013-05-14 21:41  BFA code\bpmpd\lp.m

     文件       2248  2013-05-14 21:41  BFA code\bpmpd\qp.m

     文件       1384  2013-05-14 21:41  BFA code\bustypes.m

     文件       2457  2013-05-14 21:41  BFA code\CalFitnessDE.asv

     文件       1977  2013-05-14 21:41  BFA code\CalFitnessnew.asv

     文件       1977  2013-05-14 21:41  BFA code\CalFitnessnew.m

     文件       3600  2013-05-14 21:41  BFA code\calpf.m

     文件       6991  2013-05-14 21:41  BFA code\calpfnew.asv

     文件       8150  2013-05-14 21:41  BFA code\calpfnew.m

     文件       7602  2013-05-14 21:41  BFA code\calpfnewtest.m

     文件       5954  2013-05-14 21:41  BFA code\case.m

     文件      37081  2013-05-14 21:41  BFA code\case118.m

     文件      37081  2013-05-14 21:41  BFA code\case118old.m

     文件       9944  2013-05-14 21:41  BFA code\case30.m

     文件      78411  2013-05-14 21:41  BFA code\case300.m

     文件      11288  2013-05-14 21:41  BFA code\case30bus.m

     文件      11275  2013-05-14 21:41  BFA code\case30busga.asv

     文件      11254  2013-05-14 21:41  BFA code\case30busga.m

     文件      10206  2013-05-14 21:41  BFA code\case30pwl.m

     文件      10108  2013-05-14 21:41  BFA code\case30Q.m

     文件      11163  2013-05-14 21:41  BFA code\case30test.m

     文件      14659  2013-05-14 21:41  BFA code\case57.m

     文件       5954  2013-05-14 21:41  BFA code\case9.m

     文件       6032  2013-05-14 21:41  BFA code\case9Q.m

     文件       9908  2013-05-14 21:41  BFA code\cdf2matp.asv

............此处省略72个文件信息

评论

共有 条评论