Introduction to Optimization Ángel Marín Integer Programming 3: Cutting plane technique. 1 Cutting plane Each Plane Cut must verify: a) Delete the previous continuous (LR) optima solution, b) Not eliminate any integer feasible solution. “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane 2 Gomory cuts: parts integer and fractionary Let x (b , o ) be the solution of the linear relaxation (LR) of the previous iteration: xi aij x j ai 0 , i B j N Like x is not integer: ai 0 aij I ij Fij , i n B, j : N 0 , where Iij is the inferior integer part of aij and Fij 0,1 is the decimal part of aij . “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane 3 Gomory cuts: Separating parts integer and fractionary Separating the integer and decimal parts: xi I ij x j I io Fi 0 j N Fij x j , i B j N The right side is inferior of 1 and it is integer, it defines a Gomory cut (GC): Fi 0 Fij x j 0, i B j N “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane 4 Gomory cuts: verify the definition These GC Fi 0 Fij x j 0, i B verifies the properties: j N a) The previous optima solution not verify the GC: x kj 0, j N ; Fio 0 for some i B b) The factionary parts of the integer feasible solutions are zero and they verify the GC. “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane 5 Cortes de Gomory: Ejemplo x2 MinxЄZ+ 3x1+4x2 sujeto a: 3x1+x2≥4 x1+2x2 ≥4 Aplicamos el método Simplex para obtener una solución óptima del Problema Lineal Relajado (que no es solución entera) a1 a2 a3 a4 b 1 0 -2/5 1/5 4/5 0 1 1/5 -3/5 8/5 0 0 2/5 9/5 -44/5 (4/5,8/5) x1 Fijándonos en la variable básica x1: x1-2/5x3+1/5x4=4/5 Para realizar el Corte de Gomory es necesario separar la parte entera de la parte fraccionaria: x1-2/5x3+1/5x4=4/5 x1+(-1+3/5)x3+1/5x4=4/5 x1-x3 = -3/5x3-1/5x4+4/5 (P.entera) (P.fraccionaria) El corte de Gomory exige que para que no eliminemos ninguna solución factible y además la solución de la que venimos ya no esté dentro de la región de factibilidad, se cumpla: P.fraccionaria ≤ 0, en este caso: 3/5x3+1/5x4 ≥ 4/5 “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane Sabiendo que las restricciones son: 3x1+x2-x3 =4 x1+2x2-x4 =4 x2 Si despejamos x3 y x4 de las restricciones y sustituimos en la condición de Gomory anterior (3/5x3+1/5x4 ≥ 4/5) obtenemos: 2x1+x2 ≥4 Vemos que: 1) NO hemos eliminado ninguna solución factible. 2) La solución NO ENTERA de la que veníamos ha quedado fuera de nuestra región de factibilidad. (4/3,4/3) Pero nuestra nueva solución óptima aún no es entera: x*=(4/3,4/3) Realizamos un nuevo corte de Gomory: Fijándonos en la variable básica x2: x2+1/5 x3-3/5 x4 = 8/5 x2+1/5 x3 + (-1+ 2/5) x4 = 1 + 3/5 Repitiendo el proceso de separación de parte entera y parte fraccionaria, 1/5 x3 +2/5 x4 ≥ 3/5, despejando x3 y x4: llegamos a que el nuevo corte de Gomory es: x1+x2 ≥3 “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane x1 Se comprueba que la solución óptima del Problema Lineal: x2 Min xЄZ+ 3x1+4x2 sujeto a las restricciones: 3x1+x2≥4 x1+2x2 ≥4 y los cortes de Gomory: 2x1+x2 ≥4 x1+x2 ≥3 (2,1) Es x*=(2,1). De manera que la solución del problema entero también será (2,1). x1 “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane Branch and cut example Branch and cut (B&C) Introduce in the B&B active nodes cutting planes that would be violated by the active node. Min z x 6 x1 5 x2 3x1 x2 11 x1 2 x2 5 “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane 9 Branch and cut example 3 5 (2 , 3 ); z 7 7 x1 (2,3.5); z 2 x1 (1.8,3.4); z 2 29.5 x2 x1 33 1 7 3 (3,2); z 28 7 27.8 “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane 10 ALGORITMO BRANCH AND CUT: Min (Max) Iniciación: L PRL , Z 0 , Z 0 Do while: L 0 Seleccionar un nodo “l” de L y eliminar l de L. Relajación: Resolver su RL: Si no solución factible se poda el nodo (se elimina de L). Si existe solución óptima entera: xl , z l son la solución y el valor óptimo. Añadir planos de corte: a la relajación y volver a Relajacion. Acotar: Si x Z : se actualiza la cota superior: z y se podan las ramas activas que verifican: z z i (z Min. z, z z z i ), i Max z, z L. Si x Z : se va a ramificar. Ramificar: se selecciona una variable no entera (mediante análisis de sensibilidad se evalúa la penalización que se incurre antes de resolverlo, y se añade a L. Terminación: Si x* existe es la solución óptima ( z es óptimo), si no existe (z ) y el problema es infactible. End do while “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane 11 Cliques n For x 0,1 , from a knapsack constraint: a jxj b; j 1 with a j 0,and ordened coeficients : a1 x j 1; S ... a n ,a cliqué is: 1,..,n j S S The first a jwhich sum brakes the bound plus the previous ones Example: constraint: 1'8 x1 1'5 x2 Avalaible Cliqués: x1 x2 x3 x4 2 x3 1 ; x1 x2 x4 1 “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane 12 Cover constraints with some ai 0 ' i si ai 0: reemplazar xi por 1 x ' i ajxj ai (1 x ) b ' j j ajxj j aj 0 ax b j aj 0 aj j aj 0 “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane 13 Cover constraints Example 1) 3x 3 x2 ' 2 2) 2 x3 ' 3 2x 3x ' 1 ' 3 x x 3x 4 x1 x3 3) x1 2 x2 6 x3 5 ' 2 2 x1 2(1 x ) 6 x3 x1 x3 1; x x3 x 1; x 5 1 ' 3 1 x2 2 x3 1 6 cliqué 1 ' 2 ' 2 3 x3 ' 3 ' 3 3(1 x ) 2(1 x ) cliqué 3 ' 2 4x x 2 4 x1 3 x2 ' 1 ' 2 x ' 2 ' 2 x x ' 1 2 x1 x2 ' 3 1 x2 x2 2x x3 1 ' 2 6 x3 x3 1; x1 1 7 0 “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane 14 Generalized upper bound xj GUB constraints: 1, i I j Qi ,where Qi are disjoints subsets of X. Assuming that x(k) is non integer. Conventional branching on x(k) is equivalent to x(k)=0 or x(k)=1, equivalent to xj 1 . This node will contain few solutions compared with branch x(k)=0. It is more desirable divide the feasible region of the father roughly equally: j Qi \ k xj j Q 'i 0 or xj 0 j Qi \Q 'i “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane 15 Predominio x x Si tenemos dos restricciones válidas dadas por: 0 0 La primera predomina sobre la segunda si existe algún u u>0 que verifique: 0 u and , 0 u ,u 0 0 Mediante estas consideraciones podemos eliminar Restricciones redundantes para la definición de P. “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane Predominio. Ejemplo Tenemos las restricciones: x1 3x2 4 2 x1 4 x2 9 Eligiendo u=1/2 se verifica: 1 1,3 2, 4 2 1 4 9 2 1,3, 4 2, 4,9 “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane Restricciones de cobertura Sea X el conjunto binario definido por: n X x Bn : aj xj b N 1, 2,..., n j 1 Un subconjunto C de N es una cobertura si: C N aj b j C Si C es una cobertura, la siguiente restricción de cobertura es valida para X: xj C 1 j C “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane Restricciones de cobertura. Ejemplo Consideremos la siguiente restricción: x B7 : 11x1 6 x2 6 x3 5x4 5x5 4 x6 x7 19 Algunas restricciones de cobertura mínimas son: x1 x2 x3 2 x1 x2 x6 2 x3 x4 x5 x6 3 “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane Fortaleciendo una restricción de cobertura. Si C es una cobertura para X, la restricción de cobertura extendida es válida para X. xj C 1 siendo E (C ) C j : aj ai i C j E (C ) Las restricciones extendidas predominan sobre las restricciones de las que partimos. Ejemplo: x3 x4 x5 x6 3 u 1 extendemos 1,1,1,1,1,1 x1 x2 x3 x4 x5 x6 3 1 0, 0,1,1,1,1 and 3 1·3 “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane Capacitated Network Design Grover et al. 2001 w w ij ij Min . y 0,1 x 0 c x w W ij A f ij yij ij A g w , if i d ( w) x wji j: ji A xijw xijw biw j:ij A qij yij , ij g w , if i o( w) , i , w 0, otherwise. A w W “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane Capacitated Network Design Min . Grover et al. 2001 y 0,1 w W ij A x 0 w w ij ij c x f ij yij ij A g w , if i d ( w) x w ji j: ji A w ij x w i b j:ij A w ij x g w , if i o( w) , i, w 0, otherwise. qij yij , ij A w W w ij x qw yij , ij A, w W “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane Uncapacited Network Design w w ij ij Min . y 0,1 x R c x w W ij A x w ji j: ji A w ij x f ij yij w ij x j:ij A x w ji ij A 0 ij y w i b 1, if i d ( w) 1, if i o( w) , i, w 0, otherwise. yij , ij A, i j, w “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane Considérese el modelo de optimización entera siguiente: Mín. c1 x1 x1 , x2 Z a11 x1 a12 x2 a21 x1 a22 x2 c2 x 2 b1 b2 1. Resolver gráficamente y mediante el método de Ramificación y Acotación (B&B) el modelo citado. Hacer las operaciones a mano, aunque los modelos relajados lineales pueden resolverse con GAMS. Mostrar los listados de salida concentrados en unas pocas hojas. En algunos casos pueden resolverse los problemas relajados por simple representación gráfica, justificarlo. 2. Resolver mediante cortes de Gomory el modelo anterior. Resolución manual. Intentar generar cortes por otros procedimientos y resolver B&B con ellos. Integrar los cortes anteriores en un esquema de B&B para definir un algoritmo de Branch and Cut. 3. Resolver un modelo de 4 variables y 4 restricciones, inventado pero interesante, mediante preproceso hasta reducirlo a un problema de 1 dimensión o lo máximo que se pueda. Cada alumno resolverá un problema diferente Resolver el modelo utilizando GAMS y como resolvedor CPLEX. Utilizar los datos que corresponden a cada alumno y pueden verse abajo. Comprobar computacionalmente que los “Introduction Optimization”, Ángel Marín: Integer Programming: Cutting plane 24