Búsqueda Tabú
La búsqueda tabú la podemos importar:
1 | |
TabuSearch (clase búsqueda tabú)
- logger. Diccionario con información relacionada a la búsqueda con las siguientes llaves:
best_individual.Mejor individuo encontrado.best_f.El valor obtenido de la función objetivo deindividual.current_iter.Iteración actual de la búsqueda.total_iter.Número total de iteraciones.
- TL. Estructura de datos auxiliar que mantendrá memoria de las soluciones encontradas durante el tiempo especificado en
optimize, por defecto utilizaTabuList. - f. Función objetivo.
- Constraints. Lista de restricciones del problema. Las restricciones deben ser funciones que retornan True o False, indicando si cumple dicha restricción.
-
__init__. Constructor de la clase.
Argumentos:
function.Función objetivo.constraints.Lista con las restricciones del problema.TabuStruct.Estructura de datos que almacena información de variaciones que mejoran la solución.
Valor de retorno:
- Ninguno.
-
optimize. método principal, realiza la ejecución empleando la metaheurística llamada
TabuSearch.Argumentos:
Init.Solución inicial, se admite un arreglo de numpy o una función que retorne un arreglo de numpy.iterations.Número de iteraciones.memory_time.Tiempo que permanecerá una solución en nuestra estructura llamadaTabuList.**kwargs.Parámetros externos a la búsqueda.
Valor de retorno: - Ninguno
Funciones que se deben sobreescribir
-
get_neighbors. Función que genera el vecindario de soluciones de la solución \(x\).
Argumentos:
x.Arreglo de numpy representando a la solución actual.**kwargsParámetros externos a la búsqueda.
Valor de retorno:
- Arreglo bidimensional de numpy representando a todas las soluciones generadas desde la solución \(x\).
-
encode_change. Revisa nuestra solución actual \(x\) y la solución generada para indicar en dónde sucedió la pequeña variación.
Argumentos:
neighbor.Arreglo de numpy representando una variación de nuestra solución actual \(x\).x.Arreglo de numpy representando nuestra solución actual.**kwargs.Parámetros externos a la búsqueda.
Valor de retorno:
- Lista con dos elementos, donde, la primera componente será la posición \(i\) donde sucedió la variación y la segunda componente es el elemento en la componente \(i\) de
neighbor.
Lista Tabú
TabuList (clase lista tabú)
- _TB. Lista de listas que representarán las posiciones que fueron modificadas con un contador de tiempo.
- timer. El tiempo que durará cada solución en la lista.
-
push. Introduce los cambios que proporcionaron una mejora en la búsqueda.
Argumentos:
x.Arreglo con la siguiente información:- Primera componente: posición (indice) donde se encontró una mejora en la función objetivo.
- Segunda componente: valor por el cual mejoró nuestra solución.
- Tercera componente: iteración en la que se realizó la mejora.
Valor de retorno:
- Ninguno.
-
find. Revisa si la nueva solución sea una de las modificaciones hechas en iteraciones previas almacenadas en
_TB.Argumentos:
x.Arreglo de numpy que representa el cambio realizado en la solución actual de la búsqueda, es decir, recibe el arreglo que retorna la funciónencode_change(neighbor,x).
Valor de retorno:
- Valor booleano que indica si la modificación en dicha solución ya se encontraba en nuestra lista tabú.
-
reset. Borra toda la información almacenada en nuestro contenedor
_TBy actualiza la variabletimer.Argumentos:
timer.Número que representa el tiempo que durarán ahora las soluciones en nuestra lista tabú.
Valor de retorno:
- Ninguno.
-
update. Realiza la actualización en el contendor
_TBmodificando el tiempo de cada uno de los individuos almacenados y elimina aquellos individuos que ya expiró su tiempo.Argumentos:
- Ninguno.
Valor de retorno:
- Ninguno.
-
pop_back. Elimina el último elemento del contenedor
_TB.Argumentos:
- Ninguno.
Valor de retorno:
- Ninguno.
-
get_back. Regresa el último elemento del contenedor
_TB.Argumentos:
- Ninguno.
Valor de retorno:
- Elemento del contendor
_TB.
Ejemplo
Para emplear la búsqueda tabú se debe crear una clase nueva que herede todos los métodos de TabuSearch, por ejemplo:
1 2 3 4 5 6 7 8 9 10 | |