Metaheuristicas Con Python Casos Practic
Metaheuristicas Con Python Casos Practic
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.
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.
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.
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
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
TABLA 1
Referencias terrestres de las ciudades
Ciudad (latitud, longitud) Ciudad (latitud, longitud)
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
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)
FIGURA 1
Resultado usando el Algoritmo de Computación Evolutiva.
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)
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
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.
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
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/