50行代码教AI实现动作平衡 | 附完整代码

本文通过50行Python代码,利用Numpy和OpenAI Gym,展示了如何教AI解决推车杆平衡问题。通过强化学习,智能体学会根据推车和杆的状态做出决策,以保持平衡。文中详细介绍了强化学习的基本概念,包括状态、策略,并提供了逐步的代码实现,帮助读者理解并实践强化学习的应用。
摘要由CSDN通过智能技术生成

【导读】本文将为大家展示如何通过 Numpy 库和 50行 Python 代码,使用标准的 OpenAI Gym平台创建智能体 (agent),就教会机器处理推车杆问题 (cart pole problem) ,保持平衡。

今天,我们不过多的讨论强化学习的基础理论,希望大家在下面的编译器里,不断尝试,体会这个项目。一开始,大家只需要点击“Start”,开始配置需要的环境即可。

快速入门强化学习(RL)

如果你是机器学习或强化学习领域的新人,先了解一下下面的一些基础知识和术语,为后面做铺垫。如果你已经掌握了基础知识,那可以跳过这部分内容。
强化学习

强化学习旨在教会我们的智能体 (算法或机器) 执行特定的任务或动作,而无需显式地告诉它该如何做。想象一个婴儿在随机抬动自己的腿,当站立起来时就给予他一个奖励。同样地,智能体的目标是在其生命周内最大化奖励值,而奖励取决于特定的任务。比如宝宝站立这个例子,站立时给予奖励记为1,否则记为0。
AlphaGo 就是一个典型的强化学习智能体例子,教会智能体如何玩游戏并最大化其奖励 (即赢得游戏)。而在本文中就将创建一个智能体,教它如何通过左右推动推车来解决推车上的杆平衡问题。
状态

状态即当前游戏的样子,通常用数字来表示。在乒乓球比赛中,它可能是每个球拍与x、y坐标轴的垂直位置或者是乒乓球的速度。在推车杆的情况下,这里的状态由4个数字组成:即推车的位置,推车的速度,杆的位置 (作为角度) 和杆的角速度。这4个数字作为向量 (或数组) 提供给智能体,这非常重要:将状态作为一组数字意味着智能体能够对它进行一些数学运算,以便决定如何根据状态来采取什么行动。
策略

策略是一种可以处理游戏状态的函数 (例如棋盘的位置或者推车和杆的位置), 并输出智能体在该位置应该采取的动作 (例如移动或将推车推到左边)。在智能体采取相应的操作后,游戏将以下一个状态更新,此时将再次根据其输入策略做出决策,这个过程一直持续到游戏达到某个终止条件时结束。策略同样是个非常关键的因素,因为它反映了是智能体背后的决策能力,这也是我们所需要认真考虑的。
点积 (dot product)

两个数组 (向量) 之间的点积可以简单理解为,将第一个数组的每个元素乘以第二个数组的对应元素,并将它们全部加在一起。假设想要计算数组 A 和 B 的点积,形如 A[0]*B[0]+A[1]*B[1] …随后将使用此运算结果再乘以一个状态 (同样是一个向量) 和一个策略值 (同样也是一个向量)。这部分内容将在下一节详细介绍。

制订策略

为了解决推车游戏,我们希望所设计的机器学习策略能够赢得游戏或最大化游戏奖励。对于智能体而言,这里将接收4维数组所表示策略,每一维代表每个组成的重要性 (推车的位置,杆位等四个组成)。随后,再将点积的结果与策略、状态向量进行处理并输出最终的结果。根据结果的正负值决定是向左还是向右推动推车。这听起来可能有点抽象,下面就通过一个具体的例子,来看看整个过程将发生什么。
假设推车在游戏中静止地处在中间位置,当杆向右倾斜时车也将向右倾斜,如下图这样:

所对应的的状态如下图所示:

此时的状态向量为 [0, 0, 0.2, 0.05]。直观地说,现在我们想要将推车推向右侧,并将杆拉直。这里通过训练中得到了一个很好的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值