# 强化学习在Freeway游戏中的探究尝试
**摘要**: Q-leraning是一种常用的强化学习方法,它的决策主体(Agent)在与环境的交互中不断更新自己对于环境的认知,以此来达到更好的依据环境决策的目的。在一个训练训练完成的模型模型火种,通过构建好的状态、动作、价值评估的映射表,Agent可以在某一特定状态下计算出当前价值最高的行动,并不断采取最高的行动链,最终达到终点。在构建过程中,Agent一边探索一边动态更新映射表(Q-table),以期最终达到收敛或者近似收敛的目的。
关键词: 强化学习、Q-learning 、特征提取、参数选择
# 一、强化学习的方法和过程
## 1.1 强化学习之Q-learning的基本原理简介
强化学习与Q-learning的基本逻辑已经在上一部分简要阐述了,其中心思想便是图示的通过“探索行动”来在当前状态下走到下一个状态,同时获得环境产生的“奖励(或惩罚)”,以此来不断学习某一状态下进行某一动作的价值,以便后续在相同状态的决策过程中能更加正确地考虑到底该执行什么动作。其背后的哲学思想类似于我们在动物身上发现的条件反射,如果对某种行为进行正向刺激,动物在经过反复刺激过后将更加倾向于进行某种行为,而对某种行为施加惩罚则后续将更不倾向于进行这种行为。
![](https://www.writebug.com/myres/static/uploads/2022/6/15/74ddbd2f8cac421a238142d561b20e45.writebug)
Q-learning用一张Q-table来记录环境状态与动作价值的对应关系,它的值会在每次行动中不断更新。最好的期望是,在进行较多较多次行动迭代之后,Q-table中每一项的值可以收敛,这样我们就完全掌握了整个环境,今后的决策将十分简单,只需按照Q-table依次贪心选择最佳动作链就一定能到达终点。然而实际操作中,由于真实状态可能较多而Q-table规模受限,以及训练时间、训练方法有效程度等诸多限制,导致Q-table往往并不能理想的收敛到常数。然而即使这样,Q-learning仍然能在在很大程度上反映环境与动作的内在取舍关系,所以在一定精度以内,一张近似收敛的Q-table也能较好地满足我们对于对于最大化某些收益(如到达终点)的期望。而怎样能让Q-learning在较短的时间之内有效收敛到可以容许的误差范围之内,则是我们具体使用者应当着重考虑的问题,本篇文章将会在3、4两部分分别针对特征提取与参数选择进行分析。
![](https://www.writebug.com/myres/static/uploads/2022/6/15/1cfd3f8d0adfd4556f67bf3685396aa5.writebug)
一次理想状态的Q-learning的训练过程大体如下:
1. 首先建立Q-table,初始状态下置为随机(如果能收敛,初值将无关紧要)。
2. 接着开始迭代。在每一步中使用“epsilon贪婪”方法,以epsilon概率进行“探索(即不按Q-table来,比如随机走)”, 另外有(1-epsilon)概率进行严格按照Q-table的“决策”,不论采用哪种方法,都可获得一个当前状态所要采取的动作。
对采取此操作后的下一个状态,按照如下图方法更新原节点此动作对应的Q值。其中alpha为学习率,标志着“新”学习得到的信息与“历史”学习到的信息之间的取舍,可以发现Q(S,A)一项拿到外面来之后的系数为(1-alpha),而后面一项的系数为alpha,这样就比较直观的反映了学习率的含义,学习率越大代表越看重这一次操作新学习到的信息,更小则表示更加重视原先存在的学习经验所得。后面max前的gama为奖励衰变系数,它的存在是为了权衡这一步得到的即时奖励(R)与未来奖励的期望(通过下一状态所有动作的Q值得最大值来反映)之间的取舍,gama设的越小表示越“贪心”,越大则考虑的越“长远”,然而由于Q-table一开始的值是随机设置的,所以在初期不应使用过大的gama,因为它反映的信息没有太大的正确意义。此表达式通俗来讲就是,新价值=原先价值+学习率*价值改变量。
![](https://www.writebug.com/myres/static/uploads/2022/6/15/fda5035df4b05e78a6bff19c29f21ebc.writebug)
3. 最终在一定迭代次数后,Q-table成功收敛,训练完成。后续决策可以完全按照Q-table的值来进行。
## 1.2 实验代码中的Q-learning实现
在一次实验中,总共进行10轮游戏,他们的经验是逐渐累积的。
每一个Agent拥有一个全局的训练数据集m_dataset,它的大小由m_maxPoolSize参数限制。每当系统向Agent索要一个动作时,它会先用learnPolicy进行一次学习,之后再从现有模型中找出当前最佳动作返回。
一次学习的过程learnPolicy,会进行10次模拟训练,每次模拟训练返回一组数据,在把这些数据添加到数据集末尾之后,按照m_maxPoolSize从开头处删除一些元素。最终我们调用一次m_policy的fitQ方法,来更新现有模型,更新原理是使用当前数据集构造一个weka内置的REPTRee分类器。
模拟训练的过程就是上文所说的更新Q值的过程,不过在这里我们不是一次只走一步,而是按照epsilon greedy方法,以一定概率随机走,另外概率正常决策,以此往后行进depth步。参考上文中的max(Q)一项,在这里我们从底层开始计算Q值,迭代更新直到当前状态。在设置两个系数的过程中,我们引入了一个衰减项m_gama,每次深度增加时factor(初值为1)就会乘上一个m_gama,这样到底层的时候它的值相比高层已经变小了。上式中R值,也就是环境对动作的回报,这里十分简答的用了游戏内分数作为reward,同时假如胜利或失败则赋予一个极大的正/负常数,以示区别。
### 1.2.1 策略模型用什么表示?该表示有何缺点?有何改进方法?
策略模型使用Q-table表示,在代码中Q-table并没有全局存储,而是存储全局dataset列表,并在每一个状态下通过weka的RTPtree模型来分别生成其Q-table。
![](https://www.writebug.com/myres/static/uploads/2022/6/15/3dec8ae5802e97b0187b93793834d23b.writebug)
这样表示的问题是游戏中的可能状态数量过大,难以全部保存所有训练所得信息,只能删除早先得到的结果。
![](https://www.writebug.com/myres/static/uploads/2022/6/15/3399d9f0af84fcc7c38f4adcf919d88c.writebug)
改进方法是,更改状态表示方法,考虑更加抽象和主要的属性,而非简单利用每一个方块内的物体种类、游戏时间等时刻变化的属性。以此来合并一些并非完全相同,但在和游戏交互方面有较大相同之处的状态,降低总状态数量,使得训练、使用dataset与Q-table的效率能大大增加。
### 1.2.2 Agent.java 代码中 SIMULATION_DEPTH, m_gamma, m_maxPoolSize 三个变量分别有何作用?
SIMULATION_DEPTH表示的是一次“探索”过程一连串走下去的深度。这一串行动,每一步采用getact(with explore)方法来获得,其整体是代码中Q-learning更新学习所得数据的最小单位。
它的存在使得每一步探索不止是计算走一步的价值,而是用我们现有方法连续走好几步之后的统计总价值,用这种方法在总状态较多的环境下可以提高训练效率,同时更科学的反映每一个动作的后续期望价值。
M_gamma参数反映了factor学习率的“衰减”,类似于深度学习中学习率不断递减的思想,而这里是在更大的探索深度使用更小的学习率。每一层探索时,factor都会乘上一个m_gamma,以此来达到减小的目的。
![](https://www.writebug.com/myres/static/uploads/2022/6/15/a528c2f134df0cd3ea4fa6f348b409c0.writebug
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
资源包含文件:课程论文报告+项目源码 Q-leraning是一种常用的强化学习方法,它的决策主体(Agent)在与环境的交互中不断更新自己对于环境的认知,以此来达到更好的依据环境决策的目的。在一个训练训练完成的模型模型火种,通过构建好的状态、动作、价值评估的映射表,Agent可以在某一特定状态下计算出当前价值最高的行动,并不断采取最高的行动链,最终达到终点。在构建过程中,Agent一边探索一边动态更新映射表(Q-table),以期最终达到收敛或者近似收敛的目的。 详细介绍参考:https://biyezuopin.blog.csdn.net/article/details/125313094
资源推荐
资源详情
资源评论
收起资源包目录
Java实现强化学习在Freeway游戏中的探究尝试.zip (270个子文件)
课程论文.doc 354KB
GVGAI-assignment4.iml 556B
weka.jar 6.28MB
Game.java 55KB
ArcadeMachine.java 34KB
ForwardModel.java 31KB
VGDLSprite.java 25KB
Chromosome.java 21KB
LevelGenerator.java 19KB
StateObservation.java 19KB
SingleTreeNode.java 16KB
VGDLFactory.java 16KB
GameAnalyzer.java 15KB
VGDLParser.java 13KB
LevelGenerator.java 11KB
SingleMCTSPlayer.java 10KB
GameDescription.java 9KB
SingleTreeNode.java 9KB
SingleTreeNode.java 9KB
SingleTreeNode.java 8KB
Vector2d.java 7KB
AStar.java 7KB
LevelGenerator.java 6KB
Agent.java 6KB
BasicGame.java 6KB
LevelData.java 6KB
MovingAvatar.java 5KB
Agent.java 5KB
Agent.java 5KB
AlternateChaser.java 5KB
Types.java 5KB
Agent.java 5KB
Utils.java 5KB
Chaser.java 5KB
RLDataExtractor.java 4KB
StatSummary.java 4KB
ShootAvatar.java 4KB
SpriteGroup.java 4KB
FlakAvatar.java 4KB
HumanPlay.java 4KB
TimeEffect.java 4KB
TransformToSingleton.java 4KB
LevelMapping.java 4KB
QPolicy.java 4KB
PathChaser.java 4KB
Event.java 4KB
Agent.java 4KB
AbstractPlayer.java 4KB
Node.java 4KB
VGDLRegistry.java 4KB
PathAltChaser.java 4KB
SharedData.java 3KB
SpriteContent.java 3KB
PathFinder.java 3KB
VGDLViewer.java 3KB
Observation.java 3KB
TransformTo.java 3KB
InteractionContent.java 3KB
SimpleStateHeuristic.java 3KB
SpawnPoint.java 3KB
ElapsedCpuTimer.java 3KB
Agent.java 3KB
ContinuousPhysics.java 3KB
CompetitionParameters.java 3KB
OrientedAvatar.java 2KB
OngoingAvatar.java 2KB
GridPhysics.java 2KB
TreeNode.java 2KB
PullWithIt.java 2KB
Spreader.java 2KB
StepBack.java 2KB
Agent.java 2KB
Agent.java 2KB
RandomNPC.java 2KB
TransformToAll.java 2KB
Agent.java 2KB
WallStop.java 2KB
AddTimer.java 2KB
Effect.java 2KB
StepController.java 2KB
HorizontalAvatar.java 2KB
MissileAvatar.java 2KB
Resource.java 2KB
MultiSpriteCounter.java 2KB
UndoAll.java 2KB
Portal.java 2KB
RandomPathAltChaser.java 2KB
RandomAltChaser.java 2KB
CollectResourceIfHeld.java 2KB
CombinedConstraints.java 2KB
GameContent.java 2KB
AttractGaze.java 2KB
Agent.java 2KB
RandomBomber.java 2KB
MappingContent.java 2KB
KeyPulse.java 2KB
Agent.java 1KB
SingleMCTSPlayer.java 1KB
Agent.java 1KB
SingleMCTSPlayer.java 1KB
共 270 条
- 1
- 2
- 3
资源评论
- qsf1132023-08-10资源太好了,解决了我当下遇到的难题,抱紧大佬的大腿~
shejizuopin
- 粉丝: 1w+
- 资源: 1288
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功