One of the main difficulties when studying a new subject is figuring out how to apply the recently learned theoretical knowledge on practical situations. It is to prevent this gap that this chapter discusses how to use evolutionary algorithms to solve optimization problems. Its aim is to give the user a clear view of the process of applying evolutionary algorithms to solve an optimization problem. The chapter describes how to solve both single-objective and multi-objective optimization problems, with greater emphasis on the last class of problems, for it is not uncommon for real-world problems to have more than one objective. The chapter also discusses important practical issues such as how to deal with constraints and with noisy objective functions. Each topic discussed is illustrated using known benchmark optimization problems. The presentation is complemented with pseudocode, graphs, and Python code.