本文隶属于一个完整小项目,建议读者按照顺序阅读。
本文仅仅展示最关键的代码部分,并不会列举所有代码细节,相信具备RL基础的同学理解起来没有困难。
全部的AI代码可以在【Python小游戏】用AI玩Python小游戏FlappyBird【源码】中找到开源地址。
如果本文对您有帮助,欢迎点赞支持!
文章目录
一、训练主循环
训练主循环与Deep Rl算法紧密相关,本项目的主循环如下:
def train(self,max_episodes):
print('\n仿真训练启动...')
step_counter = 0
for episode in range(max_episodes):
# 获取初始环境状态
action0 = np.array([1, 0]) # 初始动作为向下降落
x_rgb, reward, done = self.env.frame_step(action0)
state = self.get_init_state(x_rgb) # 对后继状态进行预处理
# 开始本回合的仿真
while True:
# 获取动作和环境反馈
action = self.agent.choose_action(state) # agent根据当前状态采取动作
x_rgb, reward, done = self.env.frame_step(action) # env根据动作做出反馈
# 将转换元组存入记忆池
state_ = self.get_next_state(state,x_rgb) # 对后继状态进行预处理
self.agent.store_in_memory(state,action,reward,state_,done)
# 学习本回合的经验(s, a, r, s)
if step_counter>OBSERVE:
self.agent.learn()
# 当前状态发生切换
state = state_
step_counter += 1
print('\n仿真训练结束')
二、启动代码
其训练器启动代码:
if __name__=='__main__':
# 初始化env
env = game.Flappy_Bird_Env()
# 初始化agent
agent = agent.DQN(n_actions=2, # 动作空间个数
output_graph = False,# 是否输出日志
save_model = True, # 是否保存训练中的模型
read_saved_model = True, # 是否读取已有的模型
e_greedy_increment=0.0001,# 是否让greedy变化,设置为None,标志着agent的探索能力
)
# 初始化训练器
trainer = FlappyBird_Trainer(env=env,agent=agent)
# 开始训练
trainer.train(max_episodes=1)