La Programación Lineal (PL) estudia el problema de maximizar (o minimizar) una función lineal, sujeta a un conjunto de restricciones también lineales.
Estas restricciones pueden representarse como desigualdades o igualdades, y determinan una región factible en un espacio vectorial. El principio fundamental de la PL es que, si la región factible es convexa y cerrada, el óptimo —si existe— está en alguno de los vértices de la región, y puede encontrarse con algoritmos polinómicos como el método simplex. Los problemas geométricos asociados a la programación lineal corresponden al estudio de polihedros en muchas dimensiones, estableciendo así una conexión con la geometría discreta.
La programación lineal tiene muchas aplicaciones importantes a problemas prácticos como los problemas de flujo en redes, esenciales para optimizar rutas, gestionar la distribución de recursos y diseñar sistemas de transporte o telecomunicaciones. Otros ejemplos prácticos incluyen la planificación de la producción, la asignación óptima de tareas y el diseño de mezclas de materias primas.
Por otro lado, cuando se requiere que las variables asuman valores enteros, se recurre a la Programación Entera, que extiende los principios de la PL para considerar problemas combinatorios que normalmente son más difíciles computacionalmente.
En este curso, vamos a estudiar Programación Lineal y sus aspectos geométricos, el método simplex, la dualidad, aplicaciones en flujos de redes, optimización combinatoria y Programación Entera.
Nos reunimos los miércoles y viernes a las 8:00 am en el 14-322. Todos están invitados.
Texto Guía
El libro de Bertsimas-Tsitsiklis-Tsitsiklis.
Otras referencias recomendadas
El libro de Papadimitriou-Steiglitz
Notas de Paffenholz
Artículo de Casselman
Clase 1: Intro
Clase 2: Programas lineales, forma estándar, ejemplos
Clase 3: Repaso de álgebra lineal
Clase 4: Repaso de álgebra lineal. Introducción a los poliedros
Clase 5: Geometría de poliedros, extremos, vértices y soluciones básicas posibles.
Clase 6: Geometría de poliedros, extremos de poliedros en forma estándar, degeneración
Clase 7: El algoritmo del simplex I
Clase 8: El algoritmo del simplex I
Clase 9: El algoritmo del simplex III
Clase 10: El algoritmo del simplex IV
Clase 11: Examen
Clase 12: Regla de Bland
Clase 13: Hiperplanos que separan y Lema de Farkas
Clase 14: Dualidad I
Clase15: Dualidad II
Clase: 16: Dualidad III
Clase 17: Dualidad IV
Clase 18: Dualidad V
Clase 19: Gale-Shapley I
Clase 20: Gale-Shapley II
Clase 21: Network flows I
Clase 22: Network flows II: Ford Fulkerson (ver Kleinberg-Tardos)
Clase 23: Network flows III: Ford Fulkerson
Clase 24: Network flows IV: Dijkstra
Clase 25: Network flows V: Minimum spanning Tree
Clase 26: Proyectos
Clase 27: Proyectos
Clase 28: Examen
La evaluación del curso sera así:
Parcial 1 (35%)
El primer parcial será el viernes 23 de Mayo en las horas de clase.
Parcial 2 (35%)
Proyecto (30%)
En el curso vamos a usar la librería de Python Pulp. En este repositorio puede encontrar una introducción:
https://github.com/benalexkeen/Introduction-to-linear-programming
(hay que hacer algunos cambios pequeños para nuevas versiones de Python)
Gale-Shapley linear programming notebook