clc;
clear all;
global UEnum BS Ri BSnum Fognum Sm wb BlockFognum PB PB_w PF PF_w PFi PFi_w PU PU_w PUi PUi_w N0 N0_w BH Cn F
%%
%%功率化
BS=500;
PB=46;%%dBm BS
PB_w=(10.^(PB./10))./1000;
PF=33;%%dBm Fog
PF_w=(10.^(PF./10))./1000;
PFi=-30;%增益
PFi_w=(10.^(PFi./10))./1000;
PU=20;%%dBm UE
PU_w=(10.^(PU./10))./1000;
PUi=-30;%增益
PUi_w=(10.^(PUi./10))./1000;
N0=-114;%%dBm 噪声
N0_w=(10.^(N0./10))./1000;
BH=1200;%HZ
%%数量化
BSnum=1;
Fognum=38;
BlockFognum=12;
UEnum=100;
Sm=500;% MB 任务大小kb
Cn=1%CPU周期
F=1800 %最大频率
% Sb=1;%MB 区块大小
wb=0.1;
%%
%
%%信誉初始化
Ri=ones(1,Fognum);
rand('seed',2)
t1=rand(1,Fognum);%t1轮共识
Ri=Ri.*t1;
figure(1)
hold on
for i=1:Fognum
y=Ri(1,i);
width=0.8
bar(i,y,width,'Facecolor',[0.5,0.6,0.8],'Edgecolor',[0.5,0.6,0.8],'LineWidth',1);
% bar(i,y,width,'Facecolor',[0.5,1,1],'Edgecolor',[0,0,0],'LineWidth',3,'LineStyle',':');
end
VH=0.6
VL=0.1
x=0:Fognum+1
y1(1:Fognum+2)=VL
y2(1:Fognum+2)=VH
plot(x,y1,'r-',x,y2,'g-')
axis([0,Fognum+1,0,1])
set(gca,'xtick',0:2:Fognum)
%set(gca,'XTicklables',{})
title('Fog Server Trust Value')
xlabel('雾服务器编号')
ylabel('当前信誉值')
% Ri(1,1)=Value(Ri(1,1),1)
% for i=1:Fognum
% Fog_value(1,i)=Ri(1,i)7
% end
%%
%%
%%生成UE Fog 分布图
figure(2)
UEinfo=setUE()
Foginfo=setFog()
Blockinfo=setBlockFog()
hold on
a1=[-500,-500];%左下
a2=[500,-500];%右下
a3=[500,500];%右上
a4=[-500,500];%左上
line(a1,a2);line(a2,a3);line(a3,a4);line(a4,a1);
% line([-500,500],[0,0],'linestyle',':');line([0,0],[500,-500],'linestyle',':');
% line([-500,500],[500,-500],'linestyle',':');line([-500,500],[-500,500],'linestyle',':');
%h=plot(UEinfo(1:UEnum,1),UEinfo(1:UEnum,2),'r.',Foginfo(1:Fognum,1),Foginfo(1:Fognum,2),'gp',Blockinfo(1:BlockFognum,1),Blockinfo(1:BlockFognum,2),'yd')
a=plot(UEinfo(1:UEnum,1),UEinfo(1:UEnum,2),'r.','markersize',15)
c=plot(Foginfo(1:Fognum,1),Foginfo(1:Fognum,2),'gd','markersize',6,'markerfacecolor','b')
%b=plot(Blockinfo(1:BlockFognum,1),Blockinfo(1:BlockFognum,2),'yd','markerfacecolor','y')
voronoi(Foginfo(1:Fognum,1),Foginfo(1:Fognum,2),':')
ld=legend([a,c],'UE','Fog','Location','southoutside')
set(ld,'Orientation','horizon')
title(ld,'Legend Title')
title('UE Fog初始位置分布图')
%axis square
% axis([-500 500 -500 500])
set(gca,'XTick',-500:100:500)
%set(gca,'XTicklabel',{'-500','-400','-300','-200','-100','0','100','200','300','400','500'})
set(gca,'YTick',-500:100:500)
%set(gca,'YTicklabel',{'-500','-400','-300','-200','-100','0','100','200','300','400','500'})
% text(300,100,'S1');text(100,300,'S2');text(-100,300,'S3');text(-300,100,'S4');
% text(-300,-100,'S5');text(-100,-300,'S6');text(100,-300,'S7');text(300,-100,'S8');
%%
%%
%%基于t1轮信誉值生成Blockpoint当前分布图(范诺图)
figure(3)
UEinfo=setUE()
Foginfo=setFog()
Blockpoint=Blockpoint()
a1=[-500,-500];%左下
a2=[500,-500];%右下
a3=[500,500];%右上
a4=[-500,500];%左上
line(a1,a2);line(a2,a3);line(a3,a4);line(a4,a1);
% line([-500,500],[0,0],'linestyle',':');line([0,0],[500,-500],'linestyle',':');
% line([-500,500],[500,-500],'linestyle',':');line([-500,500],[-500,500],'linestyle',':');
hold on;
%h=plot(UEinfo(1:UEnum,1),UEinfo(1:UEnum,2),'r.',Foginfo(1:Fognum,1),Foginfo(1:Fognum,2),'gd',Blockinfo(1:BlockFognum,1),Blockinfo(1:BlockFognum,2),'yd')
a=plot(UEinfo(1:UEnum,1),UEinfo(1:UEnum,2),'r.','markersize',15)
c=plot(Foginfo(1:Fognum,1),Foginfo(1:Fognum,2),'gd','markersize',6,'markerfacecolor','b')
b=plot(Blockpoint(1:BlockFognum,1),Blockpoint(1:BlockFognum,2),'yd','markerfacecolor','y')
voronoi(Foginfo(1:Fognum,1),Foginfo(1:Fognum,2),':')
ld=legend([a,b,c],'UE','Blockpoint','Fog','Location','southoutside')
set(ld,'Orientation','horizon')
title(ld,'Legend Title')
title('Blockpoint位置分布图')
%axis square
set(gca,'XTick',-500:100:500)
% set(gca,'XTicklabel',-500:100:500)
set(gca,'YTick',-500:100:500)
%set(gca,'YTicklabel',{'-500','-400','-300','-200','-100','0','100','200','300','400','500'})
% text(300,100,'S1');text(100,300,'S2');text(-100,300,'S3');text(-300,100,'S4');
% text(-300,-100,'S5');text(-100,-300,'S6');text(100,-300,'S7');text(300,-100,'S8');
%%
%%
%%能耗对比
EE=[]
ED0=[]
ED1=[]
figure(4)
num=30
for i=1:num
UEnoce=randi(UEnum,[1,1])%%当前缓存的用户(缓存)
[E0,T0]=mode0_EE(UEnoce)
[E1,T1]=mode1_EE()
mode=modeSelect(E0,E1)
if mode==0
EE(i)=E0
else EE(i)=E1
end
ED0(i)=E0
ED1(i)=E1
end
x=1:num
y=EE(1:num)
z0=ED0(1:num)
z1=ED1(1:num)
hold on
plot(x,z0,'rd',x,z1,'gd',x,y,'bd',x,z0,'r:',x,z1,'g:',x,y,'b-')
xlim([0,num+1])
ld1=legend('Pattern0','Pattern1','OptimalPattern','Location','southoutside')
set(ld1,'Orientation','horizon')
title(ld1,'Legend Title')
set(gca,'xtick',0:2:num)%'LineWidth',1 坐标轴的宽度
%set(gca,'xticklabelrotation',45)
title('卸载模式选择')
xlabel('用户编号')
ylabel('系统能耗')
%%
%%
%不同模式下,能耗对比(随用户数量变化)
figure(5)
Etotal=[]
Fognoce=randi(UEnum,[1,1])%%当前设备连接的用户
for i=1:num
Etotal(i)=sum(EE(1:i))
E0total(i)=sum(ED0(1:i))
E1total(i)=sum(ED1(1:i))
end
xt=1:num
yt=Etotal(1:num)%num指代当前连接的UE数量
mt=E0total(1:num)
nt=E1total(1:num)
hold on
a=plot(xt,yt,'r-d',xt,mt,'y-d',xt,nt,'g-d')
legend(a,'优化开销','模式0','模式1','Location','SouthEast')
xlim([0,num+1])
xlabel('用户数量')
set(gca,'xtick',0:2:num)
ylabel('系统能耗')
title('不同模式下,能耗对比')
%%
%%
%不同模式下,能耗对比(随雾服务器数量变化)
figure(6)
J=0
for i=1:Fognum %%选信誉值合适的点
if Ri(i)>=VL
J=J+1
end
end
fum=J
for i=1:fum
numm=randi(num,[1,1])%指代当前连接的UE数量
EF(i)=sum(Etotal(1:numm))
EF0(i)=sum(E0total(1:numm))
EF1(i)=sum(E1total(1:numm))
end
for i=1:fum
EFT(i)=sum(EF(1:i))
EF0T(i)=sum(EF0(1:i))
EF1T(i)=sum(EF1(1:i))
end
xt=1:fum
yt=EFT(1:fum)
mt=EF0T(1:fum)
nt=EF1T(1:fum)
a=plot(xt,yt,'r-d',xt,mt,'y-d',xt,nt,'g-d')
legend(a,'优化开销','模式0','模式1','Location','SouthEast')
set(gca,'xtick',0:2:fum)
xlabel('雾服务器数量')
ylabel('系统能耗')
title('不同模式下,能耗对比')
%%
%%
%时延对比
figure(7)
[a,b,c,d]=R_FU_SNR()
R0=c
R1=d
T_req0=(1/R0)*Sm
T_req1=(1/R1)*Sm
TT=[]
TT0=[]
TT1=[]
for i=1:num
TT(i)=Concensus(i)+min(T_req0,T_req1)
end
for i=1:num
TT0(i)=Concensus(i)+T0
end
for i=1:num
TT1(i)=Concensus(i)+T1
end
tx=1:num
tty=TT(1:num)
t0y=TT0(1:num)
t1y=TT1(1:num)
a=plot(tx,tty,'r-d',tx,t0y,'y-d',tx,t1y,'g-d')
set(gca,'xtick',0:2:num)
legend(a,'联合优化模式','单一模式0','单一模式1','Location','SouthEast')
xlim([0,num+1])
xlabel('用户数量')
ylabel('系统时延')
title('不同模式下,时延对比')
%%
%%
%不同算力对比
figure(8)
for i=1:num
UEnoce=randi(UEnum,[1,1])%%当前缓存的用户(缓存)
[FFmax,FTmax]=Fmax_EE(UEnoce)
[FFmin,FTmin]=Fmin_EE(UEnoce)
[FF,FT]=mode0_EE(UEnoce)
ED(i)=FF
ET(i)=FT
EDmax(i)=FFmax
EDmin(i)=FFmin
EDTmax(i)=FTmax
EDTmin(i)=FTmin
end
for i=1:num
Et(i)=sum(ED(1:i))
Tt(i)=sum(ET(1:i))
Ext(i)=sum(EDmax(1:i))
Ent(i)=sum(EDmin(1:i))
Txt(i)=sum(EDTmax(1:i))
Tnt(i)=sum(EDTmin(1:i))
end
xt=1:num
%能耗
yt=Et(1:num)
mt=Ext(1:num)
nt=Ent(1:num)
%时延(单看MEC时延)
ty=Tt(1:num)
tm=Txt(1:num)
tn=Tnt(1:num)
subplot(2,2,1)
a=plot(xt,yt,'r-d',xt,mt,'g-d',xt,nt,'b-d','markersize',6)
legend(a,'优化算力F','最大算力Fmax','最小算力Fmin','Location','SouthEast')
set(gca,'xtick',0:2:num)
xlabel('用户数量')
ylabel('系统能耗')
title('不同算力下,能耗对比')
subplot(2,2,2)
b=plot(xt,ty,'r-*',xt,tm,'g-*',xt,tn,'b-*','markersize',6)
legend(b,'优化算力F','最大算力Fmax','最小算力Fmin','Location','SouthEast')
set(gca,'xtick',0:2:num)
xlabel('用户数量')
ylabel('系统时延')
title('不同算力下,时延对比')
subplot('position',[0.2,0.06,0.6,0.45])
w1=0.4
w2=0.6
for i=1:num
EOT(i)=(w1.*Et(i)./10^9+w2.*Tt(i).*(1-w1))
EOTx(i)=(w1.*Ext(i)./10^9+w2.*Txt(i).*(1-w1))
EOTn(i)=(w1.*Ent(i)./10^9+w2.*Tnt(i).*(1-w1))
end
x1=1:num
y=EOT(1:num)
yx=EOTx(1:num)
yn=EOTn(1:num)
c=plot(x1,y,'r-d',x1,yx,'g-d',x1,yn,'b-d','markersize',6)
legend(c,'优化算力F','最大算力Fmax','最小算力Fmin','Location','SouthEast')
set(gca,'xtick',0:2:num)
xlabel('用户数量')
ylabel('能耗时延联合优化')
title('不同算力下,能耗时延联合优化对比')
%%
%%
%算法对比:PoW DPoS PBFT
figure(9)
Blocknum=20
for i=1:Blocknum
[EW0,TW0,EW1,TW1,EW2,TW2,EW3,TW3]=Contrast()
E0(i)=EW0
T0(i)=TW0
E1(i)=EW1
T1(i)=TW1
E2(i)=EW2
T2(i)=TW2
E3(i)=EW3
T3(i)=TW3
end
for i=1:Blocknum
ET0(i)=sum(E0(1:i))
TT0(i)=sum(T0(1:i))
ET1(i)=sum(E1(1:i))
TT1(i)=sum(T1(1:i))
ET2(i)=sum(E2(1:i))
TT2(i)=sum(T2(1:i))
ET3(i)=sum(E3(1:i))
TT3(i)=sum(T3(1:i))
end
X=1:Blocknum
subplot(1,2,1)
a=plot(X,ET0(1:Blocknum),'r-d',X,ET1(1:Blocknum),'g-d',X,ET2(1:Blocknum),'y-d',X,ET3(1:Blocknum),'b-d')
legend(a,'目标共识算法','PoW共识算法','DPoS共识算法','PBFT共识算法','Location','SouthEast')
set(gca,'xtick',0:2:Blocknum)
xlabel('区块数量')
ylabel('能耗')
title('不同算法下,能耗对比')
subplot(1,2,2)
b=plot(X,TT0(1:Blocknum),'r-d',X,TT1(1:Blocknum),'g-d',X,TT2(1:Blocknum),'y-d',X,TT3(1:Blocknum),'b-d')
legend(b,'目标共识算法','PoW共识算法','DPoS共识算法','PBFT共识算法','Location','SouthEast')
set(gca,'xtick',0:2:Blocknum)
xlabel('区块数量')
ylabel('时延')
title('不同算法下,时延对比')
% subplot('position',[0.2,0.06,0.45,0.3])
figure(10)
w1=0.4
w2=0.6
for i=1:Blocknum
EETT0(i)=(w1.*ET0(i)+w2.*TT0(i).*(1-w1)/10^6)
EETT1(i)=(w1.*ET1(i)+w2.*TT1(i).*(1-w1)/10^6)
EETT2(i)=(w1.*ET2(i)+w2.*TT2(i).*(1-w1)/10^6)
EETT3(i)=(w1.*ET3(i)+w2.*TT3(i).*(1-w1)/10^6)
end
x1=1:Blocknum
c=plot(x1,EETT0(1:Blocknum),'r-d',x1,EETT1(1:Blocknum),'g-d',x1,EETT2(1:Blocknum),'y-d',x1,EETT3(1:Blocknum),'b-d','markersize',6)
legend(c,'目标共识算法','PoW共识算法','DPoS共识算法','PBFT共识算法','Location','SouthEast')
set(gca,'xtick',0:2:num)
xlabel('区块数量')
ylabel('能耗时延联合优化')
title('不同算法下,能耗时延联合优化对比')
%%