Tema 2 PDF
Tema 2 PDF
EL MÉTODO SIMPLEX
“La grandeza no es una función de las circunstancias. La grandeza resulta ser en gran medida una cuestión de
elección consciente y de disciplina.” Jim Collins
El método Simplex es un método general para resolver problemas de programación lineal. Fue
desarrollado por el profesor, físico y matemático estadounidense George Dantzig (1914-2005)
en 1947. Dantzig es considerado como el padre de la programación lineal.
Ejemplo
La restricción:
5x1+8x2≤−6
Debe transformarse a:
−5x1−8x2≥6
Para convertir una restricción con desigualdad ≤ en igualdad se agrega una nueva variable no
negativa (llamada variable de holgura) al lado izquierdo de la desigualdad. Esta nueva variable
se agrega a la función objetivo con coeficiente 0.
Ejemplo
La restricción:
5x1+8x2≤6
Se transforma en:
5x1+8x2+x3=6
Para convertir una restricción con desigualdad ≥ en igualdad se resta una nueva variable no
negativa (llamada variable superflua) al lado izquierdo de la desigualdad. Esta nueva variable
se agrega a la función objetivo con coeficiente 0.
Ejemplo
La restricción:
5x1+8x2≥6
Se transforma en:
5x1+8x2−x3=6
Para encontrar una solución factible inicial se trabaja con las restricciones modificadas (es
decir las convertidas a igualdades) y se añade una nueva variable (llamada variable artificial) al
lado izquierdo de las restricciones que no contengan variables de holgura.
Luego una solución factible inicial se obtiene igualando cada variable de holgura y artificial al
lado derecho de las restricciones.
Las variables artificiales se añaden a la función objetivo con coeficiente M (coeficiente positivo
muy grande) si el programa es de minimización y se resta si el programa es de maximización.
Ejemplo
5x1+8x2≤6
2x1+3x2≥8
x1+x2=1
Primero se transforman:
x1+x2=1
5x1+8x2+x3=6
2x1+3x2−x4+x5=8
x1+x2+x6=1
Ejemplo
Sujeto a:
0.5x1+0.8x2≤0.6
x1+x2=1
x1, x2 ≥ 0
0.5x1+0.8x2+x3=0.6 (v.h)
x1+x2=1
x1+x2+x4=1 (v.a)
Finalmente, el modelo en su forma estándar:
máx. z=40x1+20x2+0x3−Mx4
Sujeto a:
0.5x1+0.8x2+x3=0.6
x1+x2+x4=1
Con todas las variables no negativas
Ejemplo
Es posible no añadir una variable artificial si la restricción es una igualdad y una variable tiene
coeficiente positivo y no está presente en las demás restricciones. En este caso se iguala el
término que tiene la variable positiva con el segundo miembro para obtener parte de la
solución factible inicial.
min. z=40x1+20x2+30x3
Sujeto a:
0.5x1+0.8x3≤0.6
x1+x2+2x3=1
2x1+3x3≥ 8
x1, x2, x3 ≥ 0
Las restricciones se transforman a:
0.5x1+0.8x3+x4=0.6
x1+x2+2x3=1
2x1+3x3−x5= 8
Ahora solo se añade una variable artificial a la tercera restricción ya que, en la segunda
restricción, que es de igualdad, la variable x2 tiene coeficiente positivo y no está presente en
las demás restricciones. El modelo en su forma estándar es:
min. z=40x1+20x2+30x3+0x4+0x5+Mx6
Sujeto a:
0.5x1+0.8x3+x4=0.6
x1+x2+2x3=1
2x1+3x3−x5+x6= 8
Ejemplo
Colocar en su forma estándar el siguiente modelo lineal:
min. z=40x1+20x2
Sujeto a:
5x1+8x2≥2
3x1+2x2≥3
6x1+x2≥−4
En este caso las variables no tienen condiciones de no negatividad así que las remplazamos por
nuevas variables:
x1=x3−x4
x2=x5−x6
Sujeto a:
5(x3−x4)+8(x5−x6)≥2
3(x3−x4)+2(x5−x6)≥3
6(x3−x4)+ (x5−x6)≥−4
La última restricción la multiplicamos por −1:
min. z=40x3−40x4+20x5−20x6
Sujeto a:
5x3−5x4+8x5−8x6≥2
3x3−3x4+2x5−2x6≥3
−6x3+6x4− x5+x6≤4
min. z=40x3−40x4+20x5−20x6
Sujeto a:
5x3−5x4+8x5−8x6−x7+x10=2
3x3−3x4+2x5−2x6−x8+x11=3
−6x3+6x4− x5+x6+x9=4
Con todas las variables no negativas
La tabla Simplex
Optimizar z=c1x1+c2x2+…+cnxn
Con las restricciones:
a11x1+a12x2+…+a1nxn =b1
a21x1+a22x2+…+a2nxn =b2
am1x1+am2x2+…+amnxn =bm
Con X≥0
Donde:
Además, es conocida una solución factible inicial Xo. Aquí se anotarán las variables que se
llamarán variables básicas.
El método Simplex a partir de Xo localiza otras soluciones factibles que cada vez se acercan a la
solución óptima.
Donde:
Ejemplo
min. z=40x1+20x2+30x3+0x4+0x5+Mx6
Sujeto a:
0.5x1+0.8x3+x4=0.6
x1+x2+2x3=1
2x1+3x3−x5+x6= 8
La tabla es entonces:
Si hacemos de esta manera podemos luego simplificar la tabla eliminando la segunda fila y la
segunda columna.
1. Observamos la última fila, menos el último elemento y elegimos la columna que tiene el
elemento más negativo. Si el elemento más negativo esta repetido elegimos cualquiera de
ellos. Esta columna se llamará columna pivote. Si la columna elegida, correspondiente en A,
tiene todos sus elementos negativos, el problema no tiene solución.
5. Repetir los pasos del 1 al 4 hasta que no queden números negativos en el último renglón
excluyendo la última columna.
Ejemplo
Encuentre la solución del siguiente programa lineal que ya está en su forma estándar:
máx. z=x1+7x2+x3+0x4+0x5
Sujeto a:
2x1+x2+3x3+x4+0x5=8
x1+2x2+2x3+0x4+x5=10
Simplificando:
Paso 1:
Podemos ver en la última fila que el elemento más negativo es −7 que corresponde a la
columna de x2, esta será la columna pivote. Aquí los elementos de A son positivos.
Paso 2:
8/1=8
10/2=5
Paso 3:
Multiplicamos la segunda fila por -1 y sumamos a la primera fila. Luego multiplicamos por 7 la
segunda fila y sumamos a la última:
Paso 4:
z máx.=35
x4=3, x2=5, x1=x3=x5=0
1. En la tabla Simplex deberá separarse la última fila en 2 filas, una que contiene solo
constantes y otra que contiene los coeficientes de M.
2. El paso 1 del método Simplex se aplica a la nueva última fila (coeficientes de M). Luego se
aplican los pasos 2, 3 y 4 hasta que la última fila no contenga elementos negativos. Luego se
aplica el paso 1 al penúltimo renglón que se encuentran sobre ceros en el último renglón,
3. Si una variable artificial deja de ser básica se elimina toda la columna de esa variable
artificial.
Ejemplo
Min z=80x1+60x2+0x3+Mx4
Sujeto a:
0.2x1+0.32x2 +x3+0x4=0.25
x1+x2+0x3+x4=1
Con todas las variables no negativas
Al ser un programa de minimización la última fila se calcula con cj−zj. La tabla Simplex es:
Simplificando:
Paso 2:
0.25/0.2=1.25
1/1=1
Paso 3:
Convirtiendo la columna pivote. Realizamos las siguientes operaciones:
Paso 4:
1/1=1
Programa LINDO.
Min z=10x1+8x2+7x3
Sujeto a:
3x1+6x2+5x3≥30
5x1+3x2+7x3≥60
Min 10x1+8x2+7x3
subject to
3x1+6x2+5x3>=30
5x1+3x2+7x3>=60
end
Para hallar la solución hacemos clic en el botón de círculo rojo. LINDO preguntara si requiere
hacer análisis de sensibilidad. Por el momento podemos colocar No, el programa muestra:
z opt.=60
x1=0
x2=0
x3=8.571428
En la primera fila muestra la penúltima fila de la tabla simplex y las dos restantes son las filas
correspondientes a la matriz A. SLK2 es la variable añadida.
Programa en EXCEL.
En Excel primero introduciremos los datos del programa de la siguiente manera (utilizando el
mismo problema anterior):
En la fila 8 colocamos 0 en las celdas para mostrar los valores de las variables.
Celda H5:=B5*B8+C5*C8+D5*D8
Celda H6:= B6*B8+C6*C8+D6*D8
Ahora debemos utilizar la herramienta SOLVER, para ello en el menú Datos haga clic en Solver
(Deberá estar habilitado, si no es así, vaya a Archivo, Opciones, Complementos, Ir… y habilite
Solver).
Aparecerá una ventana de diálogo de los parámetros de solver:
$B$8:$D$8
En Sujeto a las restricciones haga clic en Agregar. Aparece la siguiente ventana:
En referencia de celda colocar $H$5, luego la desigualdad y en restricción $F$5. Luego agregar
para introducir la segunda restricción. Finalmente aceptar.
Como en los muchos ejemplos que se han visto, algunas veces las variables de decisión tienen
que ser obligatoriamente enteras.
Ejemplo
máx. z=200x1+400x2
16x1+22x2≤100
0.5x1+0.75x2≤50
El valor óptimo se encuentra en x1=0, x2=4.55 con z=1820. Como se puede ver una de las
variables no es entera.
Se puede observar que en la región factible existen los siguientes pares de enteros:
(0,0),(0,1),(0,2),(0,3),(0,4)
(1,0),(1,1),(1,2),(1,3)
(2,0),(2,1),(2,2),(2,3)
(3,0),(3,1),(3,2)
(4,0),(4,1)
(5,0)
(6,0)
Si reemplazamos cada uno de los puntos en la función objetivo observamos que los puntos
enteros (2,3) y (0,4) son los que dan un mayor valor de z, es decir z=1600.
Paso 1. Considerar en primer lugar que el modelo no tiene la restricción de enteros y resolver
el problema. A esto se llama relajación del problema de programación lineal.
Si la solución a la relajación del problema es una solución entera, entonces ésta es solución al
problema original.
Paso 2. Si algunas o todas de las variables son no enteras, elegimos una variable no entera, por
ejemplo, xj y se encuentra los números enteros mayor y menor de xj (m y n). Se divide en dos
subproblemas que contengan las restricciones adicionales xj ≥ m y xj ≤n.
Paso 3. Una vez resuelta el subproblema elegido se observa si la solución es entera, si es así la
solución es una cota inferior para un problema de maximización y cota superior para un
problema de minimización. Si los otros subprogramas tienen soluciones no enteras, pero z es
menor que la cota inferior en un problema de maximización o mayor que la cota superior en
un problema de minimización, el problema se termina y la solución para un problema de
maximización es la cota inferior y es la cota superior en un problema de minimización.
Ejemplo
máx. z=5x1+x2
Sujeto a:
4x1+5x2≤14
x1 y x2 no negativos y enteros.
Resolviendo el problema de relajación se tiene la solución x1=3.5 y x2=0 con z=17.5. Esto puede
verse en la gráfica en el punto C:
Ya que la solución no es entera tenemos las siguientes restricciones adicionales para los
subprogramas 2 y 3:
x1≥4, x1≤3
2→3
Ya que x2 no es entero se realiza una nueva bifurcación formándose los subprogramas 4 y 5
con:
x2≥1, x2≤0
Entonces la solución es x1=3 y x2=0 con z=15. Ya que la solución es entera, la solución es la
primera cota inferior.
Para el subprograma 5:
Ya que el valor de z del subprograma 5 es menor que la cota inferior el problema se termina y
la solución al problema original es x1=3 y x2=0 con z=15.