Una de las temáticas que nunca falta en el desarrollo del curso de investigación de operaciones es el algoritmo simplex. En esta entrada te explicaremos cómo encontrar la solución óptima de un problema de programación lineal con el método simplex paso a paso; incluyendo problemas de minimización y maximización.
Te recordamos que en nuestro blog tenemos una sección donde abordamos los diferentes temas correspondientes a la programación lineal incluida nuestra calculadora online automática del método simplex/dos fases y la herramienta online para el método simplex/M grande. Las tablas que se presentarán en esta entrada fueron generadas por nuestras calculadoras.
¿Qué es el método simplex?
El método simplex es un procedimiento iterativo para resolver problemas de programación lineal, donde se busca obtener la solución óptima de la función objetivo que logre cumplir el conjunto de restricciones.
Este algoritmo fue desarrollado en el año 1947 por el matemático norteamericano George Dantzig.
Conceptos Básicos
Para comprender de mejor manera el método simplex vamos a revisar algunas definiciones.
El método parte de dos afirmaciones importantes:
- El conjunto de posibles soluciones o conjunto factible de cualquier problema de programación lineal puede representarse mediante un poliedro convexo.
- Si un problema de programación lineal tiene una solución óptima y finita, ésta estará en un vértice del poliedro convexo que representa al problema.
El algoritmo simplex parte de uno de los vértices del poliedro, y verifica si es el óptimo; si no lo es, busca un nuevo vértice adyacentes que va mejorando el valor de la función objetivo. Se continúa iterando hasta llegar al vértice que representa la solución óptima.
En la siguiente imágen vemos el poliedro que representa la solución factible y cómo realiza el recorrido el algoritmo simplex:
Pasos del Método Simplex
Los pasos a seguir en el método simplex son:
- Definir el problema en la forma estándar y generar nuestra matriz.
- Determinar la solución básica inicial.
- Seleccionar la variable de entrada utilizando la condición de optimalidad. Si no se puede seleccionar una variable de entrada, quiere decir que estamos en la condición óptima y finalizan las iteraciones. De otro modo se continúa con el siguiente paso.
- Seleccionar la variable de salida utilizando la condición de factibilidad.
- Actualizar nuestra matriz realizando las operaciones de Gauss-Jordan. Volver al paso número 3.
A continuación, vamos a detallar cada uno de los pasos a profundidad:
1. Definir el problema en la forma estándar y generar matriz
Un problema de programación lineal tiene la siguiente forma:
Donde x1, x2 … xn son las variables del problema.
Antes de llevar nuestro modelo a la forma estándar debemos verificar que todas las restricciones tienen el lado derecho no negativo. Es decir:
b1, b2 … bm ≥ 0
¿Qué hago si el lado derecho de la restricción es negativo?
Cuando el término independiente de la restricción es negativo, se debe multiplicar por -1 a toda la restricción para convertir el valor del lado derecho en positivo. Esta multiplicación también afectará al signo de la restricción de la siguiente forma:
- Si la restricción es del tipo mayor igual (≥), se deberá cambiar a menor igual (≤).
- En caso la restricción sea del tipo menor igual (≤), se deberá cambiar a mayor igual (≥).
- Si la restricción es una igualdad, el signo se mantiene.
Un caso especial es cuando el término independiente de la restricción es 0 y el signo es mayor igual (≥); en dicha situación, podemos multiplicar la restricción por (-1) para convertirla en menor igual (≤). Esto nos servirá para no utilizar variables artificiales como veremos posteriormente.
Convertir restricciones en igualdades
Para convertir las restricciones en igualdades va a depender de su signo:
- Si la restricción esmenor igual (≤): Para este tipo de restricciones debemos introducir una variable no negativa llamada de holgura y que son auxiliares para el problema. Por ejemplo:
- Cuando la restricción es mayor igual (≥): En este tipo de restricciones se debe restar una variable de exceso y así mismo agregar una variable artificial. Por ejemplo:
- Si la restricción es igual (=): En este tipo de restricciones debemos agregar una variable artificial de la siguiente forma:
El método Simplex “tradicional” o “básico” que abordaremos en esta entrada, se utiliza para los problemas de programación lineal donde todas las restricciones son del tipo menor e igual (≤). Para las restricciones que utilizan variables artificiales debemos utilizar el método de 2 fases o el método de la M Grande.
Generar la matriz
Aplicando lo indicado en los puntos anteriores tendríamos lo siguiente:
Una vez convertidas nuestras restricciones en ecuaciones procederemos a generar nuestra matriz:
En nuestra matriz podemos identificar lo siguiente:
- Vector de Costes: Es el vector que contiene los coeficientes de todas las variables de la función objetivo. En la parte inferior del vector se indican las variables en orden.
- Vector Solución: En esta columna se coloca la solución básica inicial y se va actualizando conforme se realizan las iteraciones. En la columna Cb se indica el coeficiente que corresponde a cada variable en el vector de costes. Así mismo siempre se iniciará con las variables de holgura en la base cuando el problema no tenga variables artificiales.
- Coeficientes Restricciones: Se colocan los coeficientes de las restricciones en el mismo orden en que fueron formuladas. La columna R contiene a los términos independientes también conocido como vector de recursos.
- Vector de costes reducidos: También conocido como precios sombra. Este vector se calcula multiplicando el vector solución por los coeficientes de las restricciones y se resta el vector de costes. Este procedimiento lo explicaremos al detalle en nuestra entrada del método de las dos fases y de la M Grande, donde se presentan variables artificiales. En los ejercicios que veremos en esta entrada, al no existir variables artificiales, el vector de costes será igual al vector de costes multiplicado por “-1”.
2. Determinar la solución básica inicial:
Como habíamos mencionado, el método simplex parte de un vértice de la región factible, es decir, un punto extremo. Con cada iteración avanzaremos de vértice en vértice hasta llegar a la solución óptima.
En nuestro caso, en la matriz elaborada podemos ver la solución básica inicial que sería S1=35, S2=18 y S3=26 (cada variable del vector solución se iguala al valor que se encuentra en la columna R. Estas variables se denominan variables básicas. El valor de Z inicial también se muestra en la columna R que es .
Las variables que no se encuentran en la base se denominan variables no básicas y en este caso serían X1 y X2. Ambas tienen un valor de 0. ¿Con esta solución tenemos el mejor valor de Z? Para saberlo debemos continuar al siguiente paso:
3. Seleccionar la variable de entrada utilizando la condición de optimalidad
Con nuestra matriz finalizada e identificada nuestra solución básica inicial revisaremos la condición de optimalidad.
Condición de Optimalidad:
La condición de optimalidad consiste en verificar si la solución actual que tenemos en nuestra matriz es la óptima o si se puede mejorar. Se verifica de la siguiente manera:
- En un problema de maximización si todos los coeficientes del vector de costes reducidos son mayores o iguales que cero, quiere decir que estamos en el punto óptimo y finaliza el problema.
- En un problema de minimización si todos los coeficientes del vector de costes reducidos son menores o iguales que cero, quiere decir que estamos en el punto óptimo y finaliza el problema.
Siguiendo con el ejemplo, siendo el problema de maximización, podemos ver que en el vector de costes reducidos existen valores negativos, lo que significa que no estamos en el óptimo. Eso quiere decir que debemos iniciar las iteraciones seleccionando la variable de entrada.
Variable de Entrada
La variable de entrada hace referencia a una de las variables no básicas que ingresará a la base y formará parte de la solución del problema.
Los criterios para seleccionar la variable de entrada depende si el problema es de maximización o minimización:
- Para problemas de maximización, la variable de entrada será la variable no básica con el coeficiente más negativo en el vector de costes reducidos.
- Para problemas de minimización, la variable de entrada será la variable no básica con el coeficiente más positivo en el vector de costes reducidos.
La columna donde está ubicada la variable se denomina columna pivote.
En el ejemplo nuestra variable de entrada sería X1 dado que tiene el valor más negativo en el vector de costes reducidos, es decir “-3”:
4. Seleccionar la Variable de Salida con la Condición de Factibilidad
A continuación explicaremos a que se refiere la condición de factibilidad:
Condición de Factibilidad
La condición de factibilidad, para cualquier problema ya sea de maximización o minimización, se verifica evaluando los valores de los coeficientes de la matriz de restricciones que se encuentran en la columna que corresponde a la variable de entrada.
Se debe verificar que al menos uno de sus valores sea mayor que 0 para obtener nuestra variable de salida. Si no se cumple esa condición significa que el problema tiene solución ilimitada no acotada.
Variable de Salida
Para determinar la variable que sale de la base se debe dividir el valor correspondiente a la columna R con su respectivo coeficiente en la columna de la variable de entrada (siempre y cuando este coeficiente sea estrictamente positivo).
De los resultados obtenidos, el menor valor corresponde a la fila que contiene a la variable de salida. Esta fila la llamaremos fila pivote
Veremos su aplicación con el ejemplo:
La variable de salida sería S2. El número que se encuentra al cruzar la fila pivote y la columna pivote es el elemento pivote; en nuestro caso sería 3:
5. Actualizar la Matriz
Una vez determinado nuestro elemento pivote, realizaremos las operaciones de Gauss-Jordan para formar nuestra matriz identidad. El nuevo valor de cada fila se calculará de la siguiente manera:
- Para la fila pivote: El nuevo valor se obtendrá dividiendo el valor actual entre el elemento pivote.
Nuevo Valor Fila Pivote = Valor Actual Fila Pivote / Elemento Pivote
- Para las otras filas: El nuevo valor se calcula restando del valor actual, la multiplicación del elemento de la fila que se encuentra en la columna pivote por el nuevo valor calculado en la fila pivote.
Nuevo Valor = Valor Actual – (Elemento Fila Columna Pivote*Nuevo Valor Fila Pivote).
Para entenderlo mejor, continuaremos resolviendo el ejemplo. Iniciaremos con la fila pivote:
En las otras filas realizaremos los cálculos de forma diferente. Iniciaremos con la fila de S1:
Para la fila S3 tenemos:
Finalmente en la fila Z tenemos:
La matriz resultante sería:
Cómo puedes ver la posición donde se encontraba nuestro elemento pivote ahora es 1 y los elementos que lo acompañan en la columna se convierten en 0. Es así que empezamos a formar nuestra matriz identidad.
Volver al paso número 3
Con este último resultado, volveremos al paso 3 y repetiremos el proceso. Cómo existen valores negativos en el vector de costes reducidos, podemos seguir optimizando.
El único valor negativo es -4, por lo que la variable que ingresará es X2.
Para elegir la variable que va a salir, dividimos cada valor de la columna R por su contraparte de la columna X2 (este último valor debe ser positivo)
- 23/(19/3) = 69/19 = 3.632
- El valor en la columna X2 es negativo por lo que no se toma en cuenta.
- 14/(16/3) = 21/8 = 2.625
El menor valor se encuentra en la fila de S3, por lo que es la variable que saldrá de la base. El elemento pivote es 16/3.
Realizamos nuevamente las iteraciones obteniendo el siguiente resultado:
En esta última matriz vemos que el vector de costes reducidos ya no tiene ningún valor negativo, lo que quiere decir que nos encontramos en el valor óptimo. Obtendremos los valores de las variables básicas y de Z de la siguiente forma:
Las variables que no se encuentran en la base tendrán valor de 0.
Solución: X1= 31/4, X2= 21/8, S1= 51/8, S2= 0, S3= 0, Z = 57/2
Ejemplo 1 – Maximizar:
A continuación se presenta un nuevo problema de maximización:
Función Objetivo
Maximizar:Z = 2X1+ 5X2
Sujeto a:
X1+ 6X2≤ 20
X1 + X2≤ 60
X1 ≤ 40
X1, X2≥ 0
Solución
El problema se adecuará al modelo estándar de programación lineal, agregando las variables de holgura, exceso y/o artificiales en cada una de las restricciones:
- Restricción 1: Tiene signo “≤” (menor igual) por lo que se agrega la variable de holgura S1.
- Restricción 2: Tiene signo “≤” (menor igual) por lo que se agrega la variable de holgura S2.
- Restricción 3: Tiene signo “≤” (menor igual) por lo que se agrega la variable de holgura S3.
A continuación se muestra el problema en la forma estándar. Se colocará el coeficiente 0 (cero) donde corresponda para crear nuestra matriz:
Para encontrar la variable que entra a la base elegimos el valor más negativo del vector de costes reducidos: -5. Por lo tanto la variable de entrada sería X2.
Para la variable de salida dividiremos los valores de la columna R con los de la columna X2 (siempre y cuando sean positivos). Los resultados en orden serían: 20/6, 60 y la última fila no se considera porque su valor correspondiente a X2 no es positivo (0). Se debe elegir el menor valor de esta división: 20/6; por lo tanto la variable de salida se encuentra en la primera fila: S1.
El elemento pivote se encuentra en el cruce de X2 y S1: 6.
Realizamos las reducciones de Gauss-Jordan:
Ingresa la variableX1y sale de la base la variableX2. El elemento pivote es1/6. Repetimos las operaciones de Gauss-Jordan y obtenemos la siguiente matriz:
En esta última matriz, todos los valores del vector de costes reducidos son positivos lo que indica que nos encontramos en el punto óptimo. El resultado sería:
Z = 40
X1= 20, X2= 0, S1= 0, S2= 40, S3= 20
Ejemplo 2 – Minimizar
Se tiene el siguiente problema:
Función Objetivo
Minimizar:Z = 3X1– 2X2
Sujeto a:
2X1 + X2≤ 18
2X1+ 3X2≤ 42
3X1– 2X2≤ 5
X1, X2≥ 0
Solución
El problema se adecuará al modelo estándar de programación lineal, agregando las variables de holgura, exceso y/o artificiales en cada una de las restricciones:
- Restricción 1: Tiene signo “≤” (menor igual) por lo que se agrega la variable de holgura S1.
- Restricción 2: Tiene signo “≤” (menor igual) por lo que se agrega la variable de holgura S2.
- Restricción 3: Tiene signo “≤” (menor igual) por lo que se agrega la variable de holgura S3.
A continuación se muestra el problema en la forma estándar. Se colocará el coeficiente 0 (cero) donde corresponda para crear nuestra matriz:
Como el ejercicios es de minimización, elegiremos el mayor valor positivo para la variable de entrada: 2. Por lo tanto la variable de entrada sería X2.
Para la variable de salida dividiremos los valores de la columna R con los de la columna X2 (siempre y cuando sean positivos). Los resultados en orden serían: 18/1, 42/3 y la última fila no se considera porque su valor correspondiente a X2 es negativo (-2). Se debe elegir el menor valor de esta división: 42/3=14; por lo tanto la variable de salida se encuentra en la segunda fila: S2.
El elemento pivote se encuentra en el cruce de X2 y S2: 3.
Realizamos las reducciones de Gauss-Jordan:
En esta última matriz, todos los valores del vector de costes reducidos son negativos, lo que indica que nos encontramos en el punto óptimo del problema de minimización. El resultado sería:
Z = -28
X1= 0, X2= 14, S1= 4, S2= 0, S3= 33
Nota: El valor de Z puede ser negativo ya que el problema resuelto no restringe su valor.
Ejercicios Resueltos del Método Simplex
A continuación encontrarás algunos ejemplos adicionales resueltos con nuestra calculadora online de programación lineal (versión de membresía):
Ejercicio Resuelto – Método Simplex para Minimizar
Ejercicio Resuelto – Método Simplex – Soluciones ilimitadas no acotadas
Ejercicio Resuelto – Método Simplex – Valor Óptimo con Infinitas Soluciones
Ejercicio 3.11 – Gutchi Company – Método Simplex 3 Variables – Investigación de Operaciones – Hamdy A. Taha
Reflexión Final
El método simplex es una temática infaltable cuando se aborda la programación lineal; así que es indispensable que conozcas cómo aplicarlo en los diferentes tipos de problemas. Con los ejemplos mostrados estarás en la capacidad de resolver ejercicios donde no se requiera el uso de variables artificiales. Recuerda que puedes comprobar tus resultados con nuestros aplicativos del método simplex online.
Si tienes alguna duda al respecto, te invitamos a mencionarlo en los comentarios. Puedes seguirnos en Facebooky suscribirte en nuestro canal deYoutubepara enterarte de nuestra últimas novedades. Somos Plan de Mejora, el mejor lugar para aprender, crecer y mejorar.
¿Quieres referenciar este artículo?
APA
MLA
Chicago