Si alguno tiene los resultados para comparar. dejo los mios y el script (para correr en colab).
Se Producen 4000.0 BbL de NF
Se Producen 0.0 BbL de DO
Se Producen 20390.244 BbL de FO
Valor Optimo: 3594390.2613999997
Hola también lo hice en Python y me dio distinto, dejo mi código y mis resultados. Si a alguno mas le da distinto avise.
status:1,Optimal objective:903543.2259999998 CR1PS:0.0 CR2PS:6000.0 CR3PS:4000.0 CRRFO:2760.0 CRTPS:10000.0 DC:3783.7742 DOCDC:3783.7742 DOCFO:623.22581 DOCTOT:4407.0 DOVCC:2940.0 DOVDC:0.0 DOVFO:0.0 DOVTOT:2940.0 FO:3383.2258 GOPCC:3180.0 NF:3504.0 NFCDC:0.0 NFCNF:2484.0 NFCTOT:2484.0 NFVFO:0.0 NFVNF:1020.0 NFVTOT:1020.0 TOTCC:6120.0
Dejo mi planteo. Creo que las únicas restricciones que difieren son estas de los rendimientos:
!Rendimiento de crudos
0.23NFV+0.28DOV+0.40GOP+0.08CRR-0.99CR1=0
0.15NFV+0.31DOV+0.35GOP+0.18CRR-0.99CR2=0
0.03NFV+0.27DOV+0.27GOP+0.42CRR-0.99CR3=0
!Rendimiento del cracking
0.25NFC+0.85DOC-1.10DOVCC=0
0.55NFC+0.60DOC-1.15GOP=0
Lo pensé leyendo la tabla en forma vertical por columnas, en vez de mirarla de manera horizontal. Pero creo que deberían ser lo mismo.Dejo el planteo completo y los resultados:
!Objetivo maximizar ganancias
!MAX ingreso - costo materias primas - costo fijo
[usd/Bbl *Bbl]
MAX 290NF+240DO+210FO-170CR1-150CR2-130CR3-5PS-10CC-CF
ST
!Costo fijo
CF=200000
!Capacidad pipestill[ Bbl/D]
PS<10000
CR1+CR2+CR2-PS=0
!Capacidad cracking [ Bbl/D]
CC<6500
GOP+DOVCC-CC=0
!Disponibilidad de crudos
CR1<6000
CR2<6000
CR3<6000
!Rendimiento de crudos
0.23NFV+0.28DOV+0.40GOP+0.08CRR-0.99CR1=0
0.15NFV+0.31DOV+0.35GOP+0.18CRR-0.99CR2=0
0.03NFV+0.27DOV+0.27GOP+0.42CRR-0.99CR3=0
!Rendimiento del cracking
0.25NFC+0.85DOC-1.10DOVCC=0
0.55NFC+0.60DOC-1.15GOP=0
!Productos intermedios
NFVNF+NFVFO-NFV=0
NFCNF+NFCDO-NFC=0
DOCDO+DOCFO-DOC=0
DOVFO+DOVDO+DOVCC-DOV=0
!Productos finales
NFVNF+NFCNF-NF=0
NFCDO+DOVDO+DOCDO-DO=0
DOCFO+DOVFO+NFVFO+CRR-FO=0
!Requerimiento máximo [Bbl/D]
NF<4000
DO<4000
!Octanos
59NFVNF+98NFCNF-80NF>0
!Especificacion diesel oil
NFCDO-0.10DO<0
!Especificación fuel oil
14CRR+52DOCFO+42DOVFO+60NFVFO-21FO>0
END
Ganancia = 2 541 034 USD
Producción
NF=4000 Bbl
FO=13863 Bbl
DO=0 kBbl
Hola!
Resolví este ejercicio en LINDO pero no obtuve ninguno de los resultados de arriba.
El código que escribí es muy parecido al de Vicky salvo las restricciones asociadas al rendimiento de los crudos. No estoy segura de que sea lo mismo hacerlo de una manera u otra, porque en realidad lo que ingresa a la unidad de destilación son los crudos y de acuerdo al rendimiento que tengan en cada producto lo que vayas a tener de cada crudo en cada uno de los productos. De tu forma lo que interpreto es, por ejemplo para la nafta virgen, que un 23% de su composición es Crudo1, un 15% es Crudo2 y un 3% es Crudo3, pero no llegarías al 100% y yo entiendo que la totalidad de cada producto está compuesta sólo por los Crudos, porque no dice que ingresa ninguna otra materia prima. No sé si se entenderá pero de todas maneras no sé si lo que digo es correcto, puede ser que sea lo mismo.
Dejo mi código también y los rtdos:
MAX 290NF+240DO+210FO-CF-170CR1-150CR2-130CR3-5PS-10CC
S.T.
!COSTO FIJO
CF=200000
!ECUACIONES DE BALANCE Y CAPACIDAD PIPESTILL
PS-CR1-CR2-CR3=0
PS<10000
!ECUACIONES DE BALANCE Y CAPACIDAD CRACKING
CC-DOVCC-GOP=0
CC<6500
!DISPONIBILIDAD CRUDOS
CR1<6000
CR2<6000
CR3<6000
!RENDIMIENTOS DE CRUDOS
0.23CR1+0.15CR2+0.03CR3-NFV=0
0.28CR1+0.31CR2+0.27CR3-DOV=0
0.4CR1+0.35CR2+0.27CR3-GOP=0
0.08CR1+0.18CR2+0.42CR3-CRR=0
!RENDIMIENTO DEL CRACKING
0.25DOVCC+0.55GOP-NFC=0
0.85DOVCC+0.6GOP-DOC=0
!BALANCE DE PRODUCTOS INTERMEDIOS
DOV-DOVDO-DOVFO-DOVCC=0
NFV-NFVNF-NFVFO=0
NFC-NFCNF-NFCFO=0
DOC-DOCDO-DOCFO=0
!BALANCE DE PRODUCTOS FINALES
NF-NFVNF-NFCNF=0
DO-NFCD0-DOCDO-DOVDO=0
FO-CRR-DOVFO-NFVFO-DOCFO=0
!REQUERIMIENTOS MAXIMOS DE PRODUCTOS FINALES
NF<4000
DO<4000
!ESPECIFICACIONES COMERCIALES DE LA NAFTA
59NFVNF+98NFCNF-80NF>0
!ESPECIFICACIONES COMERCIALES DEL DIESEL OIL
NFCDO-0.1DO<0
!ESPECIFICACIONES COMERCIALES DEL FUEL OIL
14CRR+52DOCFO+42DOVFO+60NFVFO-21FO>0
END
RESULTADOS:
Ganancia= 1 757 870 USD
NF= 3156 Bbl
DO= 4000 Bbl
FO= 7483 Bbl
Adjunto el link de la clase de Formulaciones Complejas donde en ingeniero Miranda explica un ejercicio igual a este, pero con otros números y plantea las restricciones como ustedes. Así que creería que están bien sus formulaciones.
https://vimeo.com/402082253
Lo volví a plantear con ese cambio en las restricciones y me dio :
Ganancia = 1 017 572 USD
Producción
NF=3566 Bbl
FO=3950.24 Bbl
DO=4192.26 kBbl
También lo podemos consultar mañana, para ver que nos recomiendan los profesores.Camila, yo tengo planteadas las restricciones igual que vos, con el mismo criterio para los rendimientos.
Pero creo que tenes un error en uno de los balances de productos intermedios:
NFC-NFCNF-NFCFO=0
Según el enunciado, debería ser: NFC - NFCNF - NFCDO = 0
Dejo mi planteo completo y el resultado
IO_Ej_Guia_3.1:
MAXIMIZE
-175000.0*C1 + -155000.0*C2 + -135000.0*C3 + 240000.0*DO + -10000*DOVCC + 210000*FO + -10000.0*GOP + 290000*NF + -200000.0
SUBJECT TO
restriccion_0: C1 + C2 + C3 <= 10
restriccion_1: C1 <= 6
restriccion_2: C2 <= 6
restriccion_3: C3 <= 6
restriccion_4: 0.23 C1 + 0.15 C2 + 0.03 C3 - NFV = 0
restriccion_5: NFV - NFVFO - NFVNC = 0
restriccion_6: 0.28 C1 + 0.31 C2 + 0.27 C3 - DOV = 0
restriccion_7: DOV - DOVCC - DOVDO - DOVFO = 0
restriccion_8: 0.4 C1 + 0.35 C2 + 0.27 C3 - GOP = 0
restriccion_9: 0.08 C1 + 0.18 C2 + 0.42 C3 - CRR = 0
restriccion_10: DOVCC + GOP <= 6.5
restriccion_11: 0.25 DOV + 0.55 GOP - NFC = 0
restriccion_12: - DOC + 0.85 DOV + 0.6 GOP = 0
restriccion_13: NFC - NFCDO - NFCNC = 0
restriccion_14: DOC - DOCDO - DOCFO = 0
restriccion_15: NF - NFCNC - NFVNC = 0
restriccion_16: DO - DOCDO - DOVDO - NFCDO = 0
restriccion_17: - CRR - DOCFO - DOVFO + FO - NFVFO = 0
restriccion_18: NF <= 4
restriccion_19: DO <= 4
restriccion_20: - 80 NF + 98 NFCNC + 59 NFVNC >= 0
restriccion_21: 0.1 DO + NFCDO <= 0
restriccion_22: 14 CRR + 52 DOCFO + 42 DOVFO - 21 FO + 60 NFVFO >= 0
status: 1, Optimal
Valor Optimo del Funcional:
objective: 1436830.0
C1: 0.0
C2: 6.0
C3: 4.0
DO: 0.0
FO: 10.107
NF: 3.504
Si, tenés razón. Ahí lo corregí pero me dió lo mismo que antes, medio raro.
Gracias por la observación!
El resultado ahora coincide con el que publico Brian:
Valor Optimo del Funcional:
objective: 903543.2259999999
C1: 0.0
C2: 6.0
C3: 4.0
DO: 3.7837742
FO: 3.3832258
NF: 3.504
Aparte, corrí el mismo código con las restricciones que están en la teórica de miranda (solo cambian los costos y precios) y me dio ok, asi que supongo que tiene que estar OK.
Dejo el código en python corregido. Saludos!
Buenas, dejo mi planteo porque no me coincide con ninguno de los anteriores. Puede ser que tenga algún error y no logre darme cuenta.
MAX INGRESO - CCRUDO - CPROD - CFIJO
ST
!Disposición de materia prima
C1 <= 6000
C2 <= 6000
C3 <= 6000
-CTPS + C1 + C2 + C3=0
-ALICC + DOV3 + GO=0
!Capacidad de planta
CTPS <= 10000
ALICC <= 6500
!Rendimiento de crudos
-NFV1 - NFV2 + 0.23C1 + 0.15C2 + 0.03C3=0
-DOV1 - DOV2 - DOV3 + 0.28C1 + 0.31C2 + 0.27C3=0
-GOP + 0.4C1 + 0.35C2 + 0.27C3=0
-CRR + 0.08C1 + 0.18C2 + 0.42C3=0
!Rendimiento de los elementos del cracking
-NFC1 - NFC2 + 0.25DOV3 + 0.55GOP = 0
-DOC1 - DOC2 + 0.85DOV3 + 0.60GOP = 0
!Requerimientos máximos de producto
-NF + NFV1 + NFC1 = 0
-DO + DOV1 + NFC2 + DOC1 = 0
-FO + NFV2 + DOV2 + DOC2 + CRR = 0
NF <= 4000
DO <= 4000
!Especificaciones comerciales
-80NF + 59NFV1 + 98NFC1 = 0
-0.1DO + NFC2 <= 0
-21FO + 60NFV2 + 42DOV2 + 52DOC2 + 14CRR >= 0
!Costos e ingreso
-CCRUDO + 170C1 + 150C2 + 130C3 = 0
-CPROD + 5CTPS + 10ALICC = 0
CFIJO = 200000
-INGRESO + 290NF + 240DO + 210FO = 0
END
Aqui dejo los resultados obtenidos:
Objective value: 822503.3
NF 3943.333
DO 4000.000
FO 2707.000
C1 4000.000
C2 6000.000
C3 0.000000
Estimados y estimadas,
este problema es de los más exigentes y no es fácil resolverlo sin ningún error en los nombres de las variables, o en los indices, etc.
En tu caso, Agustín, luego de analizarlo, me parece que el error esta en la variable GO/GOP que en realidad son la misma cosa con distinto nombre. De cualquier forma, el planteo es el correcto, que es lo importante.
Los detalles que nos lleven a diferencias mínimas son poco importantes si no podemos expresarlos en preguntas más conceptuales. Si hay diferencias y el planteo es el mismo, entonces el error esta en esos detalles y no vale la pena detenerse. Si hay diferentes planteos, entonces sí hay que entender cual de los dos—sino los dos— es el planteo correcto.
Saludos.