La selección de algoritmos (a veces también llamada selección de algoritmos por instancia o selección de algoritmos fuera de línea ) es una técnica metaalgoritmica para elegir un algoritmo de una cartera de algoritmos caso por caso. Está motivada por la observación de que en muchos problemas prácticos, diferentes algoritmos tienen diferentes características de rendimiento. Es decir, mientras que un algoritmo funciona bien en algunos escenarios, funciona mal en otros y viceversa para otro algoritmo. Si podemos identificar cuándo usar qué algoritmo, podemos optimizar para cada escenario y mejorar el rendimiento general. Esto es lo que pretende hacer la selección de algoritmos. El único requisito previo para aplicar técnicas de selección de algoritmos es que exista (o que se pueda construir) un conjunto de algoritmos complementarios.
Dada una cartera de algoritmos , un conjunto de instancias y una métrica de costos , el problema de selección de algoritmos consiste en encontrar una asignación de instancias a algoritmos tal que se optimice el costo en todas las instancias. [1] [2]
Una aplicación bien conocida de la selección de algoritmos es el problema de satisfacibilidad booleana . Aquí, la cartera de algoritmos es un conjunto de solucionadores SAT (complementarios) , las instancias son fórmulas booleanas, la métrica de costo es, por ejemplo, el tiempo de ejecución promedio o la cantidad de instancias sin resolver. Por lo tanto, el objetivo es seleccionar un solucionador SAT de buen rendimiento para cada instancia individual. De la misma manera, la selección de algoritmos se puede aplicar a muchos otros problemas difíciles (como la programación entera mixta , CSP , planificación de IA , TSP , MAXSAT , QBF y programación de conjuntos de respuestas ). Los sistemas ganadores de la competencia en SAT son SATzilla, [3] 3S [4] y CSHC [5].
En el aprendizaje automático , la selección de algoritmos se conoce mejor como metaaprendizaje . La cartera de algoritmos consta de algoritmos de aprendizaje automático (por ejemplo, Random Forest, SVM, DNN), las instancias son conjuntos de datos y la métrica de costo es, por ejemplo, la tasa de error. Por lo tanto, el objetivo es predecir qué algoritmo de aprendizaje automático tendrá un pequeño error en cada conjunto de datos.
El problema de selección de algoritmos se resuelve principalmente con técnicas de aprendizaje automático. Al representar las instancias del problema mediante características numéricas , la selección de algoritmos puede considerarse como un problema de clasificación de múltiples clases mediante el aprendizaje de una asignación para una instancia dada .
Las características de instancia son representaciones numéricas de instancias. Por ejemplo, podemos contar la cantidad de variables, cláusulas, longitud promedio de cláusula para fórmulas booleanas, [6] o la cantidad de muestras, características y equilibrio de clases para conjuntos de datos de ML para obtener una idea de sus características.
Distinguimos dos tipos de características:
Dependiendo de la métrica de rendimiento utilizada , el cálculo de características puede estar asociado con costos. Por ejemplo, si usamos el tiempo de ejecución como métrica de rendimiento, incluimos el tiempo para calcular nuestras características de instancia en el rendimiento de un sistema de selección de algoritmos. La resolución SAT es un ejemplo concreto, donde dichos costos de características no pueden descuidarse, ya que las características de instancia para fórmulas CNF pueden ser muy baratas (por ejemplo, para obtener el número de variables se puede hacer en tiempo constante para CNF en el formato DIMAC) o muy caras (por ejemplo, características de gráficos que pueden costar decenas o cientos de segundos).
En la práctica, es importante tener en cuenta los costes de cálculo de las características en estos escenarios; de lo contrario, se crea una impresión errónea del rendimiento del enfoque de selección de algoritmos. Por ejemplo, si la decisión sobre qué algoritmo elegir se puede tomar con perfecta precisión, pero las características son el tiempo de ejecución de los algoritmos de cartera, no hay ningún beneficio para el enfoque de cartera. Esto no sería obvio si se omitieran los costos de las características.
Uno de los primeros enfoques exitosos de selección de algoritmos predijo el rendimiento de cada algoritmo y seleccionó el algoritmo con el mejor rendimiento previsto para una instancia . [3]
Una suposición común es que el conjunto dado de instancias se puede agrupar en subconjuntos homogéneos y para cada uno de estos subconjuntos, existe un algoritmo de buen rendimiento para todas las instancias que lo componen. Por lo tanto, el entrenamiento consiste en identificar los clústeres homogéneos mediante un enfoque de agrupamiento no supervisado y asociar un algoritmo con cada clúster. Se asigna una nueva instancia a un clúster y se selecciona el algoritmo asociado. [7]
Un enfoque más moderno es la agrupación jerárquica sensible a los costos [5] que utiliza aprendizaje supervisado para identificar los subconjuntos de instancias homogéneas.
Un enfoque común para la clasificación de múltiples clases es aprender modelos por pares entre cada par de clases (aquí algoritmos) y elegir la clase que fue predicha con mayor frecuencia por los modelos por pares. Podemos ponderar las instancias del problema de predicción por pares por la diferencia de rendimiento entre los dos algoritmos. Esto está motivado por el hecho de que nos preocupamos más por obtener predicciones con grandes diferencias correctas, pero la penalización por una predicción incorrecta es pequeña si casi no hay diferencia de rendimiento. Por lo tanto, cada instancia para entrenar un modelo de clasificación vs está asociada con un costo . [8]
El problema de selección de algoritmos se puede aplicar eficazmente bajo los siguientes supuestos:
La selección de algoritmos no se limita a dominios únicos, sino que se puede aplicar a cualquier tipo de algoritmo si se cumplen los requisitos anteriores. Los dominios de aplicación incluyen:
Para obtener una lista extensa de literatura sobre la selección de algoritmos, consultamos una descripción general de la literatura.
La selección de algoritmos en línea se refiere a cambiar entre diferentes algoritmos durante el proceso de resolución. Esto es útil como una hiperheurística . Por el contrario, la selección de algoritmos fuera de línea selecciona un algoritmo para una instancia determinada solo una vez y antes del proceso de resolución.
Una extensión de la selección de algoritmos es el problema de programación de algoritmos por instancia, en el que no seleccionamos solo un solucionador, sino que seleccionamos un presupuesto de tiempo para cada algoritmo por instancia. Este enfoque mejora el rendimiento de los sistemas de selección, en particular si las características de la instancia no son muy informativas y es probable que se seleccione incorrectamente un único solucionador. [11]
Dada la creciente importancia del cálculo paralelo, una extensión de la selección de algoritmos para el cálculo paralelo es la selección de cartera paralela, en la que seleccionamos un subconjunto de los algoritmos para ejecutarlos simultáneamente en una cartera paralela. [12]