Optimization 基于pytorch的边界优化

Optimization 基于pytorch的边界优化,optimization,pytorch,tensor,constraint-programming,Optimization,Pytorch,Tensor,Constraint Programming,在pytorch中使用优化方法时如何包含边界。我有一个变量张量,每个变量有不同的界 upper_bound = torch.tensor([1,5,10], requires_grad=False) lower_bound = torch.tensor([-1,-5,-10], requires_grad=False) X = torch.tensor([10, -60, 105], require_grad=True) for _ in range(100): op

在pytorch中使用优化方法时如何包含边界。我有一个变量张量,每个变量有不同的界

upper_bound = torch.tensor([1,5,10], requires_grad=False)
lower_bound = torch.tensor([-1,-5,-10], requires_grad=False)
X           = torch.tensor([10, -60, 105], require_grad=True)
for _ in range(100):
    optimizer.zero_grad()
    loss = ..    
    loss.backward()
    optimizer.step()
    X[:] = X.clamp(lower_bound, upper_bound)

但是,clamp只使用一个数字。由于每个变量的边界不同,我需要包括上界和下界张量。

梯度下降不是实现约束优化的最佳方法,但在这里,您可以通过以下方式强制约束:

x = ((X-lower_bound).clamp(min=0)+lower_bound-upper_bound).clamp(max=0)+upper_bound
需要两个
夹具
而不是一个,但我找不到任何本机方法来实现这一点