import torch import torch.nn as nn import torch.nn.functional as F class Policy(nn.Module): def __init__(self, s_size, a_size, h_size): super(Policy, self).__init__() self.fc1 = nn.Linear(s_size, h_size) self.fc2 = nn.Linear(h_size, a_size) def forward(self, x): x = F.relu(self.fc1(x)) x = self.fc2(x) return F.softmax(x, dim=1) def act(self, state): state = torch.from_numpy(state).float().unsqueeze(0).to(next(self.parameters()).device) probs = self(state).cpu() m = torch.distributions.Categorical(probs) action = m.sample() return action.item(), m.log_prob(action)