Descripción
Desde su aparición en la década de los 60, los algoritmos genéticos han ido ganando popularidad, gracias al frenético crecimiento de la capacidad computacional en los últimos años. Finalmente se han abierto camino en el ámbito de la ingeniería como una de las herramientas más prometedoras para resolver problemas de gran complejidad, inabordables desde los enfoques clásicos de la ingeniería.
Los algoritmos genéticos son estrategias de resolución de problemas de optimización basados en la teoría de la selección natural de Darwin, mediante la cual aquellos individuos más aptos para sobrevivir tienen una mayor probabilidad de crear descendencia y transmitir su información genética. Partiendo de esta base, son muchas las propuestas que se han desarrollado para abordar una gran cantidad de problemas de diferentes áreas de la ingeniería.
En este libro le proponemos adentrarte en el mundo de los algoritmos genéticos utilizando Python, uno de los lenguajes de programación más populares en la actualidad y con más crecimiento durante los últimos años. Los contenidos del libro se han diseñado para que sean sencillos, concisos y fáciles de implementar, con ejemplos directos de aplicación para
que pueda practicar desde la primera página.
Con este libro aprenderá a:
oEntender la naturaleza y el funcionamiento de los algoritmos genéticos, comprendiendo las diferentes operaciones y procesos que lo componen.
oConocer las diferentes implementaciones de los algoritmos genéticos de mayor relevancia, así como identificar las ventajas e inconvenientes de cada uno para determinar su potencial para resolver un determinado problema.
oConocer a fondo y utilizar los diferentes operadores (selección, mutación y cruce) que la librería deap pone a su disposición.
oDesarrollar un algoritmo genético desde cero en Python y utilizarlo para resolver sus propios problemas de ingeniería.
oConocer y estudiar aplicaciones de relevancia de algoritmos genéticos en el ámbito de la ingeniería, tales como la gestión del despacho económico, el diseño de plantas hidroeléctricas o la disposición de sensores inalámbricos.
Índice
CONTENIDOS
Prefacio
Parte 1: Introducción a los algoritmos genéticos
1. Introducción
1.1 Introducción a los algoritmos genéticos
1.2 Primeros pasos mediante un problema sencillo
1.3 Definición del problema y generación de la población inicial
1.3.1 Creación del problema
1.3.2 Creación de la plantilla del individuo
1.3.3 Crear individuos aleatorios y población inicial
1.4 Función objetivo y operadores genéticos
1.4.1 Función objetivo
1.5 Operadores genéticos
1.6 Últimos pasos: Algoritmo genético como caja negra
1.6.1 Configuración algoritmo genético
1.6.2 Resultados del algoritmo genético
1.7 ¿Cómo conseguir resultados consistentes?
1.8 Convergencia del algoritmo
1.9 Exploración versus explotación en algoritmos genéticos
1.10 Código completo y lecciones aprendidas
1.11 Para seguir aprendiendo
2. El problema del viajero
2.1 Introducción al problema del viajero
2.2 Definición del problema y generación de la población inicial
2.2.1 Creación del problema y plantilla para el individuo
2.2.2 Crear individuos aleatorios y población inicial
2.3 Función objetivo y operadores genéticos
2.3.1 Función objetivo
2.3.2 Operadores genéticos
2.4 Selección del algoritmo genético
2.5 Últimos pasos
2.5.1 Configuración del algoritmo genético m + l
2.6 Comprobar la convergencia del algoritmo en problemas complejos
2.7 Ajuste de los hiperparámetros: Probabilidades de cruce y mutación
2.8 Acelerando la convergencia del algoritmo: El tamaño del torneo
2.9 Acelerando la convergencia del algoritmo: Aplicar elitismo
2.10 Complejidad del problema: P vs NP
2.11 Código completo y lecciones aprendidas
2.12 Para seguir aprendiendo
3. Algoritmos genéticos y benchmarking
3.1 Introducción a las funciones de benchmark
3.2 Aprendiendo a usar las funciones de benchmark: Formulación del problema
3.2.1 Función h1
3.2.2 Función Ackley
3.2.3 Función Schwefel
3.3 Definición del problema y generación de la población inicial
3.4 Función objetivo y operadores genéticos
3.4.1 Función objetivo
3.4.2 Operadores genéticos
3.5 Código completo
3.6 Evaluación de algunas funciones de benchmark
3.6.1 Función h1
3.6.2 Función Ackley
- 3.6.3 Función Schwefel
3.7 Ajuste de los hiperparámetros de los operadores genéticos
3.8 Lecciones aprendidas
3.9 Para seguir aprendiendo
4. Algoritmos genéticos con múltiples objetivos
4.1 Introducción a los problemas con múltiples objetivos
4.2 Introducción a la Pareto dominancia
4.3 Selección del algoritmo genético
4.4 El problema de la suma de subconjuntos con múltiples objetivos
4.4.1 Formulación del problema
4.4.2 Definición del problema y generación de la población inicial
4.4.3 Definición del problema y plantilla del individuo
4.4.4 Función objetivo y operadores genéticos
4.4.5 Últimos pasos: Ejecución del algoritmo multiobjetivo
4.4.6 Configuración del algoritmo genético multiobjetivo
4.4.7 Algunos apuntes sobre los algoritmos genéticos con múltiples objetivos
4.4.8 Código completo
4.5 Funciones de benchmark con múltiples objetivos
4.5.1 Definición del problema y población inicial
4.5.2 Función objetivo y operadores genéticos
4.5.3 Ejecución del algoritmo multiobjetivo
4.5.4 Representación del frente de Pareto
4.5.5 Ajuste de los hiperparámetros de los operadores genéticos
4.5.6 Código completo
4.6 Lecciones aprendidas
4.7 Para seguir aprendiendo
Parte 2: Algoritmos genéticos para ingeniería
5. Funcionamiento óptimo de una microrred
5.1 Introducción
5.2 Formulación del problema
5.2.1 Recursos renovables
5.2.2 Unidades despachables
5.2.3 Sistema de almacenamiento de energía
5.2.4 Balance de potencia
5.3 Problema con un objetivo: Minimizar el coste de operación
5.3.1 Definición del problema y generación de la población inicial
5.3.2 Operadores genéticos
5.3.3 Función objetivo
5.3.4 Ejecución del algoritmo
5.3.5 Resultados obtenidos
5.4 Problema con múltiples objetivos: Minimizando el coste de operación y el ciclado de la batería
5.4.1 Definición del problema, población inicial y operadores genéticos
5.4.2 Función objetivo
5.4.3 Ejecución del algoritmo
5.4.4 Resultados obtenidos
5.5 Código completo y lecciones aprendidas
5.6 Para seguir aprendiendo
6. Diseño de planta microhidráulica
6.1 Introducción
6.2 Formulación del problema
6.2.1 Modelado de la central micro-hidráulica
6.3 Problema con un objetivo: Minimizando el coste de instalación
6.3.1 Definición del problema y generación de la población inicial
6.3.2 Operadores genéticos
6.3.3 Función objetivo o de fitness
6.3.4 Ejecución del algoritmo
6.3.5 Resultados obtenidos
6.4 Problema con múltiples objetivos: Minimizando el coste de instalación y maximizando la potencia generada
6.4.1 Definición del problema, población inicial y operadores genéticos
6.4.2 Función objetivo o de fitness
6.4.3 Ejecución del algoritmo
6.4.4 Resultados obtenidos
6.5 Código completo y lecciones aprendidas
6.6 Para seguir aprendiendo
7. Posicionamiento de sensores
7.1 Introducción
7.2 Formulación del problema
7.3 Problema con un objetivo: Maximizando el número de puntos cubiertos
7.3.1 Definición del problema y generación de la población inicial
7.3.2 Operadores genéticos
7.3.3 Función objetivo
7.3.4 Ejecución del algoritmo
7.3.5 Resultados obtenidos
7.4 Problema con múltiples objetivos: Maximizando el número de puntos cubiertos y la redundancia
7.4.1 Definición del problema, población inicial y operadores genéticos
7.4.2 Función objetivo
7.4.3 Ejecución del algoritmo
7.4.4 Resultados obtenidos
7.5 Código completo y lecciones aprendidas
7.6 Para seguir aprendiendo
Epílogo
A. Herencia de arrays de numpy
A.1 Introducción a las secuencias en Python
A.2 Slicing en secuencias y operadores genéticos de deap
A.3 Operador de comparación en secuencias
B. Procesamiento paralelo
B.1 Procesamiento paralelo con el módulo multiprocessing
B.2 Procesamiento paralelo con el módulo Scoop
Glosario
Bibliografía