Outils de Recherche opérationnelle en Génie MTH 8414

1/43
100%

<!-- Slide number: 1 -->

# Outils de Recherche opérationnelle en Génie
 
MTH 8414

Programmation en nombre entier:

Méthode de résolution et astuces de modélisation

<!-- Slide number: 2 -->

Types de problème d’optimisation

Programme Linéaire en Nombre Entier (PLNE ou IP) :

Programme Linéaire en Nombre Entier Mix (MIP) :

Ces problèmes sont théoriquement très difficiles, mais en pratique ils peuvent (souvent) être résolus très rapidement.

![txp_fig](Picture20.jpg)

![txp_fig](Picture19.jpg)

<!-- Slide number: 3 -->

![](Picture3.jpg)

Formulation PLNE

![](Picture1.jpg)

X

on obtient un PL nommé

“Relaxation Linéaire”

Résolu par séparation et évaluation progressive

on branche sur les variables de décision

la relaxation linéaire nous donne des bornes inférieures.

3

<!-- Slide number: 4 -->

Méthodes de résolution pour PL

Algorithme du simplex

Une solution optimale se trouve nécessairement sur un point extrême.

Donc on peut la trouver en parcourant les arêtes du polyèdre.

x2

x1

cT

<!-- Slide number: 5 -->

Méthodes de résolution pour PL

Méthode par Points Intérieurs

Méthode dites “Barrières”

Formulation “Primal-Dual”

Pas de Newton

Avantages

Permet de résoudre de très gros problèmes

Preuve d’optimalité (comme le simplex)

x2

x1

-cT

<!-- Slide number: 6 -->

Méthodes de résolution pour PLNE

Énumération (Recherche Arborescente, Programmation Dynamique)

Garantie de trouver une solution réalisable entière.

Mais le temps de calcul croît exponentiellement avec la taille.

x1=0

x1=2

x1=1

X2=0

X2=1

X2=2

X2=0

X2=1

X2=2

X2=0

X2=1

X2=2

<!-- Slide number: 7 -->

Méthodes de résolution pour PLNE

Résoudre un PL puis arrondir ?

Solution entière

-cT

x2

x1

Solution du PL

<!-- Slide number: 8 -->

Méthodes de résolution pour PLNE

Le PL fournit une borne inf (ou sup si on maximise) sur la valeur du PLNE.

Mais en arrondissant, on peut être très loin d’une solution entière…

x2

x1

-cT

<!-- Slide number: 9 -->

Approche combinée pour PLNE.

On peut combiner les deux approches

Résoudre le PL pour obtenir une solution.

Créer deux sous-problèmes en ajoutant des contraintes.

x2

x1

x2

x1

x1≥2

-cT

-cT

x1≤1

<!-- Slide number: 10 -->

![](Picture2.jpg)

Séparation et évaluation progressive

Principe

Chercher systématiquement toutes les combinaisons variables-valeurs possibles.

Utiliser une heuristique pour déterminer sur quelle variable brancher.

Utiliser les bornes inférieures pour limiter la recherche.

Publicité

Construire un arbre de recherche.

10

<!-- Slide number: 11 -->

![](Picture2.jpg)

SEP: le branchement

Imaginez un problème avec 3 variables

a, b, c є {0, 1}

Branchement

a = 0

a = 1

b = 0

b = 1

b = 0

b = 1

c = 0

c = 1

c = 0

c = 1

c = 0

c = 1

c = 0

c = 1

100

90

110

115

80

90

100

110

11

<!-- Slide number: 12 -->

![](Picture2.jpg)

SEP: utilisation des bornes inférieures

Si nous pouvions calculer une borne sur le coût minimal d’un noeud.

a = 0

a = 1

50

b = 0

b = 1

b = 0

70

80

c = 0

c = 1

c = 0

85

95

80

100

90

80

12

<!-- Slide number: 13 -->

![](Picture2.jpg)

Séparation et évaluation progressive

Mieux connu sous le nom anglais “branch and bound”

Branch: assigne heuristiquement une valeur à une variable

Crée deux sous problèmes

Bound: comparer la borne inférieure à la meilleure solution connue

Ça ne vaut pas la peine d’explorer le sous-arbre si

Minimisation: si BorneInf >= MeilleureSolution,

Maximisation: si BorneSup <= MeilleureSolution,

13

<!-- Slide number: 14 -->

![](Picture2.jpg)

SÉP pour résoudre des PLNE

Généralement la borne inférieure = la relaxation linéaire.

On l’obtient en « relaxant » les contraintes d’intégrité.

On choisit une variable non entière et on la force soit à :

être plus grande ou égale à l’entier supérieur ou

être plus petite ou égale à l’entier inférieur.

14

<!-- Slide number: 15 -->

Branch and Bound: un exemple

Relaxation linéaire (ou continue)

15

<!-- Slide number: 16 -->

Branch and Bound: un exemple

Premier noeud

(solution optimale de la relaxation linéaire)

Valeur optimale

P0 : z0 = 282,5

x1 = 4,5

x2 = 4,75

Variables non nulles

16

<!-- Slide number: 17 -->

Branch and Bound

P0

noeud-père

P1 : z1 = 265

x1 = 4

x2 = 4,5

Publicité

P2 : z2 = 275

x1 = 5

x2 = 4,5

noeuds-fils

x1 £ 4

x1 ³ 5

17

<!-- Slide number: 18 -->

Branch and Bound: un exemple

P0

x1 £ 4

x1 ³ 5

P1 : z1 = 265

x1 = 4

x2 = 4,5

P2

x2 £ 4

x2 ³ 5

P3 : z3 = 260

x1 = 6

x2 = 4

P4

Aucune solution

admissible

18

Notes:

<!-- Slide number: 19 -->

Branch and Bound

Au final…

P0

x1 ³ 5

x1 £ 4

P1

P2

x2 ³ 5

x2 ³ 5

x2 £ 4

x2 £ 4

P5 : z5 = 240

x1 = 4

x2 = 4

P6

Aucune solution

admissible

P3 : z3 = 260

x1 = 6

x2 = 4

P4

Aucune solution

admissible

19

<!-- Slide number: 20 -->

Calculs incrémentaux

En règle générale, pour calculer une solution optimale d’un nœud-fils, il sera plus rapide de modifier le tableau optimal du nœud père plutôt que de reprendre les calculs de l’algorithme du simplexe à partir de leur début.

Reprendre le tableau P0

P0

Reprendre le tableau P2

P1

P2

P3

P4

P5

P6

20

<!-- Slide number: 21 -->

Algorithme (problème de minimisation)

Les notations suivantes sont utilisées :

L : ensemble des sous-problèmes actifs;

zU : la borne supérieure sur la valeur optimale de MIP ;

ziLP : la valeur optimale du problème linéaire i ;

zjLP : la borne inférieure sur la valeur optimale du sous-problème j ;

X* : La meilleure solution réalisable.

21

<!-- Slide number: 22 -->

L'algorithme comprend 6 étapes :

Étape 1 : Initialisation

L = {relaxation initiale}, zU = .

Étape 2 : Test d'optimalité

Si L =  , x* est la solution optimale.

Étape 3

Choisir un sous-problème i et l'éliminer de la liste L.

Étape 4

Résoudre la relaxation linéaire de i. Si elle n'est pas réalisable, allez à l'étape 3 Sinon, poser ziLP et xi la valeur et la solution optimales obtenues.

Étape 5

Si ziLP  zU , aller à l'étape 2. Si xi n'est pas entière, aller à l'étape 6.

Sinon zU = ziLP, x* = xi.

Éliminer de L tous les sous-problèmes j tels que zjLP  zU et aller à l'étape 2.

Étape 6

Choisir une variable binaire ayant une valeur fractionnaire dans la solution xi et subdiviser le problème i à partir de cette variable. Ajouter les nouveaux problèmes à L.

22

<!-- Slide number: 23 -->

Algorithme (remarque)

Pour que l'algorithme soit complètement défini, on doit fixer:

à l'étape 3, la sélection du sous-problème à résoudre et

Publicité

à l'étape 6, la règle de séparation du nœud courant.

Ces deux règles (choix de nœuds et choix de variables) sont cruciales quant à l'efficacité de l'approche de séparation et d'évaluation progressive.

x2

x1

Branche x1

-cT

Branche x2

Branche x1 puis x2

23

<!-- Slide number: 24 -->

Un autre exemple

Soit le problème de PLNE suivant:

Et la notation

24

<!-- Slide number: 25 -->

11-25

<!-- Slide number: 26 -->

Ajout de plans coupant (branch and cut)

L’idée est d’ajouter des coupes au PL pour améliorer la qualité de la borne.

x2

x1

Toutes les solutions entières sont préservées

La solution actuelle du PL devient non réalisable.

Coupe ajoutée (bleu)

<!-- Slide number: 27 -->

Trucs et astuces de modélisation

Comment modéliser les cas où l’on est en présence de:

variables ont des domaines discontinus;

certaines ressources qui ont des coûts fixes;

disjonctions de contraintes;

contraintes conditionnelles

de SOS et des fonctions linéaires par morceaux

des produits de variables

27

<!-- Slide number: 28 -->

Variables avec domaines discontinues

Que faire avec le cas où soit x = 0 OU l <= x <= u

On peut considérer ceci comme deux contraintes, mais elles ne peuvent être vraies toutes les deux à la fois…

Pouvez-vous trouver des exemples d’applications ?

Comment modéliser ceci avec un PLNE ?

![](Image4.jpg)

28

<!-- Slide number: 29 -->

Variables avec domaines discontinues

On utilisera une variable indicatrice:

Qu’on liera avec la variable originale par les contraintes suivantes:

Y = 0 implique donc x = 0 et y = 1 implique que l <= x <= u

![](Image4.jpg)

![](Image5.jpg)

29

<!-- Slide number: 30 -->

Les coûts fixes

Soit le problème suivant:

La fonction de coût n’est ni linéaire ni continue...

À quelle application pensez-vous ?

Comment résoudre ce problème ?

![](Image4.jpg)

![](Image5.jpg)

30

<!-- Slide number: 31 -->

Les coûts fixes

Si on connaît une borne u suffisamment grande pour x et qu’on introduit une variable indicatrice y

On relier x et y par x <= yu

L’objectif devient donc:

Et le problème devient:

![](Image4.jpg)

![](Image6.jpg)

![](Image5.jpg)

31

<!-- Slide number: 32 -->

Une disjonction de contrainte

Soit le problème suivant:

Où soit (1) ou (2) doit être respectée

Des applications ?

Comment faire ?

![](Image4.jpg)

![](Image5.jpg)

32

<!-- Slide number: 33 -->

Une disjonction de contraintes

Encore une fois on introduira une variable supplémentaire y ainsi que deux grands nombres (M1 et M2).

En modifiant (1) et (2) de la manière suivante:

On s’assure qu’une des deux contraintes devra être satisfaite.

![](Image4.jpg)

![](Image5.jpg)

33

<!-- Slide number: 34 -->

Contraintes conditionnelles

Une variante de ce problème survient lorsque certaines contraintes sont conditionnelles:

Donnez des exemples d’application ?

Comment traiter ce cas ?

![](Image4.jpg)

34

<!-- Slide number: 35 -->

Publicité

Contraintes conditionnelles

Pour adresser ce cas, nous devons nous tourner vers la logique

L’équation logique qui nous intéresse est (A implique B)

Cette équation est équivalente à (non-A OU B)

On a donc une disjonction de contraintes, qu’on peut traiter comme précédemment…

Devient:

Sauf qu’ici on a un signe > qu’on ne peut traiter en PL…

![](Image4.jpg)

![](Image5.jpg)

35

<!-- Slide number: 36 -->

Contraintes conditionnelles

![](Image4.jpg)

On introduira une petite valeur epsilon

Pour obtenir:

Qui peut être réécrit comme:

![](Image5.jpg)

![](Image6.jpg)

36

<!-- Slide number: 37 -->

Les SOS (Special Ordered Sets)

Considérer le cas particulier suivant:

Votre modèle comporte une série de décision oui/non ordonnée.

Seulement une décision « oui » est possible

Entre deux décisions « oui » on préfèrera toujours celle qui est la première dans la série.

Pour ce cela, on dispose généralement d’une série de variables booléennes yi telles que

On peut généraliser ce cas à :

Aux variables générales xi tel que 0 <= xi <= u et sujet à

On peut aussi considérer le cas où deux décisions « oui » sont permises, mais elles doivent être consécutives.

Les solveurs ont des objets de modélisation SOS1 et SOS2 qui implémentent ces conditions de manières plus efficaces lors du branch and bound.

![](Image8.jpg)

![](Image4.jpg)

37

<!-- Slide number: 38 -->

Fonctions linéaires par morceaux

Soit le problème suivant:

Ici on remarque que l’objective, bien que non linéaire, est séparable.

C’est-à-dire que l’objectif est une somme de fonctions définies sur une variable à la fois.

Séparable Non séparable

![](Image4.jpg)

![](Image5.jpg)

![](Image6.jpg)

38

<!-- Slide number: 39 -->

Fonctions linéaires par morceaux

Soit la fonction

Soit x1, x2, x3, x4 des points de « cassure » (breakpoints) auquel on évalue la fonction f(x) (soit 0,1,2,4)

On approxime donc linéairement tout point situé entre deux cassures, par exemple f(3) = ½f(2) + ½f(4) = ½1 + ½8 = 5.

![](Image4.jpg)

![](Image5.jpg)

39

<!-- Slide number: 40 -->

Fonctions linéaires par morceaux

Une des manières de traiter ces fonctions est d’utiliser la λ-formulation.

Soit λ1, λ2, λ3, λ4, 4 poids non négatifs dont la somme = 1, alors la fonction linéaire par morceaux précédente peut-être exprimée par:

Comme au plus deux λ peuvent être non négatifs, et que ceux-ci doivent en plus être consécutifs, on peut ajouter une contrainte SOS2(λ).

La majorité des solveurs ont un objet « Piecewise Linear » que vous pouvez utiliser directement.

![](Image4.jpg)

40

<!-- Slide number: 41 -->

Éliminer les produits de variables

Que faire des problèmes où des termes contiennent le produit de deux variables booléennes x1x2

On peut faire disparaître ce produit en introduisant une nouvelle variable booléenne y qui doit être égale au produit x1x2.

Pour ce faire il faut ajouter les contraintes suivantes:

![](Image4.jpg)

41

<!-- Slide number: 42 -->

Éliminer les produits de variables

Que faire maintenant si doit traiter un produit x1x2 où x1 est une variable binaire et x2 est une variable continue tel que 0 <= x2 <= u ?

On introduit une variable continue y définie comme y = x1x2 en ajoutant les contraintes ci-dessous imposant le comportement:

![](Image5.jpg)

![](Image4.jpg)

42

<!-- Slide number: 43 -->

Excercise de modélisation

On veut assembler l’horaire hebdomadaire de travail d’une unité d’infirmières sachant que:

On a trois quarts de 8h de travail à couvrir (J,S,N)

Le nombre d’infirmières requises de dq où q est un quart de travail (J,S,N)

Une infirmière doit avoir 16h de repos entre deux quarts.

Les contraintes suivantes doivent être respectées

Si on emploie une infirmière pendant la semaine, elle doit travailler au moins 3 quarts.

Une infirmière doit avoir congé soit

a) toutes les nuits de la semaine

b) toute la fin de semaine.

Si une infirmière travaille 4 quarts de travaille, elle doit avoir congé la fin de semaine.

Chaque infirmière donne une liste de jours de congé souhaitée (et ordonnées), on doit lui donner au moins un de ces choix.

Il faut minimiser les coûts sachant que:

Si on emploie une infirmière il faut payer l’agence un montant fixe de F$ + G$ par quart travaillé.

En plus, il est permis de ne pas avoir le bon nombre d’infirmières, mais il faut payer une pénalité de P(k) $ ou k est la différence entre le nombre souhaité le nombre d’infirmières assignées

43

Outils de Recherche opérationnelle en Génie MTH 8414

Programmation en nombre entier, optimisation, recherche opérationnelle · course

Browse all programmation documents

<!-- Slide number: 1 -->

# Outils de Recherche opérationnelle en Génie
 
MTH 8414

Programmation en nombre entier:

Méthode de résolution et astuces de modélisation

<!-- Slide number: 2 -->

Types de problème d’optimisation

Programme Linéaire en Nombre Entier (PLNE ou IP) :

Programme Linéaire en Nombre Entier Mix (MIP) :

Ces problèmes sont théoriquement très difficiles, mais en pratique ils peuvent (souvent) être résolus très rapidement.

![txp_fig](Picture20.jpg)

![txp_fig](Picture19.jpg)

<!-- Slide number: 3 -->

![](Picture3.jpg)

Formulation PLNE

![](Picture1.jpg)

X

on obtient un PL nommé

“Relaxation Linéaire”

Résolu par séparation et évaluation progressive

on branche sur les variables de décision

la relaxation linéaire nous donne des bornes inférieures.

3

<!-- Slide number: 4 -->

Méthodes de résolution pour PL

Algorithme du simplex

Une solution optimale se trouve nécessairement sur un point extrême.

Donc on peut la trouver en parcourant les arêtes du polyèdre.

x2

x1

cT

<!-- Slide number: 5 -->

Méthodes de résolution pour PL

Méthode par Points Intérieurs

Méthode dites “Barrières”

Formulation “Primal-Dual”

Pas de Newton

Avantages

Permet de résoudre de très gros problèmes

Preuve d’optimalité (comme le simplex)

x2

x1

-cT

<!-- Slide number: 6 -->

Méthodes de résolution pour PLNE

Énumération (Recherche Arborescente, Programmation Dynamique)

Garantie de trouver une solution réalisable entière.

Mais le temps de calcul croît exponentiellement avec la taille.

x1=0

x1=2

x1=1

X2=0

X2=1

X2=2

X2=0

X2=1

X2=2

X2=0

X2=1

X2=2

<!-- Slide number: 7 -->

Méthodes de résolution pour PLNE

Résoudre un PL puis arrondir ?

Solution entière

-cT

x2

x1

Solution du PL

<!-- Slide number: 8 -->

Méthodes de résolution pour PLNE

Le PL fournit une borne inf (ou sup si on maximise) sur la valeur du PLNE.

Mais en arrondissant, on peut être très loin d’une solution entière…

x2

x1

-cT

<!-- Slide number: 9 -->

Approche combinée pour PLNE.

On peut combiner les deux approches

Résoudre le PL pour obtenir une solution.

Créer deux sous-problèmes en ajoutant des contraintes.

x2

x1

x2

x1

x1≥2

-cT

-cT

x1≤1

<!-- Slide number: 10 -->

![](Picture2.jpg)

Séparation et évaluation progressive

Principe

Chercher systématiquement toutes les combinaisons variables-valeurs possibles.

Utiliser une heuristique pour déterminer sur quelle variable brancher.

Utiliser les bornes inférieures pour limiter la recherche.

Advertisement

Construire un arbre de recherche.

10

<!-- Slide number: 11 -->

![](Picture2.jpg)

SEP: le branchement

Imaginez un problème avec 3 variables

a, b, c є {0, 1}

Branchement

a = 0

a = 1

b = 0

b = 1

b = 0

b = 1

c = 0

c = 1

c = 0

c = 1

c = 0

c = 1

c = 0

c = 1

100

90

110

115

80

90

100

110

11

<!-- Slide number: 12 -->

![](Picture2.jpg)

SEP: utilisation des bornes inférieures

Si nous pouvions calculer une borne sur le coût minimal d’un noeud.

a = 0

a = 1

50

b = 0

b = 1

b = 0

70

80

c = 0

c = 1

c = 0

85

95

80

100

90

80

12

<!-- Slide number: 13 -->

![](Picture2.jpg)

Séparation et évaluation progressive

Mieux connu sous le nom anglais “branch and bound”

Branch: assigne heuristiquement une valeur à une variable

Crée deux sous problèmes

Bound: comparer la borne inférieure à la meilleure solution connue

Ça ne vaut pas la peine d’explorer le sous-arbre si

Minimisation: si BorneInf >= MeilleureSolution,

Maximisation: si BorneSup <= MeilleureSolution,

13

<!-- Slide number: 14 -->

![](Picture2.jpg)

SÉP pour résoudre des PLNE

Généralement la borne inférieure = la relaxation linéaire.

On l’obtient en « relaxant » les contraintes d’intégrité.

On choisit une variable non entière et on la force soit à :

être plus grande ou égale à l’entier supérieur ou

être plus petite ou égale à l’entier inférieur.

14

<!-- Slide number: 15 -->

Branch and Bound: un exemple

Relaxation linéaire (ou continue)

15

<!-- Slide number: 16 -->

Branch and Bound: un exemple

Premier noeud

(solution optimale de la relaxation linéaire)

Valeur optimale

P0 : z0 = 282,5

x1 = 4,5

x2 = 4,75

Variables non nulles

16

<!-- Slide number: 17 -->

Branch and Bound

P0

noeud-père

P1 : z1 = 265

x1 = 4

x2 = 4,5

Advertisement

P2 : z2 = 275

x1 = 5

x2 = 4,5

noeuds-fils

x1 £ 4

x1 ³ 5

17

<!-- Slide number: 18 -->

Branch and Bound: un exemple

P0

x1 £ 4

x1 ³ 5

P1 : z1 = 265

x1 = 4

x2 = 4,5

P2

x2 £ 4

x2 ³ 5

P3 : z3 = 260

x1 = 6

x2 = 4

P4

Aucune solution

admissible

18

Notes:

<!-- Slide number: 19 -->

Branch and Bound

Au final…

P0

x1 ³ 5

x1 £ 4

P1

P2

x2 ³ 5

x2 ³ 5

x2 £ 4

x2 £ 4

P5 : z5 = 240

x1 = 4

x2 = 4

P6

Aucune solution

admissible

P3 : z3 = 260

x1 = 6

x2 = 4

P4

Aucune solution

admissible

19

<!-- Slide number: 20 -->

Calculs incrémentaux

En règle générale, pour calculer une solution optimale d’un nœud-fils, il sera plus rapide de modifier le tableau optimal du nœud père plutôt que de reprendre les calculs de l’algorithme du simplexe à partir de leur début.

Reprendre le tableau P0

P0

Reprendre le tableau P2

P1

P2

P3

P4

P5

P6

20

<!-- Slide number: 21 -->

Algorithme (problème de minimisation)

Les notations suivantes sont utilisées :

L : ensemble des sous-problèmes actifs;

zU : la borne supérieure sur la valeur optimale de MIP ;

ziLP : la valeur optimale du problème linéaire i ;

zjLP : la borne inférieure sur la valeur optimale du sous-problème j ;

X* : La meilleure solution réalisable.

21

<!-- Slide number: 22 -->

L'algorithme comprend 6 étapes :

Étape 1 : Initialisation

L = {relaxation initiale}, zU = .

Étape 2 : Test d'optimalité

Si L =  , x* est la solution optimale.

Étape 3

Choisir un sous-problème i et l'éliminer de la liste L.

Étape 4

Résoudre la relaxation linéaire de i. Si elle n'est pas réalisable, allez à l'étape 3 Sinon, poser ziLP et xi la valeur et la solution optimales obtenues.

Étape 5

Si ziLP  zU , aller à l'étape 2. Si xi n'est pas entière, aller à l'étape 6.

Sinon zU = ziLP, x* = xi.

Éliminer de L tous les sous-problèmes j tels que zjLP  zU et aller à l'étape 2.

Étape 6

Choisir une variable binaire ayant une valeur fractionnaire dans la solution xi et subdiviser le problème i à partir de cette variable. Ajouter les nouveaux problèmes à L.

22

<!-- Slide number: 23 -->

Algorithme (remarque)

Pour que l'algorithme soit complètement défini, on doit fixer:

à l'étape 3, la sélection du sous-problème à résoudre et

Advertisement

à l'étape 6, la règle de séparation du nœud courant.

Ces deux règles (choix de nœuds et choix de variables) sont cruciales quant à l'efficacité de l'approche de séparation et d'évaluation progressive.

x2

x1

Branche x1

-cT

Branche x2

Branche x1 puis x2

23

<!-- Slide number: 24 -->

Un autre exemple

Soit le problème de PLNE suivant:

Et la notation

24

<!-- Slide number: 25 -->

11-25

<!-- Slide number: 26 -->

Ajout de plans coupant (branch and cut)

L’idée est d’ajouter des coupes au PL pour améliorer la qualité de la borne.

x2

x1

Toutes les solutions entières sont préservées

La solution actuelle du PL devient non réalisable.

Coupe ajoutée (bleu)

<!-- Slide number: 27 -->

Trucs et astuces de modélisation

Comment modéliser les cas où l’on est en présence de:

variables ont des domaines discontinus;

certaines ressources qui ont des coûts fixes;

disjonctions de contraintes;

contraintes conditionnelles

de SOS et des fonctions linéaires par morceaux

des produits de variables

27

<!-- Slide number: 28 -->

Variables avec domaines discontinues

Que faire avec le cas où soit x = 0 OU l <= x <= u

On peut considérer ceci comme deux contraintes, mais elles ne peuvent être vraies toutes les deux à la fois…

Pouvez-vous trouver des exemples d’applications ?

Comment modéliser ceci avec un PLNE ?

![](Image4.jpg)

28

<!-- Slide number: 29 -->

Variables avec domaines discontinues

On utilisera une variable indicatrice:

Qu’on liera avec la variable originale par les contraintes suivantes:

Y = 0 implique donc x = 0 et y = 1 implique que l <= x <= u

![](Image4.jpg)

![](Image5.jpg)

29

<!-- Slide number: 30 -->

Les coûts fixes

Soit le problème suivant:

La fonction de coût n’est ni linéaire ni continue...

À quelle application pensez-vous ?

Comment résoudre ce problème ?

![](Image4.jpg)

![](Image5.jpg)

30

<!-- Slide number: 31 -->

Les coûts fixes

Si on connaît une borne u suffisamment grande pour x et qu’on introduit une variable indicatrice y

On relier x et y par x <= yu

L’objectif devient donc:

Et le problème devient:

![](Image4.jpg)

![](Image6.jpg)

![](Image5.jpg)

31

<!-- Slide number: 32 -->

Une disjonction de contrainte

Soit le problème suivant:

Où soit (1) ou (2) doit être respectée

Des applications ?

Comment faire ?

![](Image4.jpg)

![](Image5.jpg)

32

<!-- Slide number: 33 -->

Une disjonction de contraintes

Encore une fois on introduira une variable supplémentaire y ainsi que deux grands nombres (M1 et M2).

En modifiant (1) et (2) de la manière suivante:

On s’assure qu’une des deux contraintes devra être satisfaite.

![](Image4.jpg)

![](Image5.jpg)

33

<!-- Slide number: 34 -->

Contraintes conditionnelles

Une variante de ce problème survient lorsque certaines contraintes sont conditionnelles:

Donnez des exemples d’application ?

Comment traiter ce cas ?

![](Image4.jpg)

34

<!-- Slide number: 35 -->

Advertisement

Contraintes conditionnelles

Pour adresser ce cas, nous devons nous tourner vers la logique

L’équation logique qui nous intéresse est (A implique B)

Cette équation est équivalente à (non-A OU B)

On a donc une disjonction de contraintes, qu’on peut traiter comme précédemment…

Devient:

Sauf qu’ici on a un signe > qu’on ne peut traiter en PL…

![](Image4.jpg)

![](Image5.jpg)

35

<!-- Slide number: 36 -->

Contraintes conditionnelles

![](Image4.jpg)

On introduira une petite valeur epsilon

Pour obtenir:

Qui peut être réécrit comme:

![](Image5.jpg)

![](Image6.jpg)

36

<!-- Slide number: 37 -->

Les SOS (Special Ordered Sets)

Considérer le cas particulier suivant:

Votre modèle comporte une série de décision oui/non ordonnée.

Seulement une décision « oui » est possible

Entre deux décisions « oui » on préfèrera toujours celle qui est la première dans la série.

Pour ce cela, on dispose généralement d’une série de variables booléennes yi telles que

On peut généraliser ce cas à :

Aux variables générales xi tel que 0 <= xi <= u et sujet à

On peut aussi considérer le cas où deux décisions « oui » sont permises, mais elles doivent être consécutives.

Les solveurs ont des objets de modélisation SOS1 et SOS2 qui implémentent ces conditions de manières plus efficaces lors du branch and bound.

![](Image8.jpg)

![](Image4.jpg)

37

<!-- Slide number: 38 -->

Fonctions linéaires par morceaux

Soit le problème suivant:

Ici on remarque que l’objective, bien que non linéaire, est séparable.

C’est-à-dire que l’objectif est une somme de fonctions définies sur une variable à la fois.

Séparable Non séparable

![](Image4.jpg)

![](Image5.jpg)

![](Image6.jpg)

38

<!-- Slide number: 39 -->

Fonctions linéaires par morceaux

Soit la fonction

Soit x1, x2, x3, x4 des points de « cassure » (breakpoints) auquel on évalue la fonction f(x) (soit 0,1,2,4)

On approxime donc linéairement tout point situé entre deux cassures, par exemple f(3) = ½f(2) + ½f(4) = ½1 + ½8 = 5.

![](Image4.jpg)

![](Image5.jpg)

39

<!-- Slide number: 40 -->

Fonctions linéaires par morceaux

Une des manières de traiter ces fonctions est d’utiliser la λ-formulation.

Soit λ1, λ2, λ3, λ4, 4 poids non négatifs dont la somme = 1, alors la fonction linéaire par morceaux précédente peut-être exprimée par:

Comme au plus deux λ peuvent être non négatifs, et que ceux-ci doivent en plus être consécutifs, on peut ajouter une contrainte SOS2(λ).

La majorité des solveurs ont un objet « Piecewise Linear » que vous pouvez utiliser directement.

![](Image4.jpg)

40

<!-- Slide number: 41 -->

Éliminer les produits de variables

Que faire des problèmes où des termes contiennent le produit de deux variables booléennes x1x2

On peut faire disparaître ce produit en introduisant une nouvelle variable booléenne y qui doit être égale au produit x1x2.

Pour ce faire il faut ajouter les contraintes suivantes:

![](Image4.jpg)

41

<!-- Slide number: 42 -->

Éliminer les produits de variables

Que faire maintenant si doit traiter un produit x1x2 où x1 est une variable binaire et x2 est une variable continue tel que 0 <= x2 <= u ?

On introduit une variable continue y définie comme y = x1x2 en ajoutant les contraintes ci-dessous imposant le comportement:

![](Image5.jpg)

![](Image4.jpg)

42

<!-- Slide number: 43 -->

Excercise de modélisation

On veut assembler l’horaire hebdomadaire de travail d’une unité d’infirmières sachant que:

On a trois quarts de 8h de travail à couvrir (J,S,N)

Le nombre d’infirmières requises de dq où q est un quart de travail (J,S,N)

Une infirmière doit avoir 16h de repos entre deux quarts.

Les contraintes suivantes doivent être respectées

Si on emploie une infirmière pendant la semaine, elle doit travailler au moins 3 quarts.

Une infirmière doit avoir congé soit

a) toutes les nuits de la semaine

b) toute la fin de semaine.

Si une infirmière travaille 4 quarts de travaille, elle doit avoir congé la fin de semaine.

Chaque infirmière donne une liste de jours de congé souhaitée (et ordonnées), on doit lui donner au moins un de ces choix.

Il faut minimiser les coûts sachant que:

Si on emploie une infirmière il faut payer l’agence un montant fixe de F$ + G$ par quart travaillé.

En plus, il est permis de ne pas avoir le bon nombre d’infirmières, mais il faut payer une pénalité de P(k) $ ou k est la différence entre le nombre souhaité le nombre d’infirmières assignées

43