Introduction to linear and nonlinear programming