TicTacToe井字棋 by reinforcement learning,learningbydoing
對於初學強化學習的同學,數學公式也看不太懂, 一定希望有一些簡單明了的代碼實現加強對入門強化學習的直覺認識,這是一篇初級入門代碼, 希望能對你們開始學習強化學習起到基本的作用.
井字棋具體玩法參考百度,這篇文字主要是用強化學習中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”