Programación lineal entera

Anuncio
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
3. Programación Lineal Entera.
3.1 Problemas de Transporte.
Los problemas de asignación y transporte son un caso particular de la programación lineal
entera. De hecho, a menudo no es necesario imponer la condición de que las variables sean
enteras, sino que por la propia construcción del problema viene implícito.
Tienen un algoritmo propio de cálculo, que es una adaptación del método simplex. Aunque son
llamados problemas de transporte, en realidad se pueden aplicar a infinidad de tipos de
problemas.
El problema de transporte se caracteriza por:
oi
di
1
1
2
2
cij
n
•
•
•
•
•
•
m
Una serie de nodos de origen.
Una serie de nodos de destino.
Unas rutas de transporte de elemento a transportar.
Un coste unitario de transporte desde el origen i hasta el destino j.
Asociado a cada origen, oi es la oferta o capacidad del origen i.
Se está obligado a satisfacer la demanda dj de cada uno de los destinos.
Sea xij la cantidad transportada desde el origen i al destino j. El problema de transporte se
puede formular como:
min
∑ cij x ij
i, j
⎧∑ x ij ≤ oi
⎪ j
⎪
s.a. ⎨∑ x ij ≥ d j
⎪i
⎪x ≥ 0
⎩ ij
i = 1, 2, K , n
j = 1, 2, K , m
En algunos casos habrá que añadir la restricción x ij ∈ Z
∀i, j es decir, que las xij sean
enteras. No obstante, en muchos casos esta restricción estará implícita y no será necesaria.
Si sumamos las n primeras restricciones tenemos que:
∑ ∑ x ij ≤ ∑ oi
i
j
i
= oT
Si sumamos las m siguientes tenemos que:
∑ ∑ x ij ≥ ∑ d j
i
j
j
1 de 25
= dT
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
Encadenando ambas, para que un problema de transporte tenga solución, debe cumplirse:
dT ≤ oT
En la práctica esta condición no suele darse, siendo habitual el caso contrario. Si oT ≤ dT se
crea un nodo de origen con oferta dT − oT con costos de transporte nulos. Cuando dT = oT el
problema se dice balanceado o equilibrado.
Para homogeneizar técnicas, si se da el caso contrario, oT ≥ dT , se crea un nodo de destino
con demanda oT − dT . De esta forma el exceso de oferta va a un destino ficticio. Los costes de
transporte también serán nulos.
Para un problema de transportes balanceado se puede añadir la restricción oT=dT, lo que
implica que la formulación quede como:
∑ cij x ij
min
i, j
⎧∑ x ij = oi
⎪ j
⎪
s.a. ⎨∑ x ij = d j
⎪i
⎪x ≥ 0
⎩ ij
i = 1, 2, K , n
j = 1, 2, K , m
Propiedad. Todo problema de transportes balanceado tiene solución óptima finita.
Demostración. Esta demostración se realizará en dos pasos.
•
•
Se demuestra que siempre tiene solución factible.
Se demuestra que no es un problema ilimitado.
La conjunción de ambas demostraciones implica que existe solución óptima finita.
Si encontramos un punto que satisfaga ambas condiciones, se demostrará que existe solución
óptima finita. Seleccionaremos un punto tal que sea proporcional a oi y a dj tal como:
x ij0 =
oi ⋅ d j
∀i, j
dT
Se comprueba si es factible, para lo cual el punto debe satisfacer las restricciones:
∑ xij0 = ∑
i
como dT=oT entonces,
∑ x ij0
=
i
dj
dT
oi ⋅ d j
i
dT
=
dj
dT
∑ oi
i
=
dj
dT
⋅ oT
⋅ oT = d j es decir, cumple la segunda restricción.
Análogamente podemos comprobar que también cumple la primera restricción:
∑ x ij0 = ∑
j
j
oi ⋅ d j
dT
=
oi
dT
∑ dj
j
Por tanto, podemos concluir que el punto es factible.
2 de 25
=
oi
⋅ dT = oi
dT
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
Ahora se debe comprobar que el problema no es ilimitado. Para ello tendremos en cuenta que
la cantidad transportada desde un origen i a un destino j será igual o menor que la cantidad
transportada total, de forma que:
x ij ≤
∑ xij
i, j
= oT
Además, según las restricciones: x ij ≥ 0 por tanto:
0 ≤ x ij ≤ oT
Es decir, el recorrido de cada variable está acotado y, por tanto, la región factible también está
acotada, resultando entonces que el problema no es ilimitado.
3.1.1 Formato de tabla para un problema de transporte.
Representaremos el problema en forma de tabla, de manera que cada fila de la tabla
corresponde a un origen y cada columna a un destino.
ORÍGENES
DESTINOS
Distinguiremos entre dos tipos de casillas:
Casilla NO Básica: Corresponde a variables no básicas.
cij
Coste
zij-cij
Elemento del Renglón z
Casilla Básica: Corresponde a variables básicas.
cij
Coste
B
xij
Valor de la Variable
Definición: Un ciclo en una tabla de transportes es un conjunto ordenado de casillas que
verifican:
1. La primera y la última casilla coinciden.
2. Cada casilla comparte con la siguiente la fila o la columna.
3. No existen más de dos casillas consecutivas que compartan fila o columna.
3 de 25
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
Por ejemplo:
1 5
2
4
3
Un ejemplo de lo que no sería un ciclo podría ser:
1 6
2
5
3
4
Puede trazarse el camino del ciclo de forma que cuando se cambia de horizontal a vertical
estamos en una casilla del ciclo. Las otras casillas no forman parte del ciclo.
Propiedad: Un conjunto de columnas de la matriz de coeficientes de un problema de
transportes es linealmente dependiente si y solo si se puede formar un ciclo con alguna de
sus respectivas casillas
Esta propiedad responde a la pregunta de cuántas ecuaciones del problema de transportes son
linealmente independientes, es decir, cuántas variables básicas obtendremos.
Por ejemplo tengamos es siguiente caso, con n filas y m columnas, en las que las casillas
sombreadas tienen valor no nulo:
Habrá entontes m+n-1 variables básicas, ya que no se va poder formar un ciclo con ellas.
3.1.2 Métodos de generación de soluciones básicas factibles.
a) Método de la esquina noroeste. Tengamos el siguiente ejemplo, con las siguientes
disponibilidades y demandas:
35
50
30
45
Comprobamos que está balanceado:
20
∑ oi
30
= 125 =
∑ dj
4 de 25
30
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
A la primera casilla más al noroeste le ponemos una B y la utilizamos tanto como me permitan
la oferta y la demanda.
35
B
35
50
30
45
20
30
30
Como también interesa que no haya ciclos, es conveniente que no haya ninguna casilla en la
misma fila (o en la misma columna). Se tacha la fila y se actualiza la columna (o viceversa):
Se repite hasta que haya elegidas m+n-1 casillas, en este caso 4+3-1=6
Tenemos m+n-1 casillas y además linealmente independientes, por lo que tenemos una
solución básica factible.
Este método no tiene en cuenta los costos y puede resumirse como sigue:
1. Elegir la casilla más al noroeste y hacerla básica a valor máximo entre la oferta de esa
fila y la demanda de su columna.
2. Tachar la fila o columna donde de haya alcanzado el mínimo.
3. Actualizar la oferta y la demanda y volver al paso 1.
b) Método de Vöguel.
Una forma de mejorar el método de la esquina noroeste sería ir definiendo ordenadamente
como variables básicas aquellas casillas con menor coste. Sin embargo esta solución no
siempre da resultados aceptables, ni siquiera mejores que el de la esquina noroeste.
5 de 25
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
A modo de ejemplo, consideremos la siguiente tabla:
1
2
3
1000
1
1
1
1
Si eligiéramos las casillas según su coste, tendríamos la siguiente tabla:
1
B 2
1
3
1
B 1000
0
1
1
B
1
1
1001
El coste de esta tabla sería 1.001. Fácilmente podríamos encontrar otra tabla de menor coste
como la siguiente:
1
B 2
0
3
1
B
1
B 1000
1
1
1
1
5
El coste es esta nueva tabla es de 5. La diferencia entre ambas estriba en que al haber elegido
la casilla con coste 1, hemos perdido la oportunidad de elegir cualquier elemento de la misma
fila o columna (dependiendo de cuál se satisfaga completamente). A esta pérdida de
oportunidad se le asigna un coste (coste de oportunidad). Cuanto mayor sea ese coste de
oportunidad, más importancia tendrá elegir entre uno u otro.
El método de Vogüel tiene en cuenta este tipo de penalizaciones y se estructura de la siguiente
forma:
•
Para cada fila y columna se calcula la penalización o costes de oportunidad como la
diferencia entre los dos costos más pequeños.
•
Se elige la casilla más barata.
•
Se hace básica esa casilla con el valor mínimo que satisfaga la oferta o la demanda.
Ejemplo:
Tengamos la siguiente tabla de partida:
8
6
10
9
9
12
13
7
14
9
16
5
45
20
30
6 de 25
35
50
40
30
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
Calculamos la penalización para cada una de las filas y columnas:
1
2
2
4
3
3
2
8
6
10
9
9
12
13
7
14
9
16
5
45
20
35
50
40
30
30
En este caso la máxima penalización corresponde a la tercera fila. Se elige la casilla más
barata (la sombreada). Se hace básica con el valor mínimo que satisface, en este caso, la
demanda y se actualizan las columnas:
1
3
2
6
10
9
9
12
13
7
14
9
16
5
2
2
4
3
8
35
50
B
30
45
20
30
40
10
30
Se vuelven a calcular las penalizaciones, exceptuando aquellas filas o columnas ya satisfechas,
en este caso, la cuarta columna.
1
3
3
2
2
3
2
2
8
6
10
9
9
12
13
7
14
9
16
5
35
50
B
40 10
30
45
20
30
30
La casilla sombreada es la elegida. Puede observarse cómo al haber satisfecho una columna, y
habiéndose eliminado ésta del cálculo de las penalizaciones, no varían las penalizaciones por
columnas, pero sí por filas.
5
4
Damos valor a la casilla sombreada y actualizamos valores:
1
3
3
2
2
2
3
2
8
6
10
9
9
12
13
7
14
9
16
5
8
6
10
9
9
12
13
7
14
9
16
5
B
35
50
B
40 10
10
30
45
20
30
30
10
Calculamos las penalizaciones. Ahora las penalizaciones por fila no variarán, pero sí las
penalizaciones por columna.
1
6
3
3
3
2
1
5
4
2
2
3
2
5
4
45
B
10
20
10
30
7 de 25
35
50
B
30
30
40
10
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
Satisfacemos los valores mínimos:
1
1
2
8
6
9
12
14
9
2
3
2
5
4
6
3
3
3
B
9
13
7
16
5
4
2
3
5
35
10
B
10
45
20
10
Calculamos nuevamente las penalizaciones:
1
6
3
1
2
2
10
2
2
4
8
6
9
12
14
9
50
B
30
30
30
3
3
B
4
2
3
5
2
2
4
8
6
B
9
13
7
16
5
35
B
12
30
30
9
B
9
13
7
16
5
45
10
20
10
30
1
1
6
3
3
3
40
10
35
25
50
5
40
10
35
25
50
5
40
10
2
10
45
14
25
50
B
10
9
10
2
10
10
45
20
30
10
Damos valor a la variable y actualizamos filas y columnas:
1
6
3
3
3
1
2
40
10
B
25
B
30
30
Y finalizamos la tabla:
2
2
2
4
3
2
5
4
8
6
B
10
10
9
B
12
13
B
7
5
9
45
9
25
45
14
2
B
B
16
10
20
10
5
30
B
30
30
3.1.3 Resolución de los problemas de Transporte.
Una vez se haya encontrado una solución básica factible, se aplica el test de optimalidad.
Tenemos el problema:
min
∑ cij x ij
⎧∑ x ij ≤ oi
⎪ j
s.a. ⎨
⎪∑ x ij ≤ d j
⎩i
i = 1,2, K , n
j = 1,2, K , m
8 de 25
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
El dual de este problema es:
∑ oi ui + ∑ d jv j
max
i
j
⎧u1 + v1 ≤ c11
⎪
⎪M
⎪u1 + v m ≤ c1m
⎪
⎪u2 + v1 ≤ c21
⎪
s.a. ⎨M
⎪u + v ≤ c
m
2m
⎪ 2
⎪M
⎪
⎪un + v m ≤ c nm
⎪ui ; v i libres
⎩
Es decir:
max
∑ oi ui + ∑ d jv j
i
j
⎧⎪ui + v j ≤ c ij
s.a. ⎨
⎪⎩ui ; v i libres
i = 1,2, K , n
j = 1,2, K , m
La condición de holgura complementaria dice que si xij es básica y no nula:
ui + v j = c ij
Como tenemos n+m-1 variables básicas, tenemos n+m-1 ecuaciones con m+n incógnitas, por
lo que se trata de un sistema compatible indeterminado, el cual es sencillo de resolver.
Tomemos como ejemplo el problema anterior, con la solución básica factible obtenida por el
método de Vöguel:
8
6
B
10
10
9
B
B
9
B
7
25
12
13
45
5
14
B
9
16
5
10
B
30
Al ser un sistema compatible indeterminado, todas las soluciones estarán en función del valor
de una de ellas. Por comodidad, siempre se asignará a u1 el valor 0.
x12 es básica
→
u1 + v 2 = c12
→
v2 = 6
x13 es básica
→
u1 + v3 = c13
→
v3 = 10
Así continuaríamos con todos los valores que quedan expresados en la siguiente tabla:
ui
8
6
B 10
10
9
B
12
vj
13
B
7
0
3
5
9
6
9
25
45
14
B
B 16
10
6
5
10
9 de 25
B
30
2
3
1020
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
Además, para las variables no básicas debe cumplirse que:
z ij − cij = ui + v j − cij ≤ 0
Estos valores se corresponden con los coeficientes de esas variables en el renglón z. Se
calculan estos valores y se ponen en las variables no básicas:
ui
8
6
B 10
10
-2
9
B
13
45
B
7
10
6
3
-2
B 16
-5
6
0
-7
5
-3
9
vj
9
25
12
14
B
5
B
3
30
2
-3
10
1020
Como todos los coeficientes son menores que cero, puede concluirse que esta tabla es óptima,
ya que se ha encontrado un x, u y un v que verifican las condiciones de holgura
complementarias.
Partamos ahora de la solución básica factible hallada por el método de la esquina noroeste:
8
B
6
B
12
10
9
35
9
10
B
13
20
14
B
7
B
5
20
9
16
10
B
30
Calculamos los valores de ui, vj y los valores de zij-cij:
ui
8
B
6
B
12
35
9
10
5
14
9
2
20
B
9
-2
8
vj
10
13
16
6
11
20
10
12
0
-8
B
7
B
5
1
-5
30
1
B
4
Esta tabla no es óptima, ya que algunos de los coeficientes del renglón z de las variables no
básicas son mayores que cero, por lo que se debe pivotar.
Elegimos para pivotar la casilla que tenga mayor coeficiente del renglón z, en este caso la
casilla que está sombreada. Si pretendemos aumentar el valor de esa casilla, necesariamente
alguna de la misma columna debe disminuir. La única que puede disminuir es una casilla
básica, pues es la única variable que tiene valor.
Al disminuir, otra de la misma fila debe aumentar. La única variable que puede aumentar es
una variable básica, ya que si no estaríamos introduciendo dos variables en la misma iteración.
En definitiva estamos creando un ciclo, tal y como se muestra en la siguiente tabla:
8
B
6
35
9
B
20
B
-
9
-2
9
2
12
10
14
10
5
13
20
16
6
+
10 de 25
10
-8
B
+
7
B
-
5
-5
B
30
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
Vemos cómo lo máximo que se puede aumentar a la variable que introducimos es lo máximo
que alguna de las variables del ciclo pueda disminuir. En este caso 10. Quedando la tabla:
8
B
6
B
12
10
9
35
9
10
B
13
B
10
14
9
10
7
30
B
16
5
10
9
30
B
Realizamos el test de optimalidad:
ui
8
B
6
B
12
35
9
10
B
13
B
10
14
vj
2
5
9
30
B
16
-2
0
1
1
7
5
B
-8
10
-6
30
8
11
12
7
-2
Creamos el ciclo:
ui
8
35
9
10
B
-
9
10
+
5
B 12
+
14
vj
6
10
9
2
B
-
13
B
16
0
-2
B
7
30
1
1
5
B
-8
10
-6
30
8
11
12
7
-2
Se pivota, obteniendo la nueva tabla:
8
B
6
25
9
B
10
9
10
B
12
13
B
20
7
30
14
9
10
B
16
5
10
9
30
B
Realizamos nuevamente el test de optimalidad:
ui
8
B
6
B
12
25
9
10
20
14
vj
B
-3
8
B
7
30
-5
9
B
10
6
16
Creamos el ciclo:
11 de 25
1
-4
5
-1
12
0
-7
2
13
B
30
2
3
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
Se pivota para obtener la nueva tabla:
8
6
B
10
10
B
9
12
13
45
14
B
9
B
7
25
5
9
10
B
16
5
30
B
Que sabemos que es solución óptima ya que es la solución básica factible que se halló
mediante el método de Vöguel que ya se vio que era óptima.
3.1.4 Resumen del método de transporte.
Paso 0: Encontrar una solución básica factible.
Paso 1: Calcular ui, vj soluciones del sistema de ecuaciones ui + v j = c ij
∀i, j siendo xij
variables básicas
Paso 2: Para las casillas no básicas, calcular ui + v j − cij = z ij Si zij≤0 la tabla es óptima.
Paso 3: Seleccionar como variable de entrada la variable no básica con mayor zij (entre
los positivos).
Paso 4: Formar un ciclo con la casilla que entra y con variables básicas.
Paso 5: Marcar alternativamente con (+) y con (–) las casillas que formen el ciclo
empezando por un signo (+) en la casilla que entra.
Paso 6: Calcular τ como el mínimo de los valores de las casillas marcadas con signo (–)
en el ciclo.
Paso 7: Sumar τ al valor de las casillas marcadas con signo (+) en el ciclo y restarlo a
las casillas con signo (–).
Paso 8: Marcar como básica la casilla que entra y desmarcar como básica una de las
casillas que hayan quedado con valor 0. Volver al paso 1.
Propiedad: Si a los costos de una fila o una columna de un problema de transportes
balanceado se le suma o le resta una cantidad, la solución óptima no cambia.
Demostración: tengamos un problema de transportes balanceado con unos costes tales que:
⎪⎧c ij + k si i = 1
~
cij = ⎨
⎪⎩cij si i ≠ 1
→ se ha aumentado la 1ª fila
La nueva función objetivo será:
~
z =
~
∑ cij ⋅ x ij
i, j
=
~
~
∑ cij ⋅ x ij + ∑ cij ⋅ xij
i =1
j
=
i ≠1
j
=
∑ cij ⋅ x ij
i, j
∑ (cij
i =1
j
)
+ k ⋅ x ij +
∑ cij ⋅ x ij = ∑ cij ⋅ xij
i ≠1
j
+ k ⋅ o1 = z original + cte
Por tanto la solución óptima no cambia.
12 de 25
i, j
+ k ∑ x ij =
i =1
j
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
Propiedad: Si oi y dj son enteras, entonces, el problema de transportes tiene, al menos, una
solución entera.
Esta propiedad puede comprobarse observando los métodos de cálculo, ya que si oi y dj son
enteras, tanto en el método de la esquina noroeste como en el método de Vöguel, dan
soluciones básicas factibles enteras. Al aplicar después el método de transportes, cada una de
las tablas obtenidas es entera.
Si hubiera soluciones múltiples, no todas serían enteras, ya que todo el segmento que uniera
ambos puntos sería solución óptima.
3.1.5 Problemas de Trasbordo.
En problemas reales, pueden existir nodos de trasbordo que sean trasbordo puro o realicen
además funciones de oferta o demanda. Los tipos de nodos que pueden existir en un problema
de transporte son:
•
Nodos de origen puro: Los que ofertan mercancías y no demanda. Pueden enviar
pero no recibir.
•
Nodos de destino puro: Los que demandan pero no ofertan. Pueden recibir pero no
enviar.
•
Nodos de trasbordo: Pueden recibir y enviar. A su vez se dividen en:
o
o
o
Trasbordo puro: No ofertan y no demandan. Todo lo que reciben sale.
Demanda: No ofertan pero demandan.
Oferta: Ofertan pero no demandan.
Un ejemplo de problema de trasbordo sería el siguiente:
10
1
20
2
15
3
4
5
10
1
Nodos que ofertan
6
25
6
Nodos que demandan
7
10
4
Nodos de trasbordo puros
Para expresar este problema como una tabla de transporte, duplicaremos los nodos que
simultáneamente envían y reciben (uno el que recibe y otro el que suministra), situando los
nodos que ofertan en las filas y los nodos que demandan en las columnas:
2
4
5
1
2
3
4
5
13 de 25
6
7
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
Se colocan las disponibilidades y las demandas, teniendo en cuenta que los nodos que no
ofertan tienen disponibilidad cero y los que no demandan tienen demanda cero. En este caso:
ƒ
ƒ
Los nodos 4 y 5 tienen oferta 0.
Los nodos 2 y 4 tienen demanda 0.
2
4
5
6
7
1
10
2
20
3
15
4
0
5
0
0
0
10
25
10
Se balancea el problema si no lo estuviera. En este caso el problema ya está balanceado, ya
que oT = dT.
Se completan los costes, teniendo en cuenta que:
ƒ
ƒ
Para las rutas imposibles, el coste es M (si el problema fuera de maximización el coste
sería –M)
Para trasportes al mismo nodo, el coste es 0.
2
1
2
3
4
5
4
5
6
7
3
5
M
4
M
0
4
3
M
M
M
M
5
M
12
M
0
M
2
3
M
4
0
M
6
0
0
10
10
20
15
0
0
25
10
A priori no sabemos cuánta cantidad se va a transbordar, por ejemplo, por el nodo 4. Habría
que prever que, como mínimo, pudiera ser trasbordada toda la mercancía a través del nodo 4.
Para realizar esta previsión, en todos los nodos de trasbordo se añade tanto a la demanda
como a la oferta la cantidad total a trasportar (oferta o demanda total).
2
1
2
3
4
5
4
5
6
7
3
5
M
4
M
0
4
3
M
M
M
M
5
M
12
M
0
M
2
3
M
4
0
M
6
0+45
0+45
10+45
14 de 25
25
10
20+45
15
0+45
0+45
10
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
Si en la fila del nodo 4, en la intersección con su propia columna (casilla sombreada) hubiera
algún valor xij, esto quiere decir que la cantidad que realmente se ha trasbordado a través del
nodo 4 es de oT – xij.
La tabla, tal como está planteada, es un problema de transporte convencional. La solución
sería:
2
1
2
3
4
5
4
3
5
5
6
7
M
4
B
M
3
M
M
M
12
10
10
0
B
4
45
M
B
65
20
M
5
B
15
15
M
0
B
M
2
25
M
4
45
0
45
B
3
15
B
40
55
M
B
5
6
25
B
5
10
45
45
Analizando el resultado en los nodos de trasbordo:
ƒ
x22 = 45. Por tanto la cantidad que realmente se ha trasbordado a través del nodo 2 es
45 – 45 = 0. Es decir, no se ha trasbordado mercancía a través del nodo 2.
ƒ
x42 = 25. A través de 4 se ha trasbordado una cantidad de 45 – 25 = 20.
ƒ
x53 = 40. El trasbordo en el nodo 5 ha sido de 45 – 40 = 5.
3.1.6. Análisis de sensibilidad en una tabla de transportes.
Para realizar el análisis de sensibilidad (o el análisis paramétrico) en el vector de costes se
opera de forma análoga al método simplex: A un coste determinado se le da valor en función a
un parámetro, se calculan los ui y los vj y se halla los intervalos en los que se cumple la
condición de optimalidad.
Para los casos restantes, el proceso es construir la tabla simplex asociada, y a través de ahí
realizar el análisis de sensibilidad.
Para construir la tabla simplex:
ƒ
En primer lugar debemos saber cuáles son las variables básicas. Estas variables básicas
serán aquellas casillas que han tomado valor en la tabla de transporte. En el caso del
ejemplo anterior:
x11 x12 x13 x14 x15 x21 x22 x23 x24 x25
x14
x21
x22
x33
x42
x44
x45
x53
x55
15 de 25
…
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
ƒ
El vector del lado derecho b será aquel formado por los valores de cada casilla básica.
x11 x12 x13 x14 x15 x21 x22 x23 x24 x25
…
x14
x21
x22
x33
x42
x44
x45
x53
x55
ƒ
Las columnas de las variables básicas será tal que tendrá un 1 en la fila que coincida
con ella misma y en el resto 0. El coeficiente del renglón z de esa columna es siempre
0.
x14
x21
x22
x33
x42
x44
x45
x53
x55
ƒ
10
45
20
15
25
15
5
40
5
x11 x12 x13 x14 x15 x21 x22 x23 x24 x25
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
…
10
45
20
15
25
15
5
40
5
Para las columnas de las variables no básicas, el coeficiente del renglón z es el que
proporciona la tabla calculando los ui y los vj y obteniendo el elemento zij. En este caso,
para la primera columna, z11=–5.
Esta casilla, si tuviera valor, formaría un ciclo con el resto de las variables básicas. El
ciclo sería el siguiente:
2
1
3
+
2
0
-
3
4
5
4
5
5
6
M
4
-
-5
B
45
4
+
M
M
M
0
-
B
3
7
B
M
10
10
M
M
M
12
65
20
5
B
15
15
M
B
2
+
25
4
45
M
0
45
B
40
55
B
3
15
M
B
5
6
25
B
5
10
45
45
Al poder establecerse un ciclo, la casilla x11 podría expresarse como combinación lineal
del resto de las casillas del ciclo. Esto, traducido a la tabla simplex quiere decir que la
columna x̂11 puede expresarse como combinación lineal de las columnas que forma el
ciclo. En este caso, según los signos del ciclo:
16 de 25
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
ˆ11 − x
ˆ14 + x
ˆ44 − x
ˆ42 + x
ˆ22 − x
ˆ21 = 0
x
ˆ11 = x
ˆ14 − x
ˆ44 + x
ˆ42 − x
ˆ22 + x
ˆ21
x
Por tanto, la columna en la tabla simplex quedaría:
x14
x21
x22
x33
x42
x44
x45
x53
x55
ƒ
x11 x12 x13 x14 x15 x21 x22 x23 x24 x25
1
1
0
1
0
1
-1
0
0
0
0
0
1
0
0
-1
0
0
0
0
0
0
0
0
0
0
0
-5
0
0
…
10
45
20
15
25
15
5
40
5
Repitiendo este proceso para el resto de las columnas, obtendríamos la tabla simplex
asociada al problema de trasporte. Una vez completada esta tabla, se realiza el análisis
de sensibilidad correspondiente.
3.2 Problemas de asignación.
Los problemas de asignación son un caso particular de los problemas de trasporte.
Un ejemplo clásico de problema de asignación es aquel en el que existen n máquinas y m
tareas. Si n ≠ m se crean ficticios. Cada máquina ejecuta una única tarea y cada tarea se
ejecuta en una única máquina.
Los valores de los coeficientes y las variables en este tipo de problemas serán tal que:
ƒ
ƒ
cij será el coste de ejecutar la tarea i en la máquina j.
⎧1 si i se ejecuta en j
xij ⎨
⎩0 en caso contrario
El problema se formula de la siguiente forma:
min
∑c
ij
xij
i, j
∑x
ij
=1
∀i
∑x
ij
=1
∀j
⎧
⎪ j
⎪
⎪
s.a. ⎨ i
⎪x
⎪ ij
⎪x
⎩ ij
≥0
∈ {0,1}
La primera restricción modela la necesidad de que una tarea se ejecuta únicamente en una
máquina. La segunda restricción hace referencia a que en una máquina sólo se ejecuta una
tarea. La última restricción está implícita en el método de resolución.
17 de 25
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
Dado que xij será 1 solo si es básica, y en caso contrario sería 0, no es necesario disponer el
valor de las variables básicas en las casillas. De este modo, una tabla de asignación será una
tabla de costos, en donde se enmarcarán las casillas básicas. Por ejemplo:
7
3
0
0
5
2
1
2
0
2
0
8
2
0
4
4
0
1
3
6
8
10
1
3
0
Propiedad: Si una tabla de asignación es tal que:
a) cij ≥ 0
∀i, j
b) Se pueden elegir n ceros, uno en cada fila y columna
Entonces una solución óptima del problema consiste en hacer básicas (a valor 1) a las casillas
de las ceros elegidos.
Para resolver una tabla de asignación se empleará el algoritmo húngaro de asignación:
1) Hacer ceros.
a) Restar a cada fila su mínimo.
b) Restar a cada columna su mínimo.
2) Encuadrar ceros.
a)
b)
c)
d)
En la fila o columna con menor número de ceros libres, encuadrar uno.
Tachar los ceros de la fila y columna del cero encuadrado.
Repetir los dos pasos anteriores mientras queden ceros libres.
Si se ha encuadrado un cero en cada fila y columna se tiene la asignación óptima.
3) Tachar ceros con menor número de líneas.
a)
b)
c)
d)
e)
Marcar las filas sin ceros encuadrados.
Marcar las columnas con cero tachado en fila marcada.
Marcar las filas con cero encuadrado en columna marcada.
Repetir los dos pasos anteriores mientras se realicen nuevas marcas.
Sobrerrayar las filas no marcadas y las columnas marcadas.
4) Mover ceros.
a)
b)
c)
d)
Calcular el mínimo de los elementos no sobrerrayados.
Restar dicho mínimo a los elementos no sobrerrayados.
Sumar dicho número a los elementos sobrerrayados dos veces.
Repetir desde el paso Encuadrar ceros.
Ejemplo: Supongamos la siguiente tabla:
12
7
6
5
10
8
5
9
6
8
6
13
9
6
10
10
5
8
9
12
11
12
5
6
3
18 de 25
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
Restamos a cada fila su mínimo:
7
2
1
0
5
3
0
4
1
3
0
7
3
0
4
5
0
3
4
7
8
9
2
3
0
Restamos seguidamente a cada columna su mínimo:
7
2
0
0
5
3
0
3
1
3
0
7
2
0
4
5
0
2
4
7
8
9
1
3
0
De esta forma hemos conseguido al menos un cero en cada fila y columnas. Pasamos a
encuadrar ceros. Empezamos por filas. La fila 2 sólo tiene un cero, así que lo encuadramos y
tachamos el resto de ceros que haya en la misma fila y columna que ese cero:
7
2
0
0
5
3
0
3
1
3
0
7
2
0
4
5
0
2
4
7
8
9
1
3
0
7
2
0
0
5
3
0
3
1
3
0
7
2
0
4
5
0
2
4
7
8
9
1
3
0
7
2
0
0
5
3
0
3
1
3
0
7
2
0
4
5
0
2
4
7
8
9
1
3
0
La fila 5 tiene un único cero:
La columna 1 tiene un único cero:
19 de 25
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
La columna 3 tiene un único cero:
7
2
0
0
5
3
0
3
1
3
0
7
2
0
4
5
0
2
4
7
8
9
1
3
0
Como no tenemos un cero enmarcado en cada fila y columna (la fila 4 no tiene ceros
enmarcados), pasamos al paso Tachar ceros con el menor número de líneas.
Marcamos las filas sin ceros enmarcados:
7
2
0
0
5
3
0
3
1
3
0
7
2
0
4
5
0
2
4
7
8
9
1
3
0
x
Marcamos las columnas con un cero tachado en la fila marcada:
x
7
2
0
0
5
3
0
3
1
3
0
7
2
0
4
5
0
2
4
7
8
9
1
3
0
x
Marcamos las filas con cero encuadrado en la columna marcada:
x
7
2
0
0
5
3
0
3
1
3
0
7
2
0
4
5
0
2
4
7
8
9
1
3
0
20 de 25
x
x
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
Como ya no podemos seguir marcando filas y columnas, pasamos a sobrerrayar las filas no
marcadas y las columnas marcadas:
x
7
2
0
0
5
3
0
3
1
3
0
7
2
0
4
5
0
2
4
7
8
9
1
3
0
x
x
Calculamos el mínimo de los elementos no sobrerrayados. En este caso 1. El paso Mover
ceros equivale a restar a las filas marcadas (las no sobrerrayadas) el mínimo valor, para así
obtener nuevos ceros. Además, para que no aparezcan valores negativos (o se pierdan los
ceros que ya tenemos) hay que sumar esa misma cantidad a las columnas marcadas (las
sobrerrayadas).
Realizando esta operación tendríamos:
7
3
0
0
5
2
0
2
0
2
0
8
2
0
2
4
0
1
3
6
8
10
1
3
0
7
3
0
0
5
2
0
2
0
2
0
8
2
0
2
4
0
1
3
6
8
10
1
3
0
Volvemos a encuadrar ceros:
Que sí es solución del problema, ya que tenemos ceros encuadrados en cada fila y columna.
Para calcular el valor de la función objetivo, hay que sumar los costes de las casillas básicas
(las encuadradas) en la tabla original. En este caso:
12
7
6
5
10
8
5
9
6
8
6
13
9
6
10
10
5
8
9
12
11
12
5
6
3
Es decir, el valor de la función objetivo es z*=6+6+6+5+3=26.
21 de 25
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
3.3 Problemas de Programación Lineal Entera.
Definición: Un problema de programación lineal se dice de programación lineal entera si
alguna o todas las variables están sujetas a la condición de tomar valores enteros. Esta
condición es llamada condición de integridad.
Un problema de programación lineal entera se dice puro si todas las variables deben tomar
valores enteros y c, A y b son enteros. Cualquier otro problema de programación lineal entera
se dice mixto.
Definición: Dado un problema de programación lineal entera (PE), el problema que se obtiene
de él eliminando las condiciones de integridad es su correspondiente problema relajado (PR).
La región factible de un problema de programación lineal entera es la que resulta de la
intersección de la región factible del problema relajado con las coordenadas enteras:
Los métodos de resolución pueden ser muy complicados y largos desde el punto de vista
operativo, por lo que se simplificará el problema por zonas.
Las relaciones entre el problema entero (PE) y su relajado (PR) son:
PE
PR
Infactible
Infactible
Ilimitado
Ilimitado
Solución Óptima
Solución Óptima
No Ilimitado
Ejemplo del Algoritmo de ramificación y acotación.
Tengamos el problema:
max
2 x1 + x2
⎧5x1 + 8 x2 ≤ 68
⎪
⎪ x1 − x2 ≤ 2
s.a. ⎨
⎪ x2 ≤ 6
⎪ x ≥ 0 Enteras
⎩ i
→
22 de 25
⎛ 6.46 ⎞
⎟⎟
x * = ⎜⎜
⎝ 4.46 ⎠
z * = 17,38
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
Representamos de forma genérica la región factible de este problema, así como su punto
óptimo:
x2
5
4
x1
Podemos afirmar que en el intervalo abierto (4,5) no vamos a encontrar soluciones enteras
para x2. Por tanto dividiremos la región factible en dos:
x2
x2
5
5
4
4
x1
x1
Para poder resolverse es necesario dividir el problema en dos, uno para cada área resultante.
En realidad, lo que hemos hecho es añadir una nueva restricción ya que el área inferior sería la
resultante de añadir la condición x2 ≤ 4 y la superior la de añadir la condición x2 ≥ 5 .
Expresamos estos problemas en forma de árbol:
23 de 25
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
A partir de la rama PR21, cualquier solución entera que se hallara, sería peor que la solución
PR1, ya que el valor de la función objetivo de PR21 es menor que la de PR1 y al añadir
restricciones a PR21 obtendremos valores objetivos o iguales o peores a PR21, pero nunca
mejores. Por tanto marcamos ese nodo como terminal y no seguimos profundizando en la
rama PR21.
⎛6 ⎞
Por tanto la solución del problema es: x * = ⎜⎜ ⎟⎟
⎝ 4⎠
Algoritmo:
z * = 16
Paso 0:
– Resolver el problema relajado.
– Si la solución verifica la condición de integridad, problema resuelto.
– En caso contrario se construye el primer nodo del árbol a partir de la solución
obtenida.
– Se ramifica construyendo los dos problemas.
Paso 1:
– Resolver alguno de los problemas asociados a nodos no terminales.
– Si la solución obtenida verifica la condición de integridad y es mejor que todas
las anteriores, marcarla como mejor solución.
Paso 2:
– Marcar los nodos terminales y ramificar a partir de los nodos no terminales.
– Volver a Paso 1.
Un nodo es terminal cuando:
ƒ
ƒ
ƒ
La solución verifica la condición de integridad.
El problema resultante es infactible.
El valor objetivo asociado a ese nodo es peor que la mejor solución ya encontrada.
Ejemplo:
max
2 x1 + 3x2 + 8 x3
⎧2 x1 − 4x2 + 6 x3 ≤ 9
⎪
⎪⎪ x + 1 x + 3x ≤ 5
3
s.a. ⎨ 1 2 2
⎪x ≥ 0
⎪ i
⎪⎩ x i ∈ Z
Existen dos estrategias a la hora de completar cualquier árbol. Una de ellas es completarlo por
niveles, de forma que no se avanza al nivel siguiente hasta que no se ha completado el nivel
actual. La segunda estrategia es completar por profundidad, de forma que no se cambia de
rama hasta que no se ha llegado hasta un nodo terminal.
La estrategia de profundidad suele requerir menos evaluaciones, ya que se puede encontrar
relativamente pronto una solución entera de forma que cualquier rama con valor objetivo
menor puede ser desechada.
No obstante, este problema lo resolveremos por niveles.
24 de 25
Serafín Rondán. Investigación Operativa. Tema 3. Programación Lineal Entera.
El árbol desarrollado sería:
Si en vez de exigir que las variables fueran enteras, se exigieran que fueran múltiplos de, por
ejemplo 3, lo único que habría que cambiar es la forma en la que se dividen las regiones, ya
que los límites de acotación (la nueva restricción añadida) en cada rama deberían ser múltiplos
de 3.
25 de 25
Descargar