XXVI Congreso Nacional de Estadı́stica e Investigación Operativa Úbeda, 6–9 de noviembre de 2001 UN MÉTODO NON-SIMPLEX PARA PROGRAMAS LINEALES EN FORMA ESTÁNDAR Ángel Santos Palomo1 , Pablo Guerrero Garcı́a1 1 Departamento de Matemática Aplicada Universidad de Málaga RESUMEN En 1973 Gill y Murray propusieron un método non-simplex para el programa lineal primal en forma de desigualdad con más restricciones que variables. En este artı́culo se da un método non-simplex para su programa lineal dual en forma estándar. También se incluye una demostración de su convergencia, ası́ como diversos comentarios sobre su implementación y sobre adecuadas fases I. Palabras y frases clave: programación lineal, método non-simplex, método de conjunto activo, fase I. Clasificación AMS: 90C05, 90C60. 1. EL ALGORITMO PROPUESTO Considérese el habitual par primal-dual asimétrico utilizando notación no estándar (se han intercambiado a propósito los papeles habituales (e.g., (Megiddo, 1991, §1)) de b y c, x e y, n y m, y (P ) y (D)): . . (P ) min `(x) = cT x , x ∈ Rn (D) max L(y) = bT y , y ∈ Rm s.a Ay = c , y≥0 s.a AT x ≥ b donde A ∈ Rn×m con m ≥ n y rango(A) = n. En (Gill & Murray, 1973) Gill y Murray propusieron un algoritmo non-simplex (ver también (Dax, 1988) y (Gill, Murray & Wright, 1991, §8.5.4)) para resolver el problema (P ) empezando con un punto factible x(0) . Con una filosofı́a similar podemos diseñar un método non-simplex de conjunto activo para su problema dual en forma estándar (D), permitiendo en este caso que el conjunto dual básico tenga menos de n ı́ndices y comenzando de un punto y (0) dual factible que no tiene por qué ser vértice de la región factible de (D). Notaremos con mk al cardinal del conjunto básico B (k) , con N (k) a [1 : m]\B (k) y con Ak ∈ Rn×mk y Nk ∈ Rn×(m−mk ) a las submatrices de A formadas por las columnas indicadas por B (k) y N (k) , respectivamente; como es habitual, la i-ésima columna de A se nota con ai , y consistentemente la matriz cuya i-ésima fila es aTi se nota con AT . Las columnas 1 de Zk ∈ Rn×(n−mk ) forman base (no necesariamente ortonormal) del N (ATk ). Prescindiremos del superı́ndice (k) cuando éste se sobreentienda. El algoritmo, usando notación “seudo-Matlab”, queda como sigue: P0. Inicialización. Hacer k ← 0 y definir y (0) como un punto factible dual conocido con conjunto básico B (0) y base A0 . P1. Comprobación de optimalidad. Calcular x(k) resolviendo ATk x = bB y determinar los residuos rN = NkT x(k) − bN de las restricciones no básicas (los residuos rB de las básicas son nulos). Si rN ≥ 0 parar, pues x(k) es óptimo. P2. Determinar la variable no básica a poner en la base y definir (si existe) la dirección de búsqueda para las variables básicas. Utilizando alguna regla apropiada, elegir un ı́ndice j ∈ 1 : (m − mk ) tal que rNj < 0. Siendo p ≡ Nj , determinar (k) si existe o no dirección de búsqueda dB ∈ Rmk para las variables básicas (la (k) de las no básicas es dN = −ej ∈ Rm−mk ) estudiando la compatibilidad del sis(k) tema Ak dB = ap . El sistema es compatible si ZkT ap = 0, y entonces se puede (k) obtener dB y continuar en P3. Si ZkT ap 6= 0 dicho sistema no es compatible, luego ap 6∈ R(Ak ) y puede añadirse a B (k) sin eliminar restricciones de B (k) , lo cual se indica haciendo i ← 0, q ← ∅ y continuando en P5 con τ = 0. P3. Encontrar el tamaño de paso máximo en la dirección de búsqueda. Para i ∈ 1 : mk calcular el avance τi tras el cual se anuları́a la variable asociada a la i-ésima restricción activada: ( (k) (k) (k) yBi /dBi , si dBi > 0 τi = (k) +∞ , si dBi ≤ 0 y hacer τ = min1≤i≤n τi . P4. Comprobación de solución no acotada. Si τ = +∞ parar, pues la función objetivo dual no está acotada superiormente en la región factible (es decir, el problema primal no tiene solución factible). P5. Determinar la variable básica a quitar de la base y preparar la siguiente iteración. Utilizando alguna regla apropiada, elegir un ı́ndice i ∈ 1 : mk de una restricción activada tal que τ = τi ; a continuación si i 6= 0 hacer (k) q ≡ Bi (k) yBi ← ∅ ; ; (k) (k) dBi ← ∅ ; Bi (k) y eliminar de Ak la i-ésima columna. Después hacer Nj (k) yB ← (k) (k) yB − τ d B τ ; B (k) ← ( B (k) p) ; ←∅ ← ∅, N (k) ← ( N (k) añadiendo ap al final de Ak y haciendo k ← k + 1. Volver a P1. 2 q) El algoritmo propuesto es un método exterior (luego no necesita punto primal factible para empezar) que termina con soluciones óptimas para (P ) y (D) no necesariamente básicas, puesto que aquı́ lo que se mantiene es la factibilidad dual y la complementariedad residual (no estricta porque puede darse yi = 0 y ri = 0), para poder parar una vez alcanzada la factibilidad primal. A partir de las soluciones óptimas se pueden obtener bases óptimas aplicando el algoritmo fuertemente polinómico de Megiddo (Megiddo, 1991). Obsérvese que cuando mk = n se obtiene el método simplex. 2. DEMOSTRACIÓN DE LA CONVERGENCIA La convergencia del algoritmo propuesto puede demostrarse teniendo en cuenta lo siguiente. Como y (k+1) = y (k) − τ d(k) con τ > 0, para que bT y (k+1) ≡ L(k+1) > L(k) ≡ bT y (k) se tiene que dar que bT d(k) < 0; esto se deduce fácilmente de Ad(k) = 0 (k) (k) Ad(k) = Ak dB + Nk dN = ap − Nk ej = 0 y de rB = 0, pues bT d(k) = (AT x(k) − r(k) )T d(k) = x(k)T Ad(k) − r(k)T d(k) = (k)T (k) dB = −(rB (k)T (k) dN ) + rN (k)T = rN ej = rNj < 0. Dado que el vector y (k) de multiplicadores tal que Ak y (k) = c es único por tener Ak rango completo por columnas, cuando ap 6∈ R(Ak ) y Ak+1 = (Ak ap ) la única posibilidad para que y (k+1) siga verificando Ak y (k+1) = c es que y (k+1) = (y (k) ; 0), pues Ak+1 también va a tener rango completo por columnas y entonces y (k+1) es único. En este caso no hay progresión en el espacio dual porque L(k+1) = L(k) . Sin embargo, obsérvese que cuando mk = n no se puede dar que ap 6∈ R(Ak ). 3. IMPLEMENTACIÓN Y FASES I ADECUADAS La implementación del algoritmo para problemas densos se puede hacer en base a la factorización QR de Ak (añadiendo y eliminando columnas), mientras que para problemas dispersos usaremos la factorización QR dispersa de ATk (añadiendo y eliminando filas). Como Ak es un subconjunto de las columnas de la matriz A fija, hemos adaptado a matrices con más filas que columnas las técnicas de Saunders para matrices cuadradas (Saunders, 1972) utilizando la estructura estática de datos de George y Heath (e.g., ver (Heath, 1984) y las referencias allı́ incluidas) pero permitiendo supresión de filas sobre ella; de esta manera explotamos los resultados intermedios obtenidos al abordar min kAT x − bk2 procesando AT fila a fila en relación con (D). Para obtener una solución factible dual con la que empezar se puede adaptar fácilmente la fase I propuesta en (Gill, Murray & Wright, 1991, §7.9.4). Dado un punto y (0) ≥ 0 para el cual Ay (0) 6= c, se puede definir una fase uno mediante una única variable artificial z y el residuo inicial s(0) = Ay (0) − c: minimizar z , y ∈ Rm , z ∈ R (0) sujeto a Ay − s z = c , y ≥ 0 , z ≥ 0 , A ∈ Rn×m 3 con lo cual se trata de maximizar b̄T ȳ sujeto a Āȳ = c̄ e ȳ ≥ 0, donde: 0m y (0) b̄ = = −em+1 ; Ā = ( A −s ) ; ȳ = ; c̄ = c −1 z El punto ȳ (0) = (y (0) ; 1) es factible respecto a las restricciones de la fase uno, aunque en general no es un vértice. Por esta razón la resolución de la fase I se llevará a cabo con el método non-simplex propuesto. Como fase I alternativa podemos proceder como en (Dantzig, Leichner & Davis, 1993). Podemos aplicar el algoritmo NNLS (Lawson & Hanson, 1974, §23.3) a min kAy − ck2 sujeto a y ≥ 0. Nótese que en este caso no se necesitan variables artificiales y que lo que se obtiene es una solución factible dual, no necesariamente un vértice dual. 4. AGRADECIMIENTOS Los autores agradecen a Michael Saunders (Stanford) que, con respecto al informe técnico previo a (Dantzig, Leichner & Davis, 1993), nos comentara que: “Their method is equivalent to the known (and very simple) NNLS algorithm for non-negative least squares. Their real contribution was to apply it to linear programs to find a feasible solution”. También agradecemos a Achiya Dax (Hydrological Service) por proporcionarnos la referencia (Dax, 1988) que desconocı́amos, y a John Gilbert (Xerox) por confirmarnos que la factorización ortogonal dispersa de Matlab 5 es orientada a filas y basada en rotaciones de Givens y proporcionarnos detalles técnicos sobre la interfaz. 5. REFERENCIAS Dantzig, G.B; Leichner, S.A; Davis, J.W. (1993). A strictly improving linear programming phase I algorithm. Annals of Operations Research 46/47. Dax, A. (1988). Linear programming via least squares. Linear Algebra and its Applications 111:313–324. Gill, P.E; Murray, W. (1973). A numerically stable form of the simplex algorithm. Linear Algebra and its Applications 7:99–138. Gill, P.E; Murray, W; Wright, M.H. (1991). Numerical Linear Algebra and Optimization, Vol. 1. Addison-Wesley. Heath, M.T. (1984). Numerical methods for large sparse linear least squares problems. SIAM Journal on Scientific and Statistical Computing 5(3):497–513. Lawson, C.L; Hanson, R.J. (1974). Solving least squares problems. Prentice-Hall, Englewood Cliffs. Reimpreso por SIAM, Classics in Applied Mathematics, 1995. Megiddo, N. (1991). On finding primal- and dual-optimal bases. ORSA Journal on Computing 3(1):63–65. 4 Saunders, M.A. (1972). Large-scale linear programming using the Cholesky factorization. Technical Report CS-252, Computer Science Department, Stanford University. 5