(Deep Reinforcement Learning with Double Q-learning, H. van Hasselt et al., arXiv, 2015)(dqn)练习

代码使用python 2.x版本 ,tensorflow 使用1.1(cpu)版本

论文地址:https://arxiv.org/abs/1509.06461

===============第一个文件 replay_memory.py================================

import numpy as np


MEMORYSIZE = 600000

class Replay_memory:
    def __init__(self):

        self.previous_state = np.empty((MEMORYSIZE, 4), dtype=np.float32)
        self.action = np.empty((MEMORYSIZE, 1), dtype=np.uint8)#0 is the 1st action,1 is the 2nd action
        self.reward = np.empty((MEMORYSIZE, 1), dtype=np.float32)
        self.next_state = np.empty((MEMORYSIZE, 4), dtype=np.float32)
        self.terminal = np.empty((MEMORYSIZE, 1), dtype=np.bool)

        self.index = 0
        self.full_memory = False

    def memory_in(self, previous_state, action, reward, next_state, terminal):
        self.previous_state[self.index] = previous_state
        self.action[self.index] = action
        self.reward[self.index] = reward
        self.next_state[self.index] = next_state

        self.terminal[self.index] = terminal

        self.index += 1
        if self.index == MEMORYSIZE:
            self.index = 0
            self.full_memory = True


    def memory_out(self,size_minibatch):
        minib_previous_state = []
        minib_action = []
        minib_reward = []
        minib_next_state = []
        minib_terminal = []

        if self.full_memory:
            index_sample = np.random.randint(0,MEMORYSIZE,size=size_minibatch).tolist()
        else:
            index_sample = np.random.randint(0, self.index, size=size_minibatch).tolist()

        for i in index_sample:
            minib_previous_state.append(self.previous_state[i])
            minib_action.append(self.action[i])
            minib_reward.append(self.reward[i])
            minib_next_state.append(self.next_state[i])
            minib_terminal.append(self.terminal[i])

        rs_minib_previous_state=np.asarray(minib_previous_state)
        rs_minib_action=np.asarray(minib_action)
        rs_minib_reward=np.asarray(minib_reward)
        rs_minib_next_state=np.asarray(minib_next_state)
        rs_minib_terminal=np.asarray(minib_terminal)
        #return 5 np_mats with shape(size_minibatch,num_fea)
        return rs_minib_previous_state, rs_minib_action, rs_minib_reward, rs_minib_next_state, rs_minib_terminal

    def test_mempry_in(self):
        for i in range(100):
            self.memory_in([1., 1., 1., 1.], [0], [0.1], [1., 1., 1., 1.], [False])
            #self.memory_in([1., 1., 1., 1.], [1], [0.1], [1., 1., 1., 1.], [False])
            #self.memory_in([1., 1, 1., 1.], [0], [-1], [1., 1., 1., 1.], [True])



#test#test#test#test#test#test#test#test#test#test#test#test
'''
if __name__ == "__main__":
    rm = Replay_memory()
    for i in range(10):
        rm.memory_in((1., 2., 3., 4.), [1], [0.1], [1., 2., 3., 4.], True)
        rm.memory_in((2, 2, 3, 4), [0], [0.1], [2, 2, 3, 4], False)
        rm.memory_in((3, 2, 3, 4), [1], [0.1], [3, 2, 3, 4], False)
    s,a,r,ss,t = rm.memory_out(32)
    print ss

'''

if __name__ == "__main__":
    rm = Replay_memory()
    rm.test_mempry_in()
    s,a,r,ss,t = rm.memory_out(32)
    print ss

Replay_memory主要有两个方法:memory_in和memory_out,分类用来往Replay_memory放置经验和从Replay_memory中提取经验。为了效率,使用numpy数组实现,而没有使用deque。方法test_mempry_in是测试时使用的,使用该方法后,将加载一些经验进入Replay_memory。

===========第二个文件 nn.py============================

import tensorflow as tf
import math

class Fcnn:
    def __init__(self):
        self.batch_size = 32
        self.h1_size = 20

        self
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: “使用双重Q学习的深度强化学习”是一种强化学习算法,它使用双重(double)Q学习来解决传统Q学习中的估计误差问题。通过使用两个独立的Q网络来计算状态-行为值函数,可以减少估计误差,提高学习效率和稳定性。在深度强化学习中,该算法可以应用于诸如游戏、机器人控制等复杂任务。 ### 回答2: Deep Reinforcement Learning with Double Q-Learning(双Q学习的深度强化学习)是一种利用深度学习技术进行增强学习的方法。在传统的强化学习中,Q-Learning是最常用的算法。然而,传统的Q-Learning存在着过高估计(overestimation)的问题,即它会过度估计某些动作的价值,这会使得智能体在实际运用过程中效果下降。 Double Q-Learning便是为了克服这一问题而被提出的算法。 Double Q-Learning是将Q-Learning算法分解成两个独立的网络,并通过互相交替使用这两个网络的方式来消除过高估计。具体来说,Double Q-Learning的基本思想是采用一对Q函数,将它们互相制约,使每个Q函数只估计另一个Q函数所做出的贪心策略的Q值。因此,这种方法将学习由另一个Q函数选择的最佳动作。 Deep Reinforcement Learning with Double Q-Learning所做的改进是将双Q学习应用于深度神经网络中。这样可以在复杂的环境中获得更好的性能。深度学习网络可以自主提取及学习输入数据的特征,然后利用这些特征来预测下一个状态的价值。因此,深度学习网络可以训练出更好的Q值函数,从而使得智能体的决策更加准确和稳定。同时,使用双Q学习技术使得网络更加稳定,从而更容易训练出更加准确和高效的智能体。 总体来说,Deep Reinforcement Learning with Double Q-Learning是一种高效的增强学习方法,可以帮助智能体在复杂环境下学习最佳策略。Double Q-Learning技术可以有效地消除过高估计的问题并提高点估计Q函数的准确性。同时,深度神经网络可以在处理高维度状态空间时提高学习效率。 ### 回答3: 深度强化学习是一种通过不断试错的方式,使机器在特定环境下学习并改进其决策能力的算法。其中,双重Q学习是一种基于Q-learning的强化学习算法,其通过双重估计目标函数,从而提高学习的效率和稳定性。下面将详细介绍深度强化学习与双重Q学习的原理及其优缺点。 深度强化学习简介: 深度强化学习依赖于神经网络模型和回报函数来指导决策。该方法通过梯度下降算法来不断更新参数以优化模型。其中,Q-learning是一种基于值函数的学习方式,其依赖于动作价值Q函数来指导决策。在深度强化学习中,可以通过深度Q网络来实现Q函数的学习。 双重Q学习的原理: 在Q-learning算法中,估计Q函数的时候会涉及到目标值的计算,目标值即为当前状态下的最大Q值。由于这个最大值来自于学习目标的网络,因此它本身也是训练数据中的最大值。而事实上,Q-learning很容易会高估这些值,从而导致学习的波动性增强和性能的下降。为了解决这个问题,双重Q学习引入了两个Q网络,并通过一定的策略来选择其中的一个网络计算Q值。对于目标函数的计算,与之前不同的是,双重Q学习将估计Q值和选择动作的过程分开进行,从而减少了Q值的高估。 双重Q学习的优缺点: 优点: 1.双重Q学习可减少估计Q函数时的波动,从而提高了学习的稳定性和性能。 2.该算法可以避免Q值函数过高或过低的问题,从而提高学习效果。 3.可针对复杂的决策任务和环境设计较为复杂的网络结构以提高效率。 缺点: 1. 双重Q学习需要建立两个Q网络,因此需要的计算资源较大。 2. 该算法对于环境动态变化较大的任务较难优化。 总之,深度强化学习与双重Q学习为现代人工智能领域的研究和应用提供了一些有益的思路和方法。在实际应用中,需要结合具体问题的特点和实际情况进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值