--- library_name: reinforce tags: - Pixelcopter-PLE-v0 - deep-reinforcement-learning - reinforcement-learning - policy-gradient - reinforce model-index: - name: REINFORCE results: - task: type: reinforcement-learning name: reinforcement-learning dataset: name: Pixelcopter-PLE-v0 type: Pixelcopter-PLE-v0 metrics: - type: mean_reward value: 31.85 +/- 26.03 name: mean_reward verified: false --- # **REINFORCE** Agent playing **Pixelcopter-PLE-v0** This is a trained model of a **REINFORCE** agent playing **Pixelcopter-PLE-v0** using PyTorch and the [Deep Reinforcement Learning Course](https://huggingface.co/deep-rl-course/unit4). ## Algorithm REINFORCE is a policy gradient method that: - Directly optimizes the policy π(a|s) - Uses Monte Carlo sampling to estimate returns - Updates parameters in the direction of higher expected returns - Belongs to the family of Policy Gradient methods ## Something To Say - 😤Reach PLE (0.0.1) through trial and error with SSH Key on (https://github.com/ntasfi/PyGame-Learning-Environment) - 😭Evaluate 100 turns to get a relatively low score - 💡PixelCopter is wrapped with ```gymnasium.spaces``` in ```Unit 4_2.py``` - 🙂Continue training 20k steps with ```Unit 4_2_continue.py``` after 40k steps in ```Unit 4_2.py``` - Running time Reference: **3h15min** (40k steps) - ☀️Wish you a good time~~~ ## Evaluation Results | Metric | Value | |--------|-------| | Mean Reward | 31.85 | | Std Reward | 26.03 | | Min Reward | 2.00 | | Max Reward | 118.00 | | Mean Episode Length | 220.25 | | Score (mean - std) | 5.82 | | Evaluation Episodes | 100 | ## Usage ```python import torch import torch.nn as nn import torch.nn.functional as F import gymnasium as gym import numpy as np class Policy(nn.Module): def __init__(self, s_size, a_size, h_size=128): super(Policy, self).__init__() self.fc1 = nn.Linear(s_size, h_size) self.fc2 = nn.Linear(h_size, h_size * 2) self.fc3 = nn.Linear(h_size * 2, a_size) def forward(self, x): x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) return F.softmax(self.fc3(x), dim=1) device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") checkpoint = torch.load("reinforce_pixelcopter.pth", map_location=device) policy = Policy(checkpoint['s_size'], checkpoint['a_size'], checkpoint['hidden_size']) policy.load_state_dict(checkpoint['policy_state_dict']) policy.eval() env = gym.make("Pixelcopter-PLE-v0") state, _ = env.reset() for step in range(1000): state_tensor = torch.from_numpy(state).float().unsqueeze(0) with torch.no_grad(): probs = policy(state_tensor) action = torch.argmax(probs, dim=1).item() state, reward, terminated, truncated, _ = env.step(action) if terminated or truncated: state, _ = env.reset() ## Training Configuration - **Algorithm**: REINFORCE (Policy Gradient) - **Policy Network**: 3-layer MLP (256-512 hidden units) - **Optimizer**: Adam - **Learning Rate**: 0.00003+0.00002 - **Discount Factor**: 0.99+0.995 - **Training Episodes**: 40000+20000 - **Device**: cuda:0 ## Training Hyperparameters - Episodes: 40000+20000 - Max steps per episode: 1000 - Learning rate: 0.00003+0.00002 - Gamma (discount factor): 0.99+0.995 - Hidden layer size: 256-512 - Optimizer: Adam