Optimisation par REB
Introduction
Cette page présente le principe de l’optimisation Diapason.
Cette documentation présente une optimisation REN / REP et une REB.
La méthodologie actuelle utilisée chez ISIA et à mettre en œuvre est la méthodologie REB. Toutefois, la méthode REN / REP est aussi documentée.
Principe de l’optimisation
L’optimisation c’est quoi ? 🧐
Dans le monde de la menuiserie industrielle, s’il y a bien un composant qui est important, c’est le profil ! Les profils coûtent chers et représentent l’ossature de nos fenêtres. De plus, chaque géométrie de profil peut exister en un nombre infini de couleurs.
Les barres de profil sont approvisionnées et ont généralement une longueur standard chez les fournisseurs ( 6 mètres ou 6 mètres 5). Quand l’industriel va effectuer sa fabrication, il va chercher à regrouper les menuiseries ayant les même géométries de profils et les mêmes couleurs (en série) pour pouvoir débiter ses morceaux de profils nécessaires à la fabrication de sa série de manière optimisée, c’est à dire en utilisant le moins possible de barres standard de 6 mètre 5.
L’optimisation Diapason permet donc, à partir d’une liste de pièces profils de toutes tailles de définir de manière optimisée :
Combien de barres sont nécessaires
Dans quelle barre chacune des pièces doit être débitée et dans quel ordre
Le document PDF ci-dessous présente le principe de l’optimisation Diapason:
Attention, il est à noter que Diapason permet de travailler avec plusieurs longueurs pour optimiser MAIS :
Diapason ne vous proposera pas un résultant mixant plusieurs longueurs de barre (Meilleurs panachage possible “dédicace LMT”)
Diapason déroulera plusieurs calculs d’optimisation pour différentes longueurs de barre et proposera le meilleur résultat pour une longueur de barre donnée.
Comment réaliser une optimisation par REB ?
Principes généraux
Les principes de définition et d’utilisation (exécution) d’une requête REB ne sont pas décrits ici : tous les cadres existants d’utilisation d’une requête REB pour exécuter la règle d’optimisation sont disponibles (document, document répétitif, tableur dynamique); seul le contexte d’exécution de la règle d’optimisation est décrit.
Le schéma suivant décrit le principe de la requête d’optimisation:
Il est à noter que le programme optbarre est à récupérer auprès de la hotline et peut évoluer au fil des versions de Diapason.
Quelles sont les règles d’optimisation dans DIAPASON ?
La règle d’optimisation de base est la suivante :
Une liste de pièces (chaque pièce ayant une longueur) doit être positionnée sur une liste de barres d’une longueur donnée, de manière à optimiser le nombre de barres nécessaires (optimisation matière recherchée).
Le principe général d’optimisation est le suivant (ce principe est appelé ci-dessous OPT_BARRE) :
Toutes les pièces sont triées par longueur décroissantes (cette liste est appelée ci-dessous liste des pièces non positionnées).
On prend la pièce dont la longueur est la plus grande et on la positionne sur une barre.
Puis on prend la pièce suivante et on la positionne sur la barre, ceci jusqu’à ne plus pouvoir positionner de pièce.
Pour la barre constituée,
Si le reste de barre non utilisé par les pièces est inférieur à une longueur de chute maximum autorisé, la barre est considérée constituée : les pièces sont sorties de la liste des pièces non positionnées, et le calcul peut à nouveau débuter au point 1.
Sinon, si le reste de barre non utilisé par les pièces est supérieur à une longueur de chute maximum autorisé, la dernière pièce positionnée sur la barre est enlevée de la liste des pièces non positionnées et une nouvelle itération, en partant de la situation des pièces positionnées est réalisée : ce principe itératif est réalisé jusqu’à ce que le reste de barre soit acceptable ou jusqu’à une limite d’itération (en remontant dans les pièces positionnées, et en les enlevant au fur et à mesure des itérations, en considérant que la première pièce restera toujours positionnée). Si la limite d’itération est atteinte, Diapason sélectionne parmi toutes les solutions rencontrées lors de chaque itération la solution dont le reste doit être supérieur à une nouvelle limite acceptable, ceci en enlevant éventuellement des pièces ayant pu être positionnées dans la solution (les pièces sont enlevées en partant de la pièce la plus petite en allant vers la pièce la plus grande, en sachant que la pièce la plus grande ne pourra jamais être enlevée (limite) : la solution la meilleure est celle dont le reste est le plus proche de la limite acceptable (si la première pièce positionnée fait que le reste est inférieur à la limite acceptable, la solution avec la pièce seule est considérée bonne).
L’algorithme d’optimisation peut optimiser lors d’un même calcul plusieurs types de pièces : à chaque type de pièce, correspond un type de barre. La règle indiquée dans le point ci-dessus est exécutée pour chaque type de barre.
Exemple : le type de barre peut correspondre au profilé de barre et/ou couleur.
Pour un type de barre (auquel correspond une liste de pièces à optimiser), le comportement par défaut de l’algorithme est de considérer que toutes les barres d’un même type utilisées dans le calcul ont une dimension donnée unique (d’un calcul à un autre, cette dimension peut différer pour un même type).
Mais il va être possible de fournir au calcul pour un même type de barre une liste de barre de longueur différente de la longueur défaut associée au type, chaque barre de cette liste disposant d’une longueur donnée (différente de la longueur standard) et d’un nombre de barre à utiliser dans le calcul : cette liste peut correspondre aux restes de barres d’une optimisation d’un précédent calcul. Ce point constitue l’évolution majeure par rapport à l’algorithme d’optimisation de découpe de barres existant dans Diapason (règle R1).
Lors d’un calcul pour un type de barre, Diapason va dérouler le principe de calcul OPT_BARRE autant de fois qu’il y a de longueurs différentes de barres à traiter. L’ordre de considération des barres est le suivant :Les barres à dimensions données sont tout d’abord considérées, par ordre paramétré (par exemple, par longueur croissante).
Puis le reste des pièces non positionnées sur ces barres à dimensions est positionné sur des barres dont la dimension est la longueur standard défaut associée au type de barre.
Exemple :
Cadre calcul : pour un type de barre donné, la longueur standard est de 6 mètres, mais il faut également utiliser 5 barres de 3 mètres, 3 barres de 2 mètres, 7 barres de 5 mètres.
Déroulement calcul : le principe de calcul OPT_BARRE est exécuté sur les 3 barres de 2 mètres, puis sur les 5 barres de 3 mètres, puis sur les 7 barres de 5 mètres ; le principe de calcul OPT_BARRE est exécuté sur le reste des pièces en considérant un nombre illimité de barres de 6 mètres disponibles.
Principes d’exécution de la fonction optimisation de découpe de barre.
L’algorithme d’optimisation de découpe de barre peut être utilisé uniquement dans les requêtes de type REB de Diapason. Son lancement s’effectue par le verbe EXE-PRG-PAR (exécution procédure externe à Diapason). Le nom de la procédure externe est optbarre.
Scénario saisie : EXE-PRG-PAR
Nom : saisir optbarre
Paramètre 1 : variable de type caractère indiquant si une trace du calcul est réalisée . Valeur = « + » indique qu’une trace sera réalisée, toute autre valeur indique qu’il n’y a pas de trace du calcul.
Paramètre 2 : variable de type caractère indiquant le nom du fichier trace.
Exemple : EXE-PRG-PAR optbarre.r ( E: CLO."+" ,E: CLO."/tmp/TraceOpt_2.txt" )
La trace décrit dans un fichier ascii le déroulement de l’optimisation.
Avant de lancer la fonction, des paramètres de calculs doivent être fournis : ces paramètres se présentent sous la forme de 3 listes standards à initialiser :
|
|
|
Après exécution de la fonction, les résultats de l’optimisation sont disponibles dans la structure d’informations suivante :
La liste des pièces WfBarPie est complétée. Pour chaque pièce, les informations suivantes ont été calculées :
BarIdeTyp (type caractère) : type de barre utilisée : soit R pour reste, soit S pour barre standard correspondant au type.
Si la référence est vide, cela signifie que cette pièce n’a pas été placée dans une barre (pour diverses raisons : problème de paramétrage (WfBarTPi non défini correctement), dimension trop grande pour la barre,…).BarResRef (type caractère) : la référence de la barre de reste.
Si BarIdeTyp = S : vide (non utilisé).
Si BarIdeTyp = R : contient la référence barre reste utilisé : lien avec WfBarRes.BarResRef.
BarIdeRef (type entier) : référence barre utilisée : compteur, par type de barre et référence barre reste, identifiant une référence de barre utilisée.
BarIdeOrd (type entier) : un numéro d’ordre de placement de la pièce dans la barre.
La liste des types de barres WfBarTPi est complétée. Pour chaque type de barre considéré dans le calcul, les informations suivantes ont été calculées :
BarStdQtU (type entier) : nombre de barres utilisées durant la simulation. Donné à titre indicatif.
La liste des barres de longueurs non standards WfBarRes est complétée. Pour chaque barre non standard considérée dans le calcul, les informations suivantes ont été calculées :
BarResQtU (type entier) : nombre de barres utilisées durant la simulation. Donné à titre indicatif.
Remarque : cette information permet de maintenir après calcul les barres de longueurs non standards non utilisées durant la simulation, qui devront être complétées de la liste des chutes générées par le calcul (liste WfBarChu).
WfBarChu : liste de chaque chute de barre supérieure à la limite de considération (définie dans WfBarTPi pour les barres standards ou dans WfBarRes pour les restes à considérer dans le calcul). Les informations suivantes sont restituées (remarque : cette liste est automatiquement purgée par Diapason avant chaque calcul):
BarIdeTyp (type caractère) : type de barre utilisée : soit R pour reste, soit S pour barre standard correspondant au type.
BarResRef (type caractère) : la référence de la barre de reste.
Si BarIdeTyp = S : vide (non utilisé).
Si BarIdeTyp = R : contient la référence barre reste utilisé : lien avec WfBarRes.BarResRef.
BarIdeRef (type entier) : référence barre utilisée : compteur, par type de barre et référence barre reste, identifiant une référence de barre utilisée.
BarChuLon (type entier) : la longueur de la chute de barre.
Le paramètre général DOC-DECBAR permet d'indiquer le comportement de l'algorithme d'optimisation de découpe de barres; si la valeur logique de ce paramètre est à vrai, lors de chaque itération pour la recherche d'une solution, DIAPASON remplace la dernière barre considérée par une barre dont la dimension est STRICTEMENT inférieure; si la valeur logique de ce paramètre est à faux (valeur défaut), la comportement de l'algorithme n'est pas modifié : lors de chaque itération pour la recherche d'une solution, DIAPASON remplace la dernière barre considérée par une barre non placée dont la dimension est inférieure ou égale à la dernière barre placée.
Exemple d’optimisation
Cet exemple est fourni pour :
Détailler la structure de donnée nécessaire avant l’exécution de la fonction d’optimisation.
Détailler la trace d’un calcul.
Détailler la structure de donnée initialisée après l’exécution de la fonction d’optimisation.
Exemple structure de données en entrée
Données en entrée (liste initialisées avant exécution instruction EXE-PRG-PAR) :
Détail de la trace du calcul.
Résultat exécution : contenu listes.
Dans la requête REB, les informations suivantes sont disponibles :
Documentations historiques
Optimisation Découpe par REB.doc DecOptBar.xls