La programmation linéaire (LP) est en P et la programmation entière (IP) est NP-difficile. Mais comme les ordinateurs ne peuvent manipuler les nombres qu’avec une précision finie, un ordinateur utilise en pratique des entiers pour la programmation linéaire. Pour cette raison, LP et IP ne devraient-ils pas appartenir à la même classe de complexité?
complexity-theory
polynomial-time
Sasha le Noob
la source
la source
Réponses:
Je ne peux pas commenter car cela nécessite 50 répétitions, mais certaines idées fausses sont répandues, en particulier le commentaire de Raphaël "En général, un domaine continu signifie qu'il n'y a pas de force brute (et pas d'heuristique intelligente pour l'accélérer)".
C'est absolument faux. Le point clé est en effet la convexité. Sauf quelques qualifications techniques de contrainte, minimiser une fonction convexe (ou maximiser une fonction concave) sur un ensemble convexe est essentiellement trivial, au sens de convergence temporelle polynomiale.
En gros, on pourrait dire qu'il y a une correspondance entre la convexité d'un problème d'optimisation "mathématique" et la viabilité d'algorithmes gloutons dans l'optimisation "informatique". C'est en ce sens qu'ils activent tous les deux les méthodes de recherche locales. Vous n'aurez jamais à revenir en arrière dans un algorithme glouton et vous ne regretterez jamais le sens de la descente dans un problème d'optimisation convexe. Des améliorations locales de la fonction objectif vous rapprocheront TOUJOURS de l’optimum global.
Ce n'est pas le cas dans le cas non convexe. Ici, il peut y avoir un minimum global, mais plusieurs minimums locaux auxquels un algorithme de descente local sera toujours tracé, de la même manière que les algorithmes gloutons le font lorsqu'ils sont appliqués à des problèmes NP. Parfois, ils trouvent le vrai optimum, la plupart du temps non.
la source
La réponse courte: parce que vous pouvez utiliser Integers pour simuler des booléens pour SAT , mais lorsque vous ne vous limitez pas à cela, vous ne pouvez pas réellement simuler SAT. Vous obtiendrez une réponse réalisable, mais cela n'aura plus aucune signification en ce qui concerne l'instance SAT que vous essayez de simuler.
La réponse difficile à cette question est que nous ne savons pas qu'ils ne font pas partie de la même classe de complexité. Personne n'a la preuve que . Si nous comprenions les raisons profondes pour lesquelles les problèmes étaient si différents, il faudrait comprendre pourquoi les classes de complexité étaient différentes, ce que nous ne faisons pas.P≠NP
la source
La raison pour laquelle la programmation linéaire est «efficace» est que l’espace de la solution peut être représenté par un seul polyèdre convexe. Si l’on essaie de trouver le sommet "le plus élevé" de ce polyèdre (on peut appliquer une transformation linéaire à tout problème de programmation linéaire pour faire en sorte que "hauteur" corresponde à la quantité à maximiser), puis on peut parcourir les arêtes le point culminant sans jamais avoir à descendre "en descente". Ce qui rend la programmation d’entiers «difficile», c’est qu’il n’ya pas d’espace de solution continu, mais qu’il existe de nombreux espaces de solution disjoints et qu’aucun moyen de travailler progressivement vers la solution optimale.
la source
Les autres réponses sont correctes, mais je les trouve un peu techniques. Supposons que vous ayez balayé (éliminé) une matrice et que vous recherchiez une solution. La matrice ressemble à ceci:
En programmation linéaire, vous pouvez maintenant définir les colonnes non pivotantes (x5, x6) sur 0, x4 sur 0,5 et trouver une solution triviale. En programmation par nombres entiers, vous ne pouvez pas simplement définir les colonnes non pivot sur 0. La solution est plus difficile à trouver (NP-difficile). Notez également que les solutions sont en , donc cela n’est pas directement lié à la précision finie / infinie.Q
la source