The course will introduce the basic mathematical concepts necessary to construct algorithms for the solution of optimization problems. The main focus will be on "easy" (constrained or unconstrained, convex, continuous) optimization problems, and their (local) solution algorithms, relevant for applications in Data Science / Machine Learning / Artificial Intelligence, among others, with a view on providing to the students solid methodological foundations useful for the several subsequent courses in these areas. However, the course will also cover some material related to "hard" (mixed-integer, nonconvex) optimization problems, and their (global) solution algorithms, with a view of providing the students with the concept of Prescriptive Analytics as "the final step" of Data Science, and therefore a motivation for the more advanced courses related to optimization.