没有合适的资源?快使用搜索试试~ 我知道了~
人工蜂群算法
5星 · 超过95%的资源 需积分: 10 13 下载量 46 浏览量
2017-11-02
17:04:53
上传
评论 1
收藏 26KB DOCX 举报
温馨提示
试读
12页
人工蜂群算法MATLAB程序,可实现二元函数最优值计算,简单易懂,适合初学者。
资源推荐
资源详情
资源评论
clear all
tic %计时开始
%%%%%%% 初始化种群参数%%%%%%%
global Optimalvalue; %定义全局变量,存放寻优过程最优值
Optimalvalue=0; %给最优变量初值,该变量用以存放所求的最优值
NP=30; %初始化蜜蜂总数
FoodNumber=NP/2; %确定采蜜蜂数量
SearchNumber=5; %侦查蜂数量
maxCycle=50; %程序总最大迭代数
Limit=5;
%对每个蜂适应值的不变性进行统计,达到 Limit 次后进行相关变异操作
Foods=(rand(NP, 2)-0.5)*20; %在变量取值【-10,10】范围内生成 2 列 NP
%所有(行)个蜂位置(x,y)坐标矩阵随机值
sol=Foods; %定义变量
trial=zeros(NP) ; %对各蜂适应值的不变性次数进行统计的变量
Foodspath=Foods; %变量保存所有蜂寻优过程,用以画图显示用
%计算所有蜂的适应值函数值
for i=1 : NP
Fitness(i)=(sin(Foods(i,1))./(Foods(i,1)+eps)).*(sin(Foods(i,2))./(Foods(i,2)+eps));
%调用函数求各蜂坐标位置的函数值(适应值)
end
Indfit=sort(Fitness); %对各蜂适应值由小到大排序
Optimalvalue=Indfit(end); %保存最优值
iter=1; %初始化迭代次数
j=1; %用以初始化结果
while (iter<=maxCycle)
%%%%%%% 采蜜蜂模式 %%%%%%
for i=1 : (FoodNumber)
Param2Change=fix(rand*2)+1; %随机选第一列 X 或第二列 Y 作为变化列
neighbour=fix(rand*2)+1; %随机选邻域蜂
while (neighbour==i)
%如果 neighbour==i,则再进行一次随机取值,以使两者不相等(不同的蜂)
neighbour=fix(rand*(FoodNumber))+1;
end
sol(i,:)=Foods(i,:);
%%%%%%% 在附近区域进行搜索 %%%%%%%
sol(i,Param2Change)=Foods(i,Param2Change)+(Foods(i,Param2Change)-
Foods(neighbour,Param2Change))*(rand-0.5)*2;
% 确保新产生的解(蜜源)位置在参数范围内
if (sol(i,Param2Change)>10|sol (i,Param2Change)<-10)
sol(i,Param2Change)= Foods(i,Param2Change);
end
%计算新蜜源的适应度函数值
FitnessSol=sin(sol(i,1))./(sol(i,1)+eps).*sin(sol(i,2))./(sol(i,2)+eps);
%使用贪婪准则,寻找最优蜜源
if (FitnessSol>Fitness(i))
Foods(i,:)=sol(i,:);
Fitness(i)=FitnessSol;
trail(i)=0;
else
trail(i)= trail(i)+1; %若找不到更好的蜜源,则次数加 1
if trail(i)>Limit
Foods(i,:)=(rand(1,2)-0.5)*20;
%超过设定的 Limit 次,则该采蜜蜂变成为侦查蜂
end
end
end %End for
%%%%%%根据适应度值计算采蜜蜂被观察蜂跟随的概率%%%%%
prob =(0.9*Fitness./max(Fitness))+0.1;
%%%%%观察蜂%%%%%
%处理采蜜蜂以外的蜂,一个采蜜蜂最多招募一个观察蜂,以增加寻优概率
t=FoodNumber;
i=1;
while(t<(NP-SearchNumber))
t=t+1;
if(rand<prob(i)) %安概率选择要跟随的采蜜蜂
Param2Change=fix(rand*2)+1;
neighbour=FoodNumber+fix(rand*(NP-FoodNumber-SearchNumber))+1;
%选择任一个观察蜂
while (neighbour==t)
%若相等则在观察蜂中进行一次随机取值,这使得 neighbour 与 t 不相等
neighbour=FoodNumber+fix(rand*(NP-FoodNumber-SearchNumber))+1;
end;
sol(t,:)=Foods(t,:);
sol(t,Param2Change)=Foods(i,Param2Change)+(Foods(i,Param2Change)-
Foods(neighbour,Param2Change))*(rand-0.5)*2;
剩余11页未读,继续阅读
资源评论
- DongLiGeDongQiang2017-12-11谢谢分享哦
qq_15434821
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功