reward = 比特率now大小-rebuf-smoothness(now-last)
比如说,当前选择比特率是4300kb,上一个比特率是2850kb,
那么reward大小就是4.3-rebuf*a-(4.3-2.85)b
其中a=4.3,b=1,rebuf = delay-buffersize
—————————————————————————————————
env.py写的是
获取当前视频块的大小,和当前带宽和时间,只有当带宽时间的和>视频块大小的时候,
delay就是前面的时间的和+(当前视频块-已经传输视频块)/吞吐量的大小
rebuf时间就是delay-buffer_size的大小(如果比0大的话) 也就是下载速度小于播放速度
buffer_size的更新规则如下:
np.maximum(self.buffer_size - delay, 0.0)
#add in the new chunk
self.buffer_size += VIDEO_CHUNCK_LEN {VIDEO_CHUNCK_LEN = 4000.0# millisec, 代表的是4s}
#sleep if buffer too large
所以这里的buffer指的是视频播放的长度,是播放器的缓存,相当于播放的速度
————————————————————————————————
#VIDEO_BIT_RATE = [300,750,1200,1850,2850,4300]
#BUFFER_NORM_FACTOR=10
state_INFO:[6,8],相当于6个状态观察,8个连续的视频块
state[0, -1] = VIDEO_BIT_RATE[bit_rate] / float(np.max(VIDEO_BIT_RATE)) # last quality
state[1, -1] = buffer_size / BUFFER_NORM_FACTOR # 10 sec
state[2, -1] = video_chunk_size / delay / M_IN_K # kilo byte / ms
state[3, -1] = delay / M_IN_K / BUFFER_NORM_FACTOR # 10 sec
state[4, :A_DIM] = np.array(next_video_chunk_sizes) / M_IN_K / M_IN_K # mega byte
state[5, -1] = np.minimum(video_chunk_remain, CHUNK_TIL_VIDEO_END_CAP) / float(CHUNK_TIL_VIDEO_END_CAP)
#state6 剩下多少视频。这个state好像没啥用