MÉTODO+SIMPLEX+O+DANTZIG

El método del simplex desarrollado por G. B. Dantzig es un procedimiento iterativo que, partiendo de una solución básica, permite ir mejorando sucesivamente esa solución hasta encontrar el programa óptimo. Las soluciones factibles se irán sucediendo una a otra en la medida que supongan una mejora en el rendimiento del programa (aumento del resultado en el caso de maximización o disminución del resultado en el caso de minimización).

Para la solución del problema por el método del simplex es necesario que las inecuaciones correspondientes a las distintas restricciones se conviertan en ecuaciones. Esta conversión facilita notablemente las operaciones matemáticas de cálculo. Esta conversión se realiza a través de las denominadas **variables de holgura**, que se introducen en cada una de las restricciones que vienen dadas como inecuaciones, y representas la capacidad ociosa de los distintos recursos o factores productivos limitados.

Si esas variables, que representan la capacidad ociosa de los distintos factores productivos limitados, toman el valor cero en el programa óptimo significará que la cantidad disponible del recurso correspondiente ha sido consumida en su totalidad. Sin embargo, si toma algún valor positivo indicará que el factor productivo correspondiente no se ha utilizado en su totalidad y que, en consecuencia, existe capacidad ociosa del mismo.

Se introducirá una variable de holgura distinta en cada una de las restricciones que no vienen dadas como igualdades, es decir, que son inecuaciones. De esta forma, al introducir las variables de holgura en el ejemplo que venimos analizando, quedaría así:

Como puede apreciarse en las expresiones, las variables de holgura se corresponden con los procesos //P3//, //P4//, y //P5//, que vienen expresados por los siguientes vectores unitarios:

Así pues, los **vectores representativos de los procesos de holgura** forman una matriz unidad, es decir, una matriz en la que todos los elementos son ceros excepto los de la diagonal principal que son unos. Los niveles ( //hi// ) de las variables de holgura representan la capacidad ociosa o cantidad no utilizada de los distintos factores productivos limitados. En el ejemplo, hemos considerado que esa capacidad ociosa no representa ningún beneficio o coste para la empresa, razón por la cual esas variables aparecen en la función objetivo con un coeficiente distinto de cero, normalmente negativo en el caso de maximización.

Sin entrar en demostraciones matemáticas, podemos decir que el programa óptimo de producción debe estar formado por tantos procesos como factores limitados existan, es decir, tantos procesos como restricciones haya en el problema. En nuestro caso tenemos tres restricciones y por tanto, el programa óptimo estará constituido por tres procesos, es decir, habrá tres procesos con niveles distintos de cero. Esta norma no se cumple en el caso de las **soluciones degeneradas**, para este caso especial, el número de procesos que forma el programa óptimo, que puede estar formado tanto por variables reales (procesos productivos que suponen una transformación de inputs en outputs) como por variables de holgura, consumirá la totalidad de las existencias de los factores limitados.

Cualquier programa que reúna estas condiciones, es decir, que esté formado por tantos procesos como restricciones y que cumpla las restricciones en forma de igualdad (consuma todas las existencias), será un programa efectuable. El programa óptimo será aquel programa efectuable que proporcione el máximo beneficio o mínimo coste.

El método de operar del simplex es fácil de entender. Consiste en partir de un programa efectuable, denominado programa base, e ir mejorándolo sucesivamente mediante la introducción, uno a uno, de otros procesos no incluidos en dicho programa, lo que supondrá la eliminación, en cada iteración, de uno de los procesos que formaban parte del programa anterior

Para evitar cálculos engorrosos es conveniente partir de un programa base cuyos valores sean fáciles de determinar. Por esta razón, el programa base estará constituido por procesos cuyos vectores representativos sean unitarios, y en los que los unos estén situados en diferentes filas. Esto es, los procesos de holgura //P3//, //P4//, //P5//. Los niveles a los que se situarían esos procesos se obtienen mediante la resolución de las ecuaciones del problema. Como los demás procesos no incluidos en el programa base (//P1// y //P2//) tienen niveles cero (//X1// = 0 y //X2// = 0), y al ser vectores unitarios, los niveles de las variables de holgura coincidirán con los valores de los términos independientes de las ecuaciones. El programa base constituido por los procesos de holgura implica no producir nada, quedando, pues, todas las existencias ociosas. Este programa se puede expresar matemáticamente de la siguiente forma:

El rendimiento de este programa sería igual a cero, pues son nulos los rendimientos de los distintos procesos que lo forman. El procedimiento del simplex consiste en ir introduciendo alguno de los procesos que no han sido utilizados en dicho programa y eliminando alguno de los que están (para que el programa siempre esté formado tanto por procesos como por restricciones), de forma que se incremente el beneficio. Este proceso se realiza de forma iterativa hasta que ningún proceso que se introduzca mejore el rendimiento del programa obtenido; en este caso estaríamos en presencia del programa óptimo. Los cálculos de este proceso pueden realizarse mediante tablas que facilitan considerablemente la tarea operatoria. La primera tabla del simplex correspondiente al programa base sería la mostrada en la tabla 5.1.


 * TABLA 5.1.** //Primera tabla del simplex//

La fila (1) de la tabla recoge los distintos procesos ( //Pi// ) que pueden ser utilizados por la empresa. En nuestro ejemplo, esta fila está formada por los procesos de fabricación de televisores y videos, y por los tres procesos correspondientes a las variables de holgura. La fila (2) indica los rendimientos directos ( //ci// ) de los distintos procesos. Estos rendimientos son los coeficientes de la función objetivo. La columna (a) indica los procesos que forman el programa base, es decir, los tres procesos correspondientes a las variables de holgura. La columna (b) representa los rendimientos directos de los procesos del programa base. La columna (c) expresa los niveles ( //xi//, //hi// ) a los que se sitúan los procesos que forman el programa base y que satisfacen las ecuaciones del problema. En el programa base, esos niveles coinciden con los términos independientes de las ecuaciones ( //P0// ). Para comprender el significado de las filas (3) y (4), así como de los elementos que forman la parte central de la tabla, es preciso introducir los conceptos de **rendimiento marginal de proceso**.

El programa base supone el consumo de la totalidad de las existencias disponibles. Por ese motivo, si quisiéramos introducir un nuevo proceso en dicho programa, necesariamente los procesos que forman dicho programa deben reducir su nivel de utilización para permitir el consumo que supone la ejecución del nuevo proceso. Así, si en nuestro programa base introdujéramos el proceso //P1//, esto provocaría una disminución en los niveles de //P3//, //P4// y //P5//. Producir un televisor (realizar una vez el proceso //P1//) provoca una reducción de una unidad en el nivel de //P3//, una unidad en el nivel de //P4// y tres unidades en el nivel de //P5//. De esta forma el rendimiento del programa aumentaría en el beneficio que supone fabricar un televisor (rendimiento directo), pero también disminuiría en la medida que disminuye el nivel de utilización de los procesos que forman el programa base (**rendimiento indirecto**). En nuestro caso esta disminución es cero debido a que los procesos que forman el programa base tienen rendimiento nulo y, por tanto, el rendimiento indirecto de los procesos será cero.

El rendimiento indirecto de un proceso se obtiene poniendo dicho proceso como combinación lineal de los procesos del programa base. Por ejemplo, el rendimiento indirecto del proceso //P1// se obtendría del siguiente modo:

Así pues, los elementos de la parte central de la tabla ( //xij// ) representan los valores que permiten obtener, mediante combinación lineal de los procesos del programa base, un determinado proceso //Pj//. Estos valores pueden ser tanto positivos como negativos, pues no representan niveles de utilización lineal de vectores.

Puede observarse que en la primera tabla del simplex esos elementos de la parte central coinciden con los coeficientes de las variables en las diferentes ecuaciones del problema, debido a que los procesos del programa base son vectores unitarios. Además, en los procesos que forman el programa base o efectuable esos valores siempre adoptarán la forma de vectores unitarios, pues para obtener, por ejemplo, //P3// como combinación lineal de //P3//, //P4// y //P5//, basta multiplicar //P3// por uno, siendo los otros dos valores iguales a cero. Los procesos que formen parte de los sucesivos programas efectuables siempre vendrán representados, en la correspondiente tabla del simplex, por vectores unitarios.

En resumen, la fila (3) representa los rendimientos indirectos de los distintos procesos. Los valores de esta fila se obtienen multiplicando la columna (b), representativa de los rendimientos directos de los procesos que forman el programa base, por los valores //xij// de la columna correspondiente. En la primera tabla, al ser los rendimientos de la columna (b) ceros, los rendimientos indirectos de todos los procesos serán también ceros.

El rendimiento marginal ( //wi// ) de un proceso es la diferencia entre el rendimiento directo ( //ci// ) que provoca la introducción de dicho proceso en el programa y el rendimiento indirecto ( //zi// ) del mismo, debido a la disminución de los niveles de utilización de los procesos que forman dicho programa. Siempre que el rendimiento marginal de un proceso sea positivo, interesa introducirlo en el programa correspondiente, pues el incremento de beneficio que genera es mayor que la disminución del beneficio provocada por la utilización de los procesos que integran dicho programa. La última fila de la matriz (4) recoge esos rendimientos marginales, y se obtiene restando las filas (2) y (3).

En nuestro ejemplo, los procesos //P1// y //P2// tienen rendimientos marginales positivos y, por tanto, la introducción de cualquiera de ellos en el programa permitiría incrementar su rendimiento. Interesará introducir aquel proceso que proporcione un mayor rendimiento marginal, es decir, el proceso //P2//. Una vez determinado el proceso que se introducirá en el programa base, hay que conocer a qué nivel se realizará, esto es, cuántas veces repetiremos el proceso //P2// (cuántos videos fabricaremos).

Al introducir el proceso seleccionado a un determinado nivel, //X´2//, es necesario reducir el nivel de los procesos que forman parte del programa base. Para determinar esta disminución, ponemos //P2// como combinación lineal de dichos procesos.

Para determinar el nivel al que entraría este nuevo proceso, es preciso tener en cuenta la característica de los programas efectuables, la cual es que están formados por tantos procesos como restricciones o factores limitados existen en el problema. Por tanto, la introducción del nuevo proceso debe provocar la salida de alguno de los procesos antiguos. Esta salida implica la no realización de ese proceso, es decir, su nivel será igual a cero. Por tanto, para determinar el proceso que sale del programa, igualamos a cero las expresiones representativas de los nuevos niveles y calculamos el valor de //X´2// que, haciendo cero una de esas expresiones, mantiene a las demás positivas, pues los niveles de los procesos siempre deben ser positivos.

De esos tres valores elegiremos el menor (100), pues permite hacer cero el nivel del proceso //P4//, y positivos los demás. Si se observa la tabla del simplex, estos valores se obtienen dividiendo la columna (c) entre los elementos de la parte central de la tabla correspondientes a la columna del proceso que ha entrado en el programa //P2//.

En consecuencia, los niveles de los procesos que forman el nuevo programa efectuable son:

Es decir, la empresa fabricaría 100 videos, dejaría sin ajustar 50 transformadores y dispondría de 200 horas de acabado sin utilizar. Este programa efectuable le reporta a la empresa un beneficio de 3000 €. Podemos entonces construir la segunda tabla del simplex en la que aparecerá el nuevo programa efectuable considerado.


 * TABLA 5.2. Segunda tabla del simplex**

Los elementos centrales de la tabla pueden obtenerse resolviendo las sucesivas combinaciones lineales de los procesos del programa (vectores procesos) que estamos analizando:

Sin embargo, la resolución de las ecuaciones que derivan de esa expresión resulta tediosa. Por esta razón, se utiliza la técnica de eliminación de Gauss-Jordan para obtener estos elementos a partir de los valores de la tabla anterior. Este método utiliza los conceptos de pivote y semipivote. El **pivote** es el elemento de la tabla situado en la casilla intersección entre la fila del proceso que sale y la columna del proceso que entra. En la primera tabla el pivote es de valor **2** ( //x42// ). Existe un semipivote para cada uno de los procesos que permanecen en el programa. El **semipivote** de un proceso que permanece es el valor situado en la casilla intersección entre la fila correspondiente a ese proceso y la columna del proceso que ha entrado. En la primera tabla esos valores son 1 ( //x32// ) y 4 ( //x52// ).

De esta forma, los valores para la segunda tabla correspondientes a la fila del proceso que ha entrado en el programa ( //P2// ), se obtendrán dividiendo los valores de la fila del proceso que ha salido ( //P4// ), pertenecientes a la primera tabla, entre el pivote.

Respecto a los procesos que permanecen, el valor de cada casilla en la segunda tabla se obtendrá restando al valor de esa misma casilla (de la primera tabla) el producto del semipivote correspondiente y el valor que en la nueva tabla tiene para esa columna el proceso que ha entrado.

Veamos como ejemplo el cálculo de los valores del proceso //P1//, es decir, la columna primera:

Estas mismas expresiones pueden ser utilizadas para calcular los niveles ( //xi// ) a los que se van a situar los procesos en el nuevo programa. De esta forma, es posible calcular con rapidez los elementos de la parte central de la tabla. La segunda tabla muestra que el proceso //P1// tiene un rendimiento marginal positivo y, por tanto, debe ser incluido en el nuevo programa. el proceso que se eliminaría del programa sería el //P3//, que, como muestra la última columna de la tabla, es el que proporciona un menor nivel de entrada para el nuevo proceso. De este modo llegaríamos a la tercera tabla del simplex (tabla 5.3.).


 * TABLA 5.3.** //Tercera tabla del simplex//

Como puede apreciarse, en esta tercera tabla todos los rendimientos marginales son ceros o negativos. Por tanto, no puede mejorarse el rendimiento proporcionado por el programa efectuable analizado en dicha tabla. Este programa será el programa óptimo de producción que, como en el caso del método gráfico, supone la fabricación de 100 televisores y de 50 videos, con un beneficio total de 3500 €. Este plan de producción implica el consumo total de la capacidad disponible en las secciones de ajuste y montaje, dejando sin utilizar 100 horas del taller de acabado, que viene indicado por el valor de la variable de holgura que forma parte del programa óptimo.