DiOpt: Self-supervised Diffusion for Constrained Optimization