What types of optimization algorithm are available? How do they work?