Modéliser une décision
Ce que ce chapitre apporte 6 points
- Distinguer, dans une situation d'atelier, la décision, la solution, les contraintes et l'objectif.
- Écrire en Python une fonction de coût qui évalue une solution, et un test qui dit si elle est réalisable.
- Reconnaître une solution réalisable, l'optimum, une instance, l'espace des solutions.
- Juger une représentation d'une solution : ce qu'elle laisse passer d'impossible, ce qu'elle interdit d'utile.
- Choisir entre une contrainte dure et une pénalité, et régler le poids d'une pénalité en mesurant.
- Ranger un problème : continu, discret ou mixte, avec ou sans contraintes, à un objectif ou à plusieurs, déterministe ou stochastique.
Une décision de la semaine
Décider quand les choix sont nombreux et les ressources limitées est le métier de la recherche opérationnelle (operations research en anglais). Quand les choix sont des objets qu'on peut énumérer (des sélections, des ordres, des affectations), on parle d'optimisation combinatoire : c'est le cadre de ce parcours.
Valdrome Mécanique est une entreprise d'usinage et d'assemblage d'une centaine de personnes : un atelier de machines-outils, une perceuse à commande numérique, un poste de découpe de barres et de tôles, des postes d'assemblage. Ses problèmes reviendront tout au long de ce parcours, toujours avec les mêmes données, pour que deux méthodes puissent se comparer sur le même cas.
Le premier est celui du lundi. Dix commandes attendent. Chacune consomme des heures de machine et rapporte une marge, et il y a cent heures de machine disponibles cette semaine.
| Commande | Désignation | Heures machine | Marge (€) |
|---|---|---|---|
| C1 | Carters de pompe | 38 | 5 200 |
| C2 | Bagues de guidage | 12 | 1 300 |
| C3 | Supports moteur | 27 | 3 300 |
| C4 | Arbres cannelés | 45 | 6 100 |
| C5 | Brides DN80 | 18 | 2 100 |
| C6 | Boîtiers de capteur | 22 | 2 900 |
| C7 | Platines de fixation | 9 | 800 |
| C8 | Pignons | 31 | 4 300 |
| C9 | Galets | 14 | 1 900 |
| C10 | Entretoises | 7 | 600 |
La commande n'est pas divisible : on lance C4 en entier ou pas du tout. La question est simple à poser. Quelles commandes lancer, pour que la marge soit la plus grande possible sans dépasser les cent heures ? C'est un problème de sac à dos (knapsack en anglais) : des objets qui ont chacun un poids et une valeur, un sac dont la capacité ne se dépasse pas.
Avant de modéliser quoi que ce soit, essayer à la main. La figure suivante dessine la semaine de machine comme un conteneur gradué en heures, et chaque commande comme une caisse dont la hauteur est proportionnelle à ses heures. Le but est de charger la sélection la plus rentable qui tienne dans les cent heures. La figure ne dit pas où se trouve la meilleure : elle ne répond qu'à une proposition, une fois celle-ci soumise.
- Heures
- 0 / 100
- Marge
- 0 €
- Capacité
- respectée
Pour répondre « c'est l'optimum », la figure a en coulisse énuméré toutes les sélections possibles, 1 024, ce qu'un atelier ne peut pas toujours faire. Elle propose ensuite de rejouer deux règles de bon sens, celles qu'on essaie d'instinct : les commandes les plus rentables d'abord, ou celles qui rapportent le plus par heure de machine. Une règle aussi naturelle atteint-elle l'optimum ? La figure répond, règle par règle, en la rejouant.
Le vocabulaire
Le même petit nombre de mots sert à décrire n'importe quelle décision d'atelier. Ils ont un sens précis, et bien des erreurs de modélisation viennent de les employer l'un pour l'autre.
Une décision est un choix à faire parmi plusieurs possibilités : quelles commandes lancer, dans quel ordre percer.
Une instance est un cas particulier de ce problème, avec ses données : ces dix commandes et ces cent heures, cette plaque et ces douze trous. Le problème est général, l'instance est ce qu'on doit résoudre lundi matin.
Une solution est une manière complète de trancher : la liste des commandes retenues, l'ordre de perçage. Une solution ne dit rien encore sur sa qualité, ni même sur sa possibilité.
Une contrainte est une condition qu'une solution doit respecter : ne pas dépasser cent heures, percer chaque trou une fois.
Une solution est réalisable si elle respecte toutes les contraintes.
Une fonction de coût (ou fonction objectif) associe à toute solution un nombre : la marge, la longueur parcourue. L'objectif est de rendre ce nombre le plus petit possible, ou le plus grand.
Un optimum est une solution réalisable dont le coût est le meilleur de toutes les solutions réalisables. L'espace des solutions est l'ensemble de toutes les solutions, réalisables ou non.
Le tableau met ces mots en face des deux décisions du chapitre.
| Mot | Les commandes de la semaine | La plaque à percer |
|---|---|---|
| Décision | quelles commandes lancer | dans quel ordre percer |
| Solution | un ensemble de commandes, par exemple C1, C4, C9 | un ordre des douze trous |
| Contrainte | au plus 100 heures de machine | chaque trou percé une fois, retour au départ |
| Coût | la marge, à rendre la plus grande possible | la longueur parcourue, à rendre la plus petite |
| Espace des solutions | 1 024 ensembles possibles | 479 001 600 ordres possibles |
Une remarque sur le sens de l'optimisation. Maximiser une marge et minimiser une longueur sont le même problème vu de deux côtés : maximiser une grandeur revient à minimiser son opposé. Dans la suite, on parlera de coût sans se soucier du sens, et le texte dira chaque fois si l'on cherche le plus petit ou le plus grand.
Optimum et bonne solution ne sont pas synonymes. Il n'existe pas toujours d'algorithme qui trouve l'optimum en un temps raisonnable, et presque tout le parcours cherche une bonne solution, dont il mesure la distance à ce qu'on peut espérer : la dire « optimale » sans preuve est une erreur.
Évaluer une solution
Avant de chercher une bonne solution, il faut savoir en juger une. C'est la première chose qu'un programme d'optimisation doit savoir faire, et c'est étonnamment facile : évaluer une solution ne demande que de l'additionner.
Trois solutions, trois lignes de résultat, et déjà une surprise : la troisième rapporte le plus, et elle est irréalisable. Une fonction de coût seule, qui ne regarderait que la marge, la préférerait aux deux autres. Un coût sans contrainte recommande l'impossible. Toute la partie « pénalité » plus bas tourne autour de cette phrase.
La première ligne du résultat, « les plus rentables », est justement la règle de bon sens de la figure : on prend la commande la plus rentable, puis la suivante qui tient encore, jusqu'à ne plus pouvoir. Elle donne ici 13 200 euros pour 97 heures. Est-ce le mieux possible ? Une règle de bon sens donne des solutions plausibles, proches les unes des autres, et sans tout essayer rien ne dit s'il en existe une meilleure. Cette incertitude est le sujet du parcours : une décision se juge par rapport à ce qu'on aurait pu faire, et pour cela il faut d'abord la mettre en forme.
Évaluer n'est pas chercher pour autant. Évaluer une solution prend un temps proportionnel à sa taille ; trouver la meilleure parmi des millions est une autre affaire. La fonction de coût n'est pas la solution du problème : elle n'en est que la règle du jeu.
Deux fonctions, pas une. Un problème d'optimisation se modélise avec deux outils distincts : une fonction de coût, qui note une solution, et un test de réalisabilité, qui dit si elle a le droit d'exister. Les mélanger dans une seule formule est possible (c'est la pénalité) mais c'est un choix à faire en connaissance de cause, pas un raccourci.
Représenter une solution
Pour manipuler une solution dans un programme, il faut la ranger dans une structure : une liste, un tableau de zéros et de uns, un dictionnaire. Ce choix s'appelle la représentation, et c'est de loin la décision de modélisation qui pèse le plus sur la suite. Un voisinage, un croisement, une mutation, des notions que les chapitres suivants poseront, se définissent sur la représentation et pas sur la solution abstraite.
Une bonne représentation vérifie quatre choses.
- Aucun objet impossible. Tout ce qu'on peut écrire dans la structure désigne une solution qui a un sens. Sinon, il faut tester la validité à chaque étape.
- Aucune solution oubliée. Toute solution utile, l'optimum en particulier, s'écrit. Une représentation qui l'exclut ne le trouvera jamais.
- Peu de doublons. Chaque solution s'écrit d'une seule façon, ou d'un petit nombre de façons. Sinon l'espace se gonfle de copies.
- Un petit changement de l'objet est un petit changement de la solution. C'est ce qui permettra de « bouger un peu » une solution pour la comparer à ses voisines.
Pour les commandes
Trois façons de ranger une sélection de commandes, et le tableau dit ce que chacune laisse passer.
| Représentation | Exemple | Ce qu'elle laisse passer |
|---|---|---|
| Une liste de numéros | [4, 1, 9] | [4, 4, 9] (une commande deux fois), [12] (une commande qui n'existe pas), et [1, 4, 9] comme [4, 1, 9] pour la même sélection |
| Dix zéros et uns, un par commande | [1, 0, 0, 1, 0, 0, 0, 0, 1, 0] | rien d'impossible : les 1 024 listes sont 1 024 sélections, chacune écrite d'une seule façon |
| Un ordre de lancement, avec la règle « on lance chaque commande si elle tient encore » | [4, 1, 9, 6, ...] | rien d'impossible non plus, mais une sélection qui peut encore accueillir une commande ne s'écrit jamais, et beaucoup d'ordres donnent la même sélection |
La liste de numéros paraît naturelle, et elle est la pire : elle a les trois défauts du tableau. Les zéros et les uns n'ont aucun de ces défauts. Ils ont pourtant une limite : ils ne garantissent pas la capacité. Une liste de dix zéros et uns est toujours une sélection, mais pas toujours une sélection réalisable, et la contrainte des cent heures reste à tester séparément.
La troisième représentation est plus subtile : elle règle ce problème en faisant de la contrainte une partie de la lecture. Un programme qui décode l'ordre en lançant chaque commande tant qu'elle tient ne produit jamais une sélection irréalisable. Le prix est un décodage à faire et beaucoup d'ordres qui ne changent rien. C'est un compromis, et le parcours en rencontrera d'autres.
Il se chiffre. Les 3 628 800 ordres possibles des dix commandes (10 × 9 × … × 1) n'écrivent que 79 des 1 024 sélections : celles où plus aucune commande ne tient. Une sélection d'une ou deux commandes n'en fait jamais partie, puisque, quel que soit l'ordre, au moins trois commandes se lancent. L'optimum en fait partie, et ce n'est pas un hasard : tant que chaque marge est positive, une sélection à laquelle on peut ajouter une commande est battue par la sélection agrandie. La représentation oublie donc des sélections, mais aucune qui puisse être la meilleure.
Pour la plaque
Même exercice pour l'ordre de perçage.
| Représentation | Exemple | Ce qu'elle laisse passer |
|---|---|---|
| Une liste libre de douze noms | ["T4", "T9", "T4", ...] | un trou percé deux fois, un trou oublié |
| Une permutation des douze trous | ["T4", "T9", "T11", ...] | rien d'impossible, mais un ordre et son inverse mesurent la même chose |
| Pour chaque trou, le trou suivant | {"T1": "T7", "T7": "T4", ...} | des tournées en plusieurs boucles |
La dernière est la plus trompeuse, parce qu'elle a l'air de respecter la règle : chaque trou a un suivant et un seul, chaque trou est le suivant d'un seul autre. Et pourtant.
Le test le plus naturel répond « valide », et la représentation décrit deux boucles distinctes de trois trous : l'outil ne peut pas suivre deux boucles à la fois. Un test de validité incomplet est pire qu'aucun test, parce qu'il donne une confiance qu'il ne mérite pas. Un algorithme qui cherche la tournée la plus courte trouverait, dans un espace qui contient des doubles boucles, des « tournées » sensiblement plus courtes que les vraies, et les annoncerait comme des tournées. Le remède est de choisir la permutation, qui ne laisse rien passer, plutôt que de compliquer le test. Devant toute représentation qui vient à l'esprit, la question est la même : quels objets cette structure peut-elle contenir qui ne sont pas des solutions ? La réponse est rarement « aucun ».
1.Une représentation d'une solution est mauvaise quand…
2.Pour chaque trou de la plaque, on note le trou suivant. Un test vérifie que chaque trou a un seul suivant et un seul prédécesseur. Peut-on en déduire que c'est une tournée ?
Le coût : la trajectoire de la perceuse
Vient la deuxième décision. La perceuse à commande numérique perce, sur une plaque de bride, douze trous dont les positions sont fixées par le plan. L'outil part de l'origine de la plaque, perce les douze trous, et revient à l'origine pour le changement de pièce. Il se déplace à vide à 30 mm par seconde. Ce qui est libre, c'est l'ordre. C'est le problème du voyageur de commerce (travelling salesman problem, TSP en anglais) : visiter chaque point une fois, revenir au départ, et parcourir le moins possible.
La fonction de coût est la longueur de la trajectoire, d'où l'on tire le temps de déplacement en divisant par la vitesse. Les contraintes sont dans la représentation : un ordre est une permutation, donc chaque trou est percé une fois, et le retour au départ fait partie de la mesure.
Dans la figure suivante, on construit soi-même un ordre de perçage en cliquant les trous l'un après l'autre. Le tracé, la longueur et le temps se mettent à jour à chaque trou. La figure ne juge pas l'ordre avant la fin, et l'ordre dans lequel le plan écrit les trous, celui que le programme suit sans réfléchir, peut se superposer à tout moment.
- Trous percés
- 0 / 12
- Longueur
- 0,0 mm
- Déplacement
- 0,0 s
- Cliquer les trous dans l'ordre voulu. Au clavier : Tab pour passer d'un trou à l'autre, Entrée pour le percer, Retour arrière pour annuler.
L'ordre du plan mesure environ 1 080 mm, soit 36 secondes de déplacement. Une fois la tournée complète, la figure donne aussi la meilleure tournée connue, obtenue par un calcul exact mené une fois pour toutes : c'est elle qui sert de référence dans le calcul qui suit.
Ce que vaut un ordre de perçage
- 1.
Combien d'ordres de perçage existe-t-il pour les douze trous (tous les ordres, sans se soucier du sens de parcours) ?
- 2.
Combien de sélections possibles y a-t-il pour les dix commandes, chacune étant retenue ou non ?
- 3.
L'ordre d'écriture fait 1079,8 mm, et la meilleure tournée connue, celle que la figure donne à la fin, 633,2 mm. À 30 mm par seconde, combien de secondes de déplacement une plaque économiserait-elle ?
- 4.
Si Valdrome perce 300 plaques de ce modèle par semaine, combien de minutes de machine cela représente-t-il ?
Environ soixante-quatorze minutes de machine par semaine, sans acheter quoi que ce soit ni changer une seule pièce : c'est le rendement d'une bonne modélisation suivie d'une bonne recherche, et c'est pourquoi l'entreprise s'y intéresse.
Et l'on ne peut pas se contenter d'essayer tous les ordres : 479 millions pour douze trous, treize fois plus au trou suivant. Le chapitre suivant en fait le sujet.
Encore faut-il compter juste ce qu'il y aurait à essayer, une fois écartés les doublons de la permutation.
Combien de tournées distinctes ?
Une seule étape est fausse. Désigner laquelle.
Pour mesurer les doublons de la permutation, un camarade compte les tournées distinctes d'une plaque de trous, l'outil partant de l'origine et y revenant.
Contrainte dure ou pénalité
La capacité de cent heures est une contrainte dure : une solution qui la viole est irréalisable, et elle est écartée. C'est le cas le plus simple, mais ce n'est pas le seul choix possible. Une autre manière de traiter la capacité est d'autoriser les solutions qui la dépassent, et de les punir : on retranche à la marge un montant proportionnel au dépassement.
Une contrainte dure écarte tout ce qui la viole : une solution qui ne la respecte pas est irréalisable, et n'est jamais retenue.
Une pénalité intègre la contrainte au coût. Si est le dépassement de la solution (nul quand elle est réalisable) et un poids, on note
et on cherche à rendre cette valeur la plus grande possible. La solution irréalisable n'est plus interdite : elle est seulement moins bonne. Une contrainte traitée par une pénalité est dite souple.
Les deux choix ont chacun leur intérêt. La contrainte dure ne recommande jamais l'impossible, mais elle interdit à une recherche de traverser une zone irréalisable pour atteindre une bonne solution de l'autre côté. La pénalité laisse passer, et tout dépend alors de . Trop faible, la recherche préfère violer la capacité, parce que cela rapporte. Trop forte, elle a peur d'en approcher et se comporte comme une contrainte dure. Le bon se règle en mesurant.
Lire la colonne des heures. Sans pénalité, la meilleure sélection retient les dix commandes, soit 223 heures. Avec un poids modeste, elle dépasse encore la capacité, et à 190 € par heure c'est encore le cas : C1, C6, C8 et C9 (105 heures, 14 300 €) valent 13 350, plus que la meilleure sélection réalisable, 13 300, parce que les cinq heures de trop rapportent 1 000 € et n'en coûtent que 950. Le seuil se lit dans ce rapport, 1 000 € pour cinq heures : au-dessus de 200 € par heure, la recherche revient à la meilleure sélection réalisable.
Au fil du parcours, les deux approches reviendront : la contrainte dure, quand une solution fabriquée est vérifiée puis rejetée ou réparée ; la pénalité, quand une recherche doit pouvoir traverser une zone interdite, comme dans le recuit simulé, une méthode que le parcours présentera plus loin.
1.Une pénalité de 50 € par heure de dépassement est retenue pour une contrainte de capacité. La recherche renvoie une solution qui dépasse la capacité de dix heures. Qu'en conclure ?
2.Laquelle de ces contraintes se modélise le mieux par une pénalité ?
Ranger un problème d'optimisation
Une fois la décision, les contraintes et le coût écrits, quatre questions rangent le problème dans une famille. La réponse dit à quoi s'attendre : quelles méthodes s'appliquent, et ce que coûtera la recherche.
Continu, discret ou mixte
Une solution se décrit par des variables de décision, les grandeurs qu'elle fixe. Une variable est réelle quand elle peut prendre toute valeur d'un intervalle (une quantité, une durée, une fraction), entière quand elle compte (un nombre de lots, une heure de début), binaire quand elle ne vaut que 0 ou 1, cas particulier de l'entière. Le problème est continu si toutes ses variables sont réelles, discret si toutes sont entières ou binaires, mixte s'il mêle les deux.
Les deux problèmes de ce chapitre sont discrets : dix variables binaires pour les commandes, chacune valant 1 si la commande est lancée, et un ordre des douze trous pour la plaque. Autoriser une fraction de commande, une moitié, un tiers, rendrait le premier continu. Décider à la fois quelles commandes lancer et combien d'heures supplémentaires payer, une quantité réelle de zéro à dix, en ferait un problème mixte.
Le discret est en général le plus difficile. Dans un problème continu, une solution se déplace d'aussi peu qu'on veut, et la pente de l'objectif dit de quel côté aller ; un problème linéaire à variables réelles se résout pour des milliers de variables. Dans un problème discret, on saute d'une solution à une autre sans intermédiaire, et le nombre de solutions explose avec la taille : c'est le sujet du chapitre 2. La version continue garde pourtant un rôle. Elle admet plus de solutions, donc un optimum au moins aussi bon, qui sert de borne au problème discret : c'est le point de départ du chapitre 4.
Avec ou sans contraintes
Un problème est sans contraintes quand toute solution qu'on peut écrire est réalisable, avec contraintes quand il reste à le vérifier. La frontière dépend en partie de la représentation. Écrite en permutation, la tournée n'a plus rien à vérifier : chaque trou percé une fois, retour au départ, tout est dans la structure. Écrites en zéros et uns, les commandes gardent la capacité, qu'une liste peut dépasser. La pénalité de la section précédente fait d'un problème avec contraintes un problème sans contraintes : la capacité cesse de trier les solutions et entre dans le coût. La différence se voit pendant la recherche. Sans contraintes, toute retouche d'une solution donne une solution ; avec, une retouche peut sortir du réalisable, et il faut la rejeter, la réparer ou la pénaliser.
Un objectif ou plusieurs
Un problème a souvent plusieurs objectifs, et ils se contredisent. Les dix ordres de fabrication que le chapitre 6 ordonnancera en donnent un exemple. Les ordres qui minimisent la somme des retards, à 17 heures, laissent tous un ordre en retard de 14 heures. Le plus grand retard peut descendre à 11 heures, pas moins, mais le meilleur ordre qui y parvient cumule 23 heures de retard. Aucun ordre ne fait les deux. Une solution est dite non dominée, ou optimale au sens de Pareto, quand aucune autre ne fait au moins aussi bien sur tous les objectifs et mieux sur l'un d'eux. Les solutions non dominées n'offrent ici que deux compromis, 17 heures au total et 14 au plus, ou 23 et 11, et choisir entre eux est une décision que le calcul seul ne tranche pas. Deux façons courantes ramènent le problème à un seul objectif, et chacune a sa limite.
- Pondérer les objectifs. Minimiser la somme des retards plus fois le plus grand retard, où le poids dit combien d'heures de retard cumulé vaut une heure de plus grand retard. Avec un poids inférieur à 2, le plan à 17 heures l'emporte ; au-delà, celui à 23 heures. La pénalité de la section précédente est une pondération de ce genre, entre la marge et le dépassement. La limite : le poids est un prix qu'il faut savoir justifier, la réponse saute d'un plan à l'autre quand il franchit un seuil, et, sur d'autres problèmes, certains compromis ne sortent pour aucun poids.
- Passer un objectif en contrainte. Minimiser la somme des retards, sous la condition qu'aucun ordre ne finisse plus de 13 heures après son échéance. La capacité traitée en contrainte dure est de ce type : le dépassement, que la pénalité pesait contre la marge, ne peut plus valoir que zéro. La limite : le seuil est une décision lui aussi, et il agit en tout ou rien. Avec un seuil de 13 heures, la réponse est le plan à 23 heures ; avec 14, celui à 17. Une heure de seuil vaut ici six heures de retard cumulé, ce que le modèle ne montre que s'il est relancé pour plusieurs seuils. Et sous 11 heures, plus aucun ordre ne respecte la condition.
Déterministe ou stochastique
Un problème est déterministe quand ses données sont connues au moment de décider, stochastique quand certaines sont incertaines : une demande future, un temps de trajet, la durée réelle d'un ordre. Les heures et les marges des dix commandes sont connues lundi matin ; celles des commandes de la semaine suivante ne le sont pas encore. Quand une donnée est incertaine, l'incertitude entre dans le modèle : on la décrit par des scénarios ou par une loi de probabilité, le coût d'une solution devient une répartition de valeurs plutôt qu'un nombre, et il faut dire ce qu'on optimise, la moyenne, une mauvaise semaine ou le pire cas. Le chapitre 13 le fait pour les durées des ordres : l'ordre optimal sur les temps standards, à 17 heures de retard, en compte 48,1 en moyenne quand les durées réelles s'en écartent.
Le hasard d'une méthode ne rend pas un problème stochastique. Les recherches des chapitres 7 à 11 tirent leurs essais au hasard, sur des données parfaitement connues : le hasard est dans la méthode, pas dans le problème.
Presque tout le parcours traite des problèmes discrets, à un objectif, aux données connues. Le chapitre 13 sort deux fois de ce cadre : des durées incertaines, et un second objectif, la stabilité du plan d'un jour à l'autre, pondéré avec les retards.
1.La découpe de barres : ranger vingt pièces, dont les longueurs sont mesurées au millimètre, dans des barres de 6 000 mm, en utilisant le moins de barres possible. Le problème est-il continu, discret ou mixte ?
2.Les commandes sont écrites en dix zéros et uns, et la capacité est traitée par une pénalité de λ euros par heure de dépassement. Pour la recherche, le problème est-il avec ou sans contraintes ?
3.Le lendemain d'un plan, un onzième ordre arrive. L'atelier veut peu de retard, et peu d'ordres déplacés par rapport au plan de la veille ; la recherche minimise les retards plus un poids fois le nombre d'ordres déplacés. Comment ranger ce problème ?
4.Les durées des dix ordres sont des temps standards ; les durées réelles s'en écartent d'une semaine à l'autre, de 10 % de moins à 40 % de plus, et un plan est cherché pour tenir sur des semaines simulées. Comment ranger ce problème ?
Les erreurs de modélisation d'un débutant
Le fil du parcours
Valdrome revient avec cinq problèmes, toujours les mêmes données, consignées dans un fichier de référence.
| Problème | Décision | Ce qu'on y étudie |
|---|---|---|
| Commandes à lancer | quelles commandes retenir sous une capacité | le sac à dos : contrainte, pénalité, bornes |
| Trajectoire de la perceuse | dans quel ordre percer | le voyageur de commerce : voisinages, recuit, tabou, génétique |
| Découpe de barres | comment ranger des pièces dans des barres de 6 m | le bin packing : règles gloutonnes, bornes |
| Ordonnancement d'une machine | dans quel ordre fabriquer dix ordres | permutations, retards |
| Affectation des opérateurs | qui à quel poste | représentations qui laissent passer l'impossible |
Le chapitre suivant montre ce qui rend un problème difficile, et pourquoi on ne peut pas tout essayer. Viennent la programmation linéaire, les bornes et les méthodes exactes, d'autres modèles de calcul, des règles de construction, la recherche locale et quatre méthodes qui échappent à ses pièges, la comparaison des méthodes, et enfin leur confrontation à un solveur et à la vie de l'atelier. L'ordonnancement de ce parcours n'a ni précédences entre ordres ni conflits à colorer ; si l'on en ajoutait, les chapitres graphes orientés et coloration du parcours Graphes serviraient. Sur la notion de difficulté, on renvoie à ce que le chapitre complexité pose déjà.
Mettre en pratique
Dans la situation d'un atelier qui doit répartir 6 opérateurs sur 6 postes, qu'est-ce que la décision, la solution, les contraintes, le coût ?
La décision : quel opérateur va à quel poste. Une solution est une affectation complète, par exemple « l'opérateur 1 au poste 4, l'opérateur 2 au poste 1, et ainsi de suite ». Les contraintes : chaque opérateur tient un poste, chaque poste a un opérateur. Le coût : le temps total, ou l'un des temps individuels le plus long, selon ce qu'on veut optimiser, et ce choix est déjà une décision de modélisation.
Les affectations réalisables sont au nombre de . L'espace des solutions est plus vaste quand la représentation laisse passer les doubles affectations : avec une liste de six numéros de poste, il compte listes, dont 720 seulement sont réalisables.
Une solution S1 rapporte 13 200 € pour 97 heures, une solution S2 rapporte 14 600 € pour 110 heures. Laquelle est meilleure ?
Le mot « meilleure » dépend de la contrainte. Avec cent heures de capacité dure, S2 est irréalisable, et S1 est la seule des deux qu'on puisse retenir. Avec une pénalité de 250 € par heure, S2 vaut , donc moins que S1 : S1 reste la meilleure. Avec une pénalité de 100 € par heure, S2 vaut 13 600 et l'emporte, ce qui montre qu'un poids trop faible recommande de violer la capacité.
Comparer deux marges sans regarder les contraintes ne compare rien.
Pourquoi ne pas représenter une tournée par « pour chaque trou, le trou suivant » ?
Parce que la structure décrit aussi des solutions qui n'en sont pas : chaque trou peut avoir un suivant unique et un prédécesseur unique, et l'ensemble se décomposer en plusieurs boucles disjointes, qu'un test « un suivant, un prédécesseur » ne voit pas.
Il faut soit un test de plus (un seul cycle en partant de n'importe quel trou), soit une permutation, qui ne laisse rien passer. La seconde se paie une fois, à la conception ; la première, à chaque évaluation.
Une sélection est représentée par dix zéros et uns. Combien de listes sont réalisables pour cent heures ?
Le nombre de listes est 1 024, toutes des sélections. Le nombre de listes réalisables est le nombre de sélections qui tiennent dans les cent heures : le contrôle est un programme de trois lignes (parcourir les 1 024 listes, additionner les heures, compter celles qui ne dépassent pas la capacité), et il en trouve 406 sur cette instance. Environ quatre sélections sur dix.
Ce nombre n'est pas connu d'avance et il change avec la capacité, ce qui rappelle que la représentation ne garantit que ce qu'elle garantit : elle exclut l'impossible structurel, pas l'impossible numérique.
Quand une pénalité est-elle préférable à une contrainte dure ?
Quand la violation a un prix réel (heures supplémentaires, retard facturé, sous-traitance), parce qu'alors elle fait partie de la décision. Et quand la recherche a besoin de traverser des solutions irréalisables pour aller d'une région réalisable à une autre : interdire tout passage la couperait en morceaux.
Elle est plus risquée quand la violation est physiquement impossible : un poids mal réglé fait alors recommander l'impossible, et il faut ajouter un contrôle en sortie pour ne jamais présenter une solution irréalisable comme une réponse.
Chapitre révisé en octobre 2026 · Une erreur dans ce chapitre ?
Dans la bibliothèque d'exercices
Évaluer des solutions, séparer le coût des contraintes, et refuser une représentation qui laisse passer l'impossible.
- Quatre sélections pour lundi matinNiveau 2
- Le coût des retards d'un atelierNiveau 2
- Débogage : huit opérateurs, des postes qui servent deux foisNiveau 3
- Ranger six décisions d'atelierNiveau 2
- Ranger un problème d'après sa descriptionNiveau 3