-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_startup.py
299 lines (255 loc) · 9.98 KB
/
test_startup.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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
import fixed_env as env
import load_trace as load_trace
import os
import time as tm
import csv
import tensorflow as tf
def test(user_id,ABR_NAME_,QoE_,NETWORK_TRACE_,VIDEO_TRACE_):
#1 Algorithm Setting: RBA, BBA, DYNAMIC, PDDQN, Pensieve
ABR_NAME = ABR_NAME_
#2 QoE Setting: ar, al, hd, b, max
QoE = QoE_
#3 Network Dataset: high, medium, low, fixed
NETWORK_TRACE = NETWORK_TRACE_
#4 Video Dataset: AsianCup_China_Uzbekistan, Fengtimo_2018_11_3, YYF_2018_08_12
VIDEO_TRACE = VIDEO_TRACE_
model_name = ""
if ABR_NAME == 'BBA':
import BBA as ABR
if ABR_NAME == 'RBA':
import RBA as ABR
if ABR_NAME == 'DYNAMIC':
import DYNAMIC as ABR
if ABR_NAME == 'PDDQN':
model_name = "./PDDQN_models/PDDQN_b/"
import PDDQN_ as ABR
if ABR_NAME == 'PDDQN-R':
model_name = "./PDDQN_models/"+QoE+'/'
import PDDQN_R as ABR
if ABR_NAME == 'Pensieve':
model_name = "./Pensieve_models/"+QoE+'/'
import Pensieve as ABR
SMOOTH_PENALTY = 0
REBUF_PENALTY = 0.0
LANTENCY_PENALTY = 0.0
SKIP_PENALTY = 0.0
BITRATE_REWARD = 0.0
if QoE == 'al':
SMOOTH_PENALTY = 0.01
REBUF_PENALTY = 1.5
LANTENCY_PENALTY = 0.01
BITRATE_REWARD = 0.001
SKIP_PENALTY = 1
if QoE == 'ar':
SMOOTH_PENALTY = 0.0
REBUF_PENALTY = 3
LANTENCY_PENALTY = 0.0
BITRATE_REWARD = 0.001
SKIP_PENALTY = 0.0
if QoE == 'b':
SMOOTH_PENALTY = 0.02
REBUF_PENALTY = 1.5
LANTENCY_PENALTY = 0.005
BITRATE_REWARD = 0.001
SKIP_PENALTY = 0.5
if QoE == 'hd':
SMOOTH_PENALTY = 0.0
REBUF_PENALTY = 0.5
LANTENCY_PENALTY = 0.0
BITRATE_REWARD = 0.001
SKIP_PENALTY = 0.0
if QoE == 'max':
SMOOTH_PENALTY = 0
REBUF_PENALTY = 0.0
LANTENCY_PENALTY = 0.0
SKIP_PENALTY = 0.0
BITRATE_REWARD = 0.001
FILE_NAME = './'+'result/'+QoE+'_'+NETWORK_TRACE+'_'+VIDEO_TRACE+'.csv'
else:
FILE_NAME = './'+'result/'+ABR_NAME+'_'+QoE+'_'+NETWORK_TRACE+'_'+VIDEO_TRACE+'.csv'
FILE_NAME = './' + 'result/Startup/' + NETWORK_TRACE +'/'+ABR_NAME+ '/QoE.csv'
out = open(FILE_NAME, 'w', newline='')
w = csv.writer(out)
DEBUG = False
LOG_FILE_PATH = './log/'
# create result directory
if not os.path.exists(LOG_FILE_PATH):
os.makedirs(LOG_FILE_PATH)
# -- End Configuration --
network_trace_dir = './dataset/new_network_trace/' + NETWORK_TRACE + '/'
video_trace_prefix = './dataset/video_trace/' + VIDEO_TRACE + '/frame_trace_'
# load the trace
all_cooked_time, all_cooked_bw, all_file_names = load_trace.load_trace(network_trace_dir)
start_avgbw = (sum(all_cooked_bw[0][0:10])/10) *1000
# random_seed
random_seed = 2
count = 0
trace_count = 1
FPS = 25
frame_time_len = 0.04
reward_all_sum = 0
run_time = 0
net_env = env.Environment(all_cooked_time=all_cooked_time,
all_cooked_bw=all_cooked_bw,
random_seed=random_seed,
logfile_path=LOG_FILE_PATH,
VIDEO_SIZE_FILE=video_trace_prefix,
Debug=DEBUG)
abr = ABR.Algorithm()
abr_init = abr.Initial(model_name)
BIT_RATE = [500.0, 850.0, 1200.0, 1850.0] # kpbs
TARGET_BUFFER = [0.5,0.75,1,1.25] # seconds
# ABR setting
RESEVOIR = 0.5
CUSHION = 2
cnt = 0
# defalut setting
last_bit_rate = 0
bit_rate = 0
target_buffer = 0
latency_limit = 4
# reward setting
reward_frame = 0
reward_all = 0
# past_info setting
past_frame_num = 200
S_time_interval = [0] * past_frame_num
S_send_data_size = [0] * past_frame_num
S_chunk_len = [0] * past_frame_num
S_rebuf = [0] * past_frame_num
S_buffer_size = [0] * past_frame_num
S_end_delay = [0] * past_frame_num
S_chunk_size = [0] * past_frame_num
S_play_time_len = [0] * past_frame_num
S_decision_flag = [0] * past_frame_num
S_buffer_flag = [0] * past_frame_num
S_cdn_flag = [0] * past_frame_num
S_skip_time = [0] * past_frame_num
# params setting
call_time_sum = 0
reward_chunk = 0
while True:
reward_frame = 0
time, time_interval, send_data_size, chunk_len, \
rebuf, buffer_size, play_time_len, end_delay, \
cdn_newest_id, download_id, cdn_has_frame, skip_frame_time_len, decision_flag, \
buffer_flag, cdn_flag, skip_flag, end_of_video = net_env.get_video_frame(bit_rate, target_buffer, latency_limit)
# S_info is sequential order
S_time_interval.pop(0)
S_send_data_size.pop(0)
S_chunk_len.pop(0)
S_buffer_size.pop(0)
S_rebuf.pop(0)
S_end_delay.pop(0)
S_play_time_len.pop(0)
S_decision_flag.pop(0)
S_buffer_flag.pop(0)
S_cdn_flag.pop(0)
S_skip_time.pop(0)
S_time_interval.append(time_interval)
S_send_data_size.append(send_data_size)
S_chunk_len.append(chunk_len)
S_buffer_size.append(buffer_size)
S_rebuf.append(rebuf)
S_end_delay.append(end_delay)
S_play_time_len.append(play_time_len)
S_decision_flag.append(decision_flag)
S_buffer_flag.append(buffer_flag)
S_cdn_flag.append(cdn_flag)
S_skip_time.append(skip_frame_time_len)
# QOE setting
# if end_delay <= 1.0:
# LANTENCY_PENALTY = 0.005
# else:
# LANTENCY_PENALTY = 0.01
if not cdn_flag:
reward_frame = frame_time_len * float(BIT_RATE[
bit_rate]) * BITRATE_REWARD - REBUF_PENALTY * rebuf - LANTENCY_PENALTY * end_delay - SKIP_PENALTY * skip_frame_time_len
else:
reward_frame = -(REBUF_PENALTY * rebuf)
if decision_flag or end_of_video:
reward_frame += -1 * SMOOTH_PENALTY * (abs(BIT_RATE[bit_rate] - BIT_RATE[last_bit_rate]) / 1000)
reward_chunk += reward_frame
w.writerow([ABR_NAME,reward_chunk])
reward_chunk = 0
last_bit_rate = bit_rate
# ----------------- Your Algorithm ---------------------
cnt += 1
timestamp_start = tm.time()
bit_rate, target_buffer, latency_limit = abr.run(time,
S_time_interval,
S_send_data_size,
S_chunk_len,
S_rebuf,
S_buffer_size,
S_play_time_len,
S_end_delay,
S_decision_flag,
S_buffer_flag,
S_cdn_flag,
S_skip_time,
end_of_video,
cdn_newest_id,
download_id,
cdn_has_frame,
abr_init,
start_avgbw)
start_avgbw = -1
timestamp_end = tm.time()
call_time_sum += timestamp_end - timestamp_start
# -------------------- End --------------------------------
else:
reward_chunk += reward_frame
if end_of_video:
break
# print("network traceID, network_reward, avg_running_time", trace_count, reward_all, call_time_sum / cnt)
reward_all = reward_all/cnt
reward_all_sum += reward_all
run_time += call_time_sum / cnt
if trace_count >= len(all_file_names):
break
trace_count += 1
cnt = 0
call_time_sum = 0
last_bit_rate = 0
reward_all = 0
bit_rate = 0
target_buffer = 0
S_time_interval = [0] * past_frame_num
S_send_data_size = [0] * past_frame_num
S_chunk_len = [0] * past_frame_num
S_rebuf = [0] * past_frame_num
S_buffer_size = [0] * past_frame_num
S_end_delay = [0] * past_frame_num
S_chunk_size = [0] * past_frame_num
S_play_time_len = [0] * past_frame_num
S_decision_flag = [0] * past_frame_num
S_buffer_flag = [0] * past_frame_num
S_cdn_flag = [0] * past_frame_num
reward_all += reward_frame
return [reward_all_sum / trace_count, run_time / trace_count]
#1 Algorithm Setting: RBA, BBA, DYNAMIC, PDDQN, Pensieve
ABR_NAME = ['RBA','BBA','DYNAMIC','PDDQN']
#2 QoE Setting: ar, al, hd, b, max
QoE = ['al','ar','hd','b']
#3 Network Dataset: high, medium, low, fixed
NETWORK_TRACE = ['high','medium','low','fixed']
#4 Video Dataset: AsianCup_China_Uzbekistan, Fengtimo_2018_11_3, YYF_2018_08_12
VIDEO_TRACE = ['AsianCup_China_Uzbekistan','Fengtimo_2018_11_3','YYF_2018_08_12']
k = "PDDQN"
i = NETWORK_TRACE[0]
j = QoE[3]
a = test("aaa", k, j, i, VIDEO_TRACE[0])
print(a)
# for i in NETWORK_TRACE:
# for j in QoE:
# FILE_NAME = './' + 'result/Network Trace/' + i + '/' + 'QoE_' + j + '/' + 'avg QoE.csv'
# out = open(FILE_NAME, 'w', newline='')
# w = csv.writer(out)
# for k in ABR_NAME:
# a = test("aaa", k, j, i, VIDEO_TRACE[0])
# print(a)
# b = [k]
# b.append(a[0])
# b.append(a[1])
# w.writerow(b)