Nonlinear Programming by Dimitri Bertsekas