Skip to main content
Skip table of contents

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) :

  1. 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).

  1. On prend la pièce dont la longueur est la plus grande et on la positionne sur une barre.

  2. Puis on prend la pièce suivante et on la positionne sur la barre, ceci jusqu’à ne plus pouvoir positionner de pièce.

  3. Pour la barre constituée,

    1. 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.

    2. 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).

Un petit exemple simple?

On utilise des barres de 6m et on veut optimiser la découpe des différentes pièces suivantes:

On ne veut pas avoir des chutes de plus de 40cm !!!

On commence par classer nos pièces par longueur décroissante:

On positionne ensuite la pièce la plus longue sur notre barre de 6m…

Puis les autres, en suivant:

Mais là, on voit qu’on ne peut pas placer la pièce suivante… car elle mesure plus de 50cm. Et on ne veut pas non plus avoir de chutes supérieure à 40 cm !

On enlève donc la dernière pièce de 1m, et on positionne les pièces suivantes à la place:

Cette fois la la chute est de 20cm et elle est acceptable… On va donc découper de cette manière et on utilisera une autre barre pour les pièces suivantes !

  • 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 :

  • WfBarTPi : contient les différents types de barres dans lesquelles doivent être positionnées les pièces du calcul. Pour chaque type de barre, les informations suivantes doivent impérativement être renseignées :

    • BarStdTyp (type caractère) : la référence du type de  barre.

    • BarStdLon (type entier) : la longueur standard de barre pour ce type de barre.
      Exemple : 6000 (indiqué en millimètre, car il s’agit d’un entier) Remarque : il faut travailler en « millimètre », car le système ne traite pas les valeurs inférieures à 1 (ce qui serait probablement le cas si on travaille en « mètre linéaire »).

    • BarStdReb (type décimal) : le taux de chute maximum de chute objectif pour considérer que la barre est optimisée. Sous forme de pourcentage.
      Exemple : un taux de 5 % sur une barre de 6000 millimètres consiste à considérer que si la chute (reste de barre non recouvert par une pièce) est inférieure à 300 millimètres ( = 6000 * 5 / 100 ), la barre est considérée optimisée.

    • BarStdRes (type entier) : la longueur de chute minimum à avoir si aucune solution n’a été trouvée lors de l’optimisation d’une barre. Si cette valeur est nulle ou inférieure à la longueur donnée par BarStdReb, cette valeur n’est  pas considérée dans la calcul.

    • BarStdIte (type entier) : le nombre maximum d’itérations que réalisera Diapason pour optimiser une barre.

    • BarStdChu (type entier) : la longueur standard de chute de barre considérée comme reste à restituer en fin de calcul pour ce type de barre.
      Exemple : une valeur de 500 millimètres indique à Diapason que pour chaque barre dont la chute est supérieure ou égale à 500 millimètres, le reste de cette barre doit être restitué par l’algorithme comme résultat de calcul (voir ci-dessous mise à jour de la liste WfBarRes).
      Remarque : dans le cas d’une gestion de chute minimum (zone BarStdRes non nulle et valide), il est conseillé d’avoir BarStdRes = BatStdChu pour ne voir apparaître sous forme de chute re-utilisable des restes inférieurs à BarStdRes (gestion des cas limites).

  • WfBarPie : contient la liste des pièces faisant l’objet de l’optimisation. Pour chaque pièce, les informations suivantes doivent impérativement être renseignées :

    • PieIdeRef (type caractère) : une référence identifiant la pièce (non utilisé par l’algorithme)

    • BarStdTyp (type caractère) : la référence du type de  barre sur laquelle la pièce doit être positionnée (lien avec l’autre liste pour connaître les caractéristiques des plaques concernées).

    • PieDimLon (type entier) : la longueur de la pièce.

  • WfBarRes : contient les différentes barres de longueur non standards (par exemple : reste d’une précédente optimisation) dans lesquelles doivent être positionnées les pièces du calcul. Pour chaque type de barre, les informations suivantes doivent impérativement être renseignées :

    • BarStdTyp (type caractère) : la référence du type de  barre.

    • BarResNOr (type entier) : numéro d’ordre de considération de la barre, parmi tous les restes du type.

    • BarResRef (type caractère) : la référence de la barre (identifiant restitué dans le calcul).

    • BarResLon (type entier) : la longueur spécifique de barre.

    • BarResQte (type entier) : le nombre  de barre utilisable pour cette longueur spécifique de barre.

    • BarResReb (type décimal) : le taux de chute pour cette barrre autorisé.

    • BarResRes (type entier) : la longueur de chute minimum à avoir : voir BarStdRes.

    • BarResIte (type entier) : le nombre maximum d’itérations pour optimiser une barre.

    • BarResChu (type entier) : la longueur standard de chute de barre considérée comme reste à restituer.

 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.

Les traces sont visibles ici !

***** OPTIMISATION DU DEBIT DES BARRES *****

Debut de Traitement le 15/08/1999 a 12:01:08

############################################################################

 ---- Nouveau Type de Barre : T1 a 12:01:08

  • Piece : T1P13           Lg:    2100 Id:-2101

  • Piece : T1P10           Lg:    1700 Id:-2098

  • Piece : T1P4            Lg:    1600 Id:-2092

  • Piece : T1P8            Lg:    1500 Id:-2096

  • Piece : T1P3            Lg:    1250 Id:-2091

  • Piece : T1P11           Lg:    1200 Id:-2099

  • Piece : T1P5            Lg:    1200 Id:-2093

  • Piece : T1P12           Lg:    1060 Id:-2100

  • Piece : T1P7            Lg:     990 Id:-2095

  • Piece : T1P6            Lg:     950 Id:-2094

  • Piece : T1P9            Lg:     900 Id:-2097

  • Piece : T1P2            Lg:     500 Id:-2090

  • Piece : T1P14           Lg:     140 Id:-2102

  • Piece : T1P1            Lg:     100 Id:-2089

----------------------------------------------------------------------------

 Liste Pieces : -2098,-2092,-2096,-2091,-2099,-2093,-2100,-2095,-2094,-2097,-2090,-2102,-2089

 Type Barre   : R

 Ref. Barre   : T1R1

 Qte Barre    : 2

 Long. Barre  : 1850

 Chute Max.   : 92,5

 Chute/Reste  : 200

 Reste Mini.  : 200

 Max. Iter.   : 5

----------------------------------------------------------------------------

oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

  Traitement de la barre 1

  • Iteration No : 1

      Indice dep.  : 2

      Solution    : -2098,-2102

      Longueur    : 1840

      Chute       : 10

 

      Solution : -2098,-2102

      Longueur : 1840

      Chute .. : 10

oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

  Traitement de la barre 2

  • Iteration No : 1

      Indice dep.  : 2

      Solution    : -2092,-2089

      Longueur    : 1700

      Chute       : 150

 

      Solution : -2092,-2089

      Longueur : 1700

      Chute .. : 150

      Nb Piece Positionnees / Reste Limite : 1

      Reste Memorise : R / T1R1 / 2 / 250

----------------------------------------------------------------------------

 Liste Pieces : -2101,-2096,-2091,-2099,-2093,-2100,-2095,-2094,-2097,-2090,-2089

 Type Barre   : S

 Ref. Barre   :

 Qte Barre    : ?

 Long. Barre  : 6000

 Chute Max.   : 60

 Chute/Reste  : 150

 Reste Mini.  : 0

 Max. Iter.   : 5

----------------------------------------------------------------------------

oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

  Traitement de la barre 1

  • Iteration No : 1

      Indice dep.  : 2

      Solution    : -2101,-2096,-2091,-2100

      Longueur    : 5910

      Chute       : 90

 

      Reprise des Calculs :

      Liste des Recids sur la Barre : -2101,-2096,-2091

      Indice de Reprise des Calculs : 7

 

  • Iteration No : 2

      Indice dep.  : 7

      Solution    : -2101,-2096,-2091,-2095,-2089

      Longueur    : 5940

      Chute       : 60

 

      Solution : -2101,-2096,-2091,-2095,-2089

      Longueur : 5940

      Chute .. : 60

oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

  Traitement de la barre 2

  • Iteration No : 1

      Indice dep.  : 2

      Solution    : -2099,-2093,-2100,-2094,-2097,-2090

      Longueur    : 5810

      Chute       : 190

 

      Solution : -2099,-2093,-2100,-2094,-2097,-2090

      Longueur : 5810

      Chute .. : 190

      Reste Memorise : S /  / 2 / 190

 ********* Resultat *********

 Pie. : Type Barre / Ref. Piece / Longueur / Id. Diapason

 Pos. : Reste ou Std / Ref. Reste / Id. Barre / Pos. Barre

 

 Pie.:T1/T1P10/1700/-2098              Pos.:R/T1R1/1/      1

 Pie.:T1/T1P14/140/-2102               Pos.:R/T1R1/1/      2

 

 Pie.:T1/T1P4/1600/-2092               Pos.:R/T1R1/2/      1

 

 Pie.:T1/T1P13/2100/-2101              Pos.:S//1/          1

 Pie.:T1/T1P8/1500/-2096               Pos.:S//1/          2

 Pie.:T1/T1P3/1250/-2091               Pos.:S//1/          3

 Pie.:T1/T1P7/990/-2095                Pos.:S//1/          4

 Pie.:T1/T1P1/100/-2089                Pos.:S//1/          5

 

 Pie.:T1/T1P11/1200/-2099              Pos.:S//2/          1

 Pie.:T1/T1P5/1200/-2093               Pos.:S//2/          2

 Pie.:T1/T1P12/1060/-2100              Pos.:S//2/          3

 Pie.:T1/T1P6/950/-2094                Pos.:S//2/          4

 Pie.:T1/T1P9/900/-2097                Pos.:S//2/          5

 Pie.:T1/T1P2/500/-2090                Pos.:S//2/          6

 

 ********* Resultat Chutes Memorisees *********

  Liste : Type Barre / Type / Reference / Id. Barre / Long.

  T1 / R / T1R1 / 2 / 250

  T1 / S /  / 2 / 190

********* Situation Restes Initiaux *********

  Liste : Type / Reference / Lon. / QteIni. / QteUti.

  T1 / T1R1 / 1850 / 2 / 2 /

 

Fin de Traitement le 15/08/1999 a 12:01:08

Résultat exécution : contenu listes.

Dans la requête REB, les informations suivantes sont disponibles :

Documentations historiques

DecOptBar.act

DecOptBar.dat

Optimisation Découpe par REB.doc DecOptBar.xls


JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.