程序已经完成了大部分,需要进行以下修改:

  1. 在最外层循环中,遍历每个EL对应的最大T延时,需要将其初始化为0,即:
Tc = zeros(1,length(EL)); % 初始化每个EL对应的最大T延时
  1. 在内层循环中,需要记录当前EL下的最低时延,即:
Tc(s) = min(Ts(z),max_T11); % 记录当前EL下的最低时延
  1. 在内层循环中,需要判断是否满足能耗限制,如果满足则更新最低时延,即:
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
  1. 在内层循环中,需要记录能耗最大时的延时,即:
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('不同总能耗下的最低时延');
``
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

原文地址: http://www.cveoy.top/t/topic/fgX8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录