• Aucun résultat trouvé

Programmation lin´eaire et en nombres entiers

En g´en´eral, un probl`eme d’optimisation est caract´eris´e par un ensemble de solutionsS, et par une

fonction coˆutf (appel´ee aussi fonction objectif). La fonction f affecte `a chaque solution s ∈ S la va-

leurf (s). L’ensemble S est g´en´eralement d´efini par un syst`eme d’´equations ou d’in´equations appel´ees

“contraintes”. Ces contraintes traduisent l’autorisation ou l’interdiction d’une combinaison de valeurs. R´esoudre un tel probl`eme consiste `a chercher le minimums∗de la fonction coˆutf sur l’ensemble S :

(P )    f (s∗) = minf (s) s.t. s ∈ S

Une telle solutions∗s’appelle une solution optimale, ou un optimum global. La d´efinition concerne la minimisation, mais il suffit de remarquer que maximiserf ´equivaut `a minimiser −f .

Si l’ensembleS est formul´e comme un ensemble de variables `a valeurs dans l’ensemble des r´eels IR et contraintes `a satisfaire des in´egalit´es lin´eaires et si f est une fonction lin´eaire en ces variables, on

parle alors d’un probl`eme de programmation lin´eaire (PL).

La programmation lin´eaire est un outil tr`es puissant de la recherche op´erationnelle qui permet de r´esoudre un grand nombre de probl`emes lin´eaires. On distingue dans la programmation lin´eaire, la programmation lin´eaire en nombres r´eels, pour laquelle les variables des ´equations sont dansIR et la

programmation en nombres entiers (PLNE), pour laquelle les variables sont dansIN. Bien entendu, il

2.2. PROGRAMMATION LINEAIRE ET EN NOMBRES ENTIERS´ 43

d’un probl`eme avec des variables enti`eres est nettement plus compliqu´ee qu’un probl`eme en nombres r´eels.

Des r´esultats d’alg`ebre lin´eaire ont montr´e qu’un programme lin´eaire a une interpr´etation g´eom´etrique simple. L’ensembleS des solutions r´ealisables est par d´efinition un poly`edre (un polytope si S est born´e)

de l’espace euclidienIRn. SiS est non vide, le probl`eme (PL) poss`ede une solution. On dit alors que

PL est r´ealisable. Dans ce cas toute solution optimale de (PL) se trouve n´ecessairement `a un sommet du polytope.

La m´ethode de r´esolution du Simplexe repose sur cette observation. L’algorithme du Simplexe construit tout d’abord une solution r´ealisable qui est un sommet du polytope des solutions admissibles puis se d´eplace selon les arˆetes du polytope pour atteindre des sommets pour lesquels la valeur de l’ob- jectif est de plus en plus petite, jusqu’`a atteindre l’optimum. En th´eorie, la m´ethode du Simplexe a une complexit´e non polynomiale et est donc suppos´ee peu efficace. Cependant, dans la pratique, les algo- rithmes de Simplexe sont `a ce jour encore les plus utilis´es. Ces derniers sont g´en´eralement impl´ement´es dans les logiciels de r´esolution lin´eaire.

Cependant l’algorithme du Simplexe ne peut s’appliquer qu’aux probl`emes en variables continues ou `a des probl`emes en variables enti`eres ayant une matrice de contraintes T unimodulaire (car dans ce cas, tous les sommets de l’ensemble de recherche sont entiers) comme les probl`emes de transport ou d’affectation. Pour les PLNE il existe plusieurs m´ethodes de r´esolution exacte telles que :

– les m´ethodes de recherches arborescentes, – la programmation dynamique,

– les m´ethodes de plan de coupe (cutting plane) consistant `a ajouter progressivement des contraintes suppl´ementaires.

2.2.1 M´ethodes de recherches arborescentes

Le principe de ces m´ethodes consiste `a repr´esenter l’ensemble (fini) des solutions du programme lin´eaire en nombres entiers `a r´esoudre par une arborescence et `a parcourir cette arborescence pour chercher la/les meilleure(s) solution(s). L’algorithme de S´eparation & Evaluation, plus connu sous son appellation anglaise Branch & Bound (BB, ou B&B), est la technique la plus connue et la plus utilis´ee de cette famille de m´ethodes de r´esolution. Cette m´ethode est une mise en application du principe latin “Diviser pour R´egner”

Le principe de l’algorithme B&B consiste `a ne parcourir que les sous-ensemble de solutions r´ealisables du probl`eme dont on a r´eussi `a montrer qu’ils contiennent (au moins) une solution optimale. Il s’agit de s´eparer (branch) les solutions du probl`emes en plusieurs ensembles de solutions et d’utiliser une ´evaluation partielle pour ´eliminer des solutions grˆace `a des bornes sur les valeurs possibles des solu- tions (bound). Grˆace `a cette ´etape d’´elimination on empˆeche l’algorithme d’´enum´erer explicitement toutes les solutions.

Il y a donc trois ingr´edients principaux qui caract´erisent une proc´edure de B&B : (1) l’ordre de s´election des nœuds, (2) la fac¸on de s´eparer l’espace ou sch´ema de branchement et (3) la m´ethode d’´evaluation des nœuds pour tenter d’identifier ceux ne contenant pas de solution optimale.

1. Ordre de s´election : il existe trois strat´egies usuellement mises en œuvre : – Profondeur d’abord,

– Largeur d’abord,

– Meilleur d’abord : le parcours d´epend de l’estimation des nœuds restant `a visiter. Selon cette estimation, on choisira d’examiner en premier un nœud susceptible de contenir une solution optimale, ou menant rapidement `a une meilleure solution r´ealisable.

2. Sch´emas de branchement : il s’agit de s´eparer l’espace de recherche en plusieurs partie. Dans la pratique, ces espaces sont le plus souvent disjoints.

3. Evaluations : Un nœud de l’arbre n’est explor´e que s’il conduit `a une solution strictement meilleure que la meilleure solution connue. A chaque nœud, on ´evalue la meilleure solution contenue dans le sous-espace E associ´e `a ce nœud. Puisque ce PLNE est g´en´eralement aussi dur que le programme original, on se contente d’encadrer sa valeur optimalezE par une borne

inf´erieurLBE. On poseU B la valeur de la meilleure solution r´ealisable connue. Si LBE ≥ U B

alorsE ne contient pas de solution strictement am´eliorante et il n’est pas n´ecessaire d’explorer

plus en avant le sous-arbre de solutions issues de ce nœud.

Illustrons le fonctionnement du B&B sur un exemple classique du monde des r´eseaux. Consid´erons un r´eseau reliant un certain nombre de nœuds, et supposons que l’on cherche `a utiliser le plus court chemin pour router le trafic d’un nœudi vers un nœud j. Un nœud de l’arbre de recherche sera ici un

chemin dans le r´eseau, dont une extr´emit´e serai. On saura que l’on a atteint une feuille de l’arbre (une

solution potentielle) lorsque l’autre extr´emit´e du chemin seraj. La racine de l’arbre est un chemin de

longueur nulle, ne contenant quei. Les nœuds fils sont simplement les chemins obtenus en consid´erant

les nœuds voisins du dernier nœud atteint, comme illustr´e sur la figure 2.1. On choisit comme fonction de coˆut la distance parcourue.

Supposons qu’en explorant l’arbre en profondeur, on ait trouv´e le chemin 1, d´ecrit en figure 2.1. Cette solution est m´emoris´ee, puis on remonte dans l’arbre d’´etats en revenant au nœud pr´ec´edent j

dans ce chemin, avant d’essayer un autre nœud fils, comme illustr´e sur la figure 2.2. Le nouveau che- min test´e, qui se termine par le nœudk, est plus long que la solution d´ej`a trouv´ee. Ce n’est donc pas la

peine de continuer `a chercher `a joindrej en consid´erant les nœuds voisins de k, et on arrˆete l’explora-

tion de cette branche de l’arbre de solutions.

2.2.2 La Programmation dynamique

Quelquefois, en essayant de r´esoudre un probl`eme de grande taille par l’approche arborescente, on s’aperc¸oit que la d´ecomposition g´en`ere plusieurs sous probl`emes identiques et qu’on est conduit `a cal-

2.2. PROGRAMMATION LINEAIRE ET EN NOMBRES ENTIERS´ 45

i

j c h e m i n 1

FIG. 2.1 – Premier chemin trouv´e avec une recherche en profondeur.

i

j c h e m i n 2

culer de nombreuses fois la solution de mˆemes sous probl`emes.

Le principe de base de la programmation dynamique est d’´eviter de calculer deux fois la mˆeme chose, normalement en utilisant une table de r´esultats d´ej`a calcul´es, remplie au fur et `a mesure qu’on r´esout les sous probl`emes. L’efficacit´e de cette m´ethode d’optimisation repose sur le principe d’optima- lit´e de Bellman : “Toute politique optimale est compos´ee de sous-politiques optimales”.

En effet, la programmation dynamique s’appuie sur une relation entre la solution optimale du probl`eme et celles d’un nombre fini de sous-probl`emes. Concr`etement, cela signifie que l’on va pouvoir d´eduire la solution optimale d’un probl`eme de taillen `a partir de solutions optimales de sous-probl`emes

de taille inf´erieure `an.

Le probl`eme du plus court chemin qu’on a introduit dans la section pr´ec´edente peut se r´esoudre avec la technique de programmation dynamique. La longueur d’un chemin est la somme des poids des arcs de ce chemin. Consid´erons un plus court chemin entrei et j et k 6= i, j un sommet interm´ediaire

sur ce chemin. Les sous-chemins de ce chemin, dei `a k et de k `a j sont aussi de coˆut minimal (sinon,

en remplac¸ant un de ces sous-chemins par un chemin de moindre distance de mˆemes extr´emit´es, on di- minuerait la distance du chemin dei `a j, ce qui est impossible). Ce probl`eme satisfait donc au principe

d’optimalit´e. L’algorithme de r´esolution est une m´ethode ascendante qui calcule les plus courts chemins entre chaque pair de sommets en utilisant comme sommets interm´ediaires, dans l’ordre et de fac¸on suc- cessives, les sommets 1, 2, 3...n, avec n la taille du graphe. Notons dk

ij la distance du chemin de i `a

j minimal parmi les k-chemins, c’est-`a-dire ceux ayant comme sommets interm´ediaires 1, 2, . . . , k. A

l’´etat initial aucun sommet interm´ediaire n’est utilis´e, on a doncd0ij = ∞. A l’it´eration k on a la relation

suivante :

dkij = min(dk−1ij , dk−1ik + dk−1kj ).