Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE INGENIERÍA ELÉCTRICA
AUTORES:
CARLOS MATUTE
20121009469
FAUSTO VIDEA
20141006078
JOSE LOZANO
20151005549
TUTOR:
ING. ROLANDO CASTILLO
AUTORES:
CARLOS MATUTE
20121009469
FAUSTO VIDEA
20141006078
JOSE LOZANO
20151005549
TUTOR:
ING. ROLANDO CASTILLO
Tribunal:
Presidente/a: Vocal 1:
Calificación:
Declaración
Carlos Matute
Fausto Videa
Jose Lozano
Agradecimientos
Un agradecimiento especial a Dios que nos regala la vida y la sabiduría de haber
desarrollado todas y cada una de las clases, retos y conocimientos obtenidos a lo largo
de la carrera. Una mención a mis padres por el apoyo y la paciencia de esperar a este
momento, a mis familiares y amigos por su apoyo incondicional, por sus voces de
aliento y ánimo que hoy rinden frutos.
Carlos Matute
Me van a faltar páginas para agradecer a las personas que se han involucrado
en la realización de este trabajo, sin embargo, merecen reconocimiento especial mi
Madre y mi Padre que con su esfuerzo y dedicación me ayudaron a culminar mi
carrera universitaria y me dieron el apoyo suficiente para no decaer cuando todo
parecía complicado e imposible.
Fausto Videa
Los principales paradigmas que forman la computación evolutiva son, por tanto:
Programación Evolutiva, en la cual la inteligencia se ve como un comportamiento
adaptativo; Estrategias Evolutivas, cuyo objetivo era resolver problemas hidrodinámicos
de alto grado de complejidad; y Algoritmos Genéticos, cuya motivación principal
es el aprendizaje de máquina.
Por otro lado, las estrategias evolutivas fueron desarrolladas en 1964 por un
grupo de estudiantes alemanes de ingeniería encabezado por Ingo Rechenberg. Su
objetivo era resolver problemas hidrodinámicos de alto grado de complejidad. La
versión original usaba un solo padre y con él se generaba un solo hijo. Este hijo se
mantenía si era mejor que el padre, o de lo contrario se elimina. Ingo Rechenberg
(1973) también introdujo el concepto de población, al proponer una estrategia evolutiva
llamada (μ + 1) − EE, en la cual hay μ padres y se genera un solo hijo, el cual puede
reemplazar al peor padre de la población.
Chile, Perú y algunas islas del Pacífico y realizar varias observaciones cronométricas
alrededor del mundo. A bordo viaja el joven naturalista de 22 años, Charles Robert
Darwin (1809-1882). El 6 de enero de 1832 el Beagle fondea frente a las costas de
Tenerife. Sin embargo, las autoridades obligan a la tripulación a permanecer a bordo
del buque por miedo a que padezca el cólera. La larga travesía del Beagle, que atraca
el 2 de octubre en Falmouth, sirve a Darwin para enunciar su teoría acerca del origen y
evolución de las especies, que derrumba el Lamarck ismo al indicar que la evolución se
origina a través de cambios aleatorios de características hereditarias, combinados con
un proceso de selección natural.
( b i−ai )∗10 p
[IV.2]
[IV.3]
Cruce y mutación:
Una vez que la selección ha elegido a los individuos aptos, éstos deben ser
alterados aleatoriamente con la esperanza de mejorar su aptitud para la siguiente
generación. Existen dos estrategias básicas para llevar esto a cabo. La primera y más
sencilla se llama mutación. Al igual que una mutación en los seres vivos cambia un gen
por otro, una mutación en un algoritmo genético también causa pequeñas alteraciones
en puntos concretos del código de un individuo.
El segundo método se llama cruce, e implica elegir a dos individuos para que
intercambien segmentos de su código, produciendo una “descendencia” artificial cuyos
individuos son combinaciones de sus padres. Este proceso pretende simular el proceso
análogo de la recombinación que se da en los cromosomas durante la reproducción
sexual. Las formas comunes de cruzamiento incluyen al cruzamiento de un punto, en el
que se establece un punto de intercambio en un lugar aleatorio del genoma de los dos
individuos, y uno de los individuos contribuye todo su código anterior a ese punto y el
otro individuo contribuye todo su código a partir de ese punto para producir una
descendencia, y al cruzamiento uniforme, en el que el valor de una posición dada en el
genoma de la descendencia corresponde al valor en esa posición del genoma de uno
de los padres o al valor en esa posición del genoma del otro padre, elegido con un 50%
de probabilidad.
Los operadores genéticos en este caso son operadores con memoria, guardando
en cada iteración los códigos genéticos de los mejores individuos a través de las
generaciones. Los procesos de evolución darviniana generalmente son procesos
miméticos a través de las generaciones.
V. DESPACHO ENERGÉTICO
V.1. Definición
El término "Despacho" se refiere a la planificación del uso de los recursos de una
planta de energía por parte del operador de la planta. "Re despacho" se refiere a un
cambio a corto plazo en la operación de la planta de energía. Esta solicitud llega a
instancias del operador del sistema de transmisión para evitar sobrecargas locales en
la red. Experimentamos un verdadero cambio de paradigma. La mayor penetración de
generación con energías renovables desafía la forma convencional de operar nuestro
sistema eléctrico. Hay que reinventar los modelos de negocio y rediseñar nuestras
redes. La variabilidad de las fuentes renovables como el sol y el viento no
necesariamente ponen en peligro el equilibrio del sistema, siempre que sean
gestionadas adecuadamente.
El despacho de energía tiene como objetivo lograr el perfil de operación más
rentable en una planta de energía. Para dicho fin, se consideran los costos variables de
cada planta (como el costo del combustible en una planta a carbón) junto con los
precios pronosticados en los mercados de energía. Una planta de energía solo es
rentable si sus costos variables son más bajos que los precios de venta de energía que
se puedan lograr en el mercado. Por otro lado, también se genera un horario que
determina la asignación de la capacidad de ajuste disponible para la planta o plantas.
Para generar dicho horario se consideran factores como la ubicación, el tiempo y la
graduación.
Algoritmo genético aplicado al despacho energético
VI. METODOLOGÍA
El procedimiento elaborado del Algoritmo Genético para resolver el problema de
despacho de carga en un sistema de potencia considerando la capacidad de transporte
de los elementos de la red se muestra en la Figura V. 1.
Los pasos a seguir para resolver el problema son los siguientes:
a) Primeramente, tomamos los datos del sistema, como ser: número de nodos,
números de conexiones, los límites de generación de los generadores, los
datos de las líneas de transmisión, etc. Ya que estos servirán para modelar el
sistema.
b) Se determina qué tipo de codificación se utilizará para cada individuo, su
tamaño y limitaciones. Se utilizará codificación decimal debido a su facilidad,
aunque representa menor diversidad al generar individuos en comparación
con la decimal. El tamaño de nuestro individuo será de 14 alelos que
representan cada grupo de generadores y se tendrá en cuenta la capacidad
máxima de generación de dicho grupo al momento de generar los individuos,
además de que la suma total de cada alelo del individuo se igual a la demanda
de dada en ese momento.
Algoritmo genético aplicado al despacho energético
[VI.5]
O sea:
[ P ] =[ B ][ θ ]
[VI.6]
Donde:
10,000,000
Fadapn=
a∗w n+ b∗OL n
[VI.7]
i) Luego de usar los operadores anteriores es obvio que la suma de cada alelo
de los individuos será mayor o menor a la demanda de dicho momento. Es por
ello que se establecen otras operaciones para corregir este problema y lograr
que llegar a una solución. Si el total es menor se empieza a sumar desde el
generador más barato hasta el más caro hasta llegar al valor esperado. En
caso de que el total sea mayor se comenzara a restar desde el más caro hasta
el más barato hasta que se alcance el valor esperado.
j) Por último, se evalúa si alcanzo el valor esperado y se repite por n
generaciones hasta culminar el algoritmo.
VIII. RESULTADOS
La elaboración y simulación del Algoritmo Genético (AG) para resolver el
problema de despacho de carga en la red IEEE-RTS de 24 barras, considerando
restricciones de transmisión de la red se realizó en el lenguaje de programación
Python.
2500.00
Potencia Generada en MW
2000.00
1500.00
1000.00
500.00
0.00
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Tiempo (Hrs)
Algoritmo genético aplicado al despacho energético
90.00
80.00
70.00
60.00
50.00
%
40.00
30.00
20.00
10.00
0.00
0 5 10 15 20 25 30 35
Numero de conexion
45000
40000
35000
30000
Costos (US$)
25000
20000
15000
10000
5000
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Tiempo (Hrs)
IX. CONCLUSIONES Y RECOMENDACIONES
El método de Algoritmos Genéticos (AGs) se adapta de buena manera a la
resolución de un problema de despacho económico de carga, considerando las
restricciones de transmisión de la red eléctrica ya que permite la determinación de la
potencia generada por las unidades generadoras para satisfacer la demanda diaria de
electricidad del sistema al mínimo costo.
import numpy as np
import random
import pandas as pd
# Ingresar datos
g1 = (1, 5, "DIESEL", 15, 0, 12, 27.6)
g2 = (2, 2, "DIESEL", 1, 0, 20, 43.5)
g3 = (3, 2, "DIESEL", 2, 0, 20, 43.5)
g4 = (4, 2, "CARBON", 1, 0, 76, 14.4)
g5 = (5, 2, "CARBON", 2, 0, 76, 14.4)
g6 = (6, 6, "GAS NATURAL", 7, 0, 100, 23)
g7 = (7, 1, "CARBON", 7, 0, 155, 11.6)
g8 = (8, 1, "CARBON", 15, 0, 155, 11.7)
g9 = (9, 1, "CARBON", 16, 0, 155, 11.7)
g10 = (10, 1, "CARBON", 23, 0, 155, 11.7)
g11 = (11, 6, "GAS NATURAL", 22, 0, 197, 22.1)
g12 = (12, 1, "CARBON", 23, 0, 350, 11.4)
g13 = (13, 1, "NUCLEAR", 21, 0, 400, 6)
g14 = (14, 1, "NUCLEAR", 18, 0, 400, 6)
dtype = [('No', int), ('#G', int), ('Tipo', str), ('Barra', int), ('Pmin',
float), ('Pmax', float), ("Costo", float)]
b1 = [1, 0.038]
b2 = [2, 0.034]
b3 = [3, 0.063]
b4 = [4, 0.026]
b5 = [5, 0.025]
b6 = [6, 0.048]
b7 = [7, 0.044]
b8 = [8, 0.06]
b9 = [9, 0.061]
b10 = [10, 0.068]
b11 = [11, 0]
b12 = [12, 0]
b13 = [13, 0.093]
b14 = [14, 0.068]
b15 = [15, 0.111]
b16 = [16, 0.035]
b17 = [17, 0]
b18 = [18, 0.117]
b19 = [19, 0.064]
b20 = [20, 0.045]
b21 = [21, 0]
b22 = [22, 0]
b23 = [23, 0]
b24 = [24, 0]
B = [b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16,
b17, b18, b19, b20, b21, b22, b23, b24]
#Crear arreglos
L = [l1, l2, l3, l4, l5, l11, l7, l8, l9, l10, l6, l12, l13, l14, l15, l16,
l17, l18, l19, l20, l21, l22, l23, l24, l25,
l26, l27, l28, l29, l30, l31, l32, l33]
G = [g1, g2, g3, g4, g5, g6, g7, g8, g9, g10, g11, g12, g13, g14]
G = np.array(G, dtype=dtype)
L = pd.DataFrame(L)
Página: 43
class DNA():
def __init__(self, mutation_rate, n_individuals, n_selection,
n_generations, reproduction_rate, data=0, p=0, dataL = 0, dataB = 0):
self.mutation_rate = mutation_rate
self.n_individuals = n_individuals
self.n_selection = n_selection
self.n_generations = n_generations
self.reproduction_rate = reproduction_rate
self.data = data
self.length = len(data)
self.p = p
self.dataL = dataL
self.dataB = dataB
# Crear listas
def create_list(self, l):
lst = []
for i in range(l):
lst.insert(i, 0)
return lst
return individual
return individual
# Crear poblacion
def create_population(self):
population = [self.create_individual() for i in
range(self.n_individuals)]
population = [self.popfDC(i) for i in population]
return population
cm.insert(i, c)
return cm
for i in range(len(cost)):
co[i] = cost[i] * individual[i]
cot = self.costT(co)
return cot
return c
for i in range(len(ol)):
return selected
# Cruce
def reproduction(self, population, selected):
for i in range(len(population)):
if random.random() <= self.mutation_rate:
point = np.random.randint(1, len(population[0]) - 1)
father = random.sample(selected, 2)
population[i][:point] = father[0][:point]
population[i][point:] = father[1][point:]
Página: 45
return population
# Corregir si es menor
def corindmenor(self, individual):
c = 0
for i in individual:
c += i
if c < self.p:
m = self.p - c
v = True
while v:
pos = int(random.uniform(0, len(individual)))
max = int(self.data[pos][5]) * int(self.data[pos][1])
if m > 0:
d = max - individual[pos]
if d < m:
m -= max-individual[pos]
individual[pos] = max
elif d > m:
individual[pos] = individual[pos] + m
v = False
return individual
# Corregir si es mayor
def corindmayor(self, individual):
c = 0
for i in individual:
c += i
if c > self.p:
m = c - self.p
v = True
while v:
pos = int(random.uniform(0, len(individual)))
if m > 0:
if individual[pos] < m:
m -= individual[pos]
individual[pos] = 0
elif individual[pos] > m:
individual[pos] -= m
v = False
return individual
# Mutar poblacion
def mutation(self, population):
for i in range(len(population)):
if random.random() <= self.mutation_rate:
point = random.randint(0, len(population[0])-1)
min = int(self.data[point][4])
max = int(self.data[point][5]) * int(self.data[point][1])
new_value = random.uniform(min, max)
Algoritmo genético aplicado al despacho energético
if c > self.p:
individual = self.create_individual()
elif c < self.p:
individual = self.create_individual()
for i in range(len(individual)):
max = int(self.data[i][5]) * int(self.data[i][1])
if individual[i] > max:
de += 1
if de > 0:
individual = self.create_individual()
return individual
def run_gen_alg(self):
population = self.create_population()
for i in range(self.n_generations):
selected = self.selection(population)
population = self.reproduction(population, selected)
population = self.mutation(population)
population = self.corpop(population)
population = self.deletep(population)
a = self.fDC(selected[-1])
c = 0
for j in a:
if j >= 100:
c += 1
if c == 0:
print('Generacion: ', i)
print('Mejor: ', selected[-1])
print('Costo: ', self.co(selected[-1]))
print('Flujo: ', self.fDC(selected[-1]))
Página: 47
k = int(self.dataL.loc[i][0] - 1)
m = int(self.dataL.loc[i][1] - 1)
Zkm = self.dataL.loc[i][2]
Bbus[k][m] = -1 / Zkm
Bbus[m][k] = -1 / Zkm
for i in range(len(Bbus)):
c = 0
for j in range(len(Bbus)):
c += Bbus[i][j]
Bbus[i][i] = -c
Bbus = np.round(Bbus, 2)
BbusInv = np.linalg.inv(Bbus)
return BbusInv
for i in range(len(self.dataB)):
mp[i] -= self.dataB[i][1] * self.p
mp = mp/self.p
return mp
return temp
i = 2684.6
X. REFERENCIAS
Página: 49
[11] P. Viego, M. de Armas, I. Pérez, A. Padrón y L. Casas. “Temas Especiales de
Sistemas Eléctricos Industriales”. Material no editado. Centro de Estudios de Energía y
Medio Ambiente, pp. 133. Universidad de Cienfuegos. Cuba. 2006.
[12] Ruiz, A. G., Galvis, J. C., & Carmona, O. G. (2006). Algoritmo evolutivo
diferencial aplicado al problema de despacho hidrotérmico. Scientia et technica, 12(32),
187-192.
[13] San Martin, L. S. Aplicación de Algoritmos Genéticos en el Despacho de
Carga considerando Restricciones en la Red de Transporte.
[14] Sloss, A. N., & Gustafson, S. (2020). 2019 Evolutionary Algorithms Review.
Genetic Programming Theory and Practice XVII, 307-344.
[15] Valencia, P. E. (1997, August). Optimización mediante algoritmos genéticos.
In Anales del Instituto de Ingenieros de Chile (Vol. 109, No. 2, pp. 83-92).
Algoritmo genético aplicado al despacho energético
Página: 51