最近迷上了復古遊戲,想起小時候入迷的玩貪吃蛇,真的是樂趣無窮。如今到了2019年了,一切彷佛都變得和之前不一樣,好比,咱們能夠用AI下圍棋,用AI作自動駕駛,有沒有可能讓一個AI本身學會玩貪吃蛇呢?答案固然是能夠!!html
先來看看咱們的效果:python
讓AI學會貪吃蛇,那麼首先咱們須要定義這個遊戲環境。有人會說用pygame,或者gtk來作一個界面,其實都顯得過於複雜,尚未等到我把AI造出來,但就遊戲界面估計就得浪費大把時間。咱們直接用OpenCV便可解決這個問題! 大概的代碼以下:算法
那麼怎麼讓AI知道貪吃蛇的遊戲規則呢?也就事說,讓AI知道:網絡
通過個人嘗試,我發現,若是採用傳統的動態規劃的方式去作,既首先從圖片着手,來學習預測下一步貪吃蛇的方向,其實很難讓Agent學到任何東西,相反,咱們的策略是:架構
這個思想有點像ProgressiveGAN,也就是按部就班的讓Agent學習,先從小環境着手,小環境學習好了,再加大難度。事實上,實驗驗證了咱們的想法,這個方向無疑是有效果的。學習
從圖能夠看出,這是其中的一個環節,能夠看到咱們的貪吃蛇最大長度能夠達到9,其實已經很不錯了,旁邊的數字顯示它已經本身咬死了本身1841次,但是依舊堅強的活着。。優化
對於整個模型算法的流程,也很是清晰,簡單來講步驟以下:人工智能
對於這類問題,其實就是一個根據環境進行決策的過程,能夠藉助強化學習的手段來學習,但做爲下一個動做空間的預測模型,仍是須要咱們構建DNN去擬合,從數據中學習到預測下一步動做的規律,這也是核心。 咱們的QNetwork構建採用的是TensorFlow 2.0, 而且採用Keras NN API進行構建。能夠說很是的結合潮流。核心的QNetwork構建代碼以下:spa
class QNetwork:
def __init__(self,input_shape, hidden_units, output_size, learning_rate=0.01):
self.input_shape = input_shape
hidden_units_1, hidden_units_2, hidden_units_3 = hidden_units
self.model = tf.keras.Sequential([
tf.keras.layers.Dense(units=hidden_units_1, input_dim=input_shape, activation=tf.nn.relu),
tf.keras.layers.Dense(units=hidden_units_2, activation=tf.nn.relu),
tf.keras.layers.Dense(units=hidden_units_3, activation=tf.nn.relu),
tf.keras.layers.Dense(units=output_size, activation=tf.keras.activations.linear)
])
self.model.compile(optimizer = tf.keras.optimizers.Adam(learning_rate), loss='mse',metrics=['accuracy'])
def predict(self, state, batch_size=1):
return self.model.predict(state, batch_size)
def train(self, states, action_values, batch_size):
self.model.fit(states, action_values, batch_size=batch_size, verbose=0, epochs=1)
複製代碼
對與這個模型,其實能夠採用更深刻的架構,咱們也會在後續不斷地深刻探索不一樣模型的優化效果,讓咱們的貪吃蛇AI更加的智能。3d
咱們能夠看一下整個訓練過程的log:
能夠看到,大概5000個Episode以後,得分能夠逐漸的增高,說明網絡在指導貪吃蛇下一步運動的時候更加的駕輕就熟。從訓練的實際gif圖也能夠看到,如今咱們貪吃蛇的最大長度能夠達到13,試想一下,隨着棋盤的增大,模型的變強,是否是貪吃蛇會變得很是很是的長,以致於超越人類的玩貪吃蛇極限呢??咱們拭目以待!!
訓練尚未徹底,可是你能夠看到,這個走位仍是很風騷的有木有!!
最後,到了咱們的人工智能表演時間!!!讓咱們把舞臺交給貪吃蛇AI!!!!貪吃蛇,上!
這個走位仍是很是的風騷的!通過一個晚上的訓練,多達30000屢次的輪迴,咱們的貪吃蛇終於能夠在長度28的範圍以內保證本身屹立不倒,我想這應該比多部分手殘少年要強。。好比我。。
總結一下咱們的強化學習存在的問題和沒法解決的死角點:
最後,本教程的全部代碼主要包含4個東西:
全部代碼均可以在MANA AI 平臺,一個專一分享高質量有專業團隊維護的AI代碼平臺: