| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- # -*- coding: utf-8 -*-
- # =============================================================================
- # Copyright (C) 2018 Mercados Electricos de Centroamérica. All rights reserved
- # =============================================================================
- """Importa la información de inyecciones y retiros de archivo de Excel
- """
- from pandas import read_excel, concat
- from numpy import zeros
- def readexistentes(subasta_file):
- """Lee del archivo Excel la información de Derechos Firmes existente.
-
- Retorna un DataFrame con las columnas siguientes:
-
- 1. cod_agente : Código del Agente propietario del DF existente.
- 2. tke : identificador del DF existente
- 3. bus_ie : Nodo de inyección del DF existente
- 4. bus_je : Nodo de retiro del 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']
-
- return exist
- def readofertas(subasta_file):
- """Lee del archivo Excel la información de Ofertad de Derechos Firmes.
-
- Retorna un DataFrame con las columnas siguientes:
-
- 1. cod_agente : Código del Agente que oferta.
- 2. tko : identificador de la oferta
- 3. bus_io : Nodo de inyección de la oferta
- 4. bus_jo : Nodo de retiro de la oferta
- 5. MWo : Potencia ofertada
- 6. oferta : Oferta en dólares por la compra de DF
- 7. precio : Precio del MWh ofertado [oferta/(24*365*MWo)]
- 8. per : Perdidas asignadas a la oferta
- 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']
-
- return ofer
- def setVITE(bus, ex):
- """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
- 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 asociada al derecho
-
- 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
- columna de la matriz es el vector VITEe de cada derecho firme e.
-
- """
-
- _vite = zeros((bus.shape[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
-
- return _vite
- def setVRTE(bus, ex):
- """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
- componentes son todas nulas, salvo la correspondiente al nodo de retiro
- del derecho firme donde tiene el valor correspondiene a la inyección
- asociada al derecho
-
- 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
- columna de la matriz es el vector VRTEe de cada derecho firme e.
-
- """
-
- _vrte = zeros((bus.shape[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
-
- return _vrte
- def setTE(vite,vrte):
- """Construye el vector TE resta VITE - VRTE
-
- 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
- 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.
- """
- _te = vite - vrte
-
- return _te
- def setVITEX(bus, ex):
- """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
- 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 asociada al derecho
-
- 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
- columna de la matriz es el vector VITEXe de cada derecho firme e.
-
- """
-
- _vitex = zeros((bus.shape[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
-
- return _vitex
- def setVIT(bus, of):
- """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
- componentes son todas nulas, salvo la correspondiente al nodo de inyeccion
- del derecho firme donde tiene el valor correspondiene a la inyección
- ofertada en el derecho k
-
- 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
- columna de la matriz es el vector VITk de cada oferta k.
-
- """
-
- _vit = zeros((bus.shape[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
-
- return _vit
- def setVRT(bus, of):
- """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
- componentes son todas nulas, salvo la correspondiente al nodo de retiro
- del derecho firme donde tiene el valor correspondiene a la inyección
- ofertada en el derecho k
-
- 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
- columna de la matriz es el vector VRTk de cada oferta k.
-
- """
-
- _vrt = zeros((bus.shape[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
-
- return _vrt
- def setT(vit,vrt):
- """Construye el vector T resta VIT - VRT
-
- 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
- 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.
- """
- _t = vit - vrt
-
- return _t
- def setVITX(bus,of):
- """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
- 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
- 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
- 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.
-
- """
- _vitx = zeros((bus.shape[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
-
- return _vitx
- def setIny(bus, exist, ofer):
- """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_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])
-
- for i in range(0,iny.shape[0]):
- _iny[bus[bus == iny.iloc[i].name].index[0]] = iny.iloc[i].total
-
- return _iny
- def setRet(bus, exist, ofer):
- """ 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_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])
-
- for i in range(0, ret.shape[0]):
- _ret[bus[bus == ret.iloc[i].name].index[0]] = ret.iloc[i].total
-
- return _ret
|