El curso presenta las nociones teóricas básicas de la programación matemática lineal y no lineal, así como las principales técnicas de resolución. Se comienza con conceptos preliminares sobre conjuntos, convexidad y definiciones de optimalidad, estableciendo una base teórica sólida. Posteriormente, se abordan métodos para resolver problemas de programación lineal mediante técnicas como el método simplex, y se introducen algoritmos de optimización no lineal tanto sin como con restricciones, incluyendo condiciones de optimalidad de Karush-Kuhn-Tucker (KKT) y métodos numéricos avanzados. Finalmente, se exploran problemas de optimización dinámica en sistemas modelados por ecuaciones diferenciales.  Se utilizan herramientas computacionales como Pyomo y CasADi para la resolución práctica de casos aplicados en ingeniería y ciencias.