使用 Dyna-Q 扩展 Q-Learning 以增强决策能力

本教程探讨 Dyna-Q,这是一种先进的强化学习算法,它通过将真实经验与模拟规划相结合来扩展 Q-Learning。它通过将直接交互与基于战略模型的模拟相结合,有效地加速学习,特别是在数据稀缺的环境中。

Dyna-Q 扩展 Q-Learning

Q-Learning 简介

Q-Learning 是强化学习中一种重要的无模型算法,专注于学习特定状态下动作的值或“Q 值”。这种方法在不可预测的环境中表现出色,因为它不需要周围环境的预定义模型。它有效地适应随机转变和不同的奖励,使其在结果不确定的情况下具有通用性。这种灵活性使得 Q-Learning 在需要自适应决策而无需事先了解环境动态的情况下成为强大的工具。

学习过程:

 Q 学习的工作原理是更新每个状态下每个动作的 Q 值表。它使用贝尔曼方程根据观察到的奖励及其对未来奖励的估计迭代更新这些值。政策(选择行动的策略)源自这些 Q 值。

  • Q-Value: 表示在给定状态下采取某种行动可以获得的预期未来奖励。

  • 更新规则:Q值更新如下

    • Q (状态,动作) ← Q (状态,动作) + α (奖励+ γ max  Q (下一个状态, a ) − Q (状态,动作))

    • 学习率α表示新信息的重要性,折扣因子γ表示未来奖励的重要性。  

提供的代码用作 Q-Learner 的训练函数。它利用贝尔曼方程来确定状态之间最有效的转换。

def train_Q(self,s_prime,r): 			  		 			     			  	   		   	  			  	
        self.QTable[self.s,self.action] = (1-self.alpha)*self.QTable[self.s, self.action] + \
            self.alpha * (r + self.gamma * (self.QTable[s_prime, np.argmax(self.QTable[s_prime])])) 
        self.experiences.append((self.s, self.action, s_prime, r))
        self.num_experiences = self.num_experiences + 1
        self.s = s_prime
        self.action = action
        return action

探索与利用

Q 学习 的一个关键方面是平衡探索(尝试新的行动来发现奖励)和利用(使用已知信息来最大化奖励)。算法经常使用 ε-贪婪等策略来维持这种平衡。

首先设置随机操作的速率以平衡探索和利用。随着 Q 表积累更多数据,实施衰减率以逐渐降低随机性。这种方法保证,随着时间的推移,随着更多证据的积累,算法越来越多地转向利用。

if rand.random() >= self.random_action_rate:
  action = np.argmax(self.QTable[s_prime,:])  #Exploit:选择导致最佳奖励状态的操作
else:
  action = rand.randint(0,self.num_actions - 1) #Explore:随机选择一个操作。
    
# 随着 Q 表获得更多证据,使用衰减率来降低随机性(探索)
self.random_action_rate = self.random_action_rate * self.random_action_decay_rate

Dyna-Q 简介

Dyna-Q 是传统 Q-Learning 算法的创新扩展,处于将真实经验与模拟规划相融合的前沿。这种方法通过整合实际交互和模拟体验来显着增强学习过程,使代理能够在复杂环境中快速适应并做出明智的决策。通过利用环境反馈的直接学习和通过模拟获得的见解,Dyna-Q 提供了全面而有效的策略,用于应对现实世界数据稀缺或获取成本昂贵的挑战。

Dyna-Q 的组件

  1. Q-Learning:从真实经验中学习。

  2. 模型学习:学习环境模型。

  3. 规划:使用模型生成模拟体验。

模型学习

  • 该模型会跟踪转换和奖励。对于每个状态-动作对 ( s , a ),模型存储下一个状态s ' 和奖励r。

  • 当代理观察到转换(s、a、r、s ′)时,它会更新模型。

模拟体验规划

  • 在每个步骤中,代理根据真实经验更新其 Q 值后,还会根据模拟经验更新 Q 值。

  • 这些经验是使用学习模型生成的:对于选定的状态动作对(s,a),它预测下一个状态和奖励,并且更新 Q 值,就好像已经经历过这种转换一样。

Dyna-Q 算法

  1. 初始化所有状态-动作对的Q 值 Q ( s , a ) 和模型 (s, a)。

  2. 循环 (每集):

    • 使用从 Q 导出的状态s选择动作a (例如,ϵ -greedy )

    • 采取行动a,观察奖励r和下一个状态s ′

    • 直接学习:使用观察到的转变 ( s , a , r , s ′)更新 Q 值

    • 模型学习:通过转换更新模型 ( s , a , r , s ′) 

    • 规划:重复n次:

    • 随机选择之前经历过的状态-动作对 ( s , a )。

    • 使用模型生成预测的下一个状态s ′ 和奖励r

    • 使用模拟转换( s , a , r , s ′)更新 Q 值 

    • s ←  s ′。

    • 初始化状态s。

    • 循环 (对于剧集的每个步骤):

  3. 结束循环 此功能将 Dyna-Q 规划阶段合并到前面提到的 Q-Learner 中,从而能够指定在每个情节中运行的所需模拟数量,其中操作是随机选择的。此功能增强了 Q-Learner 的整体功能和多功能性。

def train_DynaQ(self,s_prime,r): 			  		 			     			  	   		   	  			  	
        self.QTable[self.s,self.action] = (1-self.alpha)*self.QTable[self.s, self.action] + \
            self.alpha * (r + self.gamma * (self.QTable[s_prime, np.argmax(self.QTable[s_prime])])) 
        self.experiences.append((self.s, self.action, s_prime, r))
        self.num_experiences = self.num_experiences + 1
        
        #Dyna-Q 规划 - 开始
        if self.dyna_planning_steps > 0:  # 要执行的模拟数量
            idx_array = np.random.randint(0, self.num_experiences, self.dyna)
            for exp in range(0, self.dyna): # 选择随机经验并更新 QTable
                idx = idx_array[exp]
                self.QTable[self.experiences[idx][0],self.experiences[idx][1]] = (1-self.alpha)*self.QTable[self.experiences[idx][0], self.experiences[idx][1]] + \
                    self.alpha * (self.experiences[idx][3] + self.gamma * (self.QTable[self.experiences[idx][2], np.argmax(self.QTable[self.experiences[idx][2],:])])) 
        #Dyna-Q 规划 - 结束

        if rand.random() >= self.random_action_rate:
          action = np.argmax(self.QTable[s_prime,:])  #Exploit:选择导致最佳奖励状态的操作
        else:
          action = rand.randint(0,self.num_actions - 1) #Explore:随机选择一个操作。
          
    	# 随着 Q 表获得更多证据,使用衰减率来降低随机性(探索)
        self.random_action_rate = self.random_action_rate * self.random_action_decay_rate 
        
        self.s = s_prime
        self.action = action
        return action

结论

Dyna Q 代表了我们追求设计能够在复杂和不确定的环境中学习和适应的代理的进步。通过理解和实施 Dyna Q,人工智能和机器学习领域的专家和爱好者可以针对各种实际问题设计出弹性解决方案。本教程的目的不是介绍概念和算法,而是在这个迷人的研究领域激发创造性应用和未来进展的创造力。文章来源地址https://www.toymoban.com/diary/system/606.html

到此这篇关于使用 Dyna-Q 扩展 Q-Learning 以增强决策能力的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/system/606.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
励志:如何在平凡的生活中创造快乐和满足感
上一篇 2023年12月21日 14:46
Java中的安全密码哈希:实践密码哈希技术和代码示例
下一篇 2023年12月23日 16:15

相关文章

  • Q-Learning

            Q-Learning是强化学习中,一种基于值(values-based)的算法,最终的return是一个表格,即Q-Table。这个表格的每一行都代表着一个状态(state),每一行的每一列都代表着一个动作(action),而每个值就代表着如果在该state下,采取该action所能获取的最大的未来期望奖励。通

    2023年04月09日
    浏览(25)
  • Q-learning算法介绍

    Q-learning是一种value-based算法,它学习一个最优动作价值函数 Q ∗ ( s , a ) Q^*(s,a) Q ∗ ( s , a ) ,那么能够获得最优策略 π ∗ ( s ) = arg ⁡ max ⁡ a ∈ A Q ∗ ( s , a ) , s ∈ S pi^*(s)=argmaxlimits_{ain A}{Q^*(s,a)}, sin S π ∗ ( s ) = ar g a ∈ A max ​ Q ∗ ( s , a ) , s ∈ S Q-learning算法的基本思想

    2024年02月05日
    浏览(43)
  • 强化学习Q-learning实践

    前篇文章介绍了强化学习系统红的基本概念和重要组成部分,并解释了 Q-learning 算法相关的理论知识。本文的目标是在 Python3 中实现该算法,并将其应用于实际的实验中。 闲话少说,我们直接开始吧! 为了使本文具有实际具体的意义,特意选择了一个简单而基本的环境,可

    2024年02月08日
    浏览(47)
  • 强化学习Q-learning入门

    本文为最近学习的强化学习 Q-learning 的学习笔记,主要用于总结和日常记录,本文主要讲解相应的必备入门知识。 闲话少说,我们直接开始吧! 我们小时候都经历过以下情形:我们做错了某年事,受到了惩罚,我们学习后,在遇到类似的状况,我们将不会再犯错。同样,许

    2024年02月08日
    浏览(38)
  • Q-Learning 原理干货讲解

    本文是强化学习和 Q-Learning 算法的概念及原理 项目实战案例可查看下一篇文章:Q-Learning 单路径吃宝箱问题–棋盘格吃宝箱问题–拓扑节点较优路径问题 1.1 什么是强化学习 基于环境的反馈而行动,通过不断与环境的交互、试错,最终完成特定目的或者使得行动收益最大化。

    2024年02月11日
    浏览(27)
  • 强化学习——Q-Learning算法原理

    一、Q-Learning :异策略时序差分控制 从决策方式来看,强化学习可以分为 基于策略 的方法( policy-based )和 基于价值 的方法( value-based )。基于策略的方法直接对策略进行优化,使制定的的策略能够获得最大的奖励。基于价值的强化学习方法中,智能体不需要制定显式的策略,

    2024年01月23日
    浏览(41)
  • 【强化学习】Q-Learning算法详解

    1 Q-Learning算法简介 1.1 行为准则 我们做很多事情都有自己的行为准则,比如小时候爸妈常说:不写完作业就不准看电视。所以我们在写作业这种状态下,写的好的行为就是继续写作业,知道写完他,我们还可以得到奖励。不好的行为就是没写完就跑去看电视了,被爸妈发现,

    2024年01月16日
    浏览(47)
  • 【强化学习】常用算法之一 “Q-learning”

      作者主页: 爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主 爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域. https://blog.csdn.net/Code_and516?type=blog 个人简介:打工人。 持续分

    2024年02月11日
    浏览(41)
  • 强化学习 - Q-learning(Q学习)

    强化学习中的 Q-learning (Q学习)是一种用于 学习在未知环境中做出决策的方法 。它是基于值函数的方法,通过学习一个值函数 Q,该函数表示在给定状态和动作下,期望的累积奖励。 以下是一个简单的 Q-learning 的实现教程,使用 Python 进行演示。这里我们考虑一个简单的驾

    2024年01月24日
    浏览(40)
  • 论文阅读--Conservative Q-Learning for Offline Reinforcement Learning

    摘要 在强化学习( RL )中有效地利用以前收集的大量数据集是大规模实际应用的关键挑战。离线RL算法承诺从先前收集的静态数据集中学习有效的策略,而无需进一步的交互。然而,在实际应用中,离线RL是一个主要的挑战,标准的离线RL方法可能会由于数据集和学习到的策略之

    2024年04月17日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包