对于初学强化学习的同学,数学公式也看不太懂, 一定希望有一些简单明了的代码实现加强对入门强化学习的直觉认识,这是一篇初级入门代码, 希望能对你们开始学习强化学习起到基本的作用.
井字棋具体玩法参考百度,这篇文字主要是用强化学习中Q-learning实现游戏过程中各个状态Q(S,a)计算, 在代码最后是一个人机对弈的过程, 电脑走第一步.
在Q-learning中, 各个Q(S,a)的计算公式如下:
Q(S,a) = Q(S,a) + 0.1 * (reward(s,a) + 0.9 * Q(S',a') - Q(S,a))
reward(s,a)在电脑赢时返回1, 电脑输时返回-1, 其他时候返回0
在 计算完Q(S,a)后, 有一个人机对战代码,board = [0, 0, 0, 0, 0, 0, 0, 0, 0],代表棋盘初始状态, 电脑会选择最大Q(s,a)走第一步, 假如电脑选择的是位置3,那棋盘就成为board = [0, 0, 0, 1, 0, 0, 0, 0, 0],玩家也就是你随机选择一个位置,假如是位置0,在键盘输入0,棋盘变为board = [2, 0, 0, 1, 0, 0, 0, 0, 0],继续下去,直到结束状态。
我从没赢过电脑
代码位置:https://github.com/k13795263/TicTacToe/blob/master/TicTacToe.py
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
“more support, more energy, more useful code”
赞助魔方