

La programación lineal ( PL ), también llamada optimización lineal , es un método para lograr el mejor resultado (como la máxima ganancia o el menor costo) en un modelo matemático cuyos requisitos y objetivo se representan mediante relaciones lineales . La programación lineal es un caso especial de la programación matemática (también conocida como optimización matemática ).
Formalmente, la programación lineal es una técnica para la optimización de una función objetivo lineal , sujeta a restricciones de igualdad y desigualdad lineales . Su región factible es un politopo convexo , que es un conjunto definido como la intersección de un número finito de semiplanos , cada uno de los cuales está definido por una desigualdad lineal . Su función objetivo es una función afín (lineal) de valores reales definida en este politopo. Un algoritmo de programación lineal encuentra un punto en el politopo donde esta función tiene el valor máximo (o mínimo), si dicho punto existe.
Los programas lineales son problemas que pueden expresarse en forma estándar como:
Aquí los componentes deson las variables a determinar,yse dan vectores , yes una matriz dada . La función cuyo valor debe maximizarse (en este caso) se denomina función objetivo . Las restriccionesyEspecificar un politopo convexo sobre el cual se optimizará la función objetivo.
La programación lineal se puede aplicar a diversos campos de estudio. Se utiliza ampliamente en matemáticas y, en menor medida, en negocios, economía y algunos problemas de ingeniería. Existe una estrecha relación entre los programas lineales, las ecuaciones de autovalores, el modelo de equilibrio general de John von Neumann y los modelos de equilibrio estructural (véase el programa lineal dual para más detalles). [ 1 ] [ 2 ] [ 3 ] Entre las industrias que utilizan modelos de programación lineal se incluyen el transporte, la energía, las telecomunicaciones y la manufactura. Ha demostrado ser útil para modelar diversos tipos de problemas en planificación , enrutamiento , programación , asignación y diseño.
Historia


El problema de resolver un sistema de desigualdades lineales se remonta al menos a Fourier , quien en 1827 publicó un método para resolverlas, [ 4 ] y de quien toma su nombre el método de eliminación de Fourier-Motzkin .
A finales de la década de 1930, el matemático soviético Leonid Kantorovich y el economista estadounidense Wassily Leontief investigaron de forma independiente las aplicaciones prácticas de la programación lineal. Kantorovich se centró en la planificación de la producción, mientras que Leontief exploró sus aplicaciones económicas. Su innovador trabajo pasó prácticamente desapercibido durante décadas.
El punto de inflexión se produjo durante la Segunda Guerra Mundial, cuando la programación lineal se consolidó como una herramienta fundamental. Su uso se extendió a la resolución de complejos desafíos bélicos, como la logística del transporte, la planificación y la asignación de recursos. La programación lineal demostró ser invaluable para optimizar estos procesos, teniendo en cuenta restricciones críticas como los costos y la disponibilidad de recursos.
A pesar de su inicial desconocimiento, los éxitos obtenidos durante la guerra impulsaron la programación lineal a la palestra. Tras la Segunda Guerra Mundial, el método alcanzó un amplio reconocimiento y se convirtió en una piedra angular en diversos campos, desde la investigación operativa hasta la economía. Las contribuciones, a menudo ignoradas, de Kantorovich y Leontief a finales de la década de 1930 resultaron fundamentales para la mayor aceptación y utilización de la programación lineal en la optimización de los procesos de toma de decisiones. [ 5 ]
El trabajo de Kantorovich fue inicialmente ignorado en la URSS . [ 6 ] Casi al mismo tiempo que Kantorovich, el economista neerlandés-estadounidense TC Koopmans formuló problemas económicos clásicos como programas lineales. Kantorovich y Koopmans compartieron posteriormente el Premio Nobel de Economía de 1975. [ 4 ] En 1941, Frank Lauren Hitchcock también formuló problemas de transporte como programas lineales y dio una solución muy similar al posterior método simplex . [ 7 ] Hitchcock había fallecido en 1957, y el Premio Nobel no se otorga póstumamente.
De 1946 a 1947, George B. Dantzig desarrolló de forma independiente una formulación general de programación lineal para su uso en problemas de planificación en la Fuerza Aérea de los Estados Unidos. [ 8 ] En 1947, Dantzig también inventó el método simplex que, por primera vez, abordó eficientemente el problema de programación lineal en la mayoría de los casos. [ 8 ] Cuando Dantzig organizó una reunión con John von Neumann para discutir su método simplex, von Neumann inmediatamente conjeturó la teoría de la dualidad al darse cuenta de que el problema en el que había estado trabajando en teoría de juegos era equivalente. [ 8 ] Dantzig proporcionó una prueba formal en un informe inédito titulado "Un teorema sobre desigualdades lineales" el 5 de enero de 1948. [ 6 ] El trabajo de Dantzig se puso a disposición del público en 1951. En los años de la posguerra, muchas industrias lo aplicaron en su planificación diaria.
El ejemplo original de Dantzig consistía en encontrar la mejor asignación de 70 personas a 70 puestos de trabajo. La capacidad de cálculo necesaria para probar todas las permutaciones y seleccionar la mejor asignación es enorme; el número de configuraciones posibles supera el número de partículas en el universo observable . Sin embargo, basta con un instante para encontrar la solución óptima planteando el problema como un programa lineal y aplicando el algoritmo simplex . La teoría de la programación lineal reduce drásticamente el número de soluciones posibles que deben comprobarse.
Leonid Khachiyan demostró por primera vez en 1979 que el problema de programación lineal podía resolverse en tiempo polinomial, [ 9 ] pero un avance teórico y práctico más significativo en este campo se produjo en 1984, cuando Narendra Karmarkar introdujo un nuevo método de punto interior para resolver problemas de programación lineal. [ 10 ]
Usos
La programación lineal es un campo de optimización ampliamente utilizado por varias razones. Muchos problemas prácticos en la investigación operativa pueden expresarse como problemas de programación lineal. [ 6 ] Ciertos casos especiales de programación lineal, como los problemas de flujo de red y los problemas de flujo de múltiples mercancías , se consideran lo suficientemente importantes como para que exista mucha investigación sobre algoritmos especializados. Varios algoritmos para otros tipos de problemas de optimización funcionan resolviendo problemas de programación lineal como subproblemas. Históricamente, las ideas de la programación lineal han inspirado muchos de los conceptos centrales de la teoría de la optimización, como la dualidad, la descomposición y la importancia de la convexidad y sus generalizaciones. Asimismo, la programación lineal se utilizó ampliamente en la formación inicial de la microeconomía y actualmente se utiliza en la gestión empresarial, por ejemplo, en la planificación, la producción, el transporte y la tecnología. Aunque los problemas de gestión modernos están en constante cambio, la mayoría de las empresas buscan maximizar las ganancias y minimizar los costos con recursos limitados. Google también utiliza la programación lineal para estabilizar los videos de YouTube. [ 11 ]
Formato estándar
La forma estándar es la forma habitual y más intuitiva de describir un problema de programación lineal. Consta de las siguientes tres partes:
- Una función lineal (o afín) que se desea maximizar.
- p.ej
- Restricciones del problema de la siguiente forma
- p.ej
- Variables no negativas
- p.ej
El problema se suele expresar en forma matricial y, por lo tanto, queda así:
Otras formas, como los problemas de minimización, los problemas con restricciones en formas alternativas y los problemas que involucran variables negativas , siempre se pueden reescribir como un problema equivalente en forma estándar.
Ejemplo

Supongamos que un agricultor tiene una parcela de tierra agrícola, digamos L hectáreas , para sembrar trigo, cebada o una combinación de ambos. El agricultor dispone de F kilogramos de fertilizante y P kilogramos de pesticida. Cada hectárea de trigo requiere F1 kilogramos de fertilizante y P1 kilogramos de pesticida, mientras que cada hectárea de cebada requiere F2 kilogramos de fertilizante y P2 kilogramos de pesticida. Sea S1 el precio de venta del trigo y S2 el precio de venta de la cebada por hectárea. Si denotamos la superficie sembrada con trigo y cebada por x1 y x2 respectivamente , entonces el beneficio se puede maximizar eligiendo valores óptimos para x1 y x2 . Este problema se puede expresar con el siguiente problema de programación lineal en su forma estándar :
En forma matricial, esto se convierte en:
- maximizar
- sujeto a
Forma aumentada (forma holgada)
Los problemas de programación lineal se pueden convertir a una forma aumentada para aplicar la forma común del algoritmo simplex . Esta forma introduce variables de holgura no negativas para reemplazar las desigualdades por igualdades en las restricciones. Los problemas se pueden escribir entonces en la siguiente forma de matriz de bloques :
- Maximizar:
dóndeson las variables de holgura recientemente introducidas,son las variables de decisión, yes la variable que se va a maximizar.
Ejemplo
El ejemplo anterior se convierte en la siguiente forma aumentada:
dóndeson variables de holgura (no negativas), que representan en este ejemplo el área no utilizada, la cantidad de fertilizante no utilizado y la cantidad de pesticida no utilizado.
En forma matricial, esto se convierte en:
- Maximizar:
Dualidad
Todo problema de programación lineal, denominado problema primal , puede convertirse en un problema dual , que proporciona una cota superior para el valor óptimo del problema primal. En forma matricial, podemos expresar el problema primal como:
- Maximizar c T x sujeto a A x ≤ b , x ≥ 0;
- con el problema dual simétrico correspondiente,
- Minimizar b T y sujeto a A T y ≥ c , y ≥ 0.
Una formulación primal alternativa es:
- Maximizar c T x sujeto a A x ≤ b ;
- con el problema dual asimétrico correspondiente,
- Minimizar b T y sujeto a A T y = c , y ≥ 0.
Una idea fundamental de la teoría de la dualidad es el hecho de que (para el dual simétrico) el dual de un programa lineal dual es el programa lineal primal original.
Las variables dualespueden entenderse como coeficientes en una combinación lineal de desigualdades del problema primal, formadas con la esperanza de obtener una cota para la función objetivo. Dichos coeficientes deben ser no negativos, ya que de lo contrario las desigualdades se invertirían, de donde requerimos. Si ademásEntonces se deduce que es decir, el valor de la función objetivo dualen cualquier punto dual factiblees un límite superior para el valor de la función objetivo primalen cualquier punto primigenio factible. Este es el principio de dualidad débil . El teorema de dualidad fuerte establece que esta cota es de hecho ajustada: si el primal tiene una solución óptima, x * , entonces el dual también tiene una solución óptima, y * , y c T x * = b T y * .
Un programa lineal también puede ser no acotado o infactible. La teoría de la dualidad establece que si el problema primal no está acotado, entonces el dual es infactible según el teorema de dualidad débil. Del mismo modo, si el dual no está acotado, entonces el primal debe ser infactible. Sin embargo, es posible que tanto el dual como el primal sean infactibles. Consulte el apartado de programación lineal dual para obtener más detalles y varios ejemplos adicionales.
Dualidades de recubrimiento/embalaje
Un programa lineal de cobertura es un programa lineal de la forma:
- Minimizar: b T y ,
- sujeto a: A T y ≥ c , y ≥ 0 ,
de tal manera que la matriz A y los vectores b y c sean no negativos.
El dual de un LP de recubrimiento es un LP de empaquetamiento , un programa lineal de la forma:
- Maximizar: c T x ,
- sujeto a: A x ≤ b , x ≥ 0 ,
de tal manera que la matriz A y los vectores b y c sean no negativos.
Ejemplos
Los problemas de programación lineal (PL) de cobertura y empaquetamiento suelen surgir como una relajación de programación lineal de un problema combinatorio y son importantes en el estudio de algoritmos de aproximación . [ 12 ] Por ejemplo, las relajaciones de PL del problema de empaquetamiento de conjuntos , el problema de conjuntos independientes y el problema de emparejamiento son PL de empaquetamiento. Las relajaciones de PL del problema de cobertura de conjuntos , el problema de cobertura de vértices y el problema de conjunto dominante también son PL de cobertura.
Encontrar una coloración fraccionaria de un grafo es otro ejemplo de un problema de programación lineal de cobertura. En este caso, hay una restricción para cada vértice del grafo y una variable para cada conjunto independiente del mismo.
Holgura complementaria
Es posible obtener una solución óptima para el problema dual cuando solo se conoce una solución óptima para el problema primal utilizando el teorema de holgura complementaria. El teorema establece:
Supongamos que x = ( x 1 , x 2 , ... , x n ) es factible primalmente y que y = ( y 1 , y 2 , ... , y m ) es factible dualmente. Sean ( w 1 , w 2 , ..., w m ) las variables de holgura primales correspondientes, y sean ( z 1 , z 2 , ... , z n ) las variables de holgura duales correspondientes. Entonces x e y son óptimos para sus respectivos problemas si y solo si
- x j z j = 0, para j = 1, 2, ... , n y
- w i y i = 0, para i = 1, 2, ... , m .
Así, si la i -ésima variable de holgura del problema primal no es cero, entonces la i -ésima variable del problema dual es igual a cero. Del mismo modo, si la j -ésima variable de holgura del problema dual no es cero, entonces la j -ésima variable del problema primal es igual a cero.
Esta condición necesaria para la optimalidad transmite un principio económico bastante simple. En su forma estándar (al maximizar), si existe holgura en un recurso primario restringido (es decir, hay "sobrantes"), entonces las cantidades adicionales de ese recurso no deben tener valor. Del mismo modo, si existe holgura en el requisito de no negatividad del precio dual (o sombra), es decir, el precio no es cero, entonces debe haber escasez de suministros (no hay "sobrantes").
Teoría
Existencia de soluciones óptimas
Geométricamente, las restricciones lineales definen la región factible , que es un politopo convexo . Una función lineal es una función convexa , lo que implica que cada mínimo local es un mínimo global ; de manera similar, una función lineal es una función cóncava , lo que implica que cada máximo local es un máximo global .
No es necesario que exista una solución óptima, por dos razones. Primero, si las restricciones son inconsistentes, no existe una solución factible: por ejemplo, las restricciones x ≥ 2 y x ≤ 1 no pueden satisfacerse simultáneamente; en este caso, decimos que el problema de programación lineal es infactible . Segundo, cuando el politopo no está acotado en la dirección del gradiente de la función objetivo (donde el gradiente de la función objetivo es el vector de sus coeficientes), no se alcanza ningún valor óptimo, ya que siempre es posible obtener un resultado mejor que cualquier valor finito de la función objetivo.
Vértices (y rayos) óptimos de poliedros
De lo contrario, si existe una solución factible y el conjunto de restricciones está acotado, entonces el valor óptimo siempre se alcanza en el límite del conjunto de restricciones, por el principio del máximo para funciones convexas (o por el principio del mínimo para funciones cóncavas ), ya que las funciones lineales son tanto convexas como cóncavas. Sin embargo, algunos problemas tienen soluciones óptimas distintas; por ejemplo, el problema de encontrar una solución factible para un sistema de desigualdades lineales es un problema de programación lineal en el que la función objetivo es la función cero (es decir, la función constante que toma el valor cero en todo el dominio). Para este problema de factibilidad con la función cero como función objetivo, si hay dos soluciones distintas, entonces cualquier combinación convexa de las soluciones es una solución.
Los vértices del politopo también se denominan soluciones factibles básicas . La razón de esta denominación es la siguiente: sea d el número de variables. Entonces, el teorema fundamental de las desigualdades lineales implica (para problemas factibles) que para cada vértice x * de la región factible del problema de programación lineal (PL), existe un conjunto de d (o menos) restricciones de desigualdad del PL tales que, al tratar dichas d restricciones como igualdades, la solución única es x * . De este modo, podemos estudiar estos vértices analizando ciertos subconjuntos del conjunto de todas las restricciones (un conjunto discreto), en lugar del continuo de soluciones del PL. Este principio subyace al algoritmo simplex para la resolución de programas lineales.
Algoritmos

Algoritmos de intercambio de bases
Algoritmo simplex de Dantzig
El algoritmo simplex , desarrollado por George Dantzig en 1947, resuelve problemas de programación lineal construyendo una solución factible en un vértice del politopo y luego recorriendo un camino en las aristas del politopo hasta vértices con valores no decrecientes de la función objetivo hasta alcanzar un óptimo con seguridad. En muchos problemas prácticos, se produce un " estancamiento ": se realizan muchos pivotes sin que aumente la función objetivo. [ 13 ] [ 14 ] En raras ocasiones, las versiones habituales del algoritmo simplex pueden entrar en ciclos. [ 14 ] Para evitar los ciclos, los investigadores desarrollaron nuevas reglas de pivoteo. [ 15 ]
En la práctica, el algoritmo simplex es bastante eficiente y se puede garantizar que encuentre el óptimo global si se toman ciertas precauciones para evitar ciclos . Se ha demostrado que el algoritmo simplex resuelve problemas "aleatorios" de manera eficiente, es decir, en un número cúbico de pasos, [ 16 ] lo cual es similar a su comportamiento en problemas prácticos. [ 13 ] [ 17 ]
Sin embargo, el algoritmo simplex tiene un comportamiento deficiente en el peor de los casos: Klee y Minty construyeron una familia de problemas de programación lineal para los cuales el método simplex toma un número de pasos exponencial en el tamaño del problema. [ 13 ] [ 18 ] [ 19 ] De hecho, durante algún tiempo no se supo si el problema de programación lineal era resoluble en tiempo polinomial , es decir, de clase de complejidad P.
Algoritmo entrecruzado
Al igual que el algoritmo simplex de Dantzig, el algoritmo criss-cross es un algoritmo de intercambio de bases que pivota entre bases. Sin embargo, el algoritmo criss-cross no necesita mantener la factibilidad, sino que puede pivotar de una base factible a una base infactible. El algoritmo criss-cross no tiene una complejidad temporal polinómica para la programación lineal. Ambos algoritmos visitan todos los vértices 2D de un cubo (perturbado) en dimensión D , el cubo de Klee-Minty , en el peor de los casos . [ 15 ] [ 20 ]
Algoritmo elipsoide, siguiendo a Khachiyan
Este es el primer algoritmo de tiempo polinomial en el peor de los casos jamás encontrado para programación lineal. Para resolver un problema que tiene n variables y puede codificarse en L bits de entrada, este algoritmo se ejecuta entiempo. [ 9 ] Leonid Khachiyan resolvió este problema de complejidad de larga data en 1979 con la introducción del método del elipsoide . El análisis de convergencia tiene predecesores (de números reales), en particular los métodos iterativos desarrollados por Naum Z. Shor y los algoritmos de aproximación de Arkadi Nemirovski y D. Yudin.
El problema resuelto de forma nativa por el método del elipsoide no es un programa lineal 'maximizar'dado', sino más bien el problema de viabilidad 'determinar si el politopoes no vacío'. Para resolver programas lineales utilizando pruebas de factibilidad, primero se comprueba si el problema primales factible (si no, entonces no hay solución), y en segundo lugar comprueba si el problema duales factible (de lo contrario, el problema primal no tiene límites y no existe un máximo). Finalmente, el óptimo buscado se obtiene del problema primal-dual.Se utilizan más pruebas de viabilidad para eliminar o convertir en ecuaciones todas las desigualdades de ese sistema, después de lo cual se encuentra la solución resolviendo un sistema de ecuaciones lineales.
La idea del método del elipsoide es encerrar la región factible en una secuencia de elipsoides de volumen decreciente. En cada iteración, se comprueba si el punto medio del elipsoide es factible; si lo es, la respuesta a la pregunta de factibilidad es "sí". De lo contrario, sabemos que la región factible está contenida en una mitad específica del elipsoide, por lo que buscamos un elipsoide más pequeño que la encierre únicamente, y repetimos el proceso. En el algoritmo de Khachiyan, existe una cota inferior conocida para el volumen de una región factible no vacía , lo que se traduce en una cota superior polinómica para el número de iteraciones necesarias antes de que la respuesta sea "no". Los elipsoides no están contenidos entre sí, solo disminuyen sus volúmenes.
Punto interior
El algoritmo de Khachiyan fue fundamental para establecer la resolubilidad en tiempo polinomial de los programas lineales. Si bien no representó un avance computacional revolucionario, ya que el método simplex es más eficiente para todos los programas lineales, salvo para familias especialmente diseñadas, el algoritmo de Khachiyan inspiró nuevas líneas de investigación en programación lineal.
A diferencia del algoritmo simplex, que encuentra una solución óptima recorriendo las aristas entre los vértices de un conjunto poliédrico, los métodos de punto interior se mueven a través del interior de la región factible.
Algoritmo proyectivo de Karmarkar
En 1984, N. Karmarkar propuso un método proyectivo para la programación lineal. El algoritmo de Karmarkar [ 10 ] mejoró la cota polinómica del peor caso de Khachiyan [ 9 ] (dandoKarmarkar afirmó que su algoritmo era mucho más rápido en la programación lineal práctica que el método simplex, una afirmación que generó gran interés en los métodos de punto interior. [ 21 ] Desde el descubrimiento de Karmarkar, se han propuesto y analizado muchos métodos de punto interior.
El algoritmo 87 de Vaidya
En 1987, Vaidya propuso un algoritmo que se ejecuta entiempo. [ 22 ]
El algoritmo 89 de Vaidya
En 1989, Vaidya desarrolló un algoritmo que se ejecuta entiempo con el uso de algoritmos rápidos de multiplicación de matrices . [ 23 ] Formalmente hablando, el algoritmo tomaoperaciones aritméticas en el peor de los casos, dondees el número de restricciones,es el número de variables, yes el número de bits.
Algoritmos de tiempo de escasez de entrada
En 2015, Lee y Sidford demostraron que la programación lineal se puede resolver entiempo, [ 24 ] dondedenota la notación O suave yrepresenta el número de elementos distintos de cero, y sigue tomandoen el peor de los casos.
Algoritmo de tiempo de multiplicación de matrices actual
En 2019, Cohen, Lee y Song mejoraron el tiempo de carrera atiempo,es el exponente de la multiplicación de matrices yes el exponente dual de la multiplicación de matrices. [ 25 ]se define (aproximadamente) como el número más grande tal que se puede multiplicar unmatriz por unamatriz entiempo. En un trabajo posterior de Lee, Song y Zhang, reproducen el mismo resultado mediante un método diferente. [ 26 ] Estos dos algoritmos permanecencuandoyEl resultado debido a Jiang, Song, Weinstein y Zhang mejoróa. [ 27 ]
Comparación de métodos de punto interior y algoritmos simplex
La opinión generalizada es que la eficiencia de las buenas implementaciones de métodos basados en el simplex y de métodos de punto interior es similar para aplicaciones rutinarias de programación lineal. Sin embargo, para tipos específicos de problemas de programación lineal, puede ser que un tipo de solucionador sea mejor que otro (a veces mucho mejor), y que la estructura de las soluciones generadas por los métodos de punto interior y los métodos basados en el simplex sea significativamente diferente, siendo el conjunto de soporte de variables activas generalmente menor para estos últimos. [ 28 ]
Problemas abiertos y trabajos recientes
Existen varios problemas abiertos en la teoría de la programación lineal, cuya solución representaría avances fundamentales en matemáticas y, potencialmente, grandes progresos en nuestra capacidad para resolver programas lineales a gran escala.
- ¿Admite la programación lineal un algoritmo de tiempo fuertemente polinomial ?
- ¿Admite la programación lineal un algoritmo de tiempo fuertemente polinomial para encontrar una solución estrictamente complementaria?
- ¿Admite la programación lineal un algoritmo de tiempo polinomial en el modelo de computación de números reales (coste unitario)?
Este conjunto de problemas estrechamente relacionados ha sido citado por Stephen Smale como uno de los 18 mayores problemas sin resolver del siglo XXI. En palabras de Smale, la tercera versión del problema "es el principal problema sin resolver de la teoría de la programación lineal". Si bien existen algoritmos para resolver la programación lineal en tiempo débilmente polinomial , como los métodos elipsoidales y las técnicas de punto interior , aún no se han encontrado algoritmos que permitan un rendimiento en tiempo fuertemente polinomial en cuanto al número de restricciones y el número de variables. El desarrollo de tales algoritmos sería de gran interés teórico y, quizás, también permitiría obtener ventajas prácticas en la resolución de grandes problemas de programación lineal.
Aunque la conjetura de Hirsch fue refutada recientemente para dimensiones superiores, aún deja abiertas las siguientes preguntas.
- ¿Existen reglas de pivote que den lugar a variantes del simplex de tiempo polinomial?
- ¿Todos los grafos politópicos tienen un diámetro acotado polinómicamente?
Estas preguntas se refieren al análisis del rendimiento y al desarrollo de métodos tipo simplex. La enorme eficiencia del algoritmo simplex en la práctica, a pesar de su rendimiento teórico exponencial, sugiere que podrían existir variantes que se ejecuten en tiempo polinomial o incluso fuertemente polinomial. Sería de gran importancia práctica y teórica saber si existen tales variantes, especialmente como método para determinar si la programación lineal puede resolverse en tiempo fuertemente polinomial.
El algoritmo simplex y sus variantes pertenecen a la familia de algoritmos de seguimiento de aristas, llamados así porque resuelven problemas de programación lineal moviéndose de vértice a vértice a lo largo de las aristas de un politopo. Esto significa que su rendimiento teórico está limitado por el número máximo de aristas entre dos vértices cualesquiera del politopo LP. Por consiguiente, nos interesa conocer el diámetro máximo teórico de grafos de los grafos politópicos . Se ha demostrado que todos los politopos tienen un diámetro subexponencial. La reciente refutación de la conjetura de Hirsch es el primer paso para demostrar si algún politopo tiene un diámetro superpolinomial. Si existen tales politopos, entonces ninguna variante de seguimiento de aristas puede ejecutarse en tiempo polinomial. Las cuestiones sobre el diámetro de los politopos tienen un interés matemático independiente.
Los métodos de pivote simplex preservan la factibilidad primal (o dual). Por otro lado, los métodos de pivote cruzado no preservan la factibilidad (primal o dual) ; pueden visitar bases primal factibles, duales factibles o primal y dual infactibles en cualquier orden. Los métodos de pivote de este tipo se han estudiado desde la década de 1970. [ 29 ] Esencialmente, estos métodos intentan encontrar la ruta de pivote más corta en el politopo de arreglo bajo el problema de programación lineal. A diferencia de los grafos politópicos, se sabe que los grafos de politopos de arreglo tienen un diámetro pequeño, lo que permite la posibilidad de un algoritmo de pivote cruzado de tiempo fuertemente polinomial sin resolver cuestiones sobre el diámetro de los politopos generales. [ 15 ]
Números enteros desconocidos
Si todas las variables desconocidas deben ser números enteros, el problema se denomina programación entera (PI) o programación lineal entera (PLI). A diferencia de la programación lineal, que puede resolverse eficientemente en el peor de los casos, los problemas de programación entera son, en muchas situaciones prácticas (aquellas con variables acotadas), NP-difíciles . La programación entera 0-1 o programación entera binaria (PIB) es un caso especial de programación entera donde las variables deben ser 0 o 1 (en lugar de enteros arbitrarios). Este problema también se clasifica como NP-difícil, y de hecho, la versión de decisión fue uno de los 21 problemas NP-completos de Karp .
Si solo algunas de las variables desconocidas deben ser números enteros, el problema se denomina programación lineal entera mixta (MIP o MILP). Estos problemas suelen ser NP-difíciles, ya que son aún más generales que los programas de programación lineal entera (ILP).
Sin embargo, existen algunas subclases importantes de problemas de programación entera y programación entera mixta que se pueden resolver de manera eficiente, sobre todo los problemas en los que la matriz de restricciones es totalmente unimodular y los lados derechos de las restricciones son enteros o, de forma más general, en los que el sistema tiene la propiedad de integralidad dual total (TDI).
Los algoritmos avanzados para resolver programas lineales enteros incluyen:
- método del plano de corte
- Ramificar y enlazar
- Rama y corte
- Sucursal y precio
- Si el problema tiene alguna estructura adicional, puede ser posible aplicar la generación diferida de columnas .
Padberg y Beasley analizan este tipo de algoritmos de programación entera .
programas lineales integrales
Se dice que un programa lineal en variables reales es integral si tiene al menos una solución óptima que es integral, es decir, formada únicamente por valores enteros ( que no debe confundirse con integrales ). Del mismo modo, un poliedroSe dice que es integral si para todas las funciones objetivo factibles acotadas c , el programa linealtiene un óptimocon coordenadas enteras. Como observaron Edmonds y Giles en 1977, se puede decir equivalentemente que el poliedroes integral si para cada función objetivo integral factible acotada c , el valor óptimo del programa lineales un número entero.
Los programas lineales integrales son de vital importancia en el aspecto poliédrico de la optimización combinatoria, ya que proporcionan una caracterización alternativa de un problema. Específicamente, para cualquier problema, la envoltura convexa de las soluciones es un poliedro integral; si este poliedro tiene una descripción adecuada y compacta, podemos encontrar eficientemente la solución factible óptima bajo cualquier objetivo lineal. A la inversa, si podemos demostrar que una relajación de programación lineal es integral, entonces constituye la descripción deseada de la envoltura convexa de las soluciones factibles (integrales).
La terminología no es consistente en toda la literatura, por lo que se debe tener cuidado al distinguir los dos conceptos siguientes:
- En un programa lineal entero, descrito en la sección anterior, las variables están restringidas forzosamente a ser números enteros, y este problema es NP-difícil en general.
- En un programa lineal integral, descrito en esta sección, las variables no están restringidas a ser números enteros, sino que se ha demostrado de alguna manera que el problema continuo siempre tiene un valor óptimo entero (suponiendo que c es entero), y este valor óptimo se puede encontrar de manera eficiente ya que todos los programas lineales de tamaño polinomial se pueden resolver en tiempo polinomial.
Una forma común de demostrar que un poliedro es integral es mostrar que es totalmente unimodular . Existen otros métodos generales, como la propiedad de descomposición entera y la integralidad dual total . Otros problemas de programación lineal integrales bien conocidos incluyen el politopo de emparejamiento, los poliedros reticulares, los poliedros de flujo submodulares y la intersección de dos polimatroides generalizados/ g -polimatroides (véase, por ejemplo, Schrijver, 2003).
Solucionadores y lenguajes de programación (scripting)
Licencias Copyleft (recíprocas) :
MINTO (Mixed Integer Optimizer, un solucionador de programación entera que utiliza el algoritmo de ramificación y acotación) tiene código fuente disponible públicamente [ 33 ] pero no es de código abierto.
Véase también
- Programación convexa – Subcampo de la optimización matemática Páginas que muestran breves descripciones de destinos de redireccionamiento
- Programación dinámica : método de optimización de problemas
- Déficit previsto § Optimización del déficit previsto
- Modelo de insumo-producto – Modelo económico cuantitativo
- Programación de talleres de producción : problema de optimización. Páginas que muestran descripciones breves de los destinos de redireccionamiento.
- Mínimas desviaciones absolutas : criterio de optimalidad estadística
- Análisis espectral por mínimos cuadrados : método de cálculo de periodicidad
- Álgebra lineal – Rama de las matemáticas
- Juego de producción lineal
- Programación lineal fraccionaria (PLF) – Concepto en optimización matemática Páginas que muestran breves descripciones de destinos de redirección
- Problema de tipo LP
- Programación matemática : estudio de algoritmos matemáticos para problemas de optimización. Páginas que muestran breves descripciones de destinos de redirección.
- Programación no lineal : proceso de solución para algunos problemas de optimización.
- Algoritmo de probabilidades : método para calcular estrategias óptimas para problemas de último éxito.
- Matroide orientado : abstracción del álgebra lineal ordenada
- Programación cuadrática : resolución de un problema de optimización con una función objetivo cuadrática.
- Programación semidefinida : subcampo de la optimización convexa.
- Precio sombra – Término en economía
- Algoritmo simplex – Algoritmo para programación lineal
Notas
- ↑ von Neumann, J. (1945). "Un modelo de equilibrio económico general". The Review of Economic Studies . 13 (1): 1– 9. Bibcode : 1945RvES...13....1N . doi : 10.2307/2296111 . JSTOR 2296111 .
- ↑ Kemeny, JG ; Morgenstern, O. ; Thompson, GL (1956). "Una generalización del modelo de von Neumann de una economía en expansión". Econometrica . 24 (2): 115– 135. doi : 10.2307/1905746 . JSTOR 1905746 .
- ↑ Li, Wu (2019). Equilibrio general y dinámica estructural: perspectivas de la nueva economía estructural (en chino). Pekín: Economic Science Press. pp. 122–125 . ISBN 978-7-5218-0422-5.
- ^ Gerard Sierksma; Yori Zwols (2015). Optimización lineal y entera: teoría y práctica (3ª ed.). Prensa CRC. pag. 1.ISBN 978-1498710169.
- ↑ "Programación lineal | Definición y hechos | Britannica" . www.britannica.com . Consultado el 20 de noviembre de 2023 .
- 1 2 3 George B. Dantzig (abril de 1982). «Reminiscencias sobre los orígenes de la programación lineal» (PDF) . Operations Research Letters . 1 (2): 43– 48. doi : 10.1016/0167-6377(82)90043-8 . Archivado del original el 20 de mayo de 2015.
- ↑ Alejandro Schrijver (1998). Teoría de la Programación Lineal y Entera . John Wiley e hijos. págs. 221-222 . ISBN 978-0-471-98232-6.
- 1 2 3 Dantzig, George B.; Thapa, Mukund Narain (1997). Programación lineal . Nueva York: Springer. pág. xxvii. ISBN 0387948333OCLC 35318475
- ^ Leonid Khachiyan (1979) . "Un algoritmo polinomial para programación lineal". Doklady Akademii Nauk SSSR . 224 (5): 1093-1096 .
- 1 2 Narendra Karmarkar (1984). "Un nuevo algoritmo de tiempo polinomial para programación lineal". Combinatorica . 4 (4): 373– 395. doi : 10.1007/BF02579150 . S2CID 7257867 .
- ↑ M. Grundmann; V. Kwatra; I. Essa (2011). "Estabilización de vídeo autodirigida con trayectorias de cámara óptimas L1 robustas". CVPR 2011 (PDF) . págs. 225–232 . doi : 10.1109/CVPR.2011.5995525 . ISBN 978-1-4577-0394-2. S2CID 17707171 .
- ↑ Vazirani (2001 , p. 112)
- 1 2 3 Dantzig y Thapa (2003)
- 1 2 Padberg (1999)
- 1 2 3 Fukuda, Komei ; Terlaky, Tamás (1997). Thomas M. Liebling; Dominique de Werra (eds.). " Métodos cruzados: una nueva perspectiva sobre los algoritmos de pivote". Mathematical Programming, Series B. 79 ( 1–3 ) : 369–395 . CiteSeerX 10.1.1.36.9373 . doi : 10.1007/BF02614325 . MR 1464775. S2CID 2794181 .
- ↑ Borgwardt (1987)
- ↑ Todd (2002)
- ↑ Murty (1983)
- ↑ Papadimitriou y Steiglitz
- ↑ Roos, C. (1990). "Un ejemplo exponencial para la regla de pivoteo de Terlaky para el método simplex entrecruzado". Mathematical Programming . Serie A. 46 (1): 79– 84. doi : 10.1007/BF01585729 . MR 1045573 . S2CID 33463483 .
- ↑ Strang, Gilbert (1 de junio de 1987). " El algoritmo de Karmarkar y su lugar en las matemáticas aplicadas". The Mathematical Intelligencer . 9 (2): 4– 10. doi : 10.1007/BF03025891 . ISSN 0343-6993 . MR 0883185. S2CID 123541868 .
- ↑ Vaidya, Pravin M. (1987). Un algoritmo para programación lineal que requiereOperaciones aritméticas . 28º Simposio Anual del IEEE sobre Fundamentos de la Informática. FOCS.
- ↑ Vaidya, Pravin M. (1989). "Aceleración de la programación lineal mediante la multiplicación rápida de matrices". 30.º Simposio Anual sobre Fundamentos de la Informática . 30.º Simposio Anual sobre Fundamentos de la Informática. FOCS. págs. 332–337 . doi : 10.1109/SFCS.1989.63499 . ISBN 0-8186-1982-1.
- ↑ Lee, Yin-Tat; Sidford, Aaron (2015). Mantenimiento inverso eficiente y algoritmos más rápidos para programación lineal . FOCS '15 Foundations of Computer Science. arXiv : 1503.01752 .
- ↑ Cohen, Michael B.; Lee, Yin-Tat; Song, Zhao (2018). Solving Linear Programs in the Current Matrix Multiplication Time . 51st Annual ACM Symposium on the Theory of Computing. STOC'19. arXiv : 1810.07896 .
- ↑ Lee, Yin-Tat; Song, Zhao; Zhang, Qiuyi (2019). Resolución de la minimización del riesgo empírico en el tiempo de multiplicación de matrices actual . Conferencia sobre teoría del aprendizaje. COLT'19. arXiv : 1905.04447 .
- ^ Jiang, Shunhua; Canción, Zhao; Weinstein, Omri; Zhang, Hengjie (2020). "Matriz dinámica inversa más rápida para LP más rápidos" . arXiv : 2004.07470 .
- ↑ Illés, Tibor; Terlaky, Tamás (2002). "Métodos de pivote versus punto interior: pros y contras" . Revista europea de investigación operativa . 140 (2): 170. CiteSeerX 10.1.1.646.3539 . doi : 10.1016/S0377-2217(02)00061-9 .
- ↑ Anstreicher, Kurt M.; Terlaky, Tamás (1994). "Un algoritmo simplex de acumulación monótona para programación lineal" . Operations Research . 42 (3): 556– 561. doi : 10.1287/opre.42.3.556 . ISSN 0030-364X . JSTOR 171894 .
- ↑ "Guía de referencia de lp_solve (5.5.2.5)" . mit.edu . Consultado el 10 de agosto de 2023 .
- ↑ "Interfaces de lenguaje externo" . Consultado el 3 de diciembre de 2021 .
- ↑ "comando lp_solve" . Consultado el 3 de diciembre de 2021 .
- ↑ "COR@L – Investigación en optimización computacional en Lehigh" . lehigh.edu .
- ↑ http://www.in-ter-trans.eu/resources/Zesch_Hellingrath_2010_Integrated+Production-Distribution+Planning.pdf Archivado el 20/07/2011 en Wayback Machine OptimJ utilizado en un modelo de optimización para líneas de montaje de modelos mixtos, Universidad de Münster
- ↑ http://www.aaai.org/ocs/index.php/AAAI/AAAI10/paper/viewFile/1769/2076 Archivado el 29/06/2011 en Wayback Machine OptimJ utilizado en una técnica aproximada de cálculo de equilibrio perfecto en subjuegos para juegos repetidos
Referencias
- Kantorovich, LV (1940). "Об одном эффективном методе решения некоторых классов экстремальных проблем" [ Un nuevo método para resolver algunas clases de problemas extremos ] . Doklady Akad Sci SSSR . 28 : 211-214 .
- FL Hitchcock: La distribución de un producto desde varias fuentes a numerosas localidades , Journal of Mathematics and Physics, 20, 1941, 224–230.
- GB Dantzig: Maximización de una función lineal de variables sujeta a desigualdades lineales , 1947. Publicado en las páginas 339-347 de TC Koopmans (ed.): Análisis de la actividad de la producción y la asignación , Nueva York-Londres, 1951 (Wiley & Chapman-Hall).
- JE Beasley, editor. Avances en programación lineal y entera . Oxford Science, 1996. (Colección de artículos de revisión)
- Bland, Robert G. (1977). "Nuevas reglas de pivoteo finito para el método simplex". Matemáticas de la investigación operativa . 2 (2): 103– 107. doi : 10.1287/moor.2.2.103 . JSTOR 3689647 .
- Borgwardt, Karl-Heinz (1987). El algoritmo simplex: un análisis probabilístico . Algoritmos y combinatoria. Vol. 1. Springer-Verlag.(Comportamiento promedio en problemas aleatorios)
- Richard W. Cottle, ed. The Basic George B. Dantzig . Stanford Business Books, Stanford University Press, Stanford, California, 2003. (Artículos seleccionados de George B. Dantzig )
- George B. Dantzig y Mukund N. Thapa. 1997. Programación lineal 1: Introducción . Springer-Verlag.
- Dantzig, George B.; Thapa, Mukund N. (2003). Programación lineal 2: Teoría y extensiones . Springer-Verlag.(Completo, abarca, por ejemplo, algoritmos de pivote y de punto interior, problemas a gran escala, descomposición según Dantzig-Wolfe y Benders , e introducción a la programación estocástica ).
- Edmonds, Jack; Giles, Rick (1977). «Una relación min-max para funciones submodulares en grafos». Estudios en programación entera . Anales de matemáticas discretas. Vol. 1. págs. 185–204 . doi : 10.1016/S0167-5060(08)70734-9 . ISBN 978-0-7204-0765-5.
- Fukuda, Komei; Terlaky, Tamás (1997). Thomas M. Liebling; Dominique de Werra (eds.). "Métodos cruzados: una nueva perspectiva sobre los algoritmos de pivote". Mathematical Programming, Series B . 79 ( 1– 3): 369– 395. CiteSeerX 10.1.1.36.9373 . doi : 10.1007/BF02614325 . MR 1464775 . S2CID 2794181 .
- Gondzio, Jacek; Terlaky, Tamás (1996). "3 A computational view of interior point methods". In J. E. Beasley (ed.). Advances in linear and integer programming. Oxford Lecture Series in Mathematics and its Applications. Vol. 4. New York: Oxford University Press. pp. 103–144. MR 1438311. Postscript file at website of Gondzio and at McMaster University website of Terlaky.
- Murty, Katta G. (1983). Linear programming. New York: John Wiley & Sons, Inc. pp. xix+482. ISBN 978-0-471-09725-9. MR 0720547. (comprehensive reference to classical approaches).
- Evar D. Nering and Albert W. Tucker, 1993, Linear Programs and Related Problems, Academic Press. (elementary)
- Padberg, M. (1999). Linear Optimization and Extensions, Second Edition. Springer-Verlag. (carefully written account of primal and dual simplex algorithms and projective algorithms, with an introduction to integer linear programming – featuring the traveling salesman problem for Odysseus.)
- Papadimitriou, Christos H.; Steiglitz, Kenneth. Combinatorial Optimization: Algorithms and Complexity (Corrected republication with a new preface ed.). Dover. (computer science)
- Todd, Michael J. (February 2002). "The many facets of linear programming". Mathematical Programming. 91 (3): 417–436. doi:10.1007/s101070100261. S2CID 6464735. (Invited survey, from the International Symposium on Mathematical Programming.)
- Vanderbei, Robert J. (2001). Linear Programming: Foundations and Extensions. Springer Verlag.
- Vazirani, Vijay V. (2001). Approximation Algorithms. Springer-Verlag. ISBN 978-3-540-65367-7. (Computer science)
Further reading
- Dmitris Alevras and Manfred W. Padberg, Linear Optimization and Extensions: Problems and Solutions, Universitext, Springer-Verlag, 2001. (Problems from Padberg with solutions.)
- de Berg, Mark; van Kreveld, Marc; Overmars, Mark; Schwarzkopf, Otfried (2000). Computational Geometry (2nd revised ed.). Springer-Verlag. ISBN 978-3-540-65620-3. Chapter 4: Linear Programming: pp. 63–94. Describes a randomized half-plane intersection algorithm for linear programming.
- Michael R. Garey y David S. Johnson (1979). Computadoras e intratabilidad: una guía a la teoría de la NP-completitud . WH Freeman. ISBN 978-0-7167-1045-5.A6: MP1: PROGRAMACIÓN ENTERA, pág. 245. (Informática, teoría de la complejidad)
- Gartner, Bernd; Matoušek, Jiří (2006). Comprensión y uso de la programación lineal . Berlín: Springer. ISBN 3-540-30697-8.(Introducción elemental para matemáticos e informáticos)
- Cornelis Roos, Tamás Terlaky, Jean-Philippe Vial, Métodos de punto interior para optimización lineal , Segunda edición, Springer-Verlag, 2006. (Nivel de posgrado)
- Alejandro Schrijver (2003). Optimización combinatoria: poliedros y eficiencia . Saltador.
- Alexander Schrijver, Teoría de la programación lineal y entera . John Wiley e hijos, 1998, ISBN 0-471-98232-6(matemático)
- Gerard Sierksma; Yori Zwols (2015). Optimización lineal y entera: teoría y práctica . Prensa CRC. ISBN 978-1-498-71016-9.; con solucionador en línea: https://online-optimizer.appspot.com/
- Gerard Sierksma; Diptesh Ghosh (2010). Redes en acción: texto y ejercicios informáticos sobre optimización de redes . Springer. ISBN 978-1-4419-5512-8.(modelado de optimización lineal)
- HP Williams, Modelado en Programación Matemática , Quinta Edición, 2013. (Modelado)
- Stephen J. Wright, 1997, Métodos de punto interior primal-dual , SIAM. (Nivel de posgrado)
- Yinyu Ye , 1997, Algoritmos de punto interior: teoría y análisis , Wiley. (Nivel avanzado de posgrado)
- Ziegler, Günter M. , Capítulos 1–3 y 6–7 en Lectures on Polytopes , Springer-Verlag, Nueva York, 1994. (Geometría)
Enlaces externos
- Guía para la formulación de problemas de programación lineal
- Glosario de programación matemática
- Preguntas frecuentes sobre programación lineal
- Criterios de referencia para software de optimización
- Programación lineal
- Optimización convexa
- Algoritmos geométricos
- Problemas P-completos