I am trying to build a model for a policy and have a general question regarding the initial values of the policy.
It looks to me that at from the first forward step the softmax will not return equal probability.
Questions:

how can I force the policy to be equal probability for all the actions at the first step?
what would be a good method to increase exploration when training the policy?
what are some of the ways one can apply constraints on the actions? for example if a specific state makes one of the actions impossible, beside setting it in the rewards in a way of a penalty (restraining the actions)

example policy:
class Policy(nn.Module):
    def __init__(self, state_size, action_size, fc1_size=64):
        super().__init__()
        self.fc1 = nn.Linear(state_size, fc1_size)
        self.fc2 = nn.Linear(fc1_size, action_size)

    def forward(self, state):
        x = F.relu(self.fc1(state))
        x = self.fc2(x)
        x = F.softmax(x, dim=1)
        return x

    def act(self, state):
        state = state.unsqueeze(0)
        probs = self.forward(state).cpu()
        p = Categorical(probs)
        action = p.sample()
        log_prob = p.log_prob(action)
        return action.item(), log_prob