Cómo encontrar el algoritmo de última generación para un problema específico

¿Hay buenos métodos para hacer esto? Puedo encontrar documentos con algoritmos, pero generalmente no muestran sus resultados computacionales con los mismos conjuntos de problemas y el año de publicación de dos documentos suele ser diferente, por lo que lo más probable es que utilicen equipos diferentes para resolver los problemas.

Editar: por problema, me refiero también al tamaño específico del problema, el uso de memoria y otras características del problema.

¿Ha intentado hablar con un investigador principal o superior en el asesor de su institución?
El estado del arte puede no ser la mejor opción para su problema particular. Se requiere juicio de ingeniería.
Buscas en Stack Exchange.

Respuestas (2)

  1. Generalmente reviso artículos de revisión en el campo y trato de citarlos también si tienen alguna oración en el artículo "afirmando que el método anterior es SOTA" .
  2. También hay sitios de referencia.
  3. Los conjuntos de datos famosos incluso tienen sus puntos de referencia personales vinculados a sus sitios.
  4. Puede usar la puerta de investigación o cualquier otro foro y hacer una pregunta allí.
  5. Puede intentar una búsqueda de palabras clave en Google Scholar y ver si algún documento afirma hacerlo.

Con respecto a la diferencia en la configuración, generalmente los documentos SOTA "bien aclamados" no tienen estos problemas. Al menos eso es lo que he notado mayormente en mi campo.

Si ese es el caso, sugiero hacer un pequeño estudio dentro del documento que cubra todos los resultados en los diferentes entornos. (Por favor, corríjame si me equivoco aquí).

Creo que tienes un malentendido sobre la eficiencia del algoritmo y su estudio. Un buen curso de algoritmos y estructuras de datos debería corregir eso.

Asumiré aquí que en realidad te refieres a un algoritmo y no solo a un programa de computadora útil. No són la misma cosa. Algunos programas útiles, si bien pueden contener algoritmos, tienen su desempeño dominado por otras preocupaciones no algorítmicas. De hecho, el rendimiento allí podría estar vinculado a un tipo particular de conjunto de datos para el cual las pequeñas desviaciones dan como resultado un rendimiento muy diferente.

Los algoritmos se juzgan buenos o malos según las preocupaciones teóricas, no ejecutándolos en datos de muestra. Las medidas teóricas los hacen independientes del hardware dentro de ciertos límites. Un algoritmo rápido se ejecutará más rápido que un algoritmo lento en diferentes computadoras que tengan una arquitectura similar (consulte las advertencias a continuación). Algunos algoritmos (clasificación de burbujas) siempre son malos. Otros siempre son mejores (clasificación por selección). Aún otros son "siempre" buenos (clasificar por fusión, pero vea las advertencias).

Entonces, la idea de "equipo diferente" es una pista falsa, siempre que el equipo tenga una arquitectura similar.

Advertencias, y hay bastantes.

Algunos algoritmos requieren mucha memoria (clasificación rápida en un conjunto grande) porque son altamente recursivos. Si una máquina no tiene suficiente memoria rápida , la clasificación rápida de un gran conjunto de datos estará limitada por la eficiencia independiente del sistema de memoria.

Algunos algoritmos "lentos" funcionan bien en conjuntos de datos pequeños y pueden preferirse a los algoritmos "rápidos" si se espera que el conjunto de datos sea pequeño. Pero estas cosas son conocidas y normalmente se incorporan al software de trabajo. Por ejemplo, en la ordenación rápida una vez que una "división" da como resultado un segmento de tamaño 10 aproximadamente, un algoritmo cuadrático se hará cargo de completar la ordenación. Pero eso es solo un buen diseño de software, y utiliza resultados teóricos conocidos para las diversas opciones.

Sin embargo, si la arquitectura de una máquina cambia drásticamente (como una GPU difiere de una CPU), entonces el juego cambia y algunos algoritmos que son rápidos en uno serán más lentos en el otro. Por ejemplo, aún clasificando cosas, si una arquitectura hace comparaciones "libres", entonces se preferirá en esa arquitectura un algoritmo que use muchas comparaciones, en lugar de reordenamientos . Pero, nuevamente, esto se basa en las consideraciones teóricas que miden los diversos tipos de operaciones requeridas por un algoritmo.

Entonces, para responder a su pregunta, debe observar las medidas teóricas, y estas normalmente las proporcionan los autores.

Otra advertencia. Hay algunos problemas aplicados que están bastante mal estructurados y no han cedido (todavía) al análisis teórico asumido anteriormente. Tal vez un poco de caos está involucrado. Para estos, algunas medidas empíricas podrían ser necesarias en este momento. Pero algunos de esos tipos de problemas también pueden llevar a las personas a inventar nuevas arquitecturas que puedan manejar los problemas de manera eficiente. Pero, el mismo tipo de problema también lleva a los teóricos a inventar nuevos algoritmos que sean susceptibles de un análisis general de eficiencia. Pero, lo más probable es que los resultados se informen en términos teóricos, no en tiempos en hardware específico. Esto es probablemente lo que estás viendo. Y, con suerte, parte de su análisis incluye límites sobre cuándo se puede esperar que el algoritmo se comporte bien.

Supongo que esta respuesta se aplica a la comparación de un montón de tipos, pero buena suerte con su evaluación "teórica" ​​de cualquier enfoque de aprendizaje automático o estadístico.
@Libor, en realidad, cualquier algoritmo (siempre que sea un algoritmo) puede analizarse y predecirse su eficiencia. La aleatoriedad, por ejemplo, no es un obstáculo. Algunas cosas son más difíciles que otras, por supuesto. Pero la algoritmia no es un arte muerto.
Bueno, en teoría, dime qué diseño de codificador automático tiene el mejor rendimiento y te estaré esperando aquí.
@Libor, bien, haz eso.
@Libor Y, se han hecho algunas cosas que son de interés pero que no se ajustan a la definición de algoritmo. No los incluyo, ya que están fuera del alcance de la pregunta.
Creo que esta respuesta es simplemente incorrecta o está usando más la palabra "algoritmo" de manera diferente a lo que muchas personas están acostumbradas.
@ user2316602, vea la edición. El algoritmo tiene una definición formal en CS y matemáticas (y tenga en cuenta las etiquetas). Me refiero a ese significado, no a un sinónimo informal de "programa de computadora". El significado de las palabras importa, creo. Si desea una respuesta a una pregunta más amplia, plantéela.
Sí, ese es el enlace de wikipedia para el algoritmo. El punto es que muchos algoritmos no son claramente aptos para el análisis de eficiencia como lo ha descrito, y que la eficiencia y el rendimiento no son sinónimos sin importar cuántas veces los combine .
@Libor, ¿me pide que responda una pregunta diferente a la planteada por el OP? Si es así, indíquelo. Creo que hay muchas comparaciones de manzanas y naranjas aquí, o algoritmos y programas, al menos.
¡Gracias por tu respuesta detallada! Entiendo que hay diferentes connotaciones de la palabra "eficiente" dependiendo del problema al que me enfrente. No quería decir que solo hay un algoritmo eficiente para un tema específico. Mi pregunta era solo sobre encontrar el mejor algoritmo para un problema específico (que considera el uso de memoria, el tamaño del problema, etc.) en una gran cantidad de artículos académicos en Internet.
Creo que la confusión aquí es que la palabra "algoritmo" se usa de manera diferente en dominios separados. En Machine Learning, si bien las "arquitecturas" se acuñan como algoritmos en algunos casos, no están sujetas exactamente a las mismas reglas en cuanto a qué tan buffy como se mencionó que son. La forma en que buffy ha expresado la declaración es correcta en cuanto a cómo se supone que deben ser los algoritmos, pero incorrecta en cuanto a cómo se "perciben" los algoritmos en diferentes campos". * Las medidas teóricas no limitan los algoritmos en otros campos y creo que ese es el problema aquí. Y tampoco hay problemas de "generabilidad" en los estudios generales de algoritmos.
@Aymous, me doy cuenta de que las personas ajenas a CS y matemáticas pueden usar términos de manera informal. Pero también dependía de las etiquetas específicas de la pregunta. Y en Matemáticas y CS, algoritmo tiene un significado específico que se ha mantenido estable durante más de medio siglo. Una declaración sobre algoritmos puede no aplicarse a un no-algoritmo. Sospecho, ahora que el OP en realidad significaba algo más de lo que se dice literalmente. En parte, estaba tratando de impulsar la educación del OP que tiene algunas confusiones en alguna parte. Pero me preguntaron por qué los artículos de algoritmos tienen cierta estructura y escribí sobre eso. No sobre otras cosas.
@Aymous, y su respuesta, aunque creo que se trata más de "programas informáticos útiles" que de algoritmos (y está bien en ese contexto), puede ser más lo que le interesaba al OP aquí. Tal vez nos iluminen.
@Buffy En realidad quise decir que dentro de CS en sí mismo, ¡el término algoritmo se usa de manera diferente! Muchos lugares en CS, llaman "programas informáticos útiles" como "algoritmos". Creo que ahí es donde surgió la confusión. Estoy completamente de acuerdo con lo que ha dicho con respecto a los algoritmos, pero la palabra ha adquirido un significado diferente en algunos campos dentro de CS.
@Buffy Voté a favor de su respuesta y la considero muy útil. ¿Me recomienda cambiar el nombre de mi pregunta a "el programa de última generación"?
Creo que las personas que estudian "algoritmos y estructuras de datos" tienen una definición formal de un algoritmo que difiere de lo que usan otras personas, incluso dentro de TCS. Creo que, a menos que se indique específicamente, no se debe suponer que esta es la definición a la que se refieren OP y yo, por lo tanto, creo que la pregunta está bien. Tenga en cuenta que estoy diciendo esto como alguien que hace algoritmos específicamente, por lo que estoy acostumbrado al significado que usa Buffy.
Otra razón de la brecha entre la eficiencia teórica y la práctica es que los teóricos se preocupan principalmente por la complejidad del peor de los casos (y potencialmente por alguna noción abstracta de la complejidad del caso promedio). A menudo, estos casos no son del todo representativos para las aportaciones prácticas. Un caso destacado son los solucionadores de SAT, donde las mejores técnicas tienen una complejidad teórica peor que otras, pero son más rápidas en la resolución de instancias prácticas (millones de variables).