深度强化学习实战:CartPole 环境配置、工程创建与运行
深度强化学习实战:CartPole 环境配置、工程创建与运行
本文以经典的 CartPole 环境为例,详细讲解深度强化学习项目的配置、工程创建和运行过程,涵盖 Python 环境搭建、PyTorch 模型构建、环境交互等环节。并提供示例代码,帮助读者快速上手深度强化学习。
环境配置
-
安装 Python3 确保系统已安装 Python 3,并将其添加到系统环境变量中。
-
安装 PyTorch 访问 PyTorch 官网 (https://pytorch.org/),根据操作系统和 CUDA 版本选择合适的安装命令进行安装。
-
安装 Gym 使用 pip 安装 Gym 库:
pip install gym
工程创建
-
创建一个新的 Python 3 项目 在本地磁盘创建一个新的文件夹,用于存放项目文件。
-
在项目中创建一个名为 'deep_rl' 的文件夹 该文件夹用于存放强化学习项目的代码和资源。
-
在 'deep_rl' 文件夹中创建一个名为 'agent.py' 的文件,用于编写强化学习代理 该文件包含强化学习代理的模型定义、训练逻辑等代码。
-
在 'deep_rl' 文件夹中创建一个名为 'environment.py' 的文件,用于编写强化学习环境 该文件包含 CartPole 环境的定义、状态获取、动作执行等代码。
-
在 'deep_rl' 文件夹中创建一个名为 'main.py' 的文件,用于运行强化学习实验 该文件用于实例化代理和环境,并运行强化学习训练过程。
运行
-
在 '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() -
在 '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 -
在 '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 著作权归作者所有。请勿转载和采集!