CONSTRUCCION DE M ETODOS PARA CALCULAR UNA …
Transcript of CONSTRUCCION DE M ETODOS PARA CALCULAR UNA …
UNIVERSIDAD NACIONAL DE TRUJILLO
FACULTAD DE CIENCIAS FISICAS Y MATEMATICAS
ESCUELA ACADEMICO PROFESIONAL DE MATEMATICAS
CONSTRUCCION DE METODOS PARA CALCULAR UNA
SOLUCION INICIAL PARA EL ALGORITMO DUAL SIMPLEX DE
LA PROGRAMACION LINEAL A GRAN ESCALA
Trabajo de Tesis
Alumna:
YESSICA EVELIN ZARATE PEDRERA
Asesor:
Dr. EDMUNDO VERGARA MORENO
Trujillo - PERU
2014
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Jurado
Dr. Ulices Zavaleta Calderon
Presidente
Mg. Nelson Aragones Salazar
Secretario
Mg. Manuel Montalvo Bonilla
Vocal
i
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Dedicatoria
A mi mama Isidora Vera
Castillo con mucho amor
y carino le dedico todo mi
esfuerzo y trabajo puesto
para la realizacion de esta
tesis.
ii
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Agradecimiento
Agradezco a Dios ser maravilloso que me dio fuerza y fe para creer lo que me
parecıa imposible terminar. A mi familia, en especial a mi tıo Luis Pedrera Vera y
mi madre Isabel Pedrera Vera por todo su apoyo y sus consejos durante el tiempo
de mis estudios de pregrado.
A mis amigos, sobre todo a Alfredo Jara Grados y Rusbert Calderon Beltran
por las veces que estudiamos juntos, estare siempre agradecida por sus ensenanzas
y su amistad sincera. A mi asesor Dr. Edmundo Vergara Moreno por las horas de
estudio y su atencion en mi trabajo de tesis. A Sander Contreras Escobar, por su
paciencia y ayuda durante los ultimos meses de investigacion. Sin ustedes no hubiera
sido posible culminar esta tesis.
Un agradecimiento especial a los investigadores, estudiantes y personal del de-
partamento de matematicas y a todos mis maestros de la Universidad Nacional de
Trujillo por su ensenanza academica.
iii
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Presentacion
Senores Miembros del Jurado:
En cumplimiento con el reglamento para optar el TITU-
LO de LICENCIADO EN CIENCIAS MATEMATICAS, someto a vuestra conside-
racion el trabajo de tesis titulado:
CONSTRUCCION DE METODOS PARA CALCULAR
UNA SOLUCION INICIAL PARA EL ALGORITMO
DUAL SIMPLEX DE LA PROGRAMACION LINEAL
A GRAN ESCALA
La Autora.
iv
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Indice general
Jurado I
Dedicatoria II
Agradecimiento II
Presentacion III
Resumen VII
Introduccion VIII
1. Preliminares 1
1.1. Modelo de programacion lineal . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Algunos resultados de analisis convexo . . . . . . . . . . . . . . . . . 2
1.2.1. Conjuntos poliedricos, puntos extremos y direcciones extremas 5
2. Programacion lineal 15
2.1. Mejoramiento de una solucion basica factible . . . . . . . . . . . . . . 18
2.2. Optimalidad y no acotamiento . . . . . . . . . . . . . . . . . . . . . . 21
2.3. Terminacion con una solucion optima . . . . . . . . . . . . . . . . . . 22
2.4. Soluciones optimas unicas y alternativas . . . . . . . . . . . . . . . . 22
2.5. El metodo simplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.5.1. El metodo simplex en formato de tableau . . . . . . . . . . . . 24
2.5.2. El metodo simplex para variables acotadas . . . . . . . . . . . 25
3. Metodo dual simplex 29
3.1. Planteamiento del problema dual . . . . . . . . . . . . . . . . . . . . 29
3.2. Metodo dual simplex en formato de tableau . . . . . . . . . . . . . . 30
v
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
3.3. Problema general de programacion lineal . . . . . . . . . . . . . . . . 31
3.4. Algoritmo dual simplex para problemas generales . . . . . . . . . . . 33
4. Metodos de inicializacion del algoritmo dual simplex 34
4.1. Metodo de modificacion de costos . . . . . . . . . . . . . . . . . . . . 34
4.2. Metodo de reducir las infactibilidades o metodo de Ping-Qi Pan . . . 35
4.3. Metodo de minimizar la suma de infactibilidades duales . . . . . . . . 36
4.4. Implementacion en matlab . . . . . . . . . . . . . . . . . . . . . . . . 37
4.5. Tecnicas para implementar el algoritmo dual simplex . . . . . . . . . 53
Conclusiones 54
Bibliografıa 56
A. Codigos de programas en matlab 57
vi
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Resumen
El metodo simplex es un algoritmo iterativo que, iniciando en una solucion basica
factible pero no optima, genera soluciones factibles cada vez mejores hasta conseguir
la solucion optima (si esta existe); es decir el metodo simplex mantiene la factibi-
lidad mientras busca optimalidad. Pero surge la posibilidad de usar otro esquema
igualmente iterativo, que como contraparte del simplex, comienza en una solucion
optima, pero no factible, y mantiene las condiciones de optimalidad mientras busca
factibilidad. Este procedimiento, con el cual se llega a la solucion de un problema
de programacion lineal, se conoce como metodo dual-simplex y fue desarrollado en
1954 por C.E. Lemke.
Para el algoritmo simplex existen procedimientos para obtener una solucion basica
factible inicial de un conjunto de restricciones, por ejemplo el metodo de dos fases
y el metodo de penalizacion. Por otro lado, el algoritmo dual-simplex inicia con
una solucion basica que cumpla las condiciones de optimalidad, dicha solucion se
denomina solucion dual factible, por tanto; para obtener una solucion basica dual
factible, en este trabajo se presentan tres metodos, los cuales son:
Metodo de modificacion de costos
Metodo de P.Q. Pan
Metodo de la mınima suma de infactibilidades duales.
Estos metodos y el algoritmo dual simplex fueron implementados en matlab, para
luego resolver algunos pequenos problemas lineales, tambien se resolvio un problema
test obtenido de la librerıa MIPLIB.
Palabras claves: Problema de programacion lineal, metodo simplex, metodo dual
simplex, solucion basica factible inicial
vii
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Introduccion
La programacion matematica es un moderno campo dentro de la matematica apli-
cada orientado a la modelacion de problemas en el ambito de la toma de decisiones
y al diseno de metodologıas para resolverlos. En esta clase de problemas, cuyos mo-
delos son denominados programas matematicos; se trata de seleccionar una mejor
alternativa, el conjunto de alternativas se denomina conjunto factible, la calidad
de las alternativas es medida por una funcion llamada objetivo y el adjetivo mejor
equivale a un maximo o mınimo segun la naturaleza del problema.
Una rama de la programacion matematica, se llama programacion lineal (PL) y
estudia modelos de optimizacion de funciones objetivo y restricciones lineales. Su
aplicacion practica se encuentra en casi todas las facetas de los negocios, desde la
publicidad hasta la planificacion de la produccion. Problemas de transporte, distri-
bucion, y planificacion global de produccion son los objetos mas comunes del analisis
de PL. Esta teorıa tambien se aplica con exito a problemas de presupuestos de ca-
pital, diseno de dietas, conservacion de recursos, juegos de estrategia, prediccion de
crecimiento economico y sistemas de transporte. [1]
Todo problema PL consta de una funcion objetivo que es una funcion real de n
variables y esta sujeto a restricciones que definen un conjunto factible el cual se
expresa como la interseccion de hiperplanos o semiespacios en Rn .
En particular un problema de programacion lineal tiene la siguiente formulacion:
min f(x)
s.a. Ax ≤ b
x ≥ 0
(1)
donde f : Rn −→ R es una funcion lineal, A es una matriz m × n, llamada matriz
de restricciones, b ∈ Rm, x ∈ Rn y F = {x ∈ Rn : Ax ≤ b, x ≥ 0} se denomina
conjunto factible.
viii
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Para resolver los problemas de PL, fue creado el metodo simplex, por George Ber-
nard Dantzig, publicado en el verano de 1947. Actualmente, usando computadoras
modernas y una implementacion sofisticada del metodo simplex, es facil resolver
programas lineales con mas de 5 000 restricciones y 10 000 variables. Aunque se han
desarrollado muchas variantes del metodo simplex y se han propuesto otros nuevos
algoritmos competidores, el metodo simplex sigue siendo un medio viable y el mas
usado para resolver problemas de PL. [3],[7]
Sin embargo si (1) es un problema a gran escala, es decir, tiene un gran numero de
variables n mucho mayor que el numero de restricciones m (n � m) y se intenta
resolver dicho problema usando el metodo simplex, se presentarıan las siguientes
dificultades:
� El numero de columnas de la matriz A serıan tantas que dificultarıan el alma-
cenamiento de A en la memoria de un computador, hecho por el cual el metodo
simplex no podrıa buscar una mejor solucion, ya que este metodo trabaja con
todas las columnas en cada iteracion.
� Como el metodo simplex tiene una complejidad computacional exponencial,
entonces el tiempo para resolver un problema con un numero de variables muy
grande, no serıa razonable.
Es por ello que para implementar el metodo simplex se utiliza la version revisada. El
metodo simplex revisado es un algoritmo que solo trabaja con las columnas elegidas
para formar parte de la base, dejando de lado las columnas que no llegan a estar en
la base en ninguna iteracion del algortimo
Actualmente, problemas de PL a gran escala pueden ser resueltos por un algoritmo
de punto interior o dual simplex. El metodo dual simplex fue desarrollado por C.
E. Lemke en 1954 , pero no se uso como alternativa del metodo simplex por casi
cuarenta anos. [5] Durante la decada de los 90 se han hecho grandes progresos en
establecer el metodo dual simplex como un metodo general para solucionar pro-
blemas PL a gran escala [6]. El proceso del metodo simplex consiste en buscar la
condicion de optimalidad manteniendo la condicion de factibilidad; mientras que el
metodo dual simplex hace lo contrario, manteniendo la condicion de optimalidad,
busca una solucion que satisfaga la condicion de factibilidad. Por tanto, mientras
que el algoritmo simplex inicia con una solucion factible, el algoritmo dual simplex
ix
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
inicia con una solucion que satisfaga la condicion de optimalidad.
En el algoritmo simplex se cuenta con los metodos clasicos de variables de holgura,
penalizacion y de dos fases para determinar la solucion inicial, mientras que para el
algoritmo dual simplex estos metodos no pueden ser utilizados. En el presente tra-
bajo se desarrolla algunos metodos que permitan obtener una solucion inicial para
el algoritmo dual simplex y se muestra que uno de estos metodos es el mas eficiente.
La presentacion de este trabajo esta dividido en 4 capıtulos, en el primero se presen-
ta los conceptos teoricos fundamentales de la teorıa de programacion lineal. En el
capıtulo 2, se presenta el mejoramiento de una solucion y los conceptos basicos del
metodo simplex. En el capıtulo 3, se plantea el problema dual y se presenta el meto-
do dual simplex para problemas generales. Finalmente, en el capıtulo 4, se presentan
los metodos de inicializacion para el algoritmo dual simplex y su implementacion en
matlab.
x
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Capıtulo 1
Preliminares
1.1. Modelo de programacion lineal
El objetivo principal de los problemas de optimizacion es la solucion de los problemas
del tipo: min f(x)
s.a : x ∈ S ⊆ Rn,(1.1)
donde f es la funcion objetivo y el conjunto S es definido por las restricciones im-
puestas sobre el vector de decision x.
El problema (1.1) se lee como: “Encontrar (si existe) un elemento de S donde la
funcion objetivo f alcanza su valor mınimo”.
Un problema de programacion lineal se puede formular como:
(PL)
min z = f(x) = cTx
s.a: Ax ≤ b
x ≥ 0,
donde: A es un matriz de m× n, b ∈ Rm y x, c ∈ Rn,Una de las formas para resolver los problemas de programacion lineal es usando el
metodo simplex el cual fue disenado para resolver los problemas lineales en su forma
estandar. La forma estandar se obtiene del problema (PL) adicionandole variables
de holgura a las restricciones, y es dada por:
1
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
(PLE)
min z = f(x) = cTx
s.a: Ax = b
x ≥ 0,
Definicion 1.1 Cualquier punto x, que satisface las restricciones del problema (PLE)
es una solucion factible y al conjunto de soluciones factibles, denotado por S = {x :
Ax = b, x ≥ 0}, se denomina region factible.
Definicion 1.2 Una solucion optima del problema (PLE) es aquella o cada una de
aquellas soluciones factibles donde la funcion objetivo alcanza el mınimo. Es decir,
x∗ es solucion optima si cTx∗ ≤ cTx, ∀x ∈ S.
Los problemas lineales plantean la busqueda de una solucion factible x∗, de manera
que f(x∗) sea el menor posible. Tal busqueda puede concluir con uno de los siguientes
resultados.
a. Problema no factible: Cuando S = ∅ y en tal caso
mınx∈S
f(x) = +∞.
b. Problema no acotado: Cuando existe una solucion que haga descender infini-
tamente a la funcion objetivo; es decir, cuando para cualquier valor real M
siempre existe un x ∈ S tal que f(x) < M . En tal caso
mınx∈S
f(x) = −∞.
c. Problema con valor optimo: Cuando existe x∗ ∈ S tal que f(x∗) ≤ f(x) ,
∀x ∈ S. En tal caso
f(x∗) = mınx∈S
cTx,
y x∗ es la solucion optima global, siendo no necesariamente unica en S con
esta propiedad.
1.2. Algunos resultados de analisis convexo
A partir del planteamiento del problema de programacion lineal estudiaremos algu-
nos resultados del analisis convexo, incluyendo los conceptos de conjuntos convexos
y conjuntos poliedricos.
2
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Definicion 1.3 Un conjunto no vacıo S ⊂ Rn es convexo si y solo si ∀x, y ∈ S se
tiene λx+ (1− λ)y ∈ S, ∀λ ∈ [0, 1].
Ejemplo 1.1 El conjunto
S = {x ∈ Rn : Ax ≤ b, Am×n, b ∈ Rm}
es convexo
Definicion 1.4 Sea el conjunto no vacıo S ⊂ Rn, el punto x ∈ Rn es combinacion
convexa de puntos de S si existe un conjunto finito de puntos {xi}mi=1 ⊂ S tal que
x =m∑i=1
λixi donde λi ∈ [0,1], ∀ i = 1, . . . ,m ym∑i=1
λi = 1.
Definicion 1.5 Un hiperplano H en Rn es una coleccion de puntos de la forma
H = {x ∈ Rn : pTx = α}
donde p es un vector no nulo en Rn y α es un escalar.
Figura 1.1: Hiperplano H
Un hiperplano H define dos semiespacios cerrados de la forma
H+ = {x ∈ Rn : pTx ≥ α}
H− = {x ∈ Rn : pTx ≤ α}
y dos semiespacios abiertos {x ∈ Rn : pTx > α} y {x ∈ Rn : pTx < α}
3
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Figura 1.2: Semiespacios H+ y H−
Definicion 1.6 Sea S un conjunto no vacıo en Rn y sea x ∈ ∂S, donde ∂S denota
la frontera de S. Un hiperplano H = {x ∈ Rn : pT (x − x) = 0} es llamado un
hiperplano soporte de S en x si se cumple solo una de las siguientes condiciones:
i. S ⊆ H+, es decir, pT (x− x) ≥ 0, ∀x ∈ S.
ii. S ⊆ H−, es decir, pT (x− x) ≤ 0, ∀x ∈ S.
Definicion 1.7 Sea S ⊂ Rn no vacıo y H un hiperplano soporte de S. Denomina-
remos puntos soporte a los puntos del conjunto S ∩H.
Definicion 1.8 Un conjunto no vacıo C ∈ Rn es llamado un cono con vertice cero
si para cualquier x ∈ C,λx ∈ C, ∀λ ≥ 0. Si ademas C es convexo, entonces C es
llamado un cono convexo.
Observacion: Si x ∈ C, donde C es cono, entonces la semirecta que contiene al
origen y pasa por el punto x debe estar contenida en el cono C.
Teorema 1.1 Si L1, L2, . . . , Lm ∈ Rm son linealmente independientes y L ∈ Rm es
combinacion lineal de ellas; es decir,
L =m∑i=1
λiLi
con λk 6= 0, entonces L1, . . . , Lk−1, Lk+1, . . . , Lm, L son linealmente independientes
Prueba.1
1Para su demostracion ver [1]
4
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
1.2.1. Conjuntos poliedricos, puntos extremos y direcciones
extremas
Conjunto poliedrico
Definicion 1.9 (Conjunto poliedrico)
Un conjunto S en Rn es un conjunto poliedrico si S es la interseccion de un numero
finito de semiespacios cerrados; es decir,
S = {x ∈ Rn : pTi x ≤ αi ∀ i, . . . ,m},
donde pi ∈ Rn, pi 6= 0, αi ∈ R, ∀ i = 1, . . . ,m.
Observacion
� Un conjunto poliedrico es un conjunto cerrado y convexo.
� Como una ecuacion puede representarse por dos inecuaciones, entonces un
conjunto poliedrico puede ser representado por un numero finito de ecuaciones
y/o inecuaciones.
Puntos extremos y direcciones extremas
Definicion 1.10 Sea S ⊂ Rn un conjunto convexo no vacıo. Un vector x ∈ S es
un punto extremo de S si x = λx1 + (1 − λ)x2 con x1, x2 ∈ S y λ ∈ (0, 1) implica
que x = x1 = x2; es decir, un punto extremo es aquel que no se puede escribir como
combinacion convexa de dos puntos diferentes de S.
Figura 1.3: Se puede observar que x1 es punto extremo, mientras que x2 y x3 no lo son.
El concepto de puntos extremos juega un papel muy importante dentro de la progra-
macion lineal, debido a que cada punto extremo es una posible solucion del problema
que se esta tratando.
5
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Definicion 1.11 Sea S ⊂ Rn un conjunto cerrado y convexo. Un vector d ∈ Rn,
distinto de cero, es una direccion de S si para todo x ∈ S se tiene que x + λd ∈S, ∀λ ≥ 0.
Figura 1.4: d es una direccion de S.
Observacion : Por la definicion dada de “direccion”, el conjunto debe ser no acotado
para que tenga al menos una direccion.
Definicion 1.12 Dos direcciones d1 y d2 de S son distintas si d1 6= αd2 para cual-
quier α > 0.
Definicion 1.13 Una direccion d de S es una direccion extrema si no se puede
escribir como combinacion lineal positiva de dos direcciones distintas; es decir, si
d = λ1d1 + λ2d2 para λ1, λ2 > 0, entonces d1 = αd2 para algun α > 0.
Figura 1.5: d1 y d2 son direcciones extremas de S.
6
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Caracterizacion de puntos extremos y direcciones extremas
Teorema 1.2 (Caracterizacion de puntos extremos)
Sea S = {x ∈ Rn : Ax = b, x ≥ 0}, donde A es una matriz de m× n con rango m y
b ∈ Rm. Un punto x es un punto extremo de S si y solo si A puede ser descompuesta
en la forma [B N ] tal que
x =
xB
xN
=
B−1b
0
,donde B es una matriz m×m invertible tal que B−1b ≥ 0.
Prueba.
⇐] Como B−1b ≥ 0, entonces x =
B−1b
0
≥ 0, ademas
Ax =[B N
] B−1b
0
= BB−1b = b,
por lo tanto x ∈ S.
Ahora supongamos que x = λx1 + (1− λ)x2, donde x1, x2 ∈ S y λ ∈ 〈0, 1〉.
Sea x1 =
x11
x12
y x2 =
x21
x22
,
luego B−1b
0
= λ
x11
x12
+ (1− λ)
x21
x22
,ya que x12 ≥ 0, x22 ≥ 0 y λ > 0, se tiene que x12 = x22 = 0.
En consecuencia, x1 =
x11
0
y x2 =
x21
0
.
Por otro lado
Ax1 = b,[B N
] x11
0
= b,
Bx11 = b,
x11 = B−1b.
De forma similar x12 = B−1b; y con esto se tiene que x = x1 = x2, por lo tanto, x
es un punto extremo.
7
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
⇒] x es un punto extremo de S. Se debe probar que A = [B N ], B es invertible y
x =
B−1b
0
≥ 0
En efecto. Por hipotesis x ∈ S ⊂ Rn, sin perdida de generalidad supongamos
que x = (x1, . . . , xk, 0, . . . , 0)T , donde x1, . . . , xk son positivos con k ≤ n.
Luego
Ax = b,
[A1 A2 · · · An
]
x1...
xk
0...
0
= b,
A1x1 + A2x2 + · · ·+ Akxk = b,
entonces
[A1 A2 · · · Ak
]x1...
xk
= b. (1.2)
Probemos que {A1, A2, . . . , Ak} son linealmente independiente.
Supongamos que {A1, A2, . . . , Ak} son linealmente dependiente; es decir, existen
escalares λ1, λ2, . . . , λk no todos ceros tal que
λ1A1 + · · ·+ λkAk = 0.
Sean λ = (λ1, λ2, . . . , λk, 0, . . . , 0)T ∈ Rn y α > 0, definamos
x1 = x+ αλ y x2 = x− αλ,
donde α es escogido de tal forma que x1 ≥ 0 y x2 ≥ 0.
Notar que
Ax1 = Ax+ αAλ = b+ αk∑i=1
λiAi = b, puesk∑i=1
λiAi = 0
8
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
y de forma similar, Ax2 = b.
Por lo tanto, x1, x2 ∈ S y como α > 0 y λ 6= 0, entonces x1 6= x2. Ademas
x = 12x1 + 1
2x2, lo que indica que x no es punto extremo; contradiciendo ası la
hipotesis, por lo tanto {A1, A2, . . . , Ak} es un conjunto linealmente independiente.
Puesto que ran(A) = m, entonces hay m columnas linealmente independientes lo
que indica que k ≤ m. Si k = m, entonces de la ecuacion (1.2) se tiene
[A1 A2 · · · Ak
]x1...
xk
= b,
BxB = b,
xB = B−1b,
pues B es invertible.
Si k < m, entonces se pueden escoger m−k de n−k columnas tal que ellas, junto con
las k primeras columnas forman un conjunto de vectores linealmente independientes.
De este modo podemos formar la matriz B = [A1 . . . Ak Ak+1 . . . Am] invertible.
Es decir, A podemos experesar como A = [B N ], donde B es una matriz invertible
de m×m y ademas x =
B−1b
0
≥ 0, puesto que xi > 0, ∀ i = 1, . . . , k. 2
Corolario 1.2.1 El numero de puntos extremos de S es finito.
Prueba.2
Teorema 1.3 (Existencia de puntos extremos)
Sea un conjunto poliedrico no vacıo de la forma S = {x ∈ Rn : Ax = b, x ≥ 0},donde A es una matriz de m×n con rango m y b ∈ Rm. Entonces S tiene al menos
un punto extremo.
Prueba.3
Teorema 1.4 (Caracterizacion de direcciones extremas)
Sea S = {x ∈ Rn : Ax = b, x ≥ 0} no vacıo, donde A es una matriz de m × n
con rango m y b ∈ Rm. Un vector d es una direccion extrema de S si y solo si A
2Para su demostracion ver [2]3Para su demostracion ver [2]
9
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
puede descomponerse en [B N ] tal que B−1aj ≤ 0, para alguna columna aj de N
y d es un multiplo positivo de d =
−B−1ajej
, donde ej es un vector de n − m
componentes de valor cero excepto en la posicion j que tiene valor 1.
Prueba.
⇐] Como B−1aj ≤ 0, entonces d =
−B−1ajej
≥ 0,
ademas
Ad =[B N
] −B−1ajej
= −BB−1aj +Nej = −aj + aj = 0,
por lo tanto d es una direccion.
Ahora supongamos que
d = λ1d1 + λ2d2,
donde λ1, λ2 > 0 y d1, d2 son direcciones de S. Notar que d tiene m− n− 1 compo-
nentes iguales a cero, entonces las correspondientes componentes de d1 y d2 tambien
deben ser iguales a cero, pues d1 ≥ 0 , d2 ≥ 0.
Ası d1 y d2 pueden ser escritos como
d1 = α1
d11
ej
, d2 = α2
d21
ej
,donde α1 > 0 y α2 > 0. Como d1 y d2 son direcciones, entonces Ad1 = Ad2 = 0.
Luego
Ad1 = 0,[B N
] α1d11
α1ej
= 0,
α1Bd11 + α1Nej = 0,
α1Bd11 + α1aj = 0,
d11 = −B−1aj.
De forma similar se tiene que d21 = −B−1aj. Ası se tiene que d1 y d2 no son distintos,
el cual implica que d es una direccion extrema. Ya que d es un multiplo positivo de
d, se tiene que d tambien es una direccion extrema.
10
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
⇒] Supongamos que d es una direccion extrema de S. Sin perdida de generalidad,
supongamos que
d = (d1, . . . , dk, 0, . . . , 0, dj, 0, . . . , 0)T ,
donde di > 0, para i = 1, . . . , k y para i = j.
Luego, A1, A2, . . . , Ak son linealmente independientes.
En efecto. Por contradiccion, supongamos que esto no se cumple, entonces existen
escalares λ1, . . . , λk no todos ceros tales que
k∑i=1
λiAi = 0.
Sea λ = (λ1, . . . , λk, 0, . . . , 0)T ∈ Rn y escojamos α > 0 tal que
d1 = d+ αλ y d2 = d− αλ
sean no negativos.
Notar que
Ad1 = Ad+ αAλ = 0 + αk∑i=1
Aiλi = 0 + α0 = 0.
De forma similar Ad2 = 0. Puesto que d1, d2 ≥ 0, se tiene que d1 y d2 son direcciones
de S. Notar tambien que d1 y d2 son distintos, puesto que α > 0 y λ 6= 0.
Ademas, d = 12d1 + 1
2d2, lo que implica que d no es una direccion extrema, contradi-
ciendo ası la hipotesis. Por lo tanto A1, A2, . . . , Ak son linealmente independientes.
Como ran(A) = m, se tiene que k ≤ m, entonces existe m−k vectores en el conjunto
de vectores {Ai : i = k+ 1, . . . , n; i 6= j}, el cual junto con A1, A2, . . . , Ak forman un
conjunto de vectores linealmente independiente. Sin perdida de generalidad, supon-
gamos que esos vectores son Ak+1, . . . , Am. Denotar a [A1 A2 . . . Am] por B y notar
que B es invertible. Ası
0 = Ad = Bd+ aj dj, (1.3)
donde d es un vector de las m primeras componentes de d.
De la ecuacion (1.3) se tiene que d = −djB−1aj y por lo tanto d = dj
−B−1ajej
.
Ademas, como d ≥ 0 y dj > 0 se tiene que B−1aj ≤ 0, completando ası la prueba.2
Corolario 1.2.2 El numero de direcciones extremas de S es finito.
Prueba.4
4Para su demostracion ver [2]
11
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Teorema 1.5 (Teorema de Representacion)
Sea S un conjunto poliedrico no vacıo de la forma S = {x ∈ Rn : Ax = b, x ≥ 0},donde A es una matriz de m × n con rango m y b ∈ Rm. Sean x1, x2, , . . . , xk los
puntos extremos de S y d1, d2, , . . . , dl las direcciones extremas de S. Entonces x ∈ Ssi y solo si x puede ser escrito como
x =k∑i=1
λixi +l∑
j=1
µjdj
k∑i=1
λi = 1
λi ≥ 0, ∀ i = 1, . . . , k
µj ≥ 0, ∀ j = 1, . . . , l
Prueba.5
En la siguiente figura se muestra la interpretacion de este teorema.
Figura 1.6: En la ilustracion se observa que x = λx1 + (1− λ)x3 + µd2.
Teorema 1.6 (Existencia de direcciones exremas)
Sea S un conjunto poliedrico no vacıo de la forma S = {x ∈ Rn : Ax = b, x ≥ 0},donde A es una matriz de m×n con rango m y b ∈ Rm. Entonces S tiene al menos
una direcion extrema si y solo si S es no acotado.
Prueba.
⇒] Si S tiene al menos una direccion extrema. Probar que S es no acotada.
5Para su demostracion ver [2]
12
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
En efecto. Por el absurdo, supongamos que S es acotado, entonces
∃ k > 0 : ‖x‖ ≤ k, ∀x ∈ S.
Sea d una direccion extrema, entonces d es una direccion. Por tanto, para cualquier
x ∈ S se tiene x+ αd ∈ S, ∀α ≥ 0.
Sea la sucesion (xn)n∈IN ⊂ S tal que xn = x + nd, para algun x ∈ S. Como S es
acotada, entonces (xn)n∈IN es acotada. Entonces existe una subsucesion (xn)n∈K⊂IN
de (xn)n∈IN que es convergente, entonces (xn)n∈K⊂IN es una sucecion de Cauchy; es
decir:
∀ ε > 0, ∃n0 ∈ K ⊂ IN : ‖xm − xs‖ < ε, ∀m, s ≥ n0.
En particular para m = m0 > n0 y s = m0 + r, r ≥ 1, s ∈ K, entonces
‖xm0 − xm0+r‖ < ε.
Por otro lado:
‖xm0+r‖ = ‖xm0+r − xm0 + xm0‖ ≤ ‖xm0+r − xm0‖+ ‖xm0‖ < ε+ ‖xm0‖,
entonces
‖xm0+r‖ < ε+ ‖xm0‖. (1.4)
Ademas
(m0+r)‖d‖ = ‖(m0+r)d‖ = ‖x+(m0+r)d−x‖ ≤ ‖x+(m0+r)d‖+‖x‖ = ‖xm0+r‖+‖x‖,
entonces
(m0 + r)‖d‖ ≤ ‖xm0+r‖+ ‖x‖. (1.5)
Luego, de las ecuaciones (1.4) y (1.5) se tiene:
(m0 + r)‖d‖ ≤ ‖xm0+r‖+ ‖x‖ < ε+ ‖xm0‖+ ‖x‖,
entonces
‖x‖ > (m0 + r)‖d‖ − (ε+ ‖xm0‖).
Como (m0 + r)‖d‖− (ε+‖xm0‖)→∞, cuando r →∞ entonces ‖x‖ → ∞, hecho
que lleva a una contradiccion por haber supuesto que S es acotado. Por lo tanto, S
es no acotado.
⇐] Sea S no acotado. Probar que S tiene al menos una direccion extrema.
13
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
En efecto. Por el absurdo, supongamos que S no posee direcciones extremas, en-
tonces por el teorema (1.5) se tiene que cualquier elemento de S se puede representar
como
x =k∑i=1
λixi,
donde λi ∈ [0, 1], xi ∈ S, ∀ i = 1, . . . , k yk∑i=1
λi = 1.
Ahora, usando desigualdad triangular se tiene:
‖x‖ = ‖k∑i=1
λixi‖ ≤k∑i=1
λi‖xi‖.
Sea t = max1≤i≤k
‖xi‖, entonces ‖xi‖ ≤ t, ∀ i = 1, . . . , k. Luego
‖x‖ ≤k∑i=1
λi‖xi‖ ≤k∑i=1
λit = tk∑i=1
λi = t.
Ası, ‖x‖ ≤ t, ∀x ∈ S, entonces S es acotado. Contradiciendo ası la hipotesis. Por
lo tanto S posee al menos una direccion extrema. 2.
14
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Capıtulo 2
Programacion lineal
Considere el sistema Ax = b, con x ≥ 0, en donde A es una matriz de m×n y b ∈ Rm.
Suponga que ran(A, b) = ran(A) = m. Despues de un posible reordenamiento de
las columnas de A, se tiene A = [B N ], en donde B es una matriz invertible de
orden m×m y N es una matriz de orden m× (n−m).
Esta descomposicion de la matriz A genera una descomposicion de x en x =
xB
xN
.
Ası Ax = b queda expresado como
BxB +NxN = b (2.1)
Multiplicando a (2.1) por B−1, puesto que B es invertible, se obtiene
xB = B−1b+B−1NxN (2.2)
Entonces para cualquier xN y xB dado en (2.2) se tiene que x =
xB
xN
satisface
Ax = b. Particularmente, si xN = 0 y xB = B−1b se tiene que x =
B−1b
0
tambien satisface Ax = b.
Definicion 2.1 La solucion x =
xB
xN
del sistema Ax = b, en donde
xB = B−1b y xN = 0,
se denomina solucion basica del sistema. Si xB = B−1b ≥ 0, entonces el vector
x =
B−1b
0
se denomina solucion basica factible.
15
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
La matriz B se denomina matriz basica (o simplemente base) y N se denomima
matriz no basica. Las componentes de xB se denominan variables basicas y las com-
ponentes de xN se denominan variables no basicas.
Definicion 2.2 Si xB = B−1b > 0, entonces x =
B−1b
0
se denomina solucion
basica factible no degenerada.
Definicion 2.3 Si por lo menos una componente de xB = B−1b es igual a cero,
entonces x =
B−1b
0
se denomina solucion basica factible degenerada.
Teorema 2.1 (Condiciones de optimalidad de la programacion lineal)
Considere el siguiente problema de programacion lineal
min cTx
s.a. Ax = b
x ≥ 0,
(2.3)
donde c ∈ Rn, A es una matriz de m × n con rango m y b ∈ Rm. Supongamos que
la region factible F = {x ∈ Rn : Ax = b, x ≥ 0} es no vacıa y sean x1, x2, . . . , xk los
puntos extremos y d1, d2, . . . , dl las direcciones extremas de la region factible F . Una
condicion necesaria y suficiente para la existencia de una solucion optima finita es
que cTdj ≥ 0, ∀ j = 1, . . . , l. Si este es el caso, entonces existe un punto extremo
xj que resuelve el problema.
Prueba.
Por el teorema de representacion se tiene que todo elemento de F se puede expresar
como
x =k∑i=1
λjxj +l∑
j=1
µjdj (2.4)
k∑i=1
λi = 1
λi ≥ 0, ∀ i = 1, . . . , k
µj ≥ 0, ∀ j = 1, . . . , k,
16
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
reemplazando (2.4) en el problema (2.3) se tiene
mink∑i=1
(cTxj)λj +l∑
j=1
(cTdj)µj
s.a.k∑i=1
λi = 1
λi ≥ 0, ∀ i = 1, . . . , k
µj ≥ 0, ∀ j = 1, . . . , l.
⇒] Si existe una solucion optima finita para el problema (2.3). Se probara que
cTdj ≥ 0 ∀ j = 1, . . . , l.
En efecto. Supongamos que cTdj � 0, para algun j; es decir, existe un j0 tal que
cTdj0 < 0.
Como dj0 es una direccion extrema, entonces x = x0+µdj0 ∈ F, ∀x0 ∈ F , ∀µ > 0.
Ası cTx = cTx0 + µcTdj0 , luego
lımµ→∞
cTx = lımµ→∞
(cTx0 + µcTdj0 )
= cTx0 + cTdj0 lımµ→∞
µ
= −∞,
puesto que cTdj0 < 0.
Entonces cTx no esta acotada inferiormente, lo cual contradice la hipotesis.
⇐] Si cTdj ≥ 0, ∀ j = 1, . . . , l. Probar que existe una solucion optima finita para el
problema (2.3); es decir, ∃x∗ ∈ F : cTx∗ ≤ cTx, ∀x ∈ FEn efecto. Sean µj ∈ R arbitrarios tal que µj ≥ 0, ∀ j = 1, . . . , l,
entoncesl∑
j=1
µjcTdj ≥ 0.
Sumandok∑j=1
λjcTxj en ambos miembros de la ultima desigualdad se tiene:
cTx =k∑j=1
λjcTxj +
l∑j=1
µjcTdj ≥
k∑j=1
λjcTxj. (2.5)
Sea x∗ = xj0 tal que cTx∗ = cTxj0 = mın1≤j≤k
cTxj.
De (2.5) se tiene:
cTx ≥k∑j=1
λjcTxj ≥
k∑j=1
λjcTx∗ = cTx∗
k∑j=1
λj = cTx∗.
17
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Ası cTx∗ ≤ cTx, ∀x ∈ F , donde x∗ = xj0 es un punto extremo.
Por lo tanto, existe una solucion optima finita para el problema (2.3) y ademas es
un punto extremo. 2
2.1. Mejoramiento de una solucion basica factible
Obtener todas las soluciones basicas factibles para evaluarlas en la funcion objetivo
y luego compararlas para determinar la solucion optima no es una tarea que se re-
comiende en la practica. El metodo simplex proporciona una estrategia que permite
mejorar, si es posible, una solucion basica factible dada.
Consideremos el problena de programacion lineal
min f(x)
s.a. Ax = b
x ≥ 0,
(2.6)
donde A es una matriz con rango m.
Suponga que se tiene una solucion basica factible
B−1b
0
cuyo valor objetivo z0
esta dado por
z0 = c
B−1b
0
=[cB cN
] B−1b
0
= cBB−1b. (2.7)
Sea
xB
xN
, donde xB y xN denotan, respectivamente, al conjunto de variables basi-
cas y al conjunto de variables no basicas para la base dada. Entonces, la factibilidad
requiere que
xB ≥ 0 , xN ≥ 0,
y
b = Ax = BxB +NxN , (2.8)
18
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
como B es invertible, entonces multiplicando (2.8) por B−1 se tiene:
xB = B−1b−B−1NxN
= B−1b−∑j∈R
B−1ajxj (2.9)
= b−∑j∈R
yjxj, (2.10)
donde R es el conjunto actual de ındices de las variables no basicas.
De las ecuaciones (2.7) y (2.9) y denotando como z al valor de la funcion objetivo,
se obtiene:
z = cTx =[cB cN
] xB
xN
,= cBxB + cNxN ,
= cB
(B−1b−
∑j∈R
B−1ajxj
)+ cNxN ,
= cBB−1b−
∑j∈R
cBB−1ajxj +
∑j∈R
cjxj,
= z0 −∑j∈R
(cBB−1aj − cj)xj.
Entonces
z = z0 −∑j∈R
(zj − cj)xj, (2.11)
donde zj = cBB−1aj para toda variable no basica y a zj − cj se le llama costo
reducido de xj.
La ecuacion (2.11) sirve como guıa para mejorar una solucion basica factible actual.
Debido a que como se desea minimizar z, conviene aumentar el valor de xj desde
su nivel presente igual a cero, siempre que zj − cj > 0. Si zj − cj ≤ 0, ∀ j ∈ R,
entonces xj = 0, ∀ j ∈ R y xB = b es optimo para (2.6), puesto que, de (2.11) se
tendrıa que z0 ≤ z.
Teniendo esto en cuenta se puede aplicar la siguiente regla:
Se fijan todos los valores de las variables no basicas xj en cero, excepto una de ellas;
supongamos que es la variable no basica xk, cuyo coeficiente zk−ck es el mas positivo
de todos los zj − cj. Por lo tanto, de (2.11) se tiene que el nuevo valor de la funcion
objetivo estarıa dado por
z = z0 − (zk − ck)xk. (2.12)
19
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Debido a que zk−ck > 0 y se desea minimizar z, es conveniente aumentar el valor de
xk tanto como sea posible. Conforme xk crece, las variables basicas deben modificarse
de acuerdo a la ecuacion (2.10) obteniendose ası:
xB = b− ykxk , donde yk = B−1ak
xB1
...
xBr
...
xBm
=
b1...
br...
bm
−
y1k...
yrk...
ymk
xk. (2.13)
Si yik ≤ 0, entonces xBicrece cuando xk crece y ası xBi
continua siendo no negativo.
Si yik > 0, entonces xBidecrece cuando xk crece. A fin de satisfacer la no negatividad
de las variables basicas, xk se incrementa hasta el primer punto en que una variable
basica xBr se hace cero. Al analizar la ecuacion (2.13), resulta entonces que la primera
variable basica que se vuelve cero corresponde al mınimo debiyik
para yik positivo.
Con mas precision, es posible incrementar xk hasta
xk =bryrk
= mın1≤i≤m
{biyik
: yik > 0
}. (2.14)
Cuando no hay degeneracion, br > 0 y entonces xk =bryrk
> 0. Por la ecuacion
(2.12) y con el hecho de que zk−ck > 0, se concluye que z < z0 y la funcion objetivo
mejora estrictamente.
Cuando xk crece desde el nivel cero hastabryrk
se obtiene una nueva solucion basica
factible. Al sustituir xk =bryrk
en la ecuacion (2.13) se obtiene el siguiente punto:xBi
= bi −yikyrk
br , ∀ i = 1, . . . ,m
xk =bryrk
Todas las demas xj son cero .
(2.15)
Con base en la ecuacion (2.15), xBr = 0 y entonces cuando muchom variables son po-
sitivas. Las columnas correspondientes enA son aB1 , aB2 , . . . , aBr−1 , ak, aBr+1 , . . . , aBm .
Observe que estas columnas son linealmente independientes, ya que yrk 6= 0. Por con-
siguiente, el punto dado por la ecuacion (2.15) es una solucion basica factible.
En resumen, se ha descrito algebraicamente una iteracion; es decir, el proceso de
20
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
transformacion de una base a una base adyacente. Lo anterior se lleva a cabo incre-
mentando el valor de una variable no basica xk con zk − ck positivo y ajustando las
variables basicas actuales. En el proceso, la variable xBr se hace cero. Por tanto, la
variable xk entra a la base y xBr sale de la base. Cuando no hay degeneracion, el va-
lor de la funcion objetivo decrece estrictamente y ası las soluciones basicas factibles
generadas son distintas. Dado que solo existe un nunero finito de soluciones basicas
factibles, entonces el procediemiento debe terminar en un numero finito de pasos.
2.2. Optimalidad y no acotamiento
El procedimiento de introducir una variable en la base y sacar otra variable de la
base conduce al proceso de cambio de una base a una base adyacente. Los criterios
para que una variable pueda entrar y salir de la base son los siguientes:
1. Entrada: xk puede entrar si zk − ck > 0.
2. Salida: xB puede salir si
xk =bryrk
= mın1≤i≤m
{biyik
: yik > 0
}Ahora surgen dos preguntas:
i. ¿ Que ocurre si todas las variables no basicas xj tienen zj − cj ≤ 0 ?. En este
caso, se ha obtenido el optimo.
ii. ¿ Que ocurre si zj − cj > 0, de modo que xk es elegible para entrar a la base,
pero no es posible encontrar componentes positivas yik, i = 1, . . . ,m; es decir,
yk ≤ 0 ? En este caso, el valor optimo de la funcion objetivo es no acotado; es
decir,
f(x) = min cTx = −∞.
Ahora veremos con mas detalle cada uno de los casos.
21
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
2.3. Terminacion con una solucion optima
Consideremos el siguiente problema en donde A es una matriz de orden m× n con
rango m min z = cTx
s.a: Ax ≤ b
x ≥ 0.
Suponga que x∗ es una solucion basica factible con base B; es decir, x∗ =
B−1b
0
y sea z∗ = cTx∗ = cBB
−1b el valor de la funcion objetivo en x∗.
Ademas suponga que zj−cj ≤ 0, ∀ j ∈ R, de modo que ninguna variable no basica
es elegible para entrar a la base. Sea x cualquier solucion basica factible con valor
objetivo z. Entonces por la ecuacion (2.11) se tiene
z∗ − z =∑j∈R
(zj − cj)xj. (2.16)
Como zj − cj ≤ 0 y xj ≥ 0, ∀ j ∈ R, entonces z∗ ≤ z y por lo tanto x∗ es una
solucion basica factible optima.
2.4. Soluciones optimas unicas y alternativas
Es posible obtener mas informacion de la ecuacion (2.16).
� Si zj − cj < 0, ∀ j ∈ R, entonces la solucion optima actual es unica. Para ver lo
anterior, sea x cualquier solucion factible distinta de x∗. Luego, existe por lo menos
una componente no basica xj que es positiva, por que si todas las componentes
no basicas son ceros, entonces x no podra ser distinta de x∗. Ası de la ecuacion
(2.16) se tiene que z∗ < z. Y por consiguiente, x∗ es la unica solucion optima.
� Si zj− cj ≤ 0, ∀ j ∈ R, pero zk− ck = 0 para al menos una variable no basica xk.
Al incrementear xk (y suponiendo que no hay degeneracion), se obtienen puntos
distintos de x∗ pero que tienen el mismo valor objetivo. El proceso se incrementar
xk desde el nivel cero hasta que es bloqueada por una variable basica genera una
infinidad de soluciones optimas alternativas.
22
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
No acotamiento
Suponga que se tiene una solucion basica factible del sistema Ax = b, x ≥ 0 con
valor objetivo z0.
Ahora se considerara el caso en que se encuentra una variable no basica xk, con
zk − ck > 0 y yk ≤ 0. De la ecuacion (2.11) se tiene
z = z0 − (zk − ck)xk.
Como se desea minimizar el objetivo z y dado que zj− cj > 0, conviene incrementar
indefinidamente el valor de xk lo cual hara que z se vaya a −∞. La razon por la
cual no fue posible hacer esto antes es que el incremento en el valor de xk estaba
bloqueado por una variable basica; es decir, le impone un tope a xk. Recordemos
que de la ecuacion (2.13) se tiene
xB = B−1b− ykxk
de modo que, como yk ≤ 0, entonces xk se puede incrementar indefinidamente sin
que ninguna variable basica se haga negativa.
En resumen, si se tiene una solucion basica factible con zk − ck > 0 para alguna
variable no basica xk y ademas yk ≤ 0, entonces el valor optimo de la funcion
objetivo es no acotado; es decir,
f(x) = min cTx = −∞.
Este valor se obtiene al incrementar xk indefinidamente y ajustar los valores de las
variables basicas actuales; esto, a su vez, es equivalente a efectuar un desplazamiento
a lo largo del rayo
B−1b
0...
0...
0
+ xk
−yk0...
1...
0
, xk ≥ 0
=
B−1b
0
+ xk
−ykek
, xk ≥ 0
.
Observemos que el vertice del rayo es la solucion basica factible actual
B−1b
0
y
la direccion del rayo es d =
−ykek
y ademas es una direccion extrema.
23
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Notar que
cTd =[cB cN
] −ykek
= −cByk + ck
= −zk + ck.
Como zk − ck > 0, entonces cTd < 0, que es la condicion necesaria y suficiente para
no acotamiento.
2.5. El metodo simplex
Dadas una solucion basica factible y su base correspondiente, es posible mejorar la
solucion si zk−ck > 0 para alguna variable no basica xk, o bien, el proceso se detiene
en un punto optimo si zj − cj ≤ 0 para todas variables no basicas. Si zk − ck > 0 y
el vector yk contiene por lo menos una componente positiva, entonces el incremento
de xk sera bloqueado por una de las variables basicas presentes, la cual se vuelve
cero y sale de la base. Por otra parte, si zk − ck > 0 y yk ≤ 0 entonces xk se puede
incrementar indefinidamente y la solucion optima es no acotada con valor (−∞).
Esto precisamente es lo que hace el metodo simplex. [3]
2.5.1. El metodo simplex en formato de tableau
(Problema de minimizacion)
PASO INICIAL
Se encuentra una solucion basica factible inicial con base B y se forma el siguiente
tableau inicial.
z xB xN LD
z 1 0 cBB−1N− cN cBb
xB 0 I B−1N b
PASO PRINCIPAL
Sea zk−ck = max{zj−cj : j ∈ R}. Si zk−ck ≤ 0, entonces el proceso ha terminado;
24
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
la solucion actual es optima. En caso contrario, se analiza yk. Si yk ≤ 0, entonces
el proceso ha terminado; la solucion optima es no acotada. Si yk � 0, entonces el
ındice r se determina como sigue:
bryrk
= min1≤i≤m{ biyik : yik > 0}
El tableau se actualiza pivoteando sobre yrk; se actualizan las variables basicas y no
basicas, en donde xk entra a la base y xBr sale de la base. Se repite el paso principal.
2.5.2. El metodo simplex para variables acotadas
En casi todos lo problemas practicos las variables suelen estar acotadas. Una variable
tıpica xj esta acotada inferiormente por lj y superiormente por uj, donde lj < uj.
Si se denotan por l y u los vectores cota inferior y cota superior respectivamente,
entonces se obtiene el siguiente programa lineal con variables acotadas.
(PLV A)
min cTx
s.a: Ax = b
l ≤ x ≤ u,
Definicion 2.4 Considere el sistema Ax = b y l ≤ x ≤ u, en donde A es una matriz
de m × n con rango m. La solucion x de las ecuaciones Ax = b es una solucion
basica de este sistema si A puede descomponerse en [B N1 N2], en donde la
matriz (cuadrada) B es de rango m de modo que con x descompuesto de manera
correspondiente en (xB, xN1 , xN2) se tiene xN1 = lN1, xN2 = uN2, y por consiguiente,
xB = B−1b − B−1N1lN1 − B−1N2uN2. Ademas, si lB ≤ xB ≤ uB , entonces se dice
que x es una solucion basica factible. La matriz B se denomina base, xB son las
variables basicas, y xN1 y xN2 son las variables no basicas en sus lımites inferior y
superior, respectivamente. Se dice que la particion [B N1 N2] correspondiente a
una solucion basica (factible) es una particion basica (factible).
El vector c tambien se descompone en [cB, cN1 , cN2 ]
25
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Con estas definiciones, las condiciones de optimalidad cambian y el metodo simplex
en forma de tableau se trabaja como sigue:
PASO INICIAL
Se encuentra una solucion basica inicial. Sea xB el vector de variables basicas , y
sean xN1 y xN2 las variables no basicas en sus cotas inferior y superior, respectiva-
mente. Luego se forma el siguiente tableau en el que
z = cBB−1b+ (cN1 − cBB−1N1)lN1 + (cN2 − cBB−1N2)uN2 ; y
b = B−1b − B−1N1lN1 − B−1N2uN2 ; son los valores actuales de z y xB, respectiva-
mente.
z xB xN1 xN2 LD
z 1 0 cBB−1N1 − cN1 cBB−1N2 − cN2 z
xB 0 I B−1N1 B−1N2 b
PASO PRINCIPAL
Sean R1 y R2 los conjuntos de ındices de variables no basicas en su cota inferior y
superior, respectivamente. Sea zj = cBB−1aj ∀j ∈ R1 ∪R2, donde aj es la columna
no basica de A correspondiente al ındice j.
1.- Si zj − cj ≤ 0 ∀j ∈ R1 y zj − cj ≥ 0 ∀j ∈ R2, entonces la solucion actual
es optima. Caso contrario determinar ındice k como el ındice donde se alcanza el
siguiente maximo: max{maxjεR1{zj − cj},maxjεR2{cj − zj}}.Determinar yk = B−1ak, donde ak es la columna de A correspondiente al ındice k.
Si kεR1, ir al paso 2
Si kεR2, ir al paso 3.
2.- Si xk = lk, incrementa hasta lk +4k donde 4k = min(γ1, γ2, uk − lk).
γ1 =
min1≤i≤m{bi−lBi
yik: yik > 0} =
br−lBr
yrk, si yk � 0
∞ ... ... ... ... si yk ≤ 0
γ2 =
min1≤i≤m{uBi−bi
−yik: yik < 0} =
uBr−br−yrk
, si yk � 0
∞ ... ... ... ... si yk ≥ 0
26
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Si 4k = ∞, entonces el proceso se detiene y el valor de la solucion optima es no
acotado. En caso contrario, se actualiza el tableau para que muestre la nueva solucion
basica factible.
Si 4k = uk − lk entonces no se hace ningun cambio de la base de trabajo y xk sigue
siendo no basica, pero esta vez en su cota superior. Solo se cambia la columna LD
para reflejar el nuevo valor de la funcion objetivo y los nuevos valores de las variables
basicas. z se reemplaza por:
z = z − (zk − ck)4k. (2.17)
b se reemplaza por:
xB = b− yk4k (2.18)
Por otra parte , si 4k esta dado por γ1 o por γ2, entonces xk entra a la base y xBk
sale de la base. El tableau, excepto la columna LD, se actualiza pivotendo en yrk. La
columna LD se actualiza por separado segun las ecuaciones (2.17) y (2.18), excepto
que la r-esima componente del nuevo vector b se reemplaza por lk +4k que es el
valor de xk el cual acaba de entrar a la base.
Se repite el paso 1.
3.- Si xk = uk, decrece hasta uk −4k donde 4k = min(γ1, γ2, uk − lk).
γ1 =
min1≤i≤m{bi−lBi
−yik: yik < 0} =
br−lBr
−yrk, si yk � 0
∞ ... ... ... ... si yk ≥ 0
γ2 =
min1≤i≤m{uBi−bi
yik: yik > 0} =
uBr−bryrk
, si yk � 0
∞ ... ... ... ... si yk ≤ 0
Si 4k = ∞, entonces el proceso se detiene y el valor de la solucion optima es no
acotado. En caso contrario, se actualiza el tableau para que muestre la nueva solucion
basica factible.
Si 4k = uk − lk entonces no se hace ningun cambio de la base de trabajo y xk sigue
siendo no basica, pero esta vez en su cota inferior. Solo se cambia la columna LD
para reflejar el nuevo valor de la funcion objetivo y los nuevos valores de las variables
27
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
basicas. z se reemplaza por:
z = z + (zk − ck)4k. (2.19)
b se reemplaza por:
xB = b+ yk4k (2.20)
Por otra parte , si 4k esta dado por γ1 o por γ2, entonces xk entra a la base y xBk
sale de la base. El tableau, excepto la columna LD, se actualiza pivotendo en yrk. La
columna LD se actualiza por separado segun las ecuaciones (2.19) y (2.20), excepto
que la r-esima componente del nuevo vector b se reemplaza por uk − 4k que es el
valor de xk el cual acaba de entrar a la base.
Se repite el paso 1. 1
1Ver un ejemplo en [2] pagina 255
28
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Capıtulo 3
Metodo dual simplex
3.1. Planteamiento del problema dual
Por cada problema lineal que se resuelve existe asociado otro problema lineal que se
resuelve simultaneamente, denominado problema dual.
Forma canonica de dualidad
Suponga que el programa lineal primal esta dado en la forma:
min cTx
s.a. Ax ≥ b
x ≥ 0
(3.1)
Entonces el programa lineal dual se define como:
max bTw
s.a. ATw ≤ c
w ≥ 0
(3.2)
29
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Relaciones entre los problemas primal y dual
PRIMAL → DUAL
maximizacion 1 minimizacion
resticcion i : ≤ 2 variable i ≥ 0
resticcion i : = 3 variable i irresctricta
resticcion i : ≥ 4 variable i ≤ 0
variable i ≥ 0 5 restriccion i : ≥
variable i irrestricta 6 restriccion i : =
variable i ≤ 0 7 restriccion i : ≤
Dual ← PRIMAL
3.2. Metodo dual simplex en formato de tableau
(Problema de minimizacion)
PASO INICIAL
Encontrar una base B inicial del primal de modo que sea factible para el dual (con-
diciones de optimalidad primal) es decir: zj − cj = cBB−1aj − cj ≤ 0 para todo j.
Luego se forma el siguiente tableau:
z xB xN LD
z 1 0 cBB−1N− cN cBb
xB 0 I B−1N b
PASO PRINCIPAL
1. Si b = B−1b ≥ 0 el proceso termina; la solucion es optima. En caso contrario,
elegir el renglon pivote r con br < 0; por ejemplo, br = min{bi}.2. Si yrj ≥ 0 para todo j, el proceso termina; el dual es no acotado y el primal es no
factible. En caso contrario, elegir la columna pivote k mediante la siguiente prueba
de la razon mınima:
zk−ckyrk
= minj{ zj−cjyrj: yrj < 0}
3. Pivotear en yrk y volver al paso 1.
30
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
3.3. Problema general de programacion lineal
Consideremos el problena de programacion lineal (PL) de la forma
min z = ctx
s.a. Ax = b
l ≤ x ≤ u,
(3.3)
donde A es una matriz de m × n con rango m, y m < n. las coordenadas de los
vectores l y u pueden ser menos o mas infinito, respectivamente. Sea J = {1, ...n}el conjunto de los ındices columna de A. Denotamos por Jf = {j\j ∈ J, lj =
−∞∧ uj = +∞} el conjunto de las variables primales libres (vpl), por Ju = {j\j ∈J, lj = −∞∧uj < +∞} y J l = {j\j ∈ J, lj > −∞∧uj = +∞} los conjuntos de las
variables primales con una cota finita y por J b = {j\j ∈ J, lj > −∞∧uj < +∞} el
conjunto de variables acotadas inferior y superiormente. Llamaremos a las variables
en J b variables primales encajadas (vpe). Si para alguna variable se tiene lj = uj = a
para algun a ∈ R, entonces la llamaremos variable primal fija (vpf).
Aplicando al problema ( 3.3) la definicion de problema dual, obtenemos lo siguiente:
max z = btπ +∑
j∈J l∪Jb ljνj +∑
j∈Ju∪Jb ujωj
s.a. Atπ + ν + ω = c
νj = 0, ωj = 0, ∀j ∈ Jf
νj ≥ 0, ωj = 0, ∀j ∈ J l
νj = 0, ωj ≤ 0, ∀j ∈ Ju
νj ≥ 0, ωj ≤ 0, ∀j ∈ J b
π irrestricta,
(3.4)
donde π ∈ Rm , ν, ω ∈ Rn. Se denomina a ν y ω como variables duales de holgura
(vdh)
Definicion 3.1 Una base β = {k1, ..., km} es un subconjunto ordenado de J , tal
que la submatriz Aβ es no singular. El conjunto de ındices de columnas no basicas
es denotado por η = J \ β.
Una solucion primal basica (pbs) para una base β es construida fijando cada variable
primal no basica xj, j ∈ η a una de sus cotas finitas ( si es variable libre se fija en
cero) y calcular las variables primales basicas como:
31
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
xβ = B−1(b− Aηxη).
Definicion 3.2 Una base β es primal factible si todas las variables primales basicas
se encuentran dentro de sus respectivas cotas, es decir, lj ≤ xj ≤ uj, ∀j ∈ β.
Una solucion dual basica (dbs) para una base β es construida calculando los multi-
plicadores duales π = cβB−1 y los costos reducidos dη = cη−Atηπ y fijando las otras
variables de la siguiente forma:
νj = dj, ωj = 0, si j ∈ η con xj = lj y
νj = 0, ωj = dj, si j ∈ η con xj = uj.
Si j ∈ η y j ∈ Jf ( si las variables primales asociadas son no basicas y libres),
entonces
νj = dj, ωj = 0, si dj ≥ 0 y
νj = 0, ωj = dj, si dj < 0 .
Definicion 3.3 Una base β es dual factible si las (vdh) ν y ω satisfacen sus respec-
tivas restricciones (sus cotas cero) en el problema (3.4), es decir, si se cumple:
dj ≥ 0, si j ∈ η con xj = lj,
dj ≤ 0, si j ∈ η con xj = uj y
dj = 0, si xj es variable libre.
La infactibilidad dual solo puede ocurrir en los ındices de columnas asociadas
con variables primales no basicas, pues π es irrestricto y se obtiene a partir de
las variables primales basicas.
En particular las (vdh) asociadas con variables primales no basicas libres so-
lamente son factibles cuando su correspondiente costo reducido dj vale cero.
Las (vdh) asociadas con variables primales no basicas fijas siempre son facti-
bles.
La infactibilidad dual de (vdh) asociadas con variables primales no basicas
encajadas xj puede convertirse en factibilidad cambiando xj a su otra cota
finita. De este modo si se realiza tal cambio entonces las variables primales
basicas deben ser actualizadas.
32
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
3.4. Algoritmo dual simplex para problemas ge-
nerales
El algoritmo dual-simplex se mueve en cada iteracion, desde una solucion dual basica,
para una base dual factible, hacia una solucion que mejore la funcion objetivo, hasta
alcanzar factibilidad, es decir hasta que se logre obtener tambien una base primal
factible, o bien concluir que el problema dual es no acotado y que el primal es no
factible. ([3] )
El algoritmo es el siguiente:
1. Calcular la representacion factorizada (LU) de B−1, y calcular: xβ, π, y dη (de
la forma antes vista)
2. Determinar p ∈ β con p = kr y xp infactible (primal infactible).
Si xp < lp, hacer δ = xp − lp.Si xp > up, hacer δ = xp − up.Si xβ es factible, entonces IR AL PASO (9).
3. Calcular ρr = etrB−1. Donde er es el r-esimo vector canonico.
4. Calcular αr = ρrAη.
5. Si xp < lp, hacer αr = −αr, caso contrario αr = αr.
Sea F = {j ∈ η : ( j ∈ Jf∧αrj 6= 0) ∨( xj = lj∧αrj > 0) ∨( xj = uj∧αrj < 0) }.Si F = ∅, entonces el problema dual es no acotado. IR AL PASO (9);
caso contrario, determinar q tal que | dqαrq| = min{| dj
αrj| : j ∈ F} y hacer θD = dq
αrq.
6. Calcular αq = B−1aq.
7. Actualizar Z : Z := Z + θDδ.
Actualizar x : Calcular θP = δαrq, y hacer :
xβ := xβ − θPαq y xq := xq + θP .
Actualizar dη: dj := θDαrj para j ∈ η y dp := −θD.
Actualizar β y η: β := ( β \ {p}) ∪ {q} y
η := ( η \ {q}) ∪ {p}. Actualizar la representacion factorizada (LU) de B−1.
8. IR AL PASO (1).
9. FINALIZAR.
33
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Capıtulo 4
Metodos de inicializacion del
algoritmo dual simplex
El metodo dual simplex comienza con una base dual factible y cambia la base mien-
tras la funcion objetivo dual puede ser mejorada y el problema no se convierta en
dual no acotado.
4.1. Metodo de modificacion de costos
La idea basica de este metodo es hacer que la base inicial sea dual factible modi-
ficando la formulacion del problema y restaurandolo mientras ejecuta el algoritmo
dual simplex.
Dada una base inicial β con η = J \ β, las (vdh) asociadas con (vpe) son hechas
factibles moviendo sus cotas primales; es decir si la variable esta en su cota inferior
son cambiadas a su cota superior, o viceversa. Luego, para cada (vdh) infactible
restante se cambian los coeficientes de costo de su correspondiente variable primal
xj con j ∈ η de la siguiente manera: cj = cj − djEsto conduce a un nuevo costo reducido dj = cj − πtaj = cj − dj − πtaj = 0, el
cual es factible para el dual. Cuando el algoritmo dual simplex termina con una
base primal factible, los costos originales son restaurados. Si la base pasa a ser dual
infactible mediante estas operaciones, entonces pasamos a usar el algoritmo primal
simplex. Este metodo es implementado en el codigo de programacion lineal SoPlex
el cual fue desarrollado por Wuderling R. [4]
34
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
4.2. Metodo de reducir las infactibilidades o meto-
do de Ping-Qi Pan
La idea basica de este metodo es remover por lo menos una infactibilidad dual
en cada iteracion, pero no garantiza que ninguna nueva infactibilidad sea creada.
Este riesgo es minimizado solamente por una apropiada seleccion de variables de
salida. Antes de llamar al metodo de Pan se debe hacer que las variables duales de
holgura asociadas con (vpe) no basicas, sean factibles, moviendo sus cotas primales,
es decir si se encuentran en su cota inferior, cambiarlas a su cota superior; luego no
se consideran mas en el transcurso del algoritmo.
El metodo es el siguiente:
1. Sea el conjunto de ındices asociados con (vdh) infactibles Q = {j\j ∈ η, ( dj <
0 ∧ xj = lj) ∨ ( dj > 0 ∧ xj = uj) ∨ ( |dj| > 0 ∧ j ∈ Jf , xj = 0) } .
Si Q es vacıo, entonces la base es dual factible, ir al paso 5,
caso contrario, seleccionar un ındice de entrada q ∈ Q mediante alguna regla.
Usaremos la regla de Dantzig: Hallar q tal que |dq| = max{|dj|\j ∈ Q}.
2. Calcular la columna pivote transformada αq = B−1aq.
Si dq < 0, hacer αq := −αq.
3. Determinar el ındice de salida p ∈ β tal que la p-esima (vdh) sea factible
despues del cambio de base.
Sea I = {i\i ∈ {1, ...,m}, j = ki∧( lj > −∞∧αiq < 0) ∨( uj <∞∧αiq > 0) }.Si I es vacıo, entonces el problema es dual infactible, PARAR,
caso contrario, seleccionar p tal que |αpq | = {αiq\i ∈ I} y kr = p.
Calcular θD = dqαrq.
4. Realizar el cambio de base del mismo modo que en el algoritmo dual- simplex
(PASO 7). Para actualizar dη, la fila pivote transformada debe ser calculada
avanzando segun los pasos PASO 3 y PASO 4 de algoritmo dual -simplex.
Ir al paso 1.
5. Llamar al algoritmo dual- simplex.
Nada garantiza una reduccion monotona de la suma de infactibilidades duales,
tampoco del numero de infactibilidades duales. Pero podemos confirmar los
35
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
resultados de Pan en [8] y [9].
4.3. Metodo de minimizar la suma de infactibili-
dades duales
El objetivo de encontrar una base que proporcione una mınima suma de infactibili-
dades duales puede ser formulada como un problema de (PL) auxiliar, el cual junto
con el problema principal se resuelven por el algoritmo dual simplex. La idea basica
es directamente aplicar el algoritmo dual-simplex al problema auxiliar, esa sera la
tecnica de inicializacion.
Las variables duales de holgura asociadas a (vpe) ( j ∈ J b) se convierten en factibles
moviendo las cotas primales. Luego podemos formular el problema de encontrar una
base con una suma mınima de infactibilidades como sigue:
max z0 =∑
j∈J l∪Jf , dj<0 dj −∑
j∈Ju∪Jf , dj>0 dj
s.a. atjπ + dj = cj, ∀j ∈ J l ∪ Ju ∪ Jf .(4.1)
El problema ( 4.1) es equivalente a la siguiente formulacion:
max z0 =∑
j∈J l∪Jf ωj −∑
j∈Ju∪Jf νj
s.a. atjπ + νj + ωj = cj, ∀j ∈ J l ∪ Ju ∪ Jf .νj ≥ 0,
ωj ≤ 0.
(4.2)
El dual de problema ( 4.2) es:
min z0 =∑
j∈J l∪Ju∪Jf cjxj
s.a.∑
j∈J l∪Ju∪Jf ajxj = 0,
−1 ≤ xj ≤ 0, ∀j ∈ Ju,0 ≤ xj ≤ 1, ∀j ∈ J l,−1 ≤ xj ≤ 1∀j ∈ Jf .
(4.3)
El problema (4.3) es una version reducida del problema original (3.3) en el
sentido que consiste de un subconjunto del conjunto original de columnas y
las cotas junto con el lado derecho (vector recursos) son cambiados.
36
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Todas las variables del problema (4.3 ) estan encajadas, entonces cualquier
base dada puede ser hecha factible moviendo las cotas primales y se puede
aplicar el algoritmo dual -simplex directamente.
Este metodo es implementado de la siguiente manera:
1. Marcar los ındices de variables encajadas y fijas, como ındices que no seran
seleccionados.
2. Cambiar las cotas del resto de variables y el lado derecho del vector de recursos
de acuerdo al problema (4.3).
3. Empezar con una base inicial y hacerla dual factible moviendo las variables
no basicas entre sus cotas primales.
4. Ejecutar el algoritmo dual -simplex al problema (4.3).
5. Si z0 < 0, entonces el problema original (3.3) es dual infactible, PARAR.
6. Si z0 = 0, entonces la base actual es dual factible para el problema (3.3).
7. Desenmarcar los ındices relacionados a variables encajadas y fijas, y restaurar
las cotas originales y el lado derecho del vector de recursos.
8. Ejecutar el algoritmo dual- simplex con el problema (3.3).
4.4. Implementacion en matlab
Problemas de prueba (Test problems)
Los problemas de prueba para programacion lineal a gran escala podemos encontrar-
los en diferentes bases de datos disponibles en internet, los cuales estan archivados
en formato MPS (Mathematical Programming System). El formato MPS es columna
orientado, es decir al visualizar la matriz de restricciones en este formato primero
aparecen las entradas de la primera columna y continua hasta las entradas de la
ultima columna de la matriz, ademas la primera fila de esta matriz corresponde a la
funcion objetivo; al final estan el vector columna de recursos y las cotas inferiores y
superiores de cada variable, que tambien son posibles de guardar en este formato.
Para este trabajo se ha seleccionado un problema de la librerıa MIPLIB 2003 test
problems: aflow40b; al cual se dio solucion con el metodo expuesto anteriormente.
37
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Programacion en matlab
Los archivos de los problemas de prueba con extension .mps, para ser usados en
Matlab, necesitan de una funcion especial para su lectura. Dicha funcion es: READMPS;
la cual arroja una estructura de datos del problema (matrices y vectores), de este
modo se puede guardar estos datos del workspace de matlab y luego ser usados en los
algoritmos programados. READMPS aplicada al problema aflow40b resulto en una
estructura la cual se ha nombrado como “problem”, mostrando la siguiente ventana:
Figura 4.1: Estructura de aflow40b
Otras funciones que se usaron de la librerıa de Matlab fueron:
- rref(E).- para encontrar columnas basicas de la matriz E.
- inv(B)
- norm(A)
Los algoritmos de inicializacion fueron programados en Matlab y su codificacion se
encuentra en el apendice A, al final del presente trabajo.
38
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Antes de aplicar los algoritmos de inicializacion en problemas de gran escala, se
probo con problemas de pocas variables 1 los cuales son introducidos manualmente
en su forma estandar al programa de Matlab; luego se aplico los tres metodos de
inicializacion en cada problema y se obtuvo el valor objetivo. Por ejemplo:
Problema 01:
(P01)
min −2x1 − 4x2 − x3
s.a: 2x1 + x2 + x3 ≤ 10
x1 + x2 − x3 ≤ 4
0 ≤ x1 ≤ 4
0 ≤ x2 ≤ 6
1 ≤ x3 ≤ 4
El valor objetivo es Z = −28. Veamos como funciona con los tres metodos de
inicializacion.
o Con el metodo modificacion de costos:
1Ejemplo 5.6 y Ejercicios 5.10 y 5.11 de [3] paginas 255 y 270
39
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Figura 4.2: Solucion de (P01) con modificacion de costos
o Con el metodo de P.Q. Pan
40
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Figura 4.3: Solucion de (P01) con base inicial segun PQ-Pan
o Con el metodo de minimizar la suma de infactibilidades
41
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Figura 4.4: Solucion de (P01) con base inicial segun el metodo minimizar suma de infactibilidades
Se obtienen soluciones iniciales diferentes con cada uno de los metodos, pero al final
se llega al mismo valor objetivo Z = −28.
Problema 02:
(P02)
min −2x1 − x2 − 3x3
s.a: 3x1 + x2 + x3 ≤ 12
−x1 + x2 ≤ 5
x2 + 2x3 ≤ 8
0 ≤ x1 ≤ 3
0 ≤ x2 ≤ 6
0 ≤ x3 ≤ 4
El valor objetivo de este problema es Z = −17,333. Sabiendo que el metodo de
modificacion de costos podrıa generar una base dual infactible pero factible primal,
si esto sucede debemos pasar a usar el algoritmo primal simplex para llegar al valor
optimo. En el problema 02; ocurre este caso, la base se transformo en dual infactible
pero no se ejecuto el algoritmo primal simplex, puesto que el problema fue resuelto
42
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
de forma mas directa por los otros dos metodos, como se muestra en las siguientes
figuras.
o Con el metodo modificacion de costos
Figura 4.5: Modificacion de costos de (P02) y valor objetivo con base dual infactible
43
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Figura 4.6: Comprobacion de infactibilidad dual en el ındice 2
o Con el metodo de reducir de infactibilidades o PQ-Pan
Figura 4.7: Base inicial xc dada por PQ-Pan
44
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Figura 4.8: Solucion del problema (P02) con la base inicial xc
o Con el metodo de minimizar la suma de infactibilidades
Figura 4.9: Base inicial xc = [4, 5, 6] dada por la mınima suma de infactibilidades
45
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Figura 4.10: Solucion del problema (P02) y valor de la incognita X = (x1, x2, x3)
Problema 03:
(P03)
min x1 + 2x2 + 3x3 − x4
s.a: 2x1 − x2 + x3 − 2x4 ≤ 6
−x1 + 2x2 − x3 + x4 ≤ 8
−2x1 − x2 + x3 ≤ −2
0 ≤ x1 ≤ 3
1 ≤ x2 ≤ 4
0 ≤ x3 ≤ 10
2 ≤ x4 ≤ 5
El valor objetivo de este problema es Z = −2,5. Al igual que el problema anterior, el
metodo modificacion de costos para este problema finaliza con una base dual infac-
tible y por tanto debe ejecutarse el algoritmo primal simplex; por eso solo se aplico a
este problema los metodos de PQ-Pan y Minimizar la suma de infactibilidades, como
se muestra en las siguientes figuras:
o Con el metodo de reducir de infactibilidades o PQ-Pan
46
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Figura 4.11: Datos del problema (P03) e inicio del metodo de PQ-Pan
Figura 4.12: Solucion del problema (P03) con la base inicial xc
o Con el metodo de minimizar la suma de infactibilidades
47
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Figura 4.13: Base inicial xc = [5, 6, 7] dada por Mınima suma de infactibilidades
Figura 4.14: Solucion del problema (P03) y valor de la incognita X = (x1, x2, x3, x4)
Despues de estas pequenas pruebas, pasamos a resolver el problema de gran escala
aflow40b, del cual sus datos fueron guardados en Matlab.
48
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Solucion del problema aflow40b
Despues de obtener los datos del problema aflow40b en la estructura “problem”,
y asumiendo que esta dado en forma estandar, se tiene que todas sus variables
estan acotadas, por tanto no fue necesario introducir variables de holgura; de este
modo cualquier base inicial de la matriz de restricciobes, es posible que sea dual
factible llevando las variables no basicas a uno de los valores de sus cotas. Finalmente
ejecutamos el programa del algoritmo dual simplex, el cual muestra la siguiente
ventana:
Figura 4.15: Solucion de aflow40b
Dicha solucion fue comprobada con la solucion dada por el comando linprog que
matlab usa para optimizacion lineal, la cual se muestra en las siguientes figuras:
49
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Figura 4.16: Solucion de alow40b con Linprog
Al solucionar el problema aflow40b sin agregar variables de holgura, no fueron ne-
cesarios los metodos de inicializacion puesto que todas las variables son acotadas;
ası cualquier base fue posible hacer que sea dual factible.
Solucion de aflow40b con restricciones de desigualdad
La matriz del problema Aflow40b es de rango 1442 y tiene 78 restricciones de igual-
dad y 1364 restricciones de desigualdad, por tal razon fue necesario agregar variables
de holgura para tener el problema en forma estandar. Tales variables de holgura son
50
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
no negativas, es decir acotadas inferiormente por cero, pero no son acotadas supe-
riormente. Con estos datos, para solucionar el problema se tiene que usar los metodos
de inicializacion expuestos anteriormente.
El metodo que se uso para dar una solucion inicial a este problema fue minimizar
la suma de infactibilidades, del siguiente modo: puesto que la base que resulta de
este metodo esta formada por columnas correspondientes a variables no encajadas;
y en el problema aflow40b se agregaron 1364 variables no encajadas pero acotadas
inferiormente, entonces a estas columnas le agregamos 78 columnas mas correspon-
dientes a variables encajadas con el comnado de matlab “rref(A)”para lograr las
1442 columnas cuyas correspondientes variables formaran las variables basicas dual
factibles iniciales; debido a que las variables no basicas iniciales pueden fijarse en
cualquiera de sus cotas inferior o superior.
Figura 4.17: Datos de problema con base inicial xxe
51
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Figura 4.18: Comprueba que la base xxe es dual factible
Luego se ejecuta el algoritmo dual simplex, al principio la sub-matriz basica se volvıa
no invertible. Pero se realizaron algunos ajustes hasta conseguir que no sucediera
este incidente.
Figura 4.19: Primer valor objetivo
Se ejecuto el algoritmo hasta conseguir el valor objetivo: Z= 1005.7
52
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Figura 4.20: Solucion de aflow40b con metodo dual simplex. Valor objetivo Z= 1005.7
El valor objetivo encontrado, corresponde tambien al que muestra la pagina de
internet de la librerıa MIPLIB 2 , cuyos datos fueron actualizados en el ano 2014
por Gerald Gamrath.
4.5. Tecnicas para implementar el algoritmo dual
simplex
Algunas de estas tecnicas fueron usadas para obtener una implementacion eficiente:
1. Steepest Edge Pricing
2. Bound Flipping Ratio Test
3. Factorizacion LU y actualizar
2http://miplib.zib.de/miplib2010/aflow40b.php
53
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Conclusiones
� Dado el problema (PL)
min z = ctx
s.a. Ax = b
l ≤ x ≤ u
(4.4)
donde A es una matriz de m × n con rango m y m < n, hallar su solucion
usando el metodo simplex considerando las variables acotadas como restricciones
adicionales, resulta inadecuado debido a la cantidad de memoria que se necesita.
El metodo dual simplex para problemas generales, con alguna de las tecnicas de
inicializacion descritas es una alternativa para resolver este tipo de problemas
(PL), sin aumentar la dimension de la matriz A.
� De los tres metodos descritos, la combinacion del metodo de PQ-Pan con el meto-
do de minimizar la suma de infactibilidades es lo mas adecuado, puesto que el
primero va cambiando las columnas que hacen dual infactible a la matriz basica
del problema y luego, si en alguna iteracion no llega a cambiar ninguna columna,
se pasa a minimizar la suma de infactibilidades resolviendo un problema auxiliar,
para conseguir una solucion dual factible.
� Del metodo de minimizar la suma de infactibilidades, se dedujo que dada una base
inicial B, si todas las columnas no basicas A\B corresponden a variables acotadas,
entonces es posible hacer B dual factible, intercambiando dichas variables no
basicas de una cota a otra. Luego, se aplica el metodo dual simplex para problemas
generales y se obtiene la solucion del problema determinado.
� Recomendaciones:
Para resolver problemas de gran escala de manera eficiente se recomienda realizar
un preproceso antes de aplicar algun metodo, puesto que una parte significativa del
54
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
problema podrıa ser redundante. Los objetivos de un preproceso son los siguientes:
Eliminar resticciones redundantes, encontrar variables que podrıan fijarse, relajar
o estrechar las cotas de las variables del problema, y reducir el numero de variables
y restricciones mediante elimininacion. Despues del preproceso se aplica algun
metodo escogido y se resuelve el problema.
55
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Bibliografıa
[1] Balbas A. A y Gil F J. Programacion Matematica, 2da ed, AC, Madrid,
1990.
[2] Bazaraa Mokhtar, Sherali Hanif.D and Shetty C.M, Nonlinear Pro-
gramming Theory and algorithms, 3era ed, Jhon Wiley Sons, Inc 2006.
[3] Bazaraa M.S, Sherali H.D y JARVIS J.J, Programacion Lineal y Flujo
en Redes, Limusa, Mexico, 2007.
[4] Koberstein A, Suhl U.H, Progress in the dual simplex method for large
scale LP problems, Computational Optimization and Applications vol 37 N° 1, 2007.
[5] Lemke, C.E. The dual method of solving the linear programming problem, Naval
Research Logistics Quarterly vol. 1, 1954.
[6] Leon S. Lasdon, Optimization Theory for Large Systems, Dover Publications,
Mineola, N.Y, 2002.
[7] Minoux .M, Mathematical Programming Theory and Algorithms, Jhon Wiley Sons,
New York, 1986.
[8] Pan , P. Q. Practical finite pivoting rules for the simplex method . OR Spectrum
12, 219 - 225, 1990.
[9] Pan, P. Q. The most-obtuse-angle row pivot rule for achieving dual feasibility: a
computational study. Eur . J. Oper. Res. 101 (1), 167- 176. 1997
−−−−−−−−−−−−− −−−−−−−−−−−−−Yessica Evelin Zarate Pedrera Dr. Edmundo Vergara Moreno
Alumna Asesor
56
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Apencide A
Codigos de programas en matlab
A continuacion se presentan los codigos programados en matlab
de los siguientes metodos:
Programa 1: Metodo modificacion de costos
Programa 2: Metodo de Ping-Qi Pan
Programa 3: Metodo de minimizar la suma de infactibili-
dades
Programa 4: Fase dual 2 del metodo dual simplex
Otras funciones programadas en matlab
57
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Programa 1: Metodo modificacion de costos
% FASE DUAL 1
F= input ('ingrese vector de costos ');
A= input ('ingrese matriz de restricciones ');
b= input ('ingrese vector columna de recursos ');
lo= input ('ingrese vector columna de cotas inferiores ');
up= input ('ingrese vector columna de cotas superiores ');
Jb= input('ingrese índices de variables acotadas ');
Jl=input('ingrese índices de variables acotadas inferiormente ');
Ju= input('ingrese índices de variables acotadas superiormente ');
Jf= input('ingrese índices de variables libres ');
xc=input('índices de base inicial');
[m,n]= size(A);
J=1:n;
xn= setdiff(J,xc);
B=A(:,xc);
AN= A(:,xn);
z= intersect(xn,Jb);
y= intersect(Jl,xn);
w= intersect(xn,Ju);
v= intersect(xn,Jf);
X(z,1)=lo(z,1);
X(y,1)= lo(y,1);
X(w,1)=up(w,1);
X(v,1)=0;
Bi=inv(B);
Bf=Bi;
pi=F(1,xc)*Bf;
d(1,xn)=F(1,xn)-(pi*AN);
58
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
%primero evaluar si una base es dual factible
for i=z
if (d(1,i)<0)
X(i,1)=up(i,1);
end
end
%METODO DE MODIFICACIÓN DE COSTOS
for i=y
if (d(1,i)<0)
F(1,i)= F(1,i)-d(1,i);
end
end
for i=w
if (d(1,i)>0)
F(1,i)= F(1,i)-d(1,i);
end
end
for i=v
if (d(1,v)~=0)
F(1,i)= F(1,i)-d(1,i);
end
end
disp('nuevo vector costo: ')
disp(F)
%perturbar valores de costo por un pequeño margen epsilon
epsi=10^-6;
for i=1:n
F(1,i)=F(1,i)+ epsi;
end
disp('perturbado')
disp(F)
%empezar la FASE DUAL 2
59
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Programa 2: Metodo de Ping-Qi Pan
% FASE DUAL 1;
F= input ('ingrese vector de costos');
A= input ('ingrese matriz de restricciones');
b= input ('ingrese vector de recursos');
lo= input ('ingrese vector de cotas inferiores');
up= input ('ingrese vector de cotas superiores');
Jb= input('ingrese índices de variables acotadas');
Jl=input('ingrese índices de variables acotadas inferiormente');
Ju= input('ingrese índices de variables acotadas superiormente');
Jf= input('ingrese índices de variables libres');
xc=input('ingrese base inicial ');
[m,n]= size(A);
J=1:n;
xn= setdiff(J,xc);
B=A(:,xc);
AN= A(:,xn);
z= intersect(xn,Jb);
y= intersect(Jl,xn);
w= intersect(xn,Ju);
v= intersect(xn,Jf);
X(y,1)=lo(y,1);
X(w,1)=up(w,1);
X(v,1)=0;
X(z,1)=lo(z,1);
Bi=inv(B);
Bf=Bi;
pi=F(1,xc)*Bf;
d(1,xn)=F(1,xn)-(pi*AN);
%primero evaluar si una base es dual factible
for i=z
if (d(1,i)>= 0)
continue
else X(i,1)=up(i,1);
end
end
%METODO DE Eliminar infactibilidad
Q=zeros(1,n);
for i=y
if (d(1,i)< 0)
Q(1,i)=i;
end
end
for i=w
60
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
if (d(1,i)>0)
Q(1,i)=i;
end
end
for i=v
if (d(1,v)~=0)
Q(1,i)=i;
end
end
zer=zeros(1,n);
qui=setdiff(Q,zer); %indices de las infactibilidades
while (~isempty(qui))
t=qui(1,1);
mxma=abs(d(1,t));
q=t;
for i=qui
if (abs(d(1,i))>mxma)
mxma=abs(d(1,i));
q=i;
end
end
aaa =Bf*A(:,q);
if (d(1,q)<0)
aaab=-aaa;
else aaab=aaa; %esta es la modificación para la eleccion de p de salida
end
I=zeros(1,m);
for i=1:m
if (xc(1,i)>~inf && aaab(i,1)<0)
I(1,i)=i;
end
if (xc(1,i)<inf && aaab(i,1)>0)
I(1,i)=i;
end
end
si=length(I);
cer=zeros(1,si);
ies=setdiff(I,cer);%superindices que marcan candidatos a salir de la base.
tt=ies(1,1);
mxmx=aaab(tt,1);
r=tt;
for j=ies
if (abs(aaab(j,1))>mxmx)
mxmx=abs(aaab(j,1));
r=j;
end
end
61
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
p=xc(1,r);
fiD=(d(1,q)/aaa(r,1));
ccc=zeros(1,m);
ccc(1,r)=1;
ror=ccc*Bf;
alfar=zeros(1,n);%aqui damos dimension n a alfa para poder multiplicar luego.
for i=1:n
for j=xn
if (i==j)
alfar(1,i)=ror*A(:,i);
end
end
end
for i=xn %aqui actualizamos los costos reducidos d
d(1,i)=d(1,i)-(fiD*alfar(1,i));
end
d(1,p)=-fiD;
if (d(1,p)>0)
X(p,1)=lo(p,1);
end
if (d(1,p)<0)
X(p,1)=up(p,1);
end
xc=setdiff(xc,p);
xc=union(xc,q);
xn=setdiff(xn,q);
xn=union(xn,p);
aa=intersect(xn,Jl);
w= intersect(xn,Ju);
v= intersect(xn,Jf);
Q=zeros(1,n);
for i=aa
if (d(1,i)< 0)
Q(1,i)=i;
end
end
for i=w
if (d(1,i)>0)
Q(1,i)=i;
end
end
for i=v
if (d(1,v)~=0)
Q(1,i)=i;
end
end
zer=zeros(1,n);
qui=setdiff(Q,zer);
qui=setdiff(qui,q);
B=A(:,xc);
Bi=inv(B);
Bf=Bi;
end
disp('la base es dual factible');
disp(B);
%empezar la FASE DUAL 2
62
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Programa 3: Metodo de minimizar la suma de infactibilidades
% FASE DUAL 1;
F= input ('ingrese vector de costos ');
A= input ('ingrese matriz de restricciones ');
b= input ('ingrese vector columna de recursos ');
lo= input ('ingrese vector columna de cotas inferiores ');
up= input ('ingrese vector columna de cotas superiores ');
Jb= input('ingrese indices de variables acotadas ');
Jl=input('ingrese indices de variables acotadas inferiormente ');
Ju= input('ingrese indices de variables acotadas superiormente ');
Jf= input('ingrese indices de variables libres ');
xc= input('ingrese base inicial ');
[m,n]= size(A);
if(length(Jl)+length(Ju)+length(Jf)>=m)
else error('no puedo aplicar suma infac')
end
J=1:n;
xn= setdiff(J,xc);
B=A(:,xc);
AN= A(:,xn);
z= intersect(xn,Jb);
y= intersect(Jl,xn);
w= intersect(xn,Ju);
v= intersect(xn,Jf);
X(y,1)= lo(y,1);
X(w,1)=up(w,1);
X(v,1)=0;
X(z,1)=lo(z,1);
Bi=inv(B);
Bf=lu(Bi);
pi=F(1,xc)*Bf;
d(1,xn)=F(1,xn)-(pi*AN);
%primero evaluar si una base es dual factible
for i=z
if (d(1,i)<0)
X(i,1)=up(i,1);
end
end
%Conjunto de índices dual infactibles
Q=zeros(1,n);
for i=y
if (d(1,i)< 0)
Q(1,i)=i;
end
end
for i=w
if (d(1,i)>0)
63
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Q(1,i)=i;
end
end
for i=v
if (d(1,v)~=0)
Q(1,i)=i;
end
end
zer=zeros(1,n);
qui=setdiff(Q,zer); %índices de las infactibilidades
if (~isempty(qui)) %Resolvemos el problema auxiliar
suminf=setdiff(J,Jb);
b=zeros(m,1);
for i=intersect(suminf,Ju)
lo(i,1)=-1;
up(i,1)=0;
end
for i=intersect(suminf,Jl)
lo(i,1)=0;
up(i,1)=1;
end
for i=intersect(suminf,Jf)
lo(i,1)=-1;
up(i,1)=1;
end
for i=setdiff(J,suminf)
A(:,i)=zeros(m,1);
end
[Ae, xc]= rref(A); %xc tendrá elementos solo de suminf
xn= setdiff(suminf,xc);
B=A(:,xc);
AN= A(:,xn);
X(xn,1)=lo(xn,1);
Bi=inv(B);
Bf=Bi;
pi=F(1,xc)*Bf;
d(1,xn)=F(1,xn)-(pi*AN);
%primero evaluar si una base es dual factible
for i=xn
if (d(1,i)<0)
X(i,1)=up(i,1);
end
end
%Esta base ya es dual factible para el auxiliar
CV=AN*X(xn,1);
CV= b - CV;
CV=Bf*CV; %formar valores de variables básicas
for i=1:m
j=xc(i);
X(j,1)=CV(i,1);
end
Zo=0;
for i=suminf
Zo=Zo+(F(1,i)*X(i,1));
end
%Comprobar si es primal factible
pp=zeros(1,m);
64
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
for i=1:m
j=xc(i);
if (lo(j,1)<=X(j,1) && X(j,1)<=up(j,1))
else pp(1,i)=i;
end
end
pp=setdiff(pp,zeros(1,m));
p=0;
if(~isempty(pp))
k=pp(1,1);
p=xc(1,k);
mmii=(X(p,1)/nnnorm(m,k,Bf));
t=length(pp);
for ll=1:t
ind=pp(1,ll);
i=xc(1,ind);
if(mmii>(X(i,1)/nnnorm(m,ind,Bf)))
mmii=(X(i,1)/nnnorm(m,ind,Bf));
k=ind;
p=i;
end
end
else disp('Factible')
end
while (p~=0)
if (X(p,1)<lo(p,1))
delta=X(p,1)-lo(p,1);
end
if(X(p,1)>up(p,1))
delta=X(p,1)-up(p,1);
end
r=0;
for i=1:length(xc)
if(xc(1,i)==p)
r=i;
end
end
ccc=zeros(1,m);
ccc(1,r)=1;
ror=ccc*Bf;
alfar=zeros(1,n);%aquí damos dimensión n a alfa para poder multiplicar luego.
for i=1:n
for j=xn
if (i==j)
alfar(1,i)=ror*A(:,i);
end
end
end
if (X(p,1)<lo(p,1)) %esto es para elección de q de entrada
alfarb=-alfar;
else alfarb=alfar;
end
FF=zeros(1,n);
for i=xn
if(X(i,1)==lo(i,1) && alfarb(1,i)>0)
FF(1,i)=i;
65
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
end
if (X(i,1)==up(i,1) && alfarb(1,i)<0)
FF(1,i)=i;
end
end
f=setdiff(FF,zeros(1,n));
%agregar implementación de ratio test
S=[];
detap=zeros(1,n);
pro=0;
while(pro==0)
if (~isempty(f))
q=f(1,1);
mimin=abs(d(1,q)/alfar(1,q));
for i=f
if (abs(d(1,i)/alfar(1,i))< mimin)
mimin=abs(d(1,i)/alfar(1,i));
q=i;
end
end
if (q==intersect(q,Jb))
if(X(q,1)==lo(q,1))
detap(1,q)=up(q,1)-lo(q,1);
end
if (X(q,1)==up(q,1))
detap(1,q)=lo(q,1)-up(q,1);
end
ssig=sign(cri);
cri=cri-(detap(1,q)*alfar(1,q));
if(ssig==sign(cri))
S=union(S,q);
f=setdiff(f,q);
pro=0;
else for j=S
if(X(j,1)==lo(j,1))
X(j,1)=up(j,1);
else if (X(j,1)==up(j,1))
X(j,1)=lo(j,1);
end
end
end
amon=zeros(m,1);
for j=S
amon=amon+detap(1,j)*A(:,j);
end
rre=Bf*amon;
for h=1:m
i=xc(1,h);
X(i,1)=X(i,1)-rre(h,1);
end
if (X(p,1)<lo(p,1))
delta=X(p,1)-lo(p,1);
else if(X(p,1)>up(p,1))
delta=X(p,1)-up(p,1);
end
end
66
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Zo=0;
for i=1:n
Zo=Zo+(F(1,i)*X(i,1));
end
pro=1;
end
else for j=S
if(X(j,1)==lo(j,1))
X(j,1)=up(j,1);
else if (X(j,1)==up(j,1))
X(j,1)=lo(j,1);
end
end
end
amon=zeros(m,1);
for j=S
amon=amon+detap(1,j)*A(:,j);
end
rre=Bf*amon;
for h=1:m
i=xc(1,h);
X(i,1)=X(i,1)-rre(h,1);
end
if (X(p,1)<lo(p,1))
delta=X(p,1)-lo(p,1);
end
if(X(p,1)>up(p,1))
delta=X(p,1)-up(p,1);
end
Zo=0;
for i=1:n
Zo=Zo+(F(1,i)*X(i,1));
end
pro=1;
end
else disp ('problema casi factible')
disp('las columnas básicas son: ');
disp(xc);
pro=2;
end
end
if(pro==2)
%disp('dual no acotado')
p=0;
else
fiD=(d(1,q)/alfar(1,q));
aaa =Bf*A(:,q);
%Aqui actualizamos.
Zo=Zo+(fiD*delta);
tetap=(delta/alfar(1,q));
X(xc,1)=X(xc,1)-(tetap*aaa);
X(q,1)=X(q,1)+tetap;
for j=xn
d(1,j)=d(1,j)-(fiD*alfar(1,j));
end
67
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
d(1,p)=-fiD;
xc=setdiff(xc,p);
xc=union(xc,q);
xn=setdiff(xn,q);
xn=union(xn,p);
%añadimos actualización
B=A(:,xc);
AN= A(:,xn);
Bi=inv(B);
Bf=Bi;
%Comprobar si es primal factible
pp=zeros(1,m);
for i=1:m
j=xc(i);
if (lo(j,1)-(10^(-12))<=X(j,1) && X(j,1)<=up(j,1)+ 10^(-12))
else pp(1,i)=i;
end
end
pp=setdiff(pp,zeros(1,m));
p=0;
if(~isempty(pp))
k=pp(1,1);
p=xc(1,k);
mmii=(X(p,1)/nnnorm(m,k,Bf));
t=length(pp);
for ll=1:t
ind=pp(1,ll);
i=xc(1,ind);
if(mmii>(X(i,1)/nnnorm(m,ind,Bf)))
mmii=(X(i,1)/nnnorm(m,ind,Bf));
k=ind;
p=i;
end
end
else disp('Factible O')
end
end
end
if (Zo==0)
xn=union(xn,Jb);
xn=setdiff(xn,0);
%las variables acotadas en sus cotas inferiores, sino a sus superiores
disp('el valor de Zo es: ');
disp(Zo);
disp('la base es dual factible B= ');
disp(B);
disp('las columnas básicas son: ');
disp(xc);
disp('las columnas NO básicas son: ');
disp(xn);
else disp('el problema original es dual infactible')
end
else disp('la base inicial es dual factible B= ')
disp(B)
end
%empezar la FASE DUAL 2
68
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Programa 4: Fase dual 2 del metodo dual simplex
%Empezar la FASE DUAL 2
%Ya se tiene una base Dual Factible
F= input ('ingrese vector de costos ');
A= input ('ingrese matriz de restricciones ');
b= input ('ingrese vector columna de recursos ');
lo= input ('ingrese vector columna de cotas inferiores ');
up= input ('ingrese vector columna de cotas superiores ');
Jb= input('ingrese índices de variables acotadas ');
Jl=input('ingrese índices de variables acotadas inferiormente ');
Ju= input('ingrese índices de variables acotadas superiormente ');
Jf= input('ingrese índices de variables libres ');
xc=input('índices básicos ');
xn=input('índices No básicos ');
[m,n]= size(A);
J=1:n;
B=A(:,xc);
AN= A(:,xn);
y= intersect(Jl,xn);
w= intersect(xn,Ju);
v= intersect(xn,Jf);
az=intersect(xn,Jb);
X(y,1)=lo(y,1);
X(w,1)=up(w,1);
X(v,1)=0;
X(az,1)=lo(az,1);
d=zeros(1,n);
Bi=inv(B);
Bf=Bi;
pi=F(1,xc)*Bf;
d(1,xn)=F(1,xn)-(pi*AN);
for i=az
if (d(1,i)< 0)
X(i,1)=up(i,1);
end
end
CV=AN*X(xn,1);
CV= b - CV;
CV=Bf*CV; %Calcular valores de variables básicas
for i=1:m
j=xc(i);
X(j,1)=CV(i,1);
end
Zo=0;
for i=1:n
Zo=Zo+(F(1,i)*X(i,1));
end
%Comprobar si es primal factiblle
pp=zeros(1,m);
for i=1:m
j=xc(i);
if (lo(j,1)<=X(j,1) && X(j,1)<=up(j,1))
else pp(1,i)=i;
end
end
69
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
pp=setdiff(pp,zeros(1,m));
p=0;
if(~isempty(pp))
k=pp(1,1);
p=xc(1,k);
mmii=(X(p,1)/nnnorm(m,k,Bf));
t=length(pp);
for ll=1:t
ind=pp(1,ll);
i=xc(1,ind);
if(mmii>(X(i,1)/nnnorm(m,ind,Bf)))
mmii=(X(i,1)/nnnorm(m,ind,Bf));
k=ind;
p=i;
end
end
else disp('Factible')
end
if (p~=0)
if (X(p,1)<lo(p,1))
delta=X(p,1)-lo(p,1);
end
if(X(p,1)>up(p,1))
delta=X(p,1)-up(p,1);
end
cri=delta;
r=k;
ccc=zeros(1,m);
ccc(1,r)=1;
ror=ccc*Bf;
afr=ror*AN;
alfar=zeros(1,n);%aqui damos dimension n a alfa para poder multiplicar luego.
iy=n-m;
for j=1:iy
i=xn(j);
alfar(1,i)=afr(1,j);
end
if (X(p,1)<lo(p,1)) %esto es para eleccion de q de entrada
alfarb=-alfar;
else alfarb=alfar;
end
FF=zeros(1,n);
for i=xn
if(X(i,1)==lo(i,1) && alfarb(1,i)>0)
FF(1,i)=i;
end
if (X(i,1)==up(i,1) && alfarb(1,i)<0)
FF(1,i)=i;
end
end
f=setdiff(FF,zeros(1,n));
%agregar implementacion de ratio test
S=[];
detap=zeros(1,n);
pro=0;
while(pro==0)
70
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
if (~isempty(f))
q=f(1,1);
mimin=abs(d(1,q)/alfar(1,q));
for i=f
if (abs(d(1,i)/alfar(1,i))< mimin)
mimin=abs(d(1,i)/alfar(1,i));
q=i;
end
end if (q==intersect(q,Jb)) if(X(q,1)==lo(q,1)) detap(1,q)=up(q,1)-lo(q,1); end if (X(q,1)==up(q,1)) detap(1,q)=lo(q,1)-up(q,1); end ssig=sign(cri); cri=cri-(detap(1,q)*alfar(1,q));
if(ssig==sign(cri)) S=union(S,q); f=setdiff(f,q); pro=0; else for j=S if(X(j,1)==lo(j,1)) X(j,1)=up(j,1); else if (X(j,1)==up(j,1)) X(j,1)=lo(j,1); end end end amon=zeros(m,1); for j=S amon=amon+detap(1,j)*A(:,j); end rre=Bf*amon; for h=1:m i=xc(1,h); X(i,1)=X(i,1)-rre(h,1); end if (X(p,1)<lo(p,1)) delta=X(p,1)-lo(p,1); else if(X(p,1)>up(p,1)) delta=X(p,1)-up(p,1); end end Zo=0; for i=1:n Zo=Zo+(F(1,i)*X(i,1)); end pro=1; end else for j=S if(X(j,1)==lo(j,1)) X(j,1)=up(j,1); else if (X(j,1)==up(j,1)) X(j,1)=lo(j,1); end end end amon=zeros(m,1); for j=S amon=amon+detap(1,j)*A(:,j); end
71
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
rre=Bf*amon; for h=1:m i=xc(1,h); X(i,1)=X(i,1)-rre(h,1); end
if (X(p,1)<lo(p,1)) delta=X(p,1)-lo(p,1); end if(X(p,1)>up(p,1)) delta=X(p,1)-up(p,1); end Zo=0; for i=1:n Zo=Zo+(F(1,i)*X(i,1)); end pro=1; end else disp ('el problema es dual no acotado') pro=2;
end end if(pro==2) disp('dual no acotado') p=0; else fiD=(d(1,q)/alfar(1,q));
aaa =Bf*A(:,q);
%Aqui actualizamos. Zo=Zo+(fiD*delta);
tetap=(delta/alfar(1,q));
X(xc,1)=X(xc,1)-(tetap*aaa);
X(q,1)=X(q,1)+tetap;
for j=xn
d(1,j)=d(1,j)-(fiD*alfar(1,j)); end
d(1,p)=-fiD;
xc=setdiff(xc,p); xc=union(xc,q); xn=setdiff(xn,q); xn=union(xn,p);
%añadimos actualizacion B=A(:,xc); AN= A(:,xn);
Bi=inv(B); Bf=Bi;
%Comprobar si es primal factiblle
pp=zeros(1,m); for i=1:m
72
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
j=xc(i); if (lo(j,1)-(10^(-12))<=X(j,1) && X(j,1)<=up(j,1)) else pp(1,i)=i; end end
pp=setdiff(pp,zeros(1,m)); p=0; if(~isempty(pp)) k=pp(1,1); p=xc(1,k); mmii=(X(p,1)/nnnorm(m,k,Bf)); t=length(pp); for ll=1:t ind=pp(1,ll); i=xc(1,ind); if(mmii>(X(i,1)/nnnorm(m,ind,Bf))) mmii=(X(i,1)/nnnorm(m,ind,Bf)); k=ind; p=i; end end
else disp('Factible O')
end
end end
while (p~=0) if (X(p,1)<lo(p,1)) delta=X(p,1)-lo(p,1); end if(X(p,1)>up(p,1)) delta=X(p,1)-up(p,1); end
cri=delta;
r=k;
ccc=zeros(1,m); ccc(1,r)=1;
ror=ccc*Bf;
afr=ror*AN;
alfar=zeros(1,n);%aqui damos dimension n a alfa para poder multiplicar luego. iy=n-m; for j=1:iy i=xn(j); alfar(1,i)=afr(1,j); end
if (X(p,1)<lo(p,1)) %esto es para eleccion de q de entrada alfarb=-alfar; else alfarb=alfar; end
FF=zeros(1,n);
73
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
for i=xn if(X(i,1)==lo(i,1) && alfarb(1,i)>0) FF(1,i)=i; end if (X(i,1)==up(i,1) && alfarb(1,i)<0) FF(1,i)=i; end end
f=setdiff(FF,zeros(1,n)); %agregar implementacion de ratio test
S=[];
detap=zeros(1,n);
pro=0;
while(pro==0)
if (~isempty(f)) q=f(1,1); mimin=abs(d(1,q)/alfar(1,q));
for i=f if (abs(d(1,i)/alfar(1,i))< mimin) mimin=abs(d(1,i)/alfar(1,i)); q=i; end end if (q==intersect(q,Jb)) if(X(q,1)==lo(q,1)) detap(1,q)=up(q,1)-lo(q,1); end if (X(q,1)==up(q,1)) detap(1,q)=lo(q,1)-up(q,1); end ssig=sign(cri); cri=cri-(detap(1,q)*alfar(1,q));
if(ssig==sign(cri)) S=union(S,q); f=setdiff(f,q); pro=0;
else for j=S if(X(j,1)==lo(j,1)) X(j,1)=up(j,1); else if (X(j,1)==up(j,1)) X(j,1)=lo(j,1); end end end
amon=zeros(m,1); for j=S amon=amon+detap(1,j)*A(:,j); end rre=Bf*amon; for h=1:m i=xc(1,h); X(i,1)=X(i,1)-rre(h,1);
74
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
end if (X(p,1)<lo(p,1)) delta=X(p,1)-lo(p,1); else if(X(p,1)>up(p,1)) delta=X(p,1)-up(p,1); end end Zo=0;
for i=1:n Zo=Zo+(F(1,i)*X(i,1)); end pro=1; end else for j=S if(X(j,1)==lo(j,1)) X(j,1)=up(j,1); else if (X(j,1)==up(j,1)) X(j,1)=lo(j,1); end end end
amon=zeros(m,1); for j=S amon=amon+detap(1,j)*A(:,j); end rre=Bf*amon; for h=1:m i=xc(1,h); X(i,1)=X(i,1)-rre(h,1); end
if (X(p,1)<lo(p,1)) delta=X(p,1)-lo(p,1); end if(X(p,1)>up(p,1)) delta=X(p,1)-up(p,1); end Zo=0;
for i=1:n Zo=Zo+(F(1,i)*X(i,1)); end pro=1;
end else disp ('el problema es dual no acotado') pro=2;
end end
if(pro==2) disp('dual no acotado') p=0;
else fiD=(d(1,q)/alfar(1,q));
aaa =Bf*A(:,q);
%Aqui actualizamos.
75
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Zo=Zo+(fiD*delta);
tetap=(delta/alfar(1,q));
X(xc,1)=X(xc,1)-(tetap*aaa);
X(q,1)=X(q,1)+tetap;
for j=xn
d(1,j)=d(1,j)-(fiD*alfar(1,j)); end
d(1,p)=-fiD;
xc=setdiff(xc,p); xc=union(xc,q); xn=setdiff(xn,q); xn=union(xn,p);
%añadimos actualizacion B=A(:,xc); AN= A(:,xn);
Bi=inv(B); Bf=Bi;
%Comprobar si es primal factiblle
pp=zeros(1,m); for i=1:m j=xc(i); if (lo(j,1)-(10^(-12))<=X(j,1) && X(j,1)<=up(j,1)) else pp(1,i)=i; end end
pp=setdiff(pp,zeros(1,m)); p=0; if(~isempty(pp)) k=pp(1,1); p=xc(1,k); mmii=(X(p,1)/nnnorm(m,k,Bf)); t=length(pp); for ll=1:t ind=pp(1,ll); i=xc(1,ind); if(mmii>(X(i,1)/nnnorm(m,ind,Bf))) mmii=(X(i,1)/nnnorm(m,ind,Bf)); k=ind; p=i; end end
else disp('Factible O '); end
end end disp('el valor de Zo es: '); disp(Zo);
76
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/
Otras funciones programadas en matlab
Funcion 1: nnnorm
Funcion 2: uunn
77
Biblioteca Digital. Dirección de Sistemas de Informática y Comunicación - UNT
Esta obra ha sido publicada bajo la licencia Creative Commons Atribucion-No Comecial-Compartir igual bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/