Browse Source

Fix format

oscarleiva 5 years ago
parent
commit
6ec2471fe6
2 changed files with 112 additions and 121 deletions
  1. 28 38
      simsdt/model.py
  2. 84 83
      simsdt/ofertas/readBids.py

+ 28 - 38
simsdt/model.py

@@ -6,18 +6,17 @@ Modulo principal para ejecutar el modelo de subasta
 import logging
 import logging
 from logging.handlers import RotatingFileHandler
 from logging.handlers import RotatingFileHandler
 from os import path
 from os import path
-import queue
 
 
 import pandas as pd
 import pandas as pd
 import pyomo.environ as pe
 import pyomo.environ as pe
 import pyutilib.subprocess.GlobalData
 import pyutilib.subprocess.GlobalData
 from numpy import array, zeros
 from numpy import array, zeros
-from openpyxl import load_workbook
 from pyomo.environ import SolverFactory
 from pyomo.environ import SolverFactory
-from pyomo.kernel import value
 
 
 from simsdt.mct.makeMCT import linmct, readmct, set_dir_flujo
 from simsdt.mct.makeMCT import linmct, readmct, set_dir_flujo
-from simsdt.ofertas.readBids import *
+from simsdt.ofertas.readBids import (readexistentes, readofertas, setT, setTE,
+                                     setVIT, setVITE, setVITEX, setVITX,
+                                     setVRT, setVRTE)
 from simsdt.red.create import branchnames, setbranch, setbus
 from simsdt.red.create import branchnames, setbranch, setbus
 from simsdt.red.makeBdc import makeBdc
 from simsdt.red.makeBdc import makeBdc
 from simsdt.red.makePTDF import makePTDF
 from simsdt.red.makePTDF import makePTDF
@@ -25,15 +24,14 @@ from simsdt.red.read import excel2net
 from simsdt.utils.arr2dict import arr2dict
 from simsdt.utils.arr2dict import arr2dict
 from simsdt.utils.idx_brch import RT_MAX, RT_MIN, R
 from simsdt.utils.idx_brch import RT_MAX, RT_MIN, R
 
 
-from qhandler import QueueHandler
-
 pyutilib.subprocess.GlobalData.DEFINE_SIGNAL_HANDLERS_DEFAULT = False
 pyutilib.subprocess.GlobalData.DEFINE_SIGNAL_HANDLERS_DEFAULT = False
 
 
 
 
 fh = RotatingFileHandler(
 fh = RotatingFileHandler(
     'log/simsdt_model_monitor.log', maxBytes=10240, backupCount=10)
     'log/simsdt_model_monitor.log', maxBytes=10240, backupCount=10)
 fmt = logging.Formatter(
 fmt = logging.Formatter(
-    '%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%dT%H:%M:%S')
+    '%(asctime)s - %(name)s - %(levelname)s - %(message)s',
+    datefmt='%Y-%m-%dT%H:%M:%S')
 fh.setFormatter(fmt)
 fh.setFormatter(fmt)
 
 
 
 
@@ -190,13 +188,17 @@ class ModeloSubasta:
 
 
         # Lim. Superior flujos asociados a linea c
         # Lim. Superior flujos asociados a linea c
         def bfu_param(model, c):
         def bfu_param(model, c):
-            return model.Bu[c] - sum(max(0, sum(model.He[c, n]*model.TE[n, o] for n in model.n)) for o in model.o)
+            return model.Bu[c]
+            - sum(max(0, sum(model.He[c, n]*model.TE[n, o]
+                             for n in model.n)) for o in model.o)
 
 
         model.BFu = pe.Param(model.c, initialize=bfu_param)
         model.BFu = pe.Param(model.c, initialize=bfu_param)
 
 
         # LIm. Inferior flujos asociados a linea c
         # LIm. Inferior flujos asociados a linea c
         def bfl_param(model, c):
         def bfl_param(model, c):
-            return model.Bl[c] - sum(max(0, -sum(model.He[c, n]*model.TE[n, o] for n in model.n)) for o in model.o)
+            return model.Bl[c]
+            - sum(max(0, -sum(model.He[c, n]*model.TE[n, o]
+                              for n in model.n)) for o in model.o)
 
 
         model.BFl = pe.Param(model.c, initialize=bfl_param)
         model.BFl = pe.Param(model.c, initialize=bfl_param)
 
 
@@ -233,7 +235,8 @@ class ModeloSubasta:
         model_logger.info("Ecuación de Función Objetivo Max Z")
         model_logger.info("Ecuación de Función Objetivo Max Z")
 
 
         def eq_Z(model):
         def eq_Z(model):
-            return sum(model.alpha_k[k]*model.C[k] - model.gamma_k[k]*model.Cper[k] for k in model.k)
+            return sum(model.alpha_k[k]*model.C[k]
+                       - model.gamma_k[k]*model.Cper[k] for k in model.k)
 
 
         model.Z = pe.Objective(rule=eq_Z, sense=pe.maximize)
         model.Z = pe.Objective(rule=eq_Z, sense=pe.maximize)
 
 
@@ -253,7 +256,9 @@ class ModeloSubasta:
         model_logger.info("Factibilidad de derechos Firmes")
         model_logger.info("Factibilidad de derechos Firmes")
 
 
         def eq_F_k_rule(model, c, k):
         def eq_F_k_rule(model, c, k):
-            return model.F_k[c, k] == model.alpha_k[k]*sum(model.He[c, n]*model.T[n, k] for n in model.n)
+            return model.F_k[c, k] == (
+                model.alpha_k[k] *
+                sum(model.He[c, n] * model.T[n, k] for n in model.n))
 
 
         model.eq_F_k = pe.Constraint(model.c, model.k, rule=eq_F_k_rule)
         model.eq_F_k = pe.Constraint(model.c, model.k, rule=eq_F_k_rule)
 
 
@@ -319,7 +324,8 @@ class ModeloSubasta:
         model.eq_PL = pe.Constraint(model.c, rule=eq_PL_rule)
         model.eq_PL = pe.Constraint(model.c, rule=eq_PL_rule)
 
 
         def eq_Per_rule(model, n):
         def eq_Per_rule(model, n):
-            return model.Per[n] == sum(model.Inc[c, n]*(model.PL[c]/2) for c in model.c)
+            return model.Per[n] == (
+                sum(model.Inc[c, n]*(model.PL[c]/2) for c in model.c))
 
 
         model.eq_Per = pe.Constraint(model.n, rule=eq_Per_rule)
         model.eq_Per = pe.Constraint(model.n, rule=eq_Per_rule)
 
 
@@ -381,7 +387,8 @@ class ModeloSubasta:
 
 
             model_logger.info("Buscando una solución optima al problema")
             model_logger.info("Buscando una solución optima al problema")
             result = opt.solve(
             result = opt.solve(
-                model, tee=True, logfile="log/solver_{}.log".format(filename[0]))
+                model, tee=True,
+                logfile="log/solver_{}.log".format(filename[0]))
 
 
             model.solutions.store_to(result)
             model.solutions.store_to(result)
             result.write(filename='results.json', format='json')
             result.write(filename='results.json', format='json')
@@ -464,45 +471,28 @@ class ModeloSubasta:
         pon = bus.copy()
         pon = bus.copy()
         pon['PON'] = PON
         pon['PON'] = PON
 
 
-        # Grabar en excel
-        # ================================================================================
-
-        # new_filename = filename[0]+'_results.'+filename[1]
-        #
-        # new_file = path.join(filepath, new_filename)
-        #
-        # book = load_workbook(new_file)
-        # writer = ExcelWriter(new_file, engine='openpyxl')
-        # writer.book = book
-        # writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
-        #
-        # resultado.to_excel(writer, sheet_name='asignacion', index=False, header=True)
-        #
-        # flujos.to_excel(writer, sheet_name='flujos', index=False, header=True)
-        #
-        # pon.to_excel(writer, sheet_name='pon', index=False, header=True)
-        #
-        # writer.save()
-        # writer.close()
-
         # Grabar en csv
         # Grabar en csv
         # =================================================================================
         # =================================================================================
         csv_path = filepath
         csv_path = filepath
         model_logger.info("Escribiendo archivo de asignaciones")
         model_logger.info("Escribiendo archivo de asignaciones")
         resultado.to_csv(
         resultado.to_csv(
-            path.join(csv_path, filename[0] + '_asignacion.csv'), sep=',', index=False)
+            path.join(csv_path,
+                      filename[0] + '_asignacion.csv'), sep=',', index=False)
 
 
         model_logger.info("Escribiendo archivo de flujos de potencia")
         model_logger.info("Escribiendo archivo de flujos de potencia")
         flujos.to_csv(
         flujos.to_csv(
-            path.join(csv_path, filename[0] + '_flujos.csv'), sep=',', index=False)
+            path.join(csv_path,
+                      filename[0] + '_flujos.csv'), sep=',', index=False)
 
 
         model_logger.info("Escribiendo archivo de flujos de precios")
         model_logger.info("Escribiendo archivo de flujos de precios")
         pon.to_csv(
         pon.to_csv(
-            path.join(csv_path, filename[0] + '_pon.csv'), sep=',', index=False)
+            path.join(csv_path,
+                      filename[0] + '_pon.csv'), sep=',', index=False)
 
 
         model_logger.info(
         model_logger.info(
             "Escribiendo archivo de flujos de potencia entre areas de control")
             "Escribiendo archivo de flujos de potencia entre areas de control")
         flujos_inter.to_csv(
         flujos_inter.to_csv(
-            path.join(csv_path, filename[0] + '_flujos_inter.csv'), sep=',', index=False)
+            path.join(csv_path,
+                      filename[0] + '_flujos_inter.csv'), sep=',', index=False)
 
 
         model_logger.info("Script Finalizado ")
         model_logger.info("Script Finalizado ")

+ 84 - 83
simsdt/ofertas/readBids.py

@@ -6,32 +6,32 @@
 """Importa la información de inyecciones y retiros de archivo de Excel 
 """Importa la información de inyecciones y retiros de archivo de Excel 
 """
 """
 
 
-from pandas import read_excel, concat
 from numpy import zeros
 from numpy import zeros
+from pandas import concat, read_excel
 
 
 
 
 def readexistentes(subasta_file):
 def readexistentes(subasta_file):
     """Lee del archivo Excel la información de Derechos Firmes existente.
     """Lee del archivo Excel la información de Derechos Firmes existente.
-    
+
     Retorna un DataFrame con las columnas siguientes:
     Retorna un DataFrame con las columnas siguientes:
-        
+
         1. cod_agente    : Código del Agente propietario del DF existente.
         1. cod_agente    : Código del Agente propietario del DF existente.
         2. tke           : identificador del DF existente
         2. tke           : identificador del DF existente
         3. bus_ie        : Nodo de inyección del DF existente
         3. bus_ie        : Nodo de inyección del DF existente
         4. bus_je        : Nodo de retiro del DF existente
         4. bus_je        : Nodo de retiro del DF existente
         5. MWe           : Potencia asignada al DF existente
         5. MWe           : Potencia asignada al DF existente
     """
     """
-    exist = read_excel(subasta_file,sheet_name='existentes')
-    exist.columns = ['cod_agente','tke','bus_ie','bus_je','MWe','per']
-    
+    exist = read_excel(subasta_file, sheet_name='existentes')
+    exist.columns = ['cod_agente', 'tke', 'bus_ie', 'bus_je', 'MWe', 'per']
+
     return exist
     return exist
 
 
 
 
 def readofertas(subasta_file):
 def readofertas(subasta_file):
     """Lee del archivo Excel la información de Ofertad de Derechos Firmes.
     """Lee del archivo Excel la información de Ofertad de Derechos Firmes.
-    
+
     Retorna un DataFrame con las columnas siguientes:
     Retorna un DataFrame con las columnas siguientes:
-        
+
         1. cod_agente    : Código del Agente que oferta.
         1. cod_agente    : Código del Agente que oferta.
         2. tko           : identificador de la oferta
         2. tko           : identificador de la oferta
         3. bus_io        : Nodo de inyección de la oferta
         3. bus_io        : Nodo de inyección de la oferta
@@ -42,204 +42,205 @@ def readofertas(subasta_file):
         8. per           : Perdidas asignadas a la oferta
         8. per           : Perdidas asignadas a la oferta
         9. cper          : Oferta en dolares por las pérdidas
         9. cper          : Oferta en dolares por las pérdidas
     """
     """
-    ofer = read_excel(subasta_file,sheet_name='oferta')
-    ofer.columns = ['cod_agente','tko','bus_io','bus_jo','MWo','oferta','precio','per','cper']
-    
+    ofer = read_excel(subasta_file, sheet_name='oferta')
+    ofer.columns = ['cod_agente', 'tko', 'bus_io',
+                    'bus_jo', 'MWo', 'oferta', 'precio', 'per', 'cper']
+
     return ofer
     return ofer
 
 
 
 
 def setVITE(bus, ex):
 def setVITE(bus, ex):
     """Construye el vector VITE de inyecciones de Derechos Firmes existentes
     """Construye el vector VITE de inyecciones de Derechos Firmes existentes
-    
+
     Vector cuya dimensión es C{nb}, en donde c{nb} es el número de nodos, y 
     Vector cuya dimensión es C{nb}, en donde c{nb} es el número de nodos, y 
     cuyas componentes son todas nulas, salvo la correspondiente al nodo de 
     cuyas componentes son todas nulas, salvo la correspondiente al nodo de 
     inyección del derecho firme donde tiene el valor correspondiene a la 
     inyección del derecho firme donde tiene el valor correspondiene a la 
     inyección asociada al derecho
     inyección asociada al derecho
-    
+
     La función regresa una matriz de dimensión C{nb x ne}, en donde C{nb} es el
     La función regresa una matriz de dimensión C{nb x ne}, en donde C{nb} es el
     número de nodos y C{ne} es el número de derechos firmes existentes. Cada
     número de nodos y C{ne} es el número de derechos firmes existentes. Cada
     columna de la matriz es el vector VITEe de cada derecho firme e.
     columna de la matriz es el vector VITEe de cada derecho firme e.
-    
+
     """
     """
-    
-    _vite = zeros((bus.shape[0],ex.shape[0]))
-    
+
+    _vite = zeros((bus.shape[0], ex.shape[0]))
+
     for i in range(0, ex.shape[0]):
     for i in range(0, ex.shape[0]):
-        _vite[bus[bus == ex.iloc[i].bus_ie].index[0],i] = ex.iloc[i].MWe
-        
+        _vite[bus[bus == ex.iloc[i].bus_ie].index[0], i] = ex.iloc[i].MWe
+
     return _vite
     return _vite
 
 
 
 
 def setVRTE(bus, ex):
 def setVRTE(bus, ex):
     """Construye el vector VRTE de retiros de Derechos Firmes existentes
     """Construye el vector VRTE de retiros de Derechos Firmes existentes
-    
+
     Vector cuya dimensión es C{nb}, en donde nb es el número de nodos, y cuyas
     Vector cuya dimensión es C{nb}, en donde nb es el número de nodos, y cuyas
     componentes son todas nulas, salvo la correspondiente al nodo de retiro
     componentes son todas nulas, salvo la correspondiente al nodo de retiro
     del derecho firme donde tiene el valor correspondiene a la inyección
     del derecho firme donde tiene el valor correspondiene a la inyección
     asociada al derecho
     asociada al derecho
-    
+
     La función regresa una matriz de dimensión C{nb x ne}, en donde C{nb} es el
     La función regresa una matriz de dimensión C{nb x ne}, en donde C{nb} es el
     número de nodos y C{ne} es el número de derechos firmes existentes. Cada
     número de nodos y C{ne} es el número de derechos firmes existentes. Cada
     columna de la matriz es el vector VRTEe de cada derecho firme e.
     columna de la matriz es el vector VRTEe de cada derecho firme e.
-    
+
     """
     """
-    
+
     _vrte = zeros((bus.shape[0], ex.shape[0]))
     _vrte = zeros((bus.shape[0], ex.shape[0]))
-    
+
     for i in range(0, ex.shape[0]):
     for i in range(0, ex.shape[0]):
-        _vrte[bus[bus == ex.iloc[i].bus_je].index[0],i] = ex.iloc[i].MWe
-        
+        _vrte[bus[bus == ex.iloc[i].bus_je].index[0], i] = ex.iloc[i].MWe
+
     return _vrte
     return _vrte
 
 
 
 
-def setTE(vite,vrte):
+def setTE(vite, vrte):
     """Construye el vector TE resta VITE - VRTE
     """Construye el vector TE resta VITE - VRTE
-    
+
     La suma de su componentes es nula.
     La suma de su componentes es nula.
-    
+
     La función regresa una matriz de dimensión C{nb x ne}, en donde C{nb} es el
     La función regresa una matriz de dimensión C{nb x ne}, en donde C{nb} es el
     número de nodos y C{ne} es el número de derechos firmes existentes. Cada
     número de nodos y C{ne} es el número de derechos firmes existentes. Cada
     columna de la matriz es el vector TEe de cada derecho firme e.
     columna de la matriz es el vector TEe de cada derecho firme e.
     """
     """
     _te = vite - vrte
     _te = vite - vrte
-    
+
     return _te
     return _te
 
 
 
 
 def setVITEX(bus, ex):
 def setVITEX(bus, ex):
     """Construye el vector VITEX de perdidas de Derechos Firmes existentes
     """Construye el vector VITEX de perdidas de Derechos Firmes existentes
-    
+
     Vector cuya dimensión es C{nb}, en donde c{nb} es el número de nodos, y 
     Vector cuya dimensión es C{nb}, en donde c{nb} es el número de nodos, y 
     cuyas componentes son todas nulas, salvo la correspondiente al nodo de 
     cuyas componentes son todas nulas, salvo la correspondiente al nodo de 
     inyección del derecho firme donde tiene el valor correspondiene a la 
     inyección del derecho firme donde tiene el valor correspondiene a la 
     inyección asociada al derecho
     inyección asociada al derecho
-    
+
     La función regresa una matriz de dimensión C{nb x ne}, en donde C{nb} es el
     La función regresa una matriz de dimensión C{nb x ne}, en donde C{nb} es el
     número de nodos y C{ne} es el número de derechos firmes existentes. Cada
     número de nodos y C{ne} es el número de derechos firmes existentes. Cada
     columna de la matriz es el vector VITEXe de cada derecho firme e.
     columna de la matriz es el vector VITEXe de cada derecho firme e.
-    
+
     """
     """
-    
-    _vitex = zeros((bus.shape[0],ex.shape[0]))
-    
+
+    _vitex = zeros((bus.shape[0], ex.shape[0]))
+
     for i in range(0, ex.shape[0]):
     for i in range(0, ex.shape[0]):
-        _vitex[bus[bus == ex.iloc[i].bus_ie].index[0],i] = ex.iloc[i].per
-        
+        _vitex[bus[bus == ex.iloc[i].bus_ie].index[0], i] = ex.iloc[i].per
+
     return _vitex
     return _vitex
 
 
 
 
 def setVIT(bus, of):
 def setVIT(bus, of):
     """Construye el vector VIT de inyecciones de Ofertas de Derechos Firmes
     """Construye el vector VIT de inyecciones de Ofertas de Derechos Firmes
-    
+
     Vector cuya dimensión es C{nb}, en donde nb es el número de nodos, y cuyas
     Vector cuya dimensión es C{nb}, en donde nb es el número de nodos, y cuyas
     componentes son todas nulas, salvo la correspondiente al nodo de inyeccion
     componentes son todas nulas, salvo la correspondiente al nodo de inyeccion
     del derecho firme donde tiene el valor correspondiene a la inyección
     del derecho firme donde tiene el valor correspondiene a la inyección
     ofertada en el derecho k
     ofertada en el derecho k
-    
+
     La función regresa una matriz de dimensión C{nb x nk}, en donde C{nb} es el
     La función regresa una matriz de dimensión C{nb x nk}, en donde C{nb} es el
     número de nodos y C{nk} es el número de ofertas de derechos firmes. Cada
     número de nodos y C{nk} es el número de ofertas de derechos firmes. Cada
     columna de la matriz es el vector VITk de cada oferta k.
     columna de la matriz es el vector VITk de cada oferta k.
-    
+
     """
     """
-    
+
     _vit = zeros((bus.shape[0], of.shape[0]))
     _vit = zeros((bus.shape[0], of.shape[0]))
-    
+
     for i in range(0, of.shape[0]):
     for i in range(0, of.shape[0]):
-        _vit[bus[bus == of.iloc[i].bus_io].index[0],i] = of.iloc[i].MWo
-        
+        _vit[bus[bus == of.iloc[i].bus_io].index[0], i] = of.iloc[i].MWo
+
     return _vit
     return _vit
 
 
 
 
 def setVRT(bus, of):
 def setVRT(bus, of):
     """Construye el vector VRT de retiros de Ofertas de Derechos Firmes
     """Construye el vector VRT de retiros de Ofertas de Derechos Firmes
-    
+
     Vector cuya dimensión es C{nb}, en donde nb es el número de nodos, y cuyas
     Vector cuya dimensión es C{nb}, en donde nb es el número de nodos, y cuyas
     componentes son todas nulas, salvo la correspondiente al nodo de retiro
     componentes son todas nulas, salvo la correspondiente al nodo de retiro
     del derecho firme donde tiene el valor correspondiene a la inyección
     del derecho firme donde tiene el valor correspondiene a la inyección
     ofertada en el derecho k
     ofertada en el derecho k
-    
+
     La función regresa una matriz de dimensión C{nb x nk}, en donde C{nb} es el
     La función regresa una matriz de dimensión C{nb x nk}, en donde C{nb} es el
     número de nodos y C{nk} es el número de ofertas de derechos firmes. Cada
     número de nodos y C{nk} es el número de ofertas de derechos firmes. Cada
     columna de la matriz es el vector VRTk de cada oferta k.
     columna de la matriz es el vector VRTk de cada oferta k.
-    
+
     """
     """
-   
+
     _vrt = zeros((bus.shape[0], of.shape[0]))
     _vrt = zeros((bus.shape[0], of.shape[0]))
-    
+
     for i in range(0, of.shape[0]):
     for i in range(0, of.shape[0]):
-        _vrt[bus[bus == of.iloc[i].bus_jo].index[0],i] = of.iloc[i].MWo
-        
+        _vrt[bus[bus == of.iloc[i].bus_jo].index[0], i] = of.iloc[i].MWo
+
     return _vrt
     return _vrt
 
 
 
 
-def setT(vit,vrt):
+def setT(vit, vrt):
     """Construye el vector T resta VIT - VRT
     """Construye el vector T resta VIT - VRT
-    
+
     La suma de sus componentes es nula.
     La suma de sus componentes es nula.
-    
+
     La función regresa una matriz de dimensión C{nb x nk}, en donde C{nb} es el
     La función regresa una matriz de dimensión C{nb x nk}, en donde C{nb} es el
     número de nodos y C{nk} es el número de ofertas de derechos firmes. Cada
     número de nodos y C{nk} es el número de ofertas de derechos firmes. Cada
     columna de la matriz es el vector Tk de cada oferta k.
     columna de la matriz es el vector Tk de cada oferta k.
     """
     """
     _t = vit - vrt
     _t = vit - vrt
-    
+
     return _t
     return _t
 
 
 
 
-def setVITX(bus,of):
+def setVITX(bus, of):
     """Construye el vector VITX de perdidas de Ofertas de Derechos Firmes
     """Construye el vector VITX de perdidas de Ofertas de Derechos Firmes
-    
+
     Vector cuya dimensión es C{nb}, en donde nb es el número de nodos, y cuyas
     Vector cuya dimensión es C{nb}, en donde nb es el número de nodos, y cuyas
     componentes son todas nulas, salvo la correspondiente al nodo de inyección
     componentes son todas nulas, salvo la correspondiente al nodo de inyección
     de la oferta de derecho firme donde tiene el valor correspondiene a la 
     de la oferta de derecho firme donde tiene el valor correspondiene a la 
     perdida máxima asociada a la oferta k
     perdida máxima asociada a la oferta k
-    
+
     La función regresa una matriz de dimensión C{nb x nk}, en donde C{nb} es el
     La función regresa una matriz de dimensión C{nb x nk}, en donde C{nb} es el
     número de nodos y C{nk} es el número de ofertas de derechos firmes. Cada
     número de nodos y C{nk} es el número de ofertas de derechos firmes. Cada
     columna de la matriz es el vector VITXk de cada oferta k.
     columna de la matriz es el vector VITXk de cada oferta k.
-    
+
     """
     """
     _vitx = zeros((bus.shape[0], of.shape[0]))
     _vitx = zeros((bus.shape[0], of.shape[0]))
-    
+
     for i in range(0, of.shape[0]):
     for i in range(0, of.shape[0]):
-        _vitx[bus[bus == of.iloc[i].bus_io].index[0],i] = of.iloc[i].per
-        
+        _vitx[bus[bus == of.iloc[i].bus_io].index[0], i] = of.iloc[i].per
+
     return _vitx
     return _vitx
 
 
 
 
 def setIny(bus, exist, ofer):
 def setIny(bus, exist, ofer):
     """Construye el vector de inyecciones para todos los nodos de la red
     """Construye el vector de inyecciones para todos los nodos de la red
     """
     """
-    
+
     iny_e = exist.pivot_table(values='MWe', aggfunc='sum', columns='bus_ie').T
     iny_e = exist.pivot_table(values='MWe', aggfunc='sum', columns='bus_ie').T
-    iny_o = ofer.pivot_table(values = 'MWo', aggfunc='sum', columns='bus_io').T
-    
-    iny=concat([iny_e, iny_o], axis=1).fillna(0)
-    
-    iny['total'] = iny.iloc[:,0]+iny.iloc[:,1]
-    
+    iny_o = ofer.pivot_table(values='MWo', aggfunc='sum', columns='bus_io').T
+
+    iny = concat([iny_e, iny_o], axis=1).fillna(0)
+
+    iny['total'] = iny.iloc[:, 0]+iny.iloc[:, 1]
+
     _iny = zeros(bus.shape[0])
     _iny = zeros(bus.shape[0])
-    
-    for i in range(0,iny.shape[0]):
+
+    for i in range(0, iny.shape[0]):
         _iny[bus[bus == iny.iloc[i].name].index[0]] = iny.iloc[i].total
         _iny[bus[bus == iny.iloc[i].name].index[0]] = iny.iloc[i].total
-    
+
     return _iny
     return _iny
 
 
 
 
 def setRet(bus, exist, ofer):
 def setRet(bus, exist, ofer):
     """ Construye el vector de retiros para todos los nodos de la red
     """ Construye el vector de retiros para todos los nodos de la red
     """
     """
-    
+
     ret_e = exist.pivot_table(values='MWe', aggfunc='sum', columns='bus_je').T
     ret_e = exist.pivot_table(values='MWe', aggfunc='sum', columns='bus_je').T
-    ret_o = ofer.pivot_table(values = 'MWo', aggfunc='sum', columns='bus_jo').T
-    
-    ret=concat([ret_e, ret_o], axis=1).fillna(0)
-    
-    ret['total'] = ret.iloc[:,0]+ret.iloc[:,1]
-    
+    ret_o = ofer.pivot_table(values='MWo', aggfunc='sum', columns='bus_jo').T
+
+    ret = concat([ret_e, ret_o], axis=1).fillna(0)
+
+    ret['total'] = ret.iloc[:, 0]+ret.iloc[:, 1]
+
     _ret = zeros(bus.shape[0])
     _ret = zeros(bus.shape[0])
-    
+
     for i in range(0, ret.shape[0]):
     for i in range(0, ret.shape[0]):
         _ret[bus[bus == ret.iloc[i].name].index[0]] = ret.iloc[i].total
         _ret[bus[bus == ret.iloc[i].name].index[0]] = ret.iloc[i].total
-    
-    return _ret
+
+    return _ret