¿Cuál es la forma más fácil de aprender programación lineal?

La programación lineal NO es un tipo de lenguaje de programación, ni siquiera algo que haces con tu computadora. Es una técnica matemática para resolver ciertos tipos de problemas, similar a cómo encontrar derivados o transformar una matriz son otros tipos de técnicas.

Se llama “programa” porque el concepto se inventó durante la Segunda Guerra Mundial, donde los “programas” eran simplemente algoritmos para resolver problemas, y en este caso, el problema es un problema de optimización. Un programa lineal tiene tres componentes principales: variables, restricciones y objetivos (solo un objetivo, generalmente).

Te daré un ejemplo de un programa lineal, robado de mis notas de clase de la universidad. Hay 168 horas en una semana de 7 días. Estoy en la universidad, así que necesito estudiar, ir de fiesta y comer (voy a Carnegie Mellon, así que no es como si duermo). Quiero comer 3 comidas cuadradas (1 hora cada una) al día, y definitivamente no quiero estudiar más de 14 horas al día (pero cualquier cosa menos que eso es totalmente razonable). Si no estudio al menos 10 horas al día, probablemente suspenderé mis cursos (¡en serio, no entiendes cómo es esta escuela!) Y mi tiempo solo se dedica a estas tres cosas. Digamos también que si hago una fiesta, necesito estudiar aún más para compensarlo (el ejemplo en el que me estoy basando es 2S + E-3P> = 150, es decir, si nunca hago una fiesta, entonces esto nunca es un problema, pero si hago una fiesta, entonces la diferencia ponderada entre el tiempo que dedico a estudiar / comer y el tiempo que dedico a la fiesta tiene que ser bastante significativa).

Entonces, 3 variables: S, P, E.

Muchas restricciones: S + P + E = 168, E> = 21, S> = 70, S = 150, P> = 0

Ahora, ¿puede darme valores para S, P y E, de modo que todas las restricciones sean válidas? Estoy seguro de que puedes, hay muchas respuestas. ¿Pero cuál es la “mejor” respuesta?

Haremos que el tercer componente del programa lineal sea nuestro * objetivo *. ¿Cuál debería ser nuestro objetivo? Tengo 21 años, por lo que mi objetivo será MAXIMIZAR el valor de P. Es decir, estoy interesado en saber, de todas las asignaciones válidas de S, P y E, cuál tiene el valor más alto de P mientras no reviso mis reglas.

Y … eso es todo. Programación lineal en pocas palabras. No tiene absolutamente nada que ver con la programación funcional, la programación orientada a objetos, la programación web o lo que sea. Es solo un problema de optimización matemática.

Si desea * usar * programas lineales para resolver problemas, he oído que Excel puede resolverlos (sí, Microsoft Excel, el software de hoja de cálculo), pero sé que también puede hacerlo en Mathematica, Maple, MATLAB y SAS. La ventaja de hacerlo en Mathematica es que probablemente puedas escribirlo en Wolfram Alpha y resolverlo en tu navegador.

Este libro es ideal para aprender sobre programación lineal: Introducción a la optimización lineal

Los primeros cinco capítulos desarrollan rigurosamente la geometría y el álgebra de la programación lineal, y los capítulos posteriores aplican LP a los problemas de flujo de red y los problemas de programación de enteros.

La única debilidad del texto, en mi opinión, es la falta de discusión sobre las técnicas más avanzadas y los paquetes de software que se utilizan en la práctica.

Si está familiarizado con la programación funcional en Python, puede usar un paquete llamado “PULP” que le permite usar una sintaxis de Python familiar. Quita parte de la ventaja de la sintaxis extraña (al principio) que necesitará si programara (por ejemplo) GLPK o CPLEX

Tengo una publicación en el blog con varios libros [1] con diferentes niveles de rigor, luego hay un curso de Boyd. Estoy aprendiendo haciendo. Lo apliqué a un problema de investigación. También puede intentar responder a las personas en el desbordamiento de pila.

Notas al pie

[1] Colección de libros sobre programación / optimización lineal por Ryan Howe sobre recursos matemáticos