algorithms for optimization pdf github