How to optimize parameters in a specific range in PyTorch?

Here is a toy example:

class Model(nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.p = nn.Parameter(torch.tensor(0.5))

    def forward(self, x):
        y = x * self.p
        return y

model = Model()
optimizer = torch.optim.Adam(model.parameters())
loss_func = torch.nn.MSELoss()
y = torch.tensor([0.1,0.2,0.3])
x = torch.tensor([1.,2.,3.])
model.train()
for i in range(3):
    pred = model(x)
    optimizer.zero_grad()
    loss = loss_func(pred, y)
    loss.backward()
    optimizer.step()

I want to optimize p in a certain range. For example, the value of p must between 0.2 to 0.6 in during training process.