UN MÉTODO NON-SIMPLEX PARA PROGRAMAS LINEALES EN

Anuncio
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
Descargar