Advances in Portfolio Selection Under Discrete Choice Constraints: A Mixed-integer Programming Approach and Heuristics