programación lineal para la ingeniería técnica - unizar.es · método del simplex revisado, que...
TRANSCRIPT
Programación Lineal para la Ingeniería Técnica
95
La utilización del ordenador como instrumento auxiliar en la fase operacional de la resolución de un problema real de optimización y, concretamente, en nuestro caso de Programación Lineal, se ha hecho indispensable debido no tanto a la complejidad teórica de los cálculos como al gran volumen de operaciones que se realizan en cada iteración del Método del Simplex. Para propósitos computacionales no se utiliza el algoritmo del Simplex con la estructura de tablas que hemos descrito, puesto que no todos los cálculos son realmente necesarios. Es mucho más fácil y rápido utilizar el que se conoce como Método del Simplex Revisado, que es en realidad el método del Simplex pero mejorado. Cuando trabajamos con problemas de gran magnitud, quizá deban efectuarse cálculos innecesarios sobre cientos de columnas hasta que las variables correspondientes se incorporan a la base. Efectuar completamente la eliminación gaussiana aclara la teoría, y por ello hemos presentado así el método anteriormente, pero no se puede justificar, en la práctica, la complejidad computacional que ello entraña. La diferencia esencial entre el método del Simplex y el Revisado es que éste lleva también como información la matriz inversa de la matriz de coeficientes de las variables básicas en cada etapa. El problema de Programación Lineal en forma matricial es: max Z = CX s.a.: AX = b 0≥X Denotaremos las columnas correspondientes de la matriz A como:
Programación Lineal para la Ingeniería Técnica
96
=
1
11
1
ma
a
a M , ...,
=
mn
n
n
a
a
a M
1
Supongamos que tenemos una solución factible básica del problema lineal, siendo
mxx ,,1 … las variables básicas. La matriz básica estará dada por:
( )
==
mmm
m
m
aa
aa
aaB
…
MMM
…
…
1
111
1 ,,
y la correspondiente solución factible básica actual estará dada por:
bBXB1−=
El Algoritmo del Simplex Revisado constará de: Paso 1: Calcular los costes marginales jjj acc λ−= , nmj ,,1 …+= , donde
( ) 11 ,, −=λλ=λ BCBm… ,con BC el vector fila de costes de las variables
básicas. A iλ se les llama multiplicadores del Simplex. Si 0≤jc , j∀ (problemas de máximo), estamos en el óptimo. PARAR. En otro caso, ir al paso 2. Paso 2: Determinar la variable básica que entra en la base, seleccionando aquella
cuyo jc es el más positivo; sea este kc . Transformar la columna ka , correspondiente a la variable que entra, en
términos de la base actual:
kk aBa 1−=
Paso 3: Determinar la variable que sale de la base con el criterio:
Programación Lineal para la Ingeniería Técnica
97
=>∋= miaab
minab
ikik
i
rk
r ,,1,0 …
La variable correspondiente a la fila r sale de la base. Paso 4: Pivotar sobre la inversa de la base, 1−B . Así, se obtiene una nueva
solución factible básica:
bBX B1−= .
Volver al paso 1. Ejemplo: max 3213 xxxZ −−= s.a.: 112 321 ≤+− xxx 324 321 ≥++− xxx 12 31 −=− xx 0,, 321 ≥xxx Introducimos variables de holgura y artificiales para expresar el problema en su forma estándar:
max AA MxMxxxxZ 763213 −−−−= s.a.: 112 4321 =++− Hxxxx 324 65321 =+−++− AH xxxxx 12 731 =++− Axxx 0,,,,,, 7654321 ≥AAHH xxxxxxx
Así, tenemos que:
−
−−
−
=
100 010 2
011021 4
000 1121
A , ( )MMC −−−−= 00113
La base inicial es, por tanto:
Programación Lineal para la Ingeniería Técnica
98
( ) ( )
==⇒
100
010
001
,,,, 764764 aaaBxxx AAH
En este caso IB =− 1 , y, por tanto, una primera solución factible básica será:
=
== −
1
3
11
1
3
11
100
010
0011bBX B
En forma de tabla:
Base BX 1−B Hx4 11 1 0 0 Ax6 3 0 1 0 Ax7 1 0 0 1
Calculamos, siguiendo el paso 1, los costes marginales y, para ello, los correspondientes multiplicadores del Simplex:
( ) ( ) ( )MMMMBCBm −−=
−−==λλ=λ − ,,0
100
010
001
,,0,, 11 …
A continuación encontramos jjj acc λ−= para las variables no básicas:
( )
TTT
M
M
M
M
MM
c
c
c
c
−
−
−
−
=
−
−−
−
−−−
−
−=
13
1
63
0 10 2
121 4
0 121
,,0
0
1
1
3
5
3
2
1
Según el paso 2, elegimos el jc más positivo, en este caso 133 −= Mc . Luego entra 3x en la base y la correspondiente columna pivote 3a se transforma como:
Programación Lineal para la Ingeniería Técnica
99
=
== −
1
2
1
1
2
1
100
010
001
31
3 aBa
Completando la tabla anterior:
Base BX 1−B Columna pivote
Hx4 11 1 0 0 1 Ax6 3 0 1 0 2 Ax7 1 0 0 1 1
Determinamos la variable que sale de la base según el paso 3:
{ } 111,23,111 =min , que corresponde a la variable Ax7 Pivotamos, en el paso 4, sobre 1−B de forma que en la columna pivote en lugar del pivote haya un 1 y el resto ceros:
Base BX 1−B Hx4 10 1 0 -1 Ax6 1 0 1 -2 3x 1 0 0 1
Para esta nueva solución factible básica ( ) ( )1,1,10,, 364 == xxxX AH
B , comenzamos una nueva iteración, con la matriz 1−B en la tabla anterior, calculando los multiplicadores del Simplex y, con ellos, los costes marginales no básicos:
( ) ( )12,,0
1 00
210
101
1,,01 −−=
−
−
−−==λ − MMMBCB
( )
TTT
M
MMM
c
c
c
−
−=
−
−−
−
−−−
−=
1
1
0 0 2
11 4
0 21
12,,0
0
1
3
5
2
1
Programación Lineal para la Ingeniería Técnica
100
7c no lo calculamos porque Ax7 variable artificial ha salido de la base.
Según el paso 2, elegimos el jc más positivo, en este caso 12 −= Mc . Luego entra
2x en la base y la correspondiente columna pivote 2a se transforma como:
−
=
−
−
−
== −
0
1
2
0
1
2
1 00
210
101
21
2 aBa
La tabla correspondiente queda:
Base BX 1−B Columna pivote
Hx4 10 1 0 -1 -2 Ax6 1 0 1 -2 1 3x 1 0 0 1 0
La única posibilidad es que salga Ax6 . Pivotando sobre ésta:
Base BX 1−B Hx4 12 1 2 -5 2x 1 0 1 -2 3x 1 0 0 1
Comenzamos una nueva iteración:
( ) ( )1,1,0
1 00
210
521
1,1,01 −=
−
−
−−==λ −BCB
( )TTT
c
c
−=
−
−−−−
=
1
1
0 2
14
0 1
1,1,00
3
5
1
Programación Lineal para la Ingeniería Técnica
101
No calculamos 6c por ser Ax6 artificial y haber salido de la base.
El único jc positivo corresponde a 11 =c , por lo tanto 1x es la variable que entra. Así, la nueva tabla quedará como:
Base BX 1−B Columna pivote
Hx4 12 1 2 -5 3 2x 1 0 1 -2 0 3x 1 0 0 1 -2
puesto que
−
=
−
−
−
−
== −
2
0
3
2
4
1
1 00
210
521
11
1 aBa
La única posibilidad es que salga Hx4 . Pivotando sobre el primer elemento de la columna pivote:
Base BX 1−B 1x 4 1/3 2/3 -5/3 2x 1 0 1 -2 3x 9 2/3 4/3 -7/3
Calculamos nuevamente, en la siguiente iteración, los multiplicadores del Simplex:
( )
−−=
−
−
−
−−==λ −
3
2,
3
1,
3
1
373432
210
353231
1,1,31BCB
TTT
c
c
−
−=
−
−−−
=
31
31
0 0
10
0 1
32,
31,
31
0
0
5
4
Como todos los 0≤jc para las variables no básicas, estamos en el óptimo:
Programación Lineal para la Ingeniería Técnica
102
23
9
1
4
321*
*3
*2
*1
=−−=⇒
=
xxxZ
x
x
x
Ejemplo: max 321 33 xxxZ ++= max 321 33 xxxZ ++= s.a.: 22 321 ≤++ xxx s.a. : 22 4321 =+++ Hxxxx 532 321 ≤++ xxx 532 5321 =+++ Hxxxx 622 321 ≤++ xxx 622 6321 =+++ Hxxxx 0,, 321 ≥xxx 0,,,,, 654321 ≥HHH xxxxxx
Los datos en este problema son:
=
100122
010321
001112
A , ( )000313=C
Ahora, B = I IB =⇒ − 1 , y la tabla inicial queda:
Base BX 1−B Hx4 2 1 0 0 Hx5 5 0 1 0 Hx6 6 0 0 1
Calculamos los multiplicadores del Simplex:
( ) ( )0,0,0
100
010
001
0,0,01 =
==λ −BCB
( )
TTT
c
c
c
=
−
=
3
1
3
122
321
112
0,0,0
3
1
3
3
2
1
Programación Lineal para la Ingeniería Técnica
103
Entra 1x (por ejemplo, ya que podría hacerlo indistintamente también 3x ), y por
tanto
=== −
2
1
2
111
1 aaBa , con lo cual completamos la tabla anterior:
Base BX 1−B Columna pivote
Hx4 2 1 0 0 2 Hx5 5 0 1 0 1 Hx6 6 0 0 1 2
Como { } ⇒== 12226,15,22min sale de la base Hx4 , y pivotamos para obtener:
Base BX 1−B
1x 1 1/2 0 0 Hx5 4 -1/2 1 0 Hx6 4 -1 0 1
Realizamos una nueva iteración:
( ) ( )0,0,23
101
0121
0021
0,0,31 =
−
−==λ −BCB
( )
TTT
c
c
c
−
−
=
−
=
23
23
21
012
032
111
0,0,23
0
3
1
4
3
2
Entra en la base 3x que es la única variable no básica actual con coste marginal positivo. La columna pivote será por tanto:
=
−
−== −
0
25
21
1
3
1
101
0121
0021
31
3 aBa
Programación Lineal para la Ingeniería Técnica
104
Así, la tabla completa quedará como:
Base BX 1−B Columna pivote
1x 1 1/2 0 0 1/2 Hx5 4 -1/2 1 0 5/2 Hx6 4 -1 0 1 0
Calculamos ⇒=
58
254,
211min sale Hx5 , y pivotando tenemos que:
Base BX 1−B
1x 1/5 3/5 -1/5 0 3x 8/5 -1/5 2/5 0 Hx6 4 -1 0 1
En una siguiente iteración:
( )
=
−
−
−
==λ − 0,5
3,
5
6
10 1
052 51
05153
0,3,31BCB
TTT
c
c
c
−
−
−
=
−
=
53
56
57
002
102
011
0,53
,56
0
0
1
5
4
2
Como todos los 0<jc para las variables no básicas actuales, se concluye que estamos en el óptimo:
52733
4
58
51
321*
*6
*3
*1
=++=⇒
=
xxxZ
x
x
x
Programación Lineal para la Ingeniería Técnica
105
El ordenador no es capaz de “pensar” por sí mismo, de ahí la necesidad de que el usuario conozca y sea capaz de plantear e interpretar perfectamente el problema a resolver. La elaboración a la que se someten los datos en el proceso de obtención de unos resultados, desde un punto de vista metodológico, requiere del usuario una perfecta comprensión tanto del planteamiento como de los objetivos que se persiguen en ese tratamiento. El proceso informático se hace imprescindible cuando el elevado número de los datos o la complejidad que involucran supera las posibilidades humanas. Distinguiremos una serie de subprocesos comunes en el tratamiento de cualquier tipo de información, necesarios en una fase previa a la que incluye puramente el proceso, para una correcta obtención del objetivo deseado:
• Recogida de datos: es importante entresacar únicamente los datos que se acomoden rigurosamente a los fines deseados.
• Depuración: algunos datos recogidos son incorrectos o incoherentes con
la información deseada. El proceso de depuración consiste en detectar estas anomalías para separarlas del conjunto o corregirlas antes de proseguir con el tratamiento.
• Almacenamiento: una vez depurados los datos, deben almacenarse en
los correspondientes soportes informáticos, que deben ser fácilmente utilizables por los medios del sistema informático.
Salvadas estas consideraciones de tipo general, en particular, en el desarrollo de un proyecto de aplicación informático para la resolución de un problema de
Programación Lineal para la Ingeniería Técnica
106
optimización lineal, hemos de tener en cuenta algunas otras características específicas del problema que pueden provocar situaciones tales como de infactibilidad, degeneración, obtención de soluciones óptimas no acotadas, etc. 14.1. VARIABLES ACOTADAS Muchos de los problemas que aparecen en situaciones prácticas tienen variables sujetas a cotas tanto superiores como inferiores. Si ix es una variable acotada superior e inferiormente para ciertos valores ii hg , , entonces:
iii hxg ≤≤ Si ix está sujeta a cotas no finitas, se dice que es una variable libre. Si está sujeta a cotas finitas, podemos suponer, en general, que son del tipo:
ii hx ≤≤0 El problema con cotas superiores en forma estándar sería: max CX s.a.: AX = b HX ≤≤0 donde H es el vector de cotas superiores. Este problema se puede transformar en uno estándar usual sin más que introducir variables de holgura iy en cada una de las restricciones correspondientes a las cotas superiores: max CX s.a.: AX = b X + Y = H 0, ≥YX
Programación Lineal para la Ingeniería Técnica
107
Así, podemos aplicarle el Simplex, pero pagando un alto coste computacional, puesto que la cantidad de memoria de ordenador que debemos utilizar se incrementa considerablemente (si A es de orden mxn, la matriz asociada al nuevo problema será de orden (m + n)x2n). Por esto, se han desarrollado técnicas alternativas específicas para el tratamiento de este tipo de problemas con variables acotadas, pero su desarrollo excede nuestro objetivo. 14.2. INFACTIBILIDAD Un problema lineal será infactible cuando no existe ninguna solución factible. Esta situación se da cuando dos o más restricciones son incompatibles. Aparece en la práctica debido a incorrecciones en la preparación de los datos. En la mayoría de los casos en que el problema tiene grandes dimensiones, es fácil no contemplar todas las relaciones lógicas entre las variables. 14.3. PROBLEMAS NO ACOTADOS Se da este caso si existe una solución factible que da un valor infinito para la función objetivo, la cual se dice que es no acotada. Usualmente es consecuencia de errores en la preparación de los datos. Veamos en un ejemplo como detectar este tipo de dificultad computacional en el desarrollo del algoritmo del Simplex: max 21 23 xx + max 21 23 xx + s.a.: 121 ≤− xx s.a.: 1321 =+− Hxxx 623 21 ≤− xx 623 421 =+− Hxxx 0, 21 ≥xx 0,,, 4321 ≥HH xxxx
Programación Lineal para la Ingeniería Técnica
108
Las tablas que corresponden a las iteraciones del Simplex quedan como:
1x 2x Hx3 Hx4 Hx3 1 1 -1 1 0 Hx4 6 3 -2 0 1 3 2 0 0
1x 2x Hx3 Hx4
1x 1 1 -1 1 0 Hx4 3 0 1 -3 1 0 5 -3 0
1x 2x Hx3 Hx4
1x 4 1 0 -2 1 2x 3 0 1 -3 1 0 0 12 -5
Debería entrar Hx3 , pero todos los elementos de su columna son negativos. En esta situación la función objetivo puede crecer indefinidamente. Gráficamente: Los vértices son: A(0,0), B(2,0), C(4,3). Miramos cuánto vale la función objetivo en ellos, además de en puntos que se alejen por las rectas que dejan abiertas a la región de factibilidad, esto es:
C
B
121 =− xx
623 21 =− xx
A
Programación Lineal para la Ingeniería Técnica
109
( ) 00,0 =f ( ) 60,2 =f ( ) 183,4 =f ( ) +∞ →=
+∞→222 2,0 xxxf
+∞ →+=++=
++∞→22222
2 46226,326
xxxxxx
f
Efectivamente, la función objetivo no está acotada superiormente en la región de factibilidad, luego no posee máximo finito en ella. 14.4. SOLUCIONES MÚLTIPLES Si el problema de Programación Lineal admite más de una solución, es posible obtener a partir de dos cualesquiera de ellas un número infinito de soluciones óptimas también, sin más que construir una combinación lineal convexa de ambas. Veamos un ejemplo para ver cómo se manifiesta este hecho en las tablas: max 21 10040 xx + max 21 10040 xx + s.a.: 2500510 21 ≤+ xx s.a.: 2500510 321 =++ Hxxx 2000104 21 ≤+ xx 2000104 421 =++ Hxxx 90032 21 ≤+ xx 90032 521 =++ Hxxx 0, 21 ≥xx 0,,,, 54321 ≥HHH xxxxx
1x 2x Hx3 Hx4 Hx5 Hx3 2500 10 5 1 0 0 Hx4 2000 4 10 0 1 0 Hx5 900 2 3 0 0 1 40 100 0 0 0
Programación Lineal para la Ingeniería Técnica
110
1x 2x Hx3 Hx4 Hx5 Hx3 1500 8 0 1 -1/2 0
2x 200 2/5 1 0 1/10 0 Hx5 300 4/5 0 0 -3/10 1 0 0 0 -10 0
Óptimo: 0*
1 =x , 200*2 =x , 20000* =Z
Observemos que, siendo 1x no básica, su coste marginal es cero, por lo que si la introducimos en la base, sacando de la misma Hx3 que corresponde por el Simplex,
el valor óptimo de la función objetivo no variará:
1x 2x Hx3 Hx4 Hx5
1x 375/2 1 0 1/8 -1/16 0 2x 125 0 1 -1/20 1/8 0 Hx5 150 0 0 -1/10 -1/4 1 0 0 0 -10 0
Óptimo: 2
375*1 =x , 125*
2 =x , 20000* =Z
Existe solución múltiple formada por todas las soluciones combinación lineal convexa de las anteriores. Por ejemplo:
( ) ( )
λ−+λ 125,
2375
1200,0
Si ( ) 200002
325,
4375
125,2
37521
200,021
21 ** =⇒
=
+=⇒=λ ZX
Si ( ) ( ) 20000150,125125,2
37532
200,031
31 ** =⇒=
+=⇒=λ ZX
Programación Lineal para la Ingeniería Técnica
111
Y así, infinidad de ellas variando λ en el intervalo (0,1). Gráficamente, se puede observar mejor: max 21 xxZ += s.a.: 221 ≤+ xx 33 21 ≤+ xx 0, 21 ≥xx Z = k es paralela a 221 ≤+ xx , por tanto, cualquier combinación lineal convexa de D(0,2) y C(1/2, 3/2) es solución óptima, es decir, todos los puntos del segmento delimitado por esos puntos.
( ) 22,0 ** =⇒= ZX
223
,21 ** =⇒
= ZX
( ) 247
,41
23
,21
21
2,021
21 ** =⇒
=
+=⇒=λ ZX
( ) 235
,31
23
,21
32
2,031
31 ** =⇒
=
+=⇒=λ ZX
14.5. CONVERGENCIA DEL ALGORITMO DEL SIMPLEX Y PROBLEMAS
DEGENERADOS El Simplex es un método iterativo en el que se eligen diferentes bases (vértices) para mejorar paso a paso el valor de la función objetivo hasta alcanzar la base óptima. Si ninguna base se elige dos veces, es claro que el algoritmo es finito.
Z = 0 221 =+ xx
33 21 =+ xx D C
B A
Programación Lineal para la Ingeniería Técnica
112
El número de bases es a lo sumo
m
n, que es un número finito. Pero la pregunta
es: ¿cuántos pasos del Simplex debemos realizar hasta alcanzar la solución óptima?. Por experiencia, en los problemas “sencillos”, se analizan alrededor de m (número de restricciones) soluciones factibles diferentes, por lo que el número de operaciones a efectuar es alrededor de nm2 (n es el número de variables reales). Está demostrado, no obstante, que esta cantidad no siempre puede acotarse por un múltiplo fijo de m, y no en todos los casos esto sucede siempre así. Otro inconveniente en el estudio de la finitud del Simplex es el siguiente: supongamos que existen dos o más variables básicas con valor cero, con lo cual al hacer los cocientes entre cero y cualquier 0>ija , es cero, luego se plantea el
problema de cuál de ellas elegir. No podemos elegir arbitrariamente qué variable sale de la base ya que puede generarse un ciclo de modo que nunca se llegue a una solución óptima. No ocurre lo mismo si el empate es para decidir que variable entra en la base; la elección puede efectuarse al azar sin que afecte notablemente al número de iteraciones a realizar. Para evitar estos ciclos, se utilizan algunos métodos especiales que citaremos sin entrar en detalle: el Método Lexicográfico y el Método de Perturbación. No entraremos en su descripción puesto que habitualmente este problema sólo se presenta en ejemplos especialmente preparados para tal fin, y excede el objetivo de este texto. En el siguiente ejemplo podemos observar la formación de un ciclo, se trata de un problema degenerado:
max 4321 621
2043
xxxxZ −+−=
s.a.: 09841
4321 ≤+−− xxxx
0321
1221
4321 ≤+−− xxxx
13 ≤x 0,,, 4321 ≥xxxx
Programación Lineal para la Ingeniería Técnica
113
Introducimos las correspondientes variables de holgura:
max 4321 621
2043
xxxxZ −+−=
s.a.: 09841
54321 =++−− Hxxxxx
0321
1221
64321 =++−− Hxxxxx
173 =+ Hxx 0,,,,,, 7654321 ≥HHH xxxxxxx
1x 2x 3x 4x Hx5 Hx6 Hx7 Hx5 0 1/4 -8 -1 9 1 0 0 Hx6 0 1/2 -12 -1/2 3 0 1 0 Hx7 1 0 0 1 0 0 0 1 3/4 -20 1/2 -6 0 0 0
1x 2x 3x 4x Hx5 Hx6 Hx7
1x 0 1 -32 -4 36 4 0 0 Hx6 0 0 4 3/2 -15 -2 1 0 Hx7 1 0 0 1 0 0 0 1 0 4 7/2 -33 -3 0 0
1x 2x 3x 4x Hx5 Hx6 Hx7
1x 0 1 0 8 -84 -12 8 0 2x 0 0 1 3/8 -15/4 -1/2 1/4 0 Hx7 1 0 0 1 0 0 0 1 0 0 2 -18 -1 -1 0
Programación Lineal para la Ingeniería Técnica
114
1x 2x 3x 4x Hx5 Hx6 Hx7
3x 0 1/8 0 1 -21/2 -3/2 1 0 2x 0 -3/64 1 0 3/16 1/16 -1/8 0 Hx7 1 -1/8 0 0 21/2 3/2 -1 1 -1/4 0 0 3 2 -3 0
1x 2x 3x 4x Hx5 Hx6 Hx7
3x 0 -5/2 56 1 0 2 -6 0 4x 0 -1/4 16/3 0 1 1/3 -2/3 0 Hx7 1 5/2 -56 0 0 -2 6 1 1/2 -16 0 0 1 -1 0
1x 2x 3x 4x Hx5 Hx6 Hx7 Hx5 0 -5/4 28 1/2 0 1 -3 0
4x 0 1/6 -4 -1/6 1 0 1/3 0 Hx7 1 0 0 1 0 0 0 1 7/4 -44 -1/2 0 0 2 0
1x 2x 3x 4x Hx5 Hx6 Hx7 Hx5 0 1/4 -8 -1 9 1 0 0 Hx6 0 1/2 -12 -1/2 3 0 1 0 Hx7 1 0 0 1 0 0 0 1 3/4 -20 1/2 -6 0 0 0
Hemos llegado a la tabla inicial y no es la óptima. Por lo tanto estamos en un ciclo.