这里首先用之前学习过的qlearning来处理CartPole-v1模型。 CartPole-v1是一个倒立摆模型,目标是通过左右移动滑块保证倒立杆能够尽可能长时间倒立,最长步骤为500步。 模型控制量是左0、右1两个。 模型状态量为下面四个: 由于要用qtable,但是状态量是连续的,所以我们要先对状态做离散化处理,对应state_dig函数。 然...
1. 深度学习估计状态动作价值函数:DQN利用Q-Learning算法思想,估计一个Q函数Q(s,a),表示在状态s下采取a动作得到的期望回报,估计该函数时利用深度学习的方法。 2. 经验回放:为了打破数据的相关性和提高样本效率,DQN引入了经验回放池。智能体在与环境交互时,会将每一个时间步的经验(s,a,r,s')存入回放池,每次...
动作选择 在Q-learning、DQN中,都是根据\epsilon-greedy策略,但是这里是依据概率进行采样,因为我们的目标是不断的对动作选择的概率进行调整。 defchoose_action(self,s):s=torch.unsqueeze(torch.FloatTensor(s),0)# [1, n_states]logits=self.model(s)# [1, n_actions]probs=F.softmax(logits,1)action=t...
(~dones) * (~ts),取反,假如done=True,~done=False。 done=True的时候,说明在此状态转移元组中,next_state是终止状态,终止状态价值为0,计算q_true的时候不需要计算下一状态的价值,为了在计算中考虑这个因素,将下一状态价值乘dones和ts的反。发布于 2023-08-02 16:57・湖南 ...
actor的前身是policy gradient,可以较容易地在连续动作空间内选择合适的动作,value-based的Qlearning做此操作会因为空间过大而爆炸。因为Actor是基于回合更新的,所以学习效率比较慢。因此引入value-based的算法作为Critic,就可以实现单步更新。这样两种算法相互补充就形成了Actor-Critic。
q_eval = self.eval_net(b_s).gather(1, b_a) # 因为已经确定在s时候所走的action,因此选定该action对应的Q值 # q_next 不进行反向传播,故用detach;q_next表示通过目标网络输出32行每个b_s_对应的一系列动作值 q_next = self.target_net(b_s_).detach() # 先算出目标值q_target,max(1)[0]...
所以在Double DQN中,选动作的Q-function和计算值的Q-function不是同一个。 使用两个网络,第一个Q网络用来选择最大Q值的动作,然后用第二个网络targetQ来计算Q值。 其中Q网络的参数是不断更新的,而targetQ是固定不变的,只有经过一定间隔后,才将Q网络的参数复制给targetQ。