https://www.stats.ox.ac.uk/~lienart/blog_opti_mda.html
A version of Gradient descent to solve Constrained optimization problems, by applying gradient descent, and projecting to the feasible region (only provably works on convex feasible regions (and with convex objective functions of course..))