NP completo o problemas NP difíciles en la vida real

17

¿Alguien tiene ejemplos de la vida real en los que regularmente resuelven problemas NP completos o NP difíciles (por heurística, o persiguiendo una solución subóptima o lo que sea) en su trabajo? Sé que ocurren en la programación, la planificación, el diseño de VLSI, etc., pero estoy tratando de tener una idea de las principales industrias que emplean programadores o ingenieros hoy en día que regularmente hacen esto. Si uno desarrollara experiencia o una biblioteca, por ejemplo, optimización combinatoria, ¿dónde podría usar eso como parte de un trabajo de programación?

¿Alguna cuenta personal?

highBandWidth
fuente
¿Qué quieres decir con "regularmente"
Conrad Frix
@Conrad, bueno, supongo que es una idea subjetiva. Diría que puede haber más del 5-10% del esfuerzo enfocado en resolver problemas np-complete o np-hard.
highBandWidth
La programación de IA en los juegos tiene el potencial de ser NP completa, creo.
Michael K
Existen muchos problemas NP-hard (la programación y la planificación con recursos finitos suelen ser NP-hard). Sin embargo, la optimización combinatoria es el camino equivocado. Ser capaz de generar 100! combinaciones tan rápidas como sea posible es mucho menos útil que poder aplicar heurísticas específicas de dominio.
David Thornley
@David, no me refería a generar combinaciones por optimización combinatoria. Me refería a una clase de problemas, como k-SAT o el problema del vendedor ambulante, etc.
highBandWidth

Respuestas:

8

Algunas de las cosas en las que puedo pensar (la mayoría de ellas he estado involucrado más o menos):

  • Entornos de desarrollo para lenguajes y compiladores. Preguntas como: ¿esta gramática genera un lenguaje ambiguo? (¡Este problema es realmente indecidible!)
  • Recuperación de datos. Reensamblaje de paquetes de datos parcialmente perdidos o recuperación de archivos fragmentados. (Complejidad factorial)
  • Seguridad de software. Evaluación de todas las posibles rutas de ejecución a través de un software para determinar si se le puede atribuir algún comportamiento observado. (¿Problema de detención?)
  • Logística. Optimización del uso de transportes basados ​​en paquetes para transportar, su tamaño y hacia dónde deben ir. (Al menos exponencial)

Hay muchos ejemplos estándar, como encontrar la ruta más corta, la programación de enfermeras, etc., pero si te gusta la optimización combinatoria, ya sabes todo sobre ellos :)

Deckard
fuente
Entonces, ¿hay programadores empleados por compañías de logística que realmente se dedican a resolver estos problemas de optimización, o la mayoría de estas operaciones generalmente se resuelven una vez y solo se repiten para la mayoría de las compañías? +1 para varios ejemplos. ¿Estás / has estado involucrado en alguno de estos?
highBandWidth
Las dos primeras para las que he escrito herramientas, la tercera, es algo en lo que trabajan los colegas. Esperaría que las grandes empresas de logística investiguen activamente en esta área, ya que puede ahorrarles millones de dólares si logran un rendimiento adicional de un par por ciento a través de un nuevo algoritmo :)
Deckard
Me entrevisté para un papel de vendedor ambulante. La gran empresa matriz tenía una sala llena de doctores que trabajaban como esclavos con la esperanza de obtener unas décimas de un porcentaje de mejora en su ruta. Lo que valdría unos pocos millones de dólares para ellos ... cada día. Entonces esos lugares existen. El enrutamiento y la programación son los dos grandes: imagina que tienes 1000 personas y una fábrica que ejecuta dos o tres turnos. Ahora todo el mundo para programar el trabajo para el próximo mes de mantenimiento en cuenta estas reglas y 200 everyones preferencias ...
9

He utilizado recocido simulado con restricción de tiempo para resolver un problema similar a un vendedor ambulante en la fabricación de paneles táctiles. Cada milisegundo que pudiéramos eliminar del tiempo de ciclo del grabado láser de cada panel aumentaría el rendimiento, la utilización y, por lo tanto, la rentabilidad de la máquina, por lo que puse mucho esfuerzo en minimizar el tiempo muerto (rutas de no trazado) entre las rutas de trazado (que obviamente no se pudo optimizar).

Utilicé un algoritmo limitado en el tiempo para sortear la dureza NP del problema, ya que no podíamos correr el riesgo de que el cálculo de la optimización demorara más que el tiempo ahorrado por la ruta más óptima. Mientras la máquina movía el panel de la posición de carga a la posición donde la cabeza del láser estaba sobre la esquina más cercana, tuve tiempo de ejecutar algunas simulaciones. El algoritmo casi nunca se completó en unos pocos cientos de milisegundos del movimiento, pero casi siempre devolvió una mejor ruta de escritura que cualquiera de los modelos simples y no adaptativos que siempre habíamos usado antes (como las rutas en espiral o de serpiente).

Mark Booth
fuente
2
Eso es genial. Pero pensé que cada panel tendría el mismo patrón, y simplemente resolverías el problema una vez en lugar de una y otra vez para cada widget. ¿Por qué tuviste que resolverlo cada vez?
highBandWidth
2
El patrón ideal era el mismo para cada panel, pero la alineación mecánica del panel, la posición de las capas anteriores en el proceso y la naturaleza en mosaico del cabezal de trazado láser significaba que se tenía que calcular un conjunto dinámico de patrones secundarios para cada panel individualmente y luego cancelado. Fue un problema interesante para trabajar, especialmente dadas las limitaciones de tiempo.
Mark Booth
7

Estoy trabajando (en este momento, en realidad) en el problema bioinformático de la alineación de secuencias de ADN locales múltiples. El punto de esto es que si muchas secuencias de genes con alguna propiedad común (perfil de expresión similar o la misma unión del factor de transcripción en un experimento con chip ChIP) se alinean fuertemente en algún momento, entonces probablemente haya encontrado la razón de su común propiedad. Por otra parte, estoy más interesado en los aspectos estadísticos del problema. A pesar de que es NP-hard, no pierdes mucho al usar la heurística en la práctica. La parte interesante del problema, en mi humilde opinión, es un problema de relación señal / ruido.

dsimcha
fuente
1
¿Está utilizando enfoques combinatorios / ai clásicos o estadísticos? En cierto modo, todo el nlp moderno, la agrupación en clúster y el aprendizaje automático se ocupan de problemas np-complete, pero generalmente se atacan desde una perspectiva estadística. Sin embargo, es interesante y relevante. ¿Es esto en la academia o la industria?
highBandWidth
@highBandWidth: mi enfoque es estadístico. Estoy en la academia El punto central de la investigación que estoy haciendo es que si ignoras los problemas estadísticos y solo te enfocas en el problema combinatorio, suceden cosas malas.
dsimcha
3

Realmente no sé qué significa NP completo / difícil, pero creo que la planificación automática de suministros es algo así.

Tiene un plan de demanda de 90 días en adelante para 100 SKU de producto: ¡cerveza! Los 100 productos SKU provienen de:

  • hay de 10 a 15 tipos de materia prima cruda base de nivel 1, se elaboran en latas grandes de mil litros y lleva un día;
  • después de la preparación, se deben agregar algunos materiales (¿levadura?), y debe descansar durante 10-15 días, luego se obtienen 15-20 tipo de material de nivel 2;
  • Finalmente, cuando esté listo, se deben agregar algunos materiales, es el material de nivel 3, llamado cerveza potable, hay cc. 30 tipos de cervezas;
  • la cerveza se puede embotellar como 3 dl, 5 dl, a veces recibe un collar especial (nivel 4), luego se puede empacar como caja de 5x4, paquete de 6 (nivel 5).

Hay "líneas" de máquinas para cada operación: desde la preparación hasta el envasado. Las máquinas pueden realizar más operaciones, por ejemplo, algunas máquinas de embalaje pueden hacer paquetes de 6 y 3 paquetes, pero otros solo pueden hacer 6 paquetes. Hay restricciones, por ejemplo, la velocidad, o la gran tetera de elaboración es para preparar cerveza mín. 6000, máximo, 8000 l de cerveza, (pero si el tipo de cerveza es ligero, entonces el mínimo es de 5000 ly el máximo es de 7000 l). Y así sucesivamente, en todos los niveles.

La tarea: como mencioné, hay un plan de demanda, para el tipo 100 de nivel 5 (el material embotellado y empaquetado). Haga un plan de fabricación óptimo para los 5 niveles, todas las máquinas. Minimice los interruptores de la máquina (por ejemplo, embotellar .5, .5, .5, .3, .3, .3 es mejor que .3, .5, .3, .5, .3, .5, hay menos swithc, menos tiempo muerto para máquinas de embotellado). Priorización por cliente: algunos clientes requieren enviar la cerveza solo con más del 50% del tiempo de vencimiento restante. Etcétera etcétera.

Descubra los cuellos de botella (eh), haga planes alternativos agregando máquinas inexistentes a estos puntos, luego se puede usar el mejor escenario virtual para sugerir comprar nuevas máquinas.

¿Es lo suficientemente difícil o debería decirle cómo funciona una fábrica textil ?

(Comentario personal: la web, el banco y la logística son áreas desafiantes, pero son juguetes para bebés en comparación con los problemas de fabricación).

Descargo de responsabilidad: los números están distorsionados por razones de seguridad, el orden de magnitud es real.

ern0
fuente
¿Estás trabajando en algo como esto o en una herramienta para resolver cosas como esta para tu empleador?
highBandWidth
1
Bueno, la fabricación es logística en gran medida. Definitivamente más difícil que las finanzas en ese sentido. ¡Pero al menos trata problemas definidos, no ecuaciones aleatorias y órdenes de operación poco definidas!
Michael K
1
Cualquier tipo de algoritmo de programación con el mejor ajuste de recursos es probablemente equivalente al problema de la mochila , que es NP-complete.
Scott Whitlock
Un amigo mío ha creado un sistema DP / SP en Excel + VB hace años. No contiene planificación automática, la aplicación es demasiado gorda para Excel. Por lo tanto, acabamos de crear un marco de hoja de cálculo (yo) expandible y colaborativo basado en MySQL / PHP / AJAX (ver: flujo de datos, también conocido como programación basada en flujo), y adoptamos la lógica de biz de la versión XLS (amigo) . También hemos implementado la planificación automática (amigo). Fue una idea loca escribir una hoja de cálculo, pero funciona. La mejor parte: el cambio XLS-> SQL es algo maravilloso. Podemos hacer cualquier cosa con los datos (por ejemplo, autoplan), usando cualquier herramienta / plataforma (PHP, Java, lo que queramos).
ern0
@ ern0, NP-complete / NP-hard básicamente se refiere a la cantidad de atajos que puedes asumir que puedes tomar en lugar de probar todas las posibilidades una por una. Los teóricos dedican muchos esfuerzos a descubrir atajos que, por ejemplo, dicen que si sabemos que el camino ABC siempre será más largo que el AC directamente, podemos hacerlo más rápido y demostrar que está dentro del 50% del valor óptimo. Etc.