Leonel José Henriquez Orellana 5 år sedan
förälder
incheckning
a2ec7f581e
8 ändrade filer med 117 tillägg och 19 borttagningar
  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 numpy import zeros, array
 from pandas import DataFrame, ExcelWriter
-import xlsxwriter
 
 def setmodel(file):
         
     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(""))
     # ============================================================================
@@ -299,7 +298,6 @@ def setmodel(file):
 
     # Construcción de array para grabar
     # =============================================================================
-
     flujos = DataFrame()
     f = array(list(model.rtmw_c.get_values().values()))
     flujos['linea'] = brnames
@@ -323,20 +321,25 @@ def setmodel(file):
     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=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)
     
     result_foff=DataFrame()
+    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]
@@ -355,6 +358,7 @@ def setmodel(file):
     #print(result_foff)
 
     foo_ret_iny=DataFrame()
+    foo_ret_iny['N°']=ex_cnfff['N°']
     foo_ret_iny['Inyeccion']=result_pff_iny
     foo_ret_iny['Retiro']=result_pff_ret
 
@@ -362,7 +366,8 @@ def setmodel(file):
     writer=ExcelWriter("Resultados_predespacho.xlsx")
     flujos.to_excel(writer,'flujos',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)
     foo_ret_iny.to_excel(writer,'result_foo_ret_iny',index=False)
     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.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
 
@@ -73,7 +73,7 @@ def readofertas_oors(predespacho_file):
     """
 
     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
 
@@ -120,7 +120,7 @@ def readofertas_cfs(predespacho_file):
     """
 
     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
 
@@ -208,7 +208,7 @@ def readofertas_cnfffs(predespacho_file):
     """
 
     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
 

+ 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()