Solution efficace de programmes linéaires entiers mixtes

12

De nombreux problèmes importants peuvent être exprimés sous la forme d'un programme linéaire entier mixte . Malheureusement, le calcul de la solution optimale à cette classe de problèmes est NP-Complete. Heureusement, il existe des algorithmes d'approximation qui peuvent parfois fournir des solutions de qualité avec seulement des quantités modérées de calcul.

Comment dois-je analyser un programme linéaire entier mixte particulier pour voir s'il se prête à l'un de ces algorithmes d'approximation? Quels sont les traits ou qualités pertinents qu'un tel programme pourrait posséder?

Quels sont les algorithmes pertinents utilisés aujourd'hui et comment ces qualités correspondent-elles à ces algorithmes?

Quels logiciels dois-je rechercher pour l'expérimentation?

MRocklin
la source

Réponses:

15

Bien que la programmation linéaire à entiers mixtes (MILP) soit effectivement NP-complète, il existe des instances résolubles (non triviales) de programmation linéaire à entiers mixtes.

NP-complete signifie que la programmation linéaire en nombres entiers mixtes est:

a) solvable en temps polynomial avec une machine de Turing non déterministe (la partie NP)

b) temps polynomial réductible en 3-SAT (la partie complète; pour le reste de la discussion, cette partie n'a pas vraiment d'importance)

O(2n)n

Cette déclaration ne signifie pas que les «petites» instances sont insolubles. Malheureusement, je ne peux pas faire une déclaration précise de ce que signifie petit pour une instance MILP. Je résous des problèmes qui ont 3000 variables de décision binaires ou plus sur une base régulière. Selon la formulation du problème, les problèmes peuvent prendre moins de 0,01 seconde (ce qui est le cas pour les problèmes relativement sous-contraints) ou plus d'une heure (ce qui est le cas pour les problèmes où de nombreuses contraintes sont actives), car les problèmes semblent avoir une structure favorable. Je peux dire que les résolveurs de LP de pointe peuvent résoudre des LP avec plusieurs millions de variables de décision continues, et que sans structure spéciale, il est très peu probable qu'un cas de problème avec quelque part entre 1000 et 10,

Si vous pensez que vous avez une instance résoluble de MILP, vous voudrez utiliser un algorithme de branchement et de liaison ou de branchement et de coupure. Les meilleures implémentations sont CPLEX et Gurobi . Les deux sont des produits commerciaux qui ont une licence académique gratuite si vous creusez suffisamment. Si vous avez vraiment besoin d'un solveur open source, les projets de la communauté COIN-OR sont plus appropriés, bien que les packages source puissent parfois être difficiles. Les projets les plus pertinents seraient le solveur branch-and-cut CBC , le solveur SYMPHONIQUE , le solveur BCP branche à prix réduit , et le solveur ABACUS branche et coupe . Tous ces projets nécessiteront plusieurs packages de COIN-OR, en raison de sa structure modulaire.

Si vous souhaitez avoir la possibilité d'essayer plusieurs solveurs, le mieux est d'utiliser l' interface Open Solver de COIN-OR . Sachez que certaines parties de cette interface ne vous permettront de définir que les options de base du solveur et que pour définir les options avancées des solveurs, vous devriez consulter les listes de diffusion de COIN-OR pour plus de détails. Les solveurs MILP commerciaux sont BEAUCOUP (parfois un ordre de grandeur ou plus) plus rapides que les solveurs open source. Une autre option pour le prototypage est l'utilisation d'un langage de modélisation algébrique comme GAMS ou AMPL . Les deux logiciels sont commerciaux, mais ont des versions d'essai qui peuvent être utilisées sur de petites instances à problème. Pour les instances à problème plus important, vous pouvez soumettre des fichiers GAMS ou AMPL auServeur NEOS à résoudre; ce serveur est accessible au public.

Si vous avez une instance suffisamment grande de MILP, aucun de ces solveurs ne fonctionnera bien. Vous pouvez assouplir les variables entières en variables continues, résoudre le problème, puis arrondir à la collection de variables entières la plus proche qui est une solution réalisable de votre instance de problème. Une solution optimale de la relaxation LP de votre MILP vous donnera une limite inférieure sur la valeur de fonction objective optimale de votre MILP (en supposant une minimisation, bien sûr), et une solution réalisable de votre MILP vous donnera une limite supérieure sur l'objectif optimal fonction de votre MILP.

Si vous êtes vraiment chanceux et que votre matrice de contraintes est totalement unimodulaire , vous pouvez utiliser un solveur LP pour générer des solutions entières pour votre MILP, et vous pouvez résoudre votre problème efficacement malgré sa grande taille. D'autres classes de problèmes ont des algorithmes d'approximation rapide, tels que les problèmes de sac à dos et les problèmes de coupe . Des algorithmes de décomposition MILP spécialisés existent également pour les problèmes qui ont une structure spéciale, bien que je ne sois pas familier avec les détails, car ces sujets sont quelque peu spécialisés et sortent du cadre de ma thèse.

Je ne connais pas de schéma d'approximation du temps entièrement polynomial (FPTAS) spécifiquement pour MILP, bien qu'il existe un FPTAS d'une classe de problème qui inclut MILP (voir cet article). Ma recommandation serait d'utiliser l'un des solveurs de programmation linéaire à nombres mixtes ci-dessus en conjonction avec une limite de temps et des tolérances appropriées sur les écarts d'optimalité. Cela vous donnerait la meilleure solution possible possible à votre MILP dans le délai imparti, et si le solveur se termine avec succès avant la limite de temps, la solution réalisable serait optimale dans les tolérances d'écart d'optimalité que vous avez définies. Cette ligne de conduite vous donnerait toujours des limites sur la qualité de la solution, car votre solution réalisable serait une limite supérieure, et le solveur pourrait vous donner une limite inférieure appropriée. La limite ne serait pas garantie d'être dans une certaine solution optimale de facteur, mais là encore, tout FPTAS deviendra plus cher à mesure que l'approximation s'améliorera.

La chose la plus importante que vous puissiez faire avant de vous installer sur une formulation MILP est de choisir la formulation la plus forte que vous puissiez trouver; vous pouvez trouver des conseils sur la façon de choisir des formulations fortes dans Introduction to Linear Optimization de Bertsimas et Tsitsiklis. L'idée principale est de choisir une formulation dont les contraintes définissent un polytope le plus proche possible de la coque convexe de la formulation (voir également ces notes de cours ). Choisir une formulation forte peut faire une énorme différence dans le temps qu'il faut pour résoudre un problème.

Geoff Oxberry
la source
Quels sont les exemples du type de structure favorable auquel vous faites référence? Quelles questions dois-je poser à propos de mon programme?
MRocklin
Mis à part l'unimodularité, les problèmes de sac à dos et les problèmes de coupe, si votre problème est un programme stochastique à plusieurs étapes, il existe des stratégies de décomposition pour tirer parti de cette structure. Vous pouvez utiliser des méthodes telles que la décomposition (généralisée) de Benders, la décomposition de Dantzig-Wolfe et la décomposition en forme de L. Vous pouvez également tirer parti de la structure bloc-angulaire dans vos contraintes. La décomposition de Dantzig-Wolfe, la décomposition de Benders et la décomposition généralisée de Benders sont des méthodes que j'ai utilisées une ou deux fois dans le passé pour des problèmes de devoirs.
Geoff Oxberry
Il y a d'autres astuces et pièges que Geoff n'a pas mentionnés, mais il est difficile de trouver des conseils spécifiques sans voir le problème ou la classe exacte.
Aron Ahmadia
Le serveur NEOS est un excellent moyen de déterminer si même des serveurs commerciaux pourraient vous aider à résoudre un problème.
Ant6n