资源简介

该程序是基于蜂群算法的QOS多播路由技术,可以将随机节点进行自适应路径选择,能量最低

资源截图

代码片段和文件信息

function [MRTEDGEScost]=ACA_QoS_MR(CDSEDmaxKMAlphaBetaGammaTauRhoQ)
%% Ant Colony Algorithm for QoS Multicast Routing
%  QoS组播路由蚁群算法

% 【GreenSim.C原创】QoS组播路由问题的蚁群算法通用Matlab源码

%  GreenSim团队原创作品,转载请注明

%  此源代码完整无删减,请放心使用

%  欲与原作者技术交流请发邮件aihuacheng@gmail.com
%% 输入参数列表
%  C            费用邻接矩阵(N×N)
%  D            延时邻接矩阵(N×N)
%  S            源节点
%  E            组播目的节点(行向量)
%  Dmax         延时约束
%  K            迭代次数(指蚂蚁出动多少波)
%  M            蚂蚁个数(每一波蚂蚁有多少个)
%  Alpha        表征信息素重要程度的参数
%  Beta         表征启发式因子(费用)重要程度的参数
%  Gamma        表征启发式因子(延时)重要程度的参数
%  Tau          初始信息素矩阵
%  Rho          信息素蒸发系数
%  Q            信息素增加强度系数
%% 输出参数列表
%  MRT          最优组播树(01邻接矩阵表示)
%  EDGES        最优组播树所有的边
%  cost         最优组播树的费用
%%
C=rand(88);
D=rand(88);
S=3;
E=[61];
Dmax=10;
K=10;
M=3;
Alpha=0.63;
Beta=0.4;
Gamma=0.8;
Tau=ones(88);
Rho=ones(88);
Q=2;
%% 第一步:变量初始化
N=size(C1);%网络节点个数为N
P=length(E);%目的节点个数为M
MRT=zeros(NN);
cost=inf;
ROUTES=cell(PKM);%用细胞结构存储到每一个目的节点的每一代的每一只蚂蚁的爬行路线
DELAYS=inf*ones(PKM);%用三维数组存储每代每个蚂蚁爬行到各个目的节点的延时
COSTS=inf*ones(PKM);%用三维数组存储每代每个蚂蚁爬行到各个目的节点的费用
%% 第二步:启动到P个目的节点的K轮蚂蚁觅食活动,每轮派出M只蚂蚁
for p=1:P
    Tau=ones(NN);
    for k=1:K
        for m=1:M
%%        第三步:状态初始化
            W=S;%当前节点初始化为起始点
            Path=S;%爬行路线初始化
            PD=0;%爬行路线延时初始化
            PC=0;%爬行路线费用初始化
            TABU=ones(1N);%禁忌表初始化
            TABU(S)=0;%S已经在初始点了,因此要排除
            CC=C;%费用邻接矩阵备份
            DD=D;%延时邻接矩阵备份
%%        第四步:下一步可以前往的节点
            DW=DD(W:);
            DW1=find(DW            for j=1:length(DW1)
                if TABU(DW1(j))==0
                    DW(j)=inf;
                end
            end
            LJD=find(DW            Len_LJD=length(LJD);%可选节点的个数
%%        觅食停止条件:蚂蚁未遇到食物或者陷入死胡同
            while (W~=E(p))&&(Len_LJD>=1)
%%            第五步:转轮赌法选择下一步怎么走
                PP=zeros(1Len_LJD);
                for i=1:Len_LJD
                    PP(i)=(Tau(WLJD(i))^Alpha)*(C(WLJD(i))^Beta)*(D(WLJD(i))^Gamma);
                end
                PP=PP/(sum(PP));%建立概率分布
                Pcum=cumsum(PP);
                Select=find(Pcum>=rand);
                to_visit=LJD(Select(1));%下一步将要前往的节点
%%            第六步:状态更新和记录
                Path=[Pathto_visit];%#ok %路径增加
                PD=PD+DD(Wto_visit);%路径延时累计
                PC=PC+CC(Wto_visit);%路径费用累计
                W=to_visit;%蚂蚁移到下一个节点
                for kk=1:N
                    if TABU(kk)==0
                        CC(Wkk)=inf;
                        CC(kkW)=inf;
                        DD(Wkk)=inf;
                        DD(kkW)=inf;
                    end
                end
                TABU(W)=0;%已访问过的节点从禁忌表中删除
                DW=DD(W:);
                DW1=find(DW

评论

共有 条评论