Learning Models For Discrete Optimization