在强化学习中,有一个智能体(agent)在某种环境中采取行动,根据其行动的效果获得奖励。目标是学习一种策略,即在给定的环境状态下选择最佳行动,以最大化长期累积的奖励。
A2C(Advantage Actor-Critic)
import torch
import torch.optim as optim
import torch.nn as nn
import torch.nn.functional as F
from torch.distributions import Categorical
import numpy as np
from multiprocessing import Process, Pipe
import argparse
import gym
# 建立Actor和Critic网络
class ActorCritic(nn.Module):
''' A2C网络模型,包含一个Actor和Critic
'''
def __init__(self, input_dim, output_dim, hidden_dim):
super(ActorCritic, self).__init__()
self.critic = nn.Sequential(
nn.Linear(input_dim, hidden_dim),
nn.ReLU(),
nn.Linear(hidden_dim, 1)
)
self.actor = nn.Sequential(
nn.Linear(input_dim, hidden_dim),
nn.ReLU(),
nn.Linear(hidden_dim, output_dim),
nn.Softmax(dim=1),
)
def forward(self, x):
value = self.critic(x)
probs = self.actor(x)
dist = Categorical(probs)
return dist, value
class A2C:
''' A2C算法
'''
def __init__(self,n_states,n_actions,cfg) -> None:
self.gamma = cfg.gamma
self.device = cfg.device
self.model = ActorCritic(n_states, n_actions, cfg.hidden_size).to(self.device)
self.optimizer = optim.Adam(self.model.parameters())
def compute_returns(self,next_value, rewards, masks):
R = next_value
returns = []
for step in reversed(range(len(rewards))):
R = rewards[step] + self.gamma * R * masks[step]
returns.insert(0, R)
return returns
A3C(Asynchronous Advantage Actor-Critic)
任务 | 天数 | 截止时间 | 注意事项 |
---|---|---|---|
Task01: 马尔可夫过程、DQN算法 | 3天 | 1月15周一-17日周三 | |
Task02: 策略梯度算法 | 3天 | 1月18日周四-20周六 | |
Task03: A2C、A3C算法、JoyRL开源文档(关注多进程) | 3天 | 1月21日周日-23日周二 | |
Task04: DDPG、TD3算法 | 3天 | 1月24日周三-26日周五 | |
Task05: PPO算法,JoyRL代码实践(选择任一算法任一环境,研究算法不同参数给实验结果带来的影响,也可以用JoyRL上没有跑过的环境尝试) | 6天 | 1月27日周六-2月1号周四 |
[1] 开源内容https://linklearner.com/learn/detail/91
[2] https://github.com/datawhalechina/joyrl-book