Sie sind auf Seite 1von 27

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 = np.random.rand(Npob,4)
aux = np.ones((Npob,1))
penaliza = np.zeros((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 = np.array([[40,50,45]])
b = np.array([[4.50,3.50,3.3]])
c = np.array([[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 = np.random.randint(1, 0.4*Npob,0.4*Npob)
padres1 = padres[0:0.2*Npob,]
padres2 = padres[0.2*Npob:0.4*Npob,]
ax = np.random.rand()
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 = np.zeros((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 = np.random.rand(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