Algoritmo de pivote

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda

Los algoritmos de pivote (o algoritmos de cambio de base) son algoritmos de la optimización matemática, y en especial de la Programación Lineal. Dado un sistema de ecuaciones lineales cuyas variables deben adoptar valores no negativos (esencialmente lo mismo que un sistema de inecuaciones lineales), se busca la mejor de entre muchas soluciones alternativas, es decir, una solución óptima del sistema. En cada paso de tal búsqueda, el algoritmo transforma el sistema sin alterar su conjunto de soluciones. Algoritmos de pivote importantes son los diversos algoritmos simplex[1] [2] y los algoritmos criss-cross.[3]

Los algoritmos de pivote son de gran importancia para el tratamiento de inecuaciones lineales, donde juegan un papel análogo al de la eliminación de Gauss para ecuaciones lineales. Se encuentran numerosas aplicaciones[2] de sistemas de inecuaciones en áreas tan diversas como la investigación de operaciones industriales, el transporte y distribución de bienes, en carteras de valores, la ingeniería estructural, la estadística, y la teoría de juegos. Frecuentemente se abordan sistemas con decenas de miles de variables.[4]


Procedimiento general[editar]

El problema normalizado[editar]

Todo algoritmo de pivote parte de un sistema especialmente arreglado de ecuaciones lineales, cuyas variables todas, excepto tal vez una, deben tomar valores no negativos. De hecho, cualquier sistema de inecuaciones o ecuaciones lineales, así como todo problema de Programación Lineal, puede siempre reducirse a la siguiente forma diccionario:[1] [2]

\begin{matrix}
z       & = & f     & + & d_1\,x_1 & + & \cdots & + &  d_n\,x_n
\\[3pt]
x_{n+1} & = & b_{n+1}     & + & G_{n+1,1}\,x_1 & + & \cdots & + & G_{n+1,n}\,x_n
\\
\vdots  &   & \vdots  &   &  \vdots   &   &        &   &  \vdots
\\
x_{n+m} & = & b_{n+m}     & + & G_{n+m,1}\,x_1 & + & \cdots & + & G_{n+m,n}\,x_n
\end{matrix}

\begin{matrix}
x_1\ge0,\ \ldots\ x_{n+m}\ge0,\quad  \max~z
\end{matrix}

donde los f,\;d_j,\;b_i,\;G_{i,j} son números reales (en la práctica casi siempre números racionales). Este formato especifica que se busca valores para las incógnitas \,x_1, \ldots x_{n+m},\ z\,, que satisfagan las ecuaciones e inecuaciones del sistema anterior de modo tal que la variable objetivo \,z tome el mayor valor posible. Definiendo los conjuntos de índices

D = \{1,\ldots,n\},\quad B = \{n+1,\ldots,n+m\}

se escribirá ésto en lo que sigue de la forma más compacta

\begin{matrix}
& & z    & = &  f    & + &  \sum_{j\in D}\, d_j\, x_j
\\[6pt] \forall~ i\in B
& & x_i  & = &  b_i  & + &  \sum_{j\in D}\, G_{i,j}\, x_j
\end{matrix}

\begin{matrix}
x_1\ge0,\ \ldots\ x_{n+m}\ge0,\quad  \max~z
\end{matrix}

En cada iteracion de un algoritmo de pivote se destaca un conjunto de variables independientes, mientras que las restantes son variables dependientes y se expresan como funciones lineales de las primeras. Al pasar de una iteración a la siguiente se intercambia una variable independiente por una dependiente; tales pares de variables se denominan pivotes.

Condiciones de optimalidad[editar]

En caso de que se cumplan las siguientes dos condiciones de optimalidad,

  • b_i\ge0  para todo  i\in B  (sistema factible)   y
  • d_j\le0  para todo  j\in D  (sistema acotado),

podemos obtener una solución al problema anterior, asignando a las variables independientes del sistema los valores \,x_1=0, \ldots, x_n=0\,.  Por un lado, esto logra que las variables dependientes \,x_{n+1}=b_{n+1}, \ldots, x_{n+m}=b_{n+m}\, adopten valores nonegativos, tal como se pedía. Por otro lado, toda solución alternativa al problema debe satisfacer la relación \,z\le f\,,  ya que en ella las variables independientes también deben tomar valores nonegativos.

( Por ejemplo, en el siguiente sistema,

\begin{matrix}
z   & = &~~ ~0 &- ~3x_1 &+ ~~\mathbf{x_2}
\\[2pt]
x_3 & = &~~ ~3 &- ~~x_1 &- ~~x_2
\\[2pt]
x_4 & = &~~ ~8 &+ ~2x_1 &- ~4x_2
\\[2pt]
x_5 & = &-  ~\mathbf{1} &+ ~3x_1 &+ ~~x_2
\end{matrix}

las condiciones de optimalidad son violadas en dos lugares, ya que  b_5=-1<0  y  d_2=+1>0.  Por un lado, los valores obtenidos al anular las variables independientes,  x_1=x_2=0,  no constiuyen una solución admisible porque contienen un valor negativo,  x_5=-1.  Por otro lado, no podemos descartar la posibilidad de aumentar el valor que adopta la variable objetivo  \;z=-3x_1+x_2\;  eligiendo conjuntos de variables independientes con x_2>0. )

Transformación de las ecuaciones[editar]

En el caso habitual de que las condiciones de optimalidad no se cumplan, puede reformularse el sistema de ecuaciones, eligiendo adecuadamente un nuevo subconjunto \,B\, de entre las \,n+m\, incógnitas, y expresando las incógnitas elegidas en función de las incógnitas restantes.  Sea \omega un reordenamiento de las variables, es decir una función de los índices que cumpla

\{ x_{\omega(1)},\ldots x_{\omega(n+m)} \} = \{ x_1,\ldots x_{n+m} \}.

A partir de la partición \pi = \bigl(D(\pi),~B(\pi)\bigr) con

D(\pi) = \{\omega(1),\ldots,\omega(n)\},\quad B(\pi) = \{\omega(n+1),\ldots,\omega(n+m)\},

que divide las variables del sistema en variables independientes x_j con j\in D(\pi) y las llamadas variables básicas x_i con i\in B(\pi), se construye entonces el sistema:

\begin{matrix}
& & z    & = &  f^\pi    & + &  \sum_{j\in D(\pi)}\, d^\pi_j\, x_j
\\[6pt] \forall~ i\in B(\pi)
& & x_i  & = &  b^\pi_i  & + &  \sum_{j\in D(\pi)}\, G^\pi_{i,j}\, x_j 
\end{matrix}

\begin{matrix}
x_1\ge0,\ \ldots\ x_{n+m}\ge0,\quad  \max~z
\end{matrix}

Nótese que los coeficientes G^\pi_{i,j} existen sólo para pares de subíndices con i\in B(\pi) y con j\in D(\pi). En cada iteración, los coeficientes del sistema así modificado vuelven a examinarse para ver si satisfacen las condiciones de optimalidad

  • b^\pi_i\ge0  para todo  i\in B(\pi)  (sistema factible)   y
  • d^\pi_j\le0  para todo  j\in D(\pi)  (sistema acotado),

y de este modo generan una posible solución al problema. Un resultado estándar de la Programación Lineal establece que todo problema que tiene soluciones también posee un conjunto de variables básicas que conduce a una de ellas.[1] [2] Si los coeficientes del sistema satisfacen las condiciones de optimalidad, se dice que las variables básicas forman una base optimal del problema.

Pivotes admisibles[editar]

Un coeficiente no nulo \,G^\pi_{k,l}\ne0\, del sistema de ecuaciones se llama elemento pivote, porque permite despejar la variable independiente \,x_l\, en lugar de la variable básica \,x_k\,, para así seguir buscando una solución al problema. Sin embargo, los algoritmos de pivote no eligen un elemento pivote cualquiera, sino solamente los llamados pivotes admisibles (x_k,\,x_l), que deben satisfacer:

  • O se cumple simultáneamente  \,b^\pi_k<0\,   y   \,G^\pi_{k,l}>0\,   (pivote de restricción),
  • ó se cumple simultáneamente  \,d^\pi_l>0\,   y   \,G^\pi_{k,l}<0\,   (pivote de objetivo).

( En el ejemplo anterior,

\begin{matrix}
z   & = &~~ ~0 &- ~3x_1 &+ ~~~\mathbf{x_2}
\\[2pt]
x_3 & = &~~ ~3 &- ~~x_1 &- ~~~\underline{\mathbf{x_2}}
\\[2pt]
x_4 & = &~~ ~8 &+ ~2x_1 &- ~\underline{\mathbf{4x_2}}
\\[2pt]
x_5 & = &-  ~\mathbf{1} &+ ~\underline{\mathbf{3x_1}} &+ ~~~\underline{\mathbf{x_2}}
\end{matrix}

el coeficiente no optimal  b_5<0  permite seleccionar el elemento pivote  G_{5,1}=+3>0,  correspondiente a un pivote admisible con intercambio de (x_5,\,x_1), ó también el elemento pivote  G_{5,2}=+1>0  correspondiente al pivote admisible (x_5,\,x_2).  Alternativamente, el coeficiente no optimal  d_2>0  permite también seleccionar el elemento pivote  G_{3,2}=-1<0  correspodiente al pivote admisible (x_2,\,x_3),  ó el elemento pivote  G_{4,2}=-4<0  con el pivote admisible (x_2,\,x_4). )

La restricción a pivotes admisibles impide que en dos iteraciones sucesivas se elija el mismo pivote. Las reglas según las cuales el pivote es elegido dependen del algoritmo de pivote particular. No obstante, debe imponerse que el algoritmo termine en un número finito de pasos, lo que no sucede con una elección de pivotes inadecuada. Fukuda & Terlaky demostraron[5] en 1999 que para todo problema con solución y para toda base inicial existe una secuencia de a lo más \,n+m\, pivotes admisibles que conduce a una base optimal. Lamentablemente, esa demostración no es constructiva en el sentido de que indique cuál pivote deba elegirse en cada paso.

Como se puede observar de las definiciones anteriores, una base optimal no tiene pivotes admisibles, por lo que el algoritmo no puede ser continuado a partir de una base optimal. Por otro lado, es fácil demostrar con argumentos similares a los expuestos que una base no optimal sin pivotes admisibles siempre pertenece a un problema sin solución; sea esto, porque el sistema de ecuaciones e inecuaciones no tiene solución alguna (problema infactible), o porque existen soluciones con un valor objetivo z\, arbitrariamente grande (problema no acotado).


Implementación y ejemplo[editar]

Problemas con muchas variables[editar]

La implementación computacional de problemas prácticos a menudo dista mucho de ser trivial.[6] Los coeficientes de sistemas con decenas de miles de variables siempre presentan una u otra estructura, la cual debe ser aprovechada para determinar los sistemas de iteraciones subsecuentes de manera relativamente rápida y numéricamente estable (sin mayores errores de redondeo):

  • Los sistemas iniciales de problemas grandes (no los sistemas transformados) contienen una inmensa mayoría de coeficientes iguales a cero (el sistema es disperso), lo que permite ahorrar muchas operaciones aritméticas si se recurre al sistema de partida.
  • Muchos procedimientos se basan en una evaluación retardada, donde se calcula sólo aquellos coeficientes de un sistema que sean necesarios para determinar un pivote, y ésto solamente en el instante en que se ocupan. Para evitar la evaluación de coeficientes superfluos tales procedimientos emplean permutaciones de las variables en el sistema de partida, factorizaciones de las inversas de matrices básicas, una factorización de la matriz de coeficientes, y otras técnicas más. En todos estos casos suele ser necesario referirse a sistemas de iteraciones previas a la última, por lo que las transformaciones adoptan formas bastante más complejas que la directa.
  • A menudo se encuentran insertas en la estructura del sistema diversas estructuras especiales, por ejemplo de flujos en redes,[1] [7] y para tales estructuras especiales se ha desarrollado implementaciones particularmente eficientes.

No obstante lo anterior, hay también muchas aplicaciones que dan origen a problemas de tamaño moderado, problemas para los cuales basta una implementación simple.

Una implementación directa[editar]

Para evitar errores de redondeo se trabaja en lo que sigue con números racionales, eligiendo un único denominador común para todo el sistema de ecuaciones. Para encontrar un denominador así en cada paso del algoritmo no hace falta analizar los coeficientes del sistema; en caso de un sistema inicial con coeficientes enteros, en cada iteración se cumplirá que

  • El numerador del elemento pivote es un denominador común para el sistema de ecuaciones siguiente.

Al evaluar los coeficientes de un nuevo sistema el denominador común del sistema anterior quedará obsoleto, por lo que se procede a dividir los coeficientes del sistema nuevo por el denominador antiguo, con resultados que siempre serán enteros.[8]


Un arreglo matricial que contiene los coeficientes de un sistema de pivote suele llamarse tabla de pivoteo o cuadro de pivoteo. El siguiente esquema muestra cómo cambian los coeficientes del sistema de pivoteo al pasar de una iteración a la que sigue:

\begin{matrix}
\delta\,x_i &\!=\!& (~~\alpha) &\!\!\!x_j &\!+\!& (~~\sigma)          &\!\!\!x_s      \\[6pt]
\delta\,x_r &\!=\!& (~~\zeta)  &\!\!\!x_j &\!+\!& (~~p)               &\!\!\!x_s
\end{matrix}

  {x_r\leftrightarrow x_s}  

\begin{matrix}
p\,x_i &\!=\!& (\textstyle\frac{\alpha p\,-\,\zeta\sigma}{\delta}) &\!\!\!x_j   &\!+\!\!& (~\sigma) &\!\!\!x_r \\[6pt]
p\,x_s &\!=\!   & (~ -\zeta~) &\!\!\!x_j &\!+\!\!   & (~\delta) &\!\!\!x_r \\
\end{matrix}

En ese esquema, el símbolo \delta designa al denominador común del sistema de ecuaciones, el símbolo p designa al numerador del elemento pivote, \zeta designa cualquier coeficiente restante en la misma fila del elemento pivote, \sigma designa cualquier coeficiente restante en la misma columna del elemento pivote, y \alpha cualquier coeficiente ajeno a la fila y a la columna del pivote. Los coeficientes d^\pi_j de la variable a maximizar (x_i\!=\!z\,) y los coeficientes b^\pi_i de la columna de valores (x_j\!=\!1\,) se transforman de acuerdo a las mismas reglas.


Las ilustraciones en cada paso del ejemplo siguiente muestran todas el mismo sistema de ecuaciones graficado en distintos sistemas de coordenadas. En estos gráficos,

  • el área bordeada de verde es el conjunto de soluciones factibles, para el cual todas las variables toman valores no negativos,
  • los ejes de coordenadas corresponden a ecuaciones x_k=0 de variables independientes, las demás rectas a ecuaciones de variables básicas,
  • la recta en rojo recorre los puntos donde la variable objetivo adopta su valor máximo,
  • las intersecciones de rectas correspondientes a pivotes admisibles llevan puntos rojos, el pivote seleccionado va bordeado de negro, y
  • el área anaranjada corresponde al ortante no negativo de la iteración siguiente.


Ejemplo de elección de pivotes[editar]

La siguiente estrategia de elección de pivote corresponde al algoritmo criss-cross con pivoteo en los índices mínimos (minimal index criss-cross-algorithm). En cada paso, el pivote admisible se elegirá de acuerdo a la siguiente regla (el mínimo de un conjunto vacío se considera igual a infinito):

  1. Determinar los índices r=\min\{i\in B(\pi) ~|~ b^\pi_i<0\}   y   s=\min\{j\in D(\pi) ~|~ d^\pi_j>0\}.
  2. Si se tiene r<s\,,  elegir el pivote (x_r,\,x_l)  donde  l=\min\{j\in D(\pi) ~|~ G^\pi_{r,j}>0\}.
  3. Si se tiene s<r\,,  elegir el pivote (x_k,\,x_s)  donde  k=\min\{i\in B(\pi) ~|~ G^\pi_{i,s}<0\}.

Se puede demostrar[3] que este criterio simple (aunque no siempre eficiente) conduce siempre a una base optimal en un sistema que tenga solución.


En el siguiente ejemplo se busca valores no negativos para las variables \,x_1\ge0,\ldots\ x_5\ge0\, que maximicen la variable adicional z\, satisfaciendo el siguiente conjunto de ecuaciones lineales:

\begin{matrix}
z   & = &( &~~ ~~0 &+ ~\mathbf{3x_1} &+ ~2x_2 &)~/~1
\\[2pt]
x_3 & = &( &~~ ~3 &- ~\underline{\mathbf{2x_1}} &- ~~x_2 &)~/~1
\\[2pt]
x_4 & = &( &~~ ~7 &- ~2x_1 &- ~3x_2 &)~/~1
\\[2pt]
x_5 & = &( &~~ ~4 &- ~3x_1 &- ~~x_2 &)~/~1
\end{matrix}

En el sistema inicial del ejemplo, los coeficientes no optimales son \,d_1=3\,, \,d_2=2\,, y todos los pivotes son admisibles. El criterio de selección, sin embargo, prescribe que despejemos \,x_1\, en lugar de \,x_3\;:

(Ilustración animada de un paso del algoritmo de pivote)
Cambio de la base 0 a la base 1

(para animar con Firefox, pulsar aquí y luego en la imágen, manteniendo presionado)

Con ello obtenemos:

\begin{matrix}
z   & = &( &~~ ~9 &- ~3x_3 &+ ~~\mathbf{x_2} &)~/~2
\\[2pt]
x_1 & = &( &~~ ~3 &- ~~x_3 &- ~~\underline{\mathbf{x_2}} &)~/~2
\\[2pt]
x_4 & = &( &~~ ~8 &+ ~2x_3 &- ~4x_2 &)~/~2
\\[2pt]
x_5 & = &( &-  ~1 &+ ~3x_3 &+ ~~x_2 &)~/~2
\end{matrix}

Ahora los coeficientes no optimales son \,d^\pi_2=1/2\, con los pivotes admisibles (x_2,\,x_1), (x_2,\,x_4), y el coeficiente \,b^\pi_5=-1/2\, con los pivotes admisibles (x_5,\,x_2), (x_5,\,x_3). En consecuencia, despejamos \,x_2\, en lugar de \,x_1\;:

(Ilustración animada de un paso del algoritmo de pivote)
Cambio de la base 1 a la base 2

(animado)

Se obtiene el sistema

\begin{matrix}
z   & = &( &~~ ~6 &- ~2x_3 &- ~~x_1 &)~/~1
\\[2pt]
x_2 & = &( &~~ ~3 &- ~~x_3 &- ~2x_1 &)~/~1
\\[2pt]
x_4 & = &( &-  ~\mathbf{2} &+ ~3x_3 &+ ~\underline{\mathbf{4x_1}} &)~/~1
\\[2pt]
x_5 & = &( &~~ ~1 &+ ~~x_3 &- ~~x_1 &)~/~1
\end{matrix}

El único coeficiente no optimal en este sistema es \,b^\pi_4=-2\, con los pivotes admisibles (x_4,\,x_1), (x_4,\,x_3); despejamos \,x_1\, en lugar de \,x_4\;:

(Ilustración animada de un paso del algoritmo de pivote)
Cambio de la base 2 a la base 3

(animado)

El sistema final es

\begin{matrix}
z   & = &( &~ 22 &- ~5x_3 &- ~~x_4 &)~/~4
\\[2pt]
x_2 & = &( &~~ ~8 &+ ~2x_3 &- ~2x_4 &)~/~4
\\[2pt]
x_1 & = &( &~~ ~2 &- ~3x_3 &+ ~~x_4 &)~/~4
\\[2pt]
x_5 & = &( &~~ ~2 &+ ~7x_3 &- ~~x_4 &)~/~4
\end{matrix}

Como este sistema satisface las condiciones de optimalidad, hemos obtenido la solución

z=22/4=5.5,  x_1=2/4=0.5,  x_2=8/4=2.0,  x_3=0,  x_4=0,  x_5=2/4=0.5


Dualidad[editar]

Problemas duales[editar]

A todo problema de programación lineal llevado a la forma básica arriba descrita se le puede asociar un problema dual de programación lineal. Con respecto a esa forma básica, la matriz de coeficientes del problema dual es la matriz negativa traspuesta de la matriz de coeficientes del problema original, lo que muestra de paso que el dual del problema dual es el problema original, llamado problema primal en ese contexto.

\begin{matrix}
w       & = & -f       & - & b_1\,y_{n+1}     & - & \cdots & - &  b_m\,y_{n+m}
\\[3pt]
y_1     & = & -d_1     & - & G_{n+1,1}\,y_{n+1} & - & \cdots & - & G_{n+m,1}\,y_{n+m}
\\
\vdots  &   & \vdots   &   &  \vdots          &   &        &   &  \vdots
\\
y_n     & = & -d_n     & - & G_{n+1,n}\,y_{n+1} & - & \cdots & - & G_{n+m,n}\,y_{n+m}
\end{matrix}

\begin{matrix}
y_1\ge0,\ \ldots\ y_{m+n}\ge0,\quad \max~w
\end{matrix}

ó, en notación compacta,

\begin{matrix}
& & w    & = &  (-f)    & + &  \sum_{i\in B}\, (-b_i)\, y_i
\\[6pt] \forall~ j\in D
& & y_j  & = &  (-d_j)  & + &  \sum_{i\in B}\, (-G_{i,j})\, y_i
\end{matrix}

\begin{matrix}
y_1\ge0,\ \ldots\ y_{n+m}\ge0,\quad  \max~w
\end{matrix}

(Precaución: Al usar la forma diccionario para escribir el problema dual, no es lícito sustituir \max~z,\,\max~w por \min~z,\,\min~w !)

Transformaciones sucesivas[editar]

La relación anterior entre los coeficientes de un par de problemas duales no se cumple solamente para el sistema de partida, sino que persiste paso a paso a través de un algoritmo de pivotes, siempre y cuando el pivote elegido en cada iteración sea el mismo en ambos problemas:

\begin{matrix}
& & w    & = &  (-f^\pi)    & + &  \sum_{i\in B(\pi)}\, (-b^\pi_i)\, y_i
\\[6pt] \forall~ j\in D(\pi)
& & y_j  & = &  (-d^\pi_j)  & + &  \sum_{i\in B(\pi)}\, (-G^\pi_{i,j})\, y_i
\end{matrix}

\begin{matrix}
y_1\ge0,\ \ldots\ y_{n+m}\ge0,\quad  \max~w
\end{matrix}

La relación de dualidad es particularmente fácil de observar en un sistema de pivoteo que tiene sólo dos variables independientes y dos variables despejadas. El sistema obtenido es el mismo si se intercambia el estado de dos de las variables y a continuación se construye el problema dual, o si se realiza estas operaciones en orden inverso:

\begin{matrix}
\delta\,x_i &\!=\!& (~~\alpha) &\!\!\!x_j &\!+\!& (~~\sigma)          &\!\!\!x_s      \\[6pt]
\delta\,x_r &\!=\!& (~~\zeta)  &\!\!\!x_j &\!+\!& (~~p)               &\!\!\!x_s
\end{matrix}

  {x_r\leftrightarrow x_s}  

\begin{matrix}
p\,x_i &\!=\!& (\frac{\alpha p\,-\,\zeta\sigma}{\delta}) &\!\!\!x_j   &\!+\!\!& (~\sigma) &\!\!\!x_r \\[6pt]
p\,x_s &\!=\!   & (~ -\zeta~) &\!\!\!x_j &\!+\!\!   & (~\delta) &\!\!\!x_r \\
\end{matrix}

-\,[\cdots]^{\,T} -\,[\cdots]^{\,T}

\begin{matrix}
\delta\,y_j &\!=\!& (-\alpha) &\!\!\!y_i &\!+\!& (-\zeta) &\!\!\!y_r  \\[6pt]
\delta\,y_s &\!=\!& (-\sigma) &\!\!\!y_i &\!+\!& (-p)     &\!\!\!y_r  \\
\end{matrix}

{y_s\leftrightarrow y_r}

\begin{matrix}
p\,y_j &\!=\!& (\frac{\zeta\sigma\,-\,\alpha p}{\delta}) &\!\!\!y_i &\!+\!\!& (~~\zeta) &\!\!\!y_s \\[6pt]
p\,y_r &\!=\!   & (~-\sigma~) &\!\!\!y_i   &\!+\!\!& (-\delta) &\!\!\!y_s \\
\end{matrix}


De esta relación de dualidad se concluye que toda base optimal para el problema primal provee también una base optimal para el problema dual. Al ejemplo anteriormente desarrollado le corresponde el problema dual

\begin{matrix}
~w~ & = &( &  ~~0  &- ~~3y_3  &- ~~7y_4  &- ~~4y_5 &)~/~1
\\[2pt]
y_1 & = &( &   -3  &+ ~~2y_3  &+ ~~2y_4  &+ ~~3y_5 &)~/~1
\\[2pt]
y_2 & = &( &   -2  &+ ~~~y_3  &+ ~~3y_4  &+ ~~~y_5 &)~/~1
\end{matrix}

\begin{matrix}
y_1\ge0,\ y_2\ge0,\ y_3\ge0,\ y_4\ge0,\ y_5\ge0,\ \max~w
\end{matrix}

El sistema optimal de este problema es entonces

\begin{matrix}
~w~ & = &( &  -22  &- ~~8y_2  &- ~~2y_1  &- ~~2y_5 &)~/~4
\\[2pt]
y_3 & = &( & ~~~5  &- ~~2y_2  &+ ~~3y_1  &- ~~7y_5 &)~/~4
\\[2pt]
y_4 & = &( & ~~~1  &+ ~~2y_2  &- ~~~y_1  &+ ~~~y_5 &)~/~4
\end{matrix}

En el problema original, la variable a maximizarse toma el valor óptimo z=22/4; el valor óptimo del problema dual es el negativo de este valor: el mayor valor posible que su variable objetivo puede adoptar es w=-z=-22/4=-5.5. Una posible solución óptima para el problema dual es

y_1=0,  y_2=0,  y_3=5/4=1.25,  y_4=1/4=0.25,  y_5=0.

Tratamiento conjunto[editar]

Una importante consecuencia teórica de la dualidad es la siguiente: para resolver problemas de optimización lineal no se requiere un algoritmo que maximice (o minimice) una de las variables, basta para ello cualquier algoritmo capaz de resolver sistemas de desigualdades lineales. Esto es así porque las relaciones de dualidad implican que toda base optimal para el problema primal también provee una base optimal para el problema dual, donde el valor óptimo de la variable w\, del problema dual es el negativo del valor óptimo de la variable z\, del problema original. Por tanto, para pares de soluciones óptimas se tiene

z+w ~=~ (\max z)\!+\!(\max w)   ~=~ (\max z)\!+\!(-\max z) ~=~ 0

Por otro lado, para pares de soluciones factibles de las cuales al menos una no es óptima se cumple

z+w ~<~ (\max z)\!+\!(\max w) ~=~ 0

De ahí podemos concluir que las soluciones óptimas para un par de problemas duales son exactamente las soluciones del siguiente sistema de desigualdades

\begin{matrix}
x_1\ge0,\ \ldots\ x_{n+m}\ge0,  \qquad  y_1\ge0,\ \ldots\ y_{m+n}\ge0,
\\
z\,+\,w\,\ge\,0
\end{matrix}

donde las variables   x_{n+1}\ldots x_{n+m},   y_1\ldots y_n,   z,w   se hayan sustituido por las expresiones lineales correspondientes. En el caso de aplicaciones prácticas, sin embargo, esta forma de proceder sólo es competitiva si se logra aprovechar adecuadamente la estructura de datos común a los sistemas primal y dual.


Herramienta interactiva[editar]

El applet de pivoteo interactivo de Robert Vanderbei, programado en 1997, permite definir un sistema de ecuaciones lineales de tamaño reducido y realizar en ese sistema pivoteos sobre pares arbitrarios de variables. La herramienta (en inglés) se autodenomina «Simplex Pivot Tool», pero está orientada a algoritmos de pivote totalmente arbitrarios. Para evitar redondeo, los coeficientes del sistema pueden también verse en forma de fracciones, aunque éstas no adoptan un denominador común.


Literatura complementaria[editar]


Referencias[editar]

  1. a b c d Vašek Chvátal (1983): Linear Programming., Freeman and Company, ISBN 0-716-71587-2
  2. a b c d Robert Vanderbei (1996/2007): Linear Programming; Foundations and Extensions, 3.ed. Springer, ISBN 978-0-387-74385-5, archivo pdf, (edición alternativa: Linear Programming; Foundations and Extensions, Kluwer, 1996, ISBN 0-7923-9804-1)
  3. a b Komei Fukuda & Tamás Terlaky (1997): Criss-cross methods: A fresh view on pivot algorithms, Mathematical Programming, 79, 369-395, archivo ps
  4. Robert Vanderbei: Linear Programming. Foundations and Extensions, Kluwer, ISBN 978-0-7923-9804-2}}, capítulo 21.4: Simplex Method vs Interior-Point Methods.
  5. Komei Fukuda & Tamás Terlaky (1999): On the Existence of a Short Admissible Pivot Sequences for Feasibility and Linear Optimization Problems, Pure Mathematics and Applications, vol.10, 431-447, archivo ps
  6. Robert Vanderbei: Linear Programming. Foundations and Extensions (= International Series in Operations Research & Management Science. Bd. 114). 3rd edition. Springer, New York NY 2007, ISBN 978-0-387-74387-5, Kapitel 8: Implementation Issues.
  7. Robert Vanderbei: Linear Programming. Foundations and Extensions (= International Series in Operations Research & Management Science. Bd. 114). 3rd edition. Springer, New York NY 2007, ISBN 978-0-387-74387-5, Kapitel 13: Network Flow Problems.
  8. Erwin Bareiss (1968): Sylvester's Identity and Multistep Integer-Preserving Gaussian Elimination, Mathematics of Computation, vol.22 (102), 565-578, archivo pdf