Programación Lineal Ficha para enseñar a utilizar el Solver de EXCEL en la resolución de problemas de Programación Lineal Ejemplo: Plan de producción de PROTRAC En esta ficha vamos a comentar cómo se construyó y resolvió el problema que se encuentra enunciado, planteado y resuelto en el fichero Plan de producción de PROTRAC.xls, con el objetivo de que al final tú seas capaz de resolver cualquier problema de Programación Lineal, bien planteado, de la misma manera. Ten abierto dicho fichero al ir leyendo éste y vete analizando hasta entender bien cada cosa: el orden en el que se ha colocado cada tipo de información, qué hay en cada casilla de la hoja de cálculo y de dónde sale cada cosa para intentar hacer lo mismo tú en cualquier problema nuevo de Programación Lineal que se te plantee. Solver es una Herramienta de EXCEL que nos puede ayudar a resolver algunos tipos de problemas de optimización matemática, entre ellos los de Programación Lineal y no Lineal. Puedes activarla en caso de que no esté, de la siguiente forma: Si tienes la versión 2003, ve a Herramientas, Complementos, Solver, Aceptar (y a partir de entonces la tendrás activada y la encontrarás en el Menú de Herramientas). Si tienes la versión 2007, ve al botón de Microsoft Office, Opciones de Excel, Complementos y en el cuadro Administrar seleccione Complementos de Excel, Ir, en el cuadro de Complementos disponibles active la casilla de verificación Complemento Solver, Aceptar. Una vez instalado estará disponible en el grupo Análisis de la ficha Datos. Observa que en nuestro ejemplo de PROTRAC las variables de decisión deben tomar valores enteros (condiciones de integridad). Se dice que este problema es de Programación Lineal Entera. Cuando un problema de Programación Lineal admite soluciones no enteras para todas las variables de decisión se dice que es de Programación Lineal Continua y cuando se requiere que unas sean enteras y otras no se dice de Programación Lineal Mixta. Solver resuelve todos estos casos, pero existen grandes diferencias entre ellos por el Coste computacional (número de operaciones) que cada uno consume. Empezaremos por resolver el problema de Programación Lineal Continua 1 asociado a nuestro ejemplo y luego lo completaremos con las condiciones de integridad y lo resolveremos completo. Aunque todo se puede hacer en una sola hoja de EXCEL hemos preferido hacerlos en 3 para que se entienda mejor. En las 3 hojas está el mismo modelo, en la primera sólo planteado (sin utilizar Solver), en la segunda resuelto con Solver sin condiciones de integridad y en la tercera resuelto con Solver completo, es decir, con las condiciones de integridad. 1.- Construcción del modelo en la hoja de cálculo Una vez que hayas entendido bien cómo se ha llegado al modelo simbólico a partir del enunciado real del problema, pasamos a comentar la construcción del modelo en la hoja de cálculo por filas: - - Primero le hemos puesto los rótulos de las columnas que van a contener la información referente a las máquinas E-9 y F-9 (casillas B19 y C19) (los nombres de las variables) Luego hemos reservado (dejado libres por ahora) unas casillas (la B20 y C20 que representan las variables) para que en ellas aparezcan cuando se resuelve el problema, los valores de las variables de decisión (o interés) que son las cantidades que se deben producir de cada máquina. - Debajo justo de las casilla de las variables de decisión (o interés) (casillas B21 y C21) hemos puesto los coeficientes de la función objetivo y a la derecha de estos (en la casilla D21) nos hemos construido la función objetivo. Coloca el cursor en la casilla D21 y observa la fórmula con la que se ha construido (=SUMAPRODUCTO(B20:C20;B21:C21)) e intenta entender lo que significa, es decir, equivale al 5000E+4000F del planteamiento simbólico. - Luego hemos puesto los coeficientes de las restricciones (casillas B y C de las filas 23 a la 27) y a la derecha hemos construido cada restricción. Por ejemplo observa cómo se construye la primera restricción entendiendo lo que hay en las casillas D23 (observa que contiene la fórmula para el lado izquierdo de la primera restricción) y F23 (observa que contiene el término independiente del lado derecho de la primera restricción). El signo “<” que aparece como rótulo en la casilla E23 lo hemos puesto con el signo < del teclado y luego lo hemos subrayado. Para ver si lo has entendido bien di cuales son, sin mirarlas, las fórmulas que se encuentran en las casillas D24 y D25. Nótese que con EXCEL una vez que tenemos la fórmula de la casilla D23 la podemos arrastrar para las casillas D24 hasta la D27. Ten en cuenta que en las fórmulas en EXCEL se pone el signo $ en las coordenadas que no queremos que cambien al arrastrar las fórmulas. En este caso las casillas de las variables de decisión se escribirán así $B$20:$C$20. 2 - Hemos colocado primero todas las restricciones con < y luego todas las de > puesto que, como veremos, el tenerlas ordenadas así ayuda a luego resolver con Solver. - Hemos coloreado las casillas de las variables de interés y de la función objetivo porque una vez resuelto el problema los valores óptimos en los que más interés tendremos es en esos. También son de interés los valores de las variables de holgura (que recogen la diferencia, siempre no negativa, entre los dos lados de cada restricción). Colócate encima de la casilla G23 ó G27 para que veas cómo se calculan las holguras de las restricciones de < o >, respectivamente). - Para que nos salga en las celdas que están en dólares el signo $ las marcamos, hacemos click en el botón derecho del ratón, elegimos Formato de celda, luego Número, luego Moneda y la moneda que nos interese. 2.- Optimización del modelo construido en la hoja de cálculo (Caso de Programación Lineal Continua) Una vez que está la hoja de cálculo construida para optimizarla se hace click en Datos y luego en Solver, si es la versión de EXCEL 2007 (o en Herramientas y luego en Solver si es la versión anterior) y se nos abre la siguiente ventana “Parámetros de Solver” que vamos rellenando: Nótese que esta ventana en principio nos aparece vacía y nosotros le vamos introduciendo las coordenadas que nos pide (en esta ficha sólo explicaremos 3 lo básico, cualquier otra cosa que desees saber de las que aparecen consúltalo en la ayuda del programa): - Celda objetivo: introducimos la coordenada de la celda donde hemos colocado la función objetivo1 - Cambiando las celdas: introducimos las celdas que hemos elegido para poner las variables de decisión - Marcar si el problema es de Máximo o de Mínimo - Sujeto a las siguientes restricciones: Se hace click en Agregar para introducir cada grupo de restricciones y se nos abre la siguiente ventana “Agregar restricción” - Referencia de la celda: introducir la celda donde está el lado derecho de la restricción. Se pueden introducir todas las restricciones de cada tipo de signo de una sola vez. Por ejemplo. Si introducimos de una sola vez todas las de <, en esta celda ponemos $D23:$D25, que simplemente se puede hacer marcando dichas celdas con el ratón. - <: elegir el signo que tiene/n la/s restricción/es que estamos introduciendo - Restricción: introducir la/s celda/s del lado derecho de la/s restricción/s en cuestión Para introducir nuevas restricciones se le da a Agregar. Cuando las hayamos introducido todas, menos las de no negatividad e integridad, le damos a Aceptar. Para introducir las restricciones de no negatividad, en la ventana “Parámetros de Solver” se hace click en Opciones y sale la ventana “Opciones de Solver”: Para dar en esta ventana la coordenada de una o varias casillas simplemente hay que colocar el cursor en dicha/s casilla/s. 1 4 Lo principal que hay que marcar es Adoptar modelo lineal (puesto que nuestro modelo es lineal y Solver resuelve también problemas no lineales) y Adoptar no negativos. (El resto de las cosas que aparecen en esta ventana no las comentamos detalladamente en esta ficha básica, puesto que para ello habría que conocer los métodos de resolución para cada tipo de problema y no están en el temario de la asignatura). Hacemos click en Aceptar y volvemos a la primera ventana donde hacemos click en Resolver y nos aparece el problema resuelto en nuestra hoja de cálculo, con los valores óptimos de las variables de decisión en las casillas con borde rojo, el valor óptimo de la función objetivo en la casilla con borde verde y en las casillas con borde azul las holguras que quedan en las restricciones al sustituir en ellas los valores óptimos de las variables. 3.- Comentario del resultado en el contexto real Según la solución de Solver sobre el problema planteado lo óptimo es producir 4,5 máquinas E-9 y 7 máquinas F-9, obteniendo así unas ganancias óptimas de $50500. Como estamos en un contexto real, aunque matemáticamente esta es la solución óptima, no tiene sentido económico producir 4,5 máquinas. Esto ha ocurrido porque resolvimos el problema con variables continuas y Solver no estaba informado de que las variables tienen que ser enteras para que tengan sentido en el enunciado real. ¿Qué ocurriría si redondeamos la solución? Podemos tener la tentación de redondear a la baja la solución que nos ha dado Solver y decir que E=4 y F=7. Si sustituimos esos valores a mano en la hoja de cálculo obtenemos que el valor óptimo de la ganancia es 48000$ y que todas las holguras de las ecuaciones han salido no negativas (lo que 5 implica que esta nueva “solución” es factible). Si lo que hacemos es redondear al alza, es decir E=5 y F=7, al sustituirla a mano en la hoja de cálculo obtenemos que la ganancia es $53000 pero dicha solución no es factible, es decir no verifica las restricciones (porque las holguras salen negativas). Aunque no sepas por ahora de dónde nos hemos sacado la solución E=5, F=6 compruebe sustituyéndola en la hoja de cálculo que la función objetivo vale $49000 y que todas las holguras han salido no negativas (por tanto es factible). Si la comparamos con la solución que habíamos intentado de E=4, F=7 nos damos cuenta que E=5, F=6 es mejor, porque la función objetivo da mayor y estamos maximizando. ¿Cual es la conclusión por ahora ante la tentación de redondear la solución que teníamos? Pues que: Redondear una solución de Programación Lineal Continua no siempre nos conduce a la solución óptima del problema de Programación Lineal Entera. Veamos ahora cómo se le da a Solver la información de que hay variables que son enteras. En el momento en el que agregamos las restricciones del problema, agregamos también otra de esta forma: Resolver y observar la solución óptima del problema. Interpretación de la solución óptima: Como E=5 , F=6 (lo óptimo es construir 5 máquinas E-9 y 6 máquinas F-9), lo cual implica que el valor de la función objetivo se interprete como que la mayor ganancia que se puede obtener es $49000. Si observamos las holguras de las restricciones podemos comentar que: la primera es 10 (lo que se interpreta como que sobran 10 horas de las 150 disponibles en el Departamento A), la segunda es 0 (esto es, se utilizan el total de horas disponibles del Departamento B), la tercera es 13 (que por ser >0, la interpretación es que se satisface con holgura el mínimo requerido de producción de máquinas F-9), La cuarta es 75 (lo que se interpreta como que las horas destinadas a pruebas fueron 75 más de meta mínima convenida), la quinta es 6 (se han producido 6 máquinas más en total que las 5 mínimas obligadas por uno de los principales distribuidores). 6 Una alternativa “eficiente” en muchos casos Es importante comentar que resolver un problema de Programación Lineal Entera conlleva una cantidad de cálculos mayor que resolver el de Lineal Continua asociado, por lo que una alternativa “eficiente” en muchos casos es resolver el problema continuo sin añadir restricciones de integridad, y analizar si económicamente estamos seguros de que los errores que puedan cometerse en el redondeo pueden despreciarse (porque nunca vamos a obtener una ganancia mayor, ya que el conjunto factible con integridad es un subconjunto del conjunto factible sin integridad y tal vez sólo perdamos “pocos” dólares como mucho). Por todo ello, se opta como “compromiso práctico” por no añadir restricciones de integridad y concluir con la solución redondeada. Una forma de analizar económicamente la solución, esto es, de ver lo que podemos estar perdiendo como mucho, al elegir como óptima la de redondeo y no la del problema completo, es calcular la diferencia entre el valor óptimo de la función objetivo del problema continuo, y el valor de la función objetivo en la solución redondeada. Es decir, en nuestro ejemplo, si hubiéramos propuesto como solución E=4 F=7, sabemos que como mucho perderíamos$50500-$48000=$2500 respecto a la solución continua (referencia teórica irreal) y plantearnos si esto es “suficientemente bueno” o si, por el contrario, nos compensa resolver el problema de programación entera. En este caso, la resolución de este segundo problema nos permitiría ganar 1000$ más que si nos hubiéramos quedado con la solución redondeada del problema continuo. Es decir, “perder” 1500$ respecto a la solución continua (referencia irreal). 7