最近迷上了复古游戏,想起小时候入迷的玩贪吃蛇,真的是乐趣无穷。如今到了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代码平台: