|
@@ -5,6 +5,7 @@ import logging
|
|
|
import traceback
|
|
import traceback
|
|
|
from os import path
|
|
from os import path
|
|
|
import sys
|
|
import sys
|
|
|
|
|
+import pandas as pd
|
|
|
|
|
|
|
|
import pyutilib.subprocess.GlobalData
|
|
import pyutilib.subprocess.GlobalData
|
|
|
from numpy import array, zeros
|
|
from numpy import array, zeros
|
|
@@ -16,6 +17,7 @@ from pyomo.kernel import value
|
|
|
from common.data import APPDIRS
|
|
from common.data import APPDIRS
|
|
|
|
|
|
|
|
from mct.makeMCT import linmct, readmct, set_dir_flujo
|
|
from mct.makeMCT import linmct, readmct, set_dir_flujo
|
|
|
|
|
+from red.orderC import nodec
|
|
|
from red.create import *
|
|
from red.create import *
|
|
|
from red.create1 import *
|
|
from red.create1 import *
|
|
|
from red.makeBdc import makeBdc
|
|
from red.makeBdc import makeBdc
|
|
@@ -53,22 +55,7 @@ def setmodel(file, p_exec, all_day=True):
|
|
|
# Parametros de la linea
|
|
# Parametros de la linea
|
|
|
logger.info("Inicio Predespacho Regional")
|
|
logger.info("Inicio Predespacho Regional")
|
|
|
logger.info("Leyendo información de RTR...")
|
|
logger.info("Leyendo información de RTR...")
|
|
|
- net = excel2net(file)
|
|
|
|
|
- bus = setbus(net) # Nodos
|
|
|
|
|
- branch = setbranch(net, bus) # Set lineas
|
|
|
|
|
- bu = branch[:, 5] # potenica max de la linea
|
|
|
|
|
- bl = branch[:, 6] # potenica min de la linea
|
|
|
|
|
- xc = branch[:, 3] # Reactancia de la linea
|
|
|
|
|
- rc = branch[:, 4] # Resistencia de la linea
|
|
|
|
|
- nb = bus.shape[0] # Numero de nodos
|
|
|
|
|
- nbr = branch.shape[0] # Numero de lineas
|
|
|
|
|
- A = makeBdc(bus, branch) # Matriz incidente
|
|
|
|
|
- brnames = branchnames(bus, branch) # Nombre de las lineas
|
|
|
|
|
- inc = A.toarray()*-1
|
|
|
|
|
-
|
|
|
|
|
- # Lineas para límites de MCT
|
|
|
|
|
- br_t = brnames['Total'].to_numpy()
|
|
|
|
|
- lin_mct = linmct(br_t)
|
|
|
|
|
|
|
+ net_t = excel2net(file)
|
|
|
dirf = set_dir_flujo()
|
|
dirf = set_dir_flujo()
|
|
|
mct = readmct(file)
|
|
mct = readmct(file)
|
|
|
|
|
|
|
@@ -89,12 +76,30 @@ def setmodel(file, p_exec, all_day=True):
|
|
|
result_foo_r_t = DataFrame()
|
|
result_foo_r_t = DataFrame()
|
|
|
result_fof_t = DataFrame()
|
|
result_fof_t = DataFrame()
|
|
|
result_foff_t = DataFrame()
|
|
result_foff_t = DataFrame()
|
|
|
- foo_ret_iny_t = DataFrame()
|
|
|
|
|
|
|
|
|
|
# El range del for se modifica dependiendo los periodos que se quieren correr.
|
|
# El range del for se modifica dependiendo los periodos que se quieren correr.
|
|
|
for PERIODO in range(min, max):
|
|
for PERIODO in range(min, max):
|
|
|
logger.info("Inicio de la ejecución para el periodo {}".format(PERIODO))
|
|
logger.info("Inicio de la ejecución para el periodo {}".format(PERIODO))
|
|
|
|
|
|
|
|
|
|
+ net=net_t[net_t.periodo.isin([PERIODO])].copy()
|
|
|
|
|
+ net.reset_index(drop=True, inplace=True)
|
|
|
|
|
+ net.drop(['periodo'], axis='columns', inplace=True)
|
|
|
|
|
+ bus = setbus(net)#Nodos
|
|
|
|
|
+ branch = setbranch(net, bus)#Set lineas
|
|
|
|
|
+ bu = branch[:, 5]#potenica max de la linea
|
|
|
|
|
+ bl = branch[:, 6]#potenica min de la linea
|
|
|
|
|
+ xc = branch[:,3]#Reactancia de la linea
|
|
|
|
|
+ rc = branch[:,4]#Resistencia de la linea
|
|
|
|
|
+ nb = bus.shape[0] #Numero de nodos
|
|
|
|
|
+ nbr = branch.shape[0]#Numero de lineas
|
|
|
|
|
+ A = makeBdc(bus, branch)#Matriz incidente
|
|
|
|
|
+ brnames = branchnames(bus, branch)#Nombre de las lineas
|
|
|
|
|
+ inc = A.toarray()*-1
|
|
|
|
|
+
|
|
|
|
|
+ # Lineas para límites de MCT
|
|
|
|
|
+ br_t = brnames['Total'].to_numpy()
|
|
|
|
|
+ lin_mct = linmct(br_t)
|
|
|
|
|
+
|
|
|
logger.info("Leyendo información de los despacho nacionales.")
|
|
logger.info("Leyendo información de los despacho nacionales.")
|
|
|
# Dependiendo de los valores de la columna periodo del df son los valores que toma
|
|
# Dependiendo de los valores de la columna periodo del df son los valores que toma
|
|
|
dg = dg_t[dg_t.periodo.isin([PERIODO])]
|
|
dg = dg_t[dg_t.periodo.isin([PERIODO])]
|
|
@@ -311,8 +316,7 @@ def setmodel(file, p_exec, all_day=True):
|
|
|
|
|
|
|
|
# Máximas Capacidades de Trasferencia
|
|
# Máximas Capacidades de Trasferencia
|
|
|
# Maxima transferenica(interconexion,sentido,periodo)
|
|
# Maxima transferenica(interconexion,sentido,periodo)
|
|
|
- model.Mct = Param(model.inter, model.sen, model.per,
|
|
|
|
|
- initialize=mct.mct.to_dict())
|
|
|
|
|
|
|
+ model.Mct = Param(model.per, model.inter, model.sen, initialize=mct.MCT.to_dict(), default=300, mutable=True)
|
|
|
model.DirF = Param(model.inter, initialize=dirf)
|
|
model.DirF = Param(model.inter, initialize=dirf)
|
|
|
|
|
|
|
|
logger.info("Ecuación de Función Objetivo Max.")
|
|
logger.info("Ecuación de Función Objetivo Max.")
|
|
@@ -473,187 +477,205 @@ def setmodel(file, p_exec, all_day=True):
|
|
|
|
|
|
|
|
# Máximas capacidades de trasferencia entre áreas de control
|
|
# Máximas capacidades de trasferencia entre áreas de control
|
|
|
def eq_mct_ns_rule(model, inter):
|
|
def eq_mct_ns_rule(model, inter):
|
|
|
- if inter == 'ES': # Maxima exportacion de El Salvador
|
|
|
|
|
- return (-(model.DirF[inter]*model.rtmw_c[lin_mct[inter][0]]+model.DirF[inter]*model.rtmw_c[lin_mct[inter][1]]) +
|
|
|
|
|
- (model.DirF[inter]*model.rtmw_c[lin_mct[inter][2]]+model.DirF[inter]*model.rtmw_c[lin_mct[inter][3]])) <= model.Mct[inter, 'ns', PERIODO] + 0.001
|
|
|
|
|
- elif inter == 'HON': # Maxima importacion de Honduras
|
|
|
|
|
- return (-(model.DirF[inter]*model.rtmw_c[lin_mct[inter][0]]+model.DirF[inter]*model.rtmw_c[lin_mct[inter][1]] +
|
|
|
|
|
- model.DirF[inter]*model.rtmw_c[lin_mct[inter][2]]) + (model.DirF[inter]*model.rtmw_c[lin_mct[inter][3]] +
|
|
|
|
|
- model.DirF[inter]*model.rtmw_c[lin_mct[inter][4]])) <= model.Mct[inter, 'sn', PERIODO] + 0.001
|
|
|
|
|
|
|
+ if inter=='IMP_TOT_SAL':#Maxima exportacion de El Salvador
|
|
|
|
|
+ return ((sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['ELSHON']))-
|
|
|
|
|
+ (sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['GUAELS']))) <= model.Mct[PERIODO, inter, 'ns']
|
|
|
|
|
+
|
|
|
|
|
+ elif inter=='EXP_TOT_GUA_NS':
|
|
|
|
|
+ return ((sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['GUAHON'])) +
|
|
|
|
|
+ (sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['GUAELS']))) <= model.Mct[PERIODO, inter, 'ns']
|
|
|
|
|
+
|
|
|
|
|
+ elif inter=='IMP_TOT_HON':#Maxima importacion de Honduras
|
|
|
|
|
+ return (-(sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['ELSHON'])) -
|
|
|
|
|
+ (sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['GUAHON'])) +
|
|
|
|
|
+ (sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['HONNIC']))) <= model.Mct[PERIODO, inter, 'sn']
|
|
|
|
|
+
|
|
|
|
|
+ elif inter=='IMP_TOT_NIC':#Maxima exportacion de Nicaragua
|
|
|
|
|
+ return ((sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['NICCRI'])) -
|
|
|
|
|
+ (sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['HONNIC']))) <= model.Mct[PERIODO, inter, 'ns']
|
|
|
|
|
+
|
|
|
|
|
+ elif inter=='IMP_TOT_CRI':#Maxima exportacion de Costa Rica
|
|
|
|
|
+ return ((sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['NICCRI'])) +
|
|
|
|
|
+ (sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['CRIPAN']))) <= model.Mct[PERIODO, inter, 'ns']
|
|
|
|
|
+
|
|
|
|
|
+ elif inter=='IMP_TOT_PAN':
|
|
|
|
|
+ return sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['CRIPAN']) <= model.Mct[PERIODO, inter, 'ns']
|
|
|
|
|
+
|
|
|
else:
|
|
else:
|
|
|
- return sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct[inter]) <= model.Mct[inter, 'ns', PERIODO] + 0.001
|
|
|
|
|
|
|
+ return (sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct[inter])) <= model.Mct[PERIODO, inter, 'ns']
|
|
|
model.eq_mct_ns = Constraint(model.inter, rule=eq_mct_ns_rule)
|
|
model.eq_mct_ns = Constraint(model.inter, rule=eq_mct_ns_rule)
|
|
|
|
|
|
|
|
def eq_mct_sn_rule(model, inter):
|
|
def eq_mct_sn_rule(model, inter):
|
|
|
- if inter == 'ES': # Maxima importacion de El Salvador
|
|
|
|
|
- return (-(model.DirF[inter]*model.rtmw_c[lin_mct[inter][0]]+model.DirF[inter]*model.rtmw_c[lin_mct[inter][1]]) +
|
|
|
|
|
- (model.DirF[inter]*model.rtmw_c[lin_mct[inter][2]]+model.DirF[inter]*model.rtmw_c[lin_mct[inter][3]])) >= -model.Mct[inter, 'sn', PERIODO] + 0.00001
|
|
|
|
|
- elif inter == 'HON': # Maxima importacion de Honduras
|
|
|
|
|
- return (-(model.DirF[inter]*model.rtmw_c[lin_mct[inter][0]]+model.DirF[inter]*model.rtmw_c[lin_mct[inter][1]] +
|
|
|
|
|
- model.DirF[inter]*model.rtmw_c[lin_mct[inter][2]]) + (model.DirF[inter]*model.rtmw_c[lin_mct[inter][3]] +
|
|
|
|
|
- model.DirF[inter]*model.rtmw_c[lin_mct[inter][4]])) >= -model.Mct[inter, 'ns', PERIODO] + 0.00001
|
|
|
|
|
|
|
+ if inter=='IMP_TOT_SAL':#Maxima importacion de El Salvador
|
|
|
|
|
+ return ((sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['ELSHON'])) -
|
|
|
|
|
+ (sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['GUAELS']))) >= -model.Mct[PERIODO, inter, 'sn']
|
|
|
|
|
+
|
|
|
|
|
+ elif inter=='EXP_TOT_GUA_NS':
|
|
|
|
|
+ return ((sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['GUAHON'])) +
|
|
|
|
|
+ (sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['GUAELS']))) >= -model.Mct[PERIODO, inter, 'sn']
|
|
|
|
|
+
|
|
|
|
|
+ elif inter=='IMP_TOT_HON':#Maxima importacion de Honduras
|
|
|
|
|
+ return (-((sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['ELSHON'])) +
|
|
|
|
|
+ (sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['GUAHON']))) +
|
|
|
|
|
+ (sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['HONNIC']))) >= -model.Mct[PERIODO, inter, 'ns']
|
|
|
|
|
+
|
|
|
|
|
+ elif inter=='IMP_TOT_NIC':#Maxima exportacion de Nicaragua
|
|
|
|
|
+ return ((sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['NICCRI'])) -
|
|
|
|
|
+ (sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['HONNIC']))) >= -model.Mct[PERIODO, inter, 'sn']
|
|
|
|
|
+
|
|
|
|
|
+ elif inter=='IMP_TOT_CRI':#Maxima exportacion de Costa Rica
|
|
|
|
|
+ return ((sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['NICCRI'])) +
|
|
|
|
|
+ (sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['CRIPAN'])))>= -model.Mct[PERIODO, inter, 'sn']
|
|
|
|
|
+
|
|
|
|
|
+ elif inter=='IMP_TOT_PAN':
|
|
|
|
|
+ return sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct['CRIPAN']) >= -model.Mct[PERIODO, inter, 'sn']
|
|
|
|
|
+
|
|
|
else:
|
|
else:
|
|
|
- return sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct[inter]) >= -model.Mct[inter, 'sn', PERIODO] + 0.00001
|
|
|
|
|
|
|
+ return (sum(model.DirF[inter]*model.rtmw_c[c] for c in lin_mct[inter])) >= -model.Mct[PERIODO, inter, 'sn']
|
|
|
model.eq_mct_sn = Constraint(model.inter, rule=eq_mct_sn_rule)
|
|
model.eq_mct_sn = Constraint(model.inter, rule=eq_mct_sn_rule)
|
|
|
|
|
|
|
|
model.dual = Suffix(direction=Suffix.IMPORT)
|
|
model.dual = Suffix(direction=Suffix.IMPORT)
|
|
|
|
|
|
|
|
- logger.info("Construcción del modelo terminada.")
|
|
|
|
|
-
|
|
|
|
|
- ########################################### ORIGINAL #########
|
|
|
|
|
- # opt = SolverFactory('ipopt')
|
|
|
|
|
- # # opt.options['max_iter']= 10000
|
|
|
|
|
- # result = opt.solve(model)
|
|
|
|
|
- # model.solutions.store_to(result)
|
|
|
|
|
-
|
|
|
|
|
- ############################################ MODIFICADO POR OSCAR ############
|
|
|
|
|
-
|
|
|
|
|
- filename = path.basename(file).split('.')[0]
|
|
|
|
|
- filepath = path.dirname(file)
|
|
|
|
|
-
|
|
|
|
|
- try:
|
|
|
|
|
|
|
+ print("Construcción del modelo terminada. Periodo: "+str(PERIODO))
|
|
|
|
|
|
|
|
- opt = SolverFactory('ipopt') # TODO
|
|
|
|
|
-
|
|
|
|
|
- logger.info(
|
|
|
|
|
- "Inicio de la optimización para el periodo {}...".format(p_exec))
|
|
|
|
|
-
|
|
|
|
|
- result = opt.solve(
|
|
|
|
|
- model, logfile=f'log/solver_{filename}_{p_exec}.log', tee=True)
|
|
|
|
|
-
|
|
|
|
|
- model.solutions.store_to(result)
|
|
|
|
|
-
|
|
|
|
|
- result.write(
|
|
|
|
|
- filename=f"{APPDIRS['DATA']}/results_{filename}_periodo_{p_exec}.json",
|
|
|
|
|
- format='json')
|
|
|
|
|
- logger.info(
|
|
|
|
|
- "Solucion encontrada para el periodo{}...".format(p_exec))
|
|
|
|
|
-
|
|
|
|
|
- except Exception as e:
|
|
|
|
|
- logger.error("No se ejecutó el problema de optimización")
|
|
|
|
|
- logger.exception("Error: {}".format(e))
|
|
|
|
|
-
|
|
|
|
|
- return
|
|
|
|
|
|
|
+ opt = SolverFactory('ipopt')
|
|
|
|
|
+ #opt.options['max_iter']= 10000
|
|
|
|
|
+ result = opt.solve(model)
|
|
|
|
|
+ model.solutions.store_to(result)
|
|
|
|
|
|
|
|
# Cálculo de Precios Nodales
|
|
# Cálculo de Precios Nodales
|
|
|
# =============================================================================
|
|
# =============================================================================
|
|
|
- logger.info("Calculando Precios Nodales. Periodo:" + str(PERIODO))
|
|
|
|
|
|
|
+ print("Calculando Precios Nodales. Periodo:" + str(PERIODO))
|
|
|
Sigma = zeros(nb)
|
|
Sigma = zeros(nb)
|
|
|
for i in model.i:
|
|
for i in model.i:
|
|
|
Sigma[i] = model.dual[model.balance_inyeccion_retiro_constraint[i]]
|
|
Sigma[i] = model.dual[model.balance_inyeccion_retiro_constraint[i]]
|
|
|
|
|
|
|
|
# Construcción de array para grabar
|
|
# Construcción de array para grabar
|
|
|
# =============================================================================
|
|
# =============================================================================
|
|
|
- flujos = DataFrame()
|
|
|
|
|
- flujos['Periodo'] = set_periodo(nbr, PERIODO)
|
|
|
|
|
|
|
+ flujos=DataFrame()
|
|
|
|
|
+ flujos['Periodo']=set_periodo(nbr,PERIODO)
|
|
|
flujos['BUS I'] = brnames['BUS I']
|
|
flujos['BUS I'] = brnames['BUS I']
|
|
|
flujos['BUS J'] = brnames['BUS J']
|
|
flujos['BUS J'] = brnames['BUS J']
|
|
|
flujos['CKT'] = brnames['CKT']
|
|
flujos['CKT'] = brnames['CKT']
|
|
|
f = array(list(model.rtmw_c.get_values().values()))
|
|
f = array(list(model.rtmw_c.get_values().values()))
|
|
|
- perdidas = zeros(nbr)
|
|
|
|
|
|
|
+ perdidas=zeros(nbr)
|
|
|
for c in model.c:
|
|
for c in model.c:
|
|
|
- perdidas[c] = (f[c]**2)*rc[c]/100
|
|
|
|
|
|
|
+ perdidas[c]=(f[c]**2)*rc[c]/100
|
|
|
flujos['Flujo'] = f
|
|
flujos['Flujo'] = f
|
|
|
flujos['Perdidas'] = perdidas
|
|
flujos['Perdidas'] = perdidas
|
|
|
- # Guarda los resultados con los anteriores
|
|
|
|
|
- flujos_t = concat([flujos_t, flujos])
|
|
|
|
|
|
|
+ flujos=flujos.round({'Flujo':3,'Perdidas':3})
|
|
|
|
|
+ flujos_t=concat([flujos_t,flujos].copy())#Guarda los resultados con los anteriores
|
|
|
|
|
|
|
|
pon = DataFrame()
|
|
pon = DataFrame()
|
|
|
result_inyeccion = array(list(model.inyeccion.get_values().values()))
|
|
result_inyeccion = array(list(model.inyeccion.get_values().values()))
|
|
|
result_retiro = array(list(model.retiro.get_values().values()))
|
|
result_retiro = array(list(model.retiro.get_values().values()))
|
|
|
- pon['Periodo'] = set_periodo(nb, PERIODO)
|
|
|
|
|
- pon['nodo'] = bus
|
|
|
|
|
|
|
+ pon['Periodo']=set_periodo(nb,PERIODO)
|
|
|
|
|
+ pon['Nodo']= bus
|
|
|
pon['Precio Exante'] = Sigma*-1
|
|
pon['Precio Exante'] = Sigma*-1
|
|
|
- # Guarda los resultados con los anteriores
|
|
|
|
|
- pon_t = concat([pon_t, pon])
|
|
|
|
|
- # print(pon)
|
|
|
|
|
-
|
|
|
|
|
- iep = DataFrame()
|
|
|
|
|
- iep['Periodo'] = set_periodo(nb, PERIODO)
|
|
|
|
|
- iep['nodo'] = bus
|
|
|
|
|
|
|
+ pon=pon.round({'Precio Exante':2})
|
|
|
|
|
+ pon_t=concat([pon_t,pon]).copy()#Guarda los resultados con los anteriores
|
|
|
|
|
+ #print(pon)
|
|
|
|
|
+
|
|
|
|
|
+ iep=DataFrame()
|
|
|
|
|
+ iep['Periodo']=set_periodo(nb,PERIODO)
|
|
|
|
|
+ iep['nodo']= bus
|
|
|
iep['Inyeccion'] = result_inyeccion
|
|
iep['Inyeccion'] = result_inyeccion
|
|
|
iep['Retiro'] = result_retiro
|
|
iep['Retiro'] = result_retiro
|
|
|
- # Guarda los resultados con los anteriores
|
|
|
|
|
- iep_t = concat([iep_t, iep])
|
|
|
|
|
-
|
|
|
|
|
- result_pff_iny = array(
|
|
|
|
|
- list(model.pff_iny_fisico.get_values().values()))
|
|
|
|
|
- result_pff_ret = array(
|
|
|
|
|
- list(model.pff_ret_fisico.get_values().values()))
|
|
|
|
|
- result_pr = setvariable_p(
|
|
|
|
|
- array(list(model.pr.get_values().values())), NOR)
|
|
|
|
|
- result_pi = setvariable_p(
|
|
|
|
|
- array(list(model.pi.get_values().values())), NOI)
|
|
|
|
|
- result_pfi = setvariable_p(
|
|
|
|
|
- array(list(model.pfi.get_values().values())), NCF)
|
|
|
|
|
- result_pffr = setvariable_p(
|
|
|
|
|
- array(list(model.pffr.get_values().values())), NCFF)
|
|
|
|
|
- result_pffi = setvariable_p(
|
|
|
|
|
- array(list(model.pffi.get_values().values())), NCFF)
|
|
|
|
|
- result_pfft = setvariable_p(
|
|
|
|
|
- array(list(model.pfft.get_values().values())), NCFF)
|
|
|
|
|
-
|
|
|
|
|
- result_foo_r = DataFrame()
|
|
|
|
|
- result_foo_r['Periodo'] = ex_oor['periodo']
|
|
|
|
|
- result_foo_r['N°'] = ex_oor['N°']
|
|
|
|
|
- result_foo_r['Pr Bloque 1'] = result_pr[:, 0]
|
|
|
|
|
- result_foo_r['Pr Bloque 2'] = result_pr[:, 1]
|
|
|
|
|
- result_foo_r['Pr Bloque 3'] = result_pr[:, 2]
|
|
|
|
|
- result_foo_r['Pr Bloque 4'] = result_pr[:, 3]
|
|
|
|
|
- result_foo_r['Pr Bloque 5'] = result_pr[:, 4]
|
|
|
|
|
- # Guarda los resultados con los anteriores
|
|
|
|
|
- result_foo_r_t = concat([result_foo_r_t, result_foo_r])
|
|
|
|
|
-
|
|
|
|
|
- result_foo_i = DataFrame()
|
|
|
|
|
- result_foo_i['Periodo'] = ex_ooi['periodo']
|
|
|
|
|
- result_foo_i['N°'] = ex_ooi['N°']
|
|
|
|
|
- result_foo_i['Pi Bloque 1'] = result_pi[:, 0]
|
|
|
|
|
- result_foo_i['Pi Bloque 2'] = result_pi[:, 1]
|
|
|
|
|
- result_foo_i['Pi Bloque 3'] = result_pi[:, 2]
|
|
|
|
|
- result_foo_i['Pi Bloque 4'] = result_pi[:, 3]
|
|
|
|
|
- result_foo_i['Pi Bloque 5'] = result_pi[:, 4]
|
|
|
|
|
- # Guarda los resultados con los anteriores
|
|
|
|
|
- result_foo_i_t = concat([result_foo_i_t, result_foo_i])
|
|
|
|
|
-
|
|
|
|
|
- result_fof = DataFrame()
|
|
|
|
|
- result_fof['Periodo'] = ex_cf['periodo']
|
|
|
|
|
- result_fof['N°'] = ex_cf['N°']
|
|
|
|
|
- result_fof['Pfi Bloque 1'] = result_pfi[:, 0]
|
|
|
|
|
- result_fof['Pfi Bloque 2'] = result_pfi[:, 1]
|
|
|
|
|
- result_fof['Pfi Bloque 3'] = result_pfi[:, 2]
|
|
|
|
|
- result_fof['Pfi Bloque 4'] = result_pfi[:, 3]
|
|
|
|
|
- result_fof['Pfi Bloque 5'] = result_pfi[:, 4]
|
|
|
|
|
- # Guarda los resultados con los anteriores
|
|
|
|
|
- result_fof_t = concat([result_fof_t, result_fof])
|
|
|
|
|
-
|
|
|
|
|
- result_foff = DataFrame()
|
|
|
|
|
- result_foff['Periodo'] = ex_cnfff['periodo']
|
|
|
|
|
- result_foff['N°'] = ex_cnfff['N°']
|
|
|
|
|
- result_foff['Pffr Bloque 1'] = result_pffr[:, 0]
|
|
|
|
|
- result_foff['Pffr Bloque 2'] = result_pffr[:, 1]
|
|
|
|
|
- result_foff['Pffr Bloque 3'] = result_pffr[:, 2]
|
|
|
|
|
- result_foff['Pffr Bloque 4'] = result_pffr[:, 3]
|
|
|
|
|
- result_foff['Pffr Bloque 5'] = result_pffr[:, 4]
|
|
|
|
|
- result_foff['Pffi Bloque 1'] = result_pffi[:, 0]
|
|
|
|
|
- result_foff['Pffi Bloque 2'] = result_pffi[:, 1]
|
|
|
|
|
- result_foff['Pffi Bloque 3'] = result_pffi[:, 2]
|
|
|
|
|
- result_foff['Pffi Bloque 4'] = result_pffi[:, 3]
|
|
|
|
|
- result_foff['Pffi Bloque 5'] = result_pffi[:, 4]
|
|
|
|
|
- result_foff['Pfft Bloque 1'] = result_pfft[:, 0]
|
|
|
|
|
- result_foff['Pfft Bloque 2'] = result_pfft[:, 1]
|
|
|
|
|
- result_foff['Pfft Bloque 3'] = result_pfft[:, 2]
|
|
|
|
|
- result_foff['Pfft Bloque 4'] = result_pfft[:, 3]
|
|
|
|
|
- result_foff['Pfft Bloque 5'] = result_pfft[:, 4]
|
|
|
|
|
- # Guarda los resultados con los anteriores
|
|
|
|
|
- result_foff_t = concat([result_foff_t, result_foff])
|
|
|
|
|
-
|
|
|
|
|
- foo_ret_iny = DataFrame()
|
|
|
|
|
- foo_ret_iny['Periodo'] = ex_cnfff['periodo']
|
|
|
|
|
- foo_ret_iny['N°'] = ex_cnfff['N°']
|
|
|
|
|
- foo_ret_iny['Inyeccion'] = result_pff_iny
|
|
|
|
|
- foo_ret_iny['Retiro'] = result_pff_ret
|
|
|
|
|
- # Guarda los resultados con los anteriores
|
|
|
|
|
- foo_ret_iny_t = concat([foo_ret_iny_t, foo_ret_iny])
|
|
|
|
|
|
|
+ iep=iep.round({'Inyeccion':3,'Retiro':3})
|
|
|
|
|
+ iep_t=concat([iep_t,iep]).copy()#Guarda los resultados con los anteriores
|
|
|
|
|
+
|
|
|
|
|
+ result_pff_iny=array(list(model.pff_iny_fisico.get_values().values()))
|
|
|
|
|
+ result_pff_ret=array(list(model.pff_ret_fisico.get_values().values()))
|
|
|
|
|
+ result_pr = setvariable_p(array(list(model.pr.get_values().values())),NOR)
|
|
|
|
|
+ result_pi = setvariable_p(array(list(model.pi.get_values().values())),NOI)
|
|
|
|
|
+ result_pfi = setvariable_p(array(list(model.pfi.get_values().values())),NCF)
|
|
|
|
|
+ result_pffr = setvariable_p(array(list(model.pffr.get_values().values())),NCFF)
|
|
|
|
|
+ result_pffi = setvariable_p(array(list(model.pffi.get_values().values())),NCFF)
|
|
|
|
|
+ result_pfft = setvariable_p(array(list(model.pfft.get_values().values())),NCFF)
|
|
|
|
|
+
|
|
|
|
|
+ result_foo_r=DataFrame()
|
|
|
|
|
+ result_foo_r['ID']=ex_oor['N°']
|
|
|
|
|
+ result_foo_r['Fecha']=ex_oor['Fecha'].apply( lambda d : d.date() )
|
|
|
|
|
+ result_foo_r['Periodo']=ex_oor['periodo']
|
|
|
|
|
+ result_foo_r['Nodo']=ex_oor['nodo_oor']
|
|
|
|
|
+ pais_foo_r=pd.concat([result_foo_r.set_index('Nodo'),nodec.set_index('ID_NODO')], axis=1, join='inner').reset_index()
|
|
|
|
|
+ pex_foo_r=pd.concat([result_foo_r.set_index('Nodo'),pon.set_index('Nodo')], axis=1, join='inner').reset_index()
|
|
|
|
|
+ result_foo_r.drop(['Nodo'], axis='columns', inplace=True)
|
|
|
|
|
+ result_foo_r['Pais']=pais_foo_r['ID_AREA']
|
|
|
|
|
+ result_foo_r['Nodo']=ex_oor['nodo_oor']
|
|
|
|
|
+ result_foo_r['Precio Exante']=pex_foo_r['Precio Exante']
|
|
|
|
|
+ result_foo_r['Agente']=ex_oor['Agente']
|
|
|
|
|
+ result_foo_r['MW Predespachados']=result_pr[:,0] + result_pr[:,1] + result_pr[:,2]+result_pr[:,3]+result_pr[:,4]
|
|
|
|
|
+ result_foo_r=result_foo_r.round({'MW Predespachados':3})
|
|
|
|
|
+ result_foo_r_t=concat([result_foo_r_t,result_foo_r]).copy()#Guarda los resultados con los anteriores
|
|
|
|
|
+
|
|
|
|
|
+ result_foo_i=DataFrame()
|
|
|
|
|
+ result_foo_i['ID']=ex_ooi['N°']
|
|
|
|
|
+ result_foo_i['Fecha']=ex_ooi['Fecha'].apply( lambda d : d.date() )
|
|
|
|
|
+ result_foo_i['Periodo']=ex_ooi['periodo']
|
|
|
|
|
+ result_foo_i['Nodo']=ex_ooi['nodo_i']
|
|
|
|
|
+ pex_foo_i=pd.concat([result_foo_i.set_index('Nodo'),pon.set_index('Nodo')], axis=1, join='inner').reset_index()
|
|
|
|
|
+ pais_foo_i=pd.concat([result_foo_i.set_index('Nodo'),nodec.set_index('ID_NODO')], axis=1, join='inner').reset_index()
|
|
|
|
|
+ result_foo_i.drop(['Nodo'], axis='columns', inplace=True)
|
|
|
|
|
+ result_foo_i['Pais']=pais_foo_i['ID_AREA']
|
|
|
|
|
+ result_foo_i['Nodo']=ex_ooi['nodo_i']
|
|
|
|
|
+ result_foo_i['Precio Exante']=pex_foo_i['Precio Exante']
|
|
|
|
|
+ result_foo_i['Agente']=ex_ooi['Agente']
|
|
|
|
|
+ result_foo_i['MW Predespachados']=result_pi[:,0]+result_pi[:,1]+result_pi[:,2]+result_pi[:,3]+result_pi[:,4]
|
|
|
|
|
+ result_foo_i=result_foo_i.round({'MW Predespachados':3})
|
|
|
|
|
+ result_foo_i_t=concat([result_foo_i_t,result_foo_i]).copy()#Guarda los resultados con los anteriores
|
|
|
|
|
+
|
|
|
|
|
+ result_fof=DataFrame()
|
|
|
|
|
+ result_fof['ID']=ex_cf['N°']
|
|
|
|
|
+ result_fof['Fecha']=ex_cf['Fecha'].apply( lambda d : d.date() )
|
|
|
|
|
+ result_fof['Periodo']=ex_cf['periodo']
|
|
|
|
|
+ result_fof['Nodo Inyeccion']=ex_cf['nodo_cfi']
|
|
|
|
|
+ pex_fof_i=pd.concat([result_fof.set_index('Nodo Inyeccion'),pon.set_index('Nodo')], axis=1, join='inner').reset_index()
|
|
|
|
|
+ pais_fof_i=pd.concat([result_fof.set_index('Nodo Inyeccion'),nodec.set_index('ID_NODO')], axis=1, join='inner').reset_index()
|
|
|
|
|
+ result_fof.drop(['Nodo Inyeccion'], axis='columns', inplace=True)
|
|
|
|
|
+ result_fof['Pais Inyeccion']=pais_fof_i['ID_AREA']
|
|
|
|
|
+ result_fof['Nodo Inyeccion']=ex_cf['nodo_cfi']
|
|
|
|
|
+ result_fof['Precio Exante Inyeccion']=pex_fof_i['Precio Exante']
|
|
|
|
|
+ result_fof['Agente Inyeccion']=ex_cf['agente_cfi']
|
|
|
|
|
+ result_fof['Nodo Retiro']=ex_cf['nodo_cfr']
|
|
|
|
|
+ pais_fof_r=pd.concat([result_fof.set_index('Nodo Retiro'),nodec.set_index('ID_NODO')], axis=1, join='inner').reset_index()
|
|
|
|
|
+ pex_fof_r=pd.concat([result_fof.set_index('Nodo Retiro'),pon.set_index('Nodo')], axis=1, join='inner').reset_index()
|
|
|
|
|
+ result_fof.drop(['Nodo Retiro'], axis='columns', inplace=True)
|
|
|
|
|
+ result_fof['Pais Retiro']=pais_fof_r['ID_AREA']
|
|
|
|
|
+ result_fof['Nodo Retiro']=ex_cf['nodo_cfr']
|
|
|
|
|
+ result_fof['Precio Exante Retiro']=pex_fof_r['Precio Exante']
|
|
|
|
|
+ result_fof['Agente Retiro']=ex_cf['agente_cfr']
|
|
|
|
|
+ result_fof['MW Predespachados O.I. Flexibilidad']=result_pfi[:,0]+result_pfi[:,1]+result_pfi[:,2]+result_pfi[:,3]+result_pfi[:,4]
|
|
|
|
|
+ result_fof['MW Predespachados Ret. Requerido']=ex_cf['potencia_req']
|
|
|
|
|
+ result_fof=result_fof.round({'MW Predespachados O.I. Flexibilidad':3,'MW Predespachados Ret. Requerido':3})
|
|
|
|
|
+ result_fof_t=concat([result_fof_t,result_fof]).copy()#Guarda los resultados con los anteriores
|
|
|
|
|
+
|
|
|
|
|
+ result_foff=DataFrame()
|
|
|
|
|
+ result_foff['ID']=ex_cnfff['N°']
|
|
|
|
|
+ result_foff['Fecha']=ex_cnfff['Fecha'].apply( lambda d : d.date() )
|
|
|
|
|
+ result_foff['Periodo']=ex_cnfff['periodo']
|
|
|
|
|
+ result_foff['Nodo Inyeccion']=ex_cnfff['nodo_cnfffi']
|
|
|
|
|
+ pex_foff_i=pd.concat([result_foff.set_index('Nodo Inyeccion'),pon.set_index('Nodo')], axis=1, join='inner').reset_index()
|
|
|
|
|
+ pais_foff_i=pd.concat([result_foff.set_index('Nodo Inyeccion'),nodec.set_index('ID_NODO')], axis=1, join='inner').reset_index()
|
|
|
|
|
+ result_foff.drop(['Nodo Inyeccion'], axis='columns', inplace=True)
|
|
|
|
|
+ result_foff['Pais Inyeccion']=pais_foff_i['ID_AREA']
|
|
|
|
|
+ result_foff['Nodo Inyeccion']=ex_cnfff['nodo_cnfffi']
|
|
|
|
|
+ result_foff['Precio Exante Inyeccion']=pex_foff_i['Precio Exante']
|
|
|
|
|
+ result_foff['Agente Inyeccion']=ex_cnfff['agente_cnfffi']
|
|
|
|
|
+ result_foff['Nodo Retiro']=ex_cnfff['nodo_cnfffr']
|
|
|
|
|
+ pais_foff_r=pd.concat([result_foff.set_index('Nodo Retiro'),nodec.set_index('ID_NODO')], axis=1, join='inner').reset_index()
|
|
|
|
|
+ pex_foff_r=pd.concat([result_foff.set_index('Nodo Retiro'),pon.set_index('Nodo')], axis=1, join='inner').reset_index()
|
|
|
|
|
+ result_foff.drop(['Nodo Retiro'], axis='columns', inplace=True)
|
|
|
|
|
+ result_foff['Pais Retiro']=pais_foff_r['ID_AREA']
|
|
|
|
|
+ result_foff['Nodo Retiro']=ex_cnfff['nodo_cnfffr']
|
|
|
|
|
+ result_foff['Precio Exante Retiro']=pex_foff_r['Precio Exante']
|
|
|
|
|
+ result_foff['Agente Retiro']=ex_cnfff['agente_cnfffr']
|
|
|
|
|
+ result_foff['CVT']=result_foff['Precio Exante Retiro'] - result_foff['Precio Exante Inyeccion']
|
|
|
|
|
+ result_foff['MW Predespachados CNFFF']=result_pfft[:,0]+result_pfft[:,1]+result_pfft[:,2]+result_pfft[:,3]+result_pfft[:,4]
|
|
|
|
|
+ result_foff['MW Predespachados O.I. Flexibilidad']=result_pffi[:,0]+result_pffi[:,1]+result_pffi[:,2]+result_pffi[:,3]+result_pffi[:,4]
|
|
|
|
|
+ result_foff['MW Predespachados O.R. Flexibilidad']=result_pffr[:,0]+result_pffr[:,1]+result_pffr[:,2]+result_pffr[:,3]+result_pffr[:,4]
|
|
|
|
|
+ result_foff=result_foff.round({'CVT':2,'MW Predespachados CNFFF':3,'MW Predespachados O.R. Flexibilidad':3,'MW Predespachados O.I. Flexibilidad':3})
|
|
|
|
|
+ result_foff_t=concat([result_foff_t,result_foff])#Guarda los resultados con los anteriores
|
|
|
|
|
|
|
|
logger.info("Escribiendo resultados en carpeta.")
|
|
logger.info("Escribiendo resultados en carpeta.")
|
|
|
filename = path.basename(file).split('.')
|
|
filename = path.basename(file).split('.')
|
|
@@ -667,17 +689,21 @@ def setmodel(file, p_exec, all_day=True):
|
|
|
new_filename = filename[0]+'_results_{}.'.format(p_exec)+filename[1]
|
|
new_filename = filename[0]+'_results_{}.'.format(p_exec)+filename[1]
|
|
|
new_file = path.join(filepath, new_filename)
|
|
new_file = path.join(filepath, new_filename)
|
|
|
|
|
|
|
|
- writer = ExcelWriter(new_file)
|
|
|
|
|
- flujos_t.to_excel(writer, 'IEP-RTR', index=False)
|
|
|
|
|
- iep_t.to_excel(writer, 'IEP-TOTAL', index=False)
|
|
|
|
|
- pon_t.to_excel(writer, 'PEXANTES', index=False)
|
|
|
|
|
- result_foo_i_t.to_excel(writer, 'TOP-I', index=False)
|
|
|
|
|
- result_foo_r_t.to_excel(writer, 'TOP-R', index=False)
|
|
|
|
|
- result_fof_t.to_excel(writer, 'TCP-CF', index=False)
|
|
|
|
|
- result_foff_t.to_excel(writer, 'TCP-CNFFF-1', index=False)
|
|
|
|
|
- foo_ret_iny_t.to_excel(writer, 'TCP-CNFFF-2', index=False)
|
|
|
|
|
|
|
+ writer=ExcelWriter(new_file)
|
|
|
|
|
+ flujos_t.to_excel(writer,'IEP-RTR',index=False)
|
|
|
|
|
+ iep_t.to_excel(writer,'IEP-TOTAL',index=False)
|
|
|
|
|
+ pon_t.to_excel(writer,'PEXANTE',index=False)
|
|
|
|
|
+ result_foo_i_t.to_excel(writer,'TOP-I',index=False)
|
|
|
|
|
+ result_foo_r_t.to_excel(writer,'TOP-R',index=False)
|
|
|
|
|
+ result_fof_t.to_excel(writer,'TCP-CF',index=False)
|
|
|
|
|
+ result_foff_t.to_excel(writer,'TCP-CNFFF',index=False)
|
|
|
writer.save()
|
|
writer.save()
|
|
|
|
|
|
|
|
|
|
+ print("{:=^100}".format(""))
|
|
|
|
|
+ print("{:^100}".format(" Script Finalizado "))
|
|
|
|
|
+ print("{:^100}".format(" Mercados Eléctricos de Centroamérica (c) 2020 "))
|
|
|
|
|
+ print("{:=^100}".format(""))
|
|
|
|
|
+
|
|
|
return 0
|
|
return 0
|
|
|
|
|
|
|
|
|
|
|