forked from gittryer/edgecomputing-RL
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathround.py
134 lines (124 loc) · 5.51 KB
/
round.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
from env import Environment
from env import ENV_TIME_LIMIT, SUBCARRIER_B, SUBCARRIER_O, SUBCARRIER_GO
import numpy as np
# 轮询
class RoundRobin:
def __init__(self, e: Environment):
"""
构造函数
:param service_num: service的数量
:param env: 环境
"""
self.e = e
self.id_mec = 0
self.id_subcarrier = 0
def __select(self, i):
"""
选择mec编号
:return: 返回mec编号
"""
self.id_mec += 1
self.id_subcarrier += 1
if self.id_mec >= self.e.mec_num:
self.id_mec = 0
if self.id_subcarrier >= self.e.subcarrier_num:
self.id_subcarrier = 0
p = np.random.uniform(0, 10)
k = np.random.uniform(1.0 * (10 ** 9), 3.0 * (10 ** 9))
return self.id_mec, self.id_subcarrier, p, k
def __getK(self, service_index, mec_index):
D = self.e.services[service_index].data_size
C = self.e.mecs[mec_index].cpi
L = ENV_TIME_LIMIT[0]
return (D * C) / L
def __getP(self, service_index, mec_index, subcarrier_index):
D = self.e.services[service_index].data_size
L = ENV_TIME_LIMIT[1]
distance = (self.e.mecs[mec_index].location_x - self.e.services[mec_index].location_x) ** 2 + (
self.e.mecs[mec_index].location_y - self.e.services[mec_index].location_y) ** 2
UP = (2 ** (D / (L * SUBCARRIER_B)) - 1) * (SUBCARRIER_O ** 2)
DOWN = (SUBCARRIER_GO * self.e.subcarriers[subcarrier_index].go) / distance
return UP / DOWN
def run(self):
"""
执行
:return: [服务号,总能量消耗]
"""
ls = []
for i in range(self.e.service_num):
mec_index, subcarrier_index, p, k = self.__select(i)
while (not self.e.add(i, mec_index, subcarrier_index, p, k)):
mec_index, subcarrier_index, p, k = self.__select(i)
print("选择{}号mec,{}号子信道,传输功率{:.2f},主频{:.2f}ghz".format(
mec_index, subcarrier_index, p, k / (10 ** 9)))
<<<<<<< HEAD
ls.append(Environment.POWER)
return [np.arange(self.e.service_num).astype(dtype=np.str), ls]
=======
#if i %5==0:
ls.append(Environment.POWER)
return range(0, self.e.service_num), ls
# return range(0,self.e.service_num,5), np.array(ls)
>>>>>>> 90a41b2 (修改了一些参数的设定值)
def runForAVG(self):
"""
执行
:return: [服务号,总能量消耗]
"""
ls = []
for i in range(self.e.service_num):
mec_index, subcarrier_index, p, k = self.__select(i)
while (not self.e.add(i, mec_index, subcarrier_index, p, k)):
mec_index, subcarrier_index, p, k = self.__select(i)
<<<<<<< HEAD
ls.append(self.e.POWER/sum([self.e.services[j].data_size for j in range(0,i+1)]))
print("平均每bit能耗为",ls[-1])
return [np.arange(self.e.service_num).astype(dtype=np.str), ls]
def runForTime(self):
"""
执行
:return: [服务号,总能量消耗]
"""
ls = []
for i in range(self.e.service_num):
mec_index, subcarrier_index, p, k = self.__select(i)
while (not self.e.add(i, mec_index, subcarrier_index, p, k)):
mec_index, subcarrier_index, p, k = self.__select(i)
print("选择{}号mec,{}号子信道,传输功率{:.2f},主频{:.2f}ghz".format(
mec_index, subcarrier_index, p, k / (10 ** 9)))
ls.append(sum(self.e.getTime(i,mec_index,subcarrier_index)))
return [np.arange(self.e.service_num).astype(dtype=np.str), ls]
=======
print("选择{}号mec,{}号子信道,传输功率{:.2f},主频{:.2f}ghz".format(
mec_index, subcarrier_index, p, k / (10 ** 9)))
if i %5==0:
ls.append(sum(self.e.getPower(i,mec_index,subcarrier_index)) / self.e.services[i].data_size)
return range(0,self.e.service_num,5), np.array(ls)
# def runForAVG(self):
# """
# 执行
# :return: [服务号,总能量消耗]
# """
# ls = []
# for i in range(self.e.service_num):
# mec_index, subcarrier_index, p, k = self.__select(i)
# while (not self.e.add(i, mec_index, subcarrier_index, p, k)):
# mec_index, subcarrier_index, p, k = self.__select(i)
# ls.append(self.e.POWER/sum([self.e.services[j].data_size for j in range(0,i+1)]))
# print("平均每bit能耗为",ls[-1])
# return [np.arange(self.e.service_num).astype(dtype=np.str), ls]
# def runForTime(self):
# """
# 执行
# :return: [服务号,总能量消耗]
# """
# ls = []
# for i in range(self.e.service_num):
# mec_index, subcarrier_index, p, k = self.__select(i)
# while (not self.e.add(i, mec_index, subcarrier_index, p, k)):
# mec_index, subcarrier_index, p, k = self.__select(i)
# print("选择{}号mec,{}号子信道,传输功率{:.2f},主频{:.2f}ghz".format(
# mec_index, subcarrier_index, p, k / (10 ** 9)))
# ls.append(sum(self.e.getTime(i,mec_index,subcarrier_index)))
# return [np.arange(self.e.service_num).astype(dtype=np.str), ls]
>>>>>>> 90a41b2 (修改了一些参数的设定值)