predespacho_conperdidas.py 21 KB

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