蚁群算法商旅问题matlab程序
更新时间:2023-10-11 04:20:01 阅读量: 综合文库 文档下载
- 蚁群算法适用于哪些问题推荐度:
- 相关推荐
%%蚁群算法商旅问题matlab程序 %%导入数据(城市的坐标)
citys=[1304 2312;3639 1315;4177 2244;3712 1399;3488 1535;3326 1229;4196 1004;4312 790;4386 570;3007 1970;2562 1756;2788 1676;1332 695;3715 1678;3918 2179;4061 2370;3780 2212;3676 2838;4263 2931;3429 1908;3507 2367;3394 2643;3439 3201;2935 3550;2545 2357;2778 2826;2370 2975];
%%计算城市之间相互距离 n=size(citys,1); D=zeros(n,n); for i=1:n for j=1:n if i~=j
D(i,j)=sqrt(sum((citys(i,:)-citys(j,:)).^2)); else
D(i,j)=1e-4; end end end
%%初始化参数 m=31; alpha=1; beta=5; rho=0.1; Q=1; Eta=1./D;
Tau=ones(n,n); Table=zeros(n,n); iter=1;
iter_max=200;
Route_best=zeros(iter_max,n); Leng_best=zeros(iter_max,1); Leng_ave=zeros(iter_max,1);
%%迭代寻找最佳路径(主体循环) while iter<=iter_max
%(1)随机产生各个蚂蚁的起点城市 start=zeros(m,1); for i=1:m
temp=randperm(n); start(i)=temp(1); end
1556;3238 1491;2381 2578;4029 3240;3140
Table(:,1)=start;
%(2)构建解空间 citys_index=1:n;
for i=1:m %逐个蚂蚁路径选择 for j=2:n %逐个城市路径选择
tabu=Table(i,1:(j-1)); %已访问的城市集合(禁忌表) allow_index=~ismember(citys_index,tabu);
allow=citys_index(allow_index); %待访问的城市集合 P=allow;
%计算城市间转移概率 for k=1:length(allow)
P(k)=Tau(tabu(end),allow(k))^alpha*Eta(tabu(end),allow(k))^beta; end
P=P/sum(P);
%轮盘赌法选择下一个访问城市 Pc=cumsum(P);
target_index=find(Pc>=rand); target=allow(target_index(1)); Table(i,j)=target; end end
%(3)计算各个蚂蚁的路径距离 Length=zeros(m,1); for i=1:m
Route=Table(i,:); for j=1:(n-1)
Length(i)=Length(i)+D(Route(j),Route(j+1)); end
Length(i)=Length(i)+D(Route(n),Route(1)); end
%(4)计算最短路径距离及平均距离 if iter==1
[min_Length,min_index]=min(Length); Length_best(iter)=min_Length; Length_ave(iter)=mean(Length);
Route_best(iter,:)=Table(min_index,:); else
[min_Length,min_index]=min(Length);
Length_best(iter)=min(Length_best(iter-1),min_Length); Length_ave(iter)=mean(Length); if Length_best(iter)==min_Length
Route_best(iter,:)=Table(min_index,:); else
Route_best(iter,:)=Route_best((iter-1),:);
end end
%(5)更新信息素
Delta_Tau=zeros(n,n);
%逐个蚂蚁计算 for i=1:m
%逐个城市计算 for j=1:(n-1)
Delta_Tau(Table(i,j),Table(i,j+1))=Delta_Tau(Table(i,j),Table(i,j+1))+Q/Length(i); end
Delta_Tau(Table(i,n),Table(i,1))=Delta_Tau(Table(i,j),Table(i,1))+Q/Length(i); end
Tau=(1-rho)*Tau+Delta_Tau;
%迭代次数加1,清空路径记录表 iter=iter+1;
Table=zeros(m,n); end
%%结果显示
[Shortest_Length,index]=min(Length_best); Shortest_Route=Route_best(index,:);
disp(['最短距离:' num2str(Shortest_Length)]);
disp(['最短路径:' num2str([Shortest_Route Route_best(1)])]);
%%绘图 figure(1)
plot([citys(Shortest_Route,1);citys(Shortest_Route(1),1)],[citys(Shortest_Route,2);citys(Shortest_Route(1),2)],'b-'); grid on
for i=1:size(citys,1)
text(citys(i,1),citys(i,2),[' ' num2str(i)]); end
text(citys(Shortest_Route(1),1),citys(Shortest_Route(1),2),'起点');
text(citys(Shortest_Route(end),1),citys(Shortest_Route(end),2),'终点'); xlabel('城市位置横坐标') ylabel('城市位置纵坐标') figure(2)
plot(1:iter_max,Length_best,'b',1:iter_max,Length_ave,'r') legend('最短距离','平均距离''') xlabel('迭代次数') ylabel('距离')
text('各代最短距离与平均距离对比')
正在阅读:
蚁群算法商旅问题matlab程序10-11
美丽中国作文04-01
2016届江苏省南通市启东市高三(上)期末数学试卷(解析版)11-30
老师的苦衷作文300字06-26
小学生一年级关于春节的作文:我的压岁钱06-14
比较史学01-01
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 商旅
- 算法
- 程序
- matlab
- 问题
- 蚁群