Articulo de referencia

Programación lineal

Representación gráfica de un programa lineal simple con dos variables y seis desigualdades. El conjunto de soluciones factibles se muestra en amarillo y forma un polígono , un p...

Representación gráfica de un programa lineal simple con dos variables y seis desigualdades. El conjunto de soluciones factibles se muestra en amarillo y forma un polígono , un politopo bidimensional . El óptimo de la función de coste lineal se encuentra donde la línea roja interseca el polígono. La línea roja representa el conjunto de nivel de la función de coste, y la flecha indica la dirección de optimización.
Una región factible cerrada de un problema con tres variables es un poliedro convexo . Las superficies que proporcionan un valor fijo de la función objetivo son planos (no mostrados). El problema de programación lineal consiste en encontrar un punto del poliedro que se encuentre en el plano con el valor máximo posible.

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:

Encuentra un vectorincógnitaque maximizadoTincógnitasujeto aAincógnitabyincógnita0.{\displaystyle {\begin{aligned}&{\text{Encuentra un vector}}&&\mathbf {x} \\&{\text{que maximiza}}&&\mathbf {c} ^{\mathsf {T}}\mathbf {x} \\&{\text{sujeto a}}&&A\mathbf {x} \leq \mathbf {b} \\&{\text{y}}&&\mathbf {x} \geq \mathbf {0}.\end{aligned}}}

Aquí los componentes deincógnita{\displaystyle \mathbf {x} }son las variables a determinar,do{\displaystyle \mathbf {c} }yb{\displaystyle \mathbf {b} }se dan vectores , yA{\displaystyle A}es una matriz dada . La función cuyo valor debe maximizarse (incógnitadoTincógnita{\displaystyle \mathbf {x} \mapsto \mathbf {c} ^{\mathsf {T}}\mathbf {x} }en este caso) se denomina función objetivo . Las restriccionesAincógnitab{\displaystyle A\mathbf {x} \leq \mathbf {b} }yincógnita0{\displaystyle \mathbf {x} \geq \mathbf {0} }Especificar 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

Leonid Kantorovich
Juan von Neumann

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.ejF(incógnita1,incógnita2)=do1incógnita1+do2incógnita2{\displaystyle f(x_{1},x_{2})=c_{1}x_{1}+c_{2}x_{2}}
  • Restricciones del problema de la siguiente forma
p.ej
a11incógnita1+a12incógnita2b1a21incógnita1+a22incógnita2b2a31incógnita1+a32incógnita2b3{\displaystyle {\begin{matrix}a_{11}x_{1}+a_{12}x_{2}&\leq b_{1}\\a_{21}x_{1}+a_{22}x_{2}&\leq b_{2}\\a_{31}x_{1}+a_{32}x_{2}&\leq b_{3}\\\end{matrix}}}
  • Variables no negativas
p.ej
incógnita10incógnita20{\displaystyle {\begin{matrix}x_{1}\geq 0\\x_{2}\geq 0\end{matrix}}}

El problema se suele expresar en forma matricial y, por lo tanto, queda así:

máximo{doTincógnitaincógnitaRnorteAincógnitabincógnita0}{\displaystyle \max\{\,\mathbf {c} ^{\mathsf {T}}\mathbf {x} \mid \mathbf {x} \in \mathbb {R} ^{n}\land A\mathbf {x} \leq \mathbf {b} \land \mathbf {x} \geq 0\,\}}

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

Solución gráfica al ejemplo del agricultor : después de sombrear las regiones que no cumplen las condiciones, el vértice de la región no sombreada con la línea discontinua más alejada del origen proporciona la combinación óptima (su ubicación sobre las líneas de tierra y pesticidas implica que los ingresos están limitados por la tierra y los pesticidas, no por los fertilizantes).

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[S1S2][incógnita1incógnita2]{\displaystyle {\begin{bmatrix}S_{1}&S_{2}\end{bmatrix}}{\begin{bmatrix}x_{1}\\x_{2}\end{bmatrix}}}
sujeto a[11F1F2PAG1PAG2][incógnita1incógnita2][LFPAG],[incógnita1incógnita2][00].{\displaystyle {\begin{bmatrix}1&1\\F_{1}&F_{2}\\P_{1}&P_{2}\end{bmatrix}}{\begin{bmatrix}x_{1}\\x_{2}\end{bmatrix}}\leq {\begin{bmatrix}L\\F\\P\end{bmatrix}},\,{\begin{bmatrix}x_{1}\\x_{2}\end{bmatrix}}\geq {\begin{bmatrix}0\\0\end{bmatrix}}.}

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 :

Maximizarz{\displaystyle z}:
[1doT0T0AI][zincógnitas]=[0b]{\displaystyle {\begin{bmatrix}1&-\mathbf {c} ^{\mathsf {T}}&\mathbf {0} ^{\mathsf {T}}\\\mathbf {0} &\mathbf {A} &\mathbf {I} \end{bmatrix}}{\begin{bmatrix}z\\\mathbf {x} \\\mathbf {s} \end{bmatrix}}={\begin{bmatrix}0\\\mathbf {b} \end{bmatrix}}}
incógnita0,s0{\displaystyle \mathbf {x} \geq \mathbf {0} ,\mathbf {s} \geq \mathbf {0} }

dóndes{\displaystyle \mathbf {s} }son las variables de holgura recientemente introducidas,incógnita{\displaystyle \mathbf {x} }son las variables de decisión, yz{\displaystyle z}es la variable que se va a maximizar.

Ejemplo

El ejemplo anterior se convierte en la siguiente forma aumentada:

dóndeincógnita3,incógnita4,incógnita5{\displaystyle x_{3},x_{4},x_{5}}son 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:

Maximizarz{\displaystyle z}:
[1S1S20000111000F1F20100PAG1PAG2001][zincógnita1incógnita2incógnita3incógnita4incógnita5]=[0LFPAG],[incógnita1incógnita2incógnita3incógnita4incógnita5]0.{\displaystyle {\begin{bmatrix}1&-S_{1}&-S_{2}&0&0&0\\0&1&1&1&0&0\\0&F_{1}&F_{2}&0&1&0\\0&P_{1}&P_{2}&0&0&1\\\end{bmatrix}}{\begin{bmatrix}z\\x_{1}\\x_{2}\\x_{3}\\x_{4}\\x_{5}\end{bmatrix}}={\begin{bmatrix}0\\L\\F\\P\end{bmatrix}},\,{\begin{bmatrix}x_{1}\\x_{2}\\x_{3}\\x_{4}\\x_{5}\end{bmatrix}}\geq 0.}

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 xb , x ≥ 0;
con el problema dual simétrico correspondiente,
Minimizar b T y sujeto a A T yc , y ≥ 0.

Una formulación primal alternativa es:

Maximizar c T x sujeto a A xb ;
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 dualesy{\displaystyle \mathbf {y} }pueden 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 requerimosy0{\displaystyle \mathbf {y} \geq \mathbf {0} }. Si ademásdoyA{\displaystyle \mathbf {c} ^{\top }\leq \mathbf {y} ^{\top }\!A}Entonces se deduce que doincógnitayAincógnitayb=by,{\displaystyle \mathbf {c} ^{\top }\mathbf {x} \leq \mathbf {y} ^{\top }\!A\mathbf {x} \leq \mathbf {y} ^{\top }\mathbf {b} =\mathbf {b} ^{\top }\mathbf {y} {\text{,}}} es decir, el valor de la función objetivo dualby{\displaystyle \mathbf {b} ^{\top }\mathbf {y} }en cualquier punto dual factibley{\displaystyle \mathbf {y} }es un límite superior para el valor de la función objetivo primaldoincógnita{\displaystyle \mathbf {c} ^{\top }\mathbf {x} }en cualquier punto primigenio factibleincógnita{\displaystyle \mathbf {x} }. 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 yc , 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 xb , 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

En un problema de programación lineal, una serie de restricciones lineales produce una región factible convexa de posibles valores para esas variables. En el caso de dos variables, esta región tiene la forma de un polígono simple convexo .

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 enO(norte6L){\displaystyle O(n^{6}L)}tiempo. [ 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'doincógnita{\displaystyle \mathbf {c} ^{\top }\mathbf {x} }dadoAincógnitab,incógnita0{\displaystyle A\mathbf {x} \leq \mathbf {b} ,\mathbf {x} \geq \mathbf {0} }', sino más bien el problema de viabilidad 'determinar si el politopoAincógnitab{\displaystyle A\mathbf {x} \leq \mathbf {b} }es no vacío'. Para resolver programas lineales utilizando pruebas de factibilidad, primero se comprueba si el problema primalAincógnitab,incógnita0{\displaystyle A\mathbf {x} \leq \mathbf {b} ,\mathbf {x} \geq \mathbf {0} }es factible (si no, entonces no hay solución), y en segundo lugar comprueba si el problema dualAydo,y0{\displaystyle A^{\top }\mathbf {y} \geq \mathbf {c} ,\mathbf {y} \geq \mathbf {0} }es 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.incógnita0,y0,Aincógnitab,Aydo,doincógnita=by{\displaystyle \mathbf {x} \geq \mathbf {0} ,\mathbf {y} \geq \mathbf {0} ,A\mathbf {x} \leq \mathbf {b} ,A^{\top }\mathbf {y} \geq \mathbf {c} ,\mathbf {c} ^{\top }\mathbf {x} =\mathbf {b} ^{\top }\mathbf {y} }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 ] (dandoO(norte3.5L){\displaystyle O(n^{3.5}L)}Karmarkar 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 enO(norte3){\displaystyle O(n^{3})}tiempo. [ 22 ]

El algoritmo 89 de Vaidya

En 1989, Vaidya desarrolló un algoritmo que se ejecuta enO(norte2.5){\displaystyle O(n^{2.5})}tiempo con el uso de algoritmos rápidos de multiplicación de matrices . [ 23 ] Formalmente hablando, el algoritmo tomaO((norte+d)1.5norteL){\displaystyle O((n+d)^{1.5}nL)}operaciones aritméticas en el peor de los casos, donded{\displaystyle d}es el número de restricciones,norte{\displaystyle n}es el número de variables, yL{\displaystyle L}es 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 enO~((nortenortez(A)+d2)dL){\displaystyle {\tilde {O}}{\bigl (}(\mathrm {nnz} (A)+d^{2}){\sqrt {d}}L{\bigr )}}tiempo, [ 24 ] dondeO~{\displaystyle {\tilde {O}}}denota la notación O suave ynortenortez(A){\displaystyle \mathrm {nnz} (A)}representa el número de elementos distintos de cero, y sigue tomandoO(norte2.5L){\displaystyle O(n^{2.5}L)}en 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 aO~((norteω+norte2.5α/2+norte2+1/6)L){\displaystyle {\tilde {O}}((n^{\omega }+n^{2.5-\alpha /2}+n^{2+1/6})L)}tiempo,ω{\displaystyle \omega }es el exponente de la multiplicación de matrices yα{\displaystyle \alpha }es el exponente dual de la multiplicación de matrices. [ 25 ]α{\displaystyle \alpha }se define (aproximadamente) como el número más grande tal que se puede multiplicar unnorte×norte{\displaystyle n\times n}matriz por unanorte×norteα{\displaystyle n\times n^{\alpha }}matriz enO(norte2){\displaystyle O(n^{2})}tiempo. En un trabajo posterior de Lee, Song y Zhang, reproducen el mismo resultado mediante un método diferente. [ 26 ] Estos dos algoritmos permanecenO~(norte2+1/6L){\displaystyle {\tilde {O}}(n^{2+1/6}L)}cuandoω=2{\displaystyle \omega =2}yα=1{\displaystyle \alpha =1}El resultado debido a Jiang, Song, Weinstein y Zhang mejoróO~(norte2+1/6L){\displaystyle {\tilde {O}}(n^{2+1/6}L)}aO~(norte2+1/18L){\displaystyle {\tilde {O}}(n^{2+1/18}L)}. [ 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

Problema sin resolver en informática
¿Admite la programación lineal un algoritmo de tiempo fuertemente polinomial?

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:

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 poliedroPAG={incógnitaAincógnita0}{\displaystyle P=\{x\mid Ax\geq 0\}}Se dice que es integral si para todas las funciones objetivo factibles acotadas c , el programa lineal{máximodoincógnitaincógnitaPAG}{\displaystyle \{\max cx\mid x\in P\}}tiene un óptimoincógnita{\displaystyle x^{*}}con coordenadas enteras. Como observaron Edmonds y Giles en 1977, se puede decir equivalentemente que el poliedroPAG{\displaystyle P}es integral si para cada función objetivo integral factible acotada c , el valor óptimo del programa lineal{máximodoincógnitaincógnitaPAG}{\displaystyle \{\max cx\mid x\in P\}}es 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 permisivas :

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.

Licencias de propiedad :

Véase también

Notas

  1. 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 . 
  2. 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 . 
  3. 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.
  4. ^ Gerard Sierksma; Yori Zwols (2015). Optimización lineal y entera: teoría y práctica (3ª ed.). Prensa CRC. pag. 1.ISBN   978-1498710169.
  5. "Programación lineal | Definición y hechos | Britannica" . www.britannica.com . Consultado el 20 de noviembre de 2023 .
  6. 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.
  7. 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.
  8. 1 2 3 Dantzig, George B.; Thapa, Mukund Narain (1997). Programación lineal . Nueva York: Springer. pág. xxvii. ISBN  0387948333OCLC 35318475 
  9. ^ Leonid Khachiyan (1979) . "Un algoritmo polinomial para programación lineal". Doklady Akademii Nauk SSSR . 224 (5): 1093-1096 .
  10. 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 . 
  11. 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 . 
  12. Vazirani (2001 , p. 112) 
  13. 1 2 3 Dantzig y Thapa (2003)
  14. 1 2 Padberg (1999)
  15. 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 .   
  16. Borgwardt (1987)
  17. Todd (2002)
  18. Murty (1983)
  19. Papadimitriou y Steiglitz
  20. 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 .  
  21. 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 .   
  22. Vaidya, Pravin M. (1987). Un algoritmo para programación lineal que requiereO(((metro+norte)norte2+(metro+norte)1.5norte)L){\displaystyle {O}(((m+n)n^{2}+(m+n)^{1.5}n)L)}Operaciones aritméticas . 28º Simposio Anual del IEEE sobre Fundamentos de la Informática. FOCS.
  23. 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.
  24. 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 .
  25. 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 .
  26. 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 .
  27. ^ 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 .
  28. 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 . 
  29. 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 .  
  30. "Guía de referencia de lp_solve (5.5.2.5)" . mit.edu . Consultado el 10 de agosto de 2023 .
  31. "Interfaces de lenguaje externo" . Consultado el 3 de diciembre de 2021 .
  32. "comando lp_solve" . Consultado el 3 de diciembre de 2021 .
  33. "COR@L – Investigación en optimización computacional en Lehigh" . lehigh.edu .
  34. 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
  35. 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)
  • 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