人工蜂群算法的最小搜索模型_【优化求解】人工蜂群ABC算法

一、人工蜂群算法的介绍

    人工蜂群算法(Artificial Bee Colony, ABC)是由Karaboga于2005年提出的一种新颖的基于群智能的全局优化算法,其直观背景来源于蜂群的采蜜行为,蜜蜂根据各自的分工进行不同的活动,并实现蜂群信息的共享和交流,从而找到问题的最优解。人工蜂群算法属于群智能算法的一种。

二、人工蜂群算法的原理

   1、原理

        标准的ABC算法通过模拟实际蜜蜂的采蜜机制将人工蜂群分为3类: 采蜜蜂、观察蜂和侦察蜂。整个蜂群的目标是寻找花蜜量最大的蜜源。在标准的ABC算法中,采蜜蜂利用先前的蜜源信息寻找新的蜜源并与观察蜂分享蜜源信息;观察蜂在蜂房中等待并依据采蜜蜂分享的信息寻找新的蜜源;侦查蜂的任务是寻找一个新的有价值的蜜源,它们在蜂房附近随机地寻找蜜源。

        假设问题的解空间是D维的,采蜜蜂与观察蜂的个数都是SN,采蜜蜂的个数或观察蜂的个数与蜜源的数量相等。则标准的ABC算法将优化问题的求解过程看成是在D维搜索空间中进行搜索。每个蜜源的位置代表问题的一个可能解,蜜源的花蜜量对应于相应的解的适应度。一个采蜜蜂与一个蜜源是相对应的。与第i个蜜源相对应的采蜜蜂依据如下公式寻找新的蜜源:

69e27d1125e501a88275ac16054d39e0.png

 其中,,e43a1ac403816d82f5200ae127719cd2.png03aeef93740909ec3d50c721fe5d00c7.png7b6d8a48c4e32a63cb26776c3050c678.png是区间6bc3271588907b26df0d7097641ac364.png上的随机数,86681c9911d1706684aa66dd6cdd4368.png。标准的ABC算法将新生成的可能解0d23edb094354fb4abde615c57ad4e35.png与原来的解作比较,并采用贪婪选择策略保留较好的解。每一个观察蜂依据概率选择一个蜜源,概率公式为

78669abe45015a2abead5ffc74b53eaf.png

其中,是可能解的适应值。对于被选择的蜜源,观察蜂根据上面概率公式搜寻新的可能解。当所有的采蜜蜂和观察蜂都搜索完整个搜索空间时,如果一个蜜源的适应值在给定的步骤内(定义为控制参数“limit”) 没有被提高, 则丢弃该蜜源,而与该蜜源相对应的采蜜蜂变成侦查蜂,侦查蜂通过已下公式搜索新的可能解。 8f25173f8cfdb21ce33400ee0dbb55e6.png

其中,18c1c7c1cd0abca9e1046c058a41ed85.png是区间6a834b8ea35273bff5b32507bcd15cf5.png上的随机数,32aa6619b211813fef3fd34d1bee42be.pnge9fe8b0ad72c0a0a9d351762ed6694fd.png是第9359b30f759feda8844abd590e35fcb4.png维的下界和上界。

  2、流程

  • 初始化;

  • 重复以下过程:

    • 将采蜜蜂与蜜源一一对应,根据上面第一个公式更新蜜源信息,同时确定蜜源的花蜜量;

    • 观察蜂根据采蜜蜂所提供的信息采用一定的选择策略选择蜜源,根据第一个公式更新蜜源信息,同时确定蜜源的花蜜量;

    • 确定侦查蜂,并根据第三个公式寻找新的蜜源;

    • 记忆迄今为止最好的蜜源;

  • 判断终止条件是否成立;

三、人工蜂群算法用于求解函数优化问题

    对于函数

5d0a95cb27b6d17996051e2e8d282aab.png

其中0e98bb91ba049c909a04157241960768.png

%% Copyright (c) 2015, Yarpiz (www.yarpiz.com)% All rights reserved. Please read the "license.txt" for license terms.%% Project Code: YPEA114% Project Title: Implementation of Artificial Bee Colony in MATLAB% Publisher: Yarpiz (www.yarpiz.com)% % Developer: S. Mostapha Kalami Heris (Member of Yarpiz Team)% % Contact Info: sm.kalami@gmail.com, info@yarpiz.com%clc;clear;close all;%% Problem DefinitionCostFunction=@(x) Sphere(x);        % Cost FunctionnVar=5;             % Number of Decision VariablesVarSize=[1 nVar];   % Decision Variables Matrix SizeVarMin=-10;         % Decision Variables Lower BoundVarMax= 10;         % Decision Variables Upper Bound%% ABC SettingsMaxIt=200;              % Maximum Number of IterationsnPop=100;               % Population Size (Colony Size)nOnlooker=nPop;         % Number of Onlooker BeesL=round(0.6*nVar*nPop); % Abandonment Limit Parameter (Trial Limit)a=1;                    % Acceleration Coefficient Upper Bound%% Initialization% Empty Bee Structureempty_bee.Position=[];empty_bee.Cost=[];% Initialize Population Arraypop=repmat(empty_bee,nPop,1);% Initialize Best Solution Ever FoundBestSol.Cost=inf;% Create Initial Populationfor i=1:nPop    pop(i).Position=unifrnd(VarMin,VarMax,VarSize);    pop(i).Cost=CostFunction(pop(i).Position);    if pop(i).Cost<=BestSol.Cost        BestSol=pop(i);    endend% Abandonment CounterC=zeros(nPop,1);% Array to Hold Best Cost ValuesBestCost=zeros(MaxIt,1);%% ABC Main Loopfor it=1:MaxIt        % Recruited Bees    for i=1:nPop                % Choose k randomly, not equal to i        K=[1:i-1 i+1:nPop];        k=K(randi([1 numel(K)]));                % Define Acceleration Coeff.        phi=a*unifrnd(-1,+1,VarSize);                % New Bee Position        newbee.Position=pop(i).Position+phi.*(pop(i).Position-pop(k).Position);                % Evaluation        newbee.Cost=CostFunction(newbee.Position);                % Comparision        if newbee.Cost<=pop(i).Cost            pop(i)=newbee;        else            C(i)=C(i)+1;        end            end        % Calculate Fitness Values and Selection Probabilities    F=zeros(nPop,1);    MeanCost = mean([pop.Cost]);    for i=1:nPop        F(i) = exp(-pop(i).Cost/MeanCost); % Convert Cost to Fitness    end    P=F/sum(F);        % Onlooker Bees    for m=1:nOnlooker                % Select Source Site        i=RouletteWheelSelection(P);                % Choose k randomly, not equal to i        K=[1:i-1 i+1:nPop];        k=K(randi([1 numel(K)]));                % Define Acceleration Coeff.        phi=a*unifrnd(-1,+1,VarSize);                % New Bee Position        newbee.Position=pop(i).Position+phi.*(pop(i).Position-pop(k).Position);                % Evaluation        newbee.Cost=CostFunction(newbee.Position);                % Comparision        if newbee.Cost<=pop(i).Cost            pop(i)=newbee;        else            C(i)=C(i)+1;        end            end        % Scout Bees    for i=1:nPop        if C(i)>=L            pop(i).Position=unifrnd(VarMin,VarMax,VarSize);            pop(i).Cost=CostFunction(pop(i).Position);            C(i)=0;        end    end        % Update Best Solution Ever Found    for i=1:nPop        if pop(i).Cost<=BestSol.Cost            BestSol=pop(i);        end    end        % Store Best Cost Ever Found    BestCost(it)=BestSol.Cost;        % Display Iteration Information    disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);    end    %% Resultsfigure;%plot(BestCost,'LineWidth',2);semilogy(BestCost,'LineWidth',2);xlabel('Iteration');ylabel('Best Cost');grid on;
function [SX0]=observe(Q,Lmin,Lmax)%生成的S1为  population行*C列%但是要保证生成的阈值第一个比后一个小,且不能为图像的最大、小灰度值global population C;P=zeros(8*C,1);w=[1,2,4,8,16,32,64,128];SX0=zeros(population,C);num=3;flag=1;i=1;ill=0; while i<=population         R=rand(8*C,1);                  P(:,1)=R(:,1)>=(Q(:,1,i).^2);             k=1;             while k<=C                     t=(k-1)*8+1;                                SX0(i,k)=w(1,:)*double(P(t:t+7,1));                          temp=1;                   while (SX0(i,k)<=Lmin || SX0(i,k)>=Lmax || ((k>1) && SX0(i,k)<=SX0(i,k-1))) && (temp<=num)                        Rt=rand(8,1);                               P(t:t+7,1)=Rt(:,1)>=(Q(t:t+7,1,i).^2);                                  SX0(i,k)=w(1,:)*double(P(t:t+7,1));                           temp=temp+1;                                            end                                   if (temp>num) && (SX0(i,k)<=Lmin || SX0(i,k)>=Lmax || ((k>1) && SX0(i,k)<=SX0(i,k-1)))                           flag=0;  %表示此组数据不合理                          ill=ill+1;                          R=rand(8*C,1);                                                      P(:,1)=R(:,1)>=(Q(:,1,i).^2);       %有时会出现停滞状态,由于此处的Q的artha==1                          k=1;                   else                        flag=1;                         ill=0;                        k=k+1;                   end                     if ill>=3                                   Q(:,:,i)=ones(8*C,2,1)/sqrt(2);                   end                                 end     %% while k<=C                 i=i+1; end% % fid = fopen('data.txt', 'wt');% %   for j=1:C% %       for i=1:population% %   % % fprintf(fid, ' %4.0f  ',SX0(i,j));% %         if i==population% %         fprintf(fid, '\n');% %         end% %   end% % % % fwrite(fid,SX0(:,j),'integer*population');% % % % fwrite(fid,'\n','char');% % % % end% % fclose(fid);
function i=RouletteWheelSelection(P)    r=rand;        C=cumsum(P);        i=find(r<=C,1,'first');end
function z=Sphere(x)    z=sum(x.^2);end

1e46a9a94abbc043640400d103fb4756.png

往期回顾>>>>>>

【模式识别】Matlab指纹识别【优化求解】A*算法解决三维路径规划问题  matlab自动识别银行卡号【优化求解】模拟退火遗传实现带时间窗的车辆路径规划问题【数学建模】Matlab实现SEIR模型【优化求解】基于NSGA-2的求解多目标柔性车间调度算法【优化求解】蚁群算法求最优值 输入"源代码"获取完整代码

636fcacb4afbd9099058afb9b9ef38a5.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
公式搜集器搜集各类彩票公式是用来搜集各类彩票公式,而且当你有数据出错时,系统会提示你修正,而且还有修改记录。杀肖类 杀尾类 六肖类 四尾类 等40种类公式的专用工具,可设搜集公式的连准期及搜集类别和搜集条数等。由[发展]编程设计,栋桦工作室出品。增加数据--它具有录入与修改和查阅历史记录功能,只要选择增加记录本系统会自动标出年份,期号,日期,星期,如不需修改,只要录入平码与特号即可。 1-选择连准期--系统在您选择公式类型时会自动指定默认数,您可按需要调整,最高可设999期,不过您的数据要有不低1000期。最好不能相差太多,因为数越大搜集时间越长。(限制版只有120期) 2-选择搜集条数--系统默认数为1,您可按需要调整,最高可设9999条。(限制版只有99条) 3-本系统默认最近一期为准(面版左上方所显示的年与期号)搜集下期公式,此您首先要确认年份与期号是否正确,如果要增加新期号按“增加数据”键,按提示进行增加。 4-选择公式类型--直接点击所需搜集公式类型即可。(限制版只有杀肖类,杀尾类,杀合类三种公式。) 5-清空公式--它可清空公式库内所有公式。右上方有显示库内公式的条数。 6-公式管理--选择保存公式,即把公式库的所有公式保存“我的公式”,选择统计格式或普通格式,即打印文档到您桌面上。统计格式文档-可直接复制到统计器进行统计,普通格式文档-可供发表存档等。 7-当您完成以上操作后,即可按“搜集公式”键进行搜集。系统会自动按您所定的要求进行搜集,当搜集到您指定条数后会自动比较与整理,当库内有相同的公式时自动删除并进行补搜集。 8-更新公式--自动更新公式库内所有新旧公式,并检测150期内连准情况,如高于149期时标上150连准期,如连准期低于系统默认值的公式一律删除。 9-个性设置--可设置公式组成元素的个数与公式元素的序,系统默认是元素个数随机,公式元素大小序与落波序混合搜集。 10-本系统有很强的纠错功能,当您的数据有错误时,系统会提示并转到当期数据上供您修正。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值