Predespacho.py 19 KB

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