• 大小: 81KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: Matlab
  • 标签: 人工蜂群  matlab  

资源简介

压缩包中分为两部分,一部分为全局优化问题,另一部分为matlab源代码,每个代码块都有大量的注释,很简明,用户也可用本代码求解其他无约束优化问题。

资源截图

代码片段和文件信息

function gy =ABC_Algorithm(Food_Numlimitmax_iterDobjfunLowerUpperr)
%% 变量解释
% -----------------------------------------------------------------------------------------
% NP 蜂群大小 (雇佣峰+观察峰)*/
% FoodNumber为食物源数量 = 蜂群/2
% limit为食物源遗弃条件
% max_iter   % 搜索次数
%Foods [FoodNumber][D]; /*Foods[食物源数量][D维待优化参数].
%ObjVal[FoodNumber];    /*每个食物源的目标函数值
%Fitness[FoodNumber];   /*每个食物源的适应度值(质量)
%trial[FoodNumber];      /*每个解没有被提高的次数*/
%prob[FoodNumber];       /*食物源被选择的概率
%New_solution [D];           /*新解有公式产生 v{ij}=x{ij}+a{ij}*(x{kj}-x{ij}) j是一个随机参数且k与i不同*/
%ObjValSol;              /*新解的目标函数值
%FitnessSol;              /*新解的适应度值
%neighbour param2change; /*param2change与j对应 neighbour与k对应在公式v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij})中*/
%GlobalMin; /*ABC算法的最优解*/
%GlobalParams[D]; /*最优解的参数*/
%GlobalMins[runtime]; /*在多次运行后得每次最优解
%---------------------------------------------------------------------------

U_bound =ones(1D)*Upper;%32.768;      %参数的下界
L_bound =ones(1D)*Lower;%32.768   %参数的上界

Foods_min=ones(max_iterD);
Select_P=zeros(1Food_Num);

Range = repmat((U_bound-L_bound)[Food_Num 1]);% 变量范围
Lower = repmat(L_bound [Food_Num 1]);
Foods = rand(Food_NumD).* Range + Lower;              % 食物源初始化;

Obj_Val=feval(objfunFoods);                              %目标函数值
Fitness=Cal_Fitness(Obj_Val);                        %适应度值
Global_Min=ones(1max_iter);   %每次迭代最优解
trial=zeros(1Food_Num);    %重置计数器

%------------记录最好的食物源---------
Best_Ind=find(Obj_Val==min(Obj_Val));
Best_Ind=Best_Ind(end);
GlobalMin_iter=Obj_Val(Best_Ind);
GlobalParams=Foods(Best_Ind:);

%% 迭代开始
iter=1;
while iter <= max_iter
    %%  %%%%%%%%%%%%%雇佣峰(侦查蜂)阶段 %%%%%%%%%%%%%%
    for i=1:(Food_Num)
        Param2Change=fix(rand*D)+1;         % 参数是随机改变
        neighbour=fix(rand*(Food_Num))+1;   % 随机选择的解用于产生解i的变异解
        
        while(neighbour==i) %随机选择一个与解i不同的解
            neighbour=fix(rand*(Food_Num))+1;
        end
        New_sol=Foods(i:);
        %%  /*产生新解*/
        
        New_sol(Param2Change)=Foods(iParam2Change)+(Foods(iParam2Change)-Foods(neighbourParam2Change))*(rand-0.5)*2;
        New_sol=bound_limit(New_solL_boundU_bound);% 边界值处理
        
        %% /*计算新解*/
        
        ObjVal_Sol=feval(objfunNew_sol);
        Fitness_Sol=Cal_Fitness(ObjVal_Sol);
        
        %% /*贪婪算法*/
        
        if (Fitness_Sol > Fitness(i))   %if新解优于解i,则替代i解
            Foods(i:)=New_sol;
            Fitness(i)=Fitness_Sol;
            Obj_Val(i)=ObjVal_Sol;
            trial(i)=0;
        else
            trial(i)=trial(i)+1; %如果解i没有提高trial+1
        end
        %% %%%%%%%%%%%%%%%%% 计算概率 %%%%%%%%%%%%%
        
        %食物源是根据概率(质量)被选择的
        Pro=2;
        switch Pro
            case 1
                Select_P(i)=Fitness(i)/sum(Fitness);
            case 2
                Select_P(i)=(0.9.*Fitness(i)./max(Fitness))+0.1;
        end
    end
    %% %%%%%%%%%%%%%% 观察蜂阶段 %%%%%%%%%%
    
    i=1;
    

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

     文件       5961  2016-06-22 20:54  人工蜂群算法求解无约束优化问题\ABC_Algorithm.m

     文件        214  2016-06-22 18:42  人工蜂群算法求解无约束优化问题\bound_limit.m

     文件        201  2016-06-22 18:42  人工蜂群算法求解无约束优化问题\Cal_Fitness.m

     文件        273  2016-06-11 19:18  人工蜂群算法求解无约束优化问题\Problem1.m

     文件        100  2016-06-11 18:51  人工蜂群算法求解无约束优化问题\Problem2.m

     文件        326  2016-06-22 09:39  人工蜂群算法求解无约束优化问题\Problem3.m

     文件       1074  2017-12-27 22:53  人工蜂群算法求解无约束优化问题\run_ABC.m

     文件     164352  2017-12-27 22:54  人工蜂群算法求解无约束优化问题\遗传算法求解结果.doc

     目录          0  2017-12-27 22:55  人工蜂群算法求解无约束优化问题

----------- ---------  ---------- -----  ----

               172501                    9


评论

共有 条评论