Manual del estudiante de Ingeniería en Sistemas de UTN/Investigación Operativa/Programación Lineal

De testwiki
Ir a la navegación Ir a la búsqueda

Método Simplex

Descripción

Este método requiere contar con una solución básica factible inicial. A partir de este vértice se mueve a través de una secuencia de soluciones básicas factibles, que mejoran o mantienen el valor de la función objetivo anterior. En cada paso deben cumplirse las siguientes condiciones:

Condición de optimalidad

Significa que debe garantizarse que durante el procedimiento, ninguna solución puede ser peor que la anterior.

Condición de factibilidad

Significa que debe garantizarse que si se parte de una solución factible, sólo se hallarán soluciones factibles. El método requiere que el problema esté en su forma estándar.

[Max|Min]X0=c_Tx_
S.a:
A__x_ =b_
x_0_


Proceso iterativo

Para comenzar a trabajar, hace falta una solución básica factible. Si las restricciones son de menor o igual, una variable de holgura se sumará al lado izquierdo, ya que a ese lado, a lo sumo le sobrará algo para equiparar al derecho:

i=1nxiaijbj j
i=1nxiaij+sj=bj j

En este caso, una solución factible es xi=0i, de manera que:

i=1nxiaij+sj=bjj

0+sj=bjj

Entonces:

sj=bjj

De manera que se cumple la restricción de no negatividad, ya que

sj=bj0j

Si, en cambio, aparece una restricción de mayor o igual, una variable de holgura se restará al lado izquierdo, ya que a ese lado, a lo sumo le faltará algo para equiparar al derecho:

i=1nxiaijbj j
i=1nxiaijsj=bj j

En este caso, xi=0i no es una solución factible, ya que:

i=1nxiaijsj=bjj

0sj=bjj

Entonces:

sj=bj0j

De manera que no se cumple la restricción de no negatividad, entonces el punto resulta no factible.

Por último, si la restricción fuera de igualdad, no se agrega ninguna variable de holgura, por lo que xi=0i implicaría que 0=bjj, lo cual resultaría inconsistente si j/bj0.

El vector de variables de decisión puede considerarse compuesto de dos vectores, uno de variables básicas y otro de variables no básicas, así como la matriz de coeficientes y el vector de costos.

A__=[a1,1a1,na2,1a2,nan,1an,n]BPx1Pxn[a1,n+1a1,ma2,n+1a2,man,n+1an,m]NPxn+1Pxm x_=[x1xnxn+1xm])x_B)x_N c_=[cx1cxncxn+1cxm])c_B)c_N

El problema lineal puede escribirse

[Max|Min]X0=c_BTx_B+c_NTx_N
S.a:
B__x_B+N__x_N =b_
x_B,x_N0_

El valor de las variables básicas puede obtenerse a partir de las restricciones:

B__x_B+N__x_N=b_

Como las variables no básicas valen cero:

B__x_B+N__x_N0=b_

B__x_B=b_

x_B=B__1b_

Simplex encuentra un nuevo vértice asignando un valor no negativo a una de las variables actualmente no básicas. Esta variable que ingresa a la base, debe elegirse de tal manera que al hacerlo mejore la función objetivo. Se busca poner el nuevo valorPlantilla:Ref de X0 en función del valor anterior. Para eso, usamos los vectores x_B y x_N , que representan a las mismas variables que en la iteración anterior, pero cuyo valor será ahora un valor nuevo. Tenemos entonces la siguiente igualdad:

B__x_B+N__x_N=b_

Pero en este caso, las variables del vector x_N no tienen necesariamente valor 0, por lo tanto no se puede anular el término N__x_N, entonces:

B__x_B=b_N__x_N

x_B=B__1b_B__1N__x_N

Quedan así los valores nuevos de x_B en función de los valores de x_B en la iteración anterior Plantilla:Ref y de B__1N__x_N.

Se puede expresar ahora el nuevo valor de la función objetivo X0 en función de estos vectores viejos con valores nuevos:

X0=c_Tx_

X0=c_BTx_B+c_NTx_N

X0=c_BT(B__1b_B__1N__x_N)+c_NTx_N

X0=c_BTB__1b_c_BTB__1N__x_N+c_NTx_N

X0=c_BTB__1b_(c_BTB__1N__c_NT)x_N

Representando el segundo término componente a componente Plantilla:Ref:

X0=c_BTB__1b_jVNB[(c_BTB__1P_jcj)xj]

Donde:

X0=c_BTB__1b_X0 de la iteracion anteriorjVNB[(c_BTB__1P_jzjcj)xj]

Queda así expresado el nuevo valor de X0 en función del valor anterior:

X0=c_BTB__1b_jVNB[(zjcj)xj]

Garantizar que el segundo término no empeore el nuevo valor significa garantizar que en la nueva iteración la función objetivo no empeore. Cambiando el valor de una sola variable (en realidad, vamos a controlar el valor de cada una por separado), se puede controlar el valor del término completo. Esto es así porque entre los nuevos valores de las variables no básicas de la iteración anterior, sólo uno de ellos será diferente de 0 en la iteración nueva, y como todos los valores deben ser positivos, se puede fijar un signo para el término zjcj de tal manera que se garantice optimalidad.

Condición de optimalidad

Para mejorar la función objetivo respecto del valor anterior, dado que

X_0=X_0anteriorjVNB[(zjcj)xj], y ya que zjcj será diferente de cero para un solo j, deberá buscarse el mejor valor de zjcj, que será:

  • zjcj>0 si es un problema de minimización, ya que esto disminuirá el valor de la función objetivo.
  • zjcj<0 si es un problema de maximización, ya que esto aumentará el valor de la función objetivo.

Se elegirá el más positivo o el más negativo en cada caso, e ingresará la variable xj a la base. Esto garantizará que la función objetivo no empeore al realizar este paso.

Condición de factibilidad

Luego, una de las variables que estaban en la base debe salir. Las condiciones que deben cumplirse para la variable que sale de la base son:

  • Todas las variables que eran básicas en la iteración anterior deben permanecer con valores no negativos.
  • La variable saliente tomará el valor de 0.

Como habíamos caracterizado a x_B como el vector viejo con valores nuevos, la primera restricción puede representarse:

x_B=B__1b_B__1N__x_N0_ Plantilla:Ref

En este punto, xj ya está elegido, y es el único valor distinto de 0 en x_N, de manera que:

x_B=B__1b_B__1P_jxj0_

Tomando la condición elemento por elemento:

(x_B)i=(B__1b_)i(B__1P_j)ixj0_ iVB

Este conjunto de condiciones limita el valor de xj:

xj(B__1b_)i(B__1P_j)i iVB

La condición que más limite el valor de xj será la que en definitiva fije su valor. El elemento que debe salir de la base (hacerse 0), es aquel que fija el valor de xj. Sea i la posición del elemento saliente dentro del vector x_B:

i=iVBrmin[(B__1b_)i(B__1P_j)i]

Siendo VBr el conjunto de variables básicas que restringen el valor de xj, que son aquellas con índice i tal que (B__1P_j)i>0. Esto es así porque, como (B__1b_)i es el valor anterior del vector de variables básicas en la posición i, es decir (B__1b_)i=(x_B)ianterior, y por eso será siempre no-negativo, entonces, si (B__1P_j)i0, la condición (x_B)i=(B__1b_)i(B__1P_j)ixj0_ se cumplirá en todo caso para ese i particular, de manera que la condición en dicha posición i no restringe el valor de xj.

Si a B__1P_j lo llamamos αj_, se puede expresar el valor del índice saliente como:

i=imin[(x_B)ianterior(αj_)i] i/(αj_)i>0



Plantilla:Nota Es decir, el valor en el próximo punto, el de la siguiente iteración.

Plantilla:Nota x_Banterior=B__1b_

Plantilla:Nota Siendo VNB el conjunto de los índices correspondientes a las variables no-básicas.

Plantilla:Nota Se utiliza esta nomenclatura para expresar que todos los elementos de x_B deberán ser mayores que cero.