【FlappyBird小游戏】编写AI逻辑(三)——RL算法的训练主循环

本文隶属于一个完整小项目,建议读者按照顺序阅读。

本文仅仅展示最关键的代码部分,并不会列举所有代码细节,相信具备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)

 

你可能感兴趣的:(机器学习之强化学习,Python程序设计,python,算法,强化学习,人工智能,游戏)