Programación Lineal. El Método Símplex

Transcripción

Programación Lineal. El Método Símplex
Universidad Politécnica de Madrid–Escuela Técnica Superior de Ingenieros Industriales
Grado en Ingeniería en Tecnologías Industriales. Curso 2015-2016-3º
Matemáticas de Especialidad–Ingeniería Eléctrica
Programación Lineal. El Método Símplex
José Luis de la Fuente O’Connor
[email protected]
[email protected]
Clase_simplex_2016.pdf
1/133
Índice
2/133
Introducción
Condiciones de punto óptimo
Mejora de una solución básica factible
El algoritmo Símplex
Degeneración y ciclado
Solución básica factible inicial
Análisis de sensibilidad
El método Símplex para variables acotadas
Implementaciones comerciales del método Símplex
El método Símplex en forma de “tableau”
Otras variantes y mejoras del Símplex
Complejidad computacional del método Símplex
3/133
Introducción
Para encontrar el óptimo del problema de PL
min. c T x
s. a Ax D b
x 0;
se podrían estudiar, uno a uno, los vértices o puntos extremos del politopo
P D fx 2 Rn W Ax D b; x 0; A 2 Rmn; b 2 Rng
y determinar aquél en el que la función objetivo se hace mínima.
Para m y n grandes, considerar todos es prohibitivo pues son
nŠ
:
mŠ.n m/Š
En 1947 George B. Dantzig culminó la investigación de un importante
equipo de ingenieros, matemáticos y economistas formulando el Método
Símplex.
4/133
George B. Dantzig, EE.UU. 1914-2005.
Sigue una estrategia de búsqueda del punto óptimo que no estudia todos los
vértices de un problema. Sus claves:
Encontrar un vértice desde el que comenzar: solución básica factible del
politopo P ;
Desplazarse desde ese punto extremo a otro, a lo largo de alguna arista de
P , mejorando con ello la función objetivo.
Repetir el paso anterior cuantas veces sea necesario hasta que se alcance la
solución óptima o la arista escogida lleve a 1.
5/133
Condiciones de punto óptimo
Teorema Condiciones de Karush-Kuhn-Tucker x 2 Rn es el óptimo del programa lineal
min. c T x
s. a Ax D b
x 0;
si y sólo si existen vectores 2 Rm y 2 Rn tales que
(i) Ax D b; x 0;
(factibilidad del problema primal)
T
(ii)
c D A C ; 0; (factibilidad del problema dual)
(iii) i xi D 0; i D 1; : : : ; n:
(holguras complementarias o gap de dualidad)
La condición i es la de factibilidad del problema, tal como está planteado.
6/133
La Función de Lagrange del problema es
T
T
L.x; ; / D c x .Ax
b/ x:
Su vector gradiente con respecto a x es c A T Igualado éste a 0 es la segunda condición, ii.
Joseph-Louis Lagrange,
1736- París, 1813.
T
Turin,
.
El vector es el de los multiplicadores de Lagrange de las condiciones
Ax D b.
El vector , el de los multiplicadores de Lagrange de las condiciones x 0.
La condición iii se conoce como la de complementariedad de holguras, u
holguras complementarias.
Exige que sean cero aquellos multiplicadores de las condiciones de no
negatividad que no estén activas (no sean cero) en el óptimo; o, lo
que es equivalente, que sea cero el denominado gap de dualidad: la
diferencia entre el valor de la función objetivo del primal y del dual.
Todas estas condiciones fueron formuladas por Harold William Kuhn, EE.UU.,
1925-2014, y Albert William Tucker, Canadá, 1905-1995, en 1951, con el fin de
extender la teoría de Lagrange a la caracterización de los puntos óptimos de
problemas de programación lineal y no lineal sometidos a restricciones.
Posteriormente se descubrió que en 1939 William Karush, EE.UU., 1917-1997,
ya había trabajado sobre estas condiciones, por lo que desde ese momento se les
pasó a denominar
condicionesRichard
de Karush-Kuhn-Tucker,
o KKT.
264
W. Cottle
7/133
William Karush, circa 1987
Fritz John at NYU, circa 1987
Las condiciones KKT generalizan la de la existencia de un mínimo de una
función sin restricciones; es decir, que rx f .x / D 0.
8/133
T
ŒcBT
cNT ,
Si A se ordena de la forma A D ŒB N , y en concordancia c D
como en el óptimo la condición i xi D 0, i D 1; : : : ; n, implica que Bi D 0,
i D 1; : : : ; m (pues las variables básicas son positivas), la condición ii de KKT
se puede reescribir así:
T
0
cB
B
C
; N 0:
D
N
NT
cN
Esto equivale a que cB D B T y que
cN D N C N T ;
N 0:
Es decir, a que
cN
NTB
T
cB 0
Este vector se denomina de costes reducidos: tienen que ser no negativos en el
punto óptimo.
9/133
Vectores y condiciones clave en PL:
xB D B 1 b
NTB
N D cN
DB
T
T
cB 0
cB
1. A N , vector de multiplicadores de Lagrange de las condiciones activas de
x 0, se le denomina de costes reducidos.
2. Que se cumpla que todos los costes reducidos sean positivos, o cero, es la
condición de haber alcanzado el óptimo.
3. A , vector de multiplicadores de Lagrange de las condiciones Ax D b, se
le denomina de multiplicadores símplex.
Interpretación económica de los multiplicadores
símplex
h
xB
i
Supongamos que x D 0 D
de min. c T x
h
B
1
0
b
i
10/133
es una solución óptima no degenerada
s. a Ax D b
x 0:
Al suponer xB > 0, un cambio suficientemente pequeño 4b en b no debe
modificar la base óptima B; la solución óptima sería
1
xO B
B .b C 4b/
xO D
D
:
0
0
y el cambio en la función objetivo 4z D cBT B 14b D T 4b, donde D B T cB
es el óptimo del vector de multiplicadores símplex.
i indica cómo cambia la función objetivo al incrementar una unidad la cantidad disponible
del recurso bi de la condición i-ésima.
Su valor es un precio o valor marginal del recurso i-ésimo en el óptimo: el máximo
que se puede estar dispuesto a pagar por incrementar una unidad su disponibilidad.
Índice
11/133
Introducción
Condiciones de punto óptimo
Mejora de una solución básica factible
El algoritmo Símplex
Degeneración y ciclado
Solución básica factible inicial
Análisis de sensibilidad
El método Símplex para variables acotadas
Implementaciones comerciales del método Símplex
El método Símplex en forma de “tableau”
Otras variantes y mejoras del Símplex
Complejidad computacional del método Símplex
12/133
Mejorar una solución básica factible
Supongamos que:
Partimos de una solución básica factible: punto extremo o vértice del
problema.
La matriz A 2 Rmn .m < n/ es de rango completo y la región factible no
es el conjunto vacío.
En la solución básica factible los m primeros coeficientes del vector x son
los que forman la base: todos positivos.
13/133
Ordenando la matriz A D ŒB N  y, de la misma manera, c T D ŒcBT cNT , se
tiene que
BxB C N x N D b:
Despejando xB ,
xB D B 1 b
B 1N x N
El valor de la función objetivo para este vector es
x
z D ŒcBT ; cNT  B D cBT B 1b C .cNT
xN
›
cBT B 1N /x N :
cost
e
s re
duc
idos
Para que se pueda mejorar la función objetivo desde el punto extremo que
define ese vector, debe haber costes reducidos negativos.
En el punto que define ese xB confluyen n m aristas; está en la intersección
en Rn de los m hiperplanos correspondientes a las condiciones Ax D b y los
n m correspondientes a x N D 0 (no degenerada).
Para mejorar la función objetivo, de esas posibles n m aristas habrá que
escoger una que consiga hacer decrecer la función objetivo desplazándose por
ella hasta otro vértice.
Esa arista la definirá un coste reducido, de los de las variables no en la base,
cNj D cj
cBT B 1aj ;
14/133
j >m
que sea negativo, pues hará decrecer la función objetivo aumentando el valor de
la variable no básica correspondiente. Si por ejemplo cNj < 0, la función objetivo
decrece al ritmo que marca el incremento desde cero de la variable no básica xj .
Como a coste reducido más negativo, decrecimiento más rápido, se escoge para
la base aquella variable no básica que tenga el coste reducido más negativo.
15/133
¡OJO! Si la solución es básica degenerada, pues el valor de alguna variable
básica es cero, puede ocurrir que en alguna dirección cualquier desplazamiento
haga que
x. / D x C y
viole la factibilidad del problema.
Esto que ocurre pues en una solución básica degenerada confluyen más de m
hiperplanos.
53
13
0
12
42
d 1 es una dirección de movimiento factible; d 2 no.
16/133
Ejemplo Consideremos el programa lineal:
min. x1 C x2
s. a x1 C 2x2 4
x2 1
x1; x2 0:
Añadamos las variables de holgura x3 y x4 para transformarlo en forma estándar:
min. x1 C x2
s. a x1 C 2x2 C x3
D 4
I
x2
C x4 D 1
x1 ; x2 ; x3 ; x4 0:
1210
A D Œa1; a2; a3; a4 D 0 1 0 1 :
Consideremos B D Œa1; a2:
x1
12
xB D
D B 1b D
01
x2
x
0
xN D 3 D
:
x4
0
17/133
1 4
1 2 4
2
D
D
I
1
0 1 1
1
La solución básica factible que estamos considerando se puede ver en la figura.
02
79
79
7
62
3
45
5
61
78
9
01
Los costes reducidos de las variables no básicas son
1
2
1
cN3 D c3 cBT B 1a3 D 0 Œ1; 1
D 1
0 1 0
1 2 0
cN4 D c4 cBT B 1a4 D 0 Œ1; 1
D 1:
0 1 1
18/133
y
La función objetivo decrece siguiendo la dirección (d 2 en la figura) que
determina el coste reducido cN3: la de incrementar la variable no básica x3.
Las variables básicas se deben mover de la forma
xB D B 1 b
B 1 a3 I
es decir, en la dirección opuesta a (o una cantidad negativa en)
1
2
1
1
B 1 a3 D
D
0 1 0
0
que es la dirección d 2 de la figura anterior.
19/133
Elegida la variable no básica, xq , de coste reducido más negativo, que entrará
en la base, ¿cuánto moverse en la dirección de la arista que ha definido ese
coste reducido?
La respuesta es hasta que en ese movimiento una variable básica llegue a su
límite cero, y bloquee el posible desplazamiento en la dirección escogida: se
habrá llegado a otro vértice.
Siguiendo las ideas que manejamos ya en optimización, la dirección de
movimiento del método es la opuesta a
y D B 1 aq
y en ella se avanza una cantidad , amplitud de paso.
De las expresiones de x. / y xB . / se deduce que se mantendrá la factibilidad
del problema, es decir,
x. / 0;
20/133
si y sólo si
xB
y 0 y 0:
Si las variables básicas se modifican según
xB D B 1 b
o, desarrollando,
2
3 2 3
bO1
xB1
6
7 6 7
6xB2 7 6bO2 7
6 :: 7 D 6 :: 7
4 : 5 4 : 5
xBm
bOm
y;
2 3
y1
6 7
6y 7
6 ::2 7 ;
4 : 5
ym
donde bO D B 1b, ese valor máximo de movimiento negativo, vendrá dado por
nO
o x
B
bi
D xN q D mKın yi W yi > 0; 1 i m D ypp :
21/133
El valor de la variable no básica xq se verá incrementado después de este paso
desde cero a xN q , pasando a ser básica en detrimento de la variable xBp que
pasará a ser no básica y por tanto cero.
Para completar una iteración del método Símplex resta reemplazar el vector ap
por el aq en la base, es decir, hacer
BN D B C .aq
ap /epT :
quedando
BN D ŒaB1 ; aB2 ; : : : ; aBp 1 ; aq ; aBpC1 ; : : : ; aBm :
22/133
El Algoritmo Símplex
El algoritmo Símplex para resolver
min. c T x
s. a Ax D b
x0
parte de una solución básica factible xB correspondiente a
B D Œaj1 ; aj2 ; : : : ; ajm .
B D fj1; : : : ; jmg es el conjunto de índices de las variables básicas; xji designa
la variable básica i -ésima; N el de las variables no básicas.
23/133
Paso 1 – Asignación de precios. Comprobación de óptimo.
(a) Calcular los multiplicadores símplex resolviendo el sistema B T D cB .
(b) Calcular los costes reducidos de las variables no básicas, cNj D cj T aj , para todo j 2 N .
(c) Comprobar que se ha llegado al óptimo: si cNj 0 para todo j 2 N , PARAR: la solución es óptima.
Paso 2 – Determinar columna de pivotación.
(a) Determinar la variable no básica xq que debe entrar en la base (encontrar una dirección de descenso):
escoger q 2 N tal que cNq D mKınj 2N fcNj < 0g:
(b) Resolver
By D aq :
Si y 0, PARAR; hay un rayo factible de soluciones a lo largo del cual c T x !
1. Si no, seguir.
Paso 3 – Determinar fila de pivotación. Análisis de Ratios. Determinar la variable básica xjp que sale de la
base: calcular
xjp
xji
D
D mKın
W yi > 0 :
1i m yi
yp
Paso 4 – Pivotación. Adaptar la solución, la matriz B y las estructuras de datos. Hacer:
xq
D xjp =yp
xji
xji
B
B C .aq
B
B [ fqgnfjp g
N
yi ;
1i m
ajp /epT
N [ fjp gnfqg; e ir al paso 1.
Algoritmo Símplex revisado
24/133
function [sol fobj la c_r iters B N Binv] = ProgLineal_3(c,A,b,eps1,bfs)
% Resuelve min. c’x sujeto a Ax=b, x >= 0 (problema estándar)
% B_i, vector de columnas de A en la base = B; bfs=base factible
% N_i, vector de columnas de A fuera de la base = N
disp(’It. Sale B Entra B
Cos. red.
fobj
Inf. dual’);
[m n]=size(A); iters=0; c=c(:); B_i=bfs; N_i=setdiff(1:n,B_i);
[L U]=lu(A(:,B_i));
% LU de la base inicial
while 1==1
% Itera Símplex
xb =U\(L\b);
% xb=B^-1*b vector solución actual
la =L’\(U’\c(B_i));
% Multiplicadores símplex
c_r=zeros(n,1);
c_r(N_i)=c(N_i)-A(:,N_i)’*la;
% Costes reducidos: c_r=c_N-c_B*B^-1*N
[cj j]=min(c_r);
% Cos. redu. más negativo; entra j. Bland implícita
if cj>-eps1
% si todos cj >= 0, óptimo;
sol=zeros(n,1); sol(B_i)=xb;
% dar solución
fobj=c(B_i)’*xb;
N = N_i; B=B_i;
if nargout==8, Binv=U\(L\eye(m)); end
return
% Salir; FIN algoritmo
end
y=U\(L\A(:,j));
% y = B^-1 * a[j]
zz=find(y>eps1)’;
% Sale de base: mín d(i)/y(i), y(i)>0;
if isempty(zz), error(’Problema no acotado.’); end
% Direc. de no acotado
[yy ii]=min((xb(zz)./y(zz)));
% Sale i
i=zz(ii);
% Regla de Bland implícita: primera i
k=B_i(i); B_i(i)=j; N_i(j==N_i)=k;
% Adaptación datos
[L U]=lu(A(:,B_i)); iters=iters+1; Di=norm(c_r(c_r<0));
fprintf(’%3d%6d%7d %20.6f %20.6f %20.6f\n’,iters,k,j,cj,c(B_i)’*xb,Di); % Info. itera
end
end
Ejemplo 1 Resolvamos el problema de programación lineal:
min. x1
25/133
3x2
s. a 2x1 C 3x2 6
x1 C x2 1
x1; x2 0:
Introduciendo variables de holgura, la base queda:
min. x1
3x2
s. a 2x1 C 3x2 C x3
D6
I
x1 C x2 C
x4 D 1
x1 ; x2 ; x3 ; x4 0:
10
B D Œa3; a4 D 0 1
y N D Œa1 ; a2  D
La solución inicial, xB D B 1b, x N D 0, es pues
2 3 23
x1
4x25
x3
x4
D
0
405 I y la función objativo
6
1
zD
cBT B 1b
D Œ0; 0
hi
6
1
D 0:
23
:
11
Iteración 1. Paso 1
Calculemos los multiplicadores símplex resolviendo B T D cB :
1 10
0
0
D
D
:
01
0
0
Los costes reducidos de las variables no básicas son
2
cN1 D c1 T a1 D 1 Œ0; 0
D 1
1
3
cN2 D c2 T a2 D 3 Œ0; 0
D 3:
1
26/133
y
Todavía no se ha llegado al óptimo pues los costes reducidos de las variables no
básicas son negativos.
Iteración 1. Paso 2
27/133
Elijamos la variable no básica x2 como aquella que ha de entrar en la base pues
tiene el coste reducido más negativo.
Resolvamos el sistema By D a2:
10
yD
01
1
3
3
D
:
1
1
Iteración 1. Paso 3
La variable básica a salir de la base se obtendrá de calcular
xB1 xB2
6 1
D mKın
;
D mKın ;
D 1:
y1 y2
3 1
28/133
Es decir, saldrá xB2 D x4. Esto se puede deducir también analizando la expresión
3
xB1
x
6
;
D 3 D B 1b y D
xB2
x4
1
1
comprobándose que x4 es la primera variable que llega a cero al incrementar x2.
Iteración 1. Paso 4
Readaptemos la solución y las estructuras correspondientes:
x2
x3
x4
D1
x3 y1 D 6
x4 y2 D 1
13D3
1 1 D 0:
29/133
La solución queda, por tanto,
2 3 2 3
x1
0
6 7 6 7
6x27 617
6 7D6 7
4x35 435
x4
0
con
13
B D Œa3; a2 D
01
y N D Œa1; a4 D
20
:
11
La nueva función objetivo es
z D cBT B 1b D Œ0;
1 3 6
3
D
0 1 1
3:
30/133
Iteración 2. Paso 1
Calculemos los nuevos multiplicadores símplex resolviendo B T D cB :
1 10
0
10
0
0
D
D
D
:
31
3
31
3
3
Los costes reducidos de las variables no básicas son
2
cN1 D c1 T a1 D 1 Œ0; 3
D
1
0
cN4 D c4 T a4 D 0 Œ0; 3
D 3:
1
4
y
Como todavía existe un coste reducido negativo, no se ha llegado al óptimo.
Iteración 2. Paso 2
Elegimos la única variable no básica capaz de mejorar la función objetivo, x1,
como aquella que ha de entrar en la base.
Resolvamos el sistema By D a1:
1 13
2
1 3
2
5
yD
D
D
:
01
1
0 1
1
1
Iteración 2. Paso 3
La variable básica a salir de la base se obtendrá de calcular
xB1
3
3
D mKın
D mKın
D :
y1
5
5
Es decir, saldrá xB1 D x3.
31/133
Analizando el porqué de esto mediante la expresión
x3
3
xB1
D
D B 1b y D
xB2
x2
1
32/133
5
;
1
se comprueba que x3 es la primera variable que llega a cero al incrementar x1.
Iteración 2. Paso 4
Readaptemos la solución y las estructuras correspondientes:
x1
x2
x3
D 35
x2 y2 D 1
x3 y1 D 3
3
5
3
5
. 1/ D
5 D 0:
La solución queda:
2 3 2 3
x1
3=5
6 7 6 7
6x27 68=57
6 7D6 7
4x35 4 0 5
0
x4
8
5
con
B D Œa1; a2 D
23
11
10
y N D Œa3; a4 D
:
01
La nueva función objetivo es
z D cBT B 1b D Π1;
"
D Π1;
23
11
3
3
1
5
1
5
1
6
D
1
#
3 27
6
5
:
D
2
1
5
5
Iteración 3. Paso 1
Calculemos los nuevos multiplicadores símplex resolviendo B T D cB :
1 " 1 1# 2 1
1
1
4=5
5 5
D
D
D
:
3
2
3 1
3
3
3=5
5 5
33/133
34/133
Los costes reducidos de las variables no básicas son
cN3 D c3
T a3 D 0
cN4 D c4
T a4 D 0
1
Œ 4=5; 3=5
D 54
0
0
Œ 4=5; 3=5
D 53 :
1
y
Todos los costes reducidos son positivos por lo que se ha llegado al único
óptimo del problema.
La solución óptima es
3
2 3 2
x1
3=5
6 7 6
7
6x27 68=57
6 7D6
7:
4x35 4 0 5
x4
0
La función objetivo
6
z D cBT B 1b D T b D Œ 4=5; 3=5
D
1
27
:
5
35/133
Las soluciones básicas factibles que se han ido obteniendo en el proceso se
indican en la figura.
02
569
8
9
578
3
4
568
7
01
Con el programa ProgLineal_3 de Matlab que hemos presentado antes sería:
min. x1
3x2
s. a 2x1 C 3x2 C x3
D6
x1 C x2 C
x4 D 1
x1 ; x2 ; x3 ; x4 0:
>> cEje1=[-1 -3 0 0];
>> AEje1=[2 3 1 0;-1 1 0 1];
>> bEje1=[6;1];
>> bfsEje1=[3 4];
>> [sol fobj pi cr iters B N]=ProgLineal_3(cEje1,AEje1,bEje1,...
sqrt(eps),bfsEje1)
36/133
Se obtiene:
>> [sol fobj pi cr iters B N]=ProgLineal_3(cEje1,AEje1,bEje1,...
sqrt(eps),bfsEje1)
It. Sale B Entra B
Cos. red.
fobj
1
4
2
-3.000000
-3.000000
2
3
1
-4.000000
-6.000000
sol =
0.600000000000000
1.600000000000000
0
0
fobj =
-5.400000000000000
pi =
-0.800000000000000
-0.600000000000000
cr =
0
0
0.800000000000000
0.600000000000000
iters =
2
B =
1
2
N =
3
4
Inf. dual
3.162278
4.000000
Con la rutina linprog de Matlab, la sesión sería la1 siguiente.
37/133
>> cEje1=[-1 -3 0 0];
>> AEje1=[2 3 1 0;-1 1 0 1];
>> bEje1=[6;1];
>> lb=[0 0 0 0];
>> options = optimset(’LargeScale’, ’off’, ’Simplex’, ’on’, ’Display’, ’Iter’);
>> [x fval exitflag output]=linprog(cEje1,[],[],AEje1,bEje1,lb,[],[],options)
Phase 1: Compute initial basic feasible point.
Iter
Infeasibility
0
1
1
-0
Phase 2: Minimize using simplex.
Iter
Objective
Dual Infeasibility
f’*x
A’*y+z-w-f
0
-5.4
0
Optimization terminated.
x =
0.6000
1.6000
0
0
fval =
-5.4000
exitflag =
1
output =
iterations: 0
algorithm: ’medium scale: simplex’
cgiterations: []
message: ’Optimization terminated.’
1
Obsérvese que con Matlab no sería necesario suministrar el problema en forma estándar pues admite dos conjuntos de
condiciones: de igualdad y desigualdad. Si, en cambio, hay que explicitar que las cotas inferiores de las variables son cero.
Ejemplo 2 Solución no acotada. Hay que resolver:
min. x1
s. a
3x2
x1 2x2 4
x1 C x2 3
x1; x2 0:
Con las variables de holgura, la base inicial queda:
min. x1
s. a
38/133
3x2
x1 2x2 C x3
D4
I
x1 C x2 C
x4 D 3
x1 ; x2 ; x3 ; x4 0:
10
B D Œa3; a4 D 0 1
y N D Œa1 ; a2  D
La solución inicial, xB D B 1b, x N D 0, es
2 3 23
x1
4x25
x3
x4
D
0
405 ;
4
3
de función objetivo
zD
cBT B 1b
D Œ0; 0
hi
4
3
D 0:
1 2
:
1 1
La región factible de este problema es la que se ilustra en la figura.
02
9
3
6 45 78
79
01
Iteración 1. Paso 1
Calculemos los multiplicadores símplex resolviendo B T D cB :
1 10
0
0
D
D
:
01
0
0
39/133
Los costes reducidos de las variables no básicas son
1
cN1 D c1 T a1 D 1 Œ0; 0
D
1
2
cN2 D c2 T a2 D 3 Œ0; 0
D
1
40/133
1
y
3:
Al ser negativos los costes reducidos, esta solución no es óptima.
Iteración 1. Paso 2
Elegimos la variable no básica x2 como aquella que ha de entrar en la base pues
su coste reducido es el más negativo.
Resolvamos el sistema By D a2:
10
yD
01
1
2
2
D
:
1
1
41/133
Iteración 1. Paso 3
La variable básica a salir de la base se obtendrá de calcular
3
xB2
D mKın
D 3:
D mKın
y2
1
Es decir saldrá xB2 D x4.
Como venimos haciendo, esto también de puede comprobar a partir de la
expresión
xB1
x
4
2
D 3 D B 1b y D
;
3
1
xB2
x4
constatándose que, efectivamente, x4 es la primera variable que llega a cero al
incrementar x2.
42/133
Iteración 1. Paso 4
Readaptemos la solución y las estructuras correspondientes:
x2
x3
x4
D3
x3 y1 D 4
x4 y2 D 3
3 . 2/ D 10
3 1 D 0:
La solución queda:
2 3 2 3
x1
0
6 7 6 7
6x27 6 37
6 7D6 7
4x35 4105
x4
0
con
1 2
B D Œa3; a2 D
0 1
y N D Œa1; a4 D
10
:
11
43/133
Iteración 2. Paso 1
Calculemos los multiplicadores símplex resolviendo B T D cB :
1 10
0
10
0
0
D
D
D
:
21
3
21
3
3
Los costes reducidos de las variables no básicas son
1
cN1 D c1 T a1 D 1 Œ0; 3
D
1
0
cN4 D c4 T a4 D 0 Œ0; 3
D 3:
1
4
y
Como existe un coste reducido negativo, todavía no se ha alcanzado el óptimo.
44/133
Iteración 2. Paso 2
Elegimos la única variable no básica posible, x1, como aquella que ha de entrar
en la base.
Resolvamos el sistema By D a1:
1 1 2
1
12
1
1
yD
D
D
:
0 1
1
01
1
1
Como todos los yi ; i D 1; 2 son negativos, hay un rayo de soluciones factibles a
u
lo largo del cual c T x ! 1. La solución es pues no acotada.
Ejemplo 3 Soluciones óptimas alternativas. Hay que resolver:
min. 2x1
s. a
x1 C 2x2 4
x1 C x2 1
x1; x2 0:
Introduzcamos las variables de holgura x3 y x4. El problema queda:
min. 2x1
s. a
4x2
4x2
x1 C 2x2 C x3 D 4
x1 C x2 C x4 D 1
x1; x2; x3; x4 0:
Escojamos como base de partida
10
B D Œa1; a4 D
11
21
y N D Œa2; a3 D
:
10
45/133
46/133
La solución inicial, xB D B 1b, x N D 0, es pues
1 x1
10
4
10 4
4
D
D
D
x4
10
1
11 1
5
y
x2
0
D
:
x3
0
La función objetivo para esta solución es
4
z D cBT B 1b D Œ 2; 0
D
5
8:
47/133
Iteración 1. Paso 1
Calculemos los multiplicadores símplex resolviendo B T D cB :
1 1 1
2
11
2
2
D
D
D
:
0 1
0
01
0
0
Los costes reducidos de las variables no básicas son
2
cN2 D c2 T a2 D 4 Œ 2; 0
D0
1
1
cN3 D c3 T a3 D 0 Œ 2; 0
D 2:
0
Hemos llegado a un punto óptimo.
y
48/133
El óptimo, sin embargo, no es único.
02
!"
#!"
$
34567849
48
01
Si incrementamos x2, manteniendo x3 D 0, las variables x1 y x4 se modifican
de la siguiente manera:
h i
h ih i h ih i
hi hi
x1
10 4
10 2
4
2
1
1
D
B
b
B
a
x
D
x
D
2
2
2
x4
11 1
11 1
5
3 x2 :
49/133
Para cualquier x2 < 35 , la solución
2 3 2
3
x1
4 2x2
6 7 6
7
6x27 6 x2 7
6 7D6
7
4x35 4 0 5
x4
5 3x2
es óptima con función objetivo z D
8.
50/133
Degeneración y ciclado
Aunque hasta ahora se ha supuesto que la solución básica x de un programa
lineal no es “degenerada”, el que lo sea no causa grandes dificultades prácticas
en el proceso de obtención del óptimo.
Lo peor que puede ocurrir es que. en el Paso 3, la variable que salga de la base,
xjp , tenga un valor cero, lo que dará lugar a una iteración con desplazamiento
D 0: x no cambiará.
Aunque x no cambie, si lo hará la base.
Como x, y por tanto c T x, no cambian, es teóricamente posible que el
algoritmo entre en un ciclo infinito a través de una sucesión de bases, y sus
correspondientes soluciones, volviendo a esta base.
El problema
51/133
min.
s. a x1
x2
x3
3
x
4 4
C 20x5
C 14 x4
C 21 x4
8x5
12x5
1
x
2 6
C 6x7
El óptimo es x D
objetivo óptima -5/4.
Œ3=4; 0; 0; 1; 0; 1; 0T
y su función
C 9x7 D 0
C 3x7 D 0
C x6
D1
x1 ; x2 ; x3 ; x4 ; x5 ; x6 ; x7 0:
x6
1
x
2 6
expuesto por E.M.L. Beale en 1955, muestra cómo el método Símplex puede
quedar atrapado en un ciclo infinito, si se escoge como variable a entrar en la
base aquella que posee el coste reducido más negativo y para salir de ella una de
las que proporcionan el mínimo .
Si se comienza a resolver partiendo de la base B D Œa1; a2; a3, siguiendo el
método Símplex ordinario se obtienen las bases Œa4; a2; a3, Œa4; a5; a3,
Œa6; a5; a3, Œa6; a7; a3, Œa1; a7; a3 y otra vez Œa1; a2; a3.
Si se vuelve a utilizar la misma secuencia de variables a entrar y salir de la base,
el método entra en un ciclo infinito.
52/133
La regla de Bland (1977)
Robert G. Bland, EE.UU. 1948-.
Mediante esta regla –la más habitualmente usada– se elige como variable que
ha de entrar en la base, de entre las de coste reducido negativo, aquella con
menor índice.
Para salir de la base, si el ratio es igual en varias, también aquella con menor
índice.
Índice
53/133
Introducción
Condiciones de punto óptimo
Mejora de una solución básica factible
El algoritmo Símplex
Degeneración y ciclado
Solución básica factible inicial
Análisis de sensibilidad
El método Símplex para variables acotadas
Implementaciones comerciales del método Símplex
El método Símplex en forma de “tableau”
Otras variantes y mejoras del Símplex
Complejidad computacional del método Símplex
54/133
Solución básica factible inicial
¿Cómo obtener una eficazmente?
Si las condiciones del problema son de la forma Ax b; x 0, donde b tiene
todos sus coeficientes no negativos, el problema es trivial: añadiendo las
variables de holgura a las condiciones se tendrá que
Ax C x h D b
x; x h 0:
Una solución básica factible será x h D b, x D 0; la matriz básica
correspondiente, B D I.
55/133
Normalmente no es tan sencillo. Por ejemplo, si se diesen las mismas
condiciones de antes pero el vector b tuviese algún coeficiente negativo, la
solución obtenida no sería válida pues violaría la condición de no negatividad.
Si las condiciones son de la forma Ax b; x 0, añadiendo el vector de
variables de holgura, x h, se tendría que Ax x h D b; x 0; x h 0.
Si el vector b no tuviese todos sus coeficientes negativos o cero, difícilmente
se podría determinar una base B a partir de la matriz ŒA I, de tal forma
que xB D B 1b cumpliese la condición de no negatividad.
56/133
Ejemplo 1 Consideremos las condiciones siguientes:
x1 C 2x2 4
x1 C x2 1
x1; x2 0:
Añadiendo las variables de holgura x3 y x4 las condiciones se transforman en
x1 C 2x2 C x3 D 4
x1 C x2 C x4 D 1
x1; x2; x3; x4 0:
Una solución inicial básica factible sería
10
x3
1
0
4
41 D
B D Œa3 ; a4  D
W xB D
D B 1b D
01
x4
01
1
x
0
xN D 1 D
:
x2
0
y
57/133
Ejemplo 2 Sean ahora las siguientes condiciones:
x1 C x2 C x3 6
2x1 C 3x2 C 3x3 3
x2; x3 0:
Cuando como aqui x1 una variable no está restringida a tomar valores no
negativos, podemos sustituirla por xi0 xi00, xi0 0, xi00 0. Si lo hacemos e
introducimos las variables de holgura x4 y x5, las condiciones quedan:
x100 C x2 C x3 C x4
D6
x10
2x10 C 2x100 C 3x2 C 3x3
x5 D 3
x10 ; x100; x2; x3; x4; x5 0:
No es inmediato determinar una base B que nos permita obtener una solución
inicial básica factible.
58/133
Ejemplo 3 Consideremos ahora las siguientes condiciones:
x1 C x2 2x3 3
2x1 C x2 C 3x3 7
x1; x2; x3 0:
Si para hacer todos los coeficientes del vector b no negativos multiplicamos la
primera condición por 1 e introducimos las variables de holgura x4 y x5, las
condiciones resultarán:
x1 x2 C 2x3 x4
D3
2x1 C x2 C 3x3
C x5 D 7
x1; x2; x3; x4; x5 0:
Tampoco de aquí se puede determinar de una manera sencilla una base inicial
del problema.
59/133
Variables artificiales
La forma más inmediata de determinar una solución básica factible de partida
consiste en introducir temporalmente, además de las variables de holgura, un
nuevo conjunto similar de variables artificiales.
Si el problema es
min. c T x
s. a Ax D b
x 0;
donde, sin pérdida de generalidad, se supone que b 0, se le añade un vector
de variables artificiales, x a , resultando
Ax C x a D b;
con x 0 y x a 0.
Si se quiere conseguir una solución factible del problema original habrá que
forzar a que los coeficientes del vector x a sean cero. Es decir, resolver también
con el método Símplex el problema
60/133
min.
m
X
x ai
iD1
s. a Ax C x a D b
x; x a 0:
Si el problema original admite una solución factible, en la solución del
transformado se tendrá que x a D 0.
Si tal solución factible no existe, el problema transformado acabará con
algún coeficiente de x a positivo.
El método Símplex completo, por consiguiente, consta de las dos fases que se
indican en la tabla.
61/133
Fase I Partiendo de la solución inicial x D 0, x a D b, resolver
min.
m
X
xai
i D1
s. a Ax C x a D b
x; x a 0:
Si x a ¤ 0, parar: el problema no tiene solución básica factible.
Si x a D 0, ir a la fase II tomando como B inicial la de la última iteración de
esta fase.
Fase II Partiendo de xB D B 1 b y x N D 0, resolver
min. cBT xB C cNT x N
s. a BxB C N x N D b
xB ; x N 0:
Algoritmo Símplex revisado en dos Fases
62/133
Al final de la Fase I, si la solución tiene alguna variable artificial en la base y
xai D 0 (degenerada), dicha variable se puede intercambiar por una no básica
–de las originales– xj , o suprimirse sin más que eliminar la condición redundante
correspondiente. Concretamente:
Si la variable básica xak D 0 y se cumple que e Tk B 1aj ¤ 0, la variable xak
se puede reemplazar por la xj .
Si para todo aj 2 N , e Tk B 1aj D 0, el sistema Ax D b tiene una
condición redundante y se puede eliminar la fila k-ésima de la matriz A
original (así como la fila y columna k-ésimas de B).
Circunstancias de este tipo se evitan con un mecanismo de preproceso para
aligerar el problema de redundancias, incoherencias, etc.
63/133
Ejemplo Hay que resolver el siguiente problema:
min. x1
s. a
2x2
x1 C x2 2
x1 C x2 1
x2 3
x1; x2 0:
Para empezar, introduzcamos como siempre las variables de holgura:
min. x1
s. a
2x2
x1 C x2 x3
D2
x1 C x2
x4
D1
x2
C x5 D 3
x1; x2; x3; x4; x5 0:
64/133
Como la base de partida no es de fácil obtención, introducimos las variables
artificiales y planteamos el siguiente problema dentro de la fase I:
x6 C x7
min.
s. a
x1 C x2
x1 C x2
x2
D2
x4
C x7 D 1
C x5
D3
x1; x2; x3; x4; x5; x6; x7 0:
x3
C x6
Obsérvese que en la tercera condición no es necesario introducir variable
artificial alguna.
Del problema así planteado se puede obtener inmediatamente la base de partida;
ésta es
0 1 0 1 1 1 0
B D Œa5; a6; a7 D 0 0 1 y N D Œa1; a2; a3; a4 D 1 1 0 1 :
100
01
0
0
65/133
La solución inicial, xB D B 1b, x N D 0, es:
x 0 1 0 1 2 0 0 1 2 3
5
x6 D 0 0 1
1 D 100
1 D 2 :
x7
100
3
010
Por tanto,
2 3
2 3
x1
0
6x27 607
6x37 607
6 7 6 7
6x47 D 607 :
6 7 6 7
6x57 637
4x 5 425
6
x7
1
3
1
Fase I. Iteración 1. Paso 1
Calculemos los multiplicadores símplex resolviendo B T D cB :
3
2
001
D 41 0 05
010
66/133
12
32 3 2 3
3 2
1
010
0
0
4 15 D 40 0 15 4 15 D 41 5 :
0
100
1
1
Los costes reducidos de las variables no básicas son
3
1
0 4 15 D 0;
0
2 3
1
0 415 D 2;
1
2 3
1
0 4 05 D 1
0
2 3
0
0 4 15 D 1:
0
2
cN1 D c1
T a1 D 0
Œ1; 1;
cN2 D c2
T a2 D 0
Œ1; 1;
cN3 D c3
T a3 D 0
Œ1; 1;
cN4 D c4
T a4 D 0
Œ1; 1;
y
67/133
No se ha llegado todavía al óptimo pues existe un coste reducido negativo.
Fase I. Iteración 1. Paso 2
Elegimos la única variable no básica posible, x2, como aquella que ha de entrar
en la base.
Resolvemos el sistema By D a2:
2
3 12 3 2
32 3 2 3
010
1
001
1
1
y D 40 0 15 415 D 41 0 05 415 D 415 :
100
1
010
1
1
68/133
Fase I. Iteración 1. Paso 3
La variable básica a salir de la base se obtendrá de calcular
xB1 xB2 xB3
3 2 1
D mKın
;
;
D mKın ; ;
D 1I
y1 y2 y3
1 1 1
es decir, saldrá xB3 D x7.
O, como solemos utilizar, de evaluar la expresión xB D B 1b
y.
Es decir,
2 3 2 3 2 3
xB1
x5
3
4xB2 5 D 4x65 D 425
xB3
x7
1
2 3
1
415 ;
1
comprobándose que x7 es la primera variable que llega a cero al incrementar x2.
69/133
Fase I. Iteración 1. Paso 4
Readaptemos la solución y las estructuras de datos:
x2
x5
x6
x7
D1
x5 y1 D 3
x6 y2 D 2
x7 y3 D 1
11D2
11D1
1 1 D 0:
La solución queda por tanto,
2 3
2 3
x1
0
6x27 617
6x37 607
6 7 6 7
6x47 D 607
6 7 6 7
6x57 627
4x 5 415
6
x7
0
70/133
siendo
2
3
011
B D Œa5; a6; a2 D 40 0 15
101
y
2
3
10 1 0
N D Œa1; a7; a3; a4 D 4 1 1 0 15 :
00 0 0
Fase I. Iteración 2. Paso 1
Calculemos de nuevo los multiplicadores
2
3 12 3 2
001
0
D 41 0 05 4 15 D 4
111
0
símplex resolviendo B T D cB :
32 3 2 3
0 10
0
1
1 1 1 5 4 15 D 4 1 5 :
0
0
1 00
Los costes reducidos de las variables no básicas son
71/133
2
cN1 D c1
T a1 D 0
Œ1;
1;
cN7 D c7
T a7 D 1
Œ1;
1;
cN3 D c3
T a3 D 0
Œ1;
1;
cN4 D c4
T a4 D 0
Œ1;
1;
3
1
0 4 15 D 2;
0
2 3
0
4
0 15 D 2;
0
2 3
1
4
05 D 1
0
y
0
2 3
0
0 4 15 D 1:
0
No se ha llegado todavía al óptimo; hay dos costes reducidos negativos.
Fase I. Iteración 2. Paso 2
Elegimos la variable no básica x1 para entrar en la base pues su coste reducido
es el más negativo.
Resolvemos el sistema By D a1:
3 12 3 2
32 3 2 3
2
1
0 11
1
1
011
y D 40 0 15 4 15 D 41 1 05 4 15 D 4 25 :
101
0
0 10
0
1
72/133
Fase I. Iteración 2. Paso 3
La variable básica a salir de la base se obtendrá de calcular
nx x o
˚
B
B
D mKın y11 ; y22 D mKın 21 ; 21 D 12 I
es decir, saldrá xB2 D x6. Esto se deduce también de
2 3 2 3
2 3
xB1
x5
2
4xB2 5 D 4x65 D B 1b y D 415
xB3
x2
1
2
3
1
4 25 ;
1
constatándose que x6 es la primera variable que llega a cero al incrementar x1.
Fase I. Iteración 2. Paso 4
Readaptemos la solución y las estructuras de datos correspondientes:
x1
x5
x6
x2
73/133
D D 21
D x5 y1 D 2
D x6 y2 D 1
D x2 y3 D 1
1
2
1
2
1
2
1 D 23
2D0
. 1/ D 23 :
La solución queda por tanto
2 3
x1
6x27
6x37
6x47
6x 7
4 55
x6
x7
siendo
2
0
4
B D Œa5 ; a1 ; a2  D 0
1
1
1
0
2
D
3
1=2
63=27
607
607
63=27
4 5
0
0
3
2
1
10
5
4
1 y N D Œa6 ; a7 ; a3 ; a4  D 0 1
1
00
1
0
0
3
0
15 :
0
74/133
Fase I. Iteración 3. Paso 1
Calculemos los multiplicadores símplex resolviendo B T D cB :
2
0
4
D 1
1
3
01
1 05
11
12
3 2 1
0
2
1
4 05 D 6
4 2
0
1
1
2
1
2
3
1 2 3
0
2
17 4 5
0
25
00
0
2 3
0
4
D 05:
0
Los costes reducidos de las variables no básicas son
cN6 D c6
T a6 D 1
Œ0; 0;
cN7 D c7
T a7 D 1
Œ0; 0;
cN3 D c3
T a3 D 0
Œ0; 0;
cN4 D c4
T a4 D 0
Œ0; 0;
2 3
1
0 405 D 1;
0
2 3
0
4
0 15 D 1;
0
2 3
1
4
05 D 0;
0
0
2 3
0
0 4 15 D 0:
0
y
Todos los costes reducidos son no negativos: óptimo de la fase I.
La base de partida de la fase II es
0
B D Œa5; a1; a2 D 0
1
11
11
01
y
N D Œa3; a4 D
1
0
0
Fase II. Iteración 1. Paso 1
Calculemos los multiplicadores símplex resolviendo B T D cB :
2
0
4
D 1
1
0
1
1
3
1
05
1
12
3 2 1
0
2
4 15 D 6
4 21
2
1
1
2
1
2
1 2
2
17 4
25
3
0 0
3 2
3
1=2
0
15 D 4 3=25 :
2
0
Los costes reducidos de las variables no básicas son
2
cN3 D c3
T a3 D 0
Π1=2;
cN4 D c4
T a4 D 0
Π1=2;
3
1
3=2; 0 4 05 D
2 03
0
3=2; 0 4 15 D
0
1
2;
3
2:
y
75/133
0
1
0
:
Como cN3 y cN4 son negativos, no se ha llegado aún al óptimo.
Fase II. Iteración 1. Paso 2
Elegimos la variable no básica x4 como la que entra en la base.
Resolvamos el sistema By D a4:
2
0
4
yD 0
1
1
1
0
3
1
15
1
12
3 2
0
4 15 D 4
0
1
2
1
2
1
2
1
2
1
2
1
2
32 3 2
3
1
0
1=2
05 4 15 D 4 1=25 :
0
1=2
0
Fase II. Iteración 1. Paso 3
La variable básica a salir de la base se obtendrá de calcular
(
)
3 1
xB1 xB2
D mKın
;
D mKın 21 ; 21 D 1:
y1 y2
2 2
76/133
77/133
Es decir, saldrá xB2 D x1. Si se analiza la expresión
2 3
xB1
4xB2 5 D B 1 b
xB3
3
2 3 2
3=2
x5
y D 4x1 5 D 41=25
x2
3=2
2
3
1=2
4 1=25 ;
1=2
también se comprueba que, efectivamente, la primera variable que llega a cero
al incrementar x4 es x1, con D 1.
Fase II. Iteración 1. Paso 4
Readaptemos la solución y las estructuras de datos:
x4
x5
x1
x2
D1
x5 y1 D
x1 y2 D
x2 y3 D
3
2
1
2
3
2
1 12 D 1
1 12 D 0
C 1 12 D 2:
78/133
La nueva solución es, por tanto,
2 3
2 3
0
x1
6x27 627
6 7 6 7
6x37 D 607
4x45 415
x5
1
con
0
B D Œa5; a4; a2 D
0
1
01
11 y
01
N D Œa3; a1 D
1
0
0
Fase II. Iteración 2. Paso 1
Calculemos los multiplicadores símplex resolviendo B T D cB :
2
0
D 40
1
3
01
1 05
11
12
3 2
0
1
4 05 D 4 0
2
1
32 3 2 3
11
0
2
1 05 4 05 D 4 0 5 :
00
2
0
1
1
0
:
Los costes reducidos de las variables no básicas son
2
cN3 D c3
T a3 D 0
cN1 D c1
T a1 D 1
3
1
Œ 2; 0; 0 4 05 D 2;
2 03
1
Œ 2; 0; 0 4 15 D 3:
0
79/133
y
Todavía no se ha llegado al óptimo.
Fase II. Iteración 2. Paso 2
Elegimos la variable no básica x3 como la que entra en la base.
Resolvemos el sistema By D a3:
2
0
4
yD 0
1
0
1
0
3
1
15
1
12
3 2
1
1
4 05 D 4 1
0
1
0
1
0
32 3 2 3
1
1
1
5
4
5
4
0
0 D
15 :
0
0
1
80/133
Fase II. Iteración 2. Paso 3
La variable básica a salir de la base se obtendrá de calcular
xB1
1
D mKın
D mKın
D 1I
y1
1
es decir, saldrá xB1 D x5. Viéndolo a partir de la expresión
2 3 2 3
2 3
2 3
xB1
x5
1
1
4xB2 5 D 4x45 D b 1b y D 415 4 15 ;
xB3
x2
2
1
se comprueba también que la primera variable que llega a cero al incrementar x3
es x5.
81/133
Fase II. Iteración 2. Paso 4
Readaptemos la solución y las estructuras de datos:
x3
x5
x4
x2
La nueva solución es
D1
x5 y1 D 1 1 1 D 0
x4 y2 D 1 C 1 1 D 2
x2 y3 D 2 C 1 1 D 3:
2 3
2 3
0
x1
6x27 637
6 7 6 7
6x37 D 617 :
4x45 425
0
x5
Las nuevas matrices:
82/133
2
3
2
3
1 01
0 1
B D Œa3; a4; a2 D 4 0 1 15 I N D Œa5; a1 D 40 15 :
0 01
1 0
Fase II. Iteración 3. Paso 1
Calculemos los multiplicadores; resolvamos B T D cB :
2
1
4
0
D
1
0
1
1
3
0
05
1
12
3 2
0
1
4 05 D 4 0
2
1
0
1
1
32 3 2 3
0
0
0
5
4
5
4
0
0 D
05:
1
2
2
Los costes reducidos de las variables no básicas son
cN5 D c5
T a5 D 0
Œ0; 0;
cN1 D c1
T a1 D 1
Œ0; 0;
2 3
0
4
2 05 D 2;
1
2 3
1
2 4 15 D 1:
0
y
83/133
Todos los costes reducidos de las variables no básicas son positivos por lo que se
ha alcanzado el único óptimo del problema.
La solución final es
2 3
2 3
0
x1
6x27 637
6 7 6 7
6x37 D 617 :
4x45 425
x5
0
El valor óptimo de la función objetivo es cBT B 1b D
6.
84/133
El proceso iterativo que se ha seguido se representa en la figura
528
7
x
3
568
7
58 59
68
9 7
6
4
x1
85/133
Método de penalización o de la M grande
Consiste en combinar en un proceso único las fases I y II del método Símplex y
resolver
n
m
X
X
min.
ci xi C M
xaj
i D1
j D1
s. a Ax C x a D b
x; x a 0:
La constante M se elige “suficientemente grande” de tal forma que esté muy
penalizado que en el óptimo x a ¤ 0.
Eventualmente, si existe solución factible del problema original, las variables
artificiales tenderán a cero en el proceso de obtención del óptimo de este
problema.
86/133
Esta alternativa tiene dos pegas:
La necesidad de escoger un determinado valor fijo de M que asegure que las
variables artificiales no van a estar en la base de la solución óptima.
Un valor excesivamente grande de M, con respecto a los coeficientes del
vector c y de la matriz A, puede hacer que los errores de redondeo de los
cálculos y la inestabilidad numérica del proceso lleguen a ser importantes.
Que el número de variables del problema se incrementa notablemente.
Resolvamos con esta técnica un ejemplo anterior:
min. x1
s. a
1000x6 C 1000x7
2x2
x1 C x2
x1 C x2
x2
87/133
x3
C
D2
x4
C
x7 D 1
C x5
D3
x1 ; x2 ; x3 ; x4 ; x5 ; x6 ; x7 0:
x6
Con el programa ProgLineal_3 de Matlab que usamos sería:
sol =
>> cM=[1 -2 0 0 0 1000 1000];
>> AM=[1 1 -1 0 0 1 0;-1 1 0 -1 0 0 1;0 1 0 0 1 0 0];
>> bM=[2;1;3];
>> bfsM=[5 6 7];
>> [sol fobj pi cr iters B N]=ProgLineal_3(cM,AM,bM,sqrt(eps),bfsM)
It. Sale B Entra B
Cos. red.
fobj
1
7
2
-2002.000000
1998.000000
2
6
1
-2001.000000
-1.000000
3
1
4
-1.500000
-3.000000
4
5
3
-2.000000
-4.000000
0
3
1
2
0
0
0
fobj =
-6
pi =
0
0
-2
cr =
1000
iters =
4
B =
3
N =
6
1000
4
2
7
5
1
2
1
Análisis de sensibilidad
88/133
La solución óptima que obtiene el método Símplex de un problema de PL es
como una fotografía fija de una situación real que habitualmente evoluciona en
el tiempo, incluso a corto o muy corto plazo.
Con un pequeño esfuerzo, una vez obtenida la solución con el Símplex, se puede
conocer hasta qué punto ese óptimo seguirá siéndolo y qué pueden representar,
en costes o beneficios, determinadas variaciones de los parámetros del problema.
Esto es frecuente estudiarlo cuando los costes de producción de un artículo
deben variar en el tiempo al fluctuar el precio de una materia prima o, en
general, cuando los datos del problema son estimaciones más o menos
imprecisas de una realidad en la que oscilan entre determinados márgenes.
Estudiemos cómo afecta a la solución de un problema de PL el que varíen los
coeficientes de la función objetivo c o el vector b.
89/133
Cambios en el vector de costes
Consideremos la familia de programas, función de un vector de parámetros ,
definida por
min. Œc C T x
s. a Ax D b
x 0:
La base B de la solución óptima del problema original (sin los parámetros)
seguirá siéndolo mientras los costes reducidos de las variables no básicas sigan
siendo no negativos; es decir, mientras que
ŒcN C N T
ŒcB C B T B 1N 0T :
90/133
Consideraremos los dos casos más generales: 1. Que la variable cuyo coeficiente
de coste varía no está en la base; 2. Que está en la base.
1. La variable cuyo coeficiente de coste varía no está en la base. Para que los
costes reducidos sigan siendo óptimos, es decir,
ŒcN C N T
cBT B 1N 0T ;
se tiene que cumplir que
cNT
cBT B 1N C TN D cNNT C TN 0T :
Esto obliga a que el coeficiente del vector coste sólo pueda variar hacia
abajo (decrecer), en una cantidad i igual al coste reducido de la variable i
que varía. Es decir
i cNi :
Hacia arriba podría variar hasta el infinito.
91/133
2. La variable cuyo coeficiente de coste varía está en la base. La condición de
optimalidad para los costes reducidos es ahora
cNT
ŒcB C B T B 1N D cNNT
BT B 1N 0T :
El intervalo de valores Œ i ; i  de la posible variación en el coste de una
variable en la base será
i D mKax mKax f cNk =dk ; dk > 0g ; 1 1kn m
mKın mKın
1kn m
expresión en la que d D
de la inversa de B por N .
f cNk =dk ; dk < 0g ; 1 D i
1
B.i;W/
N
T
,es el vector fila i -ésimo del producto
92/133
Cambios en el vector b
Consideremos el problema:
min. c T x
s. a Ax D b C ı
x 0:
Al cambiar b, la solución óptima variaría así
h
T
T T
N B 1ı T
x D ŒxB x N  D bC
0T
iT
;
donde bN D B 1b y B es la base óptima.
Esa base seguirá siendo óptima en tanto y cuando sus coeficientes sigan siendo
no negativos.
93/133
Para cada modificación ıi del coeficiente i del vector b, si
2 3
0
6 ::: 7
6 7
16 7
columna i -ésimo
d D B 617
i D B 1e i ; vector
de
la
inversa
de la base
6 :: 7
4:5
0
el intervalo Œı i ; ı i  en el cual la solución sigue siendo óptima es
˚
ı i D mKax mKax
bNk =dk ; dk > 0 ; 1 ı 1km
mKın
mKın
1km
˚
bNk =dk ; dk < 0 ; 1 D ı i
94/133
Ejemplo Supongamos que hemos resuelto el problema
min. 40x C 53y
s. a
60x C 80y 360
160x C 120y 680
x; y 0:
La solución completa es
2 3
2
637
60
80
120
80
1
1
7
xB D 6
;
405 ; B D 160 120 ; B D 5600
160 60
0
1 0
368
368
1
1
N D
; D 560
y cN D 560
:
0 1
2
2
La función objetivo es 239.
1. Para que rango de costes de x la solución sigue siendo óptima.
Como x está en la base, cualquier cambio cx
cx C afecta al vector
N
y al vector de costes reducidos de las variables no básicas, c.
El vector d de las expresiones anteriores es
1
1
120 80
d D B.1;W/
N D 5600
1
120 80 :
D 5600
1
0
0
1
1 1 368 2 C 120 80 :
560
5600
Para que la solución óptima anterior lo siga siendo, debe cumplirse que
Los costes reducidos variarán de la siguiente manera.
cN
95/133
3680 120 0
20 C 80 0:
Esto se cumple en Œ ;  D Œ 1=4; 92=3. El coeficiente de x puede
moverse pues en el rango Œ39;75 70;67 para que la solución siga siendo
óptima.
2. Cuánto puede variar el coeficiente 360 del término independiente sin
que cambie la base óptima, es decir b1
b1 C ı.
El vector d es en este caso
96/133
por lo que xB
1
120
1
;
d DB 1
D
160
0
5600
2
120
1
C ı 5600
.
3
160
La base óptima original seguirá siendo óptima mientras xB sea positiva;
es decir, mientras
(
2
120
5600
ı0
3C
160
5600
ı 0:
Esto se cumple en el intervalo Œı; ı D Œ 105 280=3, por lo que el
coeficiente 360 puede variar entre 360 105 y 360 C 280=3 sin que cambie
la solución óptima del problema original.
El valor del multiplicador símplex 1 indica cómo varía la función objetivo
cuando coeficiente 360 se mueve en ese rango de valores:
z
zC
33
368
ı D 239 C ı:
560
35
El método Símplex para variables acotadas
Nos ocupamos ahora del problema
min. c T x
s. a Ax D b
l x u:
Las variables están así acotadas, encajadas o box constrained. Si la xj tiene
lj D 1 y uj D 1, se dice libre.
Se podrían introducir variables de holgura y aplicar el método habitual,
cT x
Ax D b
x C x1 D u
x x2 D l
x; x 1 ; x 2 0:
min.
s. a
Actuando así, el número de variables se triplica
y el número de condiciones pasa a ser m C 2n.
97/133
98/133
Considérese a continuación el sistema de inecuaciones
Ax D b
l x u;
donde la matriz A mn es, sin pérdida de generalidad, de rango m.
Definición Una solución básica factible de ese sistema es aquella en la que n
m
variables no básicas tienen el valor de uno de sus límites, l ó u, y las restantes m variables
básicas corresponden a vectores columnas linealmente independientes de A.
Descompongamos la matriz A en ŒB Nl Nu, con rango.B/ D m, y el vector x
en ŒxBT x TNl x TNu :
99/133
Un vector x se dice solución básica factible del sistema de inecuaciones
Ax D b
l x u;
si xB es solución del sistema
BxB D b;
y
x Nl D l Nl
x N u D uN u :
Si además l B < xB < uB , entonces x es una solución básica factible no
degenerada; si algún coeficiente de xBj es igual a lj o uj , la solución se dice
básica factible degenerada.
Expresemos las condiciones de la forma BxB C Nl x Nl C Nux Nu D b. El vector
xB es entonces:
100/133
xB D B 1 b
B 1 N l x Nl
B 1 N u x Nu :
La función objetivo:
z D c T x D cBT xB C cNT l x Nl C cNT u x Nu
D cBT B 1b B 1Nl x Nl B 1Nux Nu C cNT l x Nl C cNT u x Nu
D cBT B 1b C cNT l cBT B 1Nl x Nl C cNT u cBT B 1Nu x Nu :

cost.
reducid
o

s
cost.
reducid
os
Supongamos que partimos de una solución básica factible.
2
En ese punto se examinan los costes reducidos de las variables2 no básicas.
Si puede ser mejorada –en un problema de minimización–, alguna variable
no básica que esté en su límite inferior tendrá un coste reducido negativo, u
otra en su límite superior un coste reducido positivo.
En uno de sus límites.
101/133
La función objetivo se puede mejorar (decrementar) si
T
1
cj cB B aj < 0 para alguna xj D lj
T
1
cj cB B aj > 0 para alguna xj D uj :
o
Si se elige una variable no básica, xq por ejemplo, como aquella que ha de
mejorar la función objetivo, y su valor se modifica desde la cota en el que esté
en la dirección hacia la otra cota, la función objetivo mejorará (decrecerá)
mientras se puedan modificar las variables básicas de tal manera que persista la
factibilidad del problema (se satisfagan las condiciones); es decir, hasta que:
a) una variable básica llegue a uno de sus límites, en cuyo caso se hará no
básica, pasando a ocupar su sitio en la base la no básica que se modifica; o
b) la variable no básica que se modifica llegue al límite opuesto del que parte
antes de que ocurra lo anterior. La base entonces no se modifica.
Si ocurren a) y b) a la vez: solución básica factible degenerada.
Si Nl es el conjunto de los índices de las variables no básicas en su límite inferior
y Nu el de las no básicas en su límite superior, y se modifica xq , se tendrá que
102/133
xB D B 1 b B 1 Nl x Nl
D bO y;
con bO D B
1
b
B 1 Nl x Nl
B 1 Nu x Nu
B 1 Nu x Nu y y D B 1 aq .
B 1 aq
Opciones: que q 2 Nu; o q 2 Nl .
Si q 2 Nl , el incremento posible, , de xq desde su límite inferior lq , ha de ser
positivo para seguir manteniendo la factibilidad; el máximo será
8
bO i lBi
ˆ
ˆ
D
mK
ı
n
W
y
>
0I
1
W
y
0
ˆ 1
1i m
i
i
yi
ˆ
ˆ
ˆ
ˆ
<
bO i uBi
D mKın
D
mK
ı
n
W
y
<
0I
1
W
y
0
ˆ 2
1i m
i
i
yi
ˆ
ˆ
ˆ
ˆ
ˆ
ˆ
:
uq lq :
Si q 2 Nu, el incremento desde uq ha de ser negativo. El máximo:
8
bO i lBi
ˆ
ˆ
1 D mKın1i m
W yi < 0I 1 W yi 0
ˆ
yi
ˆ
ˆ
<
D mKın
bO i uBi
ˆ 2 D mKın1i m
W yi > 0I 1 W yi 0
ˆ
yi
ˆ
ˆ
ˆ
:
lq uq :
103/133
El último paso es modificar las estructuras de datos correspondientes, a fin de
reflejar los cambios habidos en la base.
Todos los códigos comerciales del método Símplex lo hacen para variables
acotadas:
En un ordenador, una variable en forma estándar, xj 0, en realidad se
trata como si 0 xj 1020, por ejemplo, ya que en una máquina que
trabaje con precisión finita la cantidad 1020 es suficientemente grande.
En la tabla que sigue se expone el algoritmo Símplex revisado para variables
acotadas.
Paso 1 – Asignación de precios. Comprobación de óptimo.
(a) Calcular los multiplicadores símplex resolviendo el sistema B T D cB .
(b) Calcular los costes reducidos de las variables no básicas, cNj D cj T aj , para todo j … B.
(c) Comprobar que se ha llegado al óptimo: si cNj 0 para todo j 2 Nl y cNj 0 para todo j 2 Nu , PARAR; la
solución es óptima.
Paso 2 – Obtener columna de pivotación.
(a) Determinar la variable no básica xq que debe entrar en la base (encontrar una dirección de descenso): escoger
q … B tal que
cNq D mKax j mKın fcNj < 0gj; mKax fcNj > 0g :
j 2Nl
j 2Nu
(b) Resolver By D aq . Si q 2 Nl , ir al paso 3; si q 2 Nu , al 3’.
Paso 3 – Obtener fila de pivotación. Determinar qué variable básica xjp sale de la base: calcular W
xji lji
xji uji
D mKın mKın
W yi > 0 ; mKın
W yi < 0 ; uq lq :
1i m
1i m
yi
yi
Si T ol:: PARAR; el problema es no acotado. Si no, ir al paso 4.
Paso 3’ – Obtener fila de pivotación. Determinar qué variable básica xjp sale de la base: calcular W
xji uji
xji lji
W yi > 0 ; mKın
W yi < 0 ; lq uq :
D mKın mKın
1im
1i m
yi
yi
Si T ol:: PARAR; el problema es no acotado.
Paso 4 – Pivotación. Adaptar la solución y la matriz B e ir al paso 1:
xq
lq C ó uq C ;
xji
xji yi ; 1 i m ;
B
B C .aq ajp /epT ;
(sólo
B
B [ fqgnfjp g ;
(sólo
Nl
Nl [ fjp gnfqg ;
(sólo
Nu
Nu [ fjp gnfqg ;
(sólo
jp
q;
(sólo
si
si
si
si
si
6D uq
6D uq
6D uq
6D uq
6D uq
lq )
lq )
lq y q 2 Nl )
lq y q 2 Nu )
lq ).
104/133
function [fobj niters x] = Rsimplex_1(file,A,b,c,lb,ub);
% Resuelve min c’x st Ax=b, lb<=x<=ub con Simplex revisado en dos FASES
if nargin>2
if nargin<4, error(’Si no se lee de fichero, se requieren al menos’,...
’ cuatro argumentos en entrada’); end
if nargin<6, ub = Inf*ones(size(c)); end
if nargin<5, lb = zeros(size(c)); end
A = sparse(A);
else
% Lectura de los datos desde fichero ’file’ en MPS
eval([’!copy ’ file ’ d:\Matlab2010b\work\tmp\in.mps’]);
LIPSO = ’d:\Matlab2010b\work’; exit=mps2mat(LIPSO); fprintf(’\n’);
load d:\Matlab2010b\work\tmp\default;
lb=lbounds; ub=ubounds;
end
[m n] = size(A); zer_tol = 1.0e-5; piv_tol = 1.0e-8; niters=0; t=cputime;
f=fopen(’Salida_Rsimplex’,’w’);
fprintf(f,’ It. Fase
Sinf/Fobj
Nopt\n’);
fprintf(f,’----------------------------------\n’);
% FASE I
v
= zeros(n,1);
lbdd = find(lb>-Inf);
v(lbdd) = lb(lbdd); free = setdiff(1:n,lbdd);
ubdd = free(ub(free)<Inf); v(ubdd) = ub(ubdd);
if isempty(ubdd), N = -lbdd’;
% Var no en la base: en cota inf. No hay en u
else N = [-lbdd’ ubdd]; free = setdiff(free,ubdd);
end;
f = length(free);
if f>0
% ¡OJO! Hay variables libres
[L U P Q] = lu(A(:,free));
% Q es matriz de permutación
free = free*Q’;
i = length(find(abs(diag(U))>piv_tol)); j = free(i+1:f);
if ~isempty(j)
N = [N j]; free = setdiff(free,j); f = length(free);
lb(j) = zeros(size(j)); ub(j) = zeros(size(j));
end;
[k i] = find(P(1:f,:));
% relies on diag(U) having zeros at end
v(free) = U(1:f,1:f)\(L(1:f,1:f)\(P(1:f,:)*(b - A*v)));
k = setdiff(1:m,k); m = m-f; B = [free n+1:n+m];
A = [A sparse(k,1:m,sign(b(k)-A(k,:)*v+eps),m+f,m)];
else
% No hay variables libres
B = n+1:n+m; j = []; A = [A sparse(1:m,1:m,sign(b-A*v+eps*ones(size(b))))];
end
lb = [lb; zeros(m,1)]; ub = [ub; Inf*ones(m,1)];
w = [zeros(n,1); ones(m,1)];
% Variables + artificiales para FASE I
[x niters B N L U] = rsmbdd(A,b,w,lb,ub,B,N,1,niters);
% FASE I
if w’*x>zer_tol, error(’El problema no es factible’); end
% Adaptar para FASE II
ub(n+1:n+m) = zeros(m,1); c = [c; zeros(m,1)];
if ~isempty(j)
c_r = c(j)’-c(B)’*(U\(L\A(:,j)));
if norm(c_r,inf)>zer_tol, error(’Problema no acotado’); end
end
[x niters] = rsmbdd(A,b,c,lb,ub,B,N,2,niters);
% FASE II
x = x(1:n); fobj=c(1:n)’*x;
fclose(’all’);
fprintf(’[m n]=[%g %g]. Tiempo CPU:%10.4f; fun. obj.=%17.4e\n’,m,n,cputime-t,fobj);
function [x niters B N L U] = rsmbdd(A,b,c,lb,ub,B,N,fase,niters)
% Rutina de Símplex revisado para min c’x s.a Ax=b, lb<=x<=ub.
% B vector 1xm con los índices de las variables (columnas) en la base.
% N vector 1x(l-m) con los índices de las variables no básicas,
%
es decir, en sus límites (+/-1).
[m l]
= size(A); f=fopen(’Salida_Rsimplex’,’a’);
zer_tol = 1.0e-5; piv_tol = 1.0e-8;
[L U] = lu(A(:,B));
if any(abs(diag(U))<piv_tol), error(’La base inicial no es invertible’); end
x = lb; upper = N(N>0); x(upper) = ub(upper);
x(B) = U\(L\(b-A(:,abs(N))*x(abs(N))));
while 1
if any(x(B)<lb(B)-zer_tol | x(B)>ub(B)+zer_tol), error(’Punto no factible’); end
u = L’\(U’\c(B));
c_r = c(abs(N))’-u’*A(:,abs(N));
% Costes reducidos no básicas
if ~any(c_r.*N>zer_tol), return, end
% SE HA LLEGADO A UNA SOLUCIÓN
Nopt=sum(c_r.*N>zer_tol);
[min_red_cost s] = max(c_r.*sign(N)); % Entra var. s no básica con>coste reducido
blk = abs(N(s));
min_ratio = ub(blk) - lb(blk); order = -sign(N(s)); % Puede s ir de u a l o l a u
d = order*U\(L\A(:,blk));
block_lb = find(d>=piv_tol & lb(B)>-1e32); % Comprobar básica que llega a lb
if ~isempty(block_lb)
[min_lb index_r] = min((x(B(block_lb))-lb(B(block_lb)))./d(block_lb));
if min_lb<min_ratio
r=block_lb(index_r);
min_ratio = min_lb;
blk = B(r);
end
end
block_ub = find(d<=-piv_tol & ub(B)<1e32); % Comprobar básica que llega a ub
if ~isempty(block_ub)
[min_ub,index_r] = min((x(B(block_ub))-ub(B(block_ub)))./d(block_ub));
if min_ub<min_ratio
r=block_ub(index_r);
min_ratio = min_ub;
blk = B(r);
end
end
if min_ratio>1e32, error(’Problema no acotado’); end
% Readaptar solución y datos
x(B) = x(B)-min_ratio*d;
x(abs(N(s))) = x(abs(N(s))) + order*min_ratio;
if blk == abs(N(s)), N(s) = -N(s);
% Se bloquea la no básica
else swap = B(r); B(r) = abs(N(s)); N(s) = -sign(d(r))*swap;
[L U] = lu(A(:,B));
end
niters=niters+1;
fprintf(f,’%5d%4d%18.9e%6d\n’,niters,fase,c’*x,Nopt);
end
105/133
Ejemplo Resolvamos
min. 2x1
s. a
x3
2x1 C x2 C x3 10
x1 C x2 x3 4
0 x1 4
0 x2 6
1 x3 4:
Se introducen las variables de holgura:
min. 2x1
s. a
4x2
4x2
x3
2x1 C x2 C x3 C x4
D 10
x1 C x2 x3
C x5 D 4
0 x1 4
0 x2 6
1 x3 4
x4; x5 0:
Como es inmediato obtener una solución factible y una base de partida,
entramos directamente en la fase II del método Símplex.
106/133
107/133
Partiremos de:
10
B D Œa4; a5 D
; Nl D Œa1; a2; a3 ; Nu D ;
01
y de la solución inicial x D Œ0; 0; 1; 9; 5T . La función objetivo en este punto es
1.
Iteración 1. Paso 1
Calculemos los multiplicadores símplex:
10 0
0
D B T cB D
D
:
01 0
0
108/133
Los costes reducidos de las variables no básicas son:
2
cN1 D c1 T a1 D 2 Œ0; 0
D 2;
1
1
cN2 D c2 T a2 D 4 Œ0; 0
D 4
y
1
1
cN3 D c3 T a3 D 1 Œ0; 0
D 1:
1
Todavía no se ha llegado al óptimo del problema pues las variables x1, x2 y x3
están en sus límites inferiores y sus costes reducidos son negativos.
Iteración 1. Paso 2
Se elige la variable x2 para entrar en la base por ser la no básica de coste
reducido más negativo.
109/133
Se resuelve By D a2:
10 1
1
y D B 1 a2 D
D
:
01 1
1
Iteración 1. Paso 3
La variable a salir de la base de determinará de calcular el incremento :
)
(
D mKın
1 D mKın
u2
xB1
l2 D 6
y1
0
lB1 xB2
;
lB2
y2
D
9
1
0 5
;
0
1
D 5:
Saldrá, por tanto, la variable de número de índice 2 en la base, x5, pues es la
que antes llega a su límite inferior.
110/133
Iteración 1. Paso 4
Readaptemos la solución y las estructuras de datos:
x2
x4
x5
l2 C D 0 C 5 D 5
x4 y1 D 9 5 1 D 4
x5 y2 D 5 5 1 D 0:
La nueva solución es x D Œ0; 5; 1; 4; 0T , con
11
B D Œa4; a2 D
; Nl D Œa1; a3; a5 y Nu D ;:
01
La nueva función objetivo es
21.
Iteración 2. Paso 1
111/133
Calculemos los multiplicadores símplex:
1 0
0
10
0
10
D
D
:
D B T cB D
11
4
11
4
4
Los costes reducidos de las variables no básicas son:
2
cN1 D c1 T a1 D 2 Œ0; 4
D 2;
1
1
cN3 D c3 T a3 D 1 Œ0; 4
D 5
1
0
cN5 D c5 T a5 D 0 Œ0; 4
D 4:
1
y
Como la variable x3 está en su límite inferior y su coste reducido es negativo,
todavía no se ha llegado al óptimo.
Iteración 2. Paso 2
Se elige la variable x3 para entrar en la base. Se resuelve By D a3:
1 1
1
2
y D B 1 a3 D
D
:
0 1
1
1
Iteración 2. Paso 3
La variable a salir de la base de determinará de calcular :
8
nx l o ˚ 9
B
B
ˆ
1 D mKın 1y1 1 D 4 2 0 >
>
ˆ
>
ˆ
>
ˆ
<
nx u o ˚ =
D 1:
D mKın 2 D mKın B2 B2 D 5 6
y
1
>
ˆ
2
>
ˆ
>
ˆ
>
ˆ
;
:
u3 l3 D 4 1
Saldrá, por tanto, la variable de número de índice 2 en la base, x2, pues es la
que antes llega a uno de sus límites: el superior.
112/133
113/133
Iteración 2. Paso 4
Readaptemos la solución y las estructuras de datos:
x3
x4
x2
l3 C D 1 C 1 D 2
x4 y1 D 4 1 2 D 2
x2 y2 D 5 C 1 1 D 6:
La nueva solución es x D Œ0; 6; 2; 2; 0T , con
1 1
B D Œa4; a3 D
; Nl D Œa1; a5 y Nu D Œa2:
0 1
La nueva función objetivo es
26.
114/133
Iteración 3. Paso 1
Calculemos los multiplicadores símplex:
1 1 0
0
1 0
0
0
D B T cB D
D
D
:
1 1
1
1
1 1
1
Los costes reducidos de las variables no básicas son:
2
cN1 D c1 T a1 D 2 Œ0; 1
D 3;
1
1
cN2 D c2 T a2 D 4 Œ0; 1
D 5
1
0
cN5 D c5 T a5 D 0 Œ0; 1
D 1:
1
y
Como las variables x1 y x5, que están en sus límites inferiores, tienen costes
reducidos negativos, todavía no se ha llegado al óptimo del problema.
Iteración 3. Paso 2
Se elige la variable x1 para entrar en la base. Se resuelve By D a1:
1 1
1
2
1
1
2
3
y D B 1 a1 D
D
D
:
0 1
1
0 1 1
1
Iteración 3. Paso 3
La variable a salir de la base de determinará de calcular :
8
nx l o ˚ 9
B1 B1
ˆ
D
mK
ı
n
D 230 >
>
ˆ
1
y
>
ˆ
1
ˆ
>
<
nx u o ˚ = 2
D :
D mKın 2 D mKın B2 B2 D 2 4
y
1
>
ˆ
3
2
ˆ
>
>
ˆ
>
ˆ
;
:
u1 l 1 D 4 0
Saldrá x4 pues es la que antes llega a uno de sus límites: el inferior.
115/133
116/133
Iteración 3. Paso 4
Readaptemos la solución y las estructuras de datos:
x1
x4
x3
La nueva solución es:
l1 C D 0 C 2=3 D 2=3
x4 y1 D 2 .2=3/ 3 D 0
x3 y2 D 2 C .2=3/ 1 D 8=3:
2 3
2
3
x1
2=3
6x27 6 6 7
6 7 6 7
6x37 D 68=37 :
4x45 4 0 5
x5
0
117/133
También,
2 1
B D Œa1; a3 D
; Nl D Œa4; a5 y Nu D Œa2:
1 1
La nueva función objetivo es
28.
Iteración 4. Paso 1
Calculemos los nuevos multiplicadores símplex:
1 2
1
2
1=3
1=3
2
1
D B T cB D
D
D
:
1 1
1
1=3 2=3
1
0
118/133
Los costes reducidos de las variables no básicas son:
1
cN2 D c2 T a2 D 4 Œ 1; 0
D 3;
1
1
cN4 D c4 T a4 D 0 Œ 1; 0
D1
y
0
0
D 0:
cN5 D c5 T a5 D 0 Œ 1; 0
1
Los costes reducidos de las variables no básicas en sus límites inferiores, x4 y x5,
son 1 y 0, y el de la variable en su límite superior, x2, es -3.
Se ha llegado, por tanto, a un óptimo del problema, aunque no es el único.
119/133
En efecto, si se incrementa x5, manteniendo x2 D 6 y x4 D 0 fijos, las variables
x1 y x3 se modificarán de la forma:
x1
2=3
1=3
D B 1 b B 1 a5 x 5 D
x:
x3
8=3
2=3 5
Para cualquier x5 < 2, la solución
2 3
2
3
x1
2=3 1=3x5
7
6x27 6
6
6 7 6
7
6x37 D 68=3 C 2=3x57
5
4x45 4
0
x5
0
es óptima. El valor de la función objetivo óptimo es
28.
u
120/133
Con el programa Rsimplex_1 presentado antes, se consigue esto:
>>
>>
>>
>>
>>
A=[2 1 1;1 1 -1];
b=[10;4];
c=[-2 -4 -1];
l=[0 0 1];
u=[4 6 4];
>> [fobj niters x]=Rsimplex_1([],A,b,c,l,u)
[m n]=[2 3]. Tiempo CPU:
0.0312; fun. obj.=
fobj =
-28
niters =
4
x =
0.666666666666667
6.000000000000000
2.666666666666667
-2.8000e+001
Para otro ejemplo mucho más grande:
» [fobj niters]=Rsimplex_1(’etam-mi.mps’)
1 archivo(s) copiado(s).
NAME done ROWS done COLUMNS done RHS done RANGES done BOUNDS done reading done mps2mat doneStatus=0
[m n]=[400 816]. Tiempo CPU:
3.0888; fun. obj.=
-7.5572e002+
fobj =
-7.557152331775660e+002
niters =
2009
Implementaciones “comerciales” del Símplex
121/133
Forma de “tableau”
z
z
1
xB
0
xB
0
I
cNT
xN
cBT B 1 N
TD
cBT B 1 b
El tableaux es así:
B 1N
B 1b
Si TD designa Término de la Derecha y T es una matriz cuyos coeficientes son
los del tableau, en realidad éste representa el sistema
3
2
z
7
6
6 xB 7
T6
7 D 0;
4 xN 5
TD
de m C 1 ecuaciones lineales y n C 1 variables: las n de x y z.
Esta es una de las primeras formas en que se explicitó computacionalmente el
método Símplex, con vistas a su mejor comprensión. Se diferencia de lo
expuesto en que el cálculo de y cNN del Paso 1, y el de y del Paso 2 se
eliminan y el Paso 4 de pivotación se lleva a cabo directamente en el tableau.
Si suponemos que las variables básicas que entran y salen de la base en una
determinada iteración son la q y la p, y que las filas y las columnas del tableau
de esa iteración están numeradas partiendo de cero, la operación de pivotación
conlleva:
122/133
i) dividir la fila p de T por tpq , el coeficiente que ocupa la fila p y la columna
q de la matriz T , y
ii) para 0 i m, i ¤ p, restar de la fila i la p multiplicada por tiq a fin de
hacer cero el elemento q de esa fila.
Los costes reducidos, cNN , y el vector de variables básicas, B 1b, se obtienen
directamente del tableau.
Ejemplo Resolvamos:
min.
x1 C x2
s. a
x1 C x2 C 2x3 9
x1 C x2
x3 2
x1 C x2 C x3 4
x1 ; x2 ; x3 0:
123/133
4x3
Iteración 1
z
x4
x5
x6
con variables de
holgura
z
1
0
0
0
x1
1
1
1
1
x2
1
1
1
1
x3
4
2
1
¬
min.
x1 C x2
s. a
x1 C x2 C 2x3 C x4
D9
x1 C x2
x3
C x5
D2
x1 C x2 C x3
C x6 D 4
x1 ; x2 ; x3 ; x4 ; x5 ; x6 0:
x4
0
1
0
0
x5
0
0
1
0
4x3
x6
0
0
0
1
TD
0
9
2
4
La variable que entra en la base es la no básica cuyo coste reducido es más
negativo: x3.
El ¬ indica que de entre las relaciones posibles, 9/2 y 4/1, (la otra afecta a un
número negativo) se elige esta última, por lo que saldrá de la base aquella
variable que pivota en la tercera fila: x6.
Iteración 2
124/133
z
x4
x5
x3
z
1
0
0
0
x1
3
®
0
1
x2
5
1
2
1
x3
0
0
0
1
x4
0
1
0
0
x5
0
0
1
0
x6
4
2
1
1
TD
z
1
0
0
0
x1
0
1
0
0
x2
4
x3
0
0
0
1
x4
1
x5
0
0
1
0
x6
2
TD
2
3
1
3
16
1
6
4
Iteración 3
z
x1
x5
x3
1
3
2
2
3
1
3
0
1
3
17
1
6
1
3
13
3
Se ha llegado a un punto en el que todos los costes reducidos de las variables no
básicas son positivos por lo que se ha conseguido el óptimo del problema.
La solución final es por tanto
Œx1; x2; x3; x4; x5; x6T D Œ1=3; 0; 13=3; 0; 6; 0T :
El valor de la función objetivo es z D
17.
125/133
z
x1
x2
x3
1
0
4
1
3
x1
0
1
x5
0
0
2
0
2
3
x3
z
0
La base óptima la constituyen los
2
10
B D Œa1; a5; a3 D 4 1 1
10
x6
TD
0
2
17
0
2
3
1
3
x4
x5
0
1
0
1
3
0
0
1
1
6
1
1
3
0
1
3
13
3
vectores columna a1, a5 y a3. Es decir,
3
min. x C x
4x
2
s. a
x C x C 2x C x
D 9
x C x
x
C x
D 2
15
x C x C x
C x D 4
x
;
x
;
x
;
x
;
x
; x 0:
1
1
2
3
1
2
3
1
2
3
1
2
3
1
4
5
6
2
3
4
5
6
La inversa de B es la submatriz que en el tableau final ocupa el lugar que en el
inicial ocupaba la submatriz identidad; es decir,
2
3
1=3 0 2=3
B 1 D 4 0 1 1 5:
1=3 0 1=3
126/133
Otras variantes y mejoras del Símplex
Implementación de la inversa de la base en forma de productos
matriciales
En problemas grandes, resolver los sistemas B T D cB y By D aq es costoso.
La modificación de B 1 en una iteración es
BN
donde
2
E DI
.y
ep /epT
yp
6
6
6
6
D6
6
6
6
4
1
1
D E B 1;
3
y1 =yp
::
:::
7
:
7
7
1 yp 1 =yp
7
7 y y D B 1 aq :
1=yp
7
7
ypC1 =yp 1
7
::
::: 5
:
ym =yp
1
"
columna p
127/133
Si el Símplex se inicia con una matriz B igual a la identidad, después de k
iteraciones la matriz B 1 se puede expresar en una forma producto, de la
siguiente manera
Bk 1 D E k E k 1 E 1 B 1 :
Para implementar este esquema operativo se requiere almacenar los valores de
los coeficientes de la columna de la matriz E i que la hace diferente de la matriz
identidad, y el propio valor del índice i .
Para evitar errores de redondeo, conforme avanza el proceso es aconsejable
refactorizar periódicamente la matriz B 1.
La variante del Símplex que incluye esta forma de actuar es la que sigue.
128/133
Paso 1 – Operación BTRAN (backward transformation). Calcular los multiplicadores símplex a partir de
T
T D cB
B
1
D
T
cB
Ek Ek
1
E1 :
Determinar los costes reducidos de las variables no básicas a partir de
cNj D cj
T aj ;
para todo j 2 N:
Si cNj 0 para todo j … B, PARAR; la solución es óptima.
Paso 2 – Operación FTRAN (forward transformation). Escoger q 2 N tal que cNq D mKınj 2N fcNj < 0g. Calcular
yDB
1
aq D .E k .E k
1
.E 1 aq ///:
Si y 0, PARAR; el problema es no acotado.
Paso 3 – Operación CHUZR. Si xj D B 1 b, establecer la variable básica xjp que sale de la base determinando la fila p sobre la que pivota
la columna q a partir de la relación
xjp
xji
D mKın
W yi > 0 :
yp
1i m yi
Paso 4 – Operación WRETA. Adaptar la matriz inversa de la base y la solución a partir de
E kC1
La nueva inversa de la base será B
1
2
1
6 :
::
6
6
6
1
6
D6
6
6
6
6
4
3
y1 =yp
7
::
7
:
7
7
yp 1 =yp
7
7:
1=yp
7
7
ypC1 =yp 1
7
7
::
::
5
:
:
ym =yp
1
E kC1 E k E 2 E 1 y la nueva solución xj
E kC1 xj .
129/133
Implementación de la base y su inversa mediante factorización LU
La idea es factorizar la matriz básica en la forma LU e ir aplicándole a ella una
sucesión de matrices elementales —que difieren de la identidad en un solo
elemento debajo de la diagonal principal— y matrices de permutación.
Si, por ejemplo,
2
3
321
U D 4 3 55 ;
4
las matrices U 1, U 2 y U 3 serán
2
3
12
U1 D 4 1 5;U2 D 4 3 5
1
1
3
3
2
Es fácil comprobar que U D U 3U 2U 1.
2
3
1
y U 3 D 4 1 55 :
4
1
130/133
Después de k iteraciones se tendrá que
Bk D B0 E 1 1 E 2 1 E k 1 I
es decir, que
L m P m L 1 P 1 Bk D U m U m
1 U 1E 1
1
E 2 1 E k 1:
Para almacenar las matrices E i , Lj y U j en la memoria del ordenador sólo es
necesario guardar el valor de los subíndices y los elementos distintos de cero de
las columnas que designan esos subíndices.
De las matrices de permutación P i sólo es necesario guardar un puntero que
indique con qué fila se intercambia la i .
131/133
Complejidad computacional del Símplex
Cada iteración requiere alrededor de m.n m/ C .m C 1/2 multiplicaciones y
m.n C 1/ sumas o restas: O.mn/ en los dos casos pues n m..
El número de puntos extremos de un programa lineal en forma estándar con n
variables y m condiciones es C.n; m/. Si n 2m, se tiene que
n m
nŠ
2m :
C.n; m/ D
mŠ.n m/Š
m
De acuerdo con esto, en el peor de los casos, parece lógico temerse un número
de iteraciones exponencial.
Un problema clásico es el estudiado por Klee y Minty [1972]:
maximizar xn
s. a
0 x1 1
ıxi 1 xi 1
xi 0;
132/133
i D 2; : : : ; n; 0 < ı < 1=2;
i D 1; 2; : : : ; n:
ıxi 1;
Tiene 2n puntos extremos. Para n D 2 y n D 3 es el de la figura.
Comenzando en x D 0 (factible), con precisión absoluta, el método recorrería
los 2n puntos extremos.
x2
x(3) =
x2
0
1
x(2) =
x(1) =
x(0)
1
1−δ
x(6)
x(5)
x(4)
x3
x1
x(7)
x(3)
1
δ
x(2)
x(1)
x(0)
x1
La práctica de los últimos cincuenta años ha permitido constatar que los casos
extremos, como el ejemplo de Klee y Minty, rara vez ocurren en la realidad.
Grosso modo, en problemas de tamaño moderado, el método Símplex requiere
un número de iteraciones real comprendido entre 4m y 6m.
En problemas muy grandes, el número de iteraciones que cabe esperar llevar a
cabo para resolverlos es ˛ m, donde e ˛ < log2.2 C n=m/.
En resumen, la complejidad computacional práctica esperada del método
Símplex es del O.m2n/.
133/133
Teniendo también en cuenta el efecto que el tratamiento de la dispersidad de los problemas puede acarrear en la
complejidad del método, diversos estudios han establecido que la complejidad del método la define la ecuación
Km˛ nd 0;33 , donde K es una constante, 1;25 < ˛ < 2;5 y d es el número de elementos distintos de cero en la matriz
A, dividido por nm.

Documentos relacionados