强化学习Qlearning算法——Python实现郝hai

Q-learning是一种基于值迭代的强化学习(ReinforcementLearning,RL)算法,主要用于在给定环境中学习一个策略,使得智能体(agent)能够在与环境交互的过程中获得最大累计奖励。它通过学习一个状态-动作值函数(Q函数)来指导智能体的行为选择,适用于各种离散状态和动作的任务环境。Q-learning在各种应用领域中都有显著表现,包括机器人控制、游戏AI、交通系统优化以及金融市场分析等。通过不断改进和扩展,Q-learning在未来将有望在更多复杂的实际任务中发挥重要作用,特别是在结合其他机器学习技术和多智能体系统的研究中。

Q-Learning算法是一种无模型的强化学习技术,用于学习代理在环境中采取动作的最佳策略。在Q-Learning中,我们通常使用两个主要的矩阵来表示和更新信息:奖励矩阵(R)和Q值矩阵(Q)。

Q-learning的核心思想是通过不断地更新状态-动作值(\(Q\)值)来逼近最优Q函数(\(Q^*\)),从而得到最优策略。我们可以构建一个矩阵\(Q\),它用来表示agent已经从经验中学到的知识。矩阵\(Q\)与\(R\)是同阶的,其行表示状态,列表示行为,\(R(s,a)\)表示在状态\(s\)是采取行为\(a\)获得的奖励。由于刚开始时agent对外界环境一无所知,因此矩阵\(Q\)应初始化为零矩阵,对于状态数目未知的情形,我们可以让\(Q\)从一个元素出发,每次发现一个新的状态时就可以在\(Q\)中增加相应的行列。Q-learning算法的转移规则比较简单,如下式所示:

其中\(s,a\)表示当前的状态和行为,\(\widetilde{s},\widetilde{a}\)表示\(s\)的下一个状态及行为,式(1)中的\(\gamma\)称为学习系数,满足\(0\leq\gamma<1\),如果\(\gamma=0\),对立即的奖励更有效;如果接近1,整个系统会更考虑将来的奖励。在没有老师的情况下,我们的agent将通过经验进行学习(也称为无监督学习)。它不断从一个状态转至另一状态进行探索,直到到达目标。我们将agent的每一次探索称为一个episode。在每一个episode中,agent从任意初始状态到达目标状态。当agent达到目标状态后,一个episode即结束,接着进入另一个episode。下面给出整个\(Q\)-learning算法的计算步骤:

Step1给定参数\(\gamma\)和reward矩阵\(R\);Step2今\(Q:=0\);Step3Foreachepisode:3.1随机选择一个初始的状态\(s\);3.2若未达到目标状态,则执行以下几步(1)在当前状态\(s\)的所有可能行为中选取一个行为\(a\);(2)利用选定的行为\(a\),得到下一个状态\(\widetilde{s}\);(3)按照公式(1),计算\(Q(s,a)\);(4)令\(s:=\widetilde{s}\).

Agent利用上述算法从经验中进行学习。每一个episode相当于一个trainingsession,在一个traimingsession中,agent探索外界环境,并接收外界环境的reward,直到达到目标状态。训练的目的是要强化agent的“大脑”(用\(Q\)表示)。训练得越多,则\(Q\)被优化得更好,当矩阵\(Q\)被训练强化后,agent便很容易找到达到目标状态的最快路径了。利用训练好的矩阵\(Q\),我们可以很容易地找出一条从任意状态\(s_0\)出发达到目标状态的行为路径,具体步骤如下:

令当前状态\(s:=s_0\);确定\(a\),它满足\(Q(s,a)=\max_{\tilde{a}}\{Q(s,\widetilde{a})\}\);令当前状态\(s:=\widetilde{s}(\widetilde{s}\)表示\(a\)对应的下一个状态\()\);重复执行步2和步3直到\(s\)成为目标状态.

通过不断迭代更新\(Q(s,a)\)的值,Q-Learning算法可以学习到最优策略\(\pi^*\)下的状态-动作对的价值函数\(Q^*(s,a)\)。这个过程不需要环境的动态模型,因此Q-Learning是一种无模型的强化学习算法。

贝尔曼方程是动态规划中的核心原理,它将一个状态的价值分解为即时奖励和未来价值的总和。对于状态价值函数$V^{\pi}(s)$和动作价值函数\(Q^{\pi}(s,a)\),贝尔曼方程可以表示为:

其中:

Q-Learning算法的目标是找到一个策略\(\pi^*\),使得\(Q(s,a)\)最大化,即:

Q-Learning的更新规则如下:

假设我们有一个策略$\pi$,其对应的Q值函数为$Q^{\pi}$。根据贝尔曼动态规划方程,我们有:

其中\(P(s'|s,a)\)是状态转移概率,由于\(V^{\pi}(s')=\max_{a'}Q^{\pi}(s',a')\),我们可以将$V^{\pi}(s')$替换为$\max_{a'}Q^{\pi}(s',a')$:

如果我们取$\pi$为最优策略$\pi^*$,那么我们得到:

这个方程表明,最优值\(Q^*(s,a)\)可以通过对未来状态的最优Q值的加权和来计算,这就是Q-Learning算法的马尔科夫解。

一只小白鼠在迷宫里面,目的是找到出口,如果他走出了正确的步子,就会给它正反馈(糖),否则给出负反馈(点击),那么,当它走完所有的道路后,无论把它放到哪儿,它都能通过以往的学习找到通往出口最正确的道路。假设迷宫有5间房,如图1所示,这5间房有些房间是想通的,我们分别用0-4进行了标注,其中5代表了出口。

在这个游戏里,我们的目标是能够走出房间,就是到达5的位置,为了能更好的达到这个目标,我们为每一个门设置一个奖励。如果以state为行,action为列,则上图又可转化为如下的reward矩阵:比如如果能立即到达5,那么我们给予100的奖励,5因为也可以到它自己,所以也是给100的奖励;对于其他状态之间如果没法到5的我们不给予奖励,奖励是0了;在Q-learning中,目标是奖励值累加的最大化,所以一旦达到5,它将会一直保持在这儿,如图3所示。

为进一步理解上一节中介绍的Q-learning算法是如何工作的,下面我们一步一步地迭代几个episode。首先取学习系数\(\gamma=0.8\),初始状态为房间1,并将\(Q\)初始化为一个零矩阵。观察矩阵\(R\)的第二行(对应房间1或状态1),它包含两个非负值,即当前状态1的下一步行为有两种可能:转至状态3或转至状态5。随机地,我们选取转至状态5。

想象一下,当我们的agent位于状态5以后,会发生什么事情呢观察矩阵\(R\)的第6行(对应状态5),它对应三个可能的行为:转至状态1,4或5,根据公式(1),我们有

现在状态5变成了当前状态。因为状态5即为目标状态,故一次episode便完成了,至此,小白鼠的“大脑”中的\(Q\)矩阵刷新为

接下来,进行下一次episode的迭代,首先随机地选取一个初始状态,这次我们选取状态3作为初始状态。观察矩阵\(R\)的第四行(对应状态3),它对应三个可能的行为:转至状态1,2或4。随机地,我们选取转至状态1,因此观察矩阵\(R\)的第二行(对应状态1),它对应两个可能的行为:转至状态3或5,根据公式(1),我们有

若我们执行更多的episode迭代,最终将得到一个收敛矩阵(理论上可以证明这个矩阵一定存在),见下图所示。

最终策略:在状态0下,选择动作4作为最优策略;在状态1下,选择动作5作为最优策略;在状态2下,选择动作3作为最优策略;在状态3下,选择动作4作为最优策略;在状态4下,选择动作5作为最优策略;在状态5下,选择动作5作为最优策略。所以从状态2出发的最优路径序列为2-3-4-5。

注意:状态转移矩阵S中的值表示从当前状态(行)执行某个动作(列)后转移到的目标状态。例如,从状态1执行动作1将转移到状态0,执行动作2将转移到状态7,执行动作3将转移到状态1。

THE END
1.强化学习实战教程:从理论基础到游戏AI的应用开发指南通过强化学习实现机器人路径规划 以机器人自主导航为例,利用基于策略的强化学习算法,训练机器人学会在复杂环境中规划最优路径,以达到目标位置。 结语 通过本篇教程,我们了解了强化学习的基本概念和原理,并通过实战示例展示了强化学习在游戏AI和机器人控制中的应用。希望读者能够通过本教程对强化学习有更深入的了解,进而https://www.jianshu.com/p/166f0ed40f46
2.强化学习与机器学习的结合:实现更高效的算法本文探讨了强化学习与机器学习的区别和联系,重点介绍了如何结合这两种技术,特别是通过机器学习改进强化学习的算法,包括价值函数和策略近似的应用。通过实例展示了基于机器学习的强化学习方法,并展望了未来趋势和挑战。 摘要由CSDN通过智能技术生成 1.背景介绍 https://blog.csdn.net/universsky2015/article/details/137306987
3.强化学习算法代码实现强化学习算法的代码梳理。 残血的三井寿 · 7 篇内容 订阅专栏推荐文章 强化学习代码实现【4,QDN】 这节课我们一起来学习一下如何用代码实现强化学习算法DQN得过程,首先我们来回顾一下DQN的算法过程。 首先我们准备一个记忆池子N来存放我们的记忆内容,之后为网络net-eval赋一个随机初值q-eval… https://www.zhihu.com/column/c_1139186891151724544
4.7个流行的Python强化学习算法及代码实现详解python目前流行的强化学习算法包括 Q-learning、SARSA、DDPG、A2C、PPO、DQN 和 TRPO。这些算法已被用于在游戏、机器人和决策制定等各种应用中,本文我们将对其做一个简单的介绍,感兴趣的可以学习一下+ 目录 目前流行的强化学习算法包括 Q-learning、SARSA、DDPG、A2C、PPO、DQN 和 TRPO。 这些算法已被用于在游戏、机器人https://www.jb51.net/article/273488.htm
5.17个机器学习的常用算法应用场景包括分类和回归,算法包括一些对常用监督式学习算法的延伸,这些算法首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。如图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM.)等。 4.强化学习: 在这种学习模式下,输入数据作为对模型的反馈,不像监督模型那样,输入数据仅仅是作为一https://aidc.shisu.edu.cn/78/aa/c13626a161962/page.htm
6.科学网—[转载]强化学习在资源优化领域的应用基于这种行业趋势,本文针对强化学习算法在资源优化领域的应用展开调研,帮助读者了解该领域最新的进展,学习如何利用数据驱动的方式解决资源优化问题。鉴于资源优化问题场景众多、设定繁杂,划分出3类应用广泛的资源优化问题,即资源平衡问题、资源分配问题、装箱问题,集中进行调研。在每个领域阐述问题的特性,并根据具体的问题特性https://blog.sciencenet.cn/blog-3472670-1312677.html
7.头条文章可以看到, 图 5(a)中,红色三角形数据和蓝色圆点数据为标注数据; 图 5(b)中,绿色的小圆点为非标注数据。 图 5(c)显示监督学习将有标签的数据进行分类;而半监督学习如图 5(d)中部分是有标签的,部分是没有标签的,一般而言,半监督学习侧重于在有监督的分类算法中加入无标记样本来实现半监督分类。 https://card.weibo.com/article/m/show/id/2309404598738399395890
8.5种用于Python的强化学习框架我认为,到目前为止,它是几种RL算法的代码实现的最简单的理解,包括深度Q学习(DQN),双DQN,深度确定性策略梯度(DDPG),连续DQN(CDQN或NAF),交叉熵方法(CEM) ,决斗DQN)和SARSA。 当我说"最容易理解的代码"时,我指的不是使用它,而是对其进行自定义并将其用作您的项目的构建块*。 Keras-RL github还包含一些示例https://ai.51cto.com/art/202006/618202.htm
9.强化学习系列案例强化学习实验环境Gym和TensorFlow强化学习系列案例 | 强化学习实验环境Gym和TensorFlow 查看本案例完整的数据、代码和报告请登录数据酷客(cookdata.cn)案例板块。 强化学习算法的实现需要合适的平台和工具。本案例将首先介绍目前常用的强化学习实现平台Gym的基本使用方法,再介绍实验工具TensorFlow的基本操作方法,为之后构建和评估强大的强化学习算法打下坚实https://cloud.tencent.com/developer/article/1619441
10.AI深度强化学习落地方法七步曲2——状态空间篇回报函数篇另外可以优先选择收敛速度较快的DRL算法(先不考虑绝对性能),从而快速验证新状态相对旧状态的改进效果。 <img src="https://pic2.zhimg.c错的policy时,可以用缺省的方式验证每个状态信息https://www.shangyexinzhi.com/article/4228946.html
11.17种深度强化学习算法用Pytorch实现【导读】深度强化学习已经在许多领域取得了瞩目的成就,并且仍是各大领域受热捧的方向之一。本文推荐一个用PyTorch实现了17种深度强化学习算法的教程和代码库,帮助大家在实践中理解深度RL算法。 深度强化学习已经在许多领域取得了瞩目的成就,并且仍是各大领域受热捧的方向之一。本文推荐一个包含了 17 种深度强化学习算http://www.360doc.com/content/19/0926/10/32196507_863278517.shtml