Optimisation en informatique

Ce document traite de l'optimisation en informatique, plus précisément de la programmation linéaire en nombres entiers (PLNE). Il s'adresse aux étudiants et chercheurs en optimisation et informatique, souhaitant comprendre les principes, modèles et méthodes de résolution des problèmes d'optimisation combinatoire avec contraintes d'intégralité.

D'après le document Optimisation en informatique

Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Optimisation en informatique

Document source

Optimisation en informatique

Programmation Linéaire, Mathématiques · PDF · 54 pages

Afficher l'aperçu du document

Consulter le document original →

Ce document traite de l'optimisation en informatique, plus précisément de la programmation linéaire en nombres entiers (PLNE). Il s'adresse aux étudiants et chercheurs en optimisation et informatique, souhaitant comprendre les principes, modèles et méthodes de résolution des problèmes d'optimisation combinatoire avec contraintes d'intégralité.

Programmation Linéaire en Nombres Entiers (PLNE)

La programmation linéaire en nombres entiers est une forme de programmation linéaire dans laquelle certaines variables doivent prendre des valeurs entières. On distingue :

  • La programmation pure en nombres entiers : toutes les variables sont entières.
  • La programmation mixte en nombres entiers : un sous-ensemble des variables est entier.
  • La programmation 0-1 ou binaire : les variables entières ne peuvent prendre que les valeurs 0 ou 1.

Exemple simple de PLNE

Maximiser :

  x1 + 64.0 x2

Sous contraintes :

  50 + x31 ≤ 250
  2 4 − ≥ x1 − 3
  x1, x2 ≥ 0 et entiers

Le point optimal continu est (1.95, 4.92) avec un objectif de 5.0628, tandis que le point optimal entier est (5, 0) avec un objectif de 5.

Différences entre PL et PLNE

La programmation linéaire (PL) et la programmation linéaire en nombres entiers (PLNE) sont très différentes :

  • La PL est une optimisation continue convexe.
  • La PLNE est une optimisation discrète.

Ce cours abordera l'utilité de la PLNE et les méthodes de résolution des PLNE.

Application : Choix d’usines et d’entrepôts

Objectif : choisir les emplacements pour construire des usines et entrepôts dans deux villes, Lyon et Toulouse.

  • On ne peut construire plus d’un entrepôt.
  • Un entrepôt ne peut être construit que dans une ville où une usine est aussi construite.
  • Les coefficients de rentabilité et coûts de construction sont connus pour chaque ville et type d'installation.
  • Le coût total de construction ne doit pas dépasser 10.
  • On cherche à maximiser la rentabilité.

Données

RentabilitéCoût
Usine à Lyon96
Usine à Toulouse53
Entrepôt à Lyon65
Entrepôt à Toulouse42

Modèle mathématique

Variables de décision :

  • x1 = 1 si une usine est construite à Lyon, 0 sinon
  • x2 = 1 si une usine est construite à Toulouse, 0 sinon
  • y1 = 1 si un entrepôt est construit à Lyon, 0 sinon
  • y2 = 1 si un entrepôt est construit à Toulouse, 0 sinon

Contraintes :

  • On ne peut construire plus d’un entrepôt : y1 + y2 ≤ 1
  • Un entrepôt ne peut être construit que si une usine est présente : y1 ≤ x1, y2 ≤ x2
  • Coût total ≤ 10 : 6x1 + 3x2 + 5y1 + 2y2 ≤ 10

Objectif :

max 9x1 + 5x2 + 6y1 + 4y2

Mise sous forme standard

min Z = -9x1 - 5x2 - 6y1 - 4y2
s.c.
  y1 + y2 ≤ 1
  y1 ≤ x1
  y2 ≤ x2
  6x1 + 3x2 + 5y1 + 2y2 ≤ 10
  x1, x2, y1, y2 ∈ {0,1}

Exemple de résolution avec Mosel et Xpress-MP

model ExempleBase

uses "mmxprs"                ! utilise le solveur Xpress-Optimizer
declarations
  x1, x2, y1, y2 : mpvar              ! variables
end-declarations

! fonction objectif
Z:=  (-9)*x1 -5*x2 -6*y1 -4*y2        

! contraintes
y1 + y2 <= 1
y1 <= x1
y2 <= x2
6*x1 + 3*x2 + 5*y1 + 2*y2 <= 10

! variables binaires
x1 is_binary
x2 is_binary
y1 is_binary
y2 is_binary

! résolution
minimize (Z)

writeln("Solution: ", getobjval) ! affichage valeur Z
writeln("valeur de x1 : ", getsol(x1))
writeln("valeur de x2 : ", getsol(x2))
writeln("valeur de y1 : ", getsol(y1))
writeln("valeur de y2 : ", getsol(y2))

end-model

Solution obtenue :

  • Valeur optimale Z = -14
  • x1 = 1, x2 = 1, y1 = 0, y2 = 0

Résolution des PLNE

On distingue deux cas :

  • Problèmes purement binaires (PL01)
  • Cas général des PLNE

1ère idée : Énumération

Pour n variables binaires, il existe 2^n solutions possibles. Par exemple :

  • Pour n=20, plus d’un million de cas
  • Pour n=30, plus d’un milliard de cas

L'énumération complète est donc impraticable en optimisation discrète.

2ème idée : Relaxation continue

On « oublie » la contrainte d’intégralité et on résout le problème en variables continues. Cela donne un programme linéaire classique, résoluble par exemple par la méthode du simplexe.

Exemple sur le modèle de base :

  • Solution relaxation continue : (x1, x2, y1, y2) = (5/6, 1, 0, 1)
  • Valeur optimale relaxation : Z = -16.5

Interprétation :

  • Pour un problème de minimisation, la valeur optimale en entier est toujours supérieure ou égale à la valeur optimale en continu.
  • La valeur optimale de la relaxation continue est donc une borne inférieure de la valeur optimale entière.

Connaissance d’une solution admissible

Si l’on connaît une solution admissible (entière) de valeur Z', alors la valeur optimale entière est comprise entre la valeur optimale de la relaxation continue et Z'.

Exemple :

  • Solution admissible : (1, 0, 0, 0) avec Z = -9
  • Valeur optimale relaxation continue : -16.5
  • Donc valeur optimale entière ∈ [-16.5, -9]

Algorithme Branch-and-Bound (B&B)

Le B&B est une méthode efficace pour résoudre les PLNE. Elle combine :

  • Un encadrement de la valeur optimale (bornes inférieure et supérieure)
  • Une énumération limitée visant à affiner cet encadrement

Principe du B&B sur l'exemple de base

La solution de la relaxation continue n’est pas entière (x1=5/6). On « branche » sur x1 en deux cas :

  • x1 = 0
  • x1 = 1

Chaque cas définit un sous-ensemble de solutions entières à explorer.

Exploration des sous-ensembles

  • S1 (x1=0) : relaxation continue donne solution entière (x2=1, y1=0, y2=1) avec Z=-9.
  • S2 (x1=1) : relaxation continue donne solution fractionnaire (x2=4/5, y1=0, y2=4/5) avec Z=-16.2.

On peut élaguer S1 car la solution entière est connue et meilleure que la borne inférieure. Pour S2, on continue à brancher, par exemple sur x2 :

  • S3 (x1=1, x2=0) : relaxation continue Z=-13.8
  • S4 (x1=1, x2=1) : relaxation continue Z=-16

On poursuit avec S4, en branchant sur y1 :

  • S5 (x1=1, x2=1, y1=0) : relaxation continue Z=-16
  • S6 (x1=1, x2=1, y1=1) : solution impossible, élaguée

Ensuite, on branche sur y2 dans S5 :

  • S7 (x1=1, x2=1, y1=0, y2=0) : solution entière unique Z=-14 (meilleure solution courante)
  • S8 (x1=1, x2=1, y1=0, y2=1) : impossible, élaguée

Les autres noeuds sont élagués car leurs bornes inférieures sont supérieures à la meilleure solution courante.

Conclusion sur l'exemple

La solution optimale est trouvée avec Z = -14, après avoir exploré un nombre limité de noeuds, bien inférieur à l'énumération complète.

Résumé de l’algorithme Branch-and-Bound (minimisation)

  1. Initialiser une solution admissible Z* ou poser Z* = +∞.
  2. Résoudre la relaxation continue, mettre à jour Z* si meilleure solution.
  3. Appliquer les tests d’élagage :
    • Élaguer un noeud si la relaxation continue n’a pas de solution.
    • Élaguer un noeud si la valeur optimale de la relaxation continue ≥ Z*.
  4. Tant qu’il reste des noeuds non élagués :
    • Choisir un noeud non élagué.
    • Brancher sur une variable fractionnaire.
    • Résoudre la relaxation continue pour chaque branche, mettre à jour Z*.
    • Appliquer les tests d’élagage.
  5. Fin : la solution courante Z* est optimale.

Cas général des variables entières

Pour des variables entières non binaires, on choisit une variable fractionnaire x5 = 132.48 par exemple, et on crée deux branches :

  • x5 ≤ 132
  • x5 ≥ 133

Problèmes et efficacité

Le principal défi est la recherche de solutions admissibles, ce qui est un problème NP-complet en général. Il n’existe pas de méthode rapide générale. Souvent, on se contente des solutions trouvées lors de la résolution des relaxations continues. Des heuristiques comme l’arrondi peuvent être utilisées dans certains cas.

Le temps de calcul dépend du nombre de noeuds explorés, chaque noeud nécessitant la résolution d’un programme linéaire continu.

En général, la résolution d’un programme linéaire continu est rapide, mais la résolution d’un PLNE peut être longue.

Exemple d'efficacité

Problème avec n=1000 variables binaires générées aléatoirement :

  • Relaxation continue résolue en 0.03 secondes
  • Résolution entière en 43 secondes, explorant 251 402 noeuds

Glossaire des termes clés

  • Programmation linéaire en nombres entiers (PLNE) : optimisation linéaire avec contraintes d’intégralité sur certaines variables.
  • Programmation 0-1 (binaire) : PLNE où les variables entières ne prennent que les valeurs 0 ou 1.
  • Relaxation continue : version du problème où la contrainte d’intégralité est ignorée, permettant aux variables d’être continues.
  • Borne inférieure : pour un problème de minimisation, la valeur optimale de la relaxation continue qui est inférieure ou égale à la valeur optimale entière.
  • Borne supérieure : pour un problème de maximisation, la valeur optimale de la relaxation continue qui est supérieure ou égale à la valeur optimale entière.
  • Solution admissible : solution respectant toutes les contraintes, notamment d’intégralité.
  • Branch-and-Bound (B&B) : algorithme combinant énumération partielle et bornes pour résoudre efficacement les PLNE.
  • Élagage : élimination de sous-ensembles de solutions ne pouvant pas contenir la solution optimale.
  • NP-complet : classe de problèmes pour lesquels il n’existe pas de méthode connue efficace en temps polynomial.

Points clés à retenir

  • La PLNE impose des contraintes d’intégralité sur certaines variables, rendant le problème beaucoup plus complexe que la PL classique.
  • La relaxation continue fournit une borne utile pour encadrer la valeur optimale entière.
  • L’énumération complète des solutions binaires est impraticable pour un grand nombre de variables.
  • L’algorithme Branch-and-Bound permet de résoudre les PLNE en explorant un nombre limité de solutions grâce à des bornes et à l’élagage.
  • La recherche de solutions admissibles est un défi majeur, souvent abordé via des heuristiques ou solutions issues des relaxations.
  • Le temps de calcul dépend fortement du nombre de noeuds explorés, chaque noeud nécessitant la résolution d’un programme linéaire continu.

Partager

Commentaires

Aucun commentaire pour le moment. Posez la première question.

Les commentaires sont relus avant publication. Votre e-mail n'est jamais affiché.

← Toutes les révisions