-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathresources_monitor_tetris.py
86 lines (76 loc) · 2.68 KB
/
resources_monitor_tetris.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
import gym, xlwt
import numpy as np
from itertools import count
def initial_excel():
global worksheet, workbook
# xlwt 库将数据导入Excel并设置默认字符编码为ascii
workbook = xlwt.Workbook(encoding='ascii')
# 添加一个表 参数为表名
worksheet = workbook.add_sheet('resources usage')
# 生成单元格样式的方法
# 设置列宽, 3为列的数目, 12为列的宽度, 256为固定值
for i in range(3):
worksheet.col(i).width = 256 * 12
# 设置单元格行高, 25为行高, 20为固定值
worksheet.row(1).height_mismatch = True
worksheet.row(1).height = 20 * 25
worksheet.write(0, 0, 'time')
worksheet.write(0, 1, 'CPU usage(%)')
worksheet.write(0, 2, 'Memory usage(%)')
for i in range(3):
worksheet.write(1, i, 0)
# 保存excel文件
workbook.save('data/tetrisres_monitor.xls')
def check_res(state):
job_cpu_demand = state[33:63]
job_memory_demand = state[63:93]
cpu_res = state[1]
memory_res = state[2]
for i in range(len(job_cpu_demand)):
if ((job_cpu_demand[i] == -1.0) and (job_memory_demand[i] == -1.0)):
continue
else:
if (job_cpu_demand[i] > cpu_res or job_memory_demand[i] > memory_res):
job_cpu_demand[i] = -1.0
job_memory_demand[i] = -1.0
else:
continue
state[33:63] = job_cpu_demand
state[63:93] = job_memory_demand
return np.array(state, dtype=np.float32)
def alignment_score(state):
job_cpu_demand = state[33:63]
job_memory_demand = state[63:93]
cpu_res = state[1]
memory_res = state[2]
alignment_score = cpu_res * job_cpu_demand + memory_res * job_memory_demand
if all(map(lambda x: x < 0, alignment_score)):
return -1
else:
return np.where(alignment_score == np.max(alignment_score))[0][0]
initial_excel()
env = gym.make("clusterEnv-v0").unwrapped
print("Tetris")
line = 2
state = env.reset()
sum_reward = 0 # 记录每一幕的reward
for i in count():
valid_state = check_res(state)
action = alignment_score(valid_state)
if action == -1:
time, cpu_usage, memory_usage = env.return_res_usage()
worksheet.write(line, 1, str(100 - cpu_usage) + '%')
worksheet.write(line, 2, str(100 - memory_usage) + '%')
line += 1
next_state, reward, done, info = env.step(action)
if action == -1:
time, cpu_usage, memory_usage = env.return_res_usage()
worksheet.write(line - 1, 0, time)
sum_reward += reward
# 记录资源使用率
state = next_state
if done:
print("makespan : ", time)
break
workbook.save('data/tetrisres_monitor.xls')
env.close()