├── NOMA-MEC.pdf ├── simulation_codes ├── readme ├── Fig_3_exhaustive_search.m ├── Fig_6_changing_M.m ├── Fig_5_changing_Nv2.m ├── Fig_7_changing_crition.m ├── Table_1.m └── Fig_4_D3_3user.m └── README.md /NOMA-MEC.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhiguo-ding/NOMA-MEC/HEAD/NOMA-MEC.pdf -------------------------------------------------------------------------------- /simulation_codes/readme: -------------------------------------------------------------------------------- 1 | Here are the codes for generating Fig. 3-7 and Table 1. 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NOMA-MEC 2 | A general framework for NOMA-MEC offloading which is published in the following work 3 | 4 | Z. Ding, D. Xu, R. Schober and H. V. Poor, Hybrid NOMA Offloading in Multi-User MEC Networks, IEEE TWC, submitted. 5 | -------------------------------------------------------------------------------- /simulation_codes/Fig_3_exhaustive_search.m: -------------------------------------------------------------------------------- 1 | clear all 2 | close all 3 | M=3; %number of users 4 | hall = ones(1,M); %all the channels 5 | Dall = [8 12 16]; %all the deadlines 6 | N = 10; %number of bits 7 | 8 | Poma=0; % max power needed by OMA 9 | for m =1 : M 10 | if m >1 11 | Poma(m) = (exp(N/(Dall(m) - Dall(m-1)))-1)/hall(m); 12 | else 13 | Poma(m) = (exp(N/(Dall(m) ))-1)/hall(m); 14 | end 15 | end 16 | 17 | tm(1) = Dall(1);% User 1's deadline, t1 18 | P = zeros(M,M); 19 | P(1,1) = (exp(N/tm(1))-1)/hall(1); %User 1's transmit power 20 | am1(1) = 1/(1+P(1,1)*hall(1)); % a21 is decided by User 1's parameters 21 | for m = 2: M 22 | tm(m) = Dall(m) - Dall(m-1); 23 | if tm(m)<=-N/log(am1(m-1)) %hybrid NOMA 24 | Pm1 = (am1(m-1)*exp( (N-Dall(m-1)*log(am1(m-1)))/(Dall(m)) )-1)/am1(m-1)/hall(m); 25 | Pmm = ( exp((N-Dall(m-1)*log(am1(m-1)))/(Dall(m)) )-1)/hall(m); 26 | P(m,1:m-1) = Pm1; 27 | P(m,m) = Pmm; 28 | else %OMA 29 | P(m,m) = (exp(N/tm(m))-1)/hall(m); 30 | end 31 | am1(m) = 1/(1 + sum(P(1:m,1).*hall(1:m).')); 32 | end 33 | 34 | oma = tm(1)*P(1,1);; 35 | ojbe = tm(1)*P(1,1); 36 | for m = 2: M 37 | oma = oma + tm(m)*Poma(m); 38 | for n = 1 : m 39 | ojbe = ojbe + tm(n)*P(m,n); 40 | end 41 | end 42 | 43 | 44 | P11 = P(1,1); P21 = P(2,1); P22 = P(2,2); 45 | t1 = Dall(1); t2 = Dall(2) - Dall(1); t3 = Dall(3) - Dall(2); 46 | h1 = hall(1); h2 = hall(2); h3 = hall(3); 47 | Pvec = [0:0.1: 5]; 48 | for i = 1 : length(Pvec) 49 | for j = 1: length(Pvec) 50 | P31 = Pvec(i); P32 = Pvec(j); 51 | nbit_2slot = t1*log(1+P31*h3/(1+P11*h1+P21*h2))... 52 | +t2*log(1+P32*h3/(1+P22*h2)); 53 | P33x = (exp( (N-nbit_2slot)/t3 )-1)/h3; 54 | if P33x>0 & P33x1 16 | Poma(m) = (exp(N/(Dall(m) - Dall(m-1)))-1)/hall(m); 17 | else 18 | Poma(m) = (exp(N/(Dall(m) ))-1)/hall(m); 19 | end 20 | end 21 | 22 | %hybrid NOMA 23 | tm(1) = Dall(1);% User 1's deadline, t1 24 | P = zeros(M,M); 25 | P(1,1) = (exp(N/tm(1))-1)/hall(1); %User 1's transmit power 26 | am = zeros(M,M); 27 | am(1) = 1/(1+P(1,1)*hall(1)); % % a21 is decided by User 1's parameters 28 | for m = 2: M 29 | tm(m) = Dall(m) - Dall(m-1); 30 | %there are two ways. Method 1: the following is based on Lemma 1 31 | % tempx1 = exp((N-sum(tm(1:m-1).*log(am(m-1,1:m-1))) )/Dall(m)); 32 | % if min(am(m-1,1:m-1))> exp(-(N-sum(tm(1:m-1).*log(am(m-1,1:m-1))) )/Dall(m))%tm(m)<=-N/log(am1(m-1)) %hybrid NOMA 33 | % Pmm = (tempx1-1)/hall(m); 34 | % P(m,1:m-1) = (am(m-1,1:m-1)*tempx1-1)./am(m-1,1:m-1)/hall(m); 35 | % P(m,m) = Pmm; 36 | % else %OMA 37 | % P(m,m) = (exp(N/tm(m))-1)/hall(m); 38 | % end 39 | 40 | % %%% method 2: using fmincon as the alternative 41 | nonlcon = @mycons;%(x,N,tm,m,P,hall); 42 | options = optimoptions('fmincon','Display', 'off','MaxFunctionEvaluations', 300000); %display off 43 | x0 = zeros(m,1); 44 | A = []; % No other constraints 45 | b = []; 46 | Aeq = []; 47 | beq = []; 48 | lb = []; 49 | ub = []; 50 | x=[]; 51 | x = fmincon(@(x) sum(x'.*tm(1:m)),x0,A,b,Aeq,beq,lb,ub,@(x) mycons(x,N,tm,m,P,hall),options); 52 | P(m,1:m)=x'; 53 | % %%%% 54 | for n = 1 : m 55 | am(m,n) = 1/(1 + sum(P(n:m,n).*hall(n:m).')); 56 | end 57 | end 58 | 59 | ojbe(i) = tm(1)*P(1,1); 60 | oma(i) = tm(1)*Poma(1,1); 61 | for m = 2: M 62 | oma(i) = oma(i) + tm(m)*Poma(m); 63 | for n = 1 : m 64 | ojbe(i) = ojbe(i) + tm(n)*P(m,n); 65 | end 66 | end 67 | end 68 | 69 | plot(Mvec,oma,Mvec, ojbe) 70 | 71 | 72 | 73 | function [c,ceq] = mycons(x,N,tm,m,P,hall) 74 | hm = hall(m); 75 | c(1) = N; 76 | for i = 1: m 77 | c(1) = c(1) - tm(i)*log(1 + hm*x(i)/(1+sum(hall(i:m-1).*P(i:m-1,i)'))) ; 78 | c(i+1) = -x(i); 79 | end 80 | ceq = []; 81 | 82 | end -------------------------------------------------------------------------------- /simulation_codes/Fig_5_changing_Nv2.m: -------------------------------------------------------------------------------- 1 | clear all 2 | d=10; 3 | 4 | M=5; %number of users 5 | hall = ones(1,M);%[1 2 3 4 5 ]; %all the channels 6 | size = 8; 7 | Dall = [size: size/2:size*M];%[5 8 10 12 14]; %all the deadlines 8 | %Dall = [5 8 10 12 14]; 9 | 10 | Nvec = [10 : 1 : 20]; 11 | for i = 1 : length(Nvec) 12 | N = Nvec(i); 13 | 14 | %OMA 15 | Poma=0; % max power needed by OMA 16 | for m =1 : M 17 | if m >1 18 | Poma(m) = (exp(N/(Dall(m) - Dall(m-1)))-1)/hall(m); 19 | else 20 | Poma(m) = (exp(N/(Dall(m) ))-1)/hall(m); 21 | end 22 | end 23 | 24 | %hybrid NOMA 25 | tm(1) = Dall(1);% User 1's deadline, t1 26 | P = zeros(M,M); 27 | P(1,1) = (exp(N/tm(1))-1)/hall(1); %User 1's transmit power 28 | am = zeros(M,M); 29 | am(1) = 1/(1+P(1,1)*hall(1)); % a21 is decided by User 1's parameters 30 | for m = 2: M 31 | tm(m) = Dall(m) - Dall(m-1); 32 | %there are two ways. Method 1: the following is based on Lemma 1 33 | % tempx1 = exp((N-sum(tm(1:m-1).*log(am(m-1,1:m-1))) )/Dall(m)); 34 | % if min(am(m-1,1:m-1))> exp(-(N-sum(tm(1:m-1).*log(am(m-1,1:m-1))) )/Dall(m))%tm(m)<=-N/log(am1(m-1)) %hybrid NOMA 35 | % Pmm = (tempx1-1)/hall(m); 36 | % P(m,1:m-1) = (am(m-1,1:m-1)*tempx1-1)./am(m-1,1:m-1)/hall(m); 37 | % P(m,m) = Pmm; 38 | % else %OMA 39 | % P(m,m) = (exp(N/tm(m))-1)/hall(m); 40 | % end 41 | 42 | % %%% method 2: using fmincon as the alternative 43 | nonlcon = @mycons;%(x,N,tm,m,P,hall); 44 | options = optimoptions('fmincon','Display', 'off','MaxFunctionEvaluations', 300000); %display off 45 | x0 = zeros(m,1); 46 | A = []; % No other constraints 47 | b = []; 48 | Aeq = []; 49 | beq = []; 50 | lb = []; 51 | ub = []; 52 | x=[]; 53 | x = fmincon(@(x) sum(x'.*tm(1:m)),x0,A,b,Aeq,beq,lb,ub,@(x) mycons(x,N,tm,m,P,hall),options); 54 | P(m,1:m)=x'; 55 | %%%% 56 | for n = 1 : m 57 | am(m,n) = 1/(1 + sum(P(n:m,n).*hall(n:m).')); 58 | end 59 | end 60 | 61 | ojbe(i) = tm(1)*P(1,1); 62 | oma(i) = tm(1)*Poma(1,1); 63 | for m = 2: M 64 | oma(i) = oma(i) + tm(m)*Poma(m); 65 | for n = 1 : m 66 | ojbe(i) = ojbe(i) + tm(n)*P(m,n); 67 | end 68 | end 69 | end 70 | 71 | plot(Nvec,oma,Nvec, ojbe) 72 | 73 | 74 | 75 | function [c,ceq] = mycons(x,N,tm,m,P,hall) 76 | hm = hall(m); 77 | c(1) = N; 78 | for i = 1: m 79 | c(1) = c(1) - tm(i)*log(1 + hm*x(i)/(1+sum(hall(i:m-1).*P(i:m-1,i)'))) ; 80 | c(i+1) = -x(i); 81 | end 82 | ceq = []; 83 | 84 | end 85 | -------------------------------------------------------------------------------- /simulation_codes/Fig_7_changing_crition.m: -------------------------------------------------------------------------------- 1 | clear all 2 | d=10; 3 | 4 | M=5; %number of users 5 | hall = ones(1,M);%[1 2 3 4 5 ]; %all the channels 6 | dvec = [1:1:10]; 7 | 8 | %Dall = 2*ones(1,M-1); 9 | Dall = [5 ]; 10 | N=10 ;%for case I %N=10 for case II 11 | cond=zeros(M,1); 12 | 13 | for i = 1 : length(dvec) 14 | Dall(1) = 10; 15 | for m =2: M 16 | Dall(m) = Dall(m-1) + dvec(i); 17 | end 18 | %OMA 19 | Poma=0; % max power needed by OMA 20 | for m =1 : M 21 | if m >1 22 | Poma(m) = (exp(N/(Dall(m) - Dall(m-1)))-1)/hall(m); 23 | else 24 | Poma(m) = (exp(N/(Dall(m) ))-1)/hall(m); 25 | end 26 | end 27 | 28 | %hybrid NOMA 29 | tm(1) = Dall(1);% User 1's deadline, t1 30 | P = zeros(M,M); 31 | P(1,1) = (exp(N/tm(1))-1)/hall(1); %User 1's transmit power 32 | am = zeros(M,M); 33 | am(1) = 1/(1+P(1,1)*hall(1)); % a21 is decided by User 1's parameters 34 | for m = 2: M 35 | tm(m) = Dall(m) - Dall(m-1); 36 | %there are two ways. Method 1: the following is based on Lemma 1 37 | % tempx1 = exp((N-sum(tm(1:m-1).*log(am(m-1,1:m-1))) )/Dall(m)); 38 | % if min(am(m-1,1:m-1))> exp(-(N-sum(tm(1:m-1).*log(am(m-1,1:m-1))) )/Dall(m))%tm(m)<=-N/log(am1(m-1)) %hybrid NOMA 39 | % Pmm = (tempx1-1)/hall(m); 40 | % P(m,1:m-1) = (am(m-1,1:m-1)*tempx1-1)./am(m-1,1:m-1)/hall(m); 41 | % P(m,m) = Pmm; 42 | % else %OMA 43 | % P(m,m) = (exp(N/tm(m))-1)/hall(m); 44 | % end 45 | 46 | % %%% method 2: using fmincon as the alternative 47 | nonlcon = @mycons;%(x,N,tm,m,P,hall); 48 | options = optimoptions('fmincon','Display', 'off','MaxFunctionEvaluations', 300000); %display off 49 | x0 = zeros(m,1); 50 | A = []; % No other constraints 51 | b = []; 52 | Aeq = []; 53 | beq = []; 54 | lb = []; 55 | ub = []; 56 | x=[]; 57 | x = fmincon(@(x) sum(x'.*tm(1:m)),x0,A,b,Aeq,beq,lb,ub,@(x) mycons(x,N,tm,m,P,hall),options); 58 | P(m,1:m)=x'; 59 | % %%%% 60 | for n = 1 : m 61 | am(m,n) = 1/(1 + sum(P(n:m,n).*hall(n:m).')); 62 | end 63 | end 64 | 65 | ojbe(:,i) = tm(1)*P(:,1); 66 | oma(:,i) = tm'.*Poma'; 67 | for m = 2: M 68 | for n = 2 : m 69 | ojbe(m,i) = ojbe(m,i) + tm(n)*P(m,n); 70 | end 71 | end 72 | 73 | cond(:,i) = -N./(log(am(:,1))); 74 | end 75 | 76 | plot(dvec,oma(2,:),dvec, ojbe(1:M,:)) 77 | 78 | function [c,ceq] = mycons(x,N,tm,m,P,hall) 79 | hm = hall(m); 80 | c(1) = N; 81 | for i = 1: m 82 | c(1) = c(1) - tm(i)*log(1 + hm*x(i)/(1+sum(hall(i:m-1).*P(i:m-1,i)'))) ; 83 | c(i+1) = -x(i); 84 | end 85 | ceq = []; 86 | 87 | end -------------------------------------------------------------------------------- /simulation_codes/Table_1.m: -------------------------------------------------------------------------------- 1 | clear all 2 | close all 3 | M=3; %number of users 4 | hall = ones(1,M); %all the channels 5 | Dall = [8 12 16]; %all the deadlines 6 | N = 12; %number of bits 7 | w = [1 1 1]/3;%[1 2 3]/6; you need to change this for different weighting coefficients 8 | 9 | Poma=0; % max power needed by OMA 10 | for m =1 : M 11 | if m >1 12 | Poma(m) = (exp(N/(Dall(m) - Dall(m-1)))-1)/hall(m); 13 | else 14 | Poma(m) = (exp(N/(Dall(m) ))-1)/hall(m); 15 | end 16 | end 17 | 18 | tm(1) = Dall(1);% User 1's deadline, t1 19 | P = zeros(M,M); 20 | P(1,1) = (exp(N/tm(1))-1)/hall(1); %User 1's transmit power 21 | am1(1) = 1/(1+P(1,1)*hall(1)); % a21 is decided by User 1's parameters 22 | for m = 2: M 23 | tm(m) = Dall(m) - Dall(m-1); 24 | if tm(m)<=-N/log(am1(m-1)) %hybrid NOMA 25 | Pm1 = (am1(m-1)*exp( (N-Dall(m-1)*log(am1(m-1)))/(Dall(m)) )-1)/am1(m-1)/hall(m); 26 | Pmm = ( exp((N-Dall(m-1)*log(am1(m-1)))/(Dall(m)) )-1)/hall(m); 27 | P(m,1:m-1) = Pm1; 28 | P(m,m) = Pmm; 29 | else %OMA 30 | P(m,m) = (exp(N/tm(m))-1)/hall(m); 31 | end 32 | am1(m) = 1/(1 + sum(P(1:m,1).*hall(1:m).')); 33 | end 34 | 35 | oma = tm(1)*P(1,1); 36 | ojbe = tm(1)*P(1,1); 37 | for m = 2: M 38 | oma = oma + tm(m)*Poma(m); 39 | for n = 1 : m 40 | ojbe = ojbe + tm(n)*P(m,n); 41 | end 42 | end 43 | 44 | %three user 45 | P11 = P(1,1); P21 = P(2,1);P22 = P(2,2); P31 = P(3,1);P32=P(3,2);P33=P(3,3); 46 | t1 = Dall(1); t2 = Dall(2) - Dall(1); t3 = Dall(3) - Dall(2); 47 | ojbe = w(1)*t1*P11 + w(2)*(t1*P21+t2*P22) +w(3)*(t1*P31+t2*P32+t3*P33); 48 | 49 | P11 = P(1,1); P21 = P(2,1); P22 = P(2,2); 50 | t1 = Dall(1); t2x = Dall(2) - Dall(1); t3x = Dall(3) - Dall(2); 51 | h1 = hall(1); h2 = hall(2); h3 = hall(3); 52 | Pvec = [0:0.1: 10]; 53 | t3vec = [3.01:0.5:Dall(3) - Dall(2) Dall(3) - Dall(2)]; 54 | t2vec = [3.01:0.5:Dall(2) - Dall(1) Dall(2) - Dall(1)]; 55 | 56 | all_vec=[0 0 0 0 0 0 0 0]; 57 | energy=100000; 58 | index1=1; 59 | for i2 = 1 : length(Pvec) 60 | for j2 = 1 : length(t2vec) 61 | P21 = Pvec(i2); t2 = t2vec(j2); 62 | nbit_2slot = t1*log(1+P21*h2/(1+P11*h1)); 63 | P22 = (exp( (N-nbit_2slot)/t2 )-1)/h2; 64 | for i3 = 1 : length(Pvec) 65 | for j3 = 1: length(Pvec) 66 | for k3 = 1: length(t3vec) 67 | P31 = Pvec(i3); P32 = Pvec(j3); t3 = t3vec(k3); 68 | nbit_3slot = t1*log(1+P31*h3/(1+P11*h1+P21*h2))... 69 | +t2*log(1+P32*h3/(1+P22*h2));% + t3*log(1+P33*h3); 70 | P33 = (exp( (N-nbit_3slot)/t3 )-1)/h3; 71 | x=w(1)*t1*P11 + w(2)*(t1*P21+t2*P22) +w(3)*(t1*P31+t2*P32+t3*P33); 72 | if P22>=0 & P33>=0 & P221 19 | Poma(m) = (exp(N/(Dall(m) - Dall(m-1)))-1)/hall(m); 20 | else 21 | Poma(m) = (exp(N/(Dall(m) ))-1)/hall(m); 22 | end 23 | end 24 | 25 | %hybrid NOMA 26 | tm(1) = Dall(1);% User 1's deadline, t1 27 | P = zeros(M,M); 28 | P(1,1) = (exp(N/tm(1))-1)/hall(1); %User 1's transmit power 29 | am = zeros(M,M); 30 | am(1) = 1/(1+P(1,1)*hall(1)); % a21 is decided by User 1's parameters 31 | 32 | for m = 2: M 33 | tm(m) = Dall(m) - Dall(m-1); 34 | 35 | %there are two ways. Method 1: the following is based on Lemma 1 36 | % tempx1 = exp((N-sum(tm(1:m-1).*log(am(m-1,1:m-1))) )/Dall(m)); 37 | % if min(am(m-1,1:m-1))> exp(-(N-sum(tm(1:m-1).*log(am(m-1,1:m-1))) )/Dall(m))%tm(m)<=-N/log(am1(m-1)) %hybrid NOMA 38 | % Pmm = (tempx1-1)/hall(m); 39 | % P(m,1:m-1) = (am(m-1,1:m-1)*tempx1-1)./am(m-1,1:m-1)/hall(m); 40 | % P(m,m) = Pmm; 41 | % else %OMA 42 | % P(m,m) = (exp(N/tm(m))-1)/hall(m); 43 | % end 44 | 45 | % %%% method 2: using fmincon as the alternative 46 | nonlcon = @mycons;%(x,N,tm,m,P,hall); 47 | options = optimoptions('fmincon','Display', 'off','MaxFunctionEvaluations', 300000); %display off 48 | x0 = zeros(m,1); 49 | A = []; % No other constraints 50 | b = []; 51 | Aeq = []; 52 | beq = []; 53 | lb = []; 54 | ub = []; 55 | x=[]; 56 | x = fmincon(@(x) sum(x'.*tm(1:m)),x0,A,b,Aeq,beq,lb,ub,@(x) mycons(x,N,tm,m,P,hall),options); 57 | P(m,1:m)=x'; 58 | % %%%% 59 | for n = 1 : m 60 | am(m,n) = 1/(1 + sum(P(n:m,n).*hall(n:m).')); 61 | end 62 | end 63 | 64 | ojbe(i,j) = tm(1)*P(1,1); 65 | oma(i,j) = tm(1)*Poma(1,1); 66 | for m = 2: M 67 | oma(i,j) = oma(i,j) + tm(m)*Poma(m); 68 | for n = 1 : m 69 | ojbe(i,j) = ojbe(i,j) + tm(n)*P(m,n); 70 | end 71 | end 72 | 73 | %just for plotting, we need to force some values to inf 74 | if oma(i,j)>=700 75 | oma(i,j) = 700; 76 | end 77 | if ojbe(i,j)>=700 78 | ojbe(i,j) = 700; 79 | end 80 | 81 | end 82 | end 83 | 84 | surf(Dvec,Dvec, oma ) 85 | hold 86 | 87 | surf(Dvec,Dvec, ojbe ) 88 | 89 | function [c,ceq] = mycons(x,N,tm,m,P,hall) 90 | hm = hall(m); 91 | c(1) = N; 92 | for i = 1: m 93 | c(1) = c(1) - tm(i)*log(1 + hm*x(i)/(1+sum(hall(i:m-1).*P(i:m-1,i)'))) ; 94 | c(i+1) = -x(i); 95 | end 96 | ceq = []; 97 | 98 | end 99 | 100 | --------------------------------------------------------------------------------