how to learn mathematical optimization