Solución de programación lineal en una pasada con variables ordenadas


9

Tengo una familia de problemas de programación lineal: maximizar sujeto a , . Los elementos de , , y son números enteros no negativos, estrictamente positivo. ( también debería ser integral, pero me preocuparé por eso más adelante).cxAxbx0Abccx

A menudo sucede en mi aplicación que los coeficientes y son tales que un algoritmo simplificado de un paso da la solución óptima para cada elección de : el algoritmo de un paso determina los elementos en secuencia, eligiendo cada uno será el mayor valor posible consistente con los valores ya determinadosAcbx1,,xnxjx1,,xj1. En lenguaje simplex, la secuencia de entrada de variables es solox1 a xn, y termina después de npasos. Esto ahorra mucho tiempo en comparación con el simplex completo.

Este algoritmo funciona cuando las columnas de A y los elementos de chan sido ordenados de "barato" a "caro". Una variable "barata" es una columna deA con valores generalmente pequeños, para los cuales el elemento correspondiente de c es grande: para ese elemento de x obtienes una gran cantidad de producción con poca demanda en la restricción b. Entonces el algoritmo solo dice "haz las cosas fáciles primero".

Mi pregunta es: ¿qué propiedad de A y cnos aseguraría que este algoritmo simplificado funciona para todos los ? Mi conjetura inicial fue que los elementos distintos de cero de deberían estar aumentando en cada fila, pero eso no es correcto.bA

Aquí hay algunos ejemplos, todos con : , , , . Para todos estos, el algoritmo secuencial proporciona la solución óptima para todos los valores de (por experimentación numérica). es el único para el que también funcionan todas las permutaciones de columnas.c=(1,1,1)A1=(111123320)UNA2=(0 00 0130 020 032)UNA3=(11110 00 010 01)UNA4 4=(10 010 010 00 011)siUNA3UNA1UNA3(1,1,3)parece más caro que y más caro que .(1,3,0 0)(1,1,1)(1,0 0,0 0)

Estaría tremendamente agradecido por cualquier sugerencia a la literatura, por cualquier problema como este, o cualquier sugerencia en absoluto. Debe haber otros casos en los que se puede determinar que algunas variables son "más baratas" que otras y se pueden hacer de manera segura primero. Con todo el trabajo que se ha hecho en la programación lineal a lo largo de los años, parece que algo similar debe haber surgido, pero no he podido encontrarlo.

Respuestas:


4

Probablemente el caso más famoso en el que se sabe que un algoritmo codicioso resuelve un LP es para el caso especial del problema de transporte. Hoffman ("En programas lineales simples", en Convexity , vol. 7 de Proceedings of Symposia in Pure Mathematics , páginas 317-327, 1963) demostró que si la matriz de costos para un problema de transporte (maximización) satisface la propiedad Monge (Cyoj+CklCyol+Ckj cuando 1yo<knorte, 1j<lnorte), entonces se puede encontrar una solución óptima de una manera codiciosa como la que usted describe.

Hoffman también tiene un documento de encuesta (" Sobre algoritmos codiciosos que tienen éxito ") de 1985 en el que analiza casos conocidos en los que un algoritmo codicioso da una solución óptima a un LP. Además de su propio trabajo citado anteriormente (sobre el cual dice, "la mayoría de los problemas de programación lineal conocidos [en 1963] por ser susceptibles a un algoritmo codicioso fueron casos especiales de la idea de Monge"), menciona la interpretación de programación lineal de Edmonds generalización de matroides y una discusión del caso cuandoUNA no es negativo, entre otras cosas.

Me imagino que hay resultados más recientes, pero espero que esto al menos parcialmente responda a su pregunta y le dé algunas ideas de dónde buscar.


2
Me gustaría agradecer al profesor Spivey por su sugerencia. Me tomó un tiempo perseguir las referencias, pero proporcionaré una descripción más completa como respuesta.
Robert Almgren

3

Gracias a la sugerencia del profesor Spivey, finalmente encontré lo que creo que es el estado del arte: Ulrich Faigle, Alan J. Hoffman y Walter Kern, "Una caracterización de matrices codiciosas de caja no negativas", SIAM J. Disc. Matemáticas. 9 (1996) pp 1-6. Una matriz es "codiciosa" si el algoritmo que describí anteriormente brinda la solución óptima para todossi. Una matriz es "codiciosa" si el algoritmo codicioso da la solución óptima con la condición adicionalXre para todos si y todo re0 0. Claramente, el codicioso de caja es una condición más fuerte que el codicioso.

Siempre asume que C1Cnorte>0 0. Faigle, Hoffman y Kern prueban queUNA es codicioso si y solo si no tiene k×(k+1) (para cualquier k) submatriz del formulario (r1s1r2s2rksk) con cada rj>0 0 y yo:syo>0 0ryosyo>1. Al extraer las submatrices, se permiten permutaciones arbitrarias de filas pero no columnas, y se permite la subconjunto arbitrario de filas y columnas. Así, en particular, conk=1, los elementos distintos de cero en cada fila de UNA debe ser no decreciente.

Resulta, desafortunadamente, que en mi problema las matrices no son codiciosas, aunque todavía creo que son codiciosas. Por ejemplo, en miUNA1por encima de la condición se viola y esta matriz no es codiciosa de caja aunque es codiciosa. Hasta donde yo sé, no hay resultados en la identificación de matrices codiciosas.


¡Me alegra que mi respuesta te haya ayudado a encontrar esto!
Mike Spivey

3

El ejemplo más fácil para algo como esto podría ser el problema de la mochila fraccionaria donde los artículos pueden fraccionarse. Este problema (y su lp dual) se puede resolver clasificando los artículos por ganancia por peso, eligiendo la secuencia más larga en este orden que sea factible y fraccionando el último artículo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.