Techniques For Solving Nonlinear Optimal Control Problems