Deep Q Network
这种方式很适及格子游戏。因为格子游戏中的每一个格子就是一个状态,这是离散的,但在现实生活中,许多状态并不是离散而是连续的。所以我们可以通过神经网络来完成离散状态的任务,初始输入是状态,输出的各个举动对应的Q值(也可以理解为概率),如许初始输入就可以是连续的即状态可以是连续的
Q learning和DQN并没有根本的区别。只是DQN用神经网络,也就是一个函数(神经网络)替换了原来Q table而已。Deep network + Q learning = DQN
这里的Q值就是神经网络最后输出的差别举动的概率
zip(*batch)的内部实现
首先,来看下 batch 的构造:
- batch = sample(history_memory, min(len(history_memory), args.batch_size))
复制代码 batch 是通过从 history_memory 中采样得到的,假设 history_memory 是一个包含多个经验的列表,其中每个经验是一个四元组(state, reward, next_state, terminal)。每个元素看起来像如许:
- [state, reward, next_state, terminal]
复制代码 当你通过 zip(*batch) 时,*batch 会将 batch 中的每个四元组解包成四个差别的列表或元组,分别对应 state, reward, next_state 和 terminal。
假设:
- batch = [
- (state_1, reward_1, next_state_1, terminal_1),
- (state_2, reward_2, next_state_2, terminal_2),
- (state_3, reward_3, next_state_3, terminal_3)
- ]
复制代码 当你实行 zip(*batch) 时,*batch 会解包成如下的四个参数传递给 zip():
- zip((state_1, reward_1, next_state_1, terminal_1),
- (state_2, reward_2, next_state_2, terminal_2),
- (state_3, reward_3, next_state_3, terminal_3))
复制代码 然后,zip() 函数会按位置将这些元组的元素“对齐”在一起,结果如下:
- [(state_1, state_2, state_3),
- (reward_1, reward_2, reward_3),
- (next_state_1, next_state_2, next_state_3),
- (terminal_1, terminal_2, terminal_3)]
复制代码 结果:
zip(*batch) 会返回一个迭代器,生成的是一个包含四个元组的列表(假设 batch 中有三个经验):
- (state_batch, action_batch, reward_batch, next_state_batch, terminal_batch)
复制代码 这四个元组分别对应:
- state_batch: 包含全部的 state 值(state_1, state_2, state_3)
- reward_batch: 包含全部的 reward 值(reward_1, reward_2, reward_3)
- next_state_batch: 包含全部的 next_state 值(next_state_1, next_state_2, next_state_3)
- terminal_batch: 包含全部的 terminal 值(terminal_1, terminal_2, terminal_3)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |