clear all

close all

clc

%%%%%%%%%%初始化参数%%%%%%%%%

NP=20;

FoodNumber=NP/2;

Limit=100;

maxCycle=2500;

%%%%%定义全局变量%%%%%%%%%

global NC;  %总的城市数

global d;   %各城市之间的距离

NC=14;

x(1)=16.47;x(2)=16.47;x(3)=20.09;x(4)=22.39;x(5)=25.23;x(6)=22.00;x(7)=20.47;

x(8)=17.20;x(9)=16.30;x(10)=14.05;x(11)=16.53;x(12)=21.52;x(13)=19.41;x(14)=20.09;

y(1)=96.10;y(2)=94.44;y(3)=92.54;y(4)=93.37;y(5)=97.24;y(6)=96.05;y(7)=97.02;y(8)=96.29;

y(9)=97.38;y(10)=98.12;y(11)=97.38;y(12)=95.59;y(13)=97.13;y(14)=94.55;

%计算各城市之间的距离

for m=1:14

for n=1:14

d(m,n)=sqrt((x(m)-x(n))^2+(y(m)-y(n))^2);

end

end

%画初始路径图

figure(1);

for m=1:NC

scatter(x(m),y(m),50,'r')

hold on

end

plot([x(1),x(2),x(3),x(4),x(5),x(6),x(7),x(8),x(9),x(10),x(11),x(12),x(13),x(14),x(1)],...

[y(1),y(2),y(3),y(4),y(5),y(6),y(7),y(8),y(9),y(10),y(11),y(12),y(13),y(14),y(1)]);

%title('初始路径');

xlable('城市x坐标');

ylable('城市y坐标');

runtime=10;  %通过修改runtime的值,改变程序的运行次数,用以算法的健壮性

GlobalMins=zeros(1,runtime);

for r=1:runtime

%初始化蜂群

for i=1:FoodNumber

Foods(i,:)=initial();

end

%计算适应度函数值

for i=1:FoodNumber

route=Foods(i,:);

Fitness(i)=calculateFitness(route);

end

%初始化搜索次数,用于Limit比较

trial=zeros(1,FoodNumber);

%找出适应度函数值得最小值

BestInd=find(Fitness==min(Fitness));

BestInd=BestInd(end);  %避免有两个相同位置,只取其一

GlobalMin=Fitness(BestInd);

GlobalParams=Foods(BestInd,:);

%迭代开始

iter=1;

j=1;  %用以初始化结果

while ((iter<=maxCycle))

%%%采蜜蜂模式%%

%随机交换3个城市的顺序,改变此时的路线

route_next=Foods(i,:);

l=round(2+12*rand());

m=round(2+12*rand());

n=round(2+12*rand());

temp=route_next(1);

route_next(l)=route_next(m);

route_next(m)=route_next(n);

route_next(n)=temp;

%计算新蜜源的适应度函数值

FitnessSol=calculateFitness(route_next);

%使用贪婪原则,寻找最优蜜源

if (FitnessSol

Foods(i,:)=route_next;

Fitness(i)=FitnessSol;

trial(i)=0;

else

trial(i)=trial(i)+1;  %超过设定的limit次,则该蜂成为侦查蜂

end

end

%%%%根据适应度值计算采蜜蜂被跟随的概率%%%%%%

pro=(0.9*Fitness./max(Fitness))+0.1;

%%%观察蜂%%%%%%%

i=1;          %要跟随的采蜜蜂

t=0;           %标记观察蜂

while (t

if(rand

t=t+1;

%随机交换3个城市的顺序,改变此时的路线

route_next=Foods(i,:);

l=round(2+12*rand());

m=round(2+12*rand());

n=round(2+12*rand());

temp=route_next(1);

route_next(l)=route_next(m);

route_next(m)=route_next(n);

route_next(n)=temp;

%计算新蜜源的适应度函数值

FitnessSol=calculateFitness(route_next);

%使用贪婪原则,寻找最优蜜源

if (FitnessSol

Foods(i,:)=route_next;

Fitness(i)=FitnessSol;

trial(i)=0;

else

trial(i)=trial(i)+1;  %超过设定的limit次,则该蜂成为侦查蜂

end

end

i=i+1;  %要跟随的下一个采蜜蜂

if (i==(FoodNumber)+1)

i=1;

end

end

%记录此时更好的解

ind=find(Fitness==min(Fitness));

ind=ind(end);

if (Fitness(ind)

GlobalMin=Fitness(ind);

GlobalParams=Foods(ind,:);

end

%%%侦查蜂模式%%%

ind=find(trial==max(trial));

ind=ind(end);

if (trial(ind)>Limit)  %若搜索次数超过极限值,则进行随机搜索产生新的解

Bas(ind)=0;

for m=1:1:NC

route_new(m)=m;

end

route_new(NC+1)=1;

FitnessSol=calculateFitness(route_new);

Foods(ind,:)=route_new;

Fitness(ind)=FitnessSol;

end

%%%%%%建立一个次数和最优解的矩阵,以便于画图%%%%%

Cishu(j)=iter;  %迭代次数行向量

Zuiyou(j)=GlobalMin;  %每次迭代得到的最优解

j=j+1;

iter=iter+1;

end

while(iter<=maxCycle)

GlobalMins(r)=GlobalMin;  %程序运行完一次,记录这次的最优路径的长度

disp(['第',num2str(r),'次运行得到的最优路径是:',num2str(GlobalParams),'此条路径的长度是:',num2str(GlobalMins(r))]);

end

%%图曲线图%%

figure(2);

plot(Cishu,Zuiyou,'b');

%title('优化曲线');

xlable('迭代次数');

ylable('路径长度');

figure(3);

for m=1:NC

scatter(x(m),y(m),50,'r')

hold on

end

plot([x(GlobalParams(1)),x(GlobalParams(2)),x(GlobalParams(3)),x(GlobalParams(4)),x(GlobalParams(5)),x(GlobalParams(6)),

x(GlobalParams(7)),x(GlobalParams(8)),x(GlobalParams(9)),x(GlobalParams(10)),x(GlobalParams(11)),x(GlobalParams(12)),

x(GlobalParams(13)),x(GlobalParams(14)),x(GlobalParams(1)),y(GlobalParams(1)),y(GlobalParams(2)),y(GlobalParams(3)),

y(GlobalParams(4)),y(GlobalParams(5)),y(GlobalParams(6)),y(GlobalParams(7)),y(GlobalParams(8)),y(GlobalParams(9)),

y(GlobalParams(10)),y(GlobalParams(11)),y(GlobalParams(12)),y(GlobalParams(13)),y(GlobalParams(14)),y(GlobalParams(1))]);

%titlt('优化路径');

xlable('城市x坐标');

ylable('城市y坐标');

蜂群 matlab,人工蜂群算法相关推荐

  1. MATLAB人工蜂群算法求解超市物流配送选址问题代码实例

    MATLAB人工蜂群算法求解超市物流配送选址问题代码实例 MATLAB人工蜂群算法求解超市物流配送选址问题代码实例 人工蜂群算法编程问题实例: 在范围为(0,0)到(100,100)的矩形区域内,散布 ...

  2. MATLAB人工蜂群算法求解数据拟合和多参数优化问题代码实例

    MATLAB人工蜂群算法求解数据拟合和多参数优化问题代码实例 MATLAB人工蜂群算法求解数据拟合和多参数优化问题代码实例 1.基本概念 人工蜂群算法是模仿蜜蜂行为提出的一种优化方法,是集群智能思想的 ...

  3. 【AFSA TSP】基于matlab人工鱼群算法求解旅行商问题【含Matlab源码 422期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab人工鱼群算法求解旅行商问题[含Matlab源码 422期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  4. 【LSSVM回归预测】基于matlab人工蜂群算法优化最小二乘支持向量机LSSVM数据回归预测【含Matlab源码 2213期】

    ⛄一.人工蜂群算法优化最小二乘支持向量机LSSVM简介 1 最小二乘支持向量机 最小二乘支持向量机是支持向量机的一种改进算法[9,10],它将SVM算法中的不等式约束转化为等式约束,采用最小二乘线性系 ...

  5. 【ABC三维路径规划】基于matlab人工蜂群算法多无人机三维路径规划【含Matlab源码 170期】

    一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水下 ...

  6. 【优化覆盖】基于matlab人工蜂群算法求解无线网络传感覆盖优化问题【含Matlab源码 1097期】

    ⛄一.人工蜂群算法求解无线网络传感覆盖优化问题简介 1 WSN覆盖模型 1.1 问题描述 在WSN中, 要实现较高的无线网络传感器节点覆盖率从而减少监测盲点的出现, 就必须加大无线网络传感器节点的分布 ...

  7. 【ABC三维路径规划】基于matlab人工蜂群算法无人机三维路径规划【含Matlab源码 021期】

    ⛄一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水 ...

  8. 【BP数据预测】基于matlab人工鱼群算法优化BP神经网络数据预测【含Matlab源码 523期】

    一.人工鱼群算法简介 1 觅食行为   指鱼循着食物多的方向游动的一种行为,人工鱼X i X_iXi​在其视野内随机选择一个状态X j X_jXj​,分别计算它们的目标函数值进行比较,如果发现Y j ...

  9. 改进交叉算子的自适应人工蜂群黏菌算法-附代码

    改进交叉算子的自适应人工蜂群黏菌算法 文章目录 改进交叉算子的自适应人工蜂群黏菌算法 1.黏菌算法 2.改进黏菌算法 2.1 自适应可调节反馈因子 2.2 算数交叉算子 2.3 改进的人工蜂群搜索策略 ...

最新文章

  1. java bufferedimage颜色_使用BufferedImage进行渐变色操作
  2. python如何爬虫-如何使用python爬虫爬取要登陆的网站
  3. Python入门100题 | 第019题
  4. Linux SPI总线设备驱动模型详解
  5. 在主窗体中打开一个新子窗体,如果已有子窗体,则激活它,而不打开新的。...
  6. 其他一些单元测试技巧
  7. JDBC 提示:WARN: Establishing SSL connection without server's identity verification is not recommended.
  8. 帮助文档的制作(控制台、eclipse两种方式)
  9. Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2 【转】...
  10. Android——多线程之Handler
  11. qq令牌64位密钥提取_qq令牌绑定工具无需密码2020
  12. word如何自动生成目录
  13. 习题:一圆型游泳池如图所示,现在需在其周围建一圆型过道,并在其四周围上栅栏。栅栏价格为35元/米,过道造价为20元/平方米。过道宽度为3米,游泳池半径由键盘输入。要求编程计算并输出过道和栅栏的造价。
  14. 《论语》全译——公冶长篇第五
  15. Echarts去除x轴,y轴网格线,网格区域(背景)
  16. 中国矿业大学2020岁末赛校赛wp
  17. 理解微分方程和线性代数的联系
  18. 基于安卓的 gps定位系统的跑步健身助手
  19. Java 基础学习(6)
  20. yum报错failure: repodata/repomd.xml from Centos: [Errno 256] No more mirrors to try. importing repomd.

热门文章

  1. 注册小程序需要营业执照吗?
  2. 前端速成:双月Java之旅(week5)_day1
  3. 严重:init datasource errorcom.mysql.jdbc.exceptions.jdb4.CommunicationsException:Communications link失败
  4. 《Effective C++》读书笔记 条款40:明智而审慎地使用多重继承
  5. tig--颠覆 Git 命令使用体验的神器
  6. 小米首页二级菜单栏实现原理
  7. 【云原生 | Envoy 系列】--Envoy Http Ingress,Egress,front Proxy静态配置
  8. 含身故赔付的重疾险对程序员群体有什么好处呢?
  9. 腾讯安全全面出击:双十一不该成为黑产的狂欢
  10. matlab p文件转码 matlab pcode文件 将matlab中的p文件转为m文件工具