python畫隨機函數(三)

這篇是邊緣計算仿真的第三篇文章,旨在完成用python仿真出邊緣計算的三級卸載機制。

Energy-efficient Offloading for Mobile EdgeComputing in 5G Heterogeneous Networks

這是題目名字,遇到的問題在上一篇邊緣計算仿真的博客中提到了
計劃完成的任務如下
目前已完成的圖中第三名的兩條線的規劃
就是沒有分優先級的情況下,我們把邊緣的能源效益的可視化做出來
已經可以看到,能源效益確實比純本地計算好得多

還是無法解決的問題:

信道是如何分配的(這裏文中介紹了,但是還是沒說具體是怎麼量化的,可能還得我自己假設出來吧)
還剩兩級機制,後期博主會繼續更新。。。。

第n次看論文的新發現

1、任務是原子級的,不可進一步劃分
2、MEC服務器允許多個計算任務同時進行
3、回傳的功耗是忽略的,因爲回傳是與其他基礎設施共享的
4、SBS到底經不經過MBS,文中說的不經過(用的or),但是要回傳幹什麼
5、功率調節機制可參照參考文獻【36】
6、設備所需的總信道數應該小於MBS和SBS共有的信道數
7、選擇了SBS就不能選其他的,選擇本地和MBS和local也是同理
8、一個迭代階段,一個任務只能選擇一個信道傳輸至MBS
9.每個MBS信道的發射功率相同,不同的信道不同的只能是信道增益
在這裏插入圖片描述

# -*- coding: utf-8 -*-
"""
Created on Sun Dec 22 11:28:38 2019

@author: han
"""
import numpy as np
import matplotlib.pyplot as plt
from math import log

 
###正常情況無卸載機制###

el=np.random.randint(1,10,100) #一個cpu週期的本地的能耗
y=[]
cl=np.random.randint(1,10,100)#計算此任務所需的能力,能cpu週期規劃
d =np.random.randint(300,800,100)#每個計算任務的大小
x = np.linspace(10,100,10,dtype=int)#x個移動設備

print(x)
for i in x:
    print(i)
    sum=0
    for j in range(i):
        sum = sum+(2*cl[j]*el[j])/100#加了個2調整係數
  #  print(sum)
    y.append(sum);
print(y)
plt.plot(x,y,color='blue',linestyle='-')
plt.title('Handsome Programmers picture')


###########第一級卸載機制如下###############
pl=np.random.randint(1,10,100)#擴大了10倍,使用的時候請注意,本地功率
tl=[]#本地計算任務消耗時間
GR=[]#傳給MEC服務器的設備集合
GL=[]#本地計算任務的集合
GO=[]#繼續篩選的集合
le=[]#單個任務本地消耗的能耗
ns=[]#在小基站計算的設備數目
nm=[]#在大基站計算的設備數目
L=[]
p={}

def findMin(alist):
    findMin = alist[0];
    for i in range(1,len(alist)):
        if alist[i] < findMin:
            findMin = alist[i]
    return findMin
tl = (cl*10.0)//pl# deadline和tmax的精度不對,已修正
dead=np.random.randint(5,10,100)
print(x)

for i in range(0,99):
    print('this i is=====',i)
    if tl[i] > dead[i]:
        print('success!!!')
        GR.append(i)
    elif tl[i]<=dead[i]:
        le = cl*el
        print('wonderful!!!')
        ns=d/((dead-cl/4)*log((1+40*20/100),2))#【【大基站和小基站的傳輸功率未知這裏統一成20W】】??背景噪聲功率
        nm=d/((dead-cl/4)*log((1+80*20/100),2))#【【大基站和小基站的傳輸功率未知這裏統一成20W】】??背景噪聲功率
        L=[40*ns[i],80*nm[i]] #warning!40和80的單位,而且忘記乘10000
        c=findMin(L)
        p[i]=c/100#調整係數
        if el[i]<p[i]:
            GL.append(i)
            print('GL!')
        elif el[i]>=p[i]:
            GO.append(i)
            print('2')
print('next is the answer of first Offloading')
print('GR=',GR)
print('GL=',GL)
print('GO=',GO)
###########第二級卸載機制############
#圖中第二條線
len1=len(GR)
len2=len(GL)
len3=len(GO)
z=[]
sum1=0

for i in range(0,99):
    #sum1=0
    for j in range(len1):
        if GR[j]==i:
            r=log((1+40*20/100),2)
            sum1 = sum1+(d[i]/r+cl[i]*0.0001)/1000###warning 10準備調節
            print('ONE SUM',sum1)
            break;
    for j in range(len2):
        if GL[j]==i:
            r=log((1+80*20/100),2)
            sum1 = sum1+(2*d[i]/r+cl[i]*0.0001)/1000###warning 10準備調節
            print('TWO SUM',sum1)
            break;
    sum1 = sum1+(cl[j]*el[j])/100 
           #         print('THREE SUM',sum1)
#print(sum)
    if i==0 or (i+1)%10==0:
        z.append(sum1);
print(z)
plt.plot(x,z,color='green',linestyle='-')
###########第二級卸載機制############
###因爲不知道信道怎麼根據任務大小而分配,難道和信道增益有關?
##分配好了之後,再怎麼量化考慮?
###########信道數未考慮##########
#rm=[]#速率
#rs=[]#速率
#leng=len(GO)
#rm[i]=log((1+40),2)
#ct=2**(d[i]/dead[i]-rm[i])-1
#snr=#信噪比

##第三級卸載機制##





















在這裏插入圖片描述

改進版如下

# -*- coding: utf-8 -*-
"""
Created on Sun Dec 22 11:28:38 2019

@author: han
"""
import numpy as np
import matplotlib.pyplot as plt
from math import log

 
###正常情況無卸載機制###

el=np.random.randint(1,10,100) #一個cpu週期的本地的能耗
y=[]
cl=np.random.randint(1,10,100)#計算此任務所需的能力,能cpu週期規劃
d =np.random.randint(300,800,100)#每個計算任務的大小
x = np.linspace(10,100,10,dtype=int)#x個移動設備

print(x)
for i in x:
    print(i)
    sum=0
    for j in range(i):
        sum = sum+(2*cl[j]*el[j])/100#加了個2調整係數
  #  print(sum)
    y.append(sum);
print(y)
plt.plot(x,y,color='blue',linestyle='-')
plt.title('Handsome Programmers picture')


###########第一級卸載機制如下###############
pl=np.random.randint(1,10,100)#擴大了10倍,使用的時候請注意,本地功率
tl=[]#本地計算任務消耗時間
GR=[]#傳給MEC服務器的設備集合
GL=[]#本地計算任務的集合
GO=[]#繼續篩選的集合
le=[]#單個任務本地消耗的能耗
ns=[]#在小基站計算的設備數目
nm=[]#在大基站計算的設備數目
L=[]
p={}

def findMin(alist):
    findMin = alist[0];
    for i in range(1,len(alist)):
        if alist[i] < findMin:
            findMin = alist[i]
    return findMin
tl = (cl*10.0)//pl# deadline和tmax的精度不對,已修正
dead=np.random.randint(5,10,100)
print(x)

for i in range(0,99):
    print('this i is=====',i)
    if tl[i] > dead[i]:
        print('success!!!')
        GR.append(i)
    elif tl[i]<=dead[i]:
        le = cl*el
        print('wonderful!!!')
        ns=d/((dead-cl/4)*log((1+40*20/100),2))#【【大基站和小基站的傳輸功率未知這裏統一成20W】】??背景噪聲功率
        nm=d/((dead-cl/4)*log((1+80*20/100),2))#【【大基站和小基站的傳輸功率未知這裏統一成20W】】??背景噪聲功率
        L=[40*ns[i],80*nm[i]] #warning!40和80的單位,而且忘記乘10000
        c=findMin(L)
        p[i]=c/100#調整係數
        if el[i]<p[i]:
            GL.append(i)
            print('GL!')
        elif el[i]>=p[i]:
            GO.append(i)
            print('2')
print('next is the answer of first Offloading')
print('GR=',GR)
print('GL=',GL)
print('GO=',GO)
###########第二級卸載機制############
#圖中第二條線
len1=len(GR)
len2=len(GL)
len3=len(GO)
z=[]
v=[]

sum1=0
sum2=0


for i in range(0,99):
    #sum1=0
    for j in range(len1):
        if GR[j]==i:
            r=log((1+40*20/100),2)
            sum1 = sum1+(d[i]/r+cl[i]*0.0001)/1000###warning 10準備調節
            sum2 = sum2+(d[i]/r+cl[i]*0.0001)/1000###warning 10準備調節
     #       print('ONE SUM',sum1)
            break;
    for j in range(len2):
        if GL[j]==i:
            r=log((1+80*20/100),2)
            sum1 = sum1+(cl[i]*el[i])/100 
            sum2 = sum2+(d[i]/r+cl[i]*0.0001)/1000###warning 10準備調節
           # sum1 = sum1+(2*d[i]/r+cl[i]*0.0001)/1000###warning 10準備調節,2是大基站的p
           #=print('TWO SUM',sum1)
            break;
    sum1 = sum1+(d[i]/r+cl[i]*0.0001)/1000###warning 10準備調節
    rm=log((1+80*20/100),2)
    rs=log((1+40*20/100),2)
    tm = d/rm+c/4
    ts = d/rs+d*0.0001+c/4
    if tm[i] < ts[i]:
        sum2 = sum2+(2*d[i]/r+cl[i]*0.0001)/1000###warning 10準備調節
    else:
        sum2 = sum2+(d[i]/r+cl[i]*0.0001)/1000###warning 10準備調節
           #         print('THREE SUM',sum1)
#print(sum)
    if i==0 or (i+1)%10==0:
        z.append(sum1);
        v.append(sum2);
print(z)
print(v)
plt.plot(x,z,color='red',linestyle='-')
plt.plot(x,v,color='gray',linestyle='-')
###########第二級卸載機制############
###因爲不知道信道怎麼根據任務大小而分配,難道和信道增益有關?
##分配好了之後,再怎麼量化考慮?
###########信道數未考慮##########
#rm=[]#速率
#rs=[]#速率
#leng=len(GO)
#rm[i]=log((1+40),2)
#ct=2**(d[i]/dead[i]-rm[i])-1
#snr=#信噪比
##第三級卸載機制##
###########第三級卸載機制############
########第三條線#########












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章