深度强化学习实战:CartPole 环境配置、工程创建与运行

本文以经典的 CartPole 环境为例,详细讲解深度强化学习项目的配置、工程创建和运行过程,涵盖 Python 环境搭建、PyTorch 模型构建、环境交互等环节。并提供示例代码,帮助读者快速上手深度强化学习。

环境配置

  1. 安装 Python3 确保系统已安装 Python 3,并将其添加到系统环境变量中。

  2. 安装 PyTorch 访问 PyTorch 官网 (https://pytorch.org/),根据操作系统和 CUDA 版本选择合适的安装命令进行安装。

  3. 安装 Gym 使用 pip 安装 Gym 库: pip install gym

工程创建

  1. 创建一个新的 Python 3 项目 在本地磁盘创建一个新的文件夹,用于存放项目文件。

  2. 在项目中创建一个名为 'deep_rl' 的文件夹 该文件夹用于存放强化学习项目的代码和资源。

  3. 在 'deep_rl' 文件夹中创建一个名为 'agent.py' 的文件,用于编写强化学习代理 该文件包含强化学习代理的模型定义、训练逻辑等代码。

  4. 在 'deep_rl' 文件夹中创建一个名为 'environment.py' 的文件,用于编写强化学习环境 该文件包含 CartPole 环境的定义、状态获取、动作执行等代码。

  5. 在 'deep_rl' 文件夹中创建一个名为 'main.py' 的文件,用于运行强化学习实验 该文件用于实例化代理和环境,并运行强化学习训练过程。

运行

  1. 在 'agent.py' 中编写强化学习代理代码

    import torch
    import torch.nn as nn
    import torch.optim as optim
    
    class DQNAgent():
        def __init__(self, state_size, action_size):
            self.device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
            self.state_size = state_size
            self.action_size = action_size
            self.q_network = nn.Sequential(
                nn.Linear(state_size, 256),
                nn.ReLU(),
                nn.Linear(256, 256),
                nn.ReLU(),
                nn.Linear(256, action_size)
            ).to(self.device)
            self.optimizer = optim.Adam(self.q_network.parameters(), lr=0.001)
    
        def get_action(self, state):
            state = torch.FloatTensor(state).to(self.device)
            q_values = self.q_network(state)
            action = q_values.argmax().detach().cpu().item()
            return action
    
        def train(self, states, actions, rewards, next_states, dones):
            states = torch.FloatTensor(states).to(self.device)
            actions = torch.LongTensor(actions).to(self.device)
            rewards = torch.FloatTensor(rewards).to(self.device)
            next_states = torch.FloatTensor(next_states).to(self.device)
            dones = torch.FloatTensor(dones).to(self.device)
            q_values = self.q_network(states).gather(1, actions.unsqueeze(1)).squeeze(1)
            next_q_values = self.q_network(next_states).max(1)[0].detach()
            expected_q_values = rewards + (1 - dones) * 0.99 * next_q_values
            loss = nn.MSELoss()(q_values, expected_q_values)
            self.optimizer.zero_grad()
            loss.backward()
            self.optimizer.step()
    
  2. 在 'environment.py' 中编写强化学习环境代码

    import gym
    
    class CartPoleEnvironment():
        def __init__(self):
            self.env = gym.make('CartPole-v0')
            self.state_size = self.env.observation_space.shape[0]
            self.action_size = self.env.action_space.n
    
        def reset(self):
            return self.env.reset()
    
        def step(self, action):
            next_state, reward, done, _ = self.env.step(action)
            return next_state, reward, done
    
  3. 在 'main.py' 中实例化代理和环境,并运行强化学习实验

    from agent import DQNAgent
    from environment import CartPoleEnvironment
    
    env = CartPoleEnvironment()
    agent = DQNAgent(env.state_size, env.action_size)
    
    for episode in range(100):
        state = env.reset()
        done = False
        total_reward = 0
        while not done:
            action = agent.get_action(state)
            next_state, reward, done = env.step(action)
            total_reward += reward
            agent.train(state, action, reward, next_state, done)
            state = next_state
        print(f'Episode {episode}: Total Reward = {total_reward}')
    

通过以上步骤,您便可以成功配置、创建并运行一个基本的 CartPole 深度强化学习项目,并观察代理在训练过程中逐渐学会平衡杆子的过程。

注意: 以上代码仅供参考,您可以根据实际需求进行修改和调整。


原文地址: https://www.cveoy.top/t/topic/nQIB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录