Complejidad del método simplex y métodos de puntos interiores

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 programa- ci´ 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´ erti- ces dados por el sistema Ax b (que define el pol´ ıtopo del problema), donde A R mxn , es ( n 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 exponen- cial 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 y n s.a. y j-1 y j 1 - y j-1 , j =2,...,n, y j 0, j =1,...,n. Poco despu´ es Chv´ atal propuso[3] el cambio de variable x 1 = y 1 , x j = (-1/)y j-1 + y j , 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. 1

description

Breve resumen de la complejidad del método simplex y repaso de algunos métodos de puntos interiores para la programación lineal.

Transcript of Complejidad del método simplex y métodos de puntos interiores

Page 1: Complejidad del método simplex y métodos de puntos interiores

Complejidad Computacional del Metodo Simplex

y Metodos de Puntos Interiores*

Omar Trejo - 119711

Octubre, 2013

1. Tiempo Exponencial

La idea general del metodo Simplex para resolver problemas de programa-cion lineal es recorrer las aristas, vertice por vertice, de un polıtopo (regionfactible) revisando su optimalidad en cada paso. La cantidad maxima de verti-ces dados por el sistema Ax ≤ b (que define el polıtopo del problema), dondeA ∈ Rmxn, es

(nm

), aunque cotidianamente se prueba un numero menor que este.

Sin embargo, el hecho de que la cantidad de pruebas necesarias este relacionadaa una expresion combinatoria indica un posible problema con la complejidadcomputacional del algoritmo.

1.1. Problema Klee-Minty

El ejemplo utilizado cotidianamente para demostrar la complejidad exponen-cial del metodo Simplex es el problema Klee-Minty. La idea basica es deformarun hipercubo de tal manera que el metodo deba recorrer todas las aristas antesde llegar al punto optimo. Inicialmente fue propuesto en 1972 por Klee y Mintycon la forma

maximizarx

yn

s.a. εyj−1 ≤ yj ≤ 1− εyj−1, j = 2, . . . , n,

yj ≥ 0, j = 1, . . . , n.

Poco despues Chvatal propuso[3] el cambio de variable x1 = y1, xj =(−1/ε)yj−1 + yj , lo que permite formular el problema como es mas popular-

*Este documento no contiene un tratado riguroso de los metodos. Se crea a manera deresumen y se omiten muchos detalles tecnicos.

1

Page 2: Complejidad del método simplex y métodos de puntos interiores

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

mente conocido,

maximizarx

n∑k=1

10n−kxk

s.a. 2

j−1∑k=1

10j−kxk + xj ≤ 100j−1, j = 1, . . . , n,

xj ≥ 0, j = 1, . . . , n.

Los resultados del problema Klee-Minty, utilizando el algoritmo programadoy mostrado en la seccion Codigo, son

Dimensiones Iteraciones

3 505 476 318 3510 45

Esto claramente muestra la complejidad exponencial del metodo. Por lo mis-mo, muchos de los esfuerzos comenzaron a enfocarse en metodos de puntosinteriores, los cuales exhibıan caracterısticas deseables como complejidad poli-nomial.

2. Metodos de Puntos Interiores

Los metodos de puntos interiores han sido foco de atencion desde que semostro que existen problemas de complejidad exponencial para el metodo Sim-plex, y existe una variedad estos.1 En esta seccion explicaremos brevemente el

1Un contraste interesante es que el metodo Simplex genera su complejidad del numero derestricciones que presenta el problema, mientras que los metodos de puntos interiores generan

2

Page 3: Complejidad del método simplex y métodos de puntos interiores

metodo elipsoidal y el metodo primal-dual infalible, y dejaremos de lado losdemas por cuestiones de espacio. La tabla[4] presentada continuacion resume lainformacion.

Ano Metodo Autor Caracterıstica

1947 Simplex Dantzig Eficiente en la practica1979 Elipsoidal Khachiyan Ineficiente en la practica1990 Primal-Dual Kojima, Mizuno, Yoshise Metodo Dominante

Infactible

2.1. Metodo Elipsoidal de Khachiyan

2.1.1. ¿En que consiste?

La idea basica del metodo elipsoidal se deriva de investigaciones previas,durante los anos sesenta y setenta, dentro de lo que era la Union Sovietica.De manera burda, la idea es encerrar la region de interes en una sucesion deelipsoides que decrecen de tamano cada vez mas. La contribucion de Khachiyanfue demostrar en sus dos publicaciones -publicadas en 1979 y 1980- que bajociertas condiciones el metodo tiene complejidad polinomial para problemas deprogramacion lineal.

2.1.2. ¿Como se construye el punto inicial y la sucesion de elipsoi-des?

El metodo construye una elipsoide inicial que cubre P , el conjunto de fac-tibilidad, completamente. Se toma el centro de ese elipsoide y se identifica sise encuentra dentro de la region factible P . Si se encuentra dentro, el proble-ma es factible, si no se encuentra dentro se puede construir un elipsoide nuevo(en tiempo polinomial), tomando en cuenta la variable que corresponde a larestriccion de ATx ≤ b que es violada, que cubra completamente la mitad delelipsoide anterior del lado donde se encuentra P . Procedemos de esta manerahasta que se encuentra un centro dentro de la region factible, o se alcanza elnumero maximo de iteraciones disponibles (el resultado en este caso serıa queel problema es no factible).

2.1.3. ¿Por que es un metodo polinomial?

Bajo dos condiciones, que explicaremos a continuacion, Bertismas y Tsitsiklismostraron[5] que el metodo elipsoidal resuelve problemas de programacion linealen tiempo O(m4 log(R/r)). Antes de definir las condiciones debemos definir elconjunto poliedrico del problema (representacion del problema de programacionlineal de manera vectorial):

P = {x ∈ Rm : aTj x ≤ cj , j = 1, . . . , n}

su complejidad debido al numero de variables en el problema.

3

Page 4: Complejidad del método simplex y métodos de puntos interiores

Figura 2: Elipsoides con y sin region factible[8].

Si P 6= ∅ el problema tiene solucion. Las dos condiciones para que el algoritmoconverja 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 6= ∅ =⇒ S(x∗, r) ⊂ Y,

donde S(y, r) es una bola con centro en y y radio r. La primer condicionimplica que P esta acotado. La segunda condicion 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 elip-soide necesaria. La parte computacionalmente mas compleja del metodo es preci-samente la construccion del elipsoide de volumen mınimo. Sin embargo, sabemosque este proceso es de complejidad polinomial, por lo que, de manera burda,podemos extender esto al hecho de que el metodo es de complejidad polinomial.En la teorıa se pueden construir (con aritmetica exacta) sucesiones infinitas deelipsoides, pero en la practica (aritmetica de precision finita) se establece unacota al numero de iteraciones que si es superada el problema se considera queeste es infactible.

2.1.4. ¿Cual es la relevancia teorica del metodo y por que no espractica su implementacion para programacion lineal?

La relevancia teorica del metodo reside en el hecho de que antes de la publi-cacion del mismo no se habıan logrado clasificar los problemas de programacionlineal en alguno de los conjuntos de problemas P o NP, i.e. los que se puedenresolver en tiempo polinomial y los que no, respectivamente. Se creıa que es-tos problemas no tienen una complejidad tal que deben ser clasificados en NP,pero nadie habıa conseguido demostrar su pertenencia a P hasta que Kachiyanpublico su metodo elipsoidal. Ademas el metodo sirve para construir algorit-mos para problemas de optimizacion convexa, que son mas generales que los deprogramacion lineal.

4

Page 5: Complejidad del método simplex y métodos de puntos interiores

La experiencia computacional muestra que las iteraciones necesarias pararesolver problemas de programacion lineal usando este metodo se encuentranmuy cercanas al lımite teorico superior. Esto significa que practicamente el al-goritmo no es muy bueno. El metodo Simplex, aunque tiene una complejidadexponencial, en la practica la experiencia muestra que son necesarias muchasmenos iteraciones que el lımite teorico maximo, haciendolo un candidato paraaplicaciones practicas.

2.2. Metodo Primal-Dual Infactible de Kojima, Mizuno &Yoshie

2.2.1. ¿En que consiste?

El metodo consiste en tomar un punto nuevo en cada iteracion a lo largode la direccion de Newton, en la direccion de la trayectoria central, como lohacen otros metodos de puntos interiores. La diferencia es que este metodo norequiere que los puntos esten dentro de la region factible. Este metodo aplicapasos largos y distintos entre el los problemas primal y dual, y se caracterizapor convergencia global en tiempo polinomial2

2.2.2. ¿Como se construye el punto inicial y la sucesion de puntos?

Dado que es un metodo infactible, tenemos que no es necesario construir unpunto inicial, i.e. cualquier punto (xi, yi, zi) en el espacio, con xi ≥ 0, zi ≥ 0,convergera eventualmente a una solucion. Es necesario notar que hay casos enprogramacion no-lineal donde esta solucion puede ser no-optima, pero en el casode programacion lineal, siempre convergera a una solucion optima.

La sucesion de puntos se construye utilizando los problemas primal y dual

P : minimizarx

cTx

s.a. Ax = b, x ≥ 0

D : maximizary,z

bT y

s.a. AT y + z = c, z ≥ 0

En cada iteracion se resuelve el sistema A 0 00 AT IZk 0 Xk

∆x∆y∆z

= −

Axk − bAT yk + zk − cXkZk − µe

donde Zk y Xk son las matrices con la diagonal igual a zk y xk, respecti-

vamente. Cada una de las restricciones (ecuaciones del sistema lineal) vienen

2Para ser rigurosos deberıamos definir los conceptos direccion de Newton, trayectoria cen-tral, pasos largos, problema primal y problema dual. Sin embargo, por cuestiones de espaciono profundizaremos en ellos.

5

Page 6: Complejidad del método simplex y métodos de puntos interiores

de la busqueda de cerar la brecha en la restriccion de factibilidad de P , la res-triccion de factibilidad de D y la restriccion de la brecha entre los problemas,XkZk = µe, respectivamente. Posteriormente se actualizan las variables

(xk+1, yk+1, zk+1) = (xk, yk, zk) + α(∆x,∆y,∆z)

Los detalles tecnicos, por ejemplo como escoger α en cada iteracion, la ob-tencion de la factibilidad, la convergencia global o la identificacion de la no-factibilidad, no seran explicados en este documento. Sin embargo, esto no sig-nifica que carezcan de gran importancia.

2.2.3. ¿Por que es un metodo polinomial?

Aunque el calculo de cada iteracion es significativamente mas alto que elmetodo Simplex, cada iteracion conlleva progreso mucho mas significativo haciael optimo, suponiendo que existe. Ademas es un camino mucho mas directo (si-gue el llamado central path). La complejidad del algoritmo radica en la solucionde un sistema de ecuaciones lineales que, aunque puede ser complicado, sabe-mos que podemos hacer en tiempo polinomial, por lo que el algoritmo tambienmuestra tiempo polinomial3.

2.2.4. ¿Cual es la relevancia del metodo y por que es practica suimplementacion para programacion lineal?

El metodo se encuentra dentro de los mas populares hoy en dıa y exhibelos mejores resultados practicos. En promedio le toma entre 23 y 25 iteracionesresolver los problemas mas complejos (con solucion) que existen hoy en dıa enprogramacion lineal. Ademas, teoricamente es importante el metodo porque nose restringe a comenzar con puntos dentro de la region factible, lo que puedepresentar un problema en sı mismo.

3. Codigo - Metodo Simplex Revisado

El codigo aquı presentado es una pequena variacion del metodo Simplex queutiliza un tableu mas pequeno porque no guarda espacio para las columnas Bde A = [N |B] que contienen la identidad en cada iteracion. En realidad noes necesario almacenar esta identidad. La utilizacion de este metodo es paramejorar el desempeno en el RAM de la computadora4.

/** Programacion Lineal - Metodo Simplex Revisado

* Omar Trejo Navarro

* 119711

*

3Claramente esta es una implicacion burda y es necesario sustentarla de manera rigurosa,pero dicha prueba no sera presentada en este texto.

4Para los problemas pedagogicos que resolveremos en clase este detalle es intrascendente.

6

Page 7: Complejidad del método simplex y métodos de puntos interiores

* r := y = maximizar, n = minimizar

* nv := numero de variables de funcion objetivo

* nr := numero de restricciones

* t := tableu

* tipo := 1 = maximizar, -1 = minimizar

* ai := auxiliar para inputs

* optimo := true = alcanzado, false = no alcanzado

* xmax := maximo de coeficientes de funcion objetivo

* bamin := mininmo de b_i/a_ij

* aux := variable auxiliar

* rp := indice del renglon pivote

* cp := indice de la columna pivote

* error := true = no acotado, false = acotado

* CMAX := maxima cantidad de restricciones

* VMAX := maxima cantidad de variables

**/

#include <stdio.h>#include <math.h>

#define CMAX 10#define VMAX 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 objetivoprintf("\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 ? ");

7

Page 8: Complejidad del método simplex y métodos de puntos interiores

scanf("%lf", &ai);t[1][1] = ai * tipo;// Restriccionesfor (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 variablesfor (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 indicesaux = 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++)

8

Page 9: Complejidad del método simplex y métodos de puntos interiores

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-acotadofor (i = 2; i <= nr + 1; i++)

if (t[i][1] < 0)// TODO: Avisar que es no acotadoerror = true;

// Revisar si es optimoif (error == false)

for (j = 2; j <= nv + 1; j++)// TODO: Revisar si hay solucion multipleif (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

9

Page 10: Complejidad del método simplex y métodos de puntos interiores

printf(" No hay solucion.\n\n");}

int main() {datos();simplex();resultados();

}

Referencias

[1] Stephen J. Wright, Primal-Dual Interior Point Methods, Argonne NationalLaboratory, SIAM, 1997.

[2] Mokhtar S. Bazaraa, John J. Jarvis, Hanif D. Sherali, Linear Programmingand Network Flows, Wiley, 2010.

[3] Steven R. Dunbar, Worst Case and Average Case Behavior of the SimplexAlgorithm, 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 ManagementScience 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 infeasi-ble interior point algorithm for linear programming, Mathematical Program-ming, North-Holland, 1992.

[8] Steffen Rebennack Ellipsoid Method, Encyclopedia of Optimization, Sprin-ger, 2008.

10