Sei sulla pagina 1di 10

Complejidad Computacional del M etodo Simplex y M etodos de Puntos Interiores*

Omar Trejo - 119711 Octubre, 2013

1.

Tiempo Exponencial

La idea general del m etodo Simplex para resolver problemas de programaci on lineal es recorrer las aristas, v ertice por v ertice, de un pol topo (regi on factible) revisando su optimalidad en cada paso. La cantidad m axima de v ertices dados por el sistema Ax b (que dene el pol topo del problema), donde n A Rmxn , es m , aunque cotidianamente se prueba un n umero menor que este. Sin embargo, el hecho de que la cantidad de pruebas necesarias est e relacionada a una expresi on combinatoria indica un posible problema con la complejidad computacional del algoritmo.

1.1.

Problema Klee-Minty

El ejemplo utilizado cotidianamente para demostrar la complejidad exponencial del m etodo Simplex es el problema Klee-Minty. La idea b asica es deformar un hipercubo de tal manera que el m etodo deba recorrer todas las aristas antes de llegar al punto optimo. Inicialmente fue propuesto en 1972 por Klee y Minty con la forma maximizar
x

yn yj 1 yj 1 yj 1 , yj 0, j = 2, . . . , n, j = 1, . . . , n.

s.a.

Poco despu es Chv atal propuso[3] el cambio de variable x1 = y1 , xj = (1/ )yj 1 + yj , lo que permite formular el problema como es m as popular* Este documento no contiene un tratado riguroso de los m etodos. Se crea a manera de resumen y se omiten muchos detalles t ecnicos.

Figura 1: Politopos de Klee-Minty de dos y tres dimensiones[4]. mente conocido,


n

maximizar
x k=1

10nk xk
j 1

s.a.

2
k=1

10j k xk + xj 100j 1 ,

j = 1, . . . , n, j = 1, . . . , n.

xj 0,

Los resultados del problema Klee-Minty, utilizando el algoritmo programado y mostrado en la secci on C odigo, son Dimensiones 3 5 6 8 10 Iteraciones 50 47 31 35 45

Esto claramente muestra la complejidad exponencial del m etodo. Por lo mismo, muchos de los esfuerzos comenzaron a enfocarse en m etodos de puntos interiores, los cuales exhib an caracter sticas deseables como complejidad polinomial.

2.

M etodos de Puntos Interiores

Los m etodos de puntos interiores han sido foco de atenci on desde que se mostr o que existen problemas de complejidad exponencial para el m etodo Simplex, y existe una variedad estos.1 En esta secci on explicaremos brevemente el
1 Un contraste interesante es que el m etodo Simplex genera su complejidad del n umero de restricciones que presenta el problema, mientras que los m etodos de puntos interiores generan

m etodo elipsoidal y el m etodo primal-dual infalible, y dejaremos de lado los dem as por cuestiones de espacio. La tabla[4] presentada continuaci on resume la informaci on. A no 1947 1979 1990 M etodo Simplex Elipsoidal Primal-Dual Infactible Autor Dantzig Khachiyan Kojima, Mizuno, Yoshise Caracter stica Eciente en la pr actica Ineciente en la pr actica M etodo Dominante

2.1.
2.1.1.

M etodo Elipsoidal de Khachiyan


En qu e consiste?

La idea b asica del m etodo elipsoidal se deriva de investigaciones previas, durante los a nos sesenta y setenta, dentro de lo que era la Uni on Sovi etica. De manera burda, la idea es encerrar la regi on de inter es en una sucesi on de elipsoides que decrecen de tama no cada vez m as. La contribuci on de Khachiyan fue demostrar en sus dos publicaciones -publicadas en 1979 y 1980- que bajo ciertas condiciones el m etodo tiene complejidad polinomial para problemas de programaci on lineal. 2.1.2. C omo se construye el punto inicial y la sucesi on de elipsoides?

El m etodo construye una elipsoide inicial que cubre P , el conjunto de factibilidad, completamente. Se toma el centro de ese elipsoide y se identica si se encuentra dentro de la regi on factible P . Si se encuentra dentro, el problema es factible, si no se encuentra dentro se puede construir un elipsoide nuevo (en tiempo polinomial), tomando en cuenta la variable que corresponde a la restricci on de AT x b que es violada, que cubra completamente la mitad del elipsoide anterior del lado donde se encuentra P . Procedemos de esta manera hasta que se encuentra un centro dentro de la regi on factible, o se alcanza el n umero m aximo de iteraciones disponibles (el resultado en este caso ser a que el problema es no factible). 2.1.3. Por qu e es un m etodo polinomial?

Bajo dos condiciones, que explicaremos a continuaci on, Bertismas y Tsitsiklis mostraron[5] que el m etodo elipsoidal resuelve problemas de programaci on lineal en tiempo O(m4 log(R/r)). Antes de denir las condiciones debemos denir el conjunto poli edrico del problema (representaci on del problema de programaci on lineal de manera vectorial): P = {x Rm : aT j x cj , j = 1, . . . , n}
su complejidad debido al n umero de variables en el problema.

Figura 2: Elipsoides con y sin regi on factible[8]. Si P = el problema tiene soluci on. Las dos condiciones para que el algoritmo converja en tiempo polinomial son: 1. x0 Rm , r R, r > 0, t.q. P S (x0 , R) = {x Rm : x x0 R}, 2. r R, r > 0 conocido t.q. si Y = = S (x , r) Y , donde S (y, r) es una bola con centro en y y radio r. La primer condici on implica que P est a acotado. La segunda condici on implica que si P es no vac o, entonces su interior tampoco es vac o; i.e. existe un sentido de densidad. Dado que tenemos un sentido de densidad, podemos construir cualquier elipsoide necesaria. La parte computacionalmente m as compleja del m etodo es precisamente la construcci on del elipsoide de volumen m nimo. Sin embargo, sabemos que este proceso es de complejidad polinomial, por lo que, de manera burda, podemos extender esto al hecho de que el m etodo es de complejidad polinomial. En la teor a se pueden construir (con aritm etica exacta) sucesiones innitas de elipsoides, pero en la pr actica (aritm etica de precisi on nita) se establece una cota al n umero de iteraciones que si es superada el problema se considera que este es infactible. 2.1.4. Cu al es la relevancia te orica del m etodo y por qu e no es pr actica su implementaci on para programaci on lineal?

La relevancia te orica del m etodo reside en el hecho de que antes de la publicaci on del mismo no se hab an logrado clasicar los problemas de programaci on lineal en alguno de los conjuntos de problemas P o N P , i.e. los que se pueden resolver en tiempo polinomial y los que no, respectivamente. Se cre a que estos problemas no tienen una complejidad tal que deben ser clasicados en N P , pero nadie hab a conseguido demostrar su pertenencia a P hasta que Kachiyan public o su m etodo elipsoidal. Adem as el m etodo sirve para construir algoritmos para problemas de optimizaci on convexa, que son m as generales que los de programaci on lineal. 4

La experiencia computacional muestra que las iteraciones necesarias para resolver problemas de programaci on lineal usando este m etodo se encuentran muy cercanas al l mite te orico superior. Esto signica que pr acticamente el algoritmo no es muy bueno. El m etodo Simplex, aunque tiene una complejidad exponencial, en la pr actica la experiencia muestra que son necesarias muchas menos iteraciones que el l mite te orico m aximo, haci endolo un candidato para aplicaciones pr acticas.

2.2.
2.2.1.

M etodo Primal-Dual Infactible de Kojima, Mizuno & Yoshie


En qu e consiste?

El m etodo consiste en tomar un punto nuevo en cada iteraci on a lo largo de la direcci on de Newton, en la direcci on de la trayectoria central, como lo hacen otros m etodos de puntos interiores. La diferencia es que este m etodo no requiere que los puntos est en dentro de la regi on factible. Este m etodo aplica pasos largos y distintos entre el los problemas primal y dual, y se caracteriza por convergencia global en tiempo polinomial2 2.2.2. C omo se construye el punto inicial y la sucesi on de puntos?

Dado que es un m etodo infactible, tenemos que no es necesario construir un punto inicial, i.e. cualquier punto (xi , yi , zi ) en el espacio, con xi 0, zi 0, converger a eventualmente a una soluci on. Es necesario notar que hay casos en programaci on no-lineal donde esta soluci on puede ser no- optima, pero en el caso de programaci on lineal, siempre converger a a una soluci on optima. La sucesi on de puntos se construye utilizando los problemas primal y dual P : minimizar
x

cT x Ax = b, b y AT y + z = c, z0
T

s.a. D: maximizar
y,z

x0

s.a. En cada iteraci on A 0 Zk

se resuelve el sistema 0 0 Axk b x AT I y = AT y k + z k c z 0 Xk X k Z k e

donde Z k y X k son las matrices con la diagonal igual a z k y xk , respectivamente. Cada una de las restricciones (ecuaciones del sistema lineal) vienen
2 Para ser rigurosos deber amos denir los conceptos direcci on de Newton, trayectoria central, pasos largos, problema primal y problema dual. Sin embargo, por cuestiones de espacio no profundizaremos en ellos.

de la b usqueda de cerar la brecha en la restricci on de factibilidad de P , la restricci on de factibilidad de D y la restricci on de la brecha entre los problemas, X k Z k = e, respectivamente. Posteriormente se actualizan las variables (xk+1 , yk+1 , zk+1 ) = (xk , yk , zk ) + (x, y, z ) Los detalles t ecnicos, por ejemplo como escoger en cada iteraci on, la obtenci on de la factibilidad, la convergencia global o la identicaci on de la nofactibilidad, no ser an explicados en este documento. Sin embargo, esto no signica que carezcan de gran importancia. 2.2.3. Por qu e es un m etodo polinomial?

Aunque el c alculo de cada iteraci on es signicativamente m as alto que el m etodo Simplex, cada iteraci on conlleva progreso mucho m as signicativo hacia el optimo, suponiendo que existe. Adem as es un camino mucho m as directo (sigue el llamado central path ). La complejidad del algoritmo radica en la soluci on de un sistema de ecuaciones lineales que, aunque puede ser complicado, sabemos que podemos hacer en tiempo polinomial, por lo que el algoritmo tambi en muestra tiempo polinomial3 . 2.2.4. Cu al es la relevancia del m etodo y por qu e es pr actica su implementaci on para programaci on lineal?

El m etodo se encuentra dentro de los m as populares hoy en d a y exhibe los mejores resultados pr acticos. En promedio le toma entre 23 y 25 iteraciones resolver los problemas m as complejos (con soluci on) que existen hoy en d a en programaci on lineal. Adem as, te oricamente es importante el m etodo porque no se restringe a comenzar con puntos dentro de la regi on factible, lo que puede presentar un problema en s mismo.

3.

C odigo - M etodo Simplex Revisado

El c odigo aqu presentado es una peque na variaci on del m etodo Simplex que utiliza un tableu m as peque no porque no guarda espacio para las columnas B de A = [N |B ] que contienen la identidad en cada iteraci on. En realidad no es necesario almacenar esta identidad. La utilizaci on de este m etodo es para mejorar el desempe no en el RAM de la computadora4 .
/* * Programacion Lineal - Metodo Simplex Revisado * Omar Trejo Navarro * 119711 *
3 Claramente esta es una implicaci on burda y es necesario sustentarla de manera rigurosa, pero dicha prueba no ser a presentada en este texto. 4 Para los problemas pedag ogicos que resolveremos en clase este detalle es intrascendente.

* r * nv * nr * t * tipo * ai * optimo * xmax * bamin * aux * rp * cp * error * CMAX * VMAX * */

:= := := := := := := := := := := := := := :=

y = maximizar, n = minimizar numero de variables de funcion objetivo numero de restricciones tableu 1 = maximizar, -1 = minimizar auxiliar para inputs true = alcanzado, false = no alcanzado maximo de coeficientes de funcion objetivo mininmo de b_i/a_ij variable auxiliar indice del renglon pivote indice de la columna pivote true = no acotado, false = acotado maxima cantidad de restricciones maxima cantidad de variables

#include <stdio.h> #include <math.h> #define CMAX #define VMAX 10 10

int nr, nv, rp, cp; bool optimo, error; double t[CMAX][VMAX]; void datos() { /* * Obtener los datos del problema */ char r; int i, j; double tipo, ai; printf("\n Programacion Lineal - Metodo Simplex Revisado\n"); do { printf("\n Maximizar [s/n] ? "); scanf(" %c", &r); if (r == 'S' || r == 's') tipo = 1; else if (r == 'N' || r == 'n') tipo = -1; else printf("\n [!] Error. Debe indicar si (s) o no (n).\n\n") ; } while (r != 'S' && r != 's' && r != 'N' && r != 'n'); printf(" Cantidad de variables ? "); scanf(" %d", &nv); printf(" Cantidad de restricciones ? "); scanf(" %d", &nr); // Funcion objetivo printf("\n Funcion objetivo:\n"); for (j = 1; j <= nv; j++) { printf(" Coeficiente de la variable %d ? ", j); scanf(" %lf", &ai); t[1][j + 1] = ai * tipo; } printf(" Valor de la constante ? ");

scanf(" %lf", &ai); t[1][1] = ai * tipo; // Restricciones for (i = 1; i <= nr; i++) { printf("\n Restriccion %d:\n", i); for (j = 1; j <= nv; j++) { printf(" Coeficiente de la variable %d ? ", j); scanf(" %lf", &ai); t[i + 1][j + 1] = -ai; } printf(" Constante de restriccion ? "); scanf(" %lf", &t[i + 1][1]); } // Indices de las variables for (j = 1; j <= nv; j++) t[0][j + 1] = j; for (i = nv + 1; i <= nv + nr; i++) t[i - nv + 1][0] = i; } void pivotear() { /* * Hacer el cambio de pivotear */ double bamin, aux, xmax; int i, j; xmax = 0; // maximo {costos reducidos} for (j = 2; j <= nv + 1; j++) { if (t[1][j] > 0 && t[1][j] > xmax) { xmax = t[1][j]; cp = j; } } bamin = 1000000; // minimo {b_i/a_ij} for (i = 2; i <= nr + 1; i++) { if (t[i][cp] < 0) { aux = fabs(t[i][1] / t[i][cp]); if (aux < bamin) { bamin = aux; rp = i; } } } // Cambio de indices aux = t[0][cp]; t[0][cp] = t[rp][0]; t[rp][0] = aux; } void actualizar() { /* * Actualizar el tableu */ int i, j; for (i = 1; i <= nr + 1; i++)

if (i != rp) for (j = 1; j <= nv + 1; j++) if (j != cp) t[i][j] -= t[rp][j] * t[i][cp] / t[rp][cp]; t[rp][cp] = 1.0 / t[rp][cp]; for (j = 1; j <= nv + 1; j++) if (j != cp) t[rp][j] *= fabs(t[rp][cp]); for (i = 1; i <= nr + 1; i++) if (i != rp) t[i][cp] *= t[rp][cp]; } void revisar() { /* * Revisar optimalidad del tableu */ int i, j; optimo = true; error = false; // Revisar si es no-acotado for (i = 2; i <= nr + 1; i++) if (t[i][1] < 0) // TODO: Avisar que es no acotado error = true; // Revisar si es optimo if (error == false) for (j = 2; j <= nv + 1; j++) // TODO: Revisar si hay solucion multiple if (t[1][j] > 0) optimo = false; } void simplex() { /* * Metodo Simplex Revisado */ while (optimo == false) { pivotear(); actualizar(); revisar(); } } void resultados() { /* * Presentar los resultados */ int i, j; printf("\n Resultados:\n"); if (error == false) { for (i = 1; i <= nv; i++) for (j = 2; j <= nr + 1; j++) if (t[j][0] == 1 * i) printf(" Variable %d: %f\n", i, t[j][1]); printf(" Funcion objetivo: %f\n\n", t[1][1]); } else

printf(" } int main() { datos(); simplex(); resultados(); }

No hay solucion.\n\n");

Referencias
[1] Stephen J. Wright, Primal-Dual Interior Point Methods, Argonne National Laboratory, SIAM, 1997. [2] Mokhtar S. Bazaraa, John J. Jarvis, Hanif D. Sherali, Linear Programming and Network Flows, Wiley, 2010. [3] Steven R. Dunbar, Worst Case and Average Case Behavior of the Simplex Algorithm, University of Nebraska-Lincoln, Department of Mathematics. [4] A. Deza, E. Nematollahi & T. Terlaky, How good are interior point methods?, McMaster University, Advanced Optimization Laboratory, 2005. [5] Yinyu Ye, The Ellipsoid (Kachiyan) Method, Department of Management Science and Engineering, Stanford University. [6] Robert G. Bland, Donald Goldfarb & Michael J. Todd The Ellipsoid Method: A Survey, Cornell University, Ithaca, New York, 1981. [7] Masakazu Kojima, Nimrod Megiddo & Shinji Mizuno A primal-dual infeasible interior point algorithm for linear programming, Mathematical Programming, North-Holland, 1992. [8] Steen Rebennack Ellipsoid Method, Encyclopedia of Optimization, Springer, 2008.

10

Potrebbero piacerti anche