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

195 阅读1分钟

一、训练主循环

训练主循环与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)

【小游戏开发】