$TITLE 'Optimizacion bajo incertidumbre de un proceso' $OFFUPPER $ONEMPTY $OFFLISTING $OFFSYMXREF $OFFSYMLIST OPTION SOLPRINT = ON; SCALAR MM_UP 'Valor mayor que cualquiera de los flujos' / 100 / ; SETS P 'Productos' / A1*A5, B1*B4, In / Piner(P) 'Productos inertes' / In / U 'Unidades de proceso' / D1 'Columna destilacion', R1 'Reactor' / UD(U) 'Unidades de proceso que son columnas de destilacion' / D1 / UR(U) 'Unidades de proceso que son reactores quimicos' / R1 / D 'Disenos' / dD1, dD2, dR1, dR2 / M 'Modos de funcionamiento' / mD11, mD12, mD21, mR11, mR21, mR22 / G 'Escenarios' / G1, G2, G3 / I 'Nodos' / N1*N5 / IE(I) 'Nodos de entrada al proceso' / N1, N2 / IS(I) 'Nodos de salida del proceso' / N4, N5 / PNOiner(P) 'Productos no inertes' ; ALIAS (I, J, i1, i2), (p, p1, p2) ; PNOiner(P) = YES$(NOT Piner(P)) ; SETS Dum(u, d, m) 'Diseņos y modos de funcionamirno de la unidad U' / D1 . dD1 . mD11, D1 . dD1 . mD12, D1 . dD2 . mD21, R1 . dR1 . mR11, R1 . dR2 . mR21, R1 . dR2 . mR22 / IER(u, i) 'Nodos de entrada a los reactores' / R1 . N1, R1 . N2 / ISR(u, i) 'Nodos de salida de los reactores' / R1 . N3 / IED(u, i) 'Nodos de entrada a las columnas' / D1 . N3 / ISD(u, i) 'Nodos de salida de las columnas' / D1 . N4, D1 . N5 / ; SETS Du(u, d) 'Diseņos de la unidad U' IEu(U, I) 'Nodos de entrada a unidades de proceso u' ISu(U, I) 'Nodos de salida de unidades de proceso u' Iu(U,I) 'Nodos de entrada y/o salida de unidade de proceso u' IEn(i) 'Nodos de entrada a unidades de proceso' ISn(i) 'Nodos de salida de unidades de proceso' Icon(I) 'Nodos de entrada y/o salida de unidades de proceso' ; Du(u, d) = SUM(m$Dum(u, d, m), YES) ; IEu(U, I) = IER(u, i) + IED(u, i) ; ISu(U, I) = ISR(u, i) + ISD(u, i) ; Iu(U,I) = IEu(U, I) + ISu(U, I) ; IEn(i) = SUM(U$IEu(u,i), YES) ; ISn(i) = SUM(U$ISu(u,i), YES) ; Icon(I) = SUM(u$Iu(U,I), YES) ; * Reactores TABLE etaR(u,d,m,p) 'Coeficiente p (consumido <0, producido >0) reactor u,d,m' A1 A2 A3 A4 A5 B1 B2 B3 B4 R1 . dR1 . mR11 -1 -0.65 0.25 0.5 0.9 R1 . dR2 . mR21 -1 -0.7 0.4 0.4 0.9 R1 . dR2 . mR22 -1 -1.3 0.8 1.5 ; * Destilacion TABLE etaD(u,d,m,i,j,p) 'Coeficiente de i a j para u, d, m, p' N4.A1 N4.A2 N4.A3 N4.A4 N4.A5 D1 . dD1 . mD12 . N3 0.98 0.97 0.98 0.99 0.001 D1 . dD2 . mD21 . N3 0.95 0.94 0.93 0.95 0.006 + N4.B1 N4.B2 N4.B3 N4.B4 N4.In D1 . dD1 . mD12 . N3 0.5 D1 . dD2 . mD21 . N3 0.5 D1 . dD1 . mD11 . N3 0.007 0.008 0.01 0.99 0.5 + N5.A1 N5.A2 N5.A3 N5.A4 N5.A5 D1 . dD1 . mD12 . N3 0.02 0.03 0.02 0.01 0.999 D1 . dD2 . mD21 . N3 0.05 0.06 0.07 0.05 0.994 + N5.B1 N5.B2 N5.B3 N5.B4 N5.In D1 . dD1 . mD12 . N3 0.5 D1 . dD2 . mD21 . N3 0.5 D1 . dD1 . mD11 . N3 0.993 0.992 0.99 0.01 0.5 ; PARAMETERS Cgudm_UP(g,u,d,m) 'Fraccion maxima de nivel de funcionamiento convertido' / G1 . R1 . dR1 . mR11 0.9 G1 . R1 . dR2 . mR21 0.85 G2 . R1 . dR1 . mR11 0.71 G2 . R1 . dR2 . mR21 0.75 G3 . R1 . dR2 . mR22 0.6 / Nudm_LO(u,d,m) 'Limite inferior nivel funcionamiento u, d, m' / R1 . dR1 . mR11 0.15 R1 . dR2 . mR21 0.20 R1 . dR2 . mR22 0.22 D1 . dD1 . mD11 0.14 D1 . dD1 . mD12 0.10 D1 . dD2 . mD21 0.15 / Nudm_UP(u,d,m) 'Limite superior nivel funcionamiento u, d, m' / R1 . dR1 . mR11 0.60 R1 . dR2 . mR21 0.65 R1 . dR2 . mR22 0.60 D1 . dD1 . mD11 0.48 D1 . dD1 . mD12 0.60 D1 . dD2 . mD21 0.55 / cFud(u, d) 'Coste fijo proceso u, d' / R1 . dR1 21 R1 . dR2 18 D1 . dD1 22 D1 . dD2 24 / cV(u, d, m) 'Coste variable proceso u, d, m, por unidad nivel funcionamiento' / R1 . dR1 . mR11 0.045 R1 . dR2 . mR21 0.035 R1 . dR2 . mR22 0.041 D1 . dD1 . mD11 0.034 D1 . dD1 . mD12 0.033 D1 . dD2 . mD21 0.041 / Ventas_LO(g,i) 'Limite inferior cantidades vendidas' / G1 . N5 0. , G2 . N5 0. , G3 . N4 0. / Ventas_UP(g,i) 'Limite superior cantidades vendidas' / G1 . N5 0.8 , G2 . N5 1.7 , G3 . N4 0.5 / Calidad_LO (g,i,p) 'Limites inferiores de calidad del producto vendido' / G1 . N5 . A5 0.8 , G2 . N5 . A5 0.8 , G3 . N4 . B4 0.8 / Calidad_UP (g,i,p) 'Limites superiores de calidad del producto vendido' / G1 . N5 . A5 1. , G2 . N5 . A5 1. , G3 . N4 . B4 1. / CompCompras(g,i,p) 'Conposicion productos comprados' / G1 . N1 . A1 0.95 G1 . N2 . A2 0.94 G2 . N1 . A1 0.98 G2 . N2 . A2 0.90 G3 . N1 . B1 0.99 G3 . N2 . B2 0.87 / cgi(g, i) 'Precio de compra de i para g' / G1 . N1 210 , G1 . N2 205 , G2 . N1 230 G2 . N2 110 , G3 . N1 310 , G3 . N2 150 / pgi(g, i) 'Precio de venta de i para g' / G1 . N5 516. , G2 . N5 460.3 , G3 . N4 469.3 / wG(g) 'Probabilidad de que suceda el escenario g' / G1 0.15 , G2 0.45, G3 0.4 / ; CompCompras(g,i,p)$(IE(I)$Piner(P)) = 1-SUM(P1$PNOiner(P1),CompCompras(g,i,p1)); * El modelo FREE VARIABLES Benef 'Beneficios anuales' ; POSITIVE VARIABLES Fgi(g,i) 'Flujo total en nodo i para escenario g' Fgip(g,i,p) 'Flujo de p en nodo i para escenario g' Fgudmi(g,u,d,m,i) 'Flujo total en nodo i de u para g, d, m' Fgudmip(g,u,d,m,i,p) 'Flujo de p en nodo i de u para g, d, m' Ngudm(g,u,d,m) 'Nivel de funcionamiento de u, d, m para g' Cgudm(g,u,d,m) 'Nivel de conversion en el reactor' ; BINARY VARIABLES Yu(u) 'Unidades de proceso utilizadas' Yud(u,d) 'Diseņo utilizado en cada unidad de proceso' Ygudm(g,u,d,m) 'Modo de funcionamiento utilizado en cada escenario' ; EQUATIONS Fobj Ec1(g,i) 'Balance productos en nodo i para g' Ec3(u) 'Una unidad tiene un unico diseņo y solo uno' Ec4(g,u,d) '(u, d) tiene que funcionar en m, para: wG(g) > 0' Ec5(g, u, d, m) 'Nivel de funcionamiento de una unidad' Ec6(g,u,d,m) 'Limite superior nivel funcionamiento' Ec7(g,u,d,m) 'Limite inferior nivel funcionamiento' Ec14(g,u,d,m,i) 'balance de nodos por u, d, m' Ec15(g,u,d,m,i) 'No hay flujo si no hay u, d, m' Ec16(g,u,d,m,j,p) 'Conversion en reactor' Ec17(g,u,d,m) 'Nivel de conversion maximo del reactor' Ec18(g,u,d,m,j,p) 'Modelo de columna' Ec19(g,i,p) 'Limites inferiores de calidad del producto' Ec20(g,i,p) 'Limites superiores de calidad del producto' Ec21(g,i,p) 'Conposicion productos comprados' Ec22(g,i,p) 'Balance de flujos en nodos y entrada a unidades (u,d,m)' Ec23(g,i,p) 'Balance de flujos en nodos y salida de unidades (u,d,m)' ; * funcion objetivo Fobj.. Benef - SUM((g,i)$(IS(I)$(Ventas_UP(g,i) gt 0)), wG(g) * pgi(g, i) * Fgi(g,i)) + SUM((g,i)$IE(I), wG(g)*cgi(g,i) * Fgi(g,i)) + SUM((u,d)$Du(u,d), cFud(u,d) * Yud(u,d)) + SUM((g,u,d,m)$Dum(u,d,m), wG(g) * cV(u,d,m) * Ngudm(g,u,d,m)) =E= 0 ; * balances en nodos Ec1(g,i).. SUM(p, Fgip(g, i, p)) - Fgi(g, i) =E= 0 ; * Balance de flujos en nodos y entrada a unidades (u,d,m) Ec22(g,i,p)$IEn(i).. Fgip(g, i, p) - SUM((u,d,m)$(IEu(u,i)$Dum(u, d, m)), Fgudmip(g,u,d,m,i,p)) =E= 0 ; * Balance de flujos en nodos y salida de unidades (u,d,m) Ec23(g,i,p)$ISn(i).. Fgip(g, i, p) - SUM((u,d,m)$(ISu(u,i)$Dum(u, d, m)), Fgudmip(g,u,d,m,i,p)) =E= 0 ; * balance de nodos por u, d, m Ec14(g,u,d,m,i)$(Iu(u,i)$Dum(u,d,m)).. SUM(p,Fgudmip(g,u,d,m,i,p)) - Fgudmi(g,u,d,m,i) =E= 0 ; * una unidad tiene un unico diseņo y solo uno Ec3(u).. SUM(d$Du(u,d), Yud(u,d)) - Yu(u) =E= 0 ; * un diseņo (u, d) puede funcionar en 0 o 1 modo en un escenario Ec4(g,u,d)$(Du(u,d)$(wG(g) ge 0)).. SUM(m$Dum(u,d,m), Ygudm(g,u,d,m)) - Yud(u,d) =L= 0 ; * nivel de funcionamiento de una unidad Ec5(g,u,d,m)$Dum(u,d,m).. SUM((i,p)$IEu(u,i), Fgudmip(g,u,d,m,i,p)) - Ngudm(g,u,d,m) =E= 0 ; * limites nivel de funcionamiento Ec6(g,u,d,m)$Dum(u,d,m).. Ngudm(g,u,d,m) - Nudm_UP(u,d,m) * Ygudm(g,u,d,m) =L= 0 ; Ec7(g,u,d,m)$(Dum(u,d,m)$(Nudm_LO(u,d,m) gt 0)).. Nudm_LO(u,d,m) * Ygudm(g,u,d,m) - Ngudm(g,u,d,m) =L= 0 ; * No hay flujo si no hay u, d, m Ec15(g,u,d,m,i)$(Dum(u,d,m)$Iu(u,i)).. Fgudmi(g,u,d,m,i) - MM_UP * Ygudm(g,u,d,m) =L= 0 ; * modelo de reactores Ec16(g,u,d,m,j,p)$(Dum(u,d,m)$(UR(u)$ISR(u,j))).. SUM(i$IER(u,i), Fgudmip(g,u,d,m,i,p)) - Fgudmip(g,u,d,m,j,p) + etaR(u,d,m,p) * Cgudm(g, u, d, m) =E= 0 ; Ec17(g,u,d,m)$(Dum(u,d,m)$UR(u)).. Cgudm(g,u,d,m) - Cgudm_UP(g,u,d,m) * Ngudm(g,u,d,m) =L= 0 ; * modelo de columnas Ec18(g,u,d,m,j,p)$(ISD(u,j)$Dum(u,d,m)).. Fgudmip(g,u,d,m,j,p) - SUM(i$IED(u,i), etaD(u,d,m,i,j,p) * Fgudmip(g,u,d,m,i,p)) =E= 0 ; * Limites inferiores de calidad del producto Ec19(g,i,p)$(IS(i)$(Calidad_LO (g,i,p) gt 0)).. Calidad_LO (g,i,p) * Fgi(g, i) - Fgip(g, i, p) =L= 0 ; * Limites superiores de calidad del producto Ec20(g,i,p)$(IS(i)$(Calidad_UP (g,i,p) gt 0)).. Fgip(g, i, p) - Calidad_UP(g,i,p) * Fgi(g, i) =L= 0 ; * Conposicion productos comprados Ec21(g,i,p)$IE(I).. Fgip(g, i, p) - CompCompras(g,i,p) * Fgi(g, i) =E= 0 ; * Las opciones OPTION ITERLIM = 4000000 ; OPTION LIMCOL = 0 ; OPTION LIMROW = 0 ; OPTION OPTCR = 0.0000001 ; OPTION RESLIM = 360000 ; OPTION SOLPRINT = ON ; * elegir una de las dos opciones OPTION MIP = CPLEX ; * OPTION MIP = XPRESS ; * Elaboracion del modelo MODEL Proceso /ALL/ ; * Limites cantidades vendidas Fgi.UP(g,i)$(IS(I)$(Ventas_UP(g,i) gt 0)) = Ventas_UP(g,i) ; Fgi.LO(g,i)$IS(I) = Ventas_LO(g,i) ; SOLVE Proceso MAXIMIZING Benef USING MIP ; * salida de resultados DISPLAY Benef.L, Yu.L, Yud.L, Ygudm.L, Fgi.L, Fgip.L, Fgudmi.L, Fgudmip.L, Ngudm.L, Cgudm.L ; * Fin del programa