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).
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 determinados. En lenguaje simplex, la secuencia de entrada de variables es solo a , y termina después de pasos. Esto ahorra mucho tiempo en comparación con el simplex completo.
Este algoritmo funciona cuando las columnas de y los elementos de han sido ordenados de "barato" a "caro". Una variable "barata" es una columna de con valores generalmente pequeños, para los cuales el elemento correspondiente de es grande: para ese elemento de obtienes una gran cantidad de producción con poca demanda en la restricción . Entonces el algoritmo solo dice "haz las cosas fáciles primero".
Mi pregunta es: ¿qué propiedad de y nos 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.
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.parece más caro que y más caro que .
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.
fuente
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 adicionalx ≤ d para todos si y todo re≥ 0 . Claramente, el codicioso de caja es una condición más fuerte que el codicioso.
Siempre asume queC1≥ ⋯ ≥Cnorte> 0 . Faigle, Hoffman y Kern prueban queUNA es codicioso si y solo si no tiene k × ( k + 1 ) (para cualquier k ) submatriz del formulario ⎛⎝⎜⎜⎜⎜⎜r1r2⋮rks1s2⋱sk⎞⎠⎟⎟⎟⎟⎟ con cada rj> 0 y ∑yo :syo> 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 miUNA1 por 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.
fuente
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.
fuente