Predespacho.py 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  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. #Calculo de parametros
  73. if NOR>0 & NCFF>0:
  74. fens=3*max(max(ex_oor['precio_oor1']),max(ex_cnfff['precio_i1']))#Valor de los retiro firmes no suministrados
  75. elif NOR>0 or NCFF==0:
  76. fens=3*max(ex_oor['precio_oor1'])
  77. elif NOR==0 or NCFF>0:
  78. fens=3*max(ex_cnfff['precio_i1'])
  79. ffenes=0.5*fens#Valor de la energía no flexible de los contratos físicos flexibles no suministrados
  80. # Inicio del modelo de optimización
  81. model=ConcreteModel()
  82. #sets
  83. model.i=Set(initialize=range(0, nb))#numero de nodos
  84. model.c=Set(initialize=range(0, nbr))#Numero de lineas
  85. model.OR = Set(initialize=range(0, NOR))#numero de ofertas de oportuniddad retiro
  86. model.OI = Set(initialize=range(0, NOI))#numero de ofertas de oportunidad inyeccion
  87. model.CFF=Set(initialize=range(0, NCFF))#numero de ofertas de CNFFF
  88. model.CF=Set(initialize=range(0, NCF))#numero de ofertas de contratos firmes
  89. model.s=Set(initialize=range(0, 5))#Numero de bloques
  90. #Parametros
  91. #Parametros de la red
  92. model.rtmw_min= Param(model.c, initialize=dict(enumerate(bl)))
  93. model.rtmw_max= Param(model.c, initialize=dict(enumerate(bu)))
  94. model.Inc = Param(model.c, model.i, initialize=arr2dict(inc))
  95. model.xc = Param(model.c, initialize=dict(enumerate(xc)))
  96. #Parametros de los predespachos nacionales
  97. model.D = Param(model.i, initialize=dict(enumerate(dem)))
  98. model.G = Param(model.i, initialize=dict(enumerate(gen)))
  99. #Ofertas de oportunidad
  100. #Oferta de oportunidad de retiro
  101. model.fr= Param(model.OR, model.s, initialize=arr2dict(p_oor))#Oferta bloques 1
  102. model.pr_ofertado = Param(model.OR, model.s, initialize=arr2dict(voor_m))#Magnitud de la oferta MW-h
  103. model.bin_pr = Param(model.i, model.OR, initialize=arr2dict(var_bin_oor))
  104. #Oferta de oportunidad de inyeccion
  105. model.fi= Param(model.OI, model.s, initialize=arr2dict(p_ooi))#Precio de bloques - Oferta de oportunidad de inyeccion
  106. model.pi_ofertado= Param(model.OI, model.s, initialize=arr2dict(vooi_m))#Magnitud de la oferta MW-h
  107. model.bin_pi = Param(model.i,model.OI,initialize=arr2dict(var_bin_ooi))
  108. #Contratos firmes
  109. model.pf_declarada=Param(model.CF, initialize=dict(enumerate(vcf_ed)))#Energia declarada
  110. 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
  111. #Precio de flexibilidad de contrato
  112. model.ffi=Param(model.CF, model.s, initialize=arr2dict(vcf_p))#Precio de bloques - Contrato firme - Oferta de flexibilidad
  113. 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
  114. model.bin_cfi=Param(model.i, model.CF,initialize=arr2dict(var_bin_cfi))
  115. model.bin_cfr=Param(model.i, model.CF,initialize=arr2dict(var_bin_cfr))
  116. #Ofertas de flexibilidad de contratos fisicos flexibles
  117. #Ofertas de inyeccion
  118. model.pff_declarada=Param(model.CFF, initialize=dict(enumerate(vnfff_ed)))
  119. model.pffi_ofertado=Param(model.CFF, model.s, initialize=arr2dict(vnfff_m_i))#Magnitud del bloque
  120. model.fffi=Param(model.CFF, model.s, initialize=arr2dict(p_cnfffi))#Precio de inyeccion
  121. model.bin_pffi=Param(model.i,model.CFF, initialize=arr2dict(var_bin_cnfffi))
  122. #Oferta de retiro
  123. model.pffr_ofertado=Param(model.CFF, model.s, initialize=arr2dict(vnfff_m_r))#Magnitud de bloque de retiro ofertado
  124. model.fffr=Param(model.CFF, model.s, initialize=arr2dict(p_cnfffr))#Precio de bloques - Contrato no firme fisico flexible
  125. model.bin_pffr=Param(model.i,model.CFF, initialize=arr2dict(var_bin_cnfffr))
  126. #Ofertad de pago maximo por CVT
  127. model.k=Param(model.CFF, initialize=dict(enumerate(k_cnfffcvt)))#Indicador de oferta
  128. model.pfft_ofertado=Param(model.CFF, model.s, initialize=arr2dict(vnfff_m_cvt))#Magnitud del bloque
  129. model.ffft=Param(model.CFF, model.s, initialize=arr2dict(p_cnfffcvt))#Precio de pago maximo CVT
  130. #Variabeles
  131. #Variable ofertas de oportunidad
  132. model.pr= Var(model.OR, model.s, domain=NonNegativeReals)#Parte aceptada de cada bloques de las ofertas de oportunidad de retiro
  133. model.pi= Var(model.OI, model.s, domain=NonNegativeReals)#Parte aceptada de cada bloques de las ofertas de oportunidad de inyeccion
  134. #Variables CF
  135. model.pfi=Var(model.CF, model.s, domain=NonNegativeReals)#Parte aceptada de cada bloques de las ofertas de flexibilidad de contratos firmes
  136. #Variables CNFFF
  137. model.pffr=Var(model.CFF, model.s, domain=NonNegativeReals)#Parte aceptada de cada bloques de las oferta de flexibilidad de retiro
  138. 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
  139. 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
  140. model.pff_iny_fisico=Var(model.CFF, domain=NonNegativeReals)#Componente fisica de energia horaria de inyeecion
  141. model.pff_ret_fisico=Var(model.CFF, domain=NonNegativeReals)#Componente fisica de energia horaria de retiro
  142. #Variables FOENS
  143. model.pf_cortada=Var(model.CF, domain=NonNegativeReals)#Energia firme de lo CF
  144. model.pf_pre_cortada=Var(model.CF, domain=NonNegativeReals)
  145. model.pff_cortada=Var(model.CFF, domain=NonNegativeReals)#Energia firme de los CNFFF
  146. #Variable problema de optimizacion
  147. model.inyeccion= Var(model.i, domain=NonNegativeReals)#Inyeccion por nodo
  148. model.retiro= Var(model.i, domain=NonNegativeReals)#Retiro por nodo
  149. model.ref_angular= Var(model.i)#Fase del voltaje en el nodo
  150. model.rtmw_c= Var(model.c)#Flujo de potencia actica por linea
  151. print("Ecuación de Función Objetivo Max")
  152. def objfunc(model):
  153. return (sum(model.fr[OR,s]*model.pr[OR,s] for OR in model.OR for s in model.s) - # ┌ FOO
  154. sum(model.fi[OI,s]*model.pi[OI,s] for OI in model.OI for s in model.s) - # └
  155. sum(model.ffi[CF,s]*model.pfi[CF,s] for CF in model.CF for s in model.s) + # [ FOF
  156. sum(model.fffr[CFF,s]*model.pffr[CFF,s] for CFF in model.CFF for s in model.s) - # ┌
  157. sum(model.fffi[CFF,s]*model.pffi[CFF,s] for CFF in model.CFF for s in model.s) + # │ FOFF
  158. sum(model.ffft[CFF,s]*model.pfft[CFF,s] for CFF in model.CFF for s in model.s) - # └
  159. fens*sum(model.pf_cortada[CF] for CF in model.CF) - # ┌ FOENS
  160. ffenes*sum(model.pff_cortada[CFF] for CFF in model.CFF)) # └
  161. model.OBJ= Objective(rule=objfunc, sense=maximize)
  162. print("Restricciones del Modelo de Optimización")
  163. #Restrecciones FOO
  164. def pi_restriccion(model,OI,s):
  165. return ((model.pi[OI,s] <=model.pi_ofertado[OI,s]))
  166. model.pi_constraint= Constraint(model.OI, model.s, rule=pi_restriccion)
  167. def pr_restriccion(model,OR,s):
  168. return ((model.pr[OR,s]<=model.pr_ofertado[OR,s]))
  169. model.pr_constraint= Constraint(model.OR, model.s, rule=pr_restriccion)
  170. #Restricciones FOF
  171. def pfi_restriccion(model,CF,s):
  172. return (model.pfi[CF,s]<=model.pfi_ofertado[CF,s])
  173. model.pfi_constraint= Constraint(model.CF, model.s, rule=pfi_restriccion)
  174. #Restricciones FOFF
  175. def pffr_restriccion(model,CFF,s):
  176. return (model.pffr[CFF,s]<=model.pffr_ofertado[CFF,s])
  177. model.pffr_constraint= Constraint(model.CFF, model.s, rule=pffr_restriccion)
  178. def pffi_restriccion(model,CFF,s):
  179. return (model.pffi[CFF,s]<=model.pffi_ofertado[CFF,s])
  180. model.pffi_constraint= Constraint(model.CFF, model.s, rule=pffi_restriccion)
  181. if (model.k[CFF] ==0 for CFF in model.CFF):
  182. def pfft_restriccion(model,CFF,s):
  183. #if model.k[CFF] ==0:
  184. return (model.pfft[CFF,s]<=model.pfft_ofertado[CFF,s])
  185. model.pfft_constraint= Constraint(model.CFF, model.s, rule=pfft_restriccion)
  186. #K(cff) vale 0 si hay oferta de pago maximo por CVT
  187. def pff_iny_fisico_restriccion(model,CFF):
  188. if model.k[CFF] ==0:
  189. 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))
  190. elif model.k[CFF] ==1:
  191. return (model.pff_iny_fisico[CFF]==model.pff_declarada[CFF] - model.pff_cortada[CFF]- sum(model.pffr[CFF,s] for s in model.s))
  192. model.pff_iny_fisico_constraint=Constraint(model.CFF, rule=pff_iny_fisico_restriccion)
  193. def pff_ret_fisico_restriccion(model,CFF):
  194. if model.k[CFF] ==0:
  195. 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))
  196. elif model.k[CFF] ==1:
  197. return (model.pff_ret_fisico[CFF]==model.pff_declarada[CFF] - model.pff_cortada[CFF]- sum(model.pffi[CFF,s] for s in model.s))
  198. model.pff_ret_fisico_constraint=Constraint(model.CFF, rule=pff_ret_fisico_restriccion)
  199. #Restriccion FOENS
  200. def pff_cortada_restriccion(model,CFF):
  201. return (model.pff_cortada[CFF]<=model.pff_declarada[CFF])
  202. model.pff_cortada_constraint=Constraint(model.CFF, rule=pff_cortada_restriccion)
  203. def pf_cortada_restriccion(model,CF):
  204. return (model.pf_cortada[CF]<=model.pf_req[CF] - model.pf_pre_cortada[CF])
  205. model.pf_cortada_constraint=Constraint(model.CF, rule=pf_cortada_restriccion)
  206. print('Restricciones de transmision')
  207. #Restricciones de transmision
  208. def inyec(model,i):
  209. return (model.inyeccion[i] == model.G[i] +
  210. sum(model.pi[OI,s]*model.bin_pi[i,OI] for OI in model.OI for s in model.s) +
  211. sum(model.pfi[CF,s]*model.bin_cfi[i,CF] for CF in model.CF for s in model.s) +
  212. sum(model.pff_iny_fisico[CFF]*model.bin_pffi[i,CFF] for CFF in model.CFF))
  213. model.inyec_constraint= Constraint(model.i, rule=inyec)
  214. def retiro(model,i):
  215. return (model.retiro[i] == model.D[i] +
  216. sum(model.pr[OR,s]*model.bin_pr[i,OR] for OR in model.OR for s in model.s) +
  217. sum(model.pf_req[CF]*model.bin_cfr[i,CF] for CF in model.CF) +
  218. sum(model.pff_ret_fisico[CFF]*model.bin_pffr[i,CFF] for CFF in model.CFF) -
  219. sum(model.pf_cortada[CF]*model.bin_cfr[i,CF] for CF in model.CF) -
  220. sum(model.pf_pre_cortada[CF]*model.bin_cfr[i,CF] for CF in model.CF))
  221. model.retiro_constraint= Constraint(model.i, rule=retiro)
  222. #Los multiplicadore o variable duales de esta restriccion son los precios nodales
  223. def balance_inyeccion_retiro(model,i):
  224. return (model.inyeccion[i] + sum(model.Inc[c,i]*model.rtmw_c[c] for c in model.c)== model.retiro[i])
  225. model.balance_inyeccion_retiro_constraint= Constraint(model.i,rule=balance_inyeccion_retiro)
  226. def rtmw_min_restriccion(model,c):
  227. return (model.rtmw_c[c]>=-model.rtmw_min[c])
  228. model.rtmw_min_constraint= Constraint(model.c, rule=rtmw_min_restriccion)
  229. def rtmw_max_restriccion(model,c):
  230. return (model.rtmw_c[c]<=model.rtmw_max[c])
  231. model.rtmw_max_constraint= Constraint(model.c, rule=rtmw_max_restriccion)
  232. #Referencia angular
  233. #def ref_angular_restriccion(model,i):
  234. # return model.ref_angular[0]==0
  235. #model.ref_angular_constraint =Constraint(model.i, rule=ref_angular_restriccion)
  236. def flujo_potencia_actica(model,c):
  237. return (model.xc[c]*model.rtmw_c[c]+sum(model.Inc[c,i]*model.ref_angular[i] for i in model.i)== 0)
  238. model.flujo_potencia_actica_constraint= Constraint(model.c, rule=flujo_potencia_actica)
  239. model.dual = Suffix(direction=Suffix.IMPORT)
  240. print("Construcción del modelo terminada.")
  241. opt = SolverFactory('cplex')
  242. result = opt.solve(model)
  243. model.solutions.store_to(result)
  244. #print(result)
  245. # Cálculo de Precios Nodales
  246. # =============================================================================
  247. print("Calculando Precios Nodales")
  248. Sigma = zeros(nb)
  249. for i in model.i:
  250. Sigma[i] = model.dual[model.balance_inyeccion_retiro_constraint[i]]
  251. # Construcción de array para grabar
  252. # =============================================================================
  253. flujos = DataFrame()
  254. f = array(list(model.rtmw_c.get_values().values()))
  255. flujos['linea'] = brnames
  256. flujos['flujo'] = f
  257. #print(flujos)
  258. pon = DataFrame()
  259. result_inyeccion = array(list(model.inyeccion.get_values().values()))
  260. result_retiro = array(list(model.retiro.get_values().values()))
  261. pon['nodo']= bus
  262. pon['Inyeccion'] = result_inyeccion
  263. pon['Retiro'] = result_retiro
  264. pon['Ex-antes'] = Sigma*-1
  265. #print(pon)
  266. result_pff_iny=array(list(model.pff_iny_fisico.get_values().values()))
  267. result_pff_ret=array(list(model.pff_ret_fisico.get_values().values()))
  268. result_pr = setvariable_p(array(list(model.pr.get_values().values())),NOR)
  269. result_pi = setvariable_p(array(list(model.pi.get_values().values())),NOI)
  270. result_pffr = setvariable_p(array(list(model.pffr.get_values().values())),NCFF)
  271. result_pffi = setvariable_p(array(list(model.pffi.get_values().values())),NCFF)
  272. result_pfft = setvariable_p(array(list(model.pfft.get_values().values())),NCFF)
  273. result_foo_r=DataFrame()
  274. result_foo_r['N°']=ex_oor['N°']
  275. result_foo_r['Pr Bloque 1']=result_pr[:,0]
  276. result_foo_r['Pr Bloque 2']=result_pr[:,1]
  277. result_foo_r['Pr Bloque 3']=result_pr[:,2]
  278. result_foo_r['Pr Bloque 4']=result_pr[:,3]
  279. result_foo_r['Pr Bloque 5']=result_pr[:,4]
  280. result_foo_i=DataFrame()
  281. result_foo_i['N°']=ex_ooi['N°']
  282. result_foo_i['Pi Bloque 1']=result_pi[:,0]
  283. result_foo_i['Pi Bloque 2']=result_pi[:,1]
  284. result_foo_i['Pi Bloque 3']=result_pi[:,2]
  285. result_foo_i['Pi Bloque 4']=result_pi[:,3]
  286. result_foo_i['Pi Bloque 5']=result_pi[:,4]
  287. #print(result_foo)
  288. result_foff=DataFrame()
  289. result_foff['N°']=ex_cnfff['N°']
  290. result_foff['Pffr Bloque 1']=result_pffr[:,0]
  291. result_foff['Pffr Bloque 2']=result_pffr[:,1]
  292. result_foff['Pffr Bloque 3']=result_pffr[:,2]
  293. result_foff['Pffr Bloque 4']=result_pffr[:,3]
  294. result_foff['Pffr Bloque 5']=result_pffr[:,4]
  295. result_foff['Pffi Bloque 1']=result_pffi[:,0]
  296. result_foff['Pffi Bloque 2']=result_pffi[:,1]
  297. result_foff['Pffi Bloque 3']=result_pffi[:,2]
  298. result_foff['Pffi Bloque 4']=result_pffi[:,3]
  299. result_foff['Pffi Bloque 5']=result_pffi[:,4]
  300. result_foff['Pfft Bloque 1']=result_pfft[:,0]
  301. result_foff['Pfft Bloque 2']=result_pfft[:,1]
  302. result_foff['Pfft Bloque 3']=result_pfft[:,2]
  303. result_foff['Pfft Bloque 4']=result_pfft[:,3]
  304. result_foff['Pfft Bloque 5']=result_pfft[:,4]
  305. #print(result_foff)
  306. foo_ret_iny=DataFrame()
  307. foo_ret_iny['N°']=ex_cnfff['N°']
  308. foo_ret_iny['Inyeccion']=result_pff_iny
  309. foo_ret_iny['Retiro']=result_pff_ret
  310. print("Escribiendo resultados en carpeta")
  311. writer=ExcelWriter("Resultados_predespacho.xlsx")
  312. flujos.to_excel(writer,'flujos',index=False)
  313. pon.to_excel(writer,'pon',index=False)
  314. result_foo_i.to_excel(writer,'result_foo_i',index=False)
  315. result_foo_r.to_excel(writer,'result_foo_r',index=False)
  316. result_foff.to_excel(writer,'result_foff',index=False)
  317. foo_ret_iny.to_excel(writer,'result_foo_ret_iny',index=False)
  318. writer.save()
  319. print("{:=^100}".format(""))
  320. print("{:^100}".format(" Script Finalizado "))
  321. print("{:^100}".format(" Mercados Eléctricos de Centroamérica (c) 2020 "))
  322. print("{:=^100}".format(""))
  323. return 0