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.
- ¿Qué podemos aprender de Mahatma Gandhi?
- Tengo 25 años y estoy muy interesado en aprender baile. ¿Qué tengo que hacer?
- Mi cumpleaños es el 19 de mayo. ¿Qué nueva cosa útil puedo aprender para entonces?
- ¿Cuánto tiempo me llevará aprender chino y cómo puedo memorizar todos los caracteres que necesitaré?
- ¿Es el código abierto una buena manera de aprender software?
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.