# PPO Agent Playing myenv-v1
This is a trained model of a PPO agent playing callosp.
# Gameplay
<video controls src="https://huggingface.co/MRNH/ppo-callofsp/resolve/main/replay.mp4"></video>
# Hyperparameters
```python
{'exp_name': 'ppo_no_pbt'
'seed': 1 'torch_deterministic': True 'cuda': True 'track': False 'wandb_project_name': 'cleanRL' 'wandb_entity': None 'capture_video': False 'env_id': 'myenv-v1' 'total_timesteps': 10000 'learning_rate': 0.00025 'num_envs': 1 'num_steps': 2048 'anneal_lr': True 'anneal_ent_coef': False 'anneal_clip_coef': False 'gae': True 'gamma': 0.99 'gae_lambda': 0.95 'num_minibatches': 64 'update_epochs': 3 'norm_adv': True 'clip_coef': 0.2 'clip_vloss': True 'ent_coef': 0.03 'vf_coef': 0.5 'max_grad_norm': 0.5 'target_kl': None 'repo_id': 'MRNH/ppo-callofsp' 'save_path': 'agent.pt' 'save_every': 10 'batch_size': 2048 'minibatch_size': 32} ```
Structure Actor-critic:
def layer_init(layer, std=np.sqrt(2), bias_const=0.0):
torch.nn.init.orthogonal_(layer.weight, std)
torch.nn.init.constant_(layer.bias, bias_const)
return layer
class Agent(nn.Module):
def __init__(self, envs):
super().__init__()
obs_dim = int(np.array(envs.single_observation_space.shape).prod())
n_actions = envs.single_action_space.n
self.critic = nn.Sequential(
layer_init(nn.Linear(obs_dim, 64)),
nn.Tanh(),
layer_init(nn.Linear(64, 64)),
nn.Tanh(),
layer_init(nn.Linear(64, 1), std=1.0),
)
self.actor = nn.Sequential(
layer_init(nn.Linear(obs_dim, 64)),
nn.Tanh(),
layer_init(nn.Linear(64, 64)),
nn.Tanh(),
layer_init(nn.Linear(64, n_actions), std=0.01),
)
def get_value(self, x):
return self.critic(x)
def get_action_and_value(self, x, action=None):
logits = self.actor(x)
probs = Categorical(logits=logits)
if action is None:
action = probs.sample()
return action, probs.log_prob(action), probs.entropy(), self.critic(x)
Evaluation results
- mean_reward on myenv-v1self-reported-1.10 +/- 0.00