Ingeniería de Telecomunicación Planificación Avanzada de Redes de Comunicaciones Curso 2006-2007 Pablo Pavón Mariño Práctica 1. Introducción a la optimización mediante herramienta MS Excel Solver (I) Objetivos El objetivo de esta práctica es introducir al alumno en la utilización de la herramienta Solver, ejecutada sobre la aplicación Microsoft Excel, para resolver problemas de programación o optimización matemática finita. Minimizar/maximizar f(x 1,...,x n ) Sujeto a las restricciones: g 1 (x 1,...,x n ) 0... g m (x 1,...,x n ) 0 h 1 (x 1,...,x n ) 0... h m (x 1,...,x n ) 0 s 1 (x 1,...,x n )= 0... s p (x 1,...,x n )= 0 donde todas, algunas o ninguna de las variables de decisión x i pueden tener la restricción de ser enteras. La resolución de cada problema de optimización, requiere lo siguiente: - Planteamiento del problema sobre la página Excel - Variables de decisión - Función objetivo - Restricciones - Especificación de la situación de estos parámetros dentro de la página a través del cuadro de diálogo Parámetros de Solver (a la que se accede a través de Herramientas Solver).
- Lanzamiento del algoritmo de obtención de la solución. - Análisis de los resultados obtenidos. Documentación empleada La información necesaria para resolver esta práctica se encuentra en: - Página web http://www.solver.com (se recomienda el tutorial ahí presente). - Ayuda de la aplicación Microsoft Excel. - Instrucciones básicas presentes en este enunciado. 1. Instalación de la herramienta Excel Solver A continuación se describen las instrucciones para la instalación de la herramienta de optimización seleccionada: 1. Inicie Excel. 2. Seleccione Herramientas Complementos. 3. Marque en la lista de Complementos Disponibles aquel que aparezca indicado como Solver. 4. Seleccione Aceptar. A partir de ese momento la herramienta Solver debe estar disponible en el menú Herramientas. 2. Significado de los menús Solver La ventana Parámetros del Solver se utiliza para describir el problema de optimización. - Celda objetivo: debe indicar la celda donde se encuentra la fórmula que calcula la función objetivo a maximizar o minimizar.
- Valor de la celda objetivo: debe especificarse si la función objetivo debe ser minimizada, o maximizada. Si la casilla Valores de se encuentra activada, la solución buscada intentará que la función objetivo sea igual al valor ahí indicado. - Cambiando las celdas: contiene la ubicación de las variables de decisión del problema. - Sujeto a las siguientes restricciones: en este cuadro se seleccionan las celdas que contienen las funciones restricción. Cada restricción se añade mediante el botón Agregar..., lanzándose el cuadro de diálogo que se muestra a continuación. - Referencia de celda: Especifica la ubicación de la celda con la fórmula correspondiente a la restricción que se va a añadir. - Tipo de restricción: Se pueden añadir restricciones del tipo,, =, int (el contenido de la celda debe ser un entero), bin (el contenido de la celda debe ser entero 0 ó 1). - Restricción: Para el caso de restricción tipo,, =, debe especificarse aquí un valor numérico o una referencia a una celda con un valor constante (no una función). Nota: Por defecto, las variables de decisión no tienen la restricción de ser no-negativas. Esta condición debe añadirse en la ventana de Opciones si es necesaria. - Restablecer todo: borra el problema de optimización planteado, volviendo las variables de decisión a sus valores iniciales. - Estimar: No será utilizada. - Opciones: Permite abrir un cuadro de diálogo de configuración de opciones generales de la optimización:
- Tiempo: Número de segundos antes de que Solver se detenga. Obviamente, Solver se detendrá antes en el caso de haber llegado a la solución óptima. - Iteraciones: Ídem para el número de iteraciones del algoritmo de resolución del problema de optimización. - Precisión: Exactitud en los cálculos numéricos del algoritmo Solver. Por ejemplo, marca lo cerca que debe estar de cumplirse una restricción de igualdad para que se considere igual al resultado del lado izquierdo. - Tolerancia: Se especifica para programación entera. Indica un porcentaje dentro del cual se garantiza la optimalidad de la solución. Si se desea llegar a la solución óptima exacta, debe ponerse el valor cero en este campo, aunque ello puede suponer un notable incremento en el tiempo de ejecución. - Convergencia. - Adoptar modelo lineal: En el caso de que el problema de optimización a resolver sea lineal (entero, o no), es extremadamente recomendable el marcar esta casilla, ya que provoca que se empleen algoritmos optimización más eficientes que aprovechan la linealidad del problema. Nota: En ocasiones, sobre problemas lineales en los que se activa esta opción, Solver lanza una alarma indicando que no se cumplen las condiciones de linealidad (a pesar de que sí se cumplen). Esto es debido a una comprobación numérica que Solver realiza, que puede proporcionar resultados erróneos. Cambiando el valor del campo precisión de 0.000001 a 0.0001 se puede eliminar este falso error. - Asumir no negativos: En el caso de que las variables de decisión tengan todas la restricción de ser no negativas, el marcar esta casilla hace innecesario y redundante el añadir las n restricciones x i 0. - Usar escala automática: En el caso de que varias variables y datos del problema tengan escalas muy diferentes, el marcar esta casilla realiza un ajuste en la misma. - Mostrar resultado de iteraciones: Marcar esta casilla en el caso de que se desee que Excel muestre la evolución de las variables de decisión en cada una de las iteraciones del algoritmo, donde se va aproximando hacia el óptimo. - Estimación, Derivadas, Hallar por: Los valores de estos campos afectan al tipo de algoritmo que se empleará para la resolución de los problemas de programación no lineal.
3. Ejemplo de problema de programación lineal: problema de las dietas Este problema fue publicado como problema de programación lineal y resuelto por el método del simplex por el Stigler (1945). El problema original consistía en determinar las cantidades de 77 alimentos que debían ser adquiridos minimizando el coste total, con la restricción de que debían satisfacer una determinadas necesidades vitales. En esta sección, el alumno deberá encontrar la solución a un problema de optimización semejante, con menor número de variables. Enunciado Un granjero especializado en la explotación de ganado, debe decidir qué piensos ha de comprar para la alimentación de sus animales. El catálogo de piensos disponibles es corto, ya que únicamente puede seleccionar 4 tipos de piensos, A, B, C, D. Cada uno de los piensos que puede adquirir tiene dos nutrientes M y N. Las conversaciones con el veterinario de la granja le indican que las necesidades de alimentación, medidas en kg de nutrientes que deben ingerir la suma de sus animales al día, es de 5500 kg de nutriente M y 8700 kg de nutriente N. Las necesidades de alimentación deben ser cubiertas a través de las compras diarias de piensos que deben realizarse. Para ello el granjero se basa en datos del catálogo de cada pienso: kg de nutriente M por tonelada de pienso kg de nutriente N por tonelada de pienso Coste por tonelada de pienso Pienso A 200 300 90 Pienso B 150 270 81 Pienso C 100 140 40 Pienso D 45 90 24 Plantee y resuelva el problema de optimización con la herramienta Solver, que responda a la pregunta: Cuántas toneladas de cada pienso debe comprar el granjero al día de tal manera que se satisfagan las necesidades de alimentación, y el coste sea mínimo? Respuesta 1) Escriba el planteamiento como problema de optimización 2) Escriba la solución óptima alcanzada: - Toneladas de pienso de A. - Toneladas de pienso de B. - Toneladas de pienso de C. - Toneladas de pienso de D. - Coste total de la compra.
4. Ejemplo de problema de programación lineal entera En el problema anterior, el granjero no tenía ninguna restricción en cuanto a la compra de un número fraccionado de toneladas. Esto no suele ser lo habitual. Modifique el problema anterior adecuadamente, de manera que el granjero únicamente tenga la posibilidad de hacer pedidos por un múltiplo entero de una cantidad, dependiente de cada pienso (marcada por su departamento de ventas). Pienso A: Pedidos múltiplo de 1 tonelada. Pienso B: Pedidos múltiplo de 2 toneladas. Pienso C: Pedidos múltiplo de 5 toneladas. Pienso D: Pedidos múltiplo de 2,8 toneladas. Cuántas toneladas de cada pienso debe comprar ahora el granjero al día de tal manera que se satisfagan las necesidades de alimentación, y el coste sea mínimo? 1) Escriba el planteamiento como problema de optimización 2) Escriba la solución óptima alcanzada: - Toneladas de pienso de A. - Toneladas de pienso de B. - Toneladas de pienso de C. - Toneladas de pienso de D. - Coste total de la compra. 5. Ejemplo de problema de programación no lineal Deseamos colocar un almacén en un punto geográfico de coordenadas (x,y), tal que el coste de trasladar la mercancía del almacén hacia los destinos sea mínimo. Los destinos de las mercancías son: - A (7,2). - B (3,8). - C (15,4). - D (1,13). Las mercancías a transportar son: - Destino A: 9 unidades. - Destino B: 3 unidades. - Destino C: 12 unidades. - Destino D: 5 unidades. El coste de transporte de una unidad de mercancía es una función lineal C (d,u) = k d u, d=distancia almacén-destino u=unidades a transportar Plantear el problema de programación no lineal subyacente, y resolverlo mediante la herramienta Solver. Mostrar en una gráfica los datos y la solución del problema.
Plantear y resolver el mismo problema para el caso de que se obligue a que el almacén se encuentre a una distancia del punto (5,5) menor a 3 unidades. Mostrar en una gráfica los datos, las restricciones y la solución del problema.