Le célèbre article de 1983 de H. Lenstra Integer Programming With A Fixed Number Of Variables indique que les programmes entiers avec un nombre fixe de variables peuvent être résolus dans le polynôme temporel dans la longueur des données.
J'interprète cela comme suit.
- La programmation entière en général est toujours NP-complète mais si ma taille de problème typique à portée de main (disons environ 10.000 variables, un nombre arbitraire de contraintes) est faisable dans la pratique, alors je pourrais construire un algorithme qui évolue polynomialement dans le nombre de contraintes mais pas dans le nombre de variables et de contraintes.
- Le résultat est également applicable à la programmation binaire car je peux forcer n'importe quel entier à 0-1 en ajoutant une contrainte appropriée.
Mon interprétation est-elle correcte?
Ce résultat a-t-il des implications pratiques? Autrement dit, y a-t-il une implémentation disponible ou est-elle utilisée dans des solveurs populaires comme CPLEX, Gurobi ou Mosek?
Quelques citations du journal:
Cette longueur peut, pour notre propos, être définie comme n · m · log (a + 2), où a désigne le maximum des valeurs absolues des coefficients de A et b. En effet, un tel algorithme polynomial est peu susceptible d'exister, car le problème en question est NP-complet
[...]
On a supposé [5], [10] que pour toute valeur fixe de n, il existe un algorithme polynomial pour la solution du problème de programmation linéaire entier. Dans le présent article, nous prouvons cette conjecture en présentant un tel algorithme. Le degré du polynôme par lequel le temps d'exécution de notre algorithme peut être borné est une fonction exponentielle de n.
la source
Réponses:
Ainsi, le problème est linéaire à paramètre fixe paramétré par le nombre de variables.
1) Oui, la programmation linéaire entière est "toujours" NP-complète. Le temps d'exécution du résultat théorique ci-dessus ne dépend que linéairement du nombre de contraintes, il évolue donc bien dans le nombre de contraintes. Cependant, je ne connais aucune implémentation réelle de cet algorithme.
2) Oui, faire en sorte que les variables prennent des valeurs binaires est simple comme vous l'avez observé.
la source
Voici quelques points concernant les implications pratiques des résultats de type Lenstra, et les implémentations possibles dans CPLEX, Gurobi, etc. c'est-à-dire des hyperplans le long desquels la largeur du polytope n'est pas trop grande (polynôme en variables et taille des données). Mais Mahajan et Ralphs (pré-impression ici ) ont montré que le problème de la sélection d' une disjonction optimale est NP-complet. Il semblerait donc difficile de créer des implémentations pratiquement efficaces de cette classe d'algos.
La plupart des algos implémentés dans des packages tels que CPLEX pourraient être classés comme des méthodes de branchement et de découpe. Cette famille de techniques fonctionne généralement bien sur les instances IP qui sont réalisables et sont souvent en mesure de trouver des solutions quasi optimales. Mais les algos de type Lenstra se concentrent sur les instances IP les plus défavorables qui sont irréalisables au départ, et l'objectif est de prouver leur infaisabilité entière (et ils étudient la complexité de cette tâche). AFAIK, il n'y a pas de classe de problèmes avec une pertinence pratique qui correspondent à cette description. Ainsi, les gens de CPLEX / Gurobi n'implémenteraient probablement pas de sitôt des algos de type Lenstra.
la source