📄 atadmissioncontrol.m
字号:
function [SuccessAdmission,FailureAdmission] = ...ATAdmissionControl(RealSCNum,ACDynamicRatio,ATRate,ATStarveRate,N,ATTrafficType,SlotTime,AdmissionControlStrategy,ATSuccessAdmission,ATFailureAdmission);%这一步实现动态产生用户请求,完成接入控制global ATActive;global AverageStarveRate;global ATRTTrafficTimer;SuccessAdmission = ATSuccessAdmission;global ATDeactiveTimer;FailureAdmission = ATFailureAdmission;global ATTotalActiveTime;global AverageRealSCnum;BETA = 0.01; %指数平滑因子,100个时隙ACTHRESHHOLD = 100000;%bpsSCThrreshhold = 250;FREEINTERVAL = 3; %unit:sMAX = 10; %sMIN = 6; %sif AdmissionControlStrategy == 0 for a = 1:N if ATTrafficType(a) == 4 if ATActive(a) == 1 %处于传输激活状态 if ATRTTrafficTimer(a) > 0 %传输还没有结束 ATRTTrafficTimer(a) = ATRTTrafficTimer(a) - 1; %传输时隙减少1 continue; else %传输Timer到时 ATRTTrafficTimer(a) = max(0,ATRTTrafficTimer(a)); ATActive(a) = 0; %设置为非激活状态 ATDeactiveTimer(a) = floor(exprnd(FREEINTERVAL)/SlotTime); %设置空闲计时器 end else %移动台处于非传输状态 if ATDeactiveTimer(a) > 0 %还处于空闲状态 ATDeactiveTimer(a) = ATDeactiveTimer(a) - 1; continue; else ATDeactiveTimer(a) = max(0,ATDeactiveTimer(a)); ATActive(a) = 1; ATRTTrafficTimer(a) = floor((MIN+(MAX-MIN)*rand())/SlotTime); ATTotalActiveTime(a) = ATTotalActiveTime(a) + ATRTTrafficTimer(a); SuccessAdmission(a) = SuccessAdmission(a) + 1; end end end% if ATTrafficType(a) == 2 %对FTP用户作接入控制% if ATActive(a) == 1% continue;% else% if sumStarveRate > ACTHRESHHOLD% FailureAdmission(a) = FailureAdmission(a) + 1;% else% Active(a) = 1;% SuccessAdmission(a) = SuccessAdmission(a) + 1;% end% end% end endelseif AdmissionControlStrategy == 1 %采用申请速率和实际传输速率的差来判断接入 AverageStarveRate = (1-BETA)*AverageStarveRate + BETA*ATStarveRate; sumStarveRate = sum(AverageStarveRate); for a = 1:N if ATTrafficType(a) == 4 if ATActive(a) == 1 %处于传输激活状态 if ATRTTrafficTimer(a) > 0 %传输还没有结束 ATRTTrafficTimer(a) = ATRTTrafficTimer(a) - 1; %传输时隙减少1 continue; else %传输Timer到时 ATRTTrafficTimer(a) = max(0,ATRTTrafficTimer(a)); ATActive(a) = 0; %设置为非激活状态 ATDeactiveTimer(a) = floor(exprnd(FREEINTERVAL)/SlotTime); %设置空闲计时器 end else %移动台处于非传输状态 if ATDeactiveTimer(a) > 0 %还处于空闲状态 ATDeactiveTimer(a) = ATDeactiveTimer(a) - 1; continue; else ATDeactiveTimer(a) = max(0,ATDeactiveTimer(a)); if sumStarveRate > ACDynamicRatio*ACTHRESHHOLD ATActive(a) = 0; ATRTTrafficTimer(a) = 0;%floor(60+(100-60)*rand())/SlotTime; FailureAdmission(a) = FailureAdmission(a) + 1; ATDeactiveTimer(a) = floor(exprnd(FREEINTERVAL)/SlotTime); else ATActive(a) = 1; ATRTTrafficTimer(a) = floor((MIN+(MAX-MIN)*rand())/SlotTime); ATTotalActiveTime(a) = ATTotalActiveTime(a) + ATRTTrafficTimer(a); SuccessAdmission(a) = SuccessAdmission(a) + 1; end end end end% if ATTrafficType(a) == 2 %对FTP用户作接入控制% if ATActive(a) == 1% continue;% else% if sumStarveRate > ACTHRESHHOLD% FailureAdmission(a) = FailureAdmission(a) + 1;% else% Active(a) = 1;% SuccessAdmission(a) = SuccessAdmission(a) + 1;% end% end% end endelseif AdmissionControlStrategy == 2 AverageRealSCnum = (1-BETA)*AverageRealSCnum + BETA*RealSCNum; for a = 1:N if ATTrafficType(a) == 4 if ATActive(a) == 1 %处于传输激活状态 if ATRTTrafficTimer(a) > 0 %传输还没有结束 ATRTTrafficTimer(a) = ATRTTrafficTimer(a) - 1; %传输时隙减少1 continue; else %传输Timer到时 ATRTTrafficTimer(a) = max(0,ATRTTrafficTimer(a)); ATActive(a) = 0; %设置为非激活状态 ATDeactiveTimer(a) = floor(exprnd(FREEINTERVAL)/SlotTime); %设置空闲计时器 end else %移动台处于非传输状态 if ATDeactiveTimer(a) > 0 %还处于空闲状态 ATDeactiveTimer(a) = ATDeactiveTimer(a) - 1; continue; else ATDeactiveTimer(a) = max(0,ATDeactiveTimer(a)); if AverageRealSCnum > SCThrreshhold ATActive(a) = 0; ATRTTrafficTimer(a) = 0;%floor(60+(100-60)*rand())/SlotTime; FailureAdmission(a) = FailureAdmission(a) + 1; ATDeactiveTimer(a) = floor(exprnd(FREEINTERVAL)/SlotTime); else ATActive(a) = 1; ATRTTrafficTimer(a) = floor((MIN+(MAX-MIN)*rand())/SlotTime); ATTotalActiveTime(a) = ATTotalActiveTime(a) + ATRTTrafficTimer(a); SuccessAdmission(a) = SuccessAdmission(a) + 1; end end end end endend% averageStarveRate = (1-BETA)*averageStarveRate + BETA*ATRate;;%注意,此时AverageStarveRate用来表示系统的平均吞吐量% sumRate = sum(averageStarveRate);% RateREQ = sum(ATRate + ATStarveRate);% for a = 1:N% if ATTrafficType(a) == 4% if Active(a) == 1 %处于传输激活状态% if RTTrafficTimer(a) > 0 %传输还没有结束% RTTrafficTimer(a) = RTTrafficTimer(a) - 1; %传输时隙减少1% continue;% else %传输Timer到时% RTTrafficTimer(a) = max(0,RTTrafficTimer(a));% Active(a) = 0; %设置为非激活状态% DeactiveTimer(a) = floor(exprnd(3)/SlotTime); %设置空闲计时器% end% else %移动台处于非传输状态% if DeactiveTimer(a) > 0 %还处于空闲状态% DeactiveTimer(a) = DeactiveTimer(a) - 1;% continue;% else% DeactiveTimer(a) = max(0,DeactiveTimer(a));% if sumRate > ACDynamicRatio*ACTHRESHHOLD% Active(a) = 0;% RTTrafficTimer(a) = 0;%floor(60+(100-60)*rand())/SlotTime;% FailureAdmission(a) = FailureAdmission(a) + 1;% DeactiveTimer(a) = floor(exprnd(3)/SlotTime);% else% Active(a) = 1;% RTTrafficTimer(a) = floor((6+(10-6)*rand())/SlotTime);% TotalActiveTime(a) = TotalActiveTime(a) + RTTrafficTimer(a);% SuccessAdmission(a) = SuccessAdmission(a) + 1;% end% end% end% end% % if ATTrafficType(a) == 2 %对FTP用户作接入控制% % if ATActive(a) == 1% % continue;% % else% % if sumStarveRate > ACTHRESHHOLD% % FailureAdmission(a) = FailureAdmission(a) + 1;% % else% % Active(a) = 1;% % SuccessAdmission(a) = SuccessAdmission(a) + 1;% % end% % end% % end% end% end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -