• Aucun résultat trouvé

Puisqu’on travaille sur un sous ensemble d’arˆetes tout au long de l’algorithme du “Branch and Cut”, il faut v´erifier que la solution du programme lin´eaire sur le graphe partiel reste optimale pour le graphe complet, avant de pouvoir ´elaguer ou brancher un nœud de l’arbre du “Branch and Cut”. D’o`u la n´ecessit´e de faire appel `a la m´ethode de g´en´eration de colonnes pour effectuer un pricing des

va-3.6 Pricing et Fixation 47 2.0 3.0 2.0 3.0 3.0 3.0 3.0 3.0 2.0 2.0 1 2 1 1 1 1 2 2 2 2 3.0 3.0 2.0 2.5 2.5 1 1 1 1 2 3.0 3.0 2.0 2.5 2.5 2 2 1 1 1 3.0 3.0 1 1 2.0 2.5 2.5 2 2 2

riables inactives. Rappelons que la m´ethode des g´en´erations des colonnes, v´erifie si toutes les variables inactives ont un coˆut r´eduit positif. Dans le cas contraire, elle ajoute au graphe partiel les variables dont le coˆut r´eduit

r

e est n´egatif. Le nouveau programme lin´eaire est r´esolu avec la m´ethode primale du simplexe en utilisant la derni`ere base, puisqu’elle est primale r´ealisable. A la fin du pricing, on met `a jour la valeur de la borne inf´erieure locale

bil

et ´eventuellement la valeur de la borne inf´erieure globale

big

.

Pour am´eliorer les performances du “Branch and Cut”, on effectue un pricing des variables p´eriodiquement, par exemple tout les

k

programmes lin´eaires r´e-solus. Ceci permet de faire entrer tr`es tˆot des variables inactives dans le graphe partiel n´ecessaires `a la construction de la solution optimale ou `a des solutions de bonne qualit´e.

Au lieu d’appliquer la m´ethode de g´en´eration de colonnes sur toutes les va-riables inactives, on effectue cette op´eration d’une fa¸con hi´erarchique. Au d´ebut, on ne consid`ere que les variables dans le graphe de r´eserve. Si aucune variable n’est ajout´ee au graphe partiel alors on passe au pricing du reste des variables inactives. Cette ´enum´eration permet de construire une liste exhaustive des arˆetes candidates. Au d´ebut de l’ex´ecution de l’algorithme du “Branch and Cut” cette liste est tr`es grande et ne peut pas ˆetre sauvegard´ee. D’o`u on d´etermine une taille de buffer raisonnable o`u une ´enum´eration syst´ematique doit ˆetre effectu´ee.

Au fur et `a mesure de l’avancement du calcul on peut aussi r´eduire le nombre de variables inactives `a consid´erer. En effet, si le nœud courant de l’arbre du “Branch and Cut” est une racine de l’arbre restant, et si le coˆut r´eduit d’une va-riable inactive

e

v´erifie la relation

valpl+r

e

> bsg

alors la variable n’a plus `a ˆetre consid´er´ee puisqu’elle est fix´ee `a z´ero. Ainsi il y a des fortes chances que la liste compl`ete des variables `a consid´erer pendant le pricing tient dans le buffer tr`es tˆot pendant l’ex´ecution de l’algorithme. Ceci permet d’acc´el´erer consid´erablement l’´etape de g´en´eration de colonnes.

Pour pouvoir calculer rapidement le coˆut r´eduit d’une variable inactive, il faut ˆetre capable de calculer le coefficient de chaque variable dans les contraintes ac-tives. Pour ce faire, pour chaque sommet

v

du graphe, on sauvegarde la liste des contraintes qui contiennent

v

. Ensuite on calcule le coˆut r´eduit d’une variable

e = uv

en retranchant de

c

e le coefficient de l’arˆete dans une contrainte active, multipli´e par la valeur de sa composante dans la solution duale.

3.6 Pricing et Fixation 49

3.6.1 Fixation

Avant de faire appel `a l’op´eration de branchement, on essaye de fixer les va-riables actives hors base en utilisant la valeur de leur coˆut r´eduit. En effet ´etant donn´e le coˆut r´eduit

r

e d’une variable

e

, et sa valeur courante

x

e. Si la valeur

x

e passe de

x

e `a

x

e

+t

alors la valeur de la fonction ´economique augmente de

t



r

e. Ainsi on peut fixer

x

e `a 0 si

x

e

= 0

et

bip + r

e

> bsg

. –

x

e `a 1 si

x

e

= 1

et

bip

,

r

e

> bsg

.

En effet, le coˆut r´eduit repr´esente une borne inf´erieure du changement absolu de la valeur de la fonction ´economique qui r´esulte de forcer une variable `a passer d’une borne `a une autre. D’o`u, si l’augmentation de la valeur de la fonction ´eco-nomique est assez grande pour causer l’´elagage du noeud courant, alors on sait qu’on peut fixer la variable `a sa valeur courante.

Les fixations sont valides jusqu’`a la fin de l’algorithme si le noeud courant est aussi le noeud racine de l’arbre du “Branch and Cut”. Dans le cas contraire les fixations ne sont valides que pour le noeud courant et sa sous arborescence; puisque au contraire de la g´en´eration de nouvelles coupes qui ne fait que dimi-nuer la diff´erence entre la borne inf´erieure et la borne sup´erieure, la g´en´eration de colonnes peut augmenter la valeur de cette diff´erence.

Apr`es les fixations par coˆut r´eduit, on peut fixer d’autres variables par impli-cation logique, ceci peut se produire dans les cas suivants:

– Si deux arˆetes incidentes `a un sommet

v

ont ´et´e fix´ees `a 1 alors toutes les autres arˆetes incidentes `a

v

peuvent ˆetre fix´ees `a 0. L’arˆete incidente aux deux autres extremit´es des deux arˆetes peut ˆetre fix´ee `a 0.

– Si

n

,

3

arˆetes incidentes `a un sommet

v

ont ´et´e fix´ees `a 0 alors les deux autres arˆetes incidentes `a

v

peuvent ˆetre fix´ees `a 1.

3.6.2 R´ealisabilit´e du programme lin´eaire

Pendant l’ex´ecution du “Branch and Cut”, le programme lin´eaire courant peut ˆetre irr´ealisable pour trois raisons :

Une contrainte de degr´es peut ˆetre viol´ee quand toutes les arˆetes du graphe partiel incidentes `a

v

sauf une, sont fix´ees `a 0. Dans ce cas il suffit d’ajouter de nouvelles arˆetes incidentes `a

v

. Si toutes les arˆetes incidentes `a

v

sont d´ej`a

pr´esentes dans le graphe partiel alors il faut ´elaguer le nœud de l’arbre du “Branch and Cut”, puisqu’il n’est pas r´ealisable.

Une in´egalit´e dans le programme lin´eaire a sa partie gauche vide, c’est `a dire que tout ses variables sont fix´ees, et elle est viol´ee. Puisque toutes les variables ont des coefficients positifs alors mˆeme en ajoutant des variables l’in´egalit´e restera viol´ee. Le nœud de l’arbre du “Branch and Cut” doit ˆetre alors ´elagu´e.

Dans le cas o`u aucune des deux premi`eres raisons n’est la cause de l’irr´ealisa-bilit´e du programme lin´eaire, on effectue une op´eration de ” pricing ” pour v´erifier si la solution r´ealisable duale est duale r´ealisable pour tout le probl`eme. On ajoute les variables inactives qui poss`edent un coˆut r´eduit n´egatif dans le graphe partiel utilis´e pour r´esoudre le programme lin´eaire.

Si des variables sont ajout´ees, alors on r´esout de nouveau le programme li-n´eaire. S’il est toujours irr´ealisable alors on cherchera `a le rendre r´ealisable en ajoutant de nouvelles colonnes avec des crit`eres plus sophistiqu´es que le simple signe du coˆut r´eduit des variables. Notons au passage que la valeur du programme lin´eaire

valpl

est une borne inf´erieure de la valeur de la fonction ´economique du nœud de l’arbre du “Branch and Cut”. Ainsi, si

valpl



bsg

alors on peut ´elaguer le nœud.

On essaye d’ajouter des variables parmi celles qui ne sont pas r´ealisables pour rendre le programme lin´eaire r´ealisable. Une variable

e

dont la valeur dans le programme lin´eaire est

x

e est dite irr´ealisable si elle viole sa borne inf´erieure ou sa borne sup´erieure. C’est `a dire

x

e

< 0

ou

x

e

> 1

. Une variable d’´ecart est dite irr´ealisable si elle a une valeur n´egative dans le programme lin´eaire. Une variable

e

de coˆut r´eduit

r

e est candidate seulement si

valpl + r

e 

bsg

. Soit

B

la matrice de base qui correspond `a la solution duale r´ealisable et primale non r´ealisable. Pour chaque variable candidate, soit

a

e la colonne de la matrice de contraintes correspondant `a

e

et

a

e solution du syst`eme

Ba

e

= a

e. Soit

a

e

(b)

la composante de

a

e correspondant `a la variable de base irr´ealisable

x

b. L’augmentation de

x

e peut rendre le programme lin´eaire r´ealisable si et seulement si

x

b est une variable structurelle c’est `a dire correspondant `a une arˆete de

G

et

x

b

< 0

et

a

e

(b) < 0

ou

3.7 Branchement 51