f0=1000000000;本地的处理器能力f1=5000000000;卸载的处理能力C=2000000;信道速率P=04;发射功率el=410^-8;移动设备的能耗EL=5 10 15 20 25;不同的总能耗限制Tc = zeros1lengthEL; 初始化每个EL对应的最大T延时Ts= zeros115;nums=randi10000 50000115;随机产生15个任务sorted_n
程序已经完成了大部分,需要进行以下修改:
- 在最外层循环中,遍历每个EL对应的最大T延时,需要将其初始化为0,即:
Tc = zeros(1,length(EL)); % 初始化每个EL对应的最大T延时
- 在内层循环中,需要记录当前EL下的最低时延,即:
Tc(s) = min(Ts(z),max_T11); % 记录当前EL下的最低时延
- 在内层循环中,需要判断是否满足能耗限制,如果满足则更新最低时延,即:
if EXn0+EYn0<=EL(s)||i==15%如果满足能耗限制或者处理完了任务
Ts(i)=max(T0,T1);
if i>1 && Ts(i)<Ts(i-1)%如果后面的分组方案,延时更加低,则我们更新
z=i;
elseif i==1%如果断点是1,则直接更新
z=i;
end
end
- 在内层循环中,需要记录能耗最大时的延时,即:
if EXn0+EYn0>EL(s) %优先本地的方案超出了能耗限制
k=i;
for j=1:k%进行补偿,将分给本地处理的任务部分选组分配到服务器处理
T0=T0-c(j)/f0;
T1=T1-d(j)/C-c(j)/f1;
EXn0=EXn0-c(j)*el;
EYn0=EYn0+d(j)/C*P;
if EXn0+EYn0<=EL(s)%直到这个方案下,能耗满足限制
max_T11 = max(T0,T1); %取能耗最大时的延时
break;
end
end
end
完整代码如下:
f0=1000000000;%本地的处理器能力
f1=5000000000;%卸载的处理能力
C=2000000;%信道速率
P=0.4;%发射功率
el=4*10^-8;%移动设备的能耗
EL=[5 10 15 20 25];%不同的总能耗限制
Tc = zeros(1,length(EL)); % 初始化每个EL对应的最大T延时
Ts= zeros(1,15);
nums=randi([10000 50000],1,15);%随机产生15个任务
sorted_nums=sort(nums);
for s=1:length(EL)
max_T0 = 0;
for i=1:15
T0=0;
T1=0;
EXn0=0;
EYn0=0;
for m=1:i
c(m)=1000*sorted_nums(m);
T0=T0+c(m)/f0;%本地处理时延
EXn0=EXn0+c(m)*el;%本地处理的能耗
end
for n=i+1:15
c(n)=1000*sorted_nums(n);
d(n)=sorted_nums(n);
T1=T1+d(n)/C+c(n)/f1;%卸载处理时延
EYn0=EYn0+d(n)/C*P;%卸载所需的能耗
end
if EXn0+EYn0>EL(s) %优先本地的方案超出了能耗限制
k=i;
for j=1:k%进行补偿,将分给本地处理的任务部分选组分配到服务器处理
T0=T0-c(j)/f0;
T1=T1-d(j)/C-c(j)/f1;
EXn0=EXn0-c(j)*el;
EYn0=EYn0+d(j)/C*P;
if EXn0+EYn0<=EL(s)%直到这个方案下,能耗满足限制
max_T11 = max(T0,T1); %取能耗最大时的延时
break;
end
end
end
if EXn0+EYn0<=EL(s)||i==15%如果满足能耗限制或者处理完了任务
Ts(i)=max(T0,T1);
if i>1 && Ts(i)<Ts(i-1)%如果后面的分组方案,延时更加低,则我们更新
z=i;
elseif i==1%如果断点是1,则直接更新
z=i;
end
end
end
Tc(s) = min(Ts(z),max_T11); % 记录当前EL下的最低时延
end
plot(EL, Tc,'ms-');
xlabel('总能耗限制');
ylabel('最低时延');
title('不同总能耗下的最低时延');
``
原文地址: http://www.cveoy.top/t/topic/fgX8 著作权归作者所有。请勿转载和采集!