Browse Source

Version 2

Leonel José Henriquez Orellana 5 years ago
parent
commit
a2ec7f581e
8 changed files with 117 additions and 19 deletions
  1. 20 15
      Predespacho.py
  2. BIN
      ieee6bus2s.xlsx
  3. 2 0
      prueba_predespacho.py
  4. BIN
      red/__pycache__/create1.cpython-37.pyc
  5. 4 4
      red/create1.py
  6. 2 0
      utils/__init__.py
  7. 26 0
      utils/idx_brch.py
  8. 63 0
      utils/map.py

+ 20 - 15
Predespacho.py

@@ -9,12 +9,11 @@ from pyomo.environ import SolverFactory
 from pyomo.kernel import value
 from pyomo.kernel import value
 from numpy import zeros, array
 from numpy import zeros, array
 from pandas import DataFrame, ExcelWriter
 from pandas import DataFrame, ExcelWriter
-import xlsxwriter
 
 
 def setmodel(file):
 def setmodel(file):
         
         
     print("{:=^100}".format(""))
     print("{:=^100}".format(""))
-    print("{:^100}".format(" Modelo de Predespacho"))
+    print("{:^100}".format(" Modelo de Predespacho Regional"))
     print("{:^100}".format(" Mercados Eléctricos de Centroamérica (c) 2020 "))
     print("{:^100}".format(" Mercados Eléctricos de Centroamérica (c) 2020 "))
     print("{:=^100}".format(""))
     print("{:=^100}".format(""))
     # ============================================================================
     # ============================================================================
@@ -299,7 +298,6 @@ def setmodel(file):
 
 
     # Construcción de array para grabar
     # Construcción de array para grabar
     # =============================================================================
     # =============================================================================
-
     flujos = DataFrame()
     flujos = DataFrame()
     f = array(list(model.rtmw_c.get_values().values()))
     f = array(list(model.rtmw_c.get_values().values()))
     flujos['linea'] = brnames
     flujos['linea'] = brnames
@@ -323,20 +321,25 @@ def setmodel(file):
     result_pffi = setvariable_p(array(list(model.pffi.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_pfft = setvariable_p(array(list(model.pfft.get_values().values())),NCFF)
 
 
-    result_foo=DataFrame()
-    result_foo['Pr Bloque 1']=result_pr[:,0]
-    result_foo['Pr Bloque 2']=result_pr[:,1]
-    result_foo['Pr Bloque 3']=result_pr[:,2]
-    result_foo['Pr Bloque 4']=result_pr[:,3]
-    result_foo['Pr Bloque 5']=result_pr[:,4]
-    result_foo['Pi Bloque 1']=result_pi[:,0]
-    result_foo['Pi Bloque 2']=result_pi[:,1]
-    result_foo['Pi Bloque 3']=result_pi[:,2]
-    result_foo['Pi Bloque 4']=result_pi[:,3]
-    result_foo['Pi Bloque 5']=result_pi[:,4]
+    result_foo_r=DataFrame()
+    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]
+
+    result_foo_i=DataFrame()
+    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]
     #print(result_foo)
     #print(result_foo)
     
     
     result_foff=DataFrame()
     result_foff=DataFrame()
+    result_foff['N°']=ex_cnfff['N°']
     result_foff['Pffr Bloque 1']=result_pffr[:,0]
     result_foff['Pffr Bloque 1']=result_pffr[:,0]
     result_foff['Pffr Bloque 2']=result_pffr[:,1]
     result_foff['Pffr Bloque 2']=result_pffr[:,1]
     result_foff['Pffr Bloque 3']=result_pffr[:,2]
     result_foff['Pffr Bloque 3']=result_pffr[:,2]
@@ -355,6 +358,7 @@ def setmodel(file):
     #print(result_foff)
     #print(result_foff)
 
 
     foo_ret_iny=DataFrame()
     foo_ret_iny=DataFrame()
+    foo_ret_iny['N°']=ex_cnfff['N°']
     foo_ret_iny['Inyeccion']=result_pff_iny
     foo_ret_iny['Inyeccion']=result_pff_iny
     foo_ret_iny['Retiro']=result_pff_ret
     foo_ret_iny['Retiro']=result_pff_ret
 
 
@@ -362,7 +366,8 @@ def setmodel(file):
     writer=ExcelWriter("Resultados_predespacho.xlsx")
     writer=ExcelWriter("Resultados_predespacho.xlsx")
     flujos.to_excel(writer,'flujos',index=False)
     flujos.to_excel(writer,'flujos',index=False)
     pon.to_excel(writer,'pon',index=False)
     pon.to_excel(writer,'pon',index=False)
-    result_foo.to_excel(writer,'result_foo',index=False)
+    result_foo_i.to_excel(writer,'result_foo_i',index=False)
+    result_foo_r.to_excel(writer,'result_foo_r',index=False)
     result_foff.to_excel(writer,'result_foff',index=False)
     result_foff.to_excel(writer,'result_foff',index=False)
     foo_ret_iny.to_excel(writer,'result_foo_ret_iny',index=False)
     foo_ret_iny.to_excel(writer,'result_foo_ret_iny',index=False)
     writer.save()
     writer.save()

BIN
ieee6bus2s.xlsx


+ 2 - 0
prueba_predespacho.py

@@ -0,0 +1,2 @@
+from predespacho import *
+setmodel('ieee6bus2s.xlsx')

BIN
red/__pycache__/create1.cpython-37.pyc


+ 4 - 4
red/create1.py

@@ -31,7 +31,7 @@ def readofertas_oois(predespacho_file):
     """
     """
 
 
     ofer_ooi = read_excel(predespacho_file,sheet_name='ooi')
     ofer_ooi = read_excel(predespacho_file,sheet_name='ooi')
-    ofer_ooi.columns = ['nodo_i','Generador','precio_ooi1','magnitud_ooi1','precio_ooi2','magnitud_ooi2','precio_ooi3','magnitud_ooi3','precio_ooi4','magnitud_ooi4','precio_ooi5','magnitud_ooi5']
+    ofer_ooi.columns = ['N°','nodo_i','Generador','precio_ooi1','magnitud_ooi1','precio_ooi2','magnitud_ooi2','precio_ooi3','magnitud_ooi3','precio_ooi4','magnitud_ooi4','precio_ooi5','magnitud_ooi5']
     
     
     return ofer_ooi
     return ofer_ooi
 
 
@@ -73,7 +73,7 @@ def readofertas_oors(predespacho_file):
     """
     """
 
 
     ofer_oor = read_excel(predespacho_file,sheet_name='oor')
     ofer_oor = read_excel(predespacho_file,sheet_name='oor')
-    ofer_oor.columns = ['nodo_oor','generador','precio_oor1','magnitud_oor1','precio_oor2','magnitud_oor2','precio_oor3','magnitud_oor3','precio_oor4','magnitud_oor4','precio_oor5','magnitud_oor5']
+    ofer_oor.columns = ['N°','nodo_oor','generador','precio_oor1','magnitud_oor1','precio_oor2','magnitud_oor2','precio_oor3','magnitud_oor3','precio_oor4','magnitud_oor4','precio_oor5','magnitud_oor5']
 
 
     return ofer_oor
     return ofer_oor
 
 
@@ -120,7 +120,7 @@ def readofertas_cfs(predespacho_file):
     """
     """
 
 
     ofer_cf = read_excel(predespacho_file,sheet_name='cf')
     ofer_cf = read_excel(predespacho_file,sheet_name='cf')
-    ofer_cf.columns = ['nodo_cfi','generador','nodo_cfr','energía_dec','potencia_req','precio_cf1','magnitu_cf1','precio_cf2','magnitu_cf2','precio_cf3','magnitu_cf3','precio_cf4','magnitu_cf4','precio_cf5','magnitu_cf5']
+    ofer_cf.columns = ['N°','nodo_cfi','generador','nodo_cfr','energía_dec','potencia_req','precio_cf1','magnitu_cf1','precio_cf2','magnitu_cf2','precio_cf3','magnitu_cf3','precio_cf4','magnitu_cf4','precio_cf5','magnitu_cf5']
     
     
     return ofer_cf
     return ofer_cf
 
 
@@ -208,7 +208,7 @@ def readofertas_cnfffs(predespacho_file):
     """
     """
 
 
     ofer_cnfffi = read_excel(predespacho_file,sheet_name='cnfff')
     ofer_cnfffi = read_excel(predespacho_file,sheet_name='cnfff')
-    ofer_cnfffi.columns = ['nodo_cnfffi','generador','nodo_cnfffr','energía_dec','precio_i1','magnitud_i1','precio_i2','magnitud_i2','precio_i3','magnitud_i3','precio_i4','magnitud_i4','precio_i5','magnitud_i5','precio_r1','magnitud_r1','precio_r2','magnitud_r2','precio_r3','magnitud_r3','precio_r4','magnitud_r4','precio_r5','magnitud_r5','k','precio_cvt1','magnitud_cvt1','precio_cvt2','magnitud_cvt2','precio_cvt3','magnitud_cvt3','precio_cvt4','magnitud_cvt4','precio_cvt5','magnitud_cvt5']
+    ofer_cnfffi.columns = ['N°','nodo_cnfffi','generador','nodo_cnfffr','energía_dec','precio_i1','magnitud_i1','precio_i2','magnitud_i2','precio_i3','magnitud_i3','precio_i4','magnitud_i4','precio_i5','magnitud_i5','precio_r1','magnitud_r1','precio_r2','magnitud_r2','precio_r3','magnitud_r3','precio_r4','magnitud_r4','precio_r5','magnitud_r5','k','precio_cvt1','magnitud_cvt1','precio_cvt2','magnitud_cvt2','precio_cvt3','magnitud_cvt3','precio_cvt4','magnitud_cvt4','precio_cvt5','magnitud_cvt5']
     
     
     return ofer_cnfffi
     return ofer_cnfffi
 
 

+ 2 - 0
utils/__init__.py

@@ -0,0 +1,2 @@
+"""Funciones varias para la ejecución del modelo
+"""

+ 26 - 0
utils/idx_brch.py

@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# =============================================================================
+#  Copyright (C) 2018 Mercados Electricos de Centroamérica. All rights reserved
+# =============================================================================
+
+"""Define constantes para nombres de las columnas del dataframe de lineas
+
+El indice, nombre y descripción de cada columna es el siguiente:
+
+Columnas 0-5 incluidas en la definición de la red
+    0. C{BUS_I}     Bus de origen
+    1. C{BUS_J}     Bus de destino
+    2. C{X}         Reactancia (p.u)
+    3. C{R}         Resistencia (p.u)
+    4. C{RT_MAX}    Limite superior de transferencia en MW ij
+    5. C{RT_MIN}    Limite inferior de transferencia en MW ji
+"""
+
+# definición de indices
+BUS_I    = 0
+BUS_J    = 1
+CKT      = 2
+X        = 3
+R        = 4
+RT_MAX   = 5
+RT_MIN   = 6

+ 63 - 0
utils/map.py

@@ -0,0 +1,63 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Wed Jul 11 09:28:46 2018
+
+@author: BI4
+"""
+
+from mpl_toolkits.basemap import Basemap
+import matplotlib.pyplot as plt
+import matplotlib.patches as mpatches
+
+def plotMCT(MCT):
+    
+    plt.figure(figsize=(24,12))
+    _map = Basemap(projection='merc',
+                  resolution='l',
+                  llcrnrlon=-93, llcrnrlat=7,
+                  urcrnrlon=-75, urcrnrlat=19)
+    
+    _map.drawcoastlines()
+    _map.drawcountries(linewidth=1)
+    _map.drawmapboundary(fill_color='#99ffff')
+    _map.fillcontinents(color='#cc9966',lake_color='#99ffff')
+    
+    
+    _lons = [-90.25,-88.9167,-86.5,-85,-84,-81]
+    _lats = [15.5,13.7,15,13,10,8.2]
+    _inter = {'GUAESA':[0,1,'{0} MW'],
+              'GUAHON':[0,2,'{0} MW'],
+              'ESAHON':[1,2,'{0} MW'],
+              'HONNIC':[2,3,'{0} MW'],
+              'NICCRC':[3,4,'{0} MW'],
+              'CRCPAN':[4,5,'{0} MW']}
+    
+    _x,_y = _map(_lons,_lats)
+    
+    for i in _inter:
+        a = [_x[_inter[i][0]],_x[_inter[i][1]]]
+        b = [_y[_inter[i][0]],_y[_inter[i][1]]]
+        
+        if MCT[i][1] >= MCT[i][2] or MCT[i][1] <= MCT[i][0]:
+            color = 'orangered'
+        elif MCT[i][1] >= 0.8*MCT[i][2] or MCT[i][1] <= 0.8*MCT[i][0]:
+            color = 'yellow'
+        else:
+            color = 'green'
+        
+        plt.plot(a,b,'-',color=color,linewidth=3, label=_inter[i][2])
+    
+        plt.text(sum(a)/2,sum(b)/2,'{:.2f} MW'.format(MCT[i][1]*100), 
+                 fontdict={'fontsize': 12, 'backgroundcolor':'#cc9966', 'fontweight':'bold'},
+                 horizontalalignment='center',
+                 verticalalignment='center',)
+    
+    _map.plot(_x,_y,'o', color='navy',markersize=18)
+    
+    red_patch = mpatches.Patch(color='red', label='Interconexión al 100% de capacidad')
+    yellow_patch = mpatches.Patch(color='yellow', label='Interconexión a mas del 80% de capacidad')
+    green_patch = mpatches.Patch(color='green',label='Interconexión a menos del 80% de capacidad')
+    plt.legend(handles=[red_patch,yellow_patch,green_patch], loc=3, fontsize=16)
+    
+    plt.suptitle('Flujos entre Áreas de Control', fontsize =18, fontweight='bold')
+    plt.show()