本文通过Q-Learning算法玩走方格游戏的例子和代码,尝试说明Q-Learning的思想与基本实现方法。
随着人工智能的发展,强化学习相关的算法受到越来越多的关注。强化学习是一种无监督学习,通过智能体(Agent)自行根据现实世界及自身的状态(state),决定策略(action),与现实世界交互,改变自身及现实世界的状态(state),并从状态中获取本次执行的策略的奖励(reward),来优化在不同环境及自身状态下的决策。
Q-Learning是强化学习算法家族中应用最广泛的一种算法,也体现着强化学习的基本思想。前些年大火的Alpha-Go程序的思想就是基于Q-Learning算法,加入了众多搜索与优化算法。
走方格游戏的规则是:有一个5*5的方格地图(大小可调),智能体从左上角出发,目标是右下角的出口;地图上有若干地雷,遇到地雷则智能体死亡;智能体可以通过向上下左右四个方向行走到达出口获得游戏胜利。
程序思路:
1、数据结构Q-table:Q-table是一张表,存储着智能体的每一个状态下,执行不同行为时的预期奖励。走方格游戏中,对于固定的一张地图,智能体的状态可以由向量(x,y)表示其位置,现实世界是不变的,所以不算作状态;下面程序中,数组Qtable[x][y][i]就代表智能体在(x,y)位置下执行动作i时的预期奖励,i有上下左右四个值
备注:之前的代码思路是:枚举每一张可能的地图,再枚举每张地图下智能体在每个位置,将向量(地图,x,y)作为状态,但是这样的后果是:存不下!所以处于学习的角度,将地图固定,不算做状态。事实上,用C++计算一5*5的地图的策略只需要0.4秒。
2、算法:优化决策的过程
由马尔科夫决策过程对Qtable进行优化。该过程的核心方程是
Qtable[x][y][i] = Qtable[x][y][i] + rate * ( reward[x1][y1] + max( Qtable[x1][y1][i] ))
即:执行一个策略之后智能体从(x,y)移动到(x1,y1)点,那么在状态(x,y)下执行动作 i 的奖励就是:下一个行为本身的收益 + 走到下一个方格之后,最好的预期收益。具体举例来说,从(x,y)移动到(x1,y1)点,如果(x1,y1)点是地雷,那么收益为负,如果是好吃的,那么收益为正(游戏中没有好吃的,just 举例&