An Effective Branch-and-Bound Algorithm for Convex Quadratic Integer Programming