Des problèmes qui peuvent être résolus de manière contre-intuitive dans la pratique?

21

Récemment, j'ai vécu l' expérience douloureuse et amusante d'expliquer de manière informelle le concept de complexité informatique à un jeune programmeur autodidacte talentueux, qui n'avait jamais suivi de cours formel en algorithmes ou en complexité auparavant. Sans surprise, beaucoup de notions semblaient étranges au début mais avaient du sens avec certains exemples (PTIME, intractabilité, non calculabilité) , tandis que d'autres semblent venir plus naturellement (classification des problèmes via les réductions, temps et espace comme ressources, analyse asymptotique) . Tout allait bien jusqu'à ce que j'admette accidentellement que SATpeut être résolu efficacement * dans la pratique ... Et juste comme ça, je les ai perdus. Peu importait la façon convaincante dont j'essayais de plaider pour la théorie, le gamin était convaincu que ce n'était que des conneries artificielles dont il ne devrait pas se soucier. Bien...

¯ \ _ (ツ) _ / ¯

Non, je n'avais pas le cœur brisé, et je ne me souciais pas vraiment de ce qu'il pensait, ce n'est pas le but de cette question. Notre conversation m'a fait penser à une question différente,

Que sais-je vraiment des problèmes qui sont théoriquement insolubles (complexité temporelle superpolynomiale) mais pratiquement résolubles (via des heuristiques, des approximations, des solveurs SAT, etc.)?

J'ai réalisé, pas grand-chose. Je sais qu'il existe des solveurs SAT très efficaces qui résolvent efficacement d'énormes instances, que Simplex fonctionne très bien dans la pratique et peut-être quelques problèmes ou algorithmes supplémentaires. Pouvez-vous m'aider à brosser un tableau plus complet? Quels sont les problèmes connus ou même les classes de problèmes dans cette catégorie?

TL; DR: Quels sont les problèmes qui peuvent être résolus de manière contre-intuitive dans la pratique? Existe-t-il une ressource (mise à jour) pour en savoir plus? Avons-nous une caractérisation pour eux? Et, enfin, en tant que question de discussion générale, ne devrions-nous pas?

EDIT # 1: En essayant de répondre à ma dernière question de discussion sur une telle caractérisation , j'ai été initié à l' analyse lissée des algorithmes, un concept introduit par Daniel Spielman et Shang-Hua Teng dans [1] qui interpole en continu entre le pire des cas et analyses de cas moyen d'algorithmes. Ce n'est pas exactement la caractérisation discutée ci-dessus, mais elle capture le même concept, et je l'ai trouvé intéressant.

[1] Spielman, Daniel A. et Shang-Hua Teng. "Analyse lissée des algorithmes: pourquoi l'algorithme simplex prend généralement du temps polynomial." Journal de l'ACM (JACM) 51, no. 3 (2004): 385-463.

Konstantinos Koiliaris
la source
6
Que vouliez-vous dire en affirmant que la SAT peut être résolue efficacement dans la pratique? Pourquoi votre ami compte-t-il sur la sécurité sur Internet? Vraisemblablement, il n'y a pas de problèmes difficiles dans la pratique? La robustesse est l'un des principaux avantages de la poly-temps / solvabilité efficace.
Chandra Chekuri
6
L'isomorphisme des graphes est un candidat naturel.
DW
2
Hé, @ChandraChekuri, ce que je voulais dire, c'est que pratiquement les solveurs SAT peuvent répondre aux instances SAT avec des millions de variables et de clauses. Ou du moins, c'est ce que je pensais être le cas. Je ne suis pas sûr de comprendre ce que vous entendez par «sécurité sur Internet»? Je ne m'oppose pas au formalisme, je m'intéresse aux problèmes qui sont en théorie insolubles, mais à toutes fins pratiques (peut-être en raison d'une approximation décente, peut-être en raison de la structure spéciale des instances du monde réel, etc.) sont considérés " docile".
Konstantinos Koiliaris
1
@KonstantinosKoiliaris Je pense que le fait était que la sécurité de toutes sortes de protocoles cryptographiques repose sur (généralement même quelque chose de beaucoup plus fort), et en tant que tel fournit de nombreux exemples de problèmes de la pratique de routine qui sont extrêmement difficiles pour les solveurs SAT ( ou nous l’espérons de toute façon). PNP
Emil Jeřábek soutient Monica
2
Dans cet esprit, il pourrait être bon de vérifier la complexité générique. En fait, il s'avère que le problème d'arrêt est presque toujours résoluble en temps polynomial, comme l'est, par exemple, SAT (en fait, SAT a une garantie plus forte). Ce que l'on entend par «presque toujours» est que le problème admet un algorithme tel que la proportion d'entrées pour lesquelles l'algorithme s'arrête (et génère la bonne réponse, bien sûr) en temps polynomial passe à 1 lorsque la longueur de l'entrée augmente.
Guillermo Angeris

Réponses:

17
  • Les instances SAT hautement structurées (même sur des millions de variables) peuvent souvent être résolues en pratique. Cependant, des instances SAT aléatoires proches du seuil de satisfiabilité avec même quelques centaines de variables sont toujours ouvertes (ce qui signifie, même dans la pratique, si vous générez une telle chose, vous ne saurez peut-être jamais pendant la durée de vie de l'univers si la chose que vous avez générée est satisfaisable ou non. utilisant des solveurs SAT actuels). Vous pourriez être intéressé par cette question connexe et ses réponses.

  • Les trouveurs de cliques sont également étonnamment bons "en pratique"

  • La programmation entière et la programmation mixte linéaire-entier (avec quelques variables rationnelles et certaines variables entières) sont au centre de tous les départements de recherche opérationnelle, et peuvent souvent (mais pas toujours) être résolues dans la pratique

  • PSPACEPSPACE

  • EXPSPACE

  • Comme déjà souligné dans les commentaires de DW, l'isomorphisme graphique peut être résolu dans la pratique. Il est très difficile de créer des logiciels GI modernes tels que nauty, bliss, saucy, etc.

Joshua Grochow
la source
Merci Joshua, je vous le donne pour les problèmes les plus intéressants / généraux suggérés.
Konstantinos Koiliaris
1
Les trouveurs de cliques ne sont pas toujours bons en pratique. Cela dépend vraiment du graphique. Et votre lien semble ne parler que de graphiques aléatoires.
Peter Shor
Développer un peu la GI: AFAIK la plupart des solveurs de GI de pointe tels que ceux mentionnés utilisent une approche d'optimisation d'individualisation-raffinement (où le raffinement est le raffinement des couleurs, qui fonctionne déjà comme un test GI quasi-linéaire pour presque tous les graphiques) , mais Neuen et Schweitzer ont récemment montré des limites inférieures exponentielles pour cette méthode et construit (pratiquement) des instances dures.
Watercrystal
1
@JoshuaGrochow: Oui, je suis d'accord avec vous sur ce point. Je voulais juste développer la partie "contre-intuitive" de la question car OP a spécifiquement mentionné que Simplex fonctionne très bien dans la pratique, même si des limites inférieures exponentielles sont connues et que nous avons la même situation ici.
Watercrystal
1
J'ai juste de l'expérience avec la conjecture de Keller , où les graphes (certes grands) posaient de nombreux algorithmes de recherche de clique.
Peter Shor
14

Le système de type Hindley-Milner est utilisé dans les langages de programmation fonctionnels (Haskell, SML, OCaml). L'algorithme d'inférence de type est pratiquement linéaire dans la pratique et fonctionne incroyablement bien, mais il est connu pour être DEXPTIME complet!

Un commentaire général: il n'est pas surprenant que la complexité au pire moment ne soit pas nécessairement une très bonne mesure des performances pratiques d'un algorithme. Cependant, dire que l'écart entre la théorie et la pratique rend la théorie de la complexité inutile, c'est comme dire que les nombres naturels sont un gaspillage parce que nous n'utilisons qu'une infime quantité de tous les nombres disponibles. Un philosophe célèbre a dit un jour: "L'expérience sans théorie est aveugle, mais la théorie sans expérience n'est qu'un jeu intellectuel".

Andrej Bauer
la source
FPL
6

Plus d'exemples, principalement des langages de programmation:

  1. k-CFA (k-Control Flow Analysis) est complet en EXPTIME (Van Horn & Mairson 2008), mais les compilateurs d'optimisation de programme complet comme MLton le font quand même. Les temps de compilation sont longs, mais rarement désastreux.
  2. La résolution (dynamique) de la surcharge est généralement NP-complète (Palsberg 2012). Mais alors c'est rarement un problème dans le monde réel.
  3. k
  4. La résolution SMT est généralement NP-complète, mais les solveurs SMT commerciaux (comme Z3 et CVC4) sont généralement assez performants. Je ne travaille pas directement avec les solveurs SMT, mais j'ai utilisé indirectement Z3 de Liquid Haskell et Dafny, et les temps de vérification semblent OK.
  5. Le problème de décision pour l'arithmétique de Presburger est vraiment complexe (Fischer et Rabin 1974), mais l'algorithme de décision de Bill Pugh, le test Omega (Pugh 1991), fonctionne généralement dans un temps polynomial d'ordre faible.

Onn


Les références:

[1] David Van Horn et Harry G. Mairson. 2008. Décider que kCFA est terminé pour EXPTIME. Dans les Actes de la 13ème Conférence Internationale ACM SIGPLAN sur la Programmation Fonctionnelle (ICFP '08). ACM, New York, NY, USA, 275-282.

[2] http://web.cs.ucla.edu/~palsberg/paper/dedicated-to-kozen12.pdf

[3] MJ Fischer et MO Rabin. 1974. COMPLEXITÉ SUPER-EXPONENTIELLE du PRESBURGER ARITHMETIC. Rapport technique. Massachusetts Institute of Technology, Cambridge, MA, États-Unis.

[4] William Pugh. 1991. Le test Omega: un algorithme de programmation entier rapide et pratique pour l'analyse de dépendance. Dans les Actes de la Conférence ACM / IEEE de 1991 sur le Supercalcul (Supercomputing '91). ACM, New York, NY, USA, 4-13.

xrq
la source
1

la formation de réseaux de neurones à l'aide de méthodes de descente de gradient s'est également avérée être un problème très difficile à résoudre. https://www.cs.utexas.edu/~klivans/crypto-hs.pdf mais est généralement résoluble en pratique.

riemann77
la source