本文目前主要是写给自己的一个笔记,接下来这段时间会逐步记录我是怎么通过学习使用TensorFlow+Keras训练神经网络自己玩儿游戏,如果能间接帮助到他人就最好不过了,不喜勿喷。
上一篇我们已经找到了需要输入神经网络的数据(也就是observation
是GYM提供的代表一定意义的数,每个游戏不同),和神经网络需要输出的值(也就是action 需要控制游戏的值)
这一篇我们就来看看怎么样写一个强化学习的简单算法Q-Learn,并且运用到之前的最简单的游戏中。
在这里找到一个莫烦大神优酷的视频集锦,上面不止讲了Keras,还讲了各种关于机器学习的视频,简单易懂,非常有帮助!
看了一个DQN的视频,非常简短有力的介绍了我们需要怎么样搭建一个神经网络来玩游戏。
接下来开始用Q-learning来写程序,如图所示是Q-learning算法的伪码。
import numpy as np import pandas as pd import time np.random.seed(2) # reproducible N_STATES = 6 # the length of the 1 dimensional world ACTIONS = ['left', 'right'] # available actions EPSILON = 0.9 # greedy police ALPHA = 0.1 # learning rate GAMMA = 0.9 # discount factor MAX_EPISODES = 13 # maximum episodes FRESH_TIME = 0.3 # fresh time for one move def build_q_table(n_states, actions): table = pd.DataFrame( np.zeros((n_states, len(actions))), # q_table initial values columns=actions, # actions's name ) # print(table) # show table return table def choose_action(state, q_table): # This is how to choose an action state_actions = q_table.iloc[state, :] if (np.random.uniform() > EPSILON) or ((state_actions == 0).all()): # act non-greedy or state-action have no value action_name = np.random.choice(ACTIONS) else: # act gr