You are on page 1of 34

INGENIERÍA ELÉCTRICA

INSTITUTO DE INVESTIGACIÓN
INGENIERÍA ELÉCTRICA

GONZALO OSCAR EULATE CHOQUE


ABRIL 2016
INTRODUCCIÓN

El Instituto de Investigaciones, es una


unidad académica de Carrera de
Ingeniería Eléctrica, dependiente de la
Facultad de Ingeniería de la Universidad
Mayor de San Andrés.
Dedicada a la investigación
interdisciplinaria en el campo de la
ingeniería eléctrica en particular.
OBJETIVOS

Contribuir activamente con el desarrollo


tecnológico de Bolivia, a través de la
investigación en el campo de la
ingeniería eléctrica.
Realizar proyectos de investigación con
fondos internos, externos, mixtos y por
contrato para resolver problemas
específicos de instituciones
gubernamentales y privadas.
Misión - Visión

Misión
Desarrollar investigaciones y servicios en las áreas de la ingeniería
eléctrica, transmitiendo los resultados a la comunidad nacional e
internacional, a través de la docencia y la acción social, con el
fin de contribuir con el desarrollo sustentable con apego a la
ética, el humanismo y el conocimiento de las personas que lo
producen.

Visión
Posicionarse en la comunidad nacional e internacional, como un
instituto de reconocida excelencia y liderazgo en el desarrollo de
investigaciones y servicios en ingeniería eléctrica, para lograr
una mayor difusión y cobertura de sus resultados.
Organigrama
Python

El software Python es un lenguaje de


programación interpretado cuya filosofía
hace hincapié en una sintaxis que
favorezca un código legible. Se trata de un
lenguaje de programación multiparadigma,
ya que soporta orientación a objetos,
programación imperativa y, en menor
medida, programación funcional.

Python puede ser utilizado en diversas


plataformas y sistemas operativos
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.
CYMDIST CYME

A partir de la versión 7,1, se tiene la opción


del uso de script para la automatización en
el análisis de las redes eléctricas de
distribución.
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..𝑁 = 𝑃𝑔𝑚𝑖𝑛 + 𝑟𝑎𝑛𝑑 × 𝑃𝑔𝑚𝑎𝑥 − 𝑃𝑔𝑚𝑖𝑛


FLUJO GENÈTICO
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
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
#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]])
print (pob[1:20,:])
CÓDIGO PYTHON

#genera poblacion inicial


pob = inf+(sup-inf)*pob
Ejemplos
30 + (120-30)*0,75 = 97,5

30 + (120-30)*0,12 = 40,8
CÓDIGO PYTHON

# Variables asignadas

Pob[:,0] = Pgen1
Pob[:,1] = Pgen2
Pob[:,2] = Pgen3

Pob[:,3] = Costo total


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

#Resultados del cruce


12,38 68,46 39,23 639,38

Se muestra que Pgen1 esta fuera de los limites..

En algún caso puede ser negativo…

Se debe penalizar a los individuos que no cumplen


La forma es sumar por ejemplo el valor de 1000…
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
GRACIAS
AGOSTO 2016

You might also like