Predespacho.py 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. from __future__ import division
  2. from pyomo.environ import *
  3. from red.read import excel2net
  4. from red.create import *
  5. from red.create1 import *
  6. from red.makeBdc import makeBdc
  7. from utils.arr2dict import arr2dict
  8. from pyomo.environ import SolverFactory
  9. from pyomo.kernel import value
  10. from numpy import zeros, array
  11. from pandas import DataFrame, ExcelWriter
  12. def setmodel(file):
  13. print("{:=^100}".format(""))
  14. print("{:^100}".format(" Modelo de Predespacho Regional"))
  15. print("{:^100}".format(" Mercados Eléctricos de Centroamérica (c) 2020 "))
  16. print("{:=^100}".format(""))
  17. # ============================================================================
  18. # Importación de datos desde archivo Excel
  19. # ============================================================================
  20. #Parametros de la linea
  21. print("Inicio del Script de Predespacho")
  22. print("Leyendo información de red...")
  23. net = excel2net(file)
  24. bus = setbus(net)#Nodos
  25. branch = setbranch(net, bus)#Set lineas
  26. bu = branch[:, 5]#potenica max de la linea
  27. bl = branch[:, 6]#potenica min de la linea
  28. xc = branch[:,3]#Reactancia de la linea
  29. nb = bus.shape[0] #Numero de nodos
  30. nbr = branch.shape[0]#Numero de lineas
  31. A = makeBdc(bus, branch)#Matriz incidente
  32. brnames = branchnames(bus, branch)#Nombre de las lineas
  33. inc = A.toarray()*-1
  34. dg=read_D_G(file)
  35. print("Leyendo información de ofertas")
  36. #Funcion leer contratos no firmes fisicos flexibles
  37. ex_cnfff = readofertas_cnfffs(file)
  38. vnfff_ed= setvariable(ex_cnfff['energía_dec'])#Energia declarada con respecto al nodo
  39. vnfff_m_i= setvariable_s(ex_cnfff[['magnitud_i1','magnitud_i2','magnitud_i3','magnitud_i4','magnitud_i5']])#Magnitud de energia ofertada -flexibilizacion
  40. vnfff_m_r= setvariable_s(ex_cnfff[['magnitud_r1','magnitud_r2','magnitud_r3','magnitud_r4','magnitud_r5']])
  41. vnfff_m_cvt=setvariable_s(ex_cnfff[['magnitud_cvt1','magnitud_cvt2','magnitud_cvt3','magnitud_cvt4','magnitud_cvt5']])
  42. p_cnfffi= setvariable_s(ex_cnfff[['precio_i1','precio_i2','precio_i3','precio_i4','precio_i5']])#Precio de la ofertas de inyeccion
  43. p_cnfffr= setvariable_s(ex_cnfff[['precio_r1','precio_r2','precio_r3','precio_r4','precio_r5']])#Precio de la ofertas de retiro
  44. p_cnfffcvt= setvariable_s(ex_cnfff[['precio_cvt1','precio_cvt2','precio_cvt3','precio_cvt4','precio_cvt5']])#Precio de la ofertas de inyeccion
  45. k_cnfffcvt= setvariable(ex_cnfff['k'])#Precio de la ofertas de inyeccion
  46. NCFF = ex_cnfff.shape[0]#Numero de contratos firmes
  47. var_bin_cnfffr=MATRIZ_VNFFF_R(bus,ex_cnfff)
  48. var_bin_cnfffi=MATRIZ_VNFFF_I(bus,ex_cnfff)
  49. dem=setvariable(dg['demanda'])
  50. gen=setvariable(dg['generacion'])
  51. #Funcion leer parametros oferta de oportunidad inyeccion
  52. ex_ooi = readofertas_oois(file)
  53. vooi_m=setvariable_s(ex_ooi[['magnitud_ooi1','magnitud_ooi2','magnitud_ooi3','magnitud_ooi4','magnitud_ooi5']])#Ofertas con respecto al nodo
  54. p_ooi= setvariable_s(ex_ooi[['precio_ooi1','precio_ooi2','precio_ooi3','precio_ooi4','precio_ooi5']])#Precio de la ofertas
  55. NOI = ex_ooi.shape[0]#Numero de ofertas de inyeccion
  56. var_bin_ooi=MATRIZ_OOI(bus,ex_ooi)
  57. #Funcion leer parametros oferta de oportunidad retiro
  58. ex_oor = readofertas_oors(file)
  59. voor_m=setvariable_s(ex_oor[['magnitud_oor1','magnitud_oor2','magnitud_oor3','magnitud_oor4','magnitud_oor5']])#Ofertas con respecto al nodo
  60. p_oor= setvariable_s(ex_oor[['precio_oor1','precio_oor2','precio_oor3','precio_oor4','precio_oor5']])#Precio de la ofertas - flexibilizacion
  61. NOR = ex_oor.shape[0]#Numero de ofertas de retiro
  62. var_bin_oor=MATRIZ_OOR(bus,ex_oor)
  63. #Funcion leer parametros contratos firmes
  64. ex_cf = readofertas_cfs(file)
  65. vcf_ed=setvariable(ex_cf['energía_dec'])#Energia declarada con respecto al nodo
  66. vcf_pr=setvariable(ex_cf['potencia_req'])#Potencia requerida con respecto al nodo
  67. vcf_m=setvariable_s(ex_cf[['magnitu_cf1','magnitu_cf2','magnitu_cf3','magnitu_cf4','magnitu_cf5']])#Magnitud de energia ofertada -flexibilizacion
  68. vcf_p= setvariable_s(ex_cf[['precio_cf1','precio_cf2','precio_cf3','precio_cf4','precio_cf5']])#Precio de la ofertas
  69. NCF = ex_cf.shape[0]#Numero de contratos firmes
  70. var_bin_cfr=MATRIZ_CFR(bus, ex_cf)
  71. var_bin_cfi=MATRIZ_CFI(bus, ex_cf)
  72. # Inicio del modelo de optimización
  73. model=ConcreteModel()
  74. #sets
  75. model.i=Set(initialize=range(0, nb))#numero de nodos
  76. model.c=Set(initialize=range(0, nbr))#Numero de lineas
  77. model.OR = Set(initialize=range(0, NOR))#numero de ofertas de oportuniddad retiro
  78. model.OI = Set(initialize=range(0, NOI))#numero de ofertas de oportunidad inyeccion
  79. model.CFF=Set(initialize=range(0, NCFF))#numero de ofertas de CNFFF
  80. model.CF=Set(initialize=range(0, NCF))#numero de ofertas de contratos firmes
  81. model.s=Set(initialize=range(0, 5))#Numero de bloques
  82. #Parametros
  83. #Parametros de la red
  84. model.rtmw_min= Param(model.c, initialize=dict(enumerate(bl)))
  85. model.rtmw_max= Param(model.c, initialize=dict(enumerate(bu)))
  86. model.Inc = Param(model.c, model.i, initialize=arr2dict(inc))
  87. model.Xc = Param(model.c, initialize=dict(enumerate(xc)))
  88. #Parametros de los predespachos nacionales
  89. model.D = Param(model.i, initialize=dict(enumerate(dem)))
  90. model.G = Param(model.i, initialize=dict(enumerate(gen)))
  91. #Ofertas de oportunidad
  92. #Oferta de oportunidad de retiro
  93. model.fr= Param(model.OR, model.s, initialize=arr2dict(p_oor))#Oferta bloques 1
  94. model.pr_ofertado = Param(model.OR, model.s, initialize=arr2dict(voor_m))#Magnitud de la oferta MW-h
  95. model.bin_pr = Param(model.i, model.OR, initialize=arr2dict(var_bin_oor))
  96. #Oferta de oportunidad de inyeccion
  97. model.fi= Param(model.OI, model.s, initialize=arr2dict(p_ooi))#Precio de bloques - Oferta de oportunidad de inyeccion
  98. model.pi_ofertado= Param(model.OI, model.s, initialize=arr2dict(vooi_m))#Magnitud de la oferta MW-h
  99. model.bin_pi = Param(model.i,model.OI,initialize=arr2dict(var_bin_ooi))
  100. #Contratos firmes
  101. model.pf_declarada=Param(model.CF, initialize=dict(enumerate(vcf_ed)))#Energia declarada
  102. model.pf_req=Param(model.CF, initialize=dict(enumerate(vcf_pr)))# Potencia requerida - Si no se flexbiliza deberian de ser igual la energia y la potencia
  103. #Precio de flexibilidad de contrato
  104. model.ffi=Param(model.CF, model.s, initialize=arr2dict(vcf_p))#Precio de bloques - Contrato firme - Oferta de flexibilidad
  105. model.pfi_ofertado=Param(model.CF, model.s, initialize=arr2dict(vcf_m))#Magnitud de la oferta - tiene que ser igual a la suma de la energia declarada
  106. model.bin_cfi=Param(model.i, model.CF,initialize=arr2dict(var_bin_cfi))
  107. model.bin_cfr=Param(model.i, model.CF,initialize=arr2dict(var_bin_cfr))
  108. #Ofertas de flexibilidad de contratos fisicos flexibles
  109. #Ofertas de inyeccion
  110. model.pff_declarada=Param(model.CFF, initialize=dict(enumerate(vnfff_ed)))
  111. model.pffi_ofertado=Param(model.CFF, model.s, initialize=arr2dict(vnfff_m_i))#Magnitud del bloque
  112. model.fffi=Param(model.CFF, model.s, initialize=arr2dict(p_cnfffi))#Precio de inyeccion
  113. model.bin_pffi=Param(model.i,model.CFF, initialize=arr2dict(var_bin_cnfffi))
  114. #Oferta de retiro
  115. model.pffr_ofertado=Param(model.CFF, model.s, initialize=arr2dict(vnfff_m_r))#Magnitud de bloque de retiro ofertado
  116. model.fffr=Param(model.CFF, model.s, initialize=arr2dict(p_cnfffr))#Precio de bloques - Contrato no firme fisico flexible
  117. model.bin_pffr=Param(model.i,model.CFF, initialize=arr2dict(var_bin_cnfffr))
  118. #Ofertad de pago maximo por CVT
  119. model.k=Param(model.CFF, initialize=dict(enumerate(k_cnfffcvt)))#Indicador de oferta
  120. model.pfft_ofertado=Param(model.CFF, model.s, initialize=arr2dict(vnfff_m_cvt))#Magnitud del bloque
  121. model.ffft=Param(model.CFF, model.s, initialize=arr2dict(p_cnfffcvt))#Precio de pago maximo CVT
  122. #Variabeles
  123. #Variable ofertas de oportunidad
  124. model.pr= Var(model.OR, model.s, domain=NonNegativeReals)#Parte aceptada de cada bloques de las ofertas de oportunidad de retiro
  125. model.pi= Var(model.OI, model.s, domain=NonNegativeReals)#Parte aceptada de cada bloques de las ofertas de oportunidad de inyeccion
  126. #Variables CF
  127. model.pfi=Var(model.CF, model.s, domain=NonNegativeReals)#Parte aceptada de cada bloques de las ofertas de flexibilidad de contratos firmes
  128. #Variables CNFFF
  129. model.pffr=Var(model.CFF, model.s, domain=NonNegativeReals)#Parte aceptada de cada bloques de las oferta de flexibilidad de retiro
  130. model.pffi=Var(model.CFF, model.s, domain=NonNegativeReals)#Parte aceptada de cada bloques de las ofertas de flexibilidad de inyección de los contratos físicos flexibles
  131. model.pfft=Var(model.CFF, model.s, domain=NonNegativeReals)#Parte aceptada de cada bloques de las oferta de pago máximo de CVT de los contratos físicos flexibles
  132. model.pff_iny_fisico=Var(model.CFF, domain=NonNegativeReals)#Componente fisica de energia horaria de inyeecion
  133. model.pff_ret_fisico=Var(model.CFF, domain=NonNegativeReals)#Componente fisica de energia horaria de retiro
  134. #Variables FOENS
  135. model.pf_cortada=Var(model.CF, domain=NonNegativeReals)#Energia firme de lo CF
  136. model.pf_pre_cortada=Var(model.CF, domain=NonNegativeReals)
  137. model.pff_cortada=Var(model.CFF, domain=NonNegativeReals)#Energia firme de los CNFFF
  138. model.fens=Var()
  139. #Variable problema de optimizacion
  140. model.inyeccion= Var(model.i, domain=NonNegativeReals)#Inyeccion por nodo
  141. model.retiro= Var(model.i, domain=NonNegativeReals)#Retiro por nodo
  142. model.ref_angular= Var(model.i)#Fase del voltaje en el nodo
  143. model.rtmw_c= Var(model.c)#Flujo de potencia actica por linea
  144. print("Ecuación de Función Objetivo Max")
  145. def objfunc(model):
  146. return (10000*(sum(model.fr[OR,s]*model.pr[OR,s] for OR in model.OR for s in model.s) - # ┌ FOO
  147. sum(model.fi[OI,s]*model.pi[OI,s] for OI in model.OI for s in model.s) - # └
  148. sum(model.ffi[CF,s]*model.pfi[CF,s] for CF in model.CF for s in model.s) + # [ FOF
  149. sum(model.fffr[CFF,s]*model.pffr[CFF,s] for CFF in model.CFF for s in model.s) - # ┌
  150. sum(model.fffi[CFF,s]*model.pffi[CFF,s] for CFF in model.CFF for s in model.s) + # │ FOFF
  151. sum(model.ffft[CFF,s]*model.pfft[CFF,s] for CFF in model.CFF for s in model.s) - # └
  152. model.fens*sum(model.pf_cortada[CF] for CF in model.CF) - # ┌ FOENS
  153. model.fens*0.5*sum(model.pff_cortada[CFF] for CFF in model.CFF))) # └
  154. model.OBJ= Objective(rule=objfunc, sense=maximize)
  155. print("Restricciones del Modelo de Optimización")
  156. def fens_restriccion(model):
  157. if NOR==0 & NCF==0 & NCFF>0:
  158. return model.fens == 3*max(model.fffr[CFF,s] for CFF in model.CFF for s in model.s)
  159. elif NOR==0 & NCF>0 & NCFF==0:
  160. return model.fens == 3*max(model.ffi[CF,s] for CF in model.CF for s in model.s)
  161. elif NOR==0 & NCF>0 & NCFF>0:
  162. return model.fens == 3*max(max(model.ffi[CF,s] for CF in model.CF for s in model.s),
  163. max(model.fffr[CFF,s] for CFF in model.CFF for s in model.s))
  164. elif NOR>0 & NCF==0 & NCFF==0:
  165. return model.fens == 3*max(model.fr[OR,s] for OR in model.OR for s in model.s)
  166. elif NOR>0 & NCF==0 & NCFF>0:
  167. return model.fens == 3*max(max(model.fr[OR,s] for OR in model.OR for s in model.s),
  168. max(model.fffr[CFF,s] for CFF in model.CFF for s in model.s))
  169. elif NOR>0 & NCF>0 & NCFF==0:
  170. return model.fens == 3*max(max(model.fr[OR,s] for OR in model.OR for s in model.s),
  171. max(model.ffi[CF,s] for CF in model.CF for s in model.s))
  172. elif NOR>0 & NCF>0 & NCFF>0:
  173. return model.fens == 3*max(max(model.fr[OR,s] for OR in model.OR for s in model.s),
  174. max(model.fffr[CFF,s] for CFF in model.CFF for s in model.s),
  175. max(model.ffi[CF,s] for CF in model.CF for s in model.s))
  176. model.fens_constraint= Constraint(rule=fens_restriccion)
  177. #Restrecciones FOO
  178. def pi_restriccion(model,OI,s):
  179. return ((model.pi[OI,s] <=model.pi_ofertado[OI,s]))
  180. model.pi_constraint= Constraint(model.OI, model.s, rule=pi_restriccion)
  181. def pr_restriccion(model,OR,s):
  182. return ((model.pr[OR,s]<=model.pr_ofertado[OR,s]))
  183. model.pr_constraint= Constraint(model.OR, model.s, rule=pr_restriccion)
  184. #Restricciones FOF
  185. def pfi_restriccion(model,CF,s):
  186. return (model.pfi[CF,s]<=model.pfi_ofertado[CF,s])
  187. model.pfi_constraint= Constraint(model.CF, model.s, rule=pfi_restriccion)
  188. #Restricciones FOFF
  189. def pffr_restriccion(model,CFF,s):
  190. return (model.pffr[CFF,s]<=model.pffr_ofertado[CFF,s])
  191. model.pffr_constraint= Constraint(model.CFF, model.s, rule=pffr_restriccion)
  192. def pffi_restriccion(model,CFF,s):
  193. return (model.pffi[CFF,s]<=model.pffi_ofertado[CFF,s])
  194. model.pffi_constraint= Constraint(model.CFF, model.s, rule=pffi_restriccion)
  195. if (model.k[CFF] ==0 for CFF in model.CFF):
  196. def pfft_restriccion(model,CFF,s):
  197. #if model.k[CFF] ==0:
  198. return (model.pfft[CFF,s]<=model.pfft_ofertado[CFF,s])
  199. model.pfft_constraint= Constraint(model.CFF, model.s, rule=pfft_restriccion)
  200. #K(cff) vale 0 si hay oferta de pago maximo por CVT
  201. def pff_iny_fisico_restriccion(model,CFF):
  202. if model.k[CFF] ==0:
  203. return (model.pff_iny_fisico[CFF]==sum(model.pfft[CFF,s] for s in model.s)- sum(model.pffr[CFF,s] for s in model.s))
  204. elif model.k[CFF] ==1:
  205. return (model.pff_iny_fisico[CFF]==model.pff_declarada[CFF] - model.pff_cortada[CFF]- sum(model.pffr[CFF,s] for s in model.s))
  206. model.pff_iny_fisico_constraint=Constraint(model.CFF, rule=pff_iny_fisico_restriccion)
  207. def pff_ret_fisico_restriccion(model,CFF):
  208. if model.k[CFF] ==0:
  209. return (model.pff_ret_fisico[CFF]==sum(model.pfft[CFF,s] for s in model.s) - sum(model.pffi[CFF,s] for s in model.s))
  210. elif model.k[CFF] ==1:
  211. return (model.pff_ret_fisico[CFF]==model.pff_declarada[CFF] - model.pff_cortada[CFF]- sum(model.pffi[CFF,s] for s in model.s))
  212. model.pff_ret_fisico_constraint=Constraint(model.CFF, rule=pff_ret_fisico_restriccion)
  213. #Restriccion FOENS
  214. def pff_cortada_restriccion(model,CFF):
  215. return (model.pff_cortada[CFF]<=model.pff_declarada[CFF])
  216. model.pff_cortada_constraint=Constraint(model.CFF, rule=pff_cortada_restriccion)
  217. def pf_cortada_restriccion(model,CF):
  218. return (model.pf_cortada[CF]<=model.pf_req[CF] - model.pf_pre_cortada[CF])
  219. model.pf_cortada_constraint=Constraint(model.CF, rule=pf_cortada_restriccion)
  220. print('Restricciones de transmision')
  221. #Restricciones de transmision
  222. def inyec(model,i):
  223. return (model.inyeccion[i] == model.G[i] +
  224. sum(model.pi[OI,s]*model.bin_pi[i,OI] for OI in model.OI for s in model.s) +
  225. sum(model.pfi[CF,s]*model.bin_cfi[i,CF] for CF in model.CF for s in model.s) +
  226. sum(model.pff_iny_fisico[CFF]*model.bin_pffi[i,CFF] for CFF in model.CFF))
  227. model.inyec_constraint= Constraint(model.i, rule=inyec)
  228. def retiro(model,i):
  229. return (model.retiro[i] == model.D[i] +
  230. sum(model.pr[OR,s]*model.bin_pr[i,OR] for OR in model.OR for s in model.s) +
  231. sum(model.pf_req[CF]*model.bin_cfr[i,CF] for CF in model.CF) +
  232. sum(model.pff_ret_fisico[CFF]*model.bin_pffr[i,CFF] for CFF in model.CFF) -
  233. sum(model.pf_cortada[CF]*model.bin_cfr[i,CF] for CF in model.CF) -
  234. sum(model.pf_pre_cortada[CF]*model.bin_cfr[i,CF] for CF in model.CF))
  235. model.retiro_constraint= Constraint(model.i, rule=retiro)
  236. #Los multiplicadore o variable duales de esta restriccion son los precios nodales
  237. def balance_inyeccion_retiro(model,i):
  238. return (model.inyeccion[i] + sum(model.Inc[c,i]*model.rtmw_c[c] for c in model.c)== model.retiro[i])
  239. model.balance_inyeccion_retiro_constraint= Constraint(model.i,rule=balance_inyeccion_retiro)
  240. def rtmw_min_restriccion(model,c):
  241. return (model.rtmw_c[c]>=-model.rtmw_min[c])
  242. model.rtmw_min_constraint= Constraint(model.c, rule=rtmw_min_restriccion)
  243. def rtmw_max_restriccion(model,c):
  244. return (model.rtmw_c[c]<=model.rtmw_max[c])
  245. model.rtmw_max_constraint= Constraint(model.c, rule=rtmw_max_restriccion)
  246. #Referencia angular
  247. #def ref_angular_restriccion(model,i):
  248. # return model.ref_angular[0]==0
  249. #model.ref_angular_constraint =Constraint(model.i, rule=ref_angular_restriccion)
  250. def flujo_potencia_actica(model,c):
  251. return (model.Xc[c]*model.rtmw_c[c]+sum(model.Inc[c,i]*model.ref_angular[i] for i in model.i)== 0)
  252. model.flujo_potencia_actica_constraint= Constraint(model.c, rule=flujo_potencia_actica)
  253. model.dual = Suffix(direction=Suffix.IMPORT)
  254. print("Construcción del modelo terminada.")
  255. opt = SolverFactory('ipopt')
  256. result = opt.solve(model)
  257. model.solutions.store_to(result)
  258. # Cálculo de Precios Nodales
  259. # =============================================================================
  260. print("Calculando Precios Nodales")
  261. Sigma = zeros(nb)
  262. for i in model.i:
  263. Sigma[i] = model.dual[model.balance_inyeccion_retiro_constraint[i]]
  264. # Construcción de array para grabar
  265. # =============================================================================
  266. flujos = brnames.copy()
  267. f = array(list(model.rtmw_c.get_values().values()))
  268. flujos['Flujo'] = f
  269. #print(flujos)
  270. pon = DataFrame()
  271. result_inyeccion = array(list(model.inyeccion.get_values().values()))
  272. result_retiro = array(list(model.retiro.get_values().values()))
  273. pon['nodo']= bus
  274. pon['Inyeccion'] = result_inyeccion
  275. pon['Retiro'] = result_retiro
  276. pon['Precio Exante'] = Sigma*-1
  277. #print(pon)
  278. result_pff_iny=array(list(model.pff_iny_fisico.get_values().values()))
  279. result_pff_ret=array(list(model.pff_ret_fisico.get_values().values()))
  280. result_pr = setvariable_p(array(list(model.pr.get_values().values())),NOR)
  281. result_pi = setvariable_p(array(list(model.pi.get_values().values())),NOI)
  282. result_pfi = setvariable_p(array(list(model.pfi.get_values().values())),NCF)
  283. result_pffr = setvariable_p(array(list(model.pffr.get_values().values())),NCFF)
  284. result_pffi = setvariable_p(array(list(model.pffi.get_values().values())),NCFF)
  285. result_pfft = setvariable_p(array(list(model.pfft.get_values().values())),NCFF)
  286. result_foo_r=DataFrame()
  287. result_foo_r['N°']=ex_oor['N°']
  288. result_foo_r['Pr Bloque 1']=result_pr[:,0]
  289. result_foo_r['Pr Bloque 2']=result_pr[:,1]
  290. result_foo_r['Pr Bloque 3']=result_pr[:,2]
  291. result_foo_r['Pr Bloque 4']=result_pr[:,3]
  292. result_foo_r['Pr Bloque 5']=result_pr[:,4]
  293. result_foo_i=DataFrame()
  294. result_foo_i['N°']=ex_ooi['N°']
  295. result_foo_i['Pi Bloque 1']=result_pi[:,0]
  296. result_foo_i['Pi Bloque 2']=result_pi[:,1]
  297. result_foo_i['Pi Bloque 3']=result_pi[:,2]
  298. result_foo_i['Pi Bloque 4']=result_pi[:,3]
  299. result_foo_i['Pi Bloque 5']=result_pi[:,4]
  300. #print(result_foo)
  301. result_fof=DataFrame()
  302. result_fof['N°']=ex_cf['N°']
  303. result_fof['Pfi Bloque 1']=result_pfi[:,0]
  304. result_fof['Pfi Bloque 2']=result_pfi[:,1]
  305. result_fof['Pfi Bloque 3']=result_pfi[:,2]
  306. result_fof['Pfi Bloque 4']=result_pfi[:,3]
  307. result_fof['Pfi Bloque 5']=result_pfi[:,4]
  308. result_foff=DataFrame()
  309. result_foff['N°']=ex_cnfff['N°']
  310. result_foff['Pffr Bloque 1']=result_pffr[:,0]
  311. result_foff['Pffr Bloque 2']=result_pffr[:,1]
  312. result_foff['Pffr Bloque 3']=result_pffr[:,2]
  313. result_foff['Pffr Bloque 4']=result_pffr[:,3]
  314. result_foff['Pffr Bloque 5']=result_pffr[:,4]
  315. result_foff['Pffi Bloque 1']=result_pffi[:,0]
  316. result_foff['Pffi Bloque 2']=result_pffi[:,1]
  317. result_foff['Pffi Bloque 3']=result_pffi[:,2]
  318. result_foff['Pffi Bloque 4']=result_pffi[:,3]
  319. result_foff['Pffi Bloque 5']=result_pffi[:,4]
  320. result_foff['Pfft Bloque 1']=result_pfft[:,0]
  321. result_foff['Pfft Bloque 2']=result_pfft[:,1]
  322. result_foff['Pfft Bloque 3']=result_pfft[:,2]
  323. result_foff['Pfft Bloque 4']=result_pfft[:,3]
  324. result_foff['Pfft Bloque 5']=result_pfft[:,4]
  325. #print(result_foff)
  326. foo_ret_iny=DataFrame()
  327. foo_ret_iny['N°']=ex_cnfff['N°']
  328. foo_ret_iny['Inyeccion']=result_pff_iny
  329. foo_ret_iny['Retiro']=result_pff_ret
  330. print("Escribiendo resultados en carpeta")
  331. writer=ExcelWriter("Resultados_predespacho.xlsx")
  332. flujos.to_excel(writer,'flujos',index=False)
  333. pon.to_excel(writer,'pon',index=False)
  334. result_foo_i.to_excel(writer,'result_foo_i',index=False)
  335. result_foo_r.to_excel(writer,'result_foo_r',index=False)
  336. result_fof.to_excel(writer,'result_fof',index=False)
  337. result_foff.to_excel(writer,'result_foff',index=False)
  338. foo_ret_iny.to_excel(writer,'result_foff_ret_iny',index=False)
  339. writer.save()
  340. print("{:=^100}".format(""))
  341. print("{:^100}".format(" Script Finalizado "))
  342. print("{:^100}".format(" Mercados Eléctricos de Centroamérica (c) 2020 "))
  343. print("{:=^100}".format(""))
  344. #print(result)
  345. return 0