• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-17
  • 语言: Matlab
  • 标签: 蚁群算法  

资源简介

运用matlab编程实现蚁群算法的低压电力线设计

资源截图

代码片段和文件信息

clear all;
clc;
%%第一步:变量初始化
m=40;Alpha=1;Beta=1;Rho=0.1;NC_max=75;Q=100;q0=0.2;s=2;d=23;
C =[ 37   129
    94   424
   361     5
    91    14
   380   373
   200   288
   163   217
    21   211
   155   389
   430   439
   104    40
   298     0
   489   275
   488   461
    25   282
   316   426
   451   258
   319   222
   127   217
   289   313
    31   380
   135   212
   424   266
   297   156
   421   156
    33   432
   330   389
   351   124
   352   253
   325   142
   221   239
    26   423
   282   326
    43    30
   386   150
   186   156
   374   259
   377   270
    84   437
   305   212
   371    83
   499   277
   487   368
    52   266
   432   243
   277   410
    77   327
   180   308
   222   151
   371   354
   221   490
   274    11
   324   454
    70   341
    66   305
   150   314
   309   372
   197    74
   112   350
   471    29
    ];
%scatter(C(:1)C(:2));
%hold on;
n=size(C1);%n表示问题的规模(城市个数)结果:n=40 得到第一列维数。即40个城市。
D=ones(nn);%D表示完全图的赋权邻接矩阵 31*31矩阵
%%%%%%%%求距离
for i=1:n
    for j=1:n
        
        if i            D(ij)=sqrt((C(i1)-C(j1))^2+(C(i2)-C(j2))^2);
        end
    D(ji)=D(ij);
    end
end
%D
%%%%%%%分布时延
delay=zeros(nn);
for i=1:n
    for j=1:n
        if D(ij)==1
            delay(ij)=0;
        elseif D(ij)>=1&D(ij)<100
            delay(ij)=0.002;
        elseif D(ij)>=100 & D(ij)<200
            delay(ij)=0.004;
        elseif D(ij)>=200 & D(ij)<300
            delay(ij)=0.006;
        elseif D(ij)>=300 & D(ij)<400
            delay(ij)=0.008;
        elseif D(ij)>=400 & D(ij)<500
            delay(ij)=0.01;
        elseif D(ij)>=500 & D(ij)<600
            delay(ij)=0.012;
        end
    end
end
%delay
Eta=1./D;%Eta为启发因子,这里设为距离的倒数
Tau=ones(nn);%Tau为信息素矩阵
Tabu=zeros(mn);%存储并记录路径的生成
NC=1;%迭代计数器
R_best=zeros(NC_maxn);%各代最佳路线
L_best=inf.*ones(NC_max1);%各次最佳路线的时延 inf表示正无穷大
while NC<=NC_max%停止条件之一:达到最大迭代次数
 %%%第二步:放在初始位置
     Tabu(:1)=s;
%%%%第三步:建立路由表
     R=zeros(nn);
     for i=1:n
         for j=1:n
             if D(ij)<350
                 R(ij)=1;
             else
                 R(ij)=0;
             end
         end
     end
     R(ij)=R(ij);
%%%%第四步:蚂蚁按概率计算下一跳
     for i=1:m%蚂蚁依次循环
         for j=2:n%城市 
             visited=Tabu(i1:(j-1));%已访问的城市,是个1行j-1列的向量,纪录了第i只蚂蚁走过的城市号  避免环路
             J=zeros(1(n-j+1));%待访问的城市,是个1行n-j+1列的向量
             P=J;%待访问城市的选择概率分布
             Jc=1;%Jc在这里是什么意思呢?没什么意思,只是为Jc赋初值
             for k=1:n %寻找第i只蚂蚁未走过的城市编号
                  if(length(find(visited==k))==0)&(R(visited(end)k)==1)

                    J(Jc)=k;%将未走过的城市编号依次赋给J中第Jc个元素
                    Jc=Jc+1;%通过循环,进行下一个未走过城市的查找
                    end
               % end %这个循环又是什么作用?
             end
             if J(1)==0
                 break;
             end
%%%%%下面计算待选城市的概率分布
            for k=1:length(J)
     

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

     文件       7522  2010-05-12 17:55  jiandan40.m

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

                 7522                    1


评论

共有 条评论