Algoritmo símplex

19
Algoritmo símplex En optimización matemática , el término algoritmo Símplex habitualmente se refiere a un conjunto de métodos muy usados para resolver problemas de programación lineal , en los cuales se busca el máximo de una función lineal sobre un conjunto de variables que satisfaga un conjunto de inecuaciones lineales . El algoritmo Símplex primal fue desarrollado por el matemático norteamericano George Dantzig en 1947, y procede examinando vértices adyacentes del poliedro de soluciones. Un algoritmo Símplex es un algoritmo de pivote . Un método llamado de manera similar, pero no relacionado al anterior, es el método Nelder-Mead (1965) o método de descenso (o ascenso) símplex; un método numérico que busca un mínimo (o máximo) local de una función cualquiera examinando en cada paso los vértices de un simplex . El algoritmo del método Símplex fue elegido como uno de los 10 algoritmos más importantes del s.XX (SIAM News, Volume 33, Number 4). Formulación Matemática del problema Considerar un problema de programación lineal, maximizar sujeto a El algoritmo Símplex requiere que el problema de programación lineal esté en la forma aumentada de la programación lineal. El problema puede ser escrito como sigue, en forma de matriz: Maximizar en: donde x son las variables desde la forma estándar, x s son las variables de holgura introducidas en el proceso de aumentación, c contiene los coeficientes de optimización, describe el sistema de ecuaciones contraídas, y Z es la variable a ser maximizada.

description

algoritmo simplex

Transcript of Algoritmo símplex

Page 1: Algoritmo símplex

Algoritmo símplexEn optimización matemática, el término algoritmo Símplex habitualmente se refiere a un conjunto de métodos muy usados para resolver problemas de programación lineal, en los cuales se busca el máximo de una función lineal sobre un conjunto de variables que satisfaga un conjunto de inecuaciones lineales. El algoritmo Símplex primal fue desarrollado por el matemático norteamericano George Dantzig en 1947, y procede examinando vértices adyacentes del poliedro de soluciones. Un algoritmo Símplex es un algoritmo de pivote.

Un método llamado de manera similar, pero no relacionado al anterior, es el método Nelder-Mead (1965) o método de descenso (o ascenso) símplex; un método numérico que busca un mínimo (o máximo) local de una función cualquiera examinando en cada paso los vértices de un simplex.

El algoritmo del método Símplex fue elegido como uno de los 10 algoritmos más importantes del s.XX (SIAM News, Volume 33, Number 4).

Formulación Matemática del problema

Considerar un problema de programación lineal,

maximizar 

sujeto a 

El algoritmo Símplex requiere que el problema de programación lineal esté en la forma aumentada de la programación lineal. El problema puede ser escrito como sigue, en forma de matriz:

Maximizar   en:

donde x son las variables desde la forma estándar, xs son las variables de holgura introducidas en el proceso de aumentación, c contiene los coeficientes de optimización, describe el sistema de ecuaciones contraídas, y Z es la variable a ser maximizada.

El sistema es típicamente no determinado, desde que el número de variables excede el número de ecuaciones. La diferencia entre el número de variables y el número de ecuaciones nos da los grados de libertad asociados con el problema. Cualquier solución, óptima o no, incluirá un número de variables de valor arbitrario. El algoritmo Símplex usa cero como valor arbitrario, y el número de variables con valor cero es igual a los grados de libertad.

Valores diferentes de cero son llamados variables básicas, y valores de cero son llamadas variables no básicas en el algoritmo símplex.

Esta forma simplifica encontrar la solución factible básica inicial, dado que todas las variables de la forma estándar pueden ser elegidas para ser no básicas (cero), mientras que todas las

Page 2: Algoritmo símplex

nuevas variables introducidas en la forma aumentada, son básicas (diferentes de cero), dado

que su valor puede ser calculado trivialmente (  para ellas, dado que la matriz problema aumentada en diagonal es su lado derecho)

En cada una de las desigualdades que se plantean en el modelo matemático de programación lineal, se plantean desigualdades de <, >, ≤, ≥ o =; estas desigualdades se convierten en igualdades completando con variables de holgura si se trata de menor o igual que, o menor que; en el caso de que sea mayor o igual que o mayor que, se completa con variables de excedente, estas con signo negativo ya que como su nombre lo indica, es una cantidad que esta de excedente y hay que quitar para convertirla en igualdad; en caso se maneje el =, se manejan las variables artificiales.

Conceptos básicos

Forma estándar

Es la igualación de las restricciones del modelo planteado, así como el aumento de variables

de holgura, o bien la resta de variables de exceso.

Forma canónica

En el método Símplex es de bastante utilidad la forma canónica, especialmente para explorar

la relación de dualidad.

Un problema de Programación Lineal se encuentra en la forma canónica si se cumplen las

siguientes condiciones:

Para el caso de la forma canónica de maximización:

- La función objetivo debe ser de maximización.

- Las restricciones son del tipo ≤.

- Las variables de decisión son mayores o iguales a cero.

Page 3: Algoritmo símplex

Para el caso de la forma canónica de la dieta:

- La función objetivo es minimizada.

- Las restricciones son de tipo ≥.

- Las variables de decisión son mayores o iguales a cero.

Modelo Ampliado (forma estándar)

Cuando se introduce en cada restricción una variable artificial que no contenga una variable de holgura.

Problema.- Una Carpintería elabora dos tipos de bates para baseball, uno de peso ligero usado en los juegos de ligas de menores y otro de peso mediano que se vende a los equipos de las ligas mayores.

El bate de menores requiere 1 minuto de torneado en tanto que el bate de mayores requiere 2 minutos de torneado, puesto que se le debe dar la forma y el peso especial. Por tanto, el bate de menores requiere 3 minutos de máquina lijadora y el otro requiere 2 minutos. El laqueado es hecho a mano y entonces solo puede producirse 400 medianos a la semana.

Cada semana se dispone 1000 minutos de torno y 1800 minutos de máquina lijadora. Hay tanta demanda que garantiza las utilidades de S/o 3.00 por cada bate

Page 4: Algoritmo símplex

ligero y de S/o4.00 por el otro. Determine el programa de producción óptima que le dé la máxima utilidad a la Carpintería.

Identificación de variables

• X1= Nº de bates ligeros producidos por semana

• X2=Nº de bates medianos producidos por semana

• Z= utilidad por semana

Formulación Matemática del Problema (forma canónica)

• Max z= 3x1 + 4x2

• Sujeto a

• X1 + 2x2 ≤ 1000 (tiempo disponible torno)

• 3x1 + 2x2 ≤ 1800 (tiempo disponible lijadora)

• X2 ≤ 400

• X1 ≥ 0, x2≥ 0

Forma estándar del Problema

• Max z= 3x1 + 4x2 + 0x3 + 0x4 + 0x5

• Sujeto a

• X1 + 2x2 + x3 = 1000

• 3x1 + 2x2 + x4 = 1800

• X2 + x5 = 400

xj ≥ 0, j=1,2,3,4,5

Variables de entrada

Estas suelen encontrarse en un criterio que se conoce como “Condición de optimalidad”, en un modelo, ya sea de maximización o minimización, y se refiere a la variable no básica en el renglón “z” con el coeficiente más negativo, si se trata de una maximización, o el coeficiente más positivo, si se trata de una minimización, la cual, en el la tabla de solución anterior, a excepción de la primer tabla, esta variable era una variable básica.

'Variables de salida

Esta variable es un punto extremo que se encuentra en un criterio conocido como “Condición de factibilidad”, en un modelo, ya sea de optimización o minimización, y se refiere a la variable básica asociada con la mínima razón no negativa con el coeficiente más negativo, si se trata de una maximización, o el coeficiente más positivo, si se trata de una minimización, la cual, en el la tabla de solución siguiente, pasará a ser variable no básica.

Page 5: Algoritmo símplex

Variables básicas

Variables no

básicas

Variable de

entradaVariable de salida

A X3, X4, X5, X6 X1, X2 X1 X6

B X3, X4, X5, X1 X6, X2 X2 X3

C X2, X4, X5, X1 X6, X3 X6 X4

D X2, X6, X5, X1 X4, X3 X3 X1

E X2, X6, X5, X3 X4, X1 X4 X2

Variable degenerada

Una variable degenerada es una variable básica que vale 0. Gráficamente esto puede ocurrir cuando más de dos rectas se intersequen en el mismo punto.

Base

Conjunto de variables básicas. En el ejemplo anterior, la base es {X3, X4, X5, X6}

Variable no restringida

Variable artificial

Se usa una variable artificial cuando las restricciones son = y ≥ y sucede cuando el

origen no se encuentra dentro de la región factible, tratando de llevar el modelo a

otra dimensión en la cual el origen si exista en la región.

Es aquella que puede tomar toda clase de valores positivos, cero y negativos puede escribirse como la diferencia de dos variables no-negativas.

Función objetivo:

Define la efectividad del modelo como función de las variables de decisión.

Page 6: Algoritmo símplex

Solución óptima

Ejemplo gráfico de la solución óptima

Siempre está asociada a un punto extremo de la región factible y satisface todas las restricciones si se evalúa en ellas así como es el punto que en el caso de maximización hace que el valor de z sea el máximo (más grande) y el caso de minimización sea el mínimo (más pequeño).

Solución óptima múltiple

Existen problemas lineales que no tienen una solución óptima única, sino que al contrario, tienen un número infinito de soluciones.Para detectar una solución múltiple en la tabla óptima, se deberá tener al menos una variable con su Zj-Cj=0 no básica.

Algoritmo del método Simplex

Este proceso que se repite una y otra vez, siempre inicia en un punto extremo de la región factible que normalmente es el origen, en cada iteración se mueve a otro punto extremo adyacente hasta llegar a la solución óptima.

Los pasos del Método Simplex son los siguientes:

1. Utilizando la forma estándar, determinar una solución básica factible inicial igualando a

las n-m variables igual a cero (el origen).

2. Seleccionar la variable de entrada de las variables no básicas que al incrementar su

valor pueda mejorar el valor en la función objetivo. Cuando no exista esta situación, la

solución actual es la óptima; si no, ir al siguiente paso.

3. Seleccionar la variable de salida de las variables básicas actuales.

Page 7: Algoritmo símplex

4. Determinar la nueva solución al hacer la variable de entrada básica y la variable de

salida no básica, ir al paso 2 (actualizar).

Ejemplo 1.- Utilizando el algoritmo Simplex resolver el problema:

• Max z= 3x1 + 4x2 + 0x3 + 0x4 + 0x5

• Sujeto a

• X1 + 2x2 + x3 = 1000

• 3x1 + 2x2 + x4 = 1800

• X2 + x5 = 400

Xj ≥ 0, j=1,2,3,4,5

U P1 P2 P3 P4 P5 B soluciones q

z 1 -3 -4 0 0 0 0

COLUMNA DE SOLUCIONES

Page 8: Algoritmo símplex

x3 0 1 2 1 0 0 1000 500

x4 0 3 2 0 1 0 1800 900

x5 0 0 0 0 0 1 400 400

C-Z: 3 4 0 0 0

ingresa x2 sale x5´

x3 1 0 1 0 -2 200 200

x4 3 0 0 1 -2 1000 333.333

x2 0 1 0 0 1 400 Inf

C-Z: 3 0 0 0 -4

ingresa x1 sale x4´

x1 1 0 1 0 -2 200 -100

x4 0 0 -3 1 4 400 100

x2 0 1 0 0 1 400 400

C-Z: 0 0 -3 0 2

ingresa x5 sale x4.- U3 = 2200

x1 1.0 0 -0.5 0.5 0 400.0

Page 9: Algoritmo símplex

x5 0 0 -0.75 0.25 1. 100.0

x2 0 1.0 0.75 -0.25 0 300.0

C-Z: 0 0 -1.5000 -0.5000 0

Solución óptima: X= [400 300], debe fabricar 400 bates ligeros y 300 bates medianos obteniendo una utilidad máxima de U = 2400

Ejemplo 2

Considerando el problema de programación lineal:

Minimiza la siguiente función

Sujeta a

Se añaden las variables de holgura s y t, que se representan en la tabla canónica

Z x y z s t B

donde las columnas 5 y 6 representan las variables básicas s y t y la correspondiente solución básica posible es

Las columnas 2, 3 y 4 pueden ser seleccionadas como columnas pivotes, para este ejemplo se seleccionó la columna 4. Los valores de x resultantes de la elección de las filas 2 y 3 como filas pivotes son 10/1 = 10 y 15/3 = 5 respectivamente. De estos el mínimo es 5, por lo que la fila 3 sería la fila pivote. Operando los pivotes se produce

Page 10: Algoritmo símplex

Ahora columnas 4 y 5 representan las variables básicas z y s y la solución óptima correspondiente es

Para el paso siguiente, no hay entradas positivas en la fila objetivo y de hecho

por lo que el valor mínimo de Z es −20.

Ejemplo 3.- Resolver mediante el método simplex el siguiente problema:

Maximizar Z = f(x,y) = 3x + 2y

sujeto a: 2x + y ≤ 18

2x + 3y ≤ 42

3x + y ≤ 24

x ≥ 0 , y ≥ 0

Se consideran las siguientes fases:

1. Realizar un cambio de variables y normalizar el signo de los términos independientes.

Se realiza un cambio en la nomenclatura de las variables. Estableciéndose la correspondencia siguiente:

x pasa a ser X1

y pasa a ser X2

Como los términos independientes de todas las restricciones son positivos no es necesario hacer nada. En caso contrario habría que multiplicar por "-1" en ambos lados de la inecuación (teniendo en cuenta que esta operación también afecta al tipo de restricción).

Normalizar las restricciones.

Se convierten las inecuaciones en ecuaciones agregando variables de holgura, exceso y artificiales según la tabla siguiente:

Page 11: Algoritmo símplex

Tipo de desigualdad

Tipo de variable que aparece

≥ - exceso + artificial

= + artificial

≤ + holgura

En este caso se introduce una variable de holgura (X3, X4 y X5) en cada una de las restricciones del tipo ≤, para convertirlas en igualdades, resultando el sistema de ecuaciones lineales:

2·X1 + X2 + X3 = 18

2·X1 + 3·X2 + X4 = 42

3·X1 + X2 + X5 = 24

Igualar la función objetivo a cero.

Z - 3·X1 - X2 - 0·X3 - 0·X4 - 0·X5 = 0

Escribir la tabla inicial del método Simplex.

La tabla inicial del método Simplex está compuesta por todos los coeficientes de las variables de decisión del problema original y las de holgura, exceso y artificiales agregadas en el paso 2 (en las columnas, siendo P0 el término independiente y el resto de variables Pi coinciden con Xi), y las restricciones (en las filas). La columna Cb contiene los coeficientes de las variables que se encuentran en la base.

La primera fila está formada por los coeficientes de la función objetivo, mientras que la última fila contiene el valor la función objetivo y loscostes reducidos Zj - Cj.

La última fila se calcula como sigue: Zj = Σ(Cbi·Pj) para i = 1..m, donde si j = 0, P0 = bi y C0 = 0, y en caso contrario Pj = aij. Aunque al tratarse de la primera tabla del método Simplex y ser todos los Cb nulos se puede simplificar el cálculo, y por esta vez disponer Zj = -Cj.

Tabla I . Iteración nº 1

3 2 0 0 0

Base Cb P0 P1 P2 P3 P4 P5

Page 12: Algoritmo símplex

Tabla I . Iteración nº 1

P3 0 18 2 1 1 0 0

P4 0 42 2 3 0 1 0

P5 0 24 3 1 0 0 1

Z 0 -3 -2 0 0 0

Condición de parada.

Si el objetivo es la maximización, cuando en la última fila (fila indicadora) no existe ningún valor negativo entre los costes reducidos (columnas P1 en adelante) se alcanza la condición de parada.

En tal caso se llega al final del algoritmo ya que no existe posibilidad de mejora. El valor de Z (columna P0) es la solución óptima del problema.

Otro caso posible es que en la columna de la variable entrante a la base todos los valores son negativos o nulos. Esto indica que el problema no se encuentra acotado y su solución siempre resultará mejorable. Ante esta situación no es necesario continuar iterando indefinidamente y también se puede dar por finalizado el algoritmo.

De no ser así, se ejecutan los siguientes pasos de forma iterativa.

Elección de la variable entrante en la base.

Se determina en primer lugar la variable que entra en la base. Para ello se escoge la columna cuyo valor en la fila Z sea el menor de entre todos los negativos. En este caso sería la variable X1 (P1) de coeficiente -3.

Si existiesen dos o más coeficientes iguales que cumplan la condición anterior (caso de empate), entonces se optará por aquella variable que sea básica.

La columna de la variable que entra en la base se llama columna pivote (en color verde).

Variable saliente de la base.

Una vez obtenida la variable que entra en la base, se procede a determina cual será la variable que sale de la misma. La decisión se toma en base a un sencillo cálculo: dividir cada término independiente (columna P0) entre el elemento correspondiente de

Page 13: Algoritmo símplex

la columna pivote, siempre que ambos elementos sean estrictamente positivos (mayores que cero). Se escoge la fila cuyo resultado haya resultado mínimo.

Si hubiera algún elemento menor o igual a cero no se realiza dicho cociente. En caso de que todos los elementos de la columna pivote fueran de ésta condición se habría cumplido la condición de parada y el problema tendría una solución no acotada (ver teoría del método Simplex).

En este ejemplo: 18/2 [=9] , 42/2 [=21] y 24/3 [=8]

El término de la columna pivote que en la división anterior dio lugar al menor cociente positivo indica la fila de la variable de holgura que sale de la base. En este caso resulta ser X5 (P5), de coeficiente 3. Esta fila se llama fila pivote (en color verde).

Si al calcular los cocientes, dos o más resultados cumplen la condición para elegir el elemento saliente de la base (caso de empate), se escoge aquella que no sea variable básica (siempre que sea es posible).

La intersección de la fila pivote y columna pivote marca el elemento pivote, en este caso el 3.

Actualizar la tabla.

Los nuevos coeficientes de la tabla se calculan de la siguiente manera:

En la fila del elemento pivote cada nuevo elemento se calcula como:

Nuevo Elemento Fila Pivote = Anterior Elemento Fila Pivote / Pivote

En el resto de las filas cada elemento se calcula:

Nuevo Elemento Fila = Anterior Elemento Fila - (Anterior Elemento Fila en Columna Pivote * Nuevo Elemento Fila Pivote)

Con esto se normaliza el elemento pivote y su valor pasa a ser 1, mientras que el resto de elementos de la columna pivote se anulan (análogo al método de Gauss-Jordan).

Se muestran a continuación los cálculos para la fila P4:

Anterior fila P4 42 2 3 0 1 0

- - - - - -

Anterior Elemento Fila en Columna Pivote 2 2 2 2 2 2

x x x x x x

Nueva fila pivote 8 1 1/3 0 0 1/3

Page 14: Algoritmo símplex

= = = = = =

Nueva fila P4 26 0 7/3 0 1 -2/3

La tabla correspondiente a esta segunda iteración es:

Tabla II . Iteración nº 2

3 2 0 0 0

Base

Cb P0 P1 P2 P3 P4 P5

P3 0 2 01/3

1 0 -2/3

P4 0 26 07/3

0 1 -2/3

P1 3 8 11/3

0 0 1/3

Z 24 0 -1 0 0 1

Al comprobar la condición de parada se observa que no se cumple ya que entre los elementos de la última fila hay uno negativo, -1. Se continúa iterando nuevamente los pasos 6 y 7.

6.1. La variable que entra en la base es X2 (P2), por ser la variable que corresponde a la columna donde se encuentra el coeficiente -1.

6.2. Para calcular la variable que sale, se dividen los términos de la columna P0 entre los términos correspondientes de la nueva columna pivote: 2 / 1/3 [=6] , 26 / 7/3 [=78/7] y 8 / 1/3 [=24]. Como el menor cociente positivo es 6, la variable que sale de la base es X3 (P3).

6.3. El elemento pivote es 1/3.

7. Actualizando nuevamente los valores de la tabla se obtiene:

Page 15: Algoritmo símplex

Tabla III . Iteración nº 3

3 2 0 0 0

Base Cb P0 P1 P2 P3 P4 P5

P2 2 6 0 1 3 0 -2

P4 0 12 0 0 -7 1 4

P1 3 6 1 0 -1 0 1

Z 30 0 0 3 0 -1

Una nueva comprobación de la condición de parada revela que entre los elementos de la fila indicadora vuelve a haber uno negativo, -1. Significa que aun no se ha llegado a la solución óptima y hay que seguir iterando (pasos 6 y 7):

6.1. La variable que entra en la base es X5 (P5), por ser la variable que corresponde al coeficiente -1.

6.2. Se escoge la variable que sale calculando el cociente entre los términos de la columna de términos independientes y los términos correspondientes de la nueva columna pivote: 6/(-2) [=-3] , 12/4 [=3], y 6/1 [=6]. En esta ocación es X4 (P4).

6.3. El elemento pivote es 4.

7. Después de actualizar todas las filas, se obtiene la tabla siguiente:

Tabla IV . Iteración nº 4

3 2 0 0 0

BaseCb

P0 P1 P2 P3 P4 P5

P2 2 12 0 1 -1/2 1/2 0

P5 0 3 0 0 -7/4 1/4 1

P1 3 3 1 0 3/4 -1/4 0

Page 16: Algoritmo símplex

Tabla IV . Iteración nº 4

Z 33 0 0 5/4 1/4 0

Fin del algoritmo.

Se observa que en la última fila todos los coeficientes son positivos cumpliéndose, por tanto la condición de parada.

La solución óptima viene dada por el valor de Z en la columna de los términos independientes (P0), en este ejemplo: 33. En la misma columna se puede ver el punto donde se alcanza, observando las filas correspondientes a las variables de decisión que han entrado en la base: X1 = 3 y X2 = 12.

Deshaciendo el cambio de variables se obtiene x = 3 e y = 12.