資源簡介
該程序是基于蜂群算法的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
- 上一篇:倒立擺simuli
nk控制仿真.zip - 下一篇:多層bp神經網絡代碼附帶數據集
評論
共有 條評論