Mathematical Programming: Theory and Methods