Meilleur livre sur la mise en œuvre de la méthode Simplex?


14

Je suis intéressé par l'implémentation de SM pour la tâche LP, mais j'ai entendu parler d'éventuels pièges: le livre de Cormen dit qu'il est possible d'avoir des données d'entrée qui feront que l'implémentation naïve se comportera en temps exponentiel. J'ai également entendu que l'implémentation naïve peut boucler pour une sorte de données.

Existe-t-il un livre / papier / source qui explique les nuances de la mise en œuvre pratique de SM?

Merci d'avance.


Réponses:


13

Je recommande fortement l'article de Bixby, le "père" de CPLEX, qui étudie non seulement les aspects de mise en œuvre de l'algorithme simplex (révisé): Robert E. Bixby , Solving Real-World Linear Programs: A Decade and More of Progress , Operations Research (50) 2002, 3-15 .


12

L'algorithme simplex n'est pas dans P. CLRS déclare donc que, même si en pratique il fonctionne "bien", il y a quelques entrées qui font fonctionner l'algorithme en temps exponentiel. Ceci est strictement lié à l'algorithme, pas à sa mise en œuvre: vous y serez confronté indépendamment de la façon dont vous implémentez l'algorithme. Cependant, LP est en P. Cela a été prouvé par Khachian en 1979, mais son algorithme ellipsoïde n'est pas pratique. Aujourd'hui, les méthodes des points intérieurs sont largement utilisées. Le premier a été découvert par Karmarkar en 1984.

Si vous êtes intéressé par les implémentations pratiques, jetez un œil à:

GUROBI, gratuit pour une utilisation académique, est actuellement le meilleur optimiseur disponible (versions parallèle séquentielle et à mémoire partagée):

http://www.gurobi.com

la bibliothèque GLPK:

http://www.gnu.org/software/glpk/

il s'agit d'un projet open source, fournissant des implémentations pour:

  • méthodes primitives et simplexes doubles
  • méthode primale-double point intérieur
  • méthode de ramification et de coupe
  • traducteur pour GNU MathProg
  • interface de programme d'application (API)
  • solveur LP / MIP autonome

12
En effet. Je recommande fortement de NE PAS essayer d'implémenter simplex par vous-même, à moins que ce ne soit le but de l'exercice. Si vous souhaitez simplement l'utiliser, les méthodes standard sont bien meilleures. De plus, CPLEX est gratuit pour une utilisation académique si cela vous convient.
Suresh Venkat

1
Existe-t-il des implémentations open source distribuées (comme MPI) de LP?
Tomek Tarczynski

3
@Tomek LP est P-complet et a peu de chances d'avoir une parallélisation efficace.
Marcus Ritt

@Tomek: Simphony fournit une version distribuée qui s'exécute actuellement dans n'importe quel environnement pris en charge par le protocole de transmission de messages PVM (MPI n'est pas encore pris en charge). Le même code source peut également être compilé pour les architectures à mémoire partagée à l'aide de n'importe quel compilateur compatible OpenMP. Voir branchandcut.org et le site Web COIN-OR fortement lié: coin-or.org
Massimo Cafaro

9
CPLEX est probablement la meilleure implémentation de LP actuellement disponible (c'est pourquoi les gens paient tellement pour cela), mais à peu près toutes les implémentations largement utilisées feront beaucoup mieux que tout ce que vous programmez vous-même. Cela inclut les packages Mathematical, Maple et MATLAB. Il existe de nombreuses implémentations, y compris quelques assez bonnes gratuites (QSopt, par exemple, qui est gratuite si vous ne prévoyez pas de l'utiliser à des fins commerciales), donc la programmation vous-même ne vaut que pour l'expérience d'apprentissage.
Peter Shor

9

Le livre de programmation linéaire de Vanderbei passe par de nombreux détails de bas niveau ... Mais comme les autres réponses / commentaires l'ont suggéré, l'implémentation du solveur LP est une tâche difficile et ingrate. Le solveur standard est probablement la voie à suivre ... (Il existe également des solveurs LP open source ...)


6

Ce ne sont pas seulement des implémentations naïves qui se comportent parfois en temps exponentiel. En fait, je pense que toutes les règles déterministes et randomisées connues ont des entrées super-polynomiales dans le pire des cas. La plupart des entrées connues qui produisent ce comportement du pire des cas sont hautement structurées, une question connexe:

La structure des instances pathologiques pour les algorithmes simplex

Cependant, dans la pratique, SM fonctionne bien. Cela a été officialisé par l'introduction d'une analyse lissée qui est fondamentalement l'analyse du pire des cas avec des entrées légèrement perturbées. Selon cette analyse, SM est un polytime, en d'autres termes, pour chaque entrée (même pathologique) il y a une légère perturbation qui permet à l'algorithme de bien fonctionner. Cette idée a été transformée en un algorithme randomisé qui fonctionne en polytime. Cependant, pour autant que je sache, il y a encore un débat sur la question de savoir si cet algorithme peut être qualifié de «vrai» algorithme simplex. Je ne sais pas non plus si les packages standard implémentent quelque chose dans le sens de cela, mais vous devriez pouvoir trouver une implémentation si vous recherchez autour, car le résultat a plus de 5 ans.


1

Vous pouvez vérifier Luenberger, Ye, Linear and Nonlinear Programming, 3rd ed. Cela semble assez complet, mais je ne suis pas encore allé assez loin pour dire si cela répond complètement à votre question.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.