Ejercicios de Programación Entera Investigación Operativa Ingenierı́a Informática, UC3M Curso 08/09 1. En una ciudad se intenta disminuir la contaminación reduciendo la circulación interurbana. Un primer estudio busca determinar el mı́nimo número de autobuses que satisfagan la necesidades de transporte. Después de recoger la información se observa que este número varı́a según la hora del dı́a, pero se puede considerar constante en intervalos sucesivos de cuatro horas: 12:00 p.m. – 4:00 p.m. – 8:00 p.m. – 12:00 a.m. – 4:00 a.m. 4 autobuses 4:00 a.m. – 8:00 a.m. 8 autobuses 8:00 a.m. – 12:00 p.m. 10 autobuses 4:00 p.m. 8:00 p.m. 12:00 a.m. 7 autobuses 12 autobuses 4 autobuses Los turnos de autobuses funcionan durante ocho horas seguidas y pueden comenzar al principio de cualquiera de los seis periodos descritos anteriormente. Además, si en el turno que comienza a las 8:00 p.m. hay más de 4 autobuses, en el siguiente ha de haber también más de 4. Plantear un problema de programación lineal entera para determinar el mı́nimo número de autobuses diario que satisface las necesidades anteriores. Solución. Las decisiones que se deben tomar son cuántos autobuses empiezan a trabajar en cada uno de los turnos. Hay 6 turnos, que empiezan al principio de cada uno de los 6 periodos de 4 horas descritos anteriormente. Luego, las variables de decisión que tenemos que considerar son xi = número de autobuses que empiezan a trabajar en el turno i, i = 1, . . . , 6, que son variables enteras. Como los turnos son de 8 horas consecutivas, un autobús que empiece a trabajar en el periodo i, i = 1, . . . , 5, está circulando en el periodo siguiente, i + 1. Los que entran a trabajar en el último periodo, el 6, están circulando también en el primero de la mañana, el 1. Ası́, para cubrir las necesidades mı́nimas en cada uno de los periodos se debe verificar: x6 + x1 ≥ 4 x1 + x2 ≥ 8 x2 + x3 ≥ 10 x3 + x4 ≥ 7 x4 + x5 ≥ 12 x5 + x6 ≥ 4 1 Queremos minimizar el número de autobuses diario, que viene dado por x1 + x2 + x3 + x4 + x5 + x6 . Por último, tenemos que modelar la condición: si en el turno que comienza a las 8:00 p.m. hay más de 4 autobuses, en el siguiente ha de haber también más de 4. Necesitamos una variable binaria δ que nos indique si en el turno que comienza a las 8:00 p.m. hay más de 4 autobuses (5 o más) o sólo hay 4 (sabemos que, como poco, hay 4). Para ello podemos considerar la restricción: x5 + x6 ≤ 4(1 − δ) + 20δ donde x5 + x6 es el número de autobuses que están circulando en el periodo que empieza a las 8:00 p.m. La cota superior de 20 se obtiene como 12 + 4 + 4. Como mucho, en los 2 últimos turnos empiezan a trabajar los autobuses necesarios para cubrir esos 2 turnos más el siguiente. Si x5 + x6 > 4 ⇒ δ = 1. Ahora, es suficiente con imponer que si δ = 1 ⇒ x6 + x1 > 4. Para ello, se incluye la restricción x6 + x1 ≥ 4 + δ y podemos eliminar la condición x6 + x1 ≥ 4 Otra opción, que nos permite no incluir la variable binaria δ es, teniendo en cuenta que 4 ≤ x5 + x6 ≤ 20, añadir la restricción: x5 + x6 − 4 ≤ 16(x6 + x1 − 4) También podı́amos haber interpretado que la condición sólo hacı́a referencia a los autobuses que empezaban en ese periodo, entonces tendrı́amos que considerar x6 ≤ 4(1 − δ) + 8δ y x1 ≥ 5δ En este caso, no podemos eliminar la condición x6 + x1 ≥ 4 El problema quedarı́a finalmente como: Modelo 2 Modelo 1 Mı́n x1 + x2 + x3 + x4 + x5 + x6 s.a. x6 + x1 ≥ 4 x1 + x2 ≥ 8 x2 + x3 ≥ 10 x3 + x4 ≥ 7 x4 + x5 ≥ 12 x5 + x6 ≥ 4 x6 + x1 ≥ 4 x6 ≤ 4(1 − δ) + 8δ x1 ≥ 5δ δ ∈ {0, 1}, xi ∈ ZZ+ , i = 1, . . . , 6 Mı́n x1 + x2 + x3 + x4 + x5 + x6 s.a. x6 + x1 ≥ 4 x1 + x2 ≥ 8 x2 + x3 ≥ 10 x3 + x4 ≥ 7 x4 + x5 ≥ 12 x5 + x6 ≥ 4 x6 + x 1 ≥ 4 + δ x5 + x6 ≤ 4(1 − δ) + 20δ δ ∈ {0, 1}, xi ∈ ZZ+ , i = 1, . . . , 6 2. Una empresa fabrica tres productos 1, 2 y 3, que deben procesarse en dos tipos de maquinaria denominadas A y B. En la siguiente tabla se recogen los tiempos de procesamiento (por tonelada procesada) con cada máquina, los beneficios (por tonelada procesada) en euros, y la disponibilidad de cada tipo de maquinaria (en horas por semana): 2 Tipo de Productos Disponibilidad maquinaria 1 2 3 (horas) A 2 5 4 70 B 3 4 6 86 Benef./ton. (euros) 800 700 950 La empresa considera aumentar la disponibilidad de tiempo de procesamiento de la maquinaria. Para ello, puede llevar a cabo alguna de las posibilidades indicadas a continuación Tipo de maquinaria A Incremento de disp. (horas) 10 15 Coste inversión (miles de euros) 1600 1700 B 8 12 1700 1750 A lo sumo, se puede realizar un tipo de incremento para cada máquina. Gracias a un estudio de mercado se conocen los lı́mites de demanda de los productos, que son Demanda (ton.) Producto mı́nima máxima 1 6 17 2 3 8 3 7 20 Además, la inversión total no puede exceder de 3400000 euros. Se pide: (a) Formular el problema que se debe plantear la dirección de la empresa para obtener el plan de procesamiento e inversión de mayor beneficio. (b) Si la empresa desease aumentar la disponibilidad de un sólo tipo de maquinaria, ¿cómo se modifica el modelo anterior reflejando tal situación? (c) Si no se quiere añadir disponibilidad de B a menos que se añada de A, ¿cómo se representa esta nueva condición? (d) La empresa desea ampliar la disponibilidad con la maquinaria B si, y sólo si, se incrementa también la A. ¿Cómo debe modificarse la condición considerada en el apartado anterior? Solución. Las variables de decisión son: x1 , x2 y x3 : cantidad de cada producto que se fabrica. Variables binarias que nos indican si se realiza cada uno de los 4 posibles incrementos o no: δA1 , δA2 , δB1 y δB2 . 1, si se realiza el incremento de 10 h. en la máquina A, δA1 = 0, si no se realiza δA2 , δB1 y δB2 se definen análogamente para los incrementos de 15 h. en la máquina A y 8 y 12 h. en la máquina B, respectivamente. 3 La función objetivo a maximizar: beneficios de venta - coste incremento de capacidad de las máquinas 800x1 + 700x2 + 950x3 − 1600δA1 − 1700δA2 − 1700δB1 − 1750δB2 Las restricciones son: Disponibilidad de maquinaria: 2x1 + 5x2 + 4x3 ≤ 70 + 10δA1 + 15δA2 3x1 + 4x2 + 6x3 ≤ 86 + 8δB1 + 12δB2 A lo sumo, se puede realizar un tipo de incremento para cada máquina: δA1 + δA2 ≤ 1 (1) δB1 + δB2 ≤ 1 (2) Lı́mites de la demanda de cada producto: 6 ≤ x1 ≤ 17, 3 ≤ x2 ≤ 8, 7 ≤ x3 ≤ 20 La inversión total no puede exceder de 3400000 euros: 1600δA1 + 1700δA2 + 1700δB1 + 1750δB2 ≤ 3400 x1 , x2 , x3 ≥ 0 y δA1 , δA2 , δB1 y δB2 variables binarias. (b) Si la empresa desease aumentar la disponibilidad de un sólo tipo de maquinaria, ¿cómo se modifica el modelo anterior reflejando tal situación? Si se siguen manteniendo las restricciones (1) y (2), entonces es suficiente con añadir: δA1 + δA2 + δB1 + δB2 ≤ 1 Si no se mantienen, es decir, sólo se puede invertir en una máquina pero las ampliaciones se pueden acumular, entonces hay que añadir 2 nuevas variables binarias que indiquen si se invierte o no en cada máquina: 1, si se realiza algún incremento en la máquina A, δA = 0, si no se realiza Análogamente se define δB . Estas 2 variables toman su valor en función del valor de las variables binarias previamente definidas: δA1 + δA2 ≤ 2δA (3) δB1 + δB2 ≤ 2δB (4) Estas 2 restricciones sustituirı́an a las anteriores (1) y (2). Además, habrı́a que añadir para modelizar la condición que se nos pide ahora: δA + δB ≤ 1 4 (b) Si no se quiere añadir disponibilidad de B a menos que se añada de A, ¿cómo se representa esta nueva condición? Como antes, si no se elimina la condición de, a lo sumo 1 inversión en cada máquina, habrı́a que añadir la restricción: δB1 + δB2 ≤ δA1 + δA2 Si se elimina la condición, entonces se definen δA y δB como antes y se añade la restricción: δB ≤ δA (b) La empresa desea ampliar la disponibilidad con la maquinaria B si, y sólo si, se incrementa también la A. ¿Cómo debe modificarse la condición considerada en el apartado anterior? Se debe cambiar la desigualdad por una igualdad. 3. Dado el problema entero mı́nx x1 − 2x2 + 2x3 s.a x1 + x2 − 2x3 ≤ 4 2x1 − x2 − x3 ≥ 3 x ≥ 0 enteras, a) Comprueba que la solución del problema relajado es: T 7/3 5/3 0 . b) Indica el siguiente subproblema que elegirı́as para resolver por el método de “branch and bound.” c) Calcula la solución de dicho subproblema y comenta qué subproblemas introducirı́as para continuar el proceso de solución. Solución. a) El problema relajado en forma estándar es mı́nx,s x1 − 2x2 + 2x3 s.a x1 + x2 − 2x3 + s1 = 4 2x1 − x2 − x3 − s2 = 3 x, s ≥ 0, y en el vértice indicado tenemos que T B λ = cB ⇔ σN 1 2 1 −1 ! λ= 1 −2 ! ⇒λ= −2 −1 2 = cN − N T λ = 0 − 1 0 0 0 −1 −1 1 −1 1 ! ! 1 = 1 ≥ 0. 1 Por tanto, el vértice indicado es solución. b) Con los valores que toman las variables básicas, los nuevos subproblemas se pueden introducir bien sobre x1 (x1 ≤ 2 y x1 ≥ 3) o bien sobre x2 (x2 ≤ 1 y x2 ≥ 2). Cualquiera de ellos se puede seleccionar para continuar el proceso. 5 Con la información proporcionada por la solución óptima del problema relajado, tenemos las siguientes cotas para el problema entero: −1 ≤ zopt ≤ ∞ Siguiendo las reglas dadas en la práctica, como hay empate (las 2 están igual de cerca del entero más próximo), usamos el orden lexicográfico y ramificamos por x1 . c) Construimos entonces los subproblemas (ya en forma estándar) mı́nx,s x1 − 2x2 + 2x3 s.a x1 + x2 − 2x3 + s1 = 4 2x1 − x2 − x3 − s2 = 3 (P1 ) x 1 + s3 = 2 x, s ≥ 0, mı́nx,s x1 − 2x2 + 2x3 s.a x1 + x2 − 2x3 + s1 = 4 2x1 − x2 − x3 − s2 = 3 (P2 ). x 1 − s4 = 3 x, s ≥ 0, Resolvemos P1 aplicando algún procedimiento adecuado. El más eficiente (que no hemos visto en clase) es el método dual del Simplex. A continuación se obtiene la solución por el método primal del Simplex (el estudiado en clase). Partimos de la solucı́ón básica: x1 = 2, x2 = 1, x3 = 0, s1 = 1, s2 = 0, s3 = 0. Para comprobar si es óptima, calculamos los costes reducidos de las variables no básicas. Los multiplicadores son 0 1 1 2 1 λ1 T B λ = cB ⇔ 1 −1 0 λ2 = −2 ⇒ λ = 2 −3 0 1 0 0 λ3 y los costes reducidos 4 0 −2 −1 0 2 σ(x3 ) σN = σ(s2 ) = 0 − 0 −1 0 2 = 2 3 0 0 1 −3 σ(s3 ) 0 Todos los costes reducidos son positivos, entonces el vértice actual es la solución óptima del subproblema P1 . Como además tiene todas sus coordenadas x1 , x2 y x3 enteras, se trata de una solución factible del problema entero. Podamos la rama P1 , guardamos la solución actual (2, 1, 0)t como la mejor solución entera encontrada hasta el momento y actualizamos la cota superior (mejor conocido): −1 ≤ zopt ≤ 0 El único nodo que queda pendiente es el correspondiente al subproblema P2 : 6 Si en el apartado b) hubieramos optado por ramificar por x2 , entonces tendrı́amos que construir los subproblemas (ya en forma estándar) mı́nx,s x1 − 2x2 + 2x3 s.a x1 + x2 − 2x3 + s1 = 4 2x1 − x2 − x3 − s2 = 3 (P1 ) x2 + s 3 = 1 x, s ≥ 0, mı́nx,s x1 − 2x2 + 2x3 s.a x1 + x2 − 2x3 + s1 = 4 2x1 − x2 − x3 − s2 = 3 (P2 ). x2 − s 4 = 2 x, s ≥ 0, Si resolvemos, por ejemplo, P2 obtenemos que la solución óptima de dicho subproblema es: x1 = 8/3, x2 = 2, x3 = 1/3, s1 = 0, s2 = 0, s4 = 0. Esta solución no es entera por lo que serı́a necesario volver a ramificar, en este caso en x1 o en x2 . Por lo tanto, si hemos seguido este camino todavı́a nos quedarı́an 3 nodos pendientes por explorar. Por ejemplo, si optamos ramificar el subproblema P2 por x1 , tendrı́amos: Para cada uno de los nodos tendrı́amos las siguientes cotas: cota inferior nodo 1 -1 nodo 2 0 nodo 3 0 cota superior +∞ +∞ +∞ La cota inferior de los nodos 2 y 3 se obtiene de ajustar la cota inferior de − 32 teniendo en cuenta que los coeficientes de la función objetivo son enteros. 4. Resuelve, aplicando el método de “branch and bound”, el siguiente problema entero: máx s.a 4x1 + 5x2 + x3 3x1 + 2x2 ≤ 10 x1 + 4x2 ≤ 11 3x1 + 3x2 + x3 ≤ 13 x ≥ 0, enteras. 7 Solución. Empezamos escribiendo el problema en forma estándar. máx s.a 4x1 + 5x2 + x3 3x1 + 2x2 + s1 = 10 x1 + 4x2 + s2 = 11 3x1 + 3x2 + x3 + s3 = 13 x ≥ 0 enteras, s ≥ 0. Resolvemos el problema relajado, y obtenemos como solución, x1 = 1.8, x2 = 2.3, x3 = 0.7, con z = 19.4 Por tanto, obtenemos las siguientes cotas para el problema entero: −∞ ≤ zopt ≤ 19.4 La cota superior de 19.4 se puede ajustar a 19 (mejor cota), ya que todos los coeficientes son enteros. Siguiendo la regla de las prácticas ramificamos por x1 (es la que toma un valor más cercano al entero) ⇒ introducimos las restricciones x1 ≤ 1 y x1 ≥ 2. Los subproblemas resultantes son: máx s.a 4x1 + 5x2 + x3 3x1 + 2x2 ≤ 10 x1 + 4x2 ≤ 11 (P1 ) 3x1 + 3x2 + x3 ≤ 13 x1 ≤ 1 x≥0 máx s.a 4x1 + 5x2 + x3 3x1 + 2x2 ≤ 10 x1 + 4x2 ≤ 11 (P2 ) 3x1 + 3x2 + x3 ≤ 13 x1 ≥ 2 x≥0 Comenzamos resolviendo P1 , que en forma estándar es: máx s.a 4x1 + 5x2 + x3 3x1 + 2x2 + s1 = 10 x1 + 4x2 + s2 = 11 3x1 + 3x2 + x3 + s3 = 13 x1 + s 4 = 1 x ≥ 0, s ≥ 0 Empezamos por la SBF asociada a la base (variables básicas: {x1 , x2 , x3 , s1 }) 3 2 0 1 1 1 4 0 0 5 B= xB = B −1 b = 25 , 3 3 1 0 2 1 0 0 0 2 Los costes reducidos de las variables no básicas (s2 , s3 , s4 ) vienen dados por: 3 1 3 1 λ1 4 0 2 4 3 0 λ 5 1 2 B T λ = cB ⇔ = ⇒ λ = 2 0 0 1 0 λ3 1 1 1 0 0 0 σ(s2 ) 0 0 σN = σ(s3 ) = 0 − 0 σ(s4 ) 0 0 1 0 2 0 1 0 0 1 − 12 0 1 0 2 = −1 1 0 0 1 − 12 1 λ4 2 8 Todos los costes reducidos son negativos y se trata de un problema de maximización, entonces el vértice actual es la solución óptima del subproblema P1 . Como la solución es fraccionaria, tenemos que seguir ramificando. Hay un empate, entonces ramificamos por la de menor ı́ndice, que en este caso es x2 . El valor óptimo del subproblema P1 es 19, entonces todos los nodos que cuelguen de este nodo tienen las siguientes cotas: −∞ ≤ z ∗ ≤ 19 Obtenemos los subproblemas: máx s.a máx s.a 4x1 + 5x2 + x3 3x1 + 2x2 ≤ 10 x1 + 4x2 ≤ 11 3x1 + 3x2 + x3 ≤ 13 (P3 ) x1 ≤ 1 x2 ≤ 2 x≥0 4x1 + 5x2 + x3 3x1 + 2x2 ≤ 10 x1 + 4x2 ≤ 11 3x1 + 3x2 + x3 ≤ 13 (P4 ) x1 ≤ 1 x2 ≥ 3 x≥0 Escogemos de los dos últimos subproblemas (seguimos una estrategia de búsqueda en profundidad) el subproblema P3 . En forma estándar: máx 4x1 + 5x2 + x3 s.a 3 1 3 1 0 2 4 3 0 1 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 x1 x2 10 0 x3 0 11 s1 13 0 = s2 0 1 s3 2 1 s4 s5 x1 , x2 , x3 , s1 , . . . , s5 ≥ 0 Empezamos por la SBF asociada a la base (variables básicas: {x1 , x2 , x3 , s1 , s2 }) 3 2 0 1 0 1 1 4 0 0 1 2 −1 B = 3 3 1 0 0 , xB = B b = 4 1 0 0 0 0 3 0 1 0 0 0 2 9 Los costes reducidos de las variables no básicas (s2 , s3 , s4 ) vienen dados por: 3 1 3 1 0 λ1 4 0 2 4 3 0 1 λ2 5 0 λ3 = 1 ⇒ λ = 1 B T λ = cB ⇔ 0 0 1 0 0 1 0 0 0 0 λ4 0 1 0 1 0 0 0 λ5 0 2 0 σ(s3 ) 0 0 0 1 0 0 0 −1 σN = σ(s4 ) = 0 − 0 0 0 1 0 1 = −1 σ(s5 ) 0 0 0 0 0 1 1 −2 2 Todos los costes reducidos son negativos y se trata de un problema de maximización, entonces el vértice actual es la solución óptima del subproblema P3 . Como además tiene todas sus coordenadas x1 , x2 y x3 enteras, se trata de una solución factible del problema entero, con valor objetivo z ∗ = 18. Podamos la rama P3 , guardamos la solución actual (1, 2, 4)t como la mejor solución entera encontrada hasta el momento y actualizamos la cota inferior del problema entero (mejor conocido) 18 ≤ zopt ≤ 19 Pasamos a resolver el subproblema P4 , correspondiente al nodo hermano del subproblema P3 . En forma estándar: máx 4x1 + 5x2 + x3 s.a 3x1 + 2x2 + s1 = 10 x1 + 4x2 + s2 = 11 3x1 + 3x2 + x3 + s3 = 13 (P4 ) x1 + s 4 = 1 x 2 − s5 = 3 x ≥ 0, s ≥ 0 Como x2 ≥ 3, entonces en la segunda restricción debe ser x1 + 4x2 ≥ 0 + 4 · 3 = 12 11. Luego, el subproblema P4 es no factible y se poda esa rama. Nota: si no nos damos cuenta del razonamiento anterior, después de probar algunas bases y de que todas nos den no factibles, se resuleve el problema por el método de las dos fases. El problema de la fase 1 es: mı́n s.a z1 3x1 + 2x2 + s1 = 10 x1 + 4x2 + s2 = 11 3x1 + 3x2 + x3 + s3 = 13 (P4 ) x1 + s 4 = 1 x2 − s5 + z1 = 3 x ≥ 0, s ≥ 0, z1 ≥ 0 10 Al resolverlo se obtiene como solución óptima (x, s, z1 )t = (0, 2.75, 0, 4.5, 0, 4.75, 1, 0, 0.25) con valor objetivo óptimo z ∗ = 0.25 > 0. El único nodo que queda pendiente es el correspondiente al subproblema P2 , que en forma estándar es: máx 4x1 + 5x2 + x3 s.a 3x1 + 2x2 + s1 = 10 x1 + 4x2 + s2 = 11 (P2 ) 3x1 + 3x2 + x3 + s3 = 13 x1 − s 4 = 2 x ≥ 0, s ≥ 0 Empezamos por la SBF asociada a la base (variables básicas: {x1 , x2 , x3 , s2 }) 3 1 B= 3 1 2 4 3 0 0 0 1 0 0 1 , 0 0 2 2 xB = B −1 b = 1 1 Los costes reducidos de las variables no básicas (s2 , s3 , s4 ) vienen dados por: 1 4 λ1 3 1 3 1 0 2 4 3 0 λ 5 2 B T λ = cB ⇔ = ⇒ λ = 1 0 0 1 0 λ3 1 −2 0 λ4 0 1 0 0 −1 1 1 0 0 0 0 σ(s1 ) σN = σ(s3 ) = 0 − 0 0 1 0 0 = −1 −2 1−2 0 0 0 −1 0 σ(s4 ) Todos los costes reducidos son negativos y se trata de un problema de maximización, entonces el vértice actual es la solución óptima del subproblema P2 . Como además tiene todas sus coordenadas x1 , x2 y x3 enteras, se trata de una solución factible del problema entero, con valor objetivo z ∗ = 19. Podamos la rama P2 y podemos dar por finalizada la búsqueda, ya que la solución factible entera obtenida alcanza la mejor cota del problema. Si no nos damos cuenta de esto, como la solución que acabamos de encontrar mejora a la mejor por el momento que tenı́amos guardada (que tenı́a un valor objetivo de 18), también podemos garantizar que el vértice actual es el óptimo del problema entero. En este caso, si hubiéramos empezado resolviendo el problema P2 , no habrı́amos tenido que resolver ningún otro subproblema, ya que habrı́amos obtenido una solución entera cuyo valor óptimo lanza la mejor cota. El árbol de búsqueda es: 11 5. Resuelve por el método de Branch and Bound el siguiente problema de programación entera: minimizar sujeto a − x 1 − x2 − x1 ≤ 0 2x1 − 2x2 ≤ 1 2x2 ≤ 9 x1 , x2 ∈ {0, 1, 2, . . .} Solución. El problema relajado P0 es el siguiente: minimizar sujeto a − x1 − x2 − x1 ≤ 0 2x1 − 2x2 ≤ 1 2x2 ≤ 9, y su solución es x = (5, 4.5) con z = −9.5. Como la solución no satisface las condiciones de integralidad hay que ramificar por x2 y se crean dos problemas P1 y P2 , añadiendo las restricciones x2 ≤ 4 y x2 ≥ 5, respectivamente. Cotas para la función objetivo: −9.5 ≤ z ∗ ≤ ∞. La mejor cota se puede ajustar a −9. Problema P1 : minimizar sujeto a − x1 − x2 − x1 ≤ 0 2x1 − 2x2 ≤ 1 2x2 ≤ 9 x2 ≤ 4, solución x = (4.5, 4) con z = −8.5. Como no se satisfacen las condiciones de integralidad y el valor de la f.o. está entre las cotas superior e inferior hay que ramificar (por x1 ). Cotas para el valor de todas las souciones con x2 ≤ 4: −8.5 ≤ z ∗ ≤ ∞, que se puede ajustar a −8 ≤ z ∗ ≤ ∞. La mejor cota para el problema original sigue siendo −9. 12 Problema P3 : minimizar sujeto a − x1 − x2 − x1 ≤ 0 2x1 − 2x2 ≤ 1 2x2 ≤ 9 x2 ≤ 4 x1 ≤ 4. Problema P4 : minimizar sujeto a − x1 − x2 − x1 ≤ 0 2x1 − 2x2 ≤ 1 2x2 ≤ 9 x2 ≤ 4 x1 ≥ 5 Siguiendo una estrategia de búsqueda en profundidad deberı́amos de seguir resolviendo P3 . Vamos a seguir una estrategia de búsqueda en anchura y pasamos a reolver el problea P2 . El problema P2 : minimizar sujeto a − x1 − x2 − x1 ≤ 0 2x1 − 2x2 ≤ 1 2x2 ≤ 9 x2 ≥ 5, es no factible y por tanto la rama se poda. Pasamos, entonces, a resolver el problema P3 , cuya solución es x = (4, 4) con z = −8. Como la solución sı́ satisface las condiciones de integralidad y el valor de la f.o. está entre las cotas, entonces la rama se poda y se actualiza la cota superior para el problema original, ahora mejor conocido= −8. Las nuevas cotas para el problema original son: −9 ≤ z ∗ ≤ −8 Se guarda la solución x = (4, 4) como mejor solución encontrada (incumbente). Pasamos a resolver el problema P4 , que resulta ser no factible, por lo que la rama se poda. Ya no tenemos más problemas que procesar por lo que el procedimiento termina escogiendo el mejor candidato, esto es x∗ = (4, 4) con z ∗ = −8 6. En una central hidroeléctrica debe decidirse qué turbinas se pondrán en marcha durante el dı́a de manera que se satisfaga la demanda (estimada) de la población a la que se sirve: 13 12 p.m. a 6 a.m. 6 a.m. a 9 a.m. 9 a.m. a 3 p.m. 3 p.m. a 6 p.m. 6 p.m. a 12 p.m. 15.000 MW 30.000 MW 25.000 MW 40.000 MW 27.000 MW La central dispone de turbinas de 3 tipos distintos. Concretamente, dispone de 12 de tipo 1, 10 de tipo 2 y 5 de tipo 3. Cada turbina tiene que funcionar entre unos niveles mı́nimo y máximo. Los costes de funcionamiento dependen del nivel al que la turbina esté operando: hay un coste por hora que la turbina opera a nivel mı́nimo y un coste extra, también por hora, por cada megawatio que la turbina opera sobre el nivel mı́nimo. Además, la puesta en marcha de una turbina conlleva un coste: Tipo 1 Tipo 2 Tipo 3 Nivel mı́nimo 850 MW 1.250 MW 1.500 MW Nivel Coste por hora máximo al mı́nimo 2.000 MW 1.000 1.750 MW 2.600 4.000 MW 3.000 Coste/hora por MW coste puesta por encima del mı́n. en marcha 2 2.000 1’30 1.000 3 500 Además, para cumplir con los requisitos de calidad establecidos en el contrato, tiene que haber suficientes generadores funcionando en cualquier periodo del dı́a como para responder a un incremento de la demanda estimada de hasta un 15 %. El posible incremento debe poder ser atendido ajustando, siempre dentro de los lı́mites de operación, la producción de las turbinas que están en funcionamiento. Al final del ciclo de 24 horas hay una desconexión breve antes de comenzar la aplicación de la siguiente planificación; no obstante, durante el dı́a, una vez que una turbina se ha puesto en marcha ya no se desconecta hasta el final del ciclo. a) ¿Qué turbinas deben estar funcionando y en qué periodos del dı́a deben hacerlo para minimizar el coste total? b) ¿Cuál es el coste marginal de producción de electricidad en cada periodo del dı́a?, es decir, ¿qué tarifas se deberı́an cobrar? c) ¿Qué ahorro se producirı́a si se rebajara el 15 % de reserva de energı́a que se debe garantizar?, es decir, ¿cuánto cuesta este nivel de garantı́a de servicio? d) ¿Cómo cambiarı́a el modelo si no se produce la desconexión al final del dı́a? Compara las soluciones obtenidas con los dos modelos Solución. Modelo del apartado a), en el que hay desconexión al final del dı́a y las turbinas no se pueden desconectar de un periodo a otro. Variables: nit = número de turbinas trabajando del tipo i en el periodo t. xit = producción de las turbinas del tipo i en el periodo t. 14 Obsérvese que, por ejemplo, x12 − 850n12 es el número de MW que globalmente todas las turbinas de tipo 1 están produciendo por encima del mı́nimo durante todo el perido 2. En general, ( MW que globalmente todas las turbinas de tipo i están produciendo por encima xit − mi nit = del mı́nimo en el periodo t, donde mi = la producción mı́nima de las turbinas de tipo i. Entonces, la función objetivo, que tiene que medir todos los costes derivados de las decisiones tomadas, contendrá los siguientes sumandos para cada uno de los periodos: Costes de funcionamiento al mı́nimo: E1t n1t + E2t n2t + E3t n3t , donde Eit = costes de funcionamiento por periodo (coste por hora al mı́nimo por número de horas del periodo). Costes de funcionamiento por encima del mı́nimo: C1t (x1t − m1 n1t ) + C2t (x2t − m2 n2t ) + C3t (x3t − m3 n3t ), donde Cit = costes de producción por periodo (coste por hora por MW por encima del mı́nimo por número de horas del periodo). Costes de puesta en marcha: Como las turbinas no se pueden apagar, el número de turbinas puestas en marcha durante el dı́a se corresponde con el número de turbinas que están funcionando en el último periodo. Luego, es suficiente con contar el número de turbinas funcionando en el último periodo y cargar su coste: F1 n15 + F2 n25 + F3 n35 , donde Fi = costes de puesta en marcha. Función objetivo: mı́n 5 X 3 X Eit nit + 5 X 3 X t=1 i=1 Cit (xit − mi nit ) + t=1 i=1 3 X Fi ni5 i=1 Por ejemplo, para el primer periodo los costes de producción serı́an (primer y segundo sumando de la función objetivo): h i h i 6×1000n11 +6×2600n21 +6×3000n31 + 2(x11 −850n11 )+1.30(x21 −1250n21 )+3(x31 −1500n31 ) Restricciones: Demanda de cada periodo de tiempo: 3 X xit ≥ Dt i=1 15 ∀t = 1, . . . , 5 Lı́mites de producción de cada turbina en cada periodo: mi nit ≤ xit ≤ Mi nit ∀i = 1, 2, 3, t = 1, . . . , 5 (mi y Mi son los lı́mites de capacidad de los generadores de tipo i). Garantı́a del 15 % de producción extra: 3 X Mi nit ≥ 1.15Dt , ∀t = 1, . . . , 5 i=1 Número de generadores funcionando y puestos en marcha: como no se pueden desconectar de un periodo a otro, se debe verificar ni(t+1) ≥ nit , ∀i = 1, 2, 3, t = 1, . . . , 4 (5) El número de turbinas puestas en marcha en el periodo t + 1 se puede calcular como si(t+1) = ni(t+1) − nit , ∀i = 1, 2, 3, t = 1, . . . , 4 nit son variables enteras acotadas entre 0 y el número máximo de generadores del tipo i: 0 ≤ n1t ≤ 12, 0 ≤ n2t ≤ 10, 0 ≤ n3t ≤ 5, para todo t = 1, . . . , 5 (6) Como tenemos las restricciones (5), es suficiente con exigir no negatividad y n15 ≤ 12, n25 ≤ 10, n35 ≤ 5 En el modelo del apartado b), en el que las turbinas se pueden desconectar de un periodo a otro y no hay desconexión al final del dı́a tenemos que considerar las variables sit = número de turbinas puestas en marcha del tipo i en el periodo t, que son también variables enteras acotadas entre 0 y el número máximo de generadores del tipo i: 0 ≤ s1t ≤ 12, 0 ≤ s2t ≤ 10, 0 ≤ s3t ≤ 5, para todo t = 1, . . . , 5 Cambia el cálculo de los costes de puesta en marcha. En la función objetivo hay que reemplazar el sumando 3 X Fi ni5 i=1 por 5 X 3 X Fi sit t=1 i=1 Cambian las restricciones relativas al número de generadores funcionando y puestos en marcha: sit ≥ nit − nit−1 , ∀i = 1, 2, 3, t = 1, . . . , 5 (cuando t = 1, t − 1 = 5) No se puede dejar la igualdad como en modelo anterior, ya que si sólo se han desconectado turbinas de un periodo a otro nos darı́a un valor negativo. Las restricciones de cota (6) se deben de mantener para todos los periodos. 16 Para contestar a las cuestiones b) y c) hay que tener en cuenta que la interpretación de los multiplicadores λ como precios sombra no es posible en modelos con variables enteras. Una alternativa es obtener los multiplicadores de un problema relacionado: Fijar las variables enteras al valor obtenido en la solución óptima y resolver el problema lineal resultante Ası́, para contestar a la cuestión b), en la que se pedı́a calcular el coste marginal de producción de electricidad en cada periodo del dı́a, lo que debemos hacer es fijar el número de turbinas de cada tipo que funcionan en cada periodo al valor obtenido en la solución óptima del problema entero y resolver el problema de programación lienal que queda. El coste marginal vendrá dado por los multiplicadores de las restricciones de satisfacción de demanda. Para contestar al apartado c) no podemos hacer lo mismo porque al fijar el número de turbinas que funcionan en cada periodo la restricción del 15 % de reserva de energı́a desaparece. En ese caso, lo que podemos hacer es resolver la relajación lineal del problema entero original y fijarnos en el multiplicador de la restricción de reserva. 17