import torch
import torch.nn as nn
import torch.nn.functional as f
import torch.optim as optim
from torch.distributions import Normal
from collections import deque
import matplotlib.pyplot as plt
import numpy as np
import gym
import copy
2. 定义actor网络和critic网络
class actor_net(nn.Module):
def __init__(self, state_n, action_n, hidden_n):
super(actor_net, self).__init__()
self.fc1 = nn.Linear(state_n, hidden_n)
self.fc2 = nn.Linear(hidden_n, hidden_n)
self.mu = nn.Linear(hidden_n, action_n)
self.sigma = nn.Linear(hidden_n, action_n)
def forward(self, x):
x = f.relu(self.fc1(x))
x = f.relu(self.fc2(x))
mu = torch.tanh(self.mu(x)) * 2
sigma = f.softmax(self.sigma(x), dim = 1) + 0.001
return mu, sigma
class critic_net(nn.Module):
def __init__(self, state_n, hidden_n):
super(critic_net, self).__init__()
self.fc1 = nn.Linear(state_n, hidden_n)
self.fc2 = nn.Linear(hidden_n, hidden_n)
self.fc3 = nn.Linear(hidden_n, 1)
def forward(self, x):
x = f.relu(self.fc1(x))
x = f.relu(self.fc2(x))
value = self.fc3(x)
return value