Modelling Discrete Optimization Problems