|
@@ -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
|