0% encontró este documento útil (0 votos)
45 vistas15 páginas

Metaheuristicas Con Python Casos Practic

Cargado por

Enrique Ramos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
45 vistas15 páginas

Metaheuristicas Con Python Casos Practic

Cargado por

Enrique Ramos
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Revista de Investigación ARTICULO ORIGINAL

Hatun Yachay Wasi 1(2), 43 - 57 (2022)


ISSN: 2955 - 8255 Recibido: Aceptado:
Setiembre 2022 Diciembre 2022

METAHEURÍSTICAS CON PYTHON: CASOS PRÁCTICOS.


METAHEURISTICS WITH PYTHON: PRACTICAL CASES.

Jesús Espínola Gonzales1 Ángel Cobo Ortega2 Rocío Rocha Blanco2

1Universidad Tecnológica de Los Andes, Perú.


2Universidad de Cantabria, España.

Correspondencia: Como citar este articulo: Espinola, J., Cobo, A., &
Jesús Espínola Gonzales Rocha, R. (2022). Metaheurísticas con Python: casos
[email protected] prácticos. Revista de Investigación Hatun Yachay Wasi,
1(2), 43 - 57. https://doi.org/10.57107/hyw.v1i2.23

RESUMEN
El presente estudio muestra la potencialidad de uso de las técnicas metaheurísticas,
para abordar problemas de toma de decisiones en contextos de gran complejidad y con
aplicabilidad a una gran variedad de campos. Se presentan casos prácticos en el campo
de la acuicultura y la gestión de granjas de cultivo de peces; así como, en la ingeniería
inversa. Estos casos abordan problemas de optimización de gran complejidad por el alto
número de variables y restricciones. Para resolver este tipo de problemas se presentan
algunos métodos metaheurísticos implementados en Python, como herramientas útiles
para conseguir soluciones satisfactorias. Las soluciones obtenidas han sido óptimas o cuasi-
óptimas conseguidas en tiempos aceptables.

Palabras clave: Metaheurísticas, Python, Optimización.

ABSTRACT
This study shows the potential use of metaheuristic techniques to address decision-making
problems in contexts of great complexity and with applicability to a wide variety of fields.
Practical cases are presented in the field of aquaculture and the management of fish farms;
as well as, in reverse engineering. These cases address highly complex optimization problems
due to the high number of variables and restrictions. To solve this type of problems, some
metaheuristic methods implemented in Python are presented as useful tools to achieve
satisfactory solutions. The solutions obtained have been optimal or quasi-optimal achieved
in acceptable times.

Keywords: Metaheuristics, Python, Optimization.

Hatun Yachay Wasi 1(2), 2022 ISSN: 2955 - 8255

Esta obra está publicada bajo la licencia CC BY 4.0


METAHEURÍSTICAS CON PYTHON Espínola et al.

INTRODUCCIÓN
El término heurística proviene del griego: εὑρίσκειν Estos métodos heurísticos también son buenos
heurískei, que podría traducirse como: ‘hallar’, sustitutos de otros procedimientos exactos como
‘inventar’. Según la Real Academia Española, Programación lineal, no lineal y dinámica (Bautista-
heurística es la “técnica de la indagación y del Valhondo, 2020). En particular se han desarrollado
descubrimiento” y que en algunas ciencias se puede métodos que combinan algoritmos heurísticos
definir como la “manera de buscar la solución de con otro tipo de técnicas de carácter estadístico,
un problema mediante métodos no rigurosos, basadas en los principios de la inteligencia artificial,
como por tanteo, reglas empíricas, etc”. De una o bio-inspiradas que buscan mejorar la efectividad
manera simple, se podría decir que una heurística y rendimiento de los algoritmos. Este tipo de
busca la obtención, de una manera eficiente, de técnicas constituyen lo que se viene denominando
buenas soluciones al problema abordado. Esa “metaheurísticas”, entre ellas se encuentran la
eficiencia se orienta hacia la consecución de los computación evolutiva, los algoritmos genéticos,
objetivos básicos en computación: la obtención las técnicas de optimización inspiradas en colectivos
de buenas soluciones, preferentemente óptimas, de seres vivos. Según (Vob et al., 1999), “un
y la reducción del esfuerzo y tiempo de cómputo. algoritmo metaheurístico es un proceso iterativo
Las heurísticas pueden renunciar al objetivo de que guía y modifica las operaciones de la heurística
optimalidad siempre que la solución alcanzada se subordinada para producir de manera efectiva
logre dentro de un espacio temporal razonable. soluciones de alta calidad.

La complejidad de la sociedad actual, caracterizada Puede manipular una sola solución en cada
por la cada vez mayor importancia de la toma de iteración o todo un conjunto de ellas; la heurística
decisiones basada en datos, el uso intensivo de subordinada puede ser un procedimiento de
las tecnologías de la información y la presencia de búsqueda local o un método constructivo”. Esta
múltiples criterios de decisión no ha hecho más que definición permite deducir la clasificación de las
poner de manifiesto la importancia de disponer metaheurísticas en base a diferentes criterios.
de metodologías que ayuden en los problemas Por un lado, nos encontramos con métodos
decisionales cada vez más complejos. constructivos, que buscan la construcción de la
solución añadiendo componentes paso a paso. Por
Esta complejidad de los problemas es lo que ejemplo, eso ocurre en las técnicas de optimización
provoca muchas veces la inexistencia o poca de colonias de hormigas (Ant Colony Optimization,
efectividad de algoritmos exactos de optimización, ACO).
como los basados en cálculo diferencial (Larson
& Bruce, 2012) o de aproximación numérica a la Pero, por otro lado, existen técnicas de búsqueda
solución exacta (Burden et al., 2017). Problemas de local que parten de soluciones que tratan de ir
optimización de gran tamaño, con cientos o incluso mejorando paso a paso. Un ejemplo de estas
miles de variables de decisión y restricciones, con últimas podría ser el templado simulado (Simulated
la presencia de funciones no lineales o incluso Annealing). Las metaheurísticas se clasifican
problemas de naturaleza combinatoria, han hecho también en métodos de trayectoria, que en cada
que en las últimas décadas se haya desarrollado una iteración manejan una única posible solución del
importante labor de investigación para el desarrollo problema, y metaheurísticas poblacionales que
de modernas técnicas heurísticas de resolución trabajan en todo momento con un conjunto de
de una enorme variedad de problemas prácticos. potenciales soluciones.

Hatun Yachay Wasi 1(2), 2022 ISSN: 2955 - 8255


44
METAHEURÍSTICAS CON PYTHON Espínola et al.

Independientemente del tipo de metaheurística, se esté programando. En este trabajo se ha usado


hay una serie de rasgos comunes que suelen Jupyter, el cual es un entorno integral y amigable;
caracterizar a todas ellas. En primer lugar, para pues permite escribir texto en formato Latex, código
evitar quedar atrapadas en óptimos locales, de programación Python (módulos) y mostrar los
suelen incorporar mecanismos de construcción resultados de la ejecución de los módulos, todo
aleatoria o incluso aceptar en determinadas esto integrado en el mismo cuaderno de trabajo
ocasiones empeoramientos locales en la búsqueda (notebook). Estos cuadernos interactivos permiten
de la solución. El hecho de que integren estos además la integración en un mismo elemento de
mecanismos aleatorios hace que estas técnicas no explicaciones, gráficos, elementos multimedia y,
suelan ser determinísticas, es decir, incluso con las por supuesto, código ejecutable.
mismas condiciones de partida no siempre generan
la misma solución. MATERIALES Y MÉTODOS
Como se ha indicado, bajo este concepto general de
Aunque las soluciones sean diferentes y no se tenga metaheurísticas tienen cabida una gran variedad de
garantía de su optimalidad, al menos las técnicas técnicas. Un buen punto de partida, para conocer
generan siempre soluciones eficientes, cercanas a las características de algunas de las principales
las óptimas. Otro de los rasgos comunes de estas técnicas metaheurísticas es el trabajo de (Blum
técnicas es el uso de estrategias de exploración del & Roli, 2003). A continuación, se presentan los
espacio de búsqueda de una manera eficiente y fundamentos básicos de algunas de ellas.
efectiva, buscando un balance entre exploración y
explotación. La exploración o diversificación busca Metaheurísticas de trayectoria
moverse por todo el espacio de búsqueda evitando Dentro de esta categoría, una de las primeras
que queden áreas sin explorar. La explotación o heurísticas fue la búsqueda Tabú, estrategia
intensificación, en cambio, trata de focalizar la propuesta por Glover en 1986 (Glover, F.;
búsqueda en zonas prometedoras, es decir, en Kochenberger, G.A. (eds), 2003) y que se basa en
zonas del espacio de búsqueda con soluciones de la concepción de una búsqueda inteligente como la
calidad. combinación de memoria y aprendizaje.

Siendo los metaheurísticos algoritmos no triviales, Este método de búsqueda prohíbe movimientos
habitualmente con conjuntos de soluciones hacia puntos ya visitados, al menos en las siguientes
factibles de gran talla, y con la necesidad de iteraciones, pudiendo incluso aceptar cambios
realizar un elevado número de operaciones, resulta que empeoren las soluciones para evitar caminos
imprescindible la programación de estos algoritmos ya explorados. Los movimientos previos quedan
en algún lenguaje de programación. Python es una registrados en una “memoria” y se almacenen
buena alternativa por varias razones, entre ellas el también una lista de direcciones de movimiento
carácter intuitivo para programar, es un software “tabú”, movimientos no permitidos.
libre, y existe una gran cantidad de librerías de libre
disponibilidad en la red; un buen número de estas Otra de las técnicas más populares dentro de esta
librerías incluyen métodos metaheurísticos. categoría es el templado simulado (simulated
anealing - SA), técnica propuesta por (Kirkpatrick
Juntamente con el lenguaje de programación, es y otros, 1983) que busca imitar el proceso para
importante tener un buen entorno (aplicación) que obtener estados de baja energía en un baño
permita compilar o interpretar el lenguaje con el que caliente. Cuando un sólido, por ejemplo un metal, se

Hatun Yachay Wasi 1(2), 2022 ISSN: 2955 - 8255


45
METAHEURÍSTICAS CON PYTHON Espínola et al.

calienta hasta un valor en el que el sólido se funde notablemente en los últimos años por su
y posteriormente se produce un enfriamiento lento adaptabilidad a procesos de gestión eficaz de datos
del sistema para que las partículas se organicen masivos, por su simplicidad y modularidad, además
en un estado de baja energías, se observan que, por responder a la filosofía de distribución en
especialmente a altas temperaturas, se producen abierto de los códigos fuente (open source).
cambios en la estructura que pueden provocar un
aumento en esa energía. A temperaturas más bajas, Desde el punto de vista de la computación científica,
la probabilidad de aumento de energía es menor. existen un buen número de librerías Python
de utilidad. Entre las básicas y más conocidas
Tomando esta inspiración, el SA es un procedimiento se podrían citar la librería numérica Numpy, la
iterativo en el que todo movimiento de mejora en librería Scipy, que implemente técnicas avanzadas,
la función objetivo es aceptado, pero también se o la librería Matplotlib con rutinas gráficas y de
permiten movimientos que empeoran el valor de visualización. Otro de los paquetes de gran utilidad
la función objetivo de acuerdo a una distribución en el campo de la ciencia de datos es la librería de
de probabilidad en función de un parámetro de machine learning scikit-learn.
control.
Algunas de estas librerías implementan técnicas
Metaheurísticas poblacionales metaheurísticas; por ejemplo, dentro de la librería
Dentro de las metaheurísticas que trabajan con Scipy el módulo de optimización (optimize)
poblaciones de soluciones una mención especial implementa diversas técnicas para la localización
debe hacerse a las que se engloban dentro del de máximos y mínimos de funciones. Incluye
término Swarm Intelligence o inteligencia de solvers para problemas lineales y no lineales,
enjambre. Se trata de un área de la inteligencia entre ellas algunas técnicas metaheurísticas.
artificial que se orienta hacía el diseño de sistemas Por ejemplo, hasta la versión 0.14 la técnica de
descentralizados y auto-organizados en los que simulated annealig se encontraba implementada
la inteligencia “emerge” de la interacción entre en la función scipy optimize anneal, a partir de esa
agentes simples que interactúan entre sí y con el versión se puede encontrar una generalización de la
entorno. Algunas de las técnicas de esta categoría misma en la función scipy.optimize.basinhopping().
toman su inspiración en la naturaleza o sistemas
biológicos como puedan ser comportamientos También es posible encontrar implementaciones
de colonias de hormigas, estrategias de caza de individuales de otras metaheurísticas. Por ejemplo,
depredadores, vuelos de insectos o aves,… Entre la implementación del algoritmo de colonias de
las metaheurísticas más conocidas se encuentran hormigas que se puede encontrar en: https://
los algoritmos genéticos (Holland, 1975), la github.com/johnberroa/Ant-Colony-Optimization
optimización de colonias de hormigas (Dorigo,
1992) o la optimización de enjambres de partículas Pero existen librerías de funciones Python
(Kennedy & Eberhart, 1995). especializadas en la implementación de
metaheurísticas. Una de las más conocidas
Metaheurísticas con Python es la librería Inspired (https://pythonhosted.
El lenguaje de programación Python es uno de org/inspyred/) (Garrot, 2019) especializada en
los instrumentos computacionales de mayor metaheurísticas bio-inspiradas. Las técnicas
potencialidad de uso en una enorme variedad estándar que se encuentran implementadas son:
de campos. Su popularidad ha aumentado

Hatun Yachay Wasi 1(2), 2022 ISSN: 2955 - 8255


46
METAHEURÍSTICAS CON PYTHON Espínola et al.

Genetic Algorithm efectividad de diferentes técnicas metaheurísticas.


Evolution Strategy Además, haciendo referencia a (Garfinkel, 1985),
Simulated Annealing este problema contiene los dos elementos que
Differential Evolution Algorithm hacen atractivo un problema a los matemáticos:
Estimation of Distribution Algorithm planteamiento sencillo y dificultad de resolución.
Pareto Archived Evolution Strategy (PAES)
Nondominated Sorting Genetic Algorithm (NSGA-II) Supongamos, por ejemplo, que hay 26 ciudades
Particle Swarm Optimization de las cuales se tienen como referencia su latitud y
Ant Colony Optimization longitud terrestre, y se trata de organizar un vuelo,
que empezando en la ciudad “A” se visiten todas
En su concepción, la librería se basa en el las ciudades y se vuelva a la ciudad inicial “A”, con
principio básico de separación entre lo que las condiciones que, excepto la ciudad inicial, cada
serían componentes específicas del problema a ciudad solo se visite una vez y que la distancia total
abordar y componentes específicas del algoritmo recorrida sea mínima.
a utilizar. Entre las componentes específicas que
el programador debe aportar se encuentran la Existen diferentes algoritmos metaheurísticos para
definición de cómo las soluciones son creadas abordar este problema, aquí se hará uso de dos
(generator) y cómo se mide el ajuste de cada metaheurísticas: Computación evolutiva y Colonia
solución (evaluator). de hormigas, ambas implementadas en la librería
Inspired. En la Tabla 1 se presenta las ciudades junto
Los elementos específicos del algoritmo serían con sus referencias geográficas (latitud, longitud).
un sistema de monitorización del estado de la
evolución (observer); el criterio de terminación
(terminator); un sistema de selección de individuos
“padres” para la construcción de soluciones
“hijas” (selector); proceso de construcción de esas
soluciones “hijas” (variator); determinación de
los individuos que sobreviven para una siguiente
generación (replacer); proceso que determina
cómo las soluciones son transferidas entre
diferentes poblaciones (migrator); y determinación
de cómo las soluciones son archivadas y guardadas
(archiver).

Seguidamente se presenta como ejemplo un


problema que se ha resuelto aplicando dos
metaheurísticas implementadas en la librería
Inspired. Se toma como referencia uno de los
problemas más conocidos de la optimización
combinatoria:

el problema del agente viajero, problema que suele


ser habitual utilizar como prueba para comprobar la

Hatun Yachay Wasi 1(2), 2022 ISSN: 2955 - 8255


47
METAHEURÍSTICAS CON PYTHON Espínola et al.

TABLA 1
Referencias terrestres de las ciudades
Ciudad (latitud, longitud) Ciudad (latitud, longitud)

A (1149.0, 1761.0) N (505.0, 710.0)


B (629.0, 1660.0) O (650.0, 920.0)
C (41.0, 2091.0) P (1380.0, 1200.0)
D (649.0, 1101.0) Q (199.0, 590.0)
E (749.0, 2031.0) R (365.0, 860.0)
F (1030.0, 2069.0) S (1030.0, 960.0)
G (1649.0, 651.0) T (580.0, 1390.0)
H (1488.0, 1625.0) U (835.0, 1785.0)
I (787.0, 2261.0) V (491.0, 514.0)
J (709.0, 1312.0) W (1890.0, 1220.0)
K (842.0, 551.0) X (1250.0, 1600.0)
L (1155.0, 2319.0) Y (1290.0, 795.0)
M (900.0, 1350.0) Z (495.0, 211.0)

Los datos de la Tabla 1 se han ingresado en el La solución obtenida con el siguiente algoritmo es
módulo de Python, donde ya se tenía incorporado el recorrido empezando en la ciudad A:
la librería Inspired; ejecutando dicho módulo se [A, F, L, I, C, E, U, B, T, D, N, O, K, Z, V, Q, R, J, M, S, Y,
han obtenido los siguientes resultados. G, W, P, H, X, A]
Esta ruta, cuya representación gráfica puede verse
Solución 1 – Usando el Algoritmo de Computación en la Figura 1, supone una distancia total recorrida:
Evolutiva. de 9891.
El problema se ha resuelto haciendo uso del
algoritmo de Computación Evolutiva, parte de la
librería Inspired, su código fuente está disponible en
https://pythonhosted.org/inspyred/ y se muestra a
continuación

Hatun Yachay Wasi 1(2), 2022 ISSN: 2955 - 8255


48
METAHEURÍSTICAS CON PYTHON Espínola et al.

from random import Random


from time import time
import math
import inspyred

def main(prng=None, display=False):


if prng is None:
prng = Random()
prng.seed(time())
points = [(1149.0, 1761.0), (629.0, 1660.0), (41.0, 2091.0), (649.0, 1101.0),
(749.0, 2031.0), (1030.0, 2069.0), (1649.0, 651.0), (1488.0, 1625.0),
(787.0, 2261.0), (709.0, 1312.0), (842.0, 551.0), (1155.0, 2319.0),
(900.0, 1350.0), (505.0, 710.0), (650.0, 920.0), (1380.0, 1200.0),
(199.0, 590.0), (365.0, 860.0), (1030.0, 960.0), (580.0, 1390.0),
(835.0, 1785.0), (491.0, 514.0), (1890.0, 1220.0), (1250.0, 1600.0),
(1290.0, 795.0), (495.0, 211.0)]

weights = [[0 for _ in range(len(points))] for _ in range(len(points))]


for i, p in enumerate(points):
for j, q in enumerate(points):
weights[i][j] = math.sqrt((p[0] - q[0])**2 + (p[1] - q[1])**2)

problem = inspyred.benchmarks.TSP(weights)
ea = inspyred.ec.EvolutionaryComputation(prng)
ea.selector = inspyred.ec.selectors.tournament_selection
ea.variator = [inspyred.ec.variators.partially_matched_crossover,
inspyred.ec.variators.inversion_mutation]
ea.replacer = inspyred.ec.replacers.generational_replacement
ea.terminator = inspyred.ec.terminators.generation_termination
final_pop = ea.evolve(generator=problem.generator,
evaluator=problem.evaluator,
bounder=problem.bounder,
maximize=problem.maximize,
pop_size=100,
max_generations=50,
tournament_size=5,
num_selected=100,
num_elites=1)

if display:
best = max(ea.population)
print(‘Mejor Solución: {0}: {1}’.format(str(best.candidate), 1/best.fitness))
return ea

if __name__ == ‘__main__’:
main(display=True)

Hatun Yachay Wasi 1(2), 2022 ISSN: 2955 - 8255


49
METAHEURÍSTICAS CON PYTHON Espínola et al.

FIGURA 1
Resultado usando el Algoritmo de Computación Evolutiva.

Solución 2 – Usando el Algoritmo de Colonia de De nuevo, dicho recorrido se muestra gráficamente


Hormigas. en la Figura 2, y la distancia total recorrida es de
10957
El problema también se ha resuelto haciendo uso
de otra metaheurística, el Algoritmo de Colonia Esta metaheurística también es parte de la librería
de Hormigas, la solución obtenida es el siguiente Inspired, el código fuente del módulo respectivo
recorrido empezando en la ciudad A: también está disponible en https://pythonhosted.
[A, W, H, L, F, I, U, E, B, C, T, J, M, D, O, N, V, Z, Q, R, org/inspyred/ y se reproduce a continuación.
K, S, Y, G, P, X, A]

Hatun Yachay Wasi 1(2), 2022 ISSN: 2955 - 8255


50
METAHEURÍSTICAS CON PYTHON Espínola et al.

from random import Random


from time import time
import math
import inspyred

def main(prng=None, display=False):


if prng is None:
prng = Random()
prng.seed(time())
points = [(1149.0, 1761.0), (629.0, 1660.0), (41.0, 2091.0), (649.0, 1101.0),
(749.0, 2031.0), (1030.0, 2069.0), (1649.0, 651.0), (1488.0, 1625.0),
(787.0, 2261.0), (709.0, 1312.0), (842.0, 551.0), (1155.0, 2319.0),
(900.0, 1350.0), (505.0, 710.0), (650.0, 920.0), (1380.0, 1200.0),
(199.0, 590.0), (365.0, 860.0), (1030.0, 960.0), (580.0, 1390.0),
(835.0, 1785.0), (491.0, 514.0), (1890.0, 1220.0), (1250.0, 1600.0),
(1290.0, 795.0), (495.0, 211.0)]
weights = [[0 for _ in range(len(points))] for _ in range(len(points))]
for i, p in enumerate(points):
for j, q in enumerate(points):
weights[i][j] = math.sqrt((p[0] - q[0])**2 + (p[1] - q[1])**2)

problem = inspyred.benchmarks.TSP(weights)
ac = inspyred.swarm.ACS(prng, problem.components)
ac.terminator = inspyred.ec.terminators.generation_termination
final_pop = ac.evolve(generator=problem.constructor,
evaluator=problem.evaluator,
bounder=problem.bounder,
maximize=problem.maximize,
pop_size=10,
max_generations=50)

if display:
best = max(ac.archive)
print(‘Best Solution:’)
for b in best.candidate:
print(points[b.element[0]])
print(points[best.candidate[-1].element[1]])
print(‘Distance: {0}’.format(1/best.fitness))
return ac

if __name__ == ‘__main__’:
main(display=True)

Hatun Yachay Wasi 1(2), 2022 ISSN: 2955 - 8255


51
METAHEURÍSTICAS CON PYTHON Espínola et al.

FIGURA 2
Resultado usando el Algoritmo de Colonia de Hormigas.

Comparando los resultados, se ve claramente que compensado con el tiempo de cálculo que es muy
la solución 1 es mejor aproximación que la segunda. pequeño comparado con el tiempo que se tardaría
No obstante, también es cierto que analizando las intentando hallar la solución óptima.
representaciones gráficas de las rutas obtenidas
en ambas soluciones se podrían realizar algunos En el ejemplo mostrado, usando dos metaheurísticas
pequeños cambios que mejorarían un poco la distintas se tienen dos soluciones diferentes. Pero,
calidad de la solución. también podrían obtenerse soluciones distintas
ejecutando el módulo con el mismo algoritmo
Sabido es que, en general, haciendo uso de metaheurístico, debido al carácter no determinista
las metaheurísticas no se tiene solución única, de ambas metaheurísticas.
ni necesariamente la mejor; sí que se tienen
buenas aproximaciones a la solución. Esto se ve Por lo que en el proceso de obtener una buena

Hatun Yachay Wasi 1(2), 2022 ISSN: 2955 - 8255


52
METAHEURÍSTICAS CON PYTHON Espínola et al.

aproximación se puede ejecutar el módulo repetidas podido comprobar cómo la combinación de piensos
veces y quedarse con la mejor aproximación en permite mejorar los resultados. A modo de ejemplo,
función del valor de la función objetivo, que para el la Figura 3 muestra la obtención de una planificación
ejemplo sería la menor distancia recorrida. óptima de la combinación de tres piensos diferentes
durante las 54 semanas de engorde de un lote de
RESULTADOS Y DISCUSIÓN doradas en una granja situada en el Mediterráneo.
Aplicaciones prácticas
Los campos de aplicación práctica de las En ese ejemplo, se disponía para el engorde de tres
metaheurísticas son amplísimos. Son especialmente piensos: uno de alta rentabilidad, buenas tasas de
apropiadas para abordar problemas de optimización engorde y relación calidad/precio, otro pienso con
de gran complejidad, por el número de variables mayores prestaciones y precio, orientado a periodos
y restricciones, o por la propia naturaleza de las de menor crecimiento (invierno) y, finalmente, un
funciones que intervienen. En esta sección se hace tercero adecuado para una producción orgánica/
referencia a algunos de los problemas prácticos en ecológica, con altas prestaciones y de mayor
los que los autores de este trabajo han participado calidad, pero también el más caro de los tres.
en su resolución exitosa mediante al uso de
metaheurísticas implementadas en Python.

En los casos presentados, se remite a las


correspondientes publicaciones de los autores
para obtener información más detallada sobre la
implementación y uso de las correspondientes
metaheurísticas. En todos los casos, se consiguieron
buenos resultados haciendo uso de metaheurísticas
poblacionales.

En el campo de la acuicultura y la gestión de granjas


de cultivo de peces, uno de los principales retos
de los productores es la adecuada planificación
de los procesos de cría y engorde de los peces.
Las decisiones que se debe tomar en ese contexto
son de enorme complejidad y se ven afectadas
por factores biológicos, técnicos, ambientales
y económicos. Uno de los problemas de mayor
impacto en la actividad de producción es la
adecuada elección de los piensos a aportar en las
distintas fases del engorde.

En su trabajo, (Luna et al., 2022) utilizan algoritmos


genéticos para determinar las secuencias de
piensos más apropiadas en función de las
condiciones ambientales de la granja y el tamaño
de los peces. Gracias al modelo desarrollado han

Hatun Yachay Wasi 1(2), 2022 ISSN: 2955 - 8255


53
METAHEURÍSTICAS CON PYTHON Espínola et al.

FIGURA 3
Planificación de la utilización de 3 piensos de engorde durante un periodo de 54 semanas.

Otro de los problemas que deben enfrentar los Gracias al uso de esta técnica se le pueden
productores es la adecuada planificación de los proporcionar al productor un conjunto de
procesos de siembra y despesque de los tanques. planificaciones cercanas al óptimo, definiendo cada
Es decir, cuál es el momento óptimo para llenar un planificación como una secuenciación de cosechas
tanque de alevines e iniciar el proceso de engorde, dentro del horizonte temporal preestablecido.
y en qué momento comercializar el pez adulto.
Es un problema de gran complejidad, ya que Por ejemplo, la Figura 4 muestra cómo gracias
deben tener en cuenta restricciones comerciales a la metaheurística se puede determinar cómo
(compromisos adquiridos con clientes), técnicas en una mejor localización, en este caso las islas
(capacidades de los tanques) y ambientales. (Luna Canarias, es posible incluso planificar una cosecha
et al., 2020) han utilizado para este propósito una más y aumentar el rendimiento económico de la
metaheurística población como es el PSO (Particle explotación.
Swarm Optimization).

FIGURA 4
Comparativa de la planificación de cosechas en dos localizaciones diferentes

Hatun Yachay Wasi 1(2), 2022 ISSN: 2955 - 8255


54
METAHEURÍSTICAS CON PYTHON Espínola et al.

Estos problemas en el campo de la acuicultura corresponda) que se ajuste a dichos puntos. De


se han abordado de manera exitosa con Python nuevo, este es un problema de gran complejidad,
gracias a las posibilidades de implementación de por el gran número de variables que se generan,
metaheurísticas, conectividad a bases de datos para pues las variables a determinar son los valores
recuperar la información necesaria para definir un apropiados para los parámetros “t” o “(u,v)” y los
modelo de crecimiento, y la gestión eficaz de todos puntos de control respectivos.
los datos necesarios (características de los piensos,
precios de insumos, precios de venta, condiciones A modo de ejemplo, las Figuras 5 y 6 muestran
ambientales de la explotación, temperaturas, …) los ajustes realizados de sendas nubes de
puntos, utilizando algoritmos genéticos para
Un tercer problema que se presenta en este optimizar la determinación de la parametrización
trabajo es en el campo del diseño y fabricación correspondiente, tanto de curvas como de
de automóviles y fuselaje de aviones; en el que superficies. En ambos casos las soluciones obtenidas
también los autores han participado (Gálvez et al., son de calidad.
2007). Es un problema de ingeniería inversa.
Para el caso de una curva, se han seleccionado ocho
En este campo es frecuente representar puntos para ser ajustados mediante una curva de
matemáticamente las curvas y superficies mediante Bézier de grado 4 con cinco puntos de control. Esto
curvas y superficies de Bézier. La curva tiene la genera 15 variables: ocho valores para “t” asociados
siguiente representación con los ocho puntos 3D dados y 15 variables que
son las coordenadas de los puntos de control (cinco
puntos de control).
M
C ( t ) = ∑Pj B j ( t )
j =0
Haciendo uso de algoritmos genéticos se tuvo el
Donde t E [0,1] , Pj son los puntos de control y Bj las vector paramétrico óptimo [0.0,0.0131,0.0583,0.
funciones de base, de grado “d”, que se calculan como : 3556,0.5384,0.7138,0.7899,1.0]. En la Figura 5 se
d 
Bid ( t )   t i (1 − t )
=
d −i
muestra los puntos dados (esferas en color azul), la
i
curva de Bézier de ajuste (en color rojo) y los puntos
de control (estrellas en color gris).
Mientras que las superficies de Bézier tienen la
representación FIGURA 5
N M
Curva de Bézier de ajuste de puntos 3D.
S ( u , v ) = ∑∑Pij Bi ( u ) B j ( v )
=i 0=j 0

Donde u , v∈[ 0,1] , Pij son los puntos de control, Bi y


Bj las funciones de base, que se calculan como en la
representación de las curvas de Bézier.

En cada caso, el problema consiste en: partiendo de


un conjunto de puntos 3D, que se obtienen a partir
de mediciones sobre piezas prototipos, determinar
la representación de curva o superficie (según

Hatun Yachay Wasi 1(2), 2022 ISSN: 2955 - 8255


55
METAHEURÍSTICAS CON PYTHON Espínola et al.

Para el caso de una superficie, se han seleccionado – Se muestran aplicaciones a la planificación de


256 puntos para ser ajustados mediante una la producción acuícola y procesos de ingeniería
superficie de Bézier bicúbica, es decir grado 3 en inversa orientados a la reconstrucción de curvas
el parámetro u y grado 3 en el parámetro v, con 16 y superficies.
puntos de control. Para cada uno de los parámetros
u y v se ha fijado que tomen dos grupos de valores – Los resultados obtenidos en los casos prácticos
equidistantes en los intervalos [0,0.2] y [0.8,1]. presentados son soluciones óptimas o cuasi-
Así el número de variables es: 48 coeficientes óptimas conseguidas en tiempos aceptables y
escalares (que corresponden a las coordenadas de que ilustran a la perfección la principal utilidad
los 16 puntos de control 3D), más los 32 escalares, de estas técnicas: obtención de soluciones
que corresponden a los valores paramétricos razonables y eficientes de una manera rápida y
parámetros u y v (16 para cada uno). En total se simple, sin necesidad de grandes requerimientos
tienen 80 variables. De nuevo, haciendo uso de sobre la naturaleza de las funciones que
algoritmos genéticos se tuvo el resultado que se intervienen en el problema.
muestra en la Figura 6.
– El lenguaje de programación Python
FIGURA 6 permite la implementación de metodologías
Superficie de Bézier de ajuste de puntos 3D de optimización caracterizadas por su
adaptabilidad, flexibilidad y efectividad, como
son las metaheurísticas. Además, la concepción
de este lenguaje de programación como una
tecnología de código abierto hace que existan un
gran número de librerías y módulos que pueden
ser reutilizados, minimizando el esfuerzo de
programación necesario para la aplicación
práctica de estas técnicas de optimización

– El hecho que las metaheurísticas presenten


diferentes soluciones cuasi-óptimas puede ser
beneficioso para el tomador de decisiones,
al conjugar estas opciones con otras
consideraciones que intervengan en la toma de
tales decisiones.

– Las metaheurísticas poblacionales como los


algoritmos genéticos o las técnicas PSO aportan
al decisor todo un conjunto de posibles buenas
CONCLUSIONES
soluciones, de entre las cuáles se deberá elegir
– Se mostró la potencialidad de uso de las técnicas
una para su aplicación práctica. Disponer de
metaheurísticas, para abordar problemas de
diferentes alternativas de calidad es sin lugar a
gran complejidad y en una gran variedad de
duda una ventaja desde el punto de vista de la
campos. En particular, en campos vinculados
decisión final.
con gestión de la producción e ingeniería.

Hatun Yachay Wasi 1(2), 2022 ISSN: 2955 - 8255


56
METAHEURÍSTICAS CON PYTHON Espínola et al.

REFERENCIAS BIBLIOGRÁFICAS
Bautista-Valhondo, J. (2020). Metaheurísticas en Michigan Press.
ingeniería. Madrid: Dextra Editorial S.L.
Kennedy, J., & Eberhart, R. (1995). Particle swarm
Blum, C., & Roli, A. (2003). Metaheuristics in optimization. Proceedings of ICNN’95 -
Combinatorial Optimization: Overview and International Conference on Neural Networks,
Conceptual Comparison. ACM Computing 4, págs. 1942-1948.
Surveys, 35, 268-308.
Kirkpatrick, S., Gelatt, C., & Vecchi, M. (1983).
Burden, R., Douglas, J., & Burden, A. (2017). Análisis Optimization by Simulated Annealing. Science,
numérico. Cengage. 220(4598), 671-680.

Dorigo, M. (1992). Optimization, Learning and Larson, R., & Bruce, H. (2012). Multivariable
Natural Algorithms [in Italian]. PhD thesis, calculus. Cengage.
Dipartimento di Elettronica, Politecnico di
Milano. Luna, M., Llorente, I., & Cobo, A. (2020). Aquaculture
production optimisation in multi-cage farms
Espinola, J. (2021). Apoyo al aprendizaje autónomo subject to commercial and operational
de la derivada y sus aplicaciones en bachillerato constraints. Biosystems Engineering, 196, 29-
mediante laboratorios virtuales con Python. 45.
Trabajo Fin de Máster: Máster Univesitario
en Formación del Profesorado de Educación Luna, M., Llorente, I., & Cobo, A. (2022).
Secundaria obligatoria y Bachillerato, Determination of feeding strategies in
Formación Profesional y Enseñanzas de aquaculture farms using a multiple-criteria
Idiomas (Matemáticas). UNED. Madrid. approach and genetic algorithms. Annals of
Operations Research, Springer, 314(2), 551-
Gálvez, A., Iglesias, A., Cobo, Á., Puig-Pey, J., & 576.
Espinola, J. (2007). Bezier Curve and Surface
Fitting of 3D Point Clouds Through Genetic Talbi, E.-G. (2009). Metaheuristics. JOHN WILEY &
Algorithms, Functional Networks and Least- SONS INC.
Square Approximation. Lecture Notes in
Computer Science, 4706, 680-693. Vob, S.; Martello, S.; Osman, I.H.; Roucairol, C. (eds).
(1999). Meta-Heuristics: Trends in Local Search
Garrot, A. (2019). Inspyred: Bio-inspired algorithms paradigms for Optimization. Kluwer Academic
in Python. Recuperado el 30 de noviembre de Publishers.
2022, de https://pythonhosted.org/inspyred/

Glover, F.; Kochenberger, G.A. (eds). (2003).


Handbook of Metaheuristics. Kluwer’s
International Series.

Holland, J. (1975). Adaptation in Natural and


Artificial Systems. Ann Arbor: University of

Hatun Yachay Wasi 1(2), 2022 ISSN: 2955 - 8255


57

También podría gustarte