0% encontró este documento útil (0 votos)
69 vistas20 páginas

Tema 2 PDF

El documento explica el método Simplex para resolver problemas de programación lineal. El método Simplex requiere que el modelo esté en forma estándar, lo que implica transformar desigualdades a igualdades y encontrar una solución factible inicial. Luego, el método Simplex utiliza un formato de tabla para iterativamente encontrar soluciones factibles cada vez más óptimas hasta alcanzar la solución óptima.

Cargado por

mateo gil
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
69 vistas20 páginas

Tema 2 PDF

El documento explica el método Simplex para resolver problemas de programación lineal. El método Simplex requiere que el modelo esté en forma estándar, lo que implica transformar desigualdades a igualdades y encontrar una solución factible inicial. Luego, el método Simplex utiliza un formato de tabla para iterativamente encontrar soluciones factibles cada vez más óptimas hasta alcanzar la solución óptima.

Cargado por

mateo gil
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 20

3.

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.

3.1 FORMA ESTANDAR


Para utilizar el método Simplex es necesario que el modelo se presente en forma estándar,
para ello se deben transformar todas las restricciones que están en forma de desigualdades a
igualdades y se debe conocer una solución factible no negativa.
Si alguna variable de decisión no tiene condición de no negatividad se reemplazará por la
diferencia entre dos nuevas variables.
Ejemplo

Si un modelo tiene dos variables de decisión x1 y x2 y x1 no tiene condición de no negatividad


entonces se reemplazará x1 por x3−x4, donde x3, x4 son no negativas.
Si en una restricción la constante b es negativa deberá multiplicarse la restricción por −1.

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

Las restricciones originales:

5x1+8x2≤6
2x1+3x2≥8

x1+x2=1
Primero se transforman:

5x1+8x2+x3=6 (con variable de holgura)

2x1+3x2−x4=8 (con variable superflua)

x1+x2=1

Ahora se agregan las variables artificiales:

5x1+8x2+x3=6

2x1+3x2−x4+x5=8

x1+x2+x6=1

Por lo tanto, una solución factible inicial es:

x3=6, x5=8, x6=1, x1=x2=x4=0

Ejemplo

Colocar en su forma estándar el siguiente modelo lineal:


máx. z=40x1+20x2

Sujeto a:

0.5x1+0.8x2≤0.6

x1+x2=1

x1, x2 ≥ 0

Primero convertimos las restricciones:

0.5x1+0.8x2+x3=0.6 (v.h)

x1+x2=1

Añadimos una variable artificial:


0.5x1+0.8x2+x3=0.6 (v.h)

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

La solución factible inicial x3=0.6, x4=1, x1=x2=0

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.

Por ejemplo, el modelo:

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

Con todas las variables no negativas

Una solución factible es:


x4=0.6, x2=1, x6=8, x1=x3=x5=0

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

Formamos entonces el modelo equivalente:


min. z=40(x3−x4)+20(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

Con todas las variables no negativas

Convirtiéndolo a la forma estándar:

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

Una solución factible es:

x10=2, x11=3, x9=4, las demás variables igual a 0.

3.2 EL MÉTODO DE SIMPLEX EN FORMATO DE TABLA

La tabla Simplex

Si la forma estándar del modelo matemático es:

Optimizar z=c1x1+c2x2+…+cnxn
Con las restricciones:

a11x1+a12x2+…+a1nxn =b1

a21x1+a22x2+…+a2nxn =b2

am1x1+am2x2+…+amnxn =bm

Con todas las variables no negativas

La forma estándar del modelo matemático se expresa en formato matricial de la siguiente


forma:
Optimizar z=CTX

Con la condición AX=B

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.

Para efectivizar el procedimiento se utiliza la siguiente tabla Simplex:

Donde:

Co es el vector de costo asociado con las variables en Xo.


En programas de maximización el renglón inferior debe cambiarse de signo.

Ejemplo

Colocar en formato de tabla el siguiente programa que se encuentra en forma estándar.

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

Con todas las variables no negativas

La solución factible es:

x4=0.6, x2=1, x6=8, x1=x3=x5=0

Los datos para la tabla son:


Realizaremos primero las siguientes operaciones:

La tabla es entonces:

También, en vez de multiplicar matrices, la fila 2 y la columna 2 se utilizan para formar la


última fila utilizando la diferencia cj−zj, donde zj resulta de la multiplicación escalar de la
segunda columna con cada una de las columnas de A y cj se obtiene de la segunda fila. Para
problemas de maximización utilizamos zj−cj. Por ejemplo, con la primera columna de A:

40− [0(0.5) +20(1) +M (2)]=20−2M


Con la segunda columna de A:

20− [0(0) +20(1) +M (0)]=0

Si hacemos de esta manera podemos luego simplificar la tabla eliminando la segunda fila y la
segunda columna.

3.3 MODELOS SIN VARIABLES ARTIFICIALES


Para hallar la solución en programas sin variables artificiales podemos seguir los siguientes
pasos

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.

2. Dividimos cada elemento de la columna de B entre el elemento correspondiente de la


columna elegida de A en el paso 1. Elegimos la división más pequeña (este elemento debe ser
positivo) y encontramos el elemento de A que ha contribuido a esta división. Si la división más
pequeña se repite elegimos cualquiera de ellos. Este elemento se llamará elemento pivote y su
fila renglón pivote.
3. Mediante operaciones elementales entre filas se convertirá el elemento pivote en 1 y los
demás elementos de la columna elegida en 0.
4. Reemplazar la variable x de la primera columna y del renglón pivote por la variable x de la
columna pivote. Esta nueva primera columna contiene las nuevas variables básicas.

5. Repetir los pasos del 1 al 4 hasta que no queden números negativos en el último renglón
excluyendo la última columna.

6. La solución se obtiene asignando a las variables básicas actuales los valores


correspondientes de la última columna. El valor óptimo de z es el elemento de la última
columna y última fila.

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

Con todas las variables no negativas


La tabla Simplex es:

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

Elegimos el elemento 2 de la segunda fila de A.

Paso 3:

Convirtiendo la columna pivote. Multiplicamos la segunda fila por 1/2:

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:

Reemplazando la variable x4 por x2 en la primera columna se tiene:

Ya que la última fila no contiene elementos negativos se obtiene la solución:

z máx.=35
x4=3, x2=5, x1=x3=x5=0

3.4 MÉTODO DE DOS FASES


Para modelos con variables artificiales en la solución inicial, la tabla Simplex tendrá en su
última fila elementos que contienen M. Para minimizar el error de redondeo se incluyen las
siguientes modificaciones al método Simplex:

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.

4. Si los elementos de la última fila son ceros, se puede eliminar.

5. Si en las variables básicas finales hay variables artificiales diferentes de 0 entonces el


programa no tiene solución.

Ejemplo

Resolver el siguiente programa que se encuentra en su forma estándar.

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

Aquí x4 es una variable artificial.

Al ser un programa de minimización la última fila se calcula con cj−zj. La tabla Simplex es:

Simplificando:

Separando la última fila:


Paso 1:
Podemos ver en la última fila que el elemento más negativo es −1 y se repite así que elegimos
la primera columna de A. Podemos ver que los elementos de A son positivos.

Paso 2:
0.25/0.2=1.25

1/1=1

Elegimos el elemento 1 de la segunda fila de A.

Paso 3:
Convirtiendo la columna pivote. Realizamos las siguientes operaciones:

Multiplicamos la segunda fila por −0.2 y le sumamos a la primera fila.

Multiplicamos la segunda fila por −80 y le sumamos a la penúltima fila.

Sumamos la segunda fila a la última fila.

Paso 4:

Reemplazando la variable x4 por x1 en la primera columna y ya que x4 es una variable artificial


se elimina la columna 4:

Ya que la última fila contiene ceros se elimina:

Repetimos los pasos del 1 al 4 para la última fila:

Elegimos la segunda columna de A como columna pivote.

Encontramos las razones de la columna pivote de A:


0.05/0.12=0.42

1/1=1

Elegimos el elemento 0.12.

Dividimos la fila 1 entre 0.12:

Multiplicamos la primera fila por −1 y le sumamos a la segunda fila, luego multiplicamos la


primera fila por 20 y le sumamos a la última columna.

Reemplazando la variable x3 por x2 en la primera columna se tiene:

Ya que la última fila no contiene elementos negativos se obtiene la solución:


z min. = 71.6666 (ya que es un problema de minimización se multiplica por −1)

x2=0.4167, x1=0.5833, x3=x4=0

3.5 USO DE PROGRAMAS

Programa LINDO.

En LINDO se puede resolver un programa lineal de la siguiente manera.

Supongamos el siguiente programa lineal:

Min z=10x1+8x2+7x3

Sujeto a:

3x1+6x2+5x3≥30
5x1+3x2+7x3≥60

Una vez abierto el programa introducimos el problema en el siguiente formato (Podemos


copiar de Word).

Min 10x1+8x2+7x3

subject to

3x1+6x2+5x3>=30
5x1+3x2+7x3>=60

end

Observemos que no se introduce z y los signos de desigualdades deben separarse.

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:

Como podemos ver la solución del programa es:

z opt.=60

x1=0

x2=0

x3=8.571428

Mas abajo muestra las variables adicionales utilizadas en el programa.

Se puede mostrar también un reporte de la tabla simplex:

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 3 colocamos los coeficientes de la función objetivo:

Seguidamente en las filas 5 y 6 colocamos las restricciones:

En la fila 8 colocamos 0 en las celdas para mostrar los valores de las variables.

Los valores de las restricciones las introduciremos en la columna H (Con fórmula).

Celda H5:=B5*B8+C5*C8+D5*D8
Celda H6:= B6*B8+C6*C8+D6*D8

En H8 introduciremos la fórmula de la función objetivo =B3*B8+C3*C8+D3*D8

Completada la introducción del programa podemos observar la función objetivo introduciendo


algunos valores en las variables en la fila 8. Por ejemplo, si introducimos los valores de las
variables encontrados anteriormente:

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:

En establecer objetivo coloque $H$8, luego coloque para Min.

En Cambiando las celdas de variables coloque:

$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.

En Método de resolución elegir Simplex LP

Luego haga clic en opciones y señale Omitir restricciones de enteros.

Finalmente, clic en Resolver mostrará la solución del problema.


4 PROGRAMACIÓN ENTERA
La programación entera es la programación lineal en la cual se tiene la condición de que todas
o alguna de las variables deben ser enteras positivas.

Como en los muchos ejemplos que se han visto, algunas veces las variables de decisión tienen
que ser obligatoriamente enteras.

Para problemas de dos variables, es posible encontrar la solución observando la gráfica de la


región factible.

Ejemplo

máx. z=200x1+400x2

16x1+22x2≤100

0.5x1+0.75x2≤50

x1, x2≥0, x1, x2 enteros positivos.

La solución gráfica muestra la región factible:

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.

Evidentemente que, para mayores puntos en la región factible, el problema se vuelve


demasiado moroso.
4.1 MÉTODO DE RAMIFICACIÓN
El siguiente procedimiento puede utilizarse para resolver un problema de programación
entera.

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.

Para un problema de maximización, el valor óptimo de z para la relajación del problema es


siempre mayor o igual que el valor óptimo del problema original.

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.

Se dice que dichos subproblemas se encontraron por ramificación.


Se selecciona un subproblema arbitrario para resolverla.

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.

Si la solución no es entera se vuelve a dividir este subproblema en otros dos subproblemas y se


analiza de la misma manera. Si un subproblema tiene región no factible, el análisis de ese
subproblema terminó y se analiza el otro subproblema.

La ramificación continua a partir de aquellos subprogramas cuyas soluciones sean no enteras y


que den valores de z mayores que la cota inferior para problemas de maximización y continua
en los subprogramas que den menores valores de z que la cota superior en problemas 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

Eligiendo el subprograma 2, la solución gráfica es:

Se puede ver que si x1≥4 no hay solución factible.

Tomando el subprograma 3, la gráfica es:

La solución se encuentra en el punto D:x1=3, x2=0.4 con z=15.4. La rama es:

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

En el subprograma 4 es obligatorio que x2=0 para que se encuentre en la región factible.

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:

La solución óptima se encuentra en el punto E: x1=2.25 y x2=1 con z=12.25.

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.

También podría gustarte