INGENIERÍA ELÉCTRICA
USO DEL PYTHON
EN LA INDUSTRIA ELÉCTRICA
GONZGonzalo Oscar Eulate Choque
Septiembre 2019
INTRODUCCIÓN
Los sistemas eléctricos en constante
crecimiento requieren el análisis
exhaustivo de la operación para el
conocimiento de las diferentes variables
eléctricas, que en muchos casos son de
manera informática y repetitiva que
demandan tiempo y recursos.
Herramientas en la Industria Eléctrica
Power Factory Digsilent, para análisis de
sistemas eléctricos de potencia.
Cymdist, para análisis de redes de
distribución.
Matlab, para análisis numérico y científico.
ArcGis, Qgis, para sistemas de información
geográfica.
Python
Lenguaje de programación de alto nivel del
tipo scripting.
Diseñado para ser fácil de leer y simple de
implementar.
Es código abierto (de libre uso).
Puede ejecutarse en Mac, Windows y
sistemas Unix; también ha sido portado a
máquinas virtual JAVA y .NET.
Es a menudo usado para desarrollar
aplicaciones web y contenido web
dinámico.
POWER FACTORY DIGSILENT
A partir de la versión 15.1.6, se tiene la opción
del uso de script para la automatización en
el análisis de los sistemas eléctricos de
potencia.
MATLAB
Software para análisis numérico, científico,
presenta la alternativa de convertir el
código programado en Matlab a código en
Python.
En el presente seminario, se utilizará el
Python para el siguiente ejemplo de
solución al despacho económico, mediante
algoritmos genéticos.
ALGORITMOS GENÉTICOS
Técnicas de búsqueda que pertenecen a los Algoritmos Evolutivos.
CE = AG + EE + PE + PG
Algoritmos Estrategias Programación Programación
Computación Evolutiva
Evolutiva Genéticos Evolutivas Genética
Holland 1975 Rechenberg 1973 Fogel, Owens y Walsh Koza 1992
1966
ALGORITMOS GENÉTICOS
UN AG TIENE 5 COMPONENTES BÁSICOS:
Una representación de las soluciones potenciales del problema.
Un procedimiento para crear una población inicial, posibles
soluciones (normalmente en proceso aleatorio).
Una función de evaluación que representa al “ambiente”,
clasificando las soluciones en términos de su aptitud.
Un conjunto de operadores de evolución que alteran la
composición de los individuos de la población a través de las
generaciones.
Una configuración paramétrica (tamaño de la población,
probabilidad de cruzamiento, probabilidad de mutación, criterio
de parada, etc.).
REPRESENTACION
BINARIO, REAL, HEXADECIMAL
GENES
Valor del gen Alelo
CROMOSOMA
1 1 0 1 1 0 0 1
bin2dec('1001')
X Y 9
13 9
POBLACIÓN INICIAL
Población Inicial
Población de POSIBLES SOLUCIONES
Forma de generación:
- Aleatorio
> round(rand()*100) = 45
> dec2bin(45) = 101101
101101
011010
EJEMPLO POBLACIÓN DE 100 INDIVIDUOS
100 POSIBLES SOLUCIONES
OPERADOR CRUCE
CRUCE MONOPUNTO
PADRES
PADRE A PADRE B
1 1 1 0 1 0 0 1
1 1 0 1 1 0 1 0
HIJOS
HIJO 1 HIJO 2
OPERADOR MUTACIÓN
SELECCIÓN ALEATORIA GEN A MUTAR
1 0 1 1 0 1
1 0 0 1 0 1
Muta = 1 - Val
FUNCIÓN DE ADAPTACIÓN
En cada iteración toda la población es
evaluada (la función objetivo).
fi = f(xi, yi)
Ordenación ascendente
o descendente
DESPACHO ECONÓMICO - AG
Sistema de tres generadores conectados a
una barra, con una demanda de 120 MW.
𝑪𝒐𝒔𝒕𝒐 = 𝒂 + 𝒃 × 𝑷𝒈 + 𝒄 × 𝑷𝒈𝟐
Pg a b c 𝑃𝑔𝑚𝑖𝑛 𝑃𝑔𝑚𝑎𝑥
us$ 𝑢𝑠$ 𝑢𝑠$ MW MW
𝑀𝑊ℎ 𝑀𝑊ℎ2
1 40 4,50 0,015 30 50
2 50 3,50 0,015 30 50
3 40 3,30 0,02 30 50
SOLUCIÓN PROPUESTA
“DESPACHO ECONÓMICO ES LA ASIGNACIÓN ÓPTIMA DE LA POTENCIAS DE
GENERACIÓN, PARA MINIMIZAR EL COSTO TOTAL DE GENERACIÓN, EN UN SISTEMA
ELÉCTRICO DE POTENCIA”.
FUNCIÓN OBJETIVO
𝐹𝑚𝑖𝑛 = 𝐶1 + 𝐶2 + 𝐶3
RESTRICCIONES
𝑁
𝑃𝑔𝑖 = 𝑃𝑝𝑑
𝑖=1
𝑃𝑔𝑚𝑖𝑛 ≤ 𝑃𝑔 ≤ 𝑃𝑔𝑚𝑎𝑥
CONSIDERACIONES
𝑃𝑔3 = 𝑃𝑝𝑑 − 𝑃𝑔1 − 𝑃𝑔2
SOLUCIÓN PROPUESTA
FUNCIÓN OBJETIVO
𝐹𝑚𝑖𝑛 = 𝐶1 + 𝐶2 + 𝐶3 + w
PENALIZACIÓN
𝑃𝑔𝑖 ≤ 𝑃𝑔𝑚𝑖𝑛 −→ 𝑤 = 1000
𝑃𝑔𝑖 ≥ 𝑃𝑔𝑚𝑎𝑥 −→ 𝑤 = 1000
SOLUCIÓN PROPUESTA
REPRESENTACIÓN
𝑃𝑔1 , 𝑃𝑔2, 𝑃𝑔3 VALORES REALES
POBLACIÓN INICIAL
𝑝𝑜𝑏𝑖,1..𝑁 = 𝑃𝑔𝑚𝑖𝑛 + 𝑟𝑎𝑛𝑑 × 𝑃𝑔𝑚𝑎𝑥 − 𝑃𝑔𝑚𝑖𝑛
OPERADOR GENÉTICO
CRUCE DE WRIGHT
𝑃𝑎𝑑𝑟𝑒𝑠 𝑖𝑛𝑑𝑖𝑣𝑖𝑑𝑢𝑜𝑠 𝑎 𝑦 𝑏
Hijos individuos c, d y e
𝑝𝑜𝑏𝑐 = 𝛼 × 𝑝𝑜𝑏𝑎 + 1 − 𝛼 × 𝑝𝑜𝑏𝑏
𝑝𝑜𝑏𝑑 = 1 + 𝛼 × 𝑝𝑜𝑏𝑎 − 𝛼 × 𝑝𝑜𝑏𝑏
𝑝𝑜𝑏𝑒 = 𝛼 × 𝑝𝑜𝑏𝑎 + 1 + 𝛼 × 𝑝𝑜𝑏𝑏
0 ≤ 𝛼 ≤1
OPERADOR GENÉTICO
FUNCIÓN DE ADAPTACIÓN
𝑆𝐸 𝑂𝑅𝐷𝐸𝑁𝐴 𝐷𝐸 𝑀𝐸𝑁𝑂𝑅 𝐴 𝑀𝐴𝑌𝑂𝑅 𝐸𝐿 𝐶𝑂𝑆𝑇𝑂 𝑇𝑂𝑇𝐴𝐿
SUSTITUCIÓN DE LA POBLACIÓN
𝑅𝐸𝐸𝑀𝑃𝐿𝐴𝑍𝑂 𝐷𝐸𝐿 20% 𝐶𝑂𝑁 𝑀𝐸𝑁𝑂𝑅 𝐴𝐷𝐴𝑃𝑇𝐴𝐶𝐼Ó𝑁
CRITERIO DE TERMINACIÓN
𝐶𝐴𝑁𝑇𝐼𝐷𝐴𝐷 𝐷𝐸 𝐺𝐸𝑁𝐸𝑅𝐴𝐶𝐼𝑂𝑁𝐸𝑆 (𝐼𝑇𝐸𝑅𝐴𝐶𝐼𝑂𝑁𝐸𝑆)
CÓDIGO PYTHON
Sistema de tres generadores conectados a
una barra, con una demanda de 120 MW.
import numpy as np
Npob, Ngen, Pd = 600, 100, 120
pob = [Link](Npob,4)
aux = [Link]((Npob,1))
penaliza = [Link]((Npob,1))
inf , sup = 30*aux, sup = 50*aux
CÓDIGO PYTHON
Parte del programa para generar la población
inicial
#genera poblacion inicial
pob = inf+(sup-inf)*pob
#se almacenan las funciones de costos
a = [Link]([[40,50,45]])
b = [Link]([[4.50,3.50,3.3]])
c = [Link]([[0.015,0.010,0.02]])
CÓDIGO PYTHON
Parte del programa que inicia el proceso
evolutivo
for t in range(1,Ngen+1):
pg = pob[:,0:3]
pg[:,2] = Pd-pg[:,0]-pg[:,1]
costo = a + b*pg + c*pg**2
pob[:,3] = costo[:,1]+costo[:,0]+costo[:,2]+penaliza[:,0]
pob = pob[pob[:,3].argsort(),]
CÓDIGO PYTHON
#realiza el cruce
padres = [Link](1, 0.4*Npob,0.4*Npob)
padres1 = padres[0:0.2*Npob,]
padres2 = padres[0.2*Npob:0.4*Npob,]
ax = [Link]()
A = ax*pob[padres1,] + (1-ax)*pob[padres2,]
B = (1+ax)*pob[padres1,] - ax*pob[padres2,]
C = ax*pob[padres1,] + (1+ax)*pob[padres2,]
pob[0.4*Npob:0.6*Npob,] = A
pob[0.6*Npob:0.8*Npob,] = B
pob[0.8*Npob:Npob,] = C
CÓDIGO PYTHON
#penaliza a los individuos que están fuera de los limites
penaliza = [Link]((Npob,1))
for i in range(0,Npob):
for j in range(0,3):
if pob[i,j] < 30:
penaliza[i,0] = penaliza[i,0] + 1000
if pob[i,j] > 50:
penaliza[i,0] = penaliza[i,0] + 1000
CÓDIGO PYTHON
#calcula nuevamente el costo
pg = pob[:,0:3]
pg[:,2] = Pd-pg[:,0]-pg[:,1]
costo = a + b*pg + c*pg**2
pob[:,3] = costo[:,1]+costo[:,0]+costo[:,2]+penaliza[:,0]
pob = pob[pob[:,3].argsort(),]
CÓDIGO PYTHON
#genera poblacion inicial
#el 20 % de los peores individuos
aux1 = [Link](Npob,4)
aux1 = inf+(sup-inf)*aux1
n1 = 0.2*Npob
pob[n1:Npob,0:3] = aux1[n1:Npob,0:3]
print "resultado despacho economico"
print pob[1:20,:]
Python
Python
en la Industria Eléctrica
GONZALO OSCAR EULATE CHOQUE
GONZALO OSCAR EULATE CHOQUE
Septiembre 2019