FR 3103182 A1 20210521 FR 1912231 A 20191030 Procédé de fusion, au sein d’un entrepôt logistique, de k flux entrants de charges utiles, transportés respectivement par k allées , en un flux sortant de charges utiles, transporté par un collecteur. Les k allées sont de type FIFO, réparties le long du collecteur et numérotées de a 1 à a k dans un sens de déplacement du collecteur. est une distance temporelle entre les allées a i et a k . Le procédé, exécuté par un système de pilotage, comprend : obtention d’un ensemble L comprenant n charges utiles réparties sur les k allées et à injecter sur le collecteur pour former une séquence de sortie ; calcul d’une date t 0 à laquelle la première charge utile de la séquence de sortie passe devant l’allée a k ; calcul de n dates d’injection des n charges utiles sur le collecteur, en fonction de t 0 ; commande du collecteur et des k allées, pour une injection des charges utiles conformément aux dates d’injection. Figure pour l’abrégé : Figure 46 Procédé de fusion, au sein d’un entrepôt logistique, de k flux entrants de charges utiles en un flux sortant. 0 DOMAINE TECHNIQUE Depuis quelques années, l’activité intra-logistique est très fortement impactée par un changement drastique du comportement de la société de consommation et par le développement de nouvelles technologies. L'augmentation constante de la demande oblige les acteurs de la logistique à se montrer de plus en plus réactifs et compétitifs. L'amélioration et l'optimisation des solutions d'acheminements, de stockage et de préparation de commandes sont devenues essentielles. L'entreprise SAVOYE, constructeur d'équipements pour la préparation de commandes, spécialisée dans l'automatisation et l'informatisation des entrepôts logistiques, est en processus continu d’amélioration et d’évaluation de ses solutions. La gestion d'un entrepôt logistique inclut l'approvisionnement, la réception et la gestion des flux et des stocks. Améliorer la durée de trajet d'une commande revient souvent à minimiser sa durée de convoyage. 50% de la durée de préparation d'une commande est consacré à cette opération de convoyage, d’après l’article suivant : De Koster, R., Le-Duc, T., and Roodbergen, K.J., \emph{Design and control of warehouse order picking: a literature review} (2007), European Journal of Operational Research 182(2), 481-501). Il faut donc en premier lieu s'intéresser au problème principal des entrepôts : celui de l’optimisation des flux convoyés afin d'assurer un taux de production le plus élevé possible. Nous allons nous intéresser, plus particulièrement, aux intersections de flux de charges (colis, bacs, containers, etc.). L’objectif est de maximiser le débit du flux final (aussi appelé flux sortant), regroupant divers flux entrants provenant d’endroits différents. 1 PROBLEMATIQUE 1.1 Objet Dans un entrepôt logistique, il arrive en effet que plusieurs flux entrants de charges (aussi appelés flux d’injection) se regroupent pour former un seul flux sortant (aussi appelé flux de sortie). Un flux de charges correspond à une liste de charges séquencées défilant les unes derrière les autres. Ces flux peuvent être transportés par un convoyeur, similaire à un tapis roulant qui déplace dans un sens donné toutes les charges qui se trouvent sur lui en file indienne. Dans la suite de la description, les convoyeurs transportant les flux entrants sont appelés allées et le convoyeur transportant le flux de sortie est appelé collecteur. Les flux d’injection sont répartis tout au long du collecteur. La position des charges composant ces flux d’injection sont connus et identifiables. Pour chaque flux d’injection, nous pouvons choisir l'instant où sa première charge est injectée sur le collecteur. Une répartition séquentielle des flux d’injection permet à une allée située en amont du flux du collecteur de bénéficier d’un nombre de possibilités d’injection plus important qu’une allée située en aval. En effet, cette dernière ne peut déverser ses charges que lorsqu’il y a de la place, laissée libre par les allées plus en amont. Afin d’éviter un déséquilibre d’injection de charges entre les flux entrants, nous souhaitons définir en avance l’ordre des charges une fois toutes placées sur le collecteur (appelé séquence finale ou encore séquence de sortie). L'idée directrice est de pousser le flux du collecteur à la capacité mécanique maximale du collecteur. Pour y arriver, il convient de limiter le nombre d’espace vide de ce dernier. Nous proposons une démarche fondée sur les bonnes dates d’injection des charges, pour constituer un flux final ne comportant pas (ou bien le moins possible) d’espaces vides. Ces dates d’injection sont définies afin de respecter toute séquence finale réalisable, c’est-à-dire respectant les ordres FIFO (First In First Out, « premier entré premier sorti ») des flux d’injection. La solution proposée et décrite par la suite, pour répondre à cette problématique, est nouvelle et inventive au vu des modèles de problèmes d’ordonnancement connus, notamment : Runwey Cheng, Mitsuo Gen and Yasuhiro Tsujimura, A tutorial survey of Job Shop scheduling problems using genetic algorithls --- Partie I. Representation , Ashikaga Institute of Technology, Ashikaga 326, Japan; et Imran Ali Chaudhry and Abid Ali Khan, A research survey: review of flexible job shop scheduling techniques , International transactions in operation research, 2015 1.2 EXEMPLE D’Application Pour résumer, le système étudié est composé de flux d’injection (flux entrants) transportés par des allées (ensemble de convoyeurs) et d’un collecteur (autre convoyeur) regroupant ces flux d’injection en un seul flux final (flux sortant). Le pilotage proposé et décrit par la suite s’applique notamment, mais non exclusivement, à un collecteur de type « convoyeur continu sans accumulation » ou à un collecteur de type « trieurs » (« belt tray », « tilt tray », etc.). Ce pilotage permet de respecter n’importe quelle séquence finale réalisable. Nous donnons donc la solution correspondant au débit optimal par rapport à une séquence finale donnée. Si aucune séquence finale n’est souhaitée, nous savons obtenir le débit maximal sur un collecteur complètement libre pour regrouper ces flux d’injection. Cependant, dans certains cas, des obstructions peuvent déjà occuper des places sur le collecteur. Par obstruction d’un pas temporel du collecteur, on entend notamment, mais non exclusivement, une charge perturbatrice provenant d’un flux perturbateur, différent des flux d’injection. Une obstruction n’est pas obligatoirement une charge perturbatrice mais peut également être un endroit du collecteur qui est abimé, réservé, etc. Dans ces cas, la gestion des flux d’injection doit prendre en compte de telles obstructions. Dans le cas particulier où les charges perturbatrices proviennent d’un ou plusieurs flux perturbateurs, on distingue deux types de flux perturbateurs. Un flux perturbateur est dit « subi » si l’injection sur le collecteur des charges perturbatrices le composant ne peut pas être contrôlée par le système de pilotage (ces charges perturbatrices arrivent sans tenir compte de l’environnement). Par opposition, un flux perturbateur est dit « contrôlé » si l’injection sur le collecteur des charges perturbatrices le composant peut être contrôlée par le système de pilotage. Notre proposition de pilotage supporte ces différents types de flux perturbateurs (subis ou contrôlés) et donne une solution optimale incluant la gestion des flux perturbateurs à contrôler. Un exemple (illustratif et non limitatif) d’application concret se trouve dans la solution GTP Intelis PTS (Goods To Person Intelis Picking Tray System) proposée par l’entreprise SAVOYE. C’est une solution globale de préparation de commande automatisée dans laquelle un système automatisé de stockage et déstockage à navettes (appelé Intelis PTS) 3 permet d’alimenter à très haute cadence des postes de préparation (appelés postes GTP) 4. Le rôle du système automatisé (Intelis PTS) est donc de stocker, faire entrer et sortir des charges comprenant des articles nécessaires au bon remplissage des commandes au niveau des postes GTP. Le système automatisé est composé de plusieurs allées de stockage (« PTS aisles » en anglais, à ne pas confondre avec les allées (convoyeurs) transportant les flux entrants, voir explications ci-après), chacune composées de navettes et d’ascenseur permettant le va-et-vient de ces charges sur des convoyeurs respectivement d’entrée 51, 52 et de sortie 21, 22. Ces différents convoyeurs d’entrée et de sortie sont tous reliés par un collecteur 1 qui permet d’alimenter les postes de préparation 4 comme le montre la (exemple avec trois postes de préparation 41, 42 et 43). Pour faire le lien avec la définition de contexte qui précède, les convoyeurs de sortie 2 1 , 2 2 du système automatisé 3 forment les convoyeurs (aussi appelés « allées ») transportant les flux entrants de charges utiles, ces flux entrants étant fusionnés sur le collecteur 1 en un flux sortant de charges utiles. E n d’autres termes, le va-et-vient des charges qui entrent et sortent du système automatisé 3 est géré par le biais du collecteur. Nous sommes donc en présence de plusieurs flux d’injection de charges (aussi appelés flux entrants dans notre problématique) sur les convoyeurs de sortie 2 1 , 2 2 du système automatisé 3, tous injectés sur le collecteur. De plus, lorsque les flux de charges qui retournent dans le système automatisé 3 (via les convoyeurs d’entrée 5 1 , 5 2 ) passent par le biais du même collecteur 1, nous avons un exemple de flux perturbateurs, appelés flux retour dans ce cas particulier. Ces flux perturbateurs sont très intéressants car ils disparaissent après le passage de toutes les zones d’injection, créant ainsi des espaces vides pour certains flux d’injection mais pas d’autres. Comme détaillé par la suite, un mode de réalisation de la solution proposée vise à contrôler, autant que faire se peut, ces flux perturbateurs pour remplir ces espaces vides plutôt que de les subir. Les solutions proposées dans cet exemple d’application sont décrites dans la suite du document. 1.3 Solutions actuelles 1.3.1 Solutions existantes Solution connue A, avec un séquencement final souhaité : dans ce cas, l’injection des charges sur le collecteur suit un ordre bien défini correspondant à la séquence finale attendue après fusion des charges. Si cette séquence finale souhaitée en sortie du collecteur est par exemple formée par les charges ayant pour numéros de séquence 1, 2, 3, etc. (appelées ci-après « charge 1 », « charge 2 », etc.) ; la charge 1 sera injectée en priorité, suivie de la charge 2 seulement si la charge 1 est en aval de la charge 2 sur le collecteur, suivie de la charge 3 seulement si la charge 2 est en aval de la charge 3 sur le collecteur, et ainsi de suite. Solution connue B, sans séquencement final souhaité : chaque première charge de chaque flux d’injection est injectée sur le collecteur dès lors qu’il y a de la place dans sa zone d’injection. 1.3.2 Inconvénients liés à ces solutions Solution connue A : un inconvénient de la solution connue A est qu’elle laisse des espaces (vides) entre les charges, ce qui ralentit le flux sortant par rapport à la capacité mécanique du collecteur. Un espace vide apparaît entre deux charges successives dans la séquence finale dès lors que la charge précédente dans la séquence finale appartient à un flux d’injection plus en aval que la charge suivante. De plus, la longueur de ces espaces vides est proportionnelle à la distance des allées (convoyeurs) d’injection de ces deux charges successives. Plusieurs étapes de cette solution connue A sont montrées par la . Dans cet exemple, nous considérons la séquence finale souhaitée 1, 2, 3, 4. Afin de respecter cette séquence, il n’est pas possible d’injecter directement les charges 1, 2, 3 et 4 en même temps sur le collecteur. A l’étape 0, l’installation est déclenchée. Instantanément les charges 1 et 2 sont injectées sur le collecteur. Cette opération est rendue possible car le flux d’injection de la charge 1 est en aval du flux d’injection de la charge 2. Les charges 1 et 2 sont sur le collecteur, séparées par la distance qu’il y a entre les allées (convoyeurs) d’où elles proviennent. Le collecteur avance sans changement jusqu’à l’étape 1, où la charge 2 passe devant la zone d’injection du flux contenant la charge 3. A partir de ce moment, la charge 3 est injectée sur le collecteur directement derrière la charge 2. Notons que l’espace vide laissé entre les charges 1 et 2 est resté le même et ne sera jamais comblé. A cette même étape 1, la charge 4 est également injectée sur le collecteur avec un espace entre elle et la charge 3. L’étape 2 montre les espaces vides laissés par cette méthode connue d’injection. Solution connue B : un inconvénient de la solution connue B est que l’allée (le convoyeur) le plus en aval injectera ses charges en continu alors que les autres devront se contenter de remplir les espaces libres restants ; un autre inconvénient de la solution connue B est qu’elle propose un pilotage qui ne fonctionne, dans la réalité, que lorsque le collecteur (transportant le flux sortant) a une vitesse bien plus grande que celle des allées (convoyeurs) transportant les flux entrants (autant de fois plus grande qu’il y a de flux entrants à injecter). Dans la solution connue B, les vitesses des allées (convoyeurs) doivent donc être plafonnées. Or dans le contexte actuel, le nombre de flux d’injection augmente plus vite que les capacités mécaniques du collecteur. Cette solution connue B ne suffit plus, et ne contrôle pas l’optimisation du débit du flux de sortie. 2. Paramètres du pilotage Comme déjà mentionné plus haut, le système étudié est composé d’un système de drainage (convoyeur appelé collecteur), de plusieurs autres convoyeurs (appelés allées) et de charges. Ce système est dynamique, les charges sont transportées par les allées, injectées sur le collecteur puis transportées par celui-ci. Dans un premier temps, considérons l’état de ce système en figeant la position de chaque charge présente dans celui-ci à un instant donné. Définissons les sous-systèmes figés de ce système afin de pouvoir calculer les futures dates d’injection de certaines charges. Cela correspond à la résolution du problème statique, nous étudierons dans la Section 4 comment piloter ce système de façon dynamique. La est une image illustrant deux allées (convoyeurs) 21, 22, un collecteur 1 et une charge (carton) 6. La est une vue modélisée des éléments apparaissant sur l’image de la (mêmes références numériques). 2.1 Notations Tableau 1. Tableau récapitulatif des notations Nombre de flux d’injection (flux entrants) du système k allées (convoyeurs) transportant chacune un ensemble ordonné de charges à un instant donné Nombre de charges présentes sur l’allée (convoyeur) a i Nombre total de charges à injecter sur le collecteur Ensemble des charges à injecter sur le collecteur Charge , provenant de la position dans l’allée Séquence de sortie souhaitée, ordonnant toutes les charges de Position de la charge dans la séquence de sortie charge de la séquence , appartenant à signifie le calcul de pour la charge Ensemble des charges placées en première position des allées situées entre l’allée et l’allée contenant la première charge de la séquence (soit ) Date de départ de la charge , coïncidant avec le point de départ, c’est-à-dire l’instant où la charge doit quitter son allée (convoyeur) Date d’injection de la charge sur le collecteur, coïncidant avec le point d’injection, où la charge arrive physiquement sur le collecteur Durée nécessaire pour parcourir la distance entre le point de départ et le point d’injection pour une charge de l’allée Unité de temps correspondant au découpage du collecteur en pas temporels (appelés aussi positions temporelles ou créneaux temporels) Date à laquelle nous pouvons commencer à injecter les charges sur le collecteur(date matérialisée par le premier emplacement libre sur celui-ci). Date à laquelle la première charge de la séquence de sortie souhaitée passe devant l’allée Distance en « pas » séparant l’allée et l’allée Distance en « pas » séparant l’allée et l’allée 2.1.1 Notations par allées du système de convoyage Pour une configuration du système à un instant donné, chaque allée comprend un ensemble ordonné de charges. Soit le nombre d’allées dans notre système, chaque allée est numérotée de à dans le sens de déplacement du collecteur. Ces allées possèdent respectivement un nombre de charges, représenté par une liste First In First Out (FIFO) devant être injectée une à une sur le collecteur. Un exemple est donné sur la figure 4. Le sens de déplacement du collecteur 1 est de droite à gauche, direction indiquée par la flèche. Chaque allée est numérotée et comprend des charges ordonnées, qui devront être injectées une par une, de bas en haut, sur le collecteur. Dans cet exemple, nous avons donc avec et 2.1.2 Notations des charges à injecter Il y a charges (cartons, bacs, containers, etc.) au total à injecter sur le collecteur, provenant des différents flux d’injection. Notons l’ensemble de ces charges et une charge appartenant à , provenant de la position dans l’allée . De plus appelons la séquence de sortie dans laquelle ces charges doivent être ordonnées une fois toutes injectées sur le collecteur. La fonction donne la position de la charge dans cette séquence. Chaque charge peut ainsi être identifiée par un numéro «de séquence » unique, entre et , correspondant à sa position dans la séquence de sortie souhaitée ( ). C’est de cette façon que nous identifierons les charges par la suite. Remarquons que dans ce cas, il est facile de vérifier si la séquence est réalisable : il suffit que chaque allée ait une liste ordonnée de charges identifiées par des numéros de séquence croissants, pas forcément consécutifs. Spécifions maintenant l’ensemble regroupant spécialement les premières charges attendues dans la séquence de sortie finale, placées en première position des allées avec le numéro de l’allée contenant la première charge de cette séquence . Cet ensemble regroupe toutes les charges pouvant être la première charge de la séquence à être injectée sur le collecteur. En effet, une charge en première position dans une allée placée en amont de l’allée comportant la première charge de la séquence est susceptible d’être injectée en premier, tout en se retrouvant derrière la première charge dans le flux final du collecteur. Cependant, une charge en première position dans les allées en aval de l’allée comportant la première charge ne sera jamais injectée avant cette première charge sur le collecteur. La figure 5 montre le schéma équivalent à celui de la figure 4 en prenant la séquence réalisable Dans cette exemple, , donc chaque charge a un numéro de séquence unique permettant de l’identifier tout en connaissant rapidement sa position souhaitée dans la séquence La figure 5 permet immédiatement de voir que la séquence choisie est réalisable, en effet et De plus, nous avons l’ensemble particulier 2.1.3 Dates de départ et dates d’injection Pour rappel, chaque allée correspond à un flux d’injection à un instant donné, représenté comme une colonne FIFO collée au collecteur. Cependant, dans l’entrepôt, il se peut que la charge en attente d’injection soit éloignée du collecteur. Appelons point de départ l’endroit où cette charge attend l’ordre de départ de son allée (convoyeur), illustré par un point accolé à la colonne FIFO, et point d’injection l’espace du collecteur touché en premier par la charge en cours d’injection réelle sur celui-ci, illustré par un point accolé au collecteur sur la . Dans les schémas du système en allées, ces deux points sont confondus et représentés en noir sur la figure 7. En réalité, ces points sont souvent différents et on associe la durée nécessaire à une charge du flux pour passer d’un point à l’autre par (voir figure 6). La date de départ de la charge lorsque celle-ci doit quitter son allée (convoyeur) est relié à sa date d’injection sur le collecteur (coïncidant avec le point d’injection) par la simple formule suivante : De ce fait, sans perdre de généralité par la suite, nous allons présenter uniquement le calcul des dates d’injection. 2.2 Structure de donnée 2.2.1 Découpage du système de drainage (collecteur) : unité de temps (pas temporel) Le système de drainage (ou collecteur) sera considéré comme un système avec des pas temporels (comme un trieur), appelé aussi créneaux ou positions . La illustre le découpage en pas (positions ou créneaux) temporels du collecteur. Ainsi, notre objectif d’obtenir un débit maximal avec un flux sortant ordonné revient à remplir les pas du collecteur comme le montre la . Nous allons considérer une unité de temps correspondant à ce pas temporel qui subdivise le collecteur, suivant sa vitesse de déplacement. Une unité de temps, appelée « un pas temporel », correspond à la durée nécessaire pour qu’un point du collecteur se déplace exactement de la distance physique d’une position. La distance définie pour cette position correspond à la taille d’une charge, ajoutée d’une distance de sécurité. Cette distance de sécurité est à ajuster suivant les besoins métier et afin de respecter la condition suivante (illustrée sur la ) : L’unité de temps doit obligatoirement être supérieure à la durée que met une charge pour être injectée sur le collecteur depuis le moment où une partie de la charge touche le collecteur jusqu’au moment où toute la charge est placée correctement sur le collecteur (c'est-à-dire dans le flux de celui-ci). 2.2.2 Distance du système d’injection Comme illustré sur la figure 11, nous définissons correspondant au nombre de pas temporels du collecteur (système de drainage) entre l’allée et la dernière allée , comme le montre les figures suivantes, avec . Comme illustré sur la figure 12, ce nombre peut ne pas être un entier. . La distance temporelle entre deux allées a i et a j est notée , le deuxième indice étant l’allée par rapport à laquelle on se situe. 2.2.3 Modèle Job Shop associé Tableau 2. Notation du modèle Job Shop } Ensemble de jobs (tâches)associés à un modèle en Job Shop. La charge de la séquence est notée la place de l’allée et est associée au job Ensemble des machines du modèle en Job Shop. L’allée est associée à la machine . Liste des opérations consécutives associées au job , sachant que l’opération doit s’effectuer sur la machine . Pour chaque séquence de sortie , nous modélisons le système en un modèle Job Shop à tâches unitaires, à jobs et machines. Chaque charge de la séquence charge de cette séquence) est associée à un job et chaque allée est associée à une machine Chaque job associé à une charge contenue dans l’allée doit suivre une liste ordonnée de opérations unitaires . Une opération notée est une tâche unitaire du job à effectuer spécifiquement sur la machine . Un job peut être affecté à une seule machine à la fois et une machine peut effectuer une seule opération à la fois. Nous cherchons à planifier ces jobs sur les machines en respectant l’ordre donné par leur liste respective d’opérations. L’objectif est de les planifier afin de minimiser la durée totale d’exécution de tous ces jobs. 3. Détermination de LA date d’injection de chaque charge, pour un collecteur traitant uniquement les flux d’injection Nous considérons dans cette partie un collecteur traitant uniquement les flux d’injection. Le collecteur est entièrement vide et prêt à récupérer les flux d’injection. Seule la fusion de ces flux d’injection est à contrôler pour injecter correctement leurs charges afin d’avoir un flux final fluide, continu et correspondant à la séquence de sortie souhaitée. 3.1 Solution pour des allées consécutivement bien répartieS Afin de simplifier les choses, nous supposons que les flux d’injection sont répartis de manière consécutive sur le collecteur, de sorte qu'il faille un intervalle de temps pour qu'une charge sur le collecteur passe d'une zone d’injection à la suivante comme le montre la figure 13. Ce cas simplifié correspond à pour tout . 3.1.1 Modélisation du système en ordonnancement d’ateliers job shop Nous allons expliquer la modélisation du système en problème d’ordonnancement d’atelier Job Shop dans ce cas particulier. Chacune des charges est associée à un job , numérotation en concordance avec le numéro de séquence de la charge. Ainsi, si correspond à la charge dans la séquence alors son job associé est Les opérations de ces jobs doivent être traitées par un ensemble de machines . Une opération peut être affectée à une seule machine à la fois. Chaque machine est associée à une allée (c’est-à-dire à un flux d’injection), ne pouvant effectuer qu’une seule opération à la fois. Rappelons que ces allées sont numérotées , de l’amont vers l’aval (c’est-à-dire en suivant le sens de convoyage du collecteur). Ainsi, une charge étant injectée sur le collecteur depuis l’allée passera devant chaque allée avec dans . Ce mécanisme est représenté par le fait que chaque job associé à une charge de l’allée se compose de opérations unitaires à traiter consécutivement sans attendre. Chaque opération est à planifier sur une machine spécifique. Ainsi, si l'opération (traitée par la machine ) commence à l'instant , l’opération (traitée par la machine ) commence à l’instant , etc., et enfin l'opération (traitée par la machine ) commence à l'instant . Si l’instant de début de la première opération de ce job correspond à la date d'injection dans le collecteur, les instants de début des opérations suivantes (c.-à-d. ) représentent les instants auxquels la charge est devant les allées suivantes. Notez que chaque tâche est composée d’au moins une opération sur la dernière machine (puisque chaque charge passe devant au moins la dernière allée ). La séquence des opérations planifiées sur la machine correspond exactement à l’ordre dans lequel les charges passeront devant la dernière allée et leur date de départ correspond à l’instant où ces charges passeront devant cette dernière allée d’injection. C’est pourquoi, si la charge est devant la charge dans la séquence de sortie donnée, la dernière opération de doit commencer avant la dernière opération de sur . L’objectif de ne pas avoir d’espace sur le collecteur revient à ne pas avoir de temps mort entre les traitements des opérations de la machine 3.1.2 Principe de l’algorithme permettant d’atteindre les dates d’injection Le problème de planification proposé ci-dessus peut être résolu par l’algorithme suivant. Pour commencer, en supposant que la première charge de la séquence provienne de l’allée les opérations associées à ce job commencent aux instants . Ensuite, les opérations du job correspondant à la prochaine charge de la séquence seront planifiées d'abord en exécutant l'opération à traiter sur la machine . Cette opération sera planifiée juste après (sans temps mort) l’opération précédente programmée sur . En supposant que cette opération commence à l'instant , l'opération sur la machine (si elle existe) est planifiée à l’instant , et ainsi de suite, jusqu'à ce que toutes les opérations soient programmées. Cette procédure est appliquée de manière itérative sur chacun des jobs suivants de la séquence donnée. Les dates d’injection réelles sur le collecteur sont déduites directement à partir du début de la première opération de chaque job. L’unité de temps utilisée est celle défini ci-dessus (« le pas temporel » du collecteur). 3.1.3 Calcul des dates d’injection par formule Maintenant que nous avons décrit comment fonctionnait l’algorithme de résolution du problème d’ordonnancement, nous pouvons déduire la formule permettant de calculer les dates d’injection. Les notations utilisées dans la formule ci-après sont celles du tableau récapitulatif discuté plus haut. Fixons l’origine du temps à la date d’injection, au plus tôt, de la (ou les) toute(s) première(s) charge(s) injectée sur le collecteur. Dans notre système, l’emplacement libre qui va recevoir cette charge est donc placé juste devant l’allée de celle-ci à l’instant 0. Ainsi, nous calculerons la date correspondant à la date au plus tôt à laquelle la première charge de la séquence passe devant l’allée Preuve : Soit 0 la date à laquelle l’injection des charges commence. Soit la date à laquelle la première charge de la séquence (c’est-à-dire passe devant l’allée Nous remarquons que la première charge injectée sur le collecteur est forcément une charge en tête d’allée, dans une allée située entre l’allée et celle de , comprise. Soit ce sous-ensemble de charge. Donc, pour toute charge , nous savons que si elle était injectée à la date , elle passerait devant l’allée à la date Nous avons puisque nous ne pouvons pas injecter de charge avant la date 0. Or par définition de la charge passera devant l’allée à la date Soit . Nous en déduisons que pour tout Nous cherchons la date au plus tôt permettant de vérifier toutes ces contraintes, donc : L’algorithme 1 ci-après donne les dates d’injection , c’est-à-dire les dates d’entrée de chaque charge sur le collecteur. L’unité de temps utilisé est le « pas temporel » défini plus haut. L’algorithme 1 donne la formule pour calculer ces dates d’injection dans le cas où les flux s’injectent à chaque emplacement consécutif sur le collecteur (voir ). 3.1.4 Exemple En ordonnancement, le diagramme de Gantt est un outil très utile pour visualiser dans le temps les opérations composant un job. Cet outil va nous permettre de représenter graphiquement l’avancement du travail de chaque machine et nous montrer visuellement la solution apportée à notre problème. De plus, nous pourrons voir le lien entre les résultats obtenus par l’algorithme permettant d’atteindre les dates d’injection et la formule associée. Soit la configuration du système comme suit (voir la figure 14) : allées comprenant deux ou trois charges. Chaque charge est identifiée par un numéro de séquence unique grâce à la séquence de sortie C’est une séquence réalisable. Dans ce cas simplifié, nous pouvons représenter la solution du Job Shop dans un diagramme de Gantt tel que chaque ligne correspond à une machine. Le fait que chaque charge passe par les machines consécutivement est représenté par le fait que chaque numéro de séquence de charge apparait sur des cases consécutives de gauche à droite dans le tableau (voir figure 15). De plus, la première apparition de chaque charge indique sa date d’injection donnée par la formule en callant l’échelle de temps à l’instant 0 défini plus haut. Pour rappel, la date 0 correspond à l’instant de la première injection de charge possible. Nous pouvons même placer la date selon sa définition et la retrouver par calcul. Pour rappel, est la date à laquelle la première charge de la séquence ( ) passe devant l’allée , soit le chiffre 1 lorsque l’opération du job 1 est opéré par la machine . Nous retrouvons la séquence souhaitée, sans espace vide, sur la machine et la date d’injection de chaque charge est donnée par la lecture de la case de première apparition (de la gauche vers la droite) du numéro de séquence donnant l’identification de cette charge. 3.2 Solution pour des allées avec une répartition quelconque Maintenant que le cas simplifié a été vu, considérons le cas général du collecteur ne traitant que les flux d’injection. Les flux ne s’injectent donc plus consécutivement à chaque pas temporel du collecteur mais sont répartis de façon quelconque. Les distances entre allées sont connues. C’est la durée de parcours qu’il y a entre le point d’injection de l’allée et la dernière allée qui nous intéresse particulièrement, elle sera notée (comme déjà défini plus haut). 3.2.1 Calcul des dates d’injection par formule L’algorithme 2 ci-après prend en compte cette notion de distance temporelle quelconque entre allées et répond ainsi au cas général du collecteur dédié aux flux d’injection. Considérons de nouveau la date 0 comme étant la date de la première injection possible. Cette fois, une charge de l’allée injectée à la date arrive devant l’allée à la date Ainsi, nous obtenons la date au plus tôt à laquelle la première charge de la séquence passe devant l’allée par la formule 3.2.2 Exemple Prenons un exemple similaire à celui du paragraphe 3.1.4 en écartant cette fois les allées. Soit la configuration du système comme suit (voir la figure 16) : allées comprenant deux ou trois charges. Chaque charge est identifiée par un numéro de séquence unique en fonction de la séquence de sortie C’est une séquence réalisable. Nous connaissons la distance de chaque allée par rapport à la dernière : Nous donnons sur la figure 17 la représentation de la solution sous forme de diagramme de Gantt. Cette fois, il faut espacer deux machines consécutives d’autant de lignes qu’il y a de « pas temporels » entre les deux allées consécutives correspondantes. C’est pourquoi la solution est donnée dans un tableau à 13 ( lignes. Par calcul, nous avons , que nous retrouvons bien par définition à l’instant sur le graphique. Nous donnons ici un exemple avec des distances entières entre allées pour faciliter la compréhension, mais il serait possible de prendre des valeurs non entières en nombre de « pas temporels ». 3.3 Description d’un mode de réalisation particulier 3.3.1 Listes d’éléments à regrouper Chaque flux d’injection (flux entrant) est représenté par une allée contenant une liste de charges dans un ordre FIFO. Le nombre d’allées peut varier de à , et la liste de l’allée contient charges (h i pouvant être nul). Il y a, en tout, charges à fusionner sur le collecteur. Prenons par exemple (voir figure 18) : et De plus, pour rester dans le cas général, nous prendrons les résolutions du cas général avec et 3.3.2 Construction d’une séquence par défaut Lorsque la séquence finale des charges sur le collecteur n’a pas d’importance, il suffit de définir de manière quelconque une séquence réalisable ordonnant les charges. Nous pouvons concevoir différentes façons de définir une séquence de sortie « par défaut » : Sortir alternativement une charge de chaque allée, Sortir les charges en fonction de leur arrivée dans les flux d’injection, Prendre la première charge de chaque allée tirée aléatoirement, Etc. 3.3.3 Une séquence donnée par un calcul de minimisation de désordre La figure 19 illustre un exemple de séquence ( ) résultant d’un calcul de minimisation de désordre. Les numéros indiqués ne sont pas des numéros de séquence au sein de la séquence finale, mais des numéros d’ordre par rapport à des commandes à préparer. Il est possible de prendre cette séquence comme séquence de sortie donnée pour l’algorithme qui calcule les dates d’injection. Cette séquence est obligatoirement réalisable et minimise le désordre. Nous obtenons un débit maximal avec un désordre minimum pour le flux sortant du collecteur. Comme il est toujours possible d’attribuer un numéro de séquence unique de 1 à n à toutes les charges, correspondant à leur position dans la séquence finale , nous afficherons les charges avec ces numéros de séquence pour les identifier et les caractériser entièrement (cf. figure 20). Les figures 19 et 20 sont équivalentes. La séquence de sortie permet de bien voir l’ordre croissant des charges sur chaque flux d’injection (preuve de la faisabilité de la séquence). Gardons cette configuration pour poursuivre l’exemple. 3.3.4 Construction de Dans notre exemple, rassemble les charges numérotées et . Nous recherchons le maximum entre , nous obtenons 3.3.5 Calcul des dates d’injection (par formule) 3.3.6 Explication du résultat en images Les date s d’injection étant données dans l’unité de temps (c'est-à-dire le pas temporel du collecteur), cela revient visuellement à voir le collecteur se déplacer d’un pas à chaque unité de temps. Si nous visualisons une image du système à chaque unité de temps, chaque charge apparaîtra pour la première fois sur le collecteur à la date (sa date d’injection). La configuration du collecteur à l’instant 0 (cf. figure 21) correspond à la première injection réelle d’une charge, ici la charge 1 ( , même si ça ne sera pas toujours le cas. Attention, en effet, la première charge de la séquence n’est pas obligatoirement la première charge à être injectée sur le collecteur. La charge 2 doit être injectée à l’instant , ce qui veut dire qu’elle est sur le collecteur après le déplacement d’un pas du collecteur, comme le montre la . La charge 3 est injectée à l’instant , comme le montre la . Les charges 4 et 5 sont injectées à la date 3, comme le montre la Et ainsi de suite. 4. deroulement des batchs Le calcul des dates d’injection se fait sur un état donné du système. Le système évoluant dans le temps, une première possibilité consiste à refaire ce calcul à chaque fois qu’une nouvelle charge arrive dans le système car elle n’a pas encore sa date d’injection définie. Toutefois, au lieu de lancer aussi régulièrement l’algorithme de calcul ce qui n’est pas avantageux pour diverses raisons (consommation de ressources de calcul notamment), il est préférable de procéder par batchs (lots). Un tel fonctionnement dynamique par batchs est expliqué dans cette Section. 4.1 Batch de travail Nous voulons un flux (flux sortant) continu et optimal sur le collecteur tout au long d’une journée de travail. Nous venons de voir comment définir une date d’injection optimale (afin de parvenir à notre objectif) sur des charges présentes dans les allées à un instant donné, fixé. Il faut maintenant réaliser cet objectif pour toutes les charges arrivant par les flux d’injection, à tout instant. Nous proposons d’appeler l’algorithme de calcul des dates d’injection à l’instant nécessaire pour obtenir un remplissage fluide et continu du collecteur. Pour ce faire, dans cette section, nous définissons comment remplir les listes FIFO de chaque allée pour la configuration du système à un instant fixé. Ensuite, nous définissons ce qu’est un batch pour finir par expliquer la succession du traitement de deux batchs sans laisser d’espace vide sur le collecteur. 4.1.1 Remplissage des listes FIFO des allées Dans chaque allée, il y a une liste de charges avec un numéro de séquence unique pour chaque charge. Ces numéros de séquence des charges sont obligatoirement croissants par allée, mais pas forcément consécutifs (dû à la définition de la séquence réalisable à donner). La illustre un exemple de listes FIFO associées à trois allées. La illustre la séquence finale réalisable, attendue sur le collecteur. Pour rappel, chaque allée correspond à un flux d’injection, représenté comme une colonne FIFO collée au collecteur, avec son point d’injection défini par un point noir sur les schémas. La liste FIFO des charges prise en compte dans une allée pour une configuration fixée du système ordonne les charges en attente au point d’injection de cette allée respectant les conditions suivantes : Les charges prises en compte lors de l‘analyse sont en attente au point d’injection (représenté par un point noir sur les figures suivantes) ( figure 27 : première charge du flux collée au point d'injection et donc faisant partie de la liste FIFO ; figure 28 : première charge du flux non collée au point d'injection et ne faisant donc pas partie de la liste FIFO) ; Les charges prises en compte lors de l’analyse sont en attente « continue » derrière une première charge faisant partie de la liste FIFO ( figure 29 : deuxième charge en attente continue derrière une première charge faisant partie de la liste FIFO ; figure 30 : charge en attente continue derrière une première charge ne faisant pas partie de la liste FIFO). 4.1.2 Définition des batchs Un batch (lot) de travail correspond à l’ensemble des charges des listes FIFO de toutes les allées (c’est l’ensemble de n charges) Toutes ces charges correspondent à la photo statique de notre système à un instant donné, respectant les règles du paragraphe précédent. Les charges présentes dans le système à cet instant, ne respectant pas les règles de remplissage des listes FIFO, seront affectées plus tard à un autre batch. Une fois les charges du batch toutes affectées, le calcul des dates d’injection pour ce batch est effectué. L’injection de ces charges se fait au fur et à mesure que le temps avance, en respectant les dates d’injection calculées au préalable. Le système évolue au cours du temps, sans appeler de nouveau l’algorithme de calcul des dates d’injection, bien que de nouvelles charges soient éligibles aux règles de remplissage des listes FIFO ou même que de nouvelles charges apparaissent dans le système. Toutes ces dates d’injection sont calculées pour réussir à mettre chaque charge du batch à sa place réservée sur le convoyeur, respectant l’ordre de la séquence finale souhaitée tout en minimisant les espaces vides. Appelons la dernière place réservée pour la dernière charge de ce batch donné par l’ordre de la séquence. Après cette place , le collecteur est libre. C’est au moment où cette dernière place (peut être encore vide) passe devant le premier flux d’injection (première allée) qu’un nouveau batch va être défini. Le batch suivant se construira de la même manière, mais sur la nouvelle photo statique du système à cet instant fixé (avec comme premier emplacement libre le pas du collecteur accolé à cette dernière place ). A noter, dans une implémentation particulière, que si un nouveau batch est défini avant que le batch précédent soit entièrement exécuté, les dernières charges de la séquence de sortie du batch précédent peuvent être considérées pour le nouveau batch (batch suivant). Dans ce cas, si une charge à la position i dans la séquence de sortie est remise dans le batch suivant, alors toutes les charges de position supérieure à i aussi). Cependant, il y a un intérêt à reprendre des charges uniquement si la séquence finale souhaitée a changé. Dans ce cas, la dernière place considérée sera la place de la dernière charge non reprise dans le batch suivant. Pour les charges reprises, les dates d’injection déjà définies dans le batch précédent seront obsolètes et remplacées par les dates d’injection calculées pour le batch suivant. Dans l’exemple illustré sur la , le premier batch sera composé des charges : 1, 2, 3, 4, 5, 6, 7, 8, 9. Le batch suivant pourra être : xx, yy ou 9, xx, yy,…, ou encore 7, 8, 9, xx, yy,… (mais pas 8, xx, yy, ni 7, 9, xx, yy). 4.2 Traitement dynamique des batchS Le traitement de chaque batch est réalisé de manière continue et en série (batch1, batch2 etc…). Le traitement d’un batch est un calcul statique de toutes les dates d’injection des charges composant ce batch. La liaison et la construction de ces batchs permet de donner une solution globale au problème de fusion de flux entrant en un flux sortant, dans les entrepôts, qui est un problème dynamique. 4.2.1 Calcul des dates d’injection d’un premier batch La figure 32 illustre un exemple de premier batch pour une séquence de sortie , avec les charges 2, 6, 7 et 8 (pour lesquelles les dates d’injection sont notées Temps 4, Temps 8, Temps 9 et Temps 10 respectivement) sur l’allée a 3 , les charges 1, 3 et 5 (pour lesquelles les dates d’injection sont notées Temps 0, Temps 2 et Temps 4 respectivement) sur l’allée a 2 et les charges 4 et 9 (pour lesquelles les dates d’injection sont notées Temps 0 et Temps 5 respectivement) sur l’allée a 1 . 4.2.2 Injection dans le temps du batch Tant que le pas temporel du collecteur attendant le numéro de séquence le plus élevé (ici n° 9, entouré par un cercle sur les figures 32 et 33) n’est pas arrivé devant l’allée d’injection la plus en amont (c’est-à-dire l’allée ), aucun traitement du batch suivant n’est réalisé. Le traitement des charges du premier batch continue au fur et à mesure que le temps passe, injectant ces charges à la date d’injection calculée au préalable comme le montre la partie haute et la partie basse de la . 4.2.3 Formation du prochain batch et calcul statique des futures dates d’injection de celui-ci Lorsque le dernier pas marqué de la dernière charge de la séquence du premier batch arrive devant l’allée , c’est le signal pour construire le prochain batch. Ce batch est constitué de toutes les charges valides de chaque liste FIFO de chaque allée suivant les règles expliquées plus haut. La illustre la formation du batch suivant, composé de six nouvelles charges apparues sur les allées et numérotées de 1 à 6 (numéros de séquence de la nouvelle séquence de sortie souhaitée pour le nouveau batch). L’algorithme de calcul des dates d’injection statique est appliqué à ce nouveau batch en considérant la partie libre du collecteur (à droite de la place réservée pour la charge numéroté 9 du batch précédent). Les dates d’injection sont calculées en fonction d’une échelle de temps dont l’origine correspond à la première injection d’une charge du nouveau batch. La configuration du système statique, prise au « Temps 5 » comme le montre la figure 34, est fournie (comme données d’entrée) à l’algorithme. Cette configuration est définie comme suit : allées comprenant six nouvelles charges apparues (appartenant au nouveau batch). Chaque nouvelle charge est identifiée par un numéro de séquence unique en fonction de la nouvelle séquence de sortie de ce nouveau batch : C’est une séquence réalisable. Nous connaissons les distances temporelles par rapport à la dernière allée : La date 0 est fixée par l’injection simultanée des deux nouvelles charges numérotées 1 et 4 (sur les allées a 2 et a 1 respectivement). Depuis cette origine de temps, l’algorithme donne une date d’injection pour chacune des six nouvelles charges de ce nouveau batch. 4.2.4 Lien entre les dates d’injection d’un batch et le temps réel qui s’écoule Chaque charge de chaque batch se voit donner une date d’injection en fonction d’une origine de temps bien précise relatif au système statique. Ces dates d’injection doivent être placées au bon moment dans la configuration dynamique pour être en cohérence avec la solution dynamique. Une échelle de temps commune entre tous les batchs permet de lier les injections de toutes les charges dans le système dynamique. Son unité de temps est le «pas temporel » du collecteur, comme défini plus haut. Appelons « Temps » le temps qui s’écoule de cette échelle de temps commune, avec le Temps 0 représentant la date de début des opérations dans le système. Les dates d’injection données par l’algorithme sont à replacer correctement dans cette échelle de temps commune. Il convient pour cela de trouver la correspondance temporelle, dans le système dynamique, de la situation décrite à la date 0 du batch. C’est-à-dire qu’il faut faire correspondre la date 0 du batch avec le Temps de l’échelle commune permettant réellement la première injection de la charge de ce batch. Il faudra ensuite décaler toutes les dates d’injection de ce batch d’exactement ce temps. Pour cela, il faut connaitre le Temps (aussi noté « Tb ») auquel l’appel de l’algorithme a été lancé et la (ou au moins une des) première(s) charge(s) du batch à être injectée au plus tôt sur le collecteur, appelons-là . La date 0 du batch correspond à l’action d’injection de cette charge , et elle est effectuée réellement par le système dynamique exactement pas temporels après l’appel. En revenant à notre exemple, il faut ajouter à chaque date d’injection calculée par l’algorithme pour le nouveau batch (pour tout , la date actuelle (date d’appel de l’algorithme, ici le Temps 5 (c'est-à-dire Tb=5) plus la position de la première charge injectée du nouveau batch dans la nouvelle séquence (ici c’est la charge 1 donc il faut ajouter plus la distance entre l’allée et celle contenant cette première charge injectée (ici . En remarquant que la charge 4 du nouveau batch est aussi injectée en première sur le collecteur (en même temps que la charge 1 du nouveau batch), nous aurions pu la choisir et ajouter ; cela revient bien au même que d’ajouter . Pour l’application dynamique, nous faisons une transformation linéaire des temps d’injection comme suit : Dans ce cas, la date au plus tôt de la première charge de la nouvelle séquence passant devant sera exactement , avec la première charge de la nouvelle séquence à être injectée sur le collecteur (n’étant pas forcément la première charge de la nouvelle séquence). Or, nous savons que est un max atteint exactement par cette charge , soit . Ainsi nous savons que la première charge de la nouvelle séquence passera devant à , dans l’échelle de temps commune. Une façon équivalente de donner les temps d’injection dans l’échelle de temps commune est, par définition, de donner à l’algorithme , dans le cas où nous prenons connaissance du système exactement à un instant , avec dernière charge de la séquence de l’instant précédent. Dans l’exemple précédent, l’instant correspond exactement à la condition donc nous aurions pu appeler l’algorithme avec (plutôt que 3) et nous aurions directement eu les temps d’injection exprimés dans l’échelle de temps commune. Au final, notre système peut être représenté comme le montre la . Dans l’échelle de temps commune : les dates d’injection des charges 6, 7 et 8 du batch précédent sont notées Temps 8, Temps 9 et Temps 10 respectivement ; et les dates d’injection des charges 1, 2, 3, 4, 5 et 6 du nouveau batch sont notées Temps 9, Temps 10, Temps 14, Temps 9, Temps 13 et Temps 11 respectivement. 5. Détermination des dates d’injection deS chargeS, pour un collecteur traitant UN OU PLUSIEURS FLUX PERTURBATEURS Nous supposons qu’il existe maintenant au moins un flux perturbateur (de charges perturbatrices) déjà présent sur le collecteur. Ces charges perturbatrices ne font partie d’aucun des flux d’injection (flux entrants), par conséquent elles ne sont pas ordonnées dans la séquence de sortie souhaitée des flux d’injection. Ces charges perturbatrices perturbent l’introduction des charges utiles contenues dans les flux d’injection car elles occupent des places sur le collecteur. Il faut prendre en compte ces obstructions qui bloquent l’injection de charges utiles de temps en temps. De plus, si ces charges perturbatrices disparaissent du collecteur entre les allées d’injection, cela peut créer des espaces vides dans le flux de sortie du collecteur. Notre objectif est toujours de respecter une séquence de sortie en maximisant le débit du collecteur et ainsi minimiser ces espaces vides. Pour parvenir à cet objectif, nous utilisons des listes de dates non valides à exploiter avec la modélisation du Job Shop vu précédemment. Le tableau suivant donne de nouvelles notations nécessaires pour la suite. Tableau 3 . Récapitulatif des notations pour les flux perturbateurs Flux perturbateur Nombre total de charges perturbatrices Numéro de la dernière allée devant laquelle passe la charge perturbatrice Numéro de la première allée devant laquelle passe la charge perturbatrice Liste des dates interdites pour une injection de charge utile par l’allée Liste ordonnée des charges perturbatrices La charge perturbatrice du flux perturbateur Durée qui sépare la charge perturbatrice de la charge perturbatrice dans le flux perturbateur, en nombre de « pas », à un instant donné. Date d’arrivée de la première charge perturbatrice du flux perturbateur devant l’allée , dans le cas particulier où cette charge passe effectivement devant cette allée (lien avec Distance entre la charge perturbatrice par rapport à la dernière allée à la date Date à laquelle la charge perturbatrice est injectée « fictivement » devant l’allée . (fictivement si car dans ce cas, la charge p ne passera pas devant l’allée 5.1 Modélisation du système avec un flux perturbateur subi Les charges perturbatrices du flux perturbateur bloquent l’injection d’une charge utile sur le collecteur lorsqu’elles passent devant les allées d’injection. Il faut donc calculer les dates non valides pour une injection d’une charge utile pour chaque allée. Nous cherchons maintenant à calculer les nouvelles dates d’injection des charges utiles en tenant compte du flux perturbateur subi (sur lequel par définition nous supposons n’avoir aucun contrôle). Nous noterons qu’il peut y avoir désormais des espaces libres dans le flux de sortie, nous recherchons cependant la minimisation optimale de ces espaces inoccupés. 5.1.1 Création de la liste des dates non valides Nous pouvons prendre en compte un flux perturbateur subi, comprenant des charges perturbatrices qui restent sur le collecteur, passant ainsi devant toutes les allées et faisant partie du flux final du collecteur (mélangé avec les charges utiles des flux d’injection). Nous pouvons également prendre un compte un flux perturbateur subi, comprenant des charges perturbatrices présentes sur le collecteur mais disparaissant entre les allées d’injection, créant ainsi des emplacements libres devant certaines allées mais pas toutes. Nous pouvons également prendre en compte le cas d’un mélange de ces types de flux perturbateurs subis, ainsi que des charges perturbatrices arrivant et repartant entre les allées. Tout est envisageable, nous pouvons même prendre en compte une obstruction quelconque sur un ou plusieurs pas du collecteur (une obstruction n’étant pas obligatoirement une charge perturbatrice mais pouvant également être un endroit du collecteur qui est abimé, réservé, etc.). Dans tous les cas, l’idée est de prendre en compte les charges perturbatrices et/ou autres obstructions, pour calculer les dates non valides pour une injection d’une charge utile d’une allée. Les dates non valides sont obtenues en calculant les instants de passages de chaque obstruction (c’est-à-dire chaque charge perturbatrice du flux perturbateur ou autre obstruction) devant cette allée d’injection. Notons l’ensemble des dates non valides où l’allée ne peut pas injecter une charge utile à cause des charges perturbatrices et/ou obstructions quelconques de pas temporels du collecteur. 5.1.2 Idée de la solution pour des allées consécutivement bien réparties Ce problème de planification Job Shop, avec une liste de dates non valides pour chaque machine, peut être résolu en suivant presque les mêmes étapes que celles du paragraphe 3.2.1. Voici la démarche dans le cas particulier d’allées bien réparties par pas de convoyeur : Pour commencer, en supposant que la première charge de la séquence provienne de l’allée , les opérations associées à ce job commencent aux dates à partir d’une date qui permet d’avoir les dates respectivement sur chaque machine libres (c’est-à-dire sans obstruction}. Ensuite, les opérations du job correspondant à la prochaine charge de la séquence seront planifiées d'abord en exécutant l'opération à traiter sur la machine . Cette opération sera planifiée juste après (sans temps mort) l’opération précédente programmée sur . En supposant que cette opération commence à un nouvel instant (différent de l’instant t défini plus haut pour les calculs liés à la première charge) l'opération sur la machine (si elle existe) est planifiée à l’instant , et ainsi de suite, jusqu'à ce que toutes les opérations soient programmées. Si une opération ne peut pas être opérée à ces dates indiquée à cause d’une obstruction, nous recommençons la planification du job (entier) en décalant l’instant t d’exécution de l'opération à traiter sur la machine d’une unité de temps (c’est-à-dire d’un emplacement, pas ou créneau). Cette procédure est appliquée de manière itérative sur chacun des jobs suivants de la séquence donnée. Les dates réelles d’injection des charges utiles sur le collecteur sont déduites directement à partir du début de la première opération de chaque job. L’unité de temps utilisée est celle définie plus haut. ATTENTION : cette méthode ne donne pas toujours un flux sans espaces vides. Le flux perturbateur et/ou les obstructions sont subis, donc nous maximisons le débit sans garantie de maximalité. 5.1.3 Idée de la solution avec un flux perturbateur subi dans le cas général S’appuyant sur le paragraphe ci-dessus, voici la démarche suivie dans le cas général pour calculer les dates réelles d’injection lors de la fusion de plusieurs flux comprenant des flux entrants (flux d’injection) et (au moins) un flux perturbateur subi. Considérons que nous pouvons commencer à planifier les jobs à partir de l’instant N’oublions pas qu’il faut suivre un ordre particulier dans l’exécutions des opérations de la machine tout en minimisant les temps morts de cette machine. Pour commencer, appelons la date au plus tôt à laquelle le job associé à la première charge de la séquence peut être affecté sur la machine , s’il n’y avait pas de flux perturbateur. Planifions les charges dans l’ordre donné par la séquence souhaitée sans prendre en compte le flux perturbateur, et ensuite on modifie la date d’injection en suivant cet ordre. En effet, on note que la planification d’une charge impacte uniquement les charges tel que Pour le job associé à une charge , planifions d’abord son opération à traiter sur la machine . Cette opération sera planifiée à si c’est la charge , sinon juste après (sans temps mort) l’opération précédente programmée sur . En supposant que cette opération sur commence à l'instant , l'opération sur la machine (si elle existe) est planifiée à l’instant . Puis l'opération sur la machine (si elle existe) est planifiée à l’instant , et ainsi de suite, jusqu'à ce que toutes les opérations soient programmées. Si une opération ne peut pas être opérée à ces dates indiquées à cause d’une obstruction, nous recommençons la planification du job (entier) en décalant l’instant t d’exécution de l'opération à traiter sur la machine d’une unité de temps (c’est-à-dire d’un emplacement, pas ou créneau). Cette procédure est appliquée de manière itérative sur chacun des jobs suivants de la séquence donnée. Il faut décaler, si besoin, la date 0 et la date pour les faire correspondre à leur définition. Le décalage de la date 0, devant correspondre à la première injection possible de charge sur le collecteur, se répercute sur l’ensemble des planifications (dates d’injection) qui seront à décaler à leur tour. Les dates réelles d’injection des charges utiles sur le collecteur sont déduites directement à partir du début de la première opération de chaque job. L’unité de temps utilisé est celle définie plus haut. ATTENTION : la présence de flux perturbateur subi ne permet pas toujours un flux sans espace vide sur le collecteur. Avec cette méthode, nous maximisons le débit du collecteur, sans garantie de maximalité. 5.1.4 Algorithme dans le cas général L’algorithme 3 ci-après calcule les dates d’injection des charges utiles en tenant compte du flux perturbateur matérialisé par des dates d’interdiction d’injection par allée. La date 0 correspond à la première charge injectée sur le collecteur, au plus tôt. La date est toujours la date à laquelle la première charge de la séquence passe devant l’allée . La formule générale pour reste valide s’il n’y pas de conflit avec le flux perturbateur lors de l’injection de la première charge de la séquence. L’algorithme 3 donne la date d’injection de chaque charge en prenant en compte le flux perturbateur et en corrigeant la date si nécessaire. Le flux perturbateur est pris en compte par le calcul préalable des ensembles donnant les dates de passage de chaque charge perturbatrice de ce flux perturbateur devant l’allée . Ces dates sont donc des dates d’injection interdites (aussi appelées dates non valides pour une injection de charge utile). Nous utilisons dans cet algorithme la notation simplifiée « » pour définir une charge correspondant à la charge de la séquence , définie également par sa position dans l’allée . // Donner les , calcul à faire au cas par cas // Calcul théorique de // Date théorique du passage de devant l’allée // Planification de la charge en évitant toutes obstructions ; // Date finale d’injection pour la charge // Date théorique de passage de devant l’allée // Décalage éventuel de la date 0 set to La est un diagramme de l’algorithme 3 ci-dessus. 5.1.5 Description d’un mode de réalisation particulier Parlons d’un flux perturbateur subi déjà présent sur le collecteur, non pris en compte par la séquence souhaitée au final car les charges perturbatrices vont toutes disparaitre avant la dernière allée d’injection. C’est le cas par exemple lorsque nous nous plaçons dans le contexte de la (système automatisé GTP Intelis PTS) avec la gestion de l’injection sur le collecteur des charges utiles venant du système automatisé (PTS) mais aussi du retour des charges qui arrivent sur ce collecteur pour retourner dans le système automatisé P(TS) (voir le paragraphe 1.2 sur le contexte de cette application possible). La illustre cette configuration, avec des charges perturbatrices (marquées d’une croix) du flux retour (constituant le flux perturbateur subi) qui retournent vers le système automatisé (PTS). D’après cette configuration, nous faisons deux constats : - aucune charge perturbatrice du flux retour (et donc du flux perturbateur) ne passera devant la dernière allée ; et - les charges perturbatrices quittant le collecteur (vers le système automatisé (PTS)) avant l’allée ne posent aucun problème et seront donc pas étudiées. Toutes les charges restantes passeront forcément devant l’allée . 5.1.5.1 Calcul des listes de dates non valides induites par le flux de charges perturbatrices Soit un flux de charges perturbatrices déjà présentes sur le collecteur et devant sortir du collecteur entre les allées d’injection. Ce flux perturbateur, appelé flux retour, correspond aux charges devant retourner en stock dans le système automatisé (PTS). Ces charges perturbatrices doivent en effet passer devant une à plusieurs allées d’injection. Pour chaque charge perturbatrice de ce flux retour (flux perturbateur), on note g p (respectivement l p ) le numéro de la première (respectivement dernière) allée devant laquelle passe la charge perturbatrice p . Nous allons voir deux méthodes permettant de calculer les dates non valides d’injection ( , induites par le flux retour en fonction des données connues. Dans ce mode de réalisation particulier, , pour toute charge du flux retour spécifique au système automatisé (PTS). Nous donnerons cependant la solution générale avec la notation . Soit, dans le cas spécifique précité d’un flux retour, nous connaissons la date d’arrivée (noté de la première charge perturbatrice du flux retour (flux perturbateur) devant l’allée numéro (ou encore machine ). Nous connaissons aussi dans quel ordre les charges perturbatrices de ce flux retour sont réparties sur le collecteur (appelons cette séquence ) et la durée qui sépare chaque charge perturbatrice d’une autre charge perturbatrice de ce flux perturbateur. Soit donne la charge perturbatrice du flux retour et donne la durée qui sépare la charge perturbatrice de la charge perturbatrice dans le flux perturbateur en nombre de « pas ». Alors, les instants sont encombrés pour la machine et forment . Pour la machine , les dates encombrées sont les Une autre façon de voir les choses serait de copier les dates « encombrées » (ou non valides) de la machine des charges perturbatrices qui ont et d’ajouter à tous ces instants pour obtenir la liste des dates encombrées pour la machine Soit, dans un cadre plus général, nous connaissons la distance de chaque charge perturbatrice par rapport à la dernière allée à la date que nous noterons . Avec ces données-ci, nous calculons les comme suit : ; ; 5.1.5.2 Exemples Reprenons la configuration de l’exemple du paragraphe 3.2.2. Soit allées comprenant deux ou trois charges utiles. Chaque charge utile est identifiée par un numéro de séquence unique en fonction de la séquence de sortie C’est une séquence réalisable. Nous connaissons les distances de chaque allée par rapport à la dernière : Comme illustré sur la figure 38, on suppose que cette fois il y a trois pas temporels du collecteur obstrués par des charges perturbatrices A, B et C. Nous savons que ces charges perturbatrices passent devant certaines allées et disparaissent du collecteur par la suite. Les charges A et B passent devant les allées a1 et a2. Enfin la charge C passe devant toutes les allées a1, a2 et a3. Ainsi, nous avons et , ainsi que . Nous montrons un état du système à la date 0, lorsque la première charge utile du batch va être injectée sur la première place libre du collecteur. Sur le schéma, une position du collecteur non occupée est vide, les croix indiquent les positions prisent par les charges utiles du batch précédent et les lettres les charges perturbatrices du flux perturbateur. La position du flux perturbateur à la date 0 nous permet de déduire les informations suivantes : et La charge perturbatrice B oblige la charge utile 4 à se décaler dans le temps d’une position et va laisser un espace vide dans le flux final du collecteur. Ensuite la charge perturbatrice C oblige la charge utile 7 à se décaler encore d’une position, laissant un espace vide plus tard dans le flux final du collecteur. La figure 39 est un diagramme de Gantt illustrant la solution proposée dans ce cas. Nous pouvons voir que si le flux perturbateur était contrôlé (et non pas subi), le premier espace vide pourrait être comblé par l’allée ou et le deuxième espace vide uniquement par l’allée Ainsi, on éviterait les espaces vides, et on augmenterait le débit du flux final (flux sortant) du collecteur. 5.2 Modélisation du système avec UN flux perturbateur CONTROLE Nous avons vu que lorsque le flux perturbateur était subi, il occasionnait des espaces vides dans le flux final du collecteur. Il y a donc un intérêt de contrôler le flux perturbateur pour éviter ces espaces vides. Nous pourrons ainsi prioriser les charges des flux d’injection sur les charges des flux perturbateurs et arriver à faire passer les charges perturbatrices dans les espaces libres laissés par l’injection des différentes allées. 5.2.1 Formulation du problème Nous supposons maintenant que nous pouvons contrôler le flux perturbateur. Cela revient à maitriser l’injection des charges perturbatrices de ce flux perturbateur, et nous devons décider la date (notée ) à laquelle la charge perturbatrice est injectée devant l’allée a 1 de manière à ne pas perturber le flux de sortie (flux sortant formé par la fusion des flux d’injection), c’est-à-dire en ne créant pas d’espace vide dans le flux de sortie. 5.2.2 Idée de l’algorithme solution Nous allons d’abord calculer les dates d’injection des charges utiles provenant des allées, comme s’il n’y avait pas de flux perturbateur (cf. Section 3). Ce sont ces dates d’injection qui nous donnerons les dates indisponibles ( pour une charge perturbatrice passant devant une allée ( . Puis nous calculerons, en prenant en compte la liste des dates non valides, l’injection des charges du flux perturbateur. Pour ce faire, nous planifions dans l’ordre d’arrivée des charges perturbatrices, chacun de leur passage devant les allées au plus tôt, c’est-à-dire dès que toutes ces dates de passage dans les machines respectives tombent sur des dates libres. 5.2.3 Algorithme général L’algorithme 4 détaillé ci-dessous donne les dates d’injection des charges utiles ainsi que le contrôle du flux perturbateur. Les charges à injecter constituent le flux final du collecteur. Leur injection est décidée sans prendre en compte le flux perturbateur. Ensuite, nous déterminons quand laisser passer les charges du flux perturbateur en considérant cette fois les charges utiles injectées comme jouant le même rôle que le flux subi dans l’algorithme 3 ci-dessus. Ainsi nous pouvons utiliser la même technique que précédemment, avec le calcul des ensembles donnant les dates de passage de chaque charge utile du flux injecté devant l’allée . Ces dates sont donc des dates d’injection interdites pour les charges perturbatrices. Rappelons que donne la distance qui sépare les charges perturbatrices à la date 0 et donne la date, sans attente, d’arrivée de la charge du flux perturbateur devant l’allée numéro . Nous utilisons dans cet algorithme la notation simplifiée « » pour définir une charge correspondant à la charge de la séquence , définie également par sa position dans l’allée . // Calcul théorique de // Arrivée de la première charge perturbatrice devant // Charge identifiée par leur place dans ; // Attente possible de l’arrivée de p+1 La est un diagramme de l’algorithme 4 ci-dessus. 5.2.4 Description d’un mode de réalisation particulier Prenons l’exemple commun à tous les cas précédents pour pouvoir comparer les solutions finales. Soit allées comprenant deux ou trois charges. Chaque charge est identifiée par un numéro de séquence unique en fonction de la séquence de sortie C’est une séquence réalisable. Nous connaissons les distances de chaque allée par rapport à la dernière : Le flux perturbateur est composé des charges A, B, C telles que , , et . Cette fois, le flux perturbateur est contrôlable. Nous pouvons voir sur la le point de contrôle de ce flux perturbateur, matérialisé par un rectangle vertical juste avant l’allée a1. La illustre, sous la forme d’un diagramme de Gantt, la solution sans prendre en compte le flux perturbateur (« solution d’injection pure »). La solution de l’algorithme prenant en compte le flux perturbateur, revient à glisser les charges perturbatrices dans les cases grisées, laissées vides par la solution d’injection pure. La charge A est laissée passée dès qu’elle arrive au point de contrôle du flux perturbateur alors que la charge B est retenue pendant une unité de temps. Cette attente permet de faire passer la charge perturbatrice B dans les espaces libres des injections, juste avant que la charge 5 ne soit injectée. Il en est de même avec la charge C et la charge 8 de la séquence. La illustre, sous la forme d’un diagramme de Gantt, la solution proposée pour contrôler le flux perturbateur (c'est-à-dire en choisissant le placement des charges perturbatrices). Les charges B et C ne forment plus d’espace vide dans le flux final du collecteur. Elles ont été intercalées à des endroits stratégiques afin que l’espace vide qu’elle laisse dans un premier temps soit ensuite comblé par une injection de charge temporellement compatible. Grâce au contrôle du flux perturbateur, nous avons montré que les espaces vides sur le collecteur étaient évitables. 5.3 Modélisation du système avec UN flux perturbateur SUBI ET UN flux perturbateur CONTROLE Dans le cas où il y a à la fois au moins un flux perturbateur subi et au moins un flux perturbateur contrôlé, nous procéderons ainsi. Nous différencions les charges perturbatrices subies et celles contrôlées comme suit : - Soit l’ensemble des charges perturbatrices subies à laisser obligatoirement passer sans contrôle dans la zone d’injection des allées du collecteur, chacune étant identifiée par un numéro de séquence unique correspondant à sa position dans l’ordre d’arrivée, (notée ). Désignons par la distance de chaque charge perturbatrice par rapport à la dernière allée à la date et par respectivement le numéro de la première et dernière allée devant laquelle la charge perturbatrice doit passer. Enfin, les ensembles donnent les dates d’indisponibilités de passage devant l’allée pour les charges utiles. - Soit l'ensemble des charges perturbatrices à laisser passer sous contrôle dans la zone d’injection des allées du collecteur, chacune étant identifiée par un numéro de séquence unique correspondant à sa position dans l’ordre d’arrivée (notée . Désignons par la distance de chaque charge perturbatrice par rapport à la dernière allée à la date et par respectivement le numéro de la première et dernière allée devant laquelle la charge perturbatrice doit passer. Enfin, les ensembles donnent les dates d’indisponibilités de passage devant l’allée pour ces charges perturbatrices contrôlées. L’algorithme 5 détaillé ci-dessous donne les dates d’injection des charges utiles ainsi que le contrôle du flux perturbateur, en tenant compte du flux perturbateur subi. // Calcul théorique de //Calcul des // Charge devant // Calcule des // Date théorique du passage de devant l’allée // Planification de la charge de ; // Date finale d’injection pour la charge // Place suivante devant // Décalage éventuel de la date 0 set to if // calcul des // calcul des // Arrivée de la première charge perturbatrice devant // Charge identifiée par sa place dans ; // Attente possible de l’arrivée de p+1 La est un diagramme de l’algorithme 5 ci-dessus. 6. Conclusion La durée de trajet étant critique pour avoir un taux de production le plus élevé possible, savoir regrouper plusieurs flux entrants sur un collecteur est très important dans le domaine de la logistique. Utiliser l’ensemble des capacités mécaniques de chaque système et donc maximiser le débit d’un tel collecteur est crucial pour ne pas perdre de temps dans la préparation de commande par exemple. Nous avons atteint le débit optimal en injectant les charges au plus tôt de façon synchronisée. Nous avons notamment atteint les capacités maximales du collecteur lorsqu’il est dédié aux flux d’injection. En plus de la modélisation et résolution mathématique, nous avons extrait une formule permettant de calculer directement les dates d’injection de chaque charge. Ces résultats sont donnés pour respecter une séquence finale de sortie des charges une fois que celles-ci sont toutes sur le collecteur, cela permet de combiner l’optimisation d’une vitesse et d’un tri. Nous avons aussi traité la gestion de plusieurs types de flux sur le collecteur, en appelant flux perturbateur un flux différent des flux d’injection. Nous savons calculer les dates d’injection grâce à un algorithme prenant en compte ce flux perturbateur lorsqu’il est subi. Toutefois, le débit est optimal sans garantie de maximalité. En effet, un tel flux perturbateur subi ne permet pas de rattraper un espace laissé par une charge perturbatrice qui aurait quitté le collecteur entre les allées d’injection. Nous avons également proposé une solution dans laquelle le flux perturbateur est contrôlé. Un autre algorithme a été donné pour faire passer le flux perturbateur contrôlé, de façon à prioriser le débit maximal du collecteur une fois toutes les allées d’injection passées. Le contrôle de ce flux perturbateur contrôlé permet un débit maximal des flux d’injection une fois sur le collecteur lorsque toutes les charges du flux perturbateur contrôlé disparaissent avant la dernière allée d’injection. Sinon, les charges perturbatrices restantes sont comprises dans le flux final du collecteur et insérées dans la séquence sans espace. Un algorithme a également été donné pour gérer à la fois au moins un flux subi (obstructions qui ne sont pas obligatoirement des charges perturbatrices) et au moins un flux contrôlé (charges perturbatrices). 7. Exemple de systeme de pilotage La solution proposée est un procédé de fusion, au sein d’un entrepôt logistique, de k flux entrants de charges utiles, transportés respectivement par k convoyeurs appelés allées , en un flux sortant de charges utiles, transporté par un autre convoyeur appelé collecteur. Le procédé de fusion est exécuté par un système de pilotage. Il s’agit est par exemple d’un système informatique de gestion central (aussi appelé SGE, pour « Système de Gestion d'Entrepôt », ou WCS, pour « Warehouse Control System » en anglais). La présente la structure du système de pilotage 90 selon un mode de réalisation particulier de l'invention. Ce système de pilotage comprend une mémoire vive 92 (par exemple une mémoire RAM), une unité de traitement 91, équipée par exemple d'un processeur, et pilotée par un programme d'ordinateur 930 stocké dans une mémoire morte 93 (par exemple une mémoire ROM ou un disque dur). A l'initialisation, les instructions de code du programme d'ordinateur sont par exemple chargées dans la mémoire vive 92 avant d'être exécutées par le processeur de l'unité de traitement 91, pour mettre en œuvre le procédé de fusion de l’invention (selon l’un quelconque des différents modes de réalisation décrits plus haut). L'unité de traitement 91 reçoit en entrée des informations 94 relatives aux flux entrants. Le processeur de l'unité de traitement 91 traite les informations 94 et génère en sortie des instructions ou commandes 95 permettant de piloter (commander) différents éléments compris dans le système, notamment les allées, le collecteur, les moyens de contrôle, etc. Cette illustre seulement une manière particulière, parmi plusieurs possibles, de réaliser la technique de l’invention, dans l’un quelconque de ses modes de réalisation. En effet, le système de pilotage se réalise indifféremment sur une machine de calcul reprogrammable (par exemple un ordinateur PC, un processeur DSP, un microcontrôleur, etc.) exécutant un programme comprenant une séquence d’instructions, ou sur une machine de calcul dédiée (par exemple un ensemble de portes logiques comme un FPGA ou un ASIC, ou tout autre module matériel). Dans le cas où le système de pilotage est réalisé avec une machine de calcul reprogrammable, le programme correspondant (c'est-à-dire la séquence d’instructions) peut être stocké dans un médium de stockage amovible (tel que par exemple une disquette, un CD-ROM ou un DVD-ROM) ou non, ce médium de stockage étant lisible partiellement ou totalement par un ordinateur ou un processeur. 8. LISTE DES FIGURES Méthode existante pour insérer des charges dans un ordre donné Image de deux allées (convoyeurs), un collecteur et une charge (carton) Schéma de deux allées (convoyeurs), un collecteur et une charge (carton) Schéma du système étudié en allées Schéma du système avec indentification des charges par leur numéro de séquence Points confondus sans perte de généralité Point de départ et point d’injection Découpage en pas (positions ou créneaux) du collecteur Séquence de sortie souhaitée attendue dans le découpage du collecteur Unité de temps associée au pas du collecteur par rapport à la durée d’injection d’une charge Distances entières entre les flux d’injection Distances non obligatoirement entières entre les flux d’injection Schéma du collecteur avec des points d’injection consécutifs à chaque pas Exemple d’un collecteur de 4 allées consécutivement placées par pas du collecteur Diagramme de Gantt lié au job shop et retrouvant les données à calculer par formule Exemple d’un collecteur de 4 allées placées de façon quelconque Diagramme de Gantt lié au job shop avec distances quelconques entre les allées Exemple d’un collecteur et de 2 allées avec les identifiants des charges Exemple d’un collecteur et de 2 allées avec les identifiants des numéros d’ordre Exemple d’un collecteur et de 2 allées avec les identifiants numéros de séquence Image du collecteur à l’instant 0 Image du collecteur à l’instant 1 Image du collecteur à l’instant 2 Image du collecteur à l’instant 3 Exemple de liste FIFO associée à trois allées Séquence réalisable attendue sur le collecteur Première charge du flux collée au point d’injection faisant partie de la liste FIF Première charge du flux non collée au point d’injection ne faisant pas partie de la liste FIFO Charges en attente continue derrière une première charge faisant partie de la liste FIFO Charges en attente continue derrière une première charge ne faisant pas partie de la liste FIFO Exemple de batch (lot) de travail Calcul des dates d’injection et traitement du batch 1 Traitement d’un batch en cours Fin de traitement du batch 1 et formation du batch 2 Fin de traitement du batch 2 et son application Diagramme de l’algorithme dans le cas général avec flux perturbateur subi Exemple de flux perturbateur : charges grises qui retournent dans la PT Exemple d’un collecteur de 4 allées quelconques avec flux perturbateur subi Diagramme de Gantt avec flux perturbateur subi formant des espaces Diagramme de l’algorithme 4 Exemple d’un collecteur de 4 allées placées de façon quelconque avec flux perturbateur contrôlé Diagramme de Gantt des injections montant les espaces à utiliser pour les charges perturbatrices Diagramme de Gantt en choisissant le placement des charges perturbatrices Structure d’un système de pilotage selon un mode de réalisation particulier de l’invention Diagramme de l’algorithme 5 Exemple d’application 9. RESUME Dans un premier mode de réalisation particulier de l’invention, il est proposé : un procédé de fusion, au sein d’un entrepôt logistique, de k flux entrants de charges utiles, transportés respectivement par k convoyeurs appelés allées , en un flux sortant de charges utiles, transporté par un autre convoyeur appelé collecteur, l’entrepôt logistique étant tel que : les k allées sont de type « premier entré premier sorti », réparties le long du collecteur et numérotées de a 1 à a k dans un sens de déplacement du collecteur, et est une distance temporelle entre les allées a i et a k exprimée en unités temporelles correspondant chacune à un pas temporel du collecteur, le procédé étant exécuté au moins une fois par un système de pilotage, une exécution donnée étant effectuée à un instant Tb et comprenant : - obtention d’un ensemble L comprenant n charges utiles réparties à l’instant Tb sur les k allées et devant être injectées sur le collecteur pour former une séquence de sortie , chacune des n charges utiles étant identifiée par un unique numéro de séquence au sein de la séquence de sortie , chacune des k allées contenant un ensemble ordonné, selon un sens croissant du numéro de séquence, de h i charges utiles devant être injectées une à une sur le collecteur ; - calcul d’une date t 0 à laquelle la première charge utile de la séquence de sortie passe devant l’allée a k ; - calcul d’une date d’injection sur le collecteur pour chacune des n charges utiles de l’ensemble L, selon la formule suivante : , avec : une charge utile de l’ensemble L et provenant de la j ème position dans l’allée a i , , , le numéro de séquence de la charge utile dans la séquence de sortie ; - commande du collecteur et des k allées, pour une injection des n charges utiles sur le collecteur conformément aux n dates d’injection . Selon une caractéristique particulière du premier mode de réalisation : est une distance temporelle entre les allées a i et a i’ exprimée en unités temporelles correspondant chacune à un pas temporel du collecteur, et le procédé comprend en outre les étapes suivantes : - pour chaque charge utile provenant d’une allée a i , calcul des dates de passage de la charge utile devant les allées a i à a k , connaissant la date d’injection de la charge utile sur le collecteur ; - pour chaque allée a i , , obtention d’un ensemble contenant chaque date de passage d’une des charges utiles devant l’allée a i ; - pour chaque charge perturbatrice contrôlée p d’un flux perturbateur contrôlé grâce à un moyen de contrôle situé le long du collecteur et avant une allée a g(p) dans le sens de déplacement du collecteur, avec , a g(p) étant également la première allée, dans le sens de déplacement du collecteur, devant laquelle passe la charge perturbatrice contrôlée : a) initialisation de t avec la date , avec représentant la date d’arrivée possible, en cas de non mise en attente, de la première charge perturbatrice contrôlée devant l’allée a k ; b) calcul des dates , ,…, de passage de la charge perturbatrice contrôlée devant les allées a g(p) à a l(p) , avec a l(p) la dernière allée, dans le sens de déplacement du collecteur, devant laquelle passe la charge perturbatrice contrôlée ; c) si aucune des dates , ,…, n’appartient respectivement aux ensembles , ,…, , calcul d’une date fictive de passage de la charge perturbatrice contrôlée p devant l’allée a 1 , avec la formule suivante : ; d) si une des dates , ,…, appartient respectivement à un des ensembles incrémentation de t d’une unité et réitération des étapes b), c) et d) avec la nouvelle valeur de t ; - commande du moyen de contrôle, pour une injection à la date de chaque charge perturbatrice contrôlée p devant l’allée a g(p) . Dans un deuxième mode de réalisation particulier de l’invention, il est proposé : un procédé de fusion, au sein d’un entrepôt logistique, de k flux entrants de charges utiles, transportés respectivement par k convoyeurs appelés allées , en un flux sortant de charges utiles, transporté par un autre convoyeur appelé collecteur, l’entrepôt logistique étant tel que : les k allées sont de type « premier entré premier sorti », réparties le long du collecteur et numérotées de a 1 à a k dans un sens de déplacement du collecteur, et est une distance temporelle entre les allées a i et a k exprimée en unités temporelles correspondant chacune à un pas temporel du collecteur, le procédé étant exécuté au moins une fois par un système de pilotage, une exécution donnée étant effectuée à un instant T et comprenant : - obtention d’un ensemble L comprenant n charges utiles réparties à l’instant Tb sur les k allées et devant être injectées sur le collecteur pour former une séquence de sortie , chacune des n charges utiles étant identifiée par un unique numéro de séquence au sein de la séquence de sortie , chacune des k allées contenant un ensemble ordonné, selon un sens croissant du numéro de séquence, de h i charges utiles devant être injectées une à une sur le collecteur ; - pour chaque allée a i , , obtention d’un ensemble de dates non valides pour une injection d’une des charges utiles de l’allée a i sur le collecteur à cause d’une charge perturbatrice non contrôlée ou d’une autre obstruction d’un pas temporel du collecteur ; - en ne prenant pas en compte les ensembles , , calcul d’une date t 0 à laquelle la première charge utile de la séquence de sortie passe devant l’allée a k ; - pour la première charge utile de la séquence de sortie , en supposant que la première charge utile provienne de l’allée a i : a) initialisation de t avec t 0 ; b) si aucune des dates , , ,…, n’appartient respectivement aux ensembles , , ,…, , calcul d’une date d’injection de la première charge utile sur le collecteur avec la formule suivante : , avec ; c) si une des dates , , ,…, appartient respectivement à un des ensembles , , ,…, , incrémentation de t d’une unité et réitération des étapes b) et c) avec la nouvelle valeur de t ; - pour chaque charge utile suivante de la séquence de sortie , , en supposant que la charge utile suivante provienne de l’allée a i : a’) incrémentation de t d’une unité, avec t utilisé pour calculer la date d’injection de la charge utile précédente ; b’) si aucune des dates , , ,…, n’appartient respectivement aux ensembles , , ,…, , calcul d’une date d’injection de la charge utile suivante sur le collecteur avec la formule suivante : , avec ; c’) si une des dates , , ,…, appartient respectivement à un des ensembles , , ,…, , incrémentation de t d’une unité et réitération des étapes b’) et c’) avec la nouvelle valeur de t ; - commande du collecteur et des k allées, pour une injection des n charges utiles sur le collecteur conformément aux n dates d’injection . Selon une caractéristique particulière du deuxième mode de réalisation : l’étape de commande du collecteur et des k allées, pour une injection des n charges utiles sur le collecteur conformément aux n dates d’injection , est précédée des étapes suivantes : - calcul de selon la formule suivante : ; - si , modification des n dates d’injection selon la formule suivante : . Selon une caractéristique particulière du deuxième mode de réalisation : est une distance temporelle entre les allées a i et a i’ exprimée en unités temporelles correspondant chacune à un pas temporel du collecteur, et le procédé comprend en outre les étapes suivantes : - pour chaque charge utile provenant d’une allée a i , calcul des dates de passage de la charge utile devant les allées a i à a k , connaissant la date d’injection de la charge utile sur le collecteur ; - pour chaque allée a i , , obtention d’un ensemble contenant d’une part chaque date de passage d’une des charges utiles devant l’allée a i et d’autre part l’ensemble de dates non valides pour une injection d’une des charges utiles de l’allée a i sur le collecteur ; - pour chaque charge perturbatrice contrôlée p d’un flux perturbateur contrôlé grâce à un moyen de contrôle situé le long du collecteur et avant une allée a g(p) dans le sens de déplacement du collecteur, avec , a g(p) étant également la première allée, dans le sens de déplacement du collecteur, devant laquelle passe la charge perturbatrice contrôlée : a) initialisation de t avec la date , avec représentant la date d’arrivée possible, en cas de non mise en attente, de la première charge perturbatrice contrôlée devant l’allée a k ; b) calcul des dates , ,…, de passage de la charge perturbatrice contrôlée devant les allées a g(p) à a l(p) , avec a l(p) la dernière allée, dans le sens de déplacement du collecteur, devant laquelle passe la charge perturbatrice contrôlée ; c) si aucune des dates , ,…, n’appartient respectivement aux ensembles , ,…, , calcul d’une date fictive de passage de la charge perturbatrice contrôlée p devant l’allée a 1 , avec la formule suivante : ; d) si une des dates , ,…, appartient respectivement à un des ensembles incrémentation de t d’une unité et réitération des étapes b), c) et d) avec la nouvelle valeur de t ; - commande du moyen de contrôle, pour une injection à la date de chaque charge perturbatrice contrôlée p devant l’allée a g(p) . Selon une caractéristique particulière du premier ou deuxième mode de réalisation : la date t 0 est calculée avec la formule suivante : , avec : une charge utile d’un ensemble L’ comprenant des charges utiles placées en première position des allées situées, en suivant le sens de déplacement du collecteur, depuis l’allée a 1 jusqu’à l’allée a i1 contenant la première charge utile de la séquence de sortie . Selon une caractéristique particulière du premier ou deuxième mode de réalisation : le procédé est exécuté de manière itérative, chaque nouvelle exécution étant effectuée à un nouvel instant Tb calculé avec la formule suivante : , avec une dernière charge utile, provenant de la ème position dans l’allée , de la séquence de sortie d’une exécution précédente à un instant Tb précédent. Selon une caractéristique particulière du premier ou deuxième mode de réalisation : le procédé est exécuté de manière itérative, chaque nouvelle exécution étant effectuée à un nouvel instant Tb défini comme un instant auquel aucune charge de la séquence de sortie d’une exécution précédente à un instant Tb précédent ne se trouve dans une portion du collecteur allant de la première allée a 1 à l’allée contenant la première charge de la séquence de sortie de la nouvelle exécution au nouvel instant Tb. Selon une caractéristique particulière du premier ou deuxième mode de réalisation : le procédé est exécuté de manière itérative, chaque nouvelle exécution étant effectuée à un nouvel instant Tb calculé avec la formule suivante : , avec : une dernière charge utile, provenant de la ème position dans l’allée , de la séquence de sortie d’une exécution précédente à un instant T précédent, et obtenu par une incrémentation d’une unité de l’instant Tb précédent. Dans un autre mode de réalisation de l'invention, il est proposé un produit programme d'ordinateur qui comprend des instructions de code de programme pour la mise en œuvre du procédé précité (dans l’un quelconque de ses différents modes de réalisation), lorsque ledit programme est exécuté sur un ordinateur. Dans un autre mode de réalisation de l'invention, il est proposé un médium de stockage lisible par ordinateur et non transitoire, stockant un programme d’ordinateur comprenant un jeu d’instructions exécutables par un ordinateur pour mettre en œuvre le procédé précité (dans l’un quelconque de ses différents modes de réalisation). Dans un autre mode de réalisation de l'invention, il est proposé un système de pilotage (dispositif) comprend des moyens de mise en œuvre des étapes qu’il effectue dans le procédé tel que décrit précédemment, dans l’un quelconque de ses différents modes de réalisation. Procédé de fusion, au sein d’un entrepôt logistique, de k flux entrants de charges utiles, transportés respectivement par k convoyeurs appelés allées , en un flux sortant de charges utiles, transporté par un autre convoyeur appelé collecteur, l’entrepôt logistique étant tel que : les k allées sont de type « premier entré premier sorti », réparties le long du collecteur et numérotées de a 1 à a k dans un sens de déplacement du collecteur, et est une distance temporelle entre les allées a i et a k exprimée en unités temporelles correspondant chacune à un pas temporel du collecteur, le procédé étant exécuté au moins une fois par un système de pilotage, une exécution donnée étant effectuée à un instant Tb et comprenant : - obtention d’un ensemble L comprenant n charges utiles réparties à l’instant Tb sur les k allées et devant être injectées sur le collecteur pour former une séquence de sortie , chacune des n charges utiles étant identifiée par un unique numéro de séquence au sein de la séquence de sortie , chacune des k allées contenant un ensemble ordonné, selon un sens croissant du numéro de séquence, de h i charges utiles devant être injectées une à une sur le collecteur ; - calcul d’une date t 0 à laquelle la première charge utile de la séquence de sortie passe devant l’allée a k ; - calcul d’une date d’injection sur le collecteur pour chacune des n charges utiles de l’ensemble L, selon la formule suivante : , avec : une charge utile de l’ensemble L et provenant de la j ème position dans l’allée a i , , , le numéro de séquence de la charge utile dans la séquence de sortie ; - commande du collecteur et des k allées, pour une injection des n charges utiles sur le collecteur conformément aux n dates d’injection . Procédé selon la revendication 1, dans lequel est une distance temporelle entre les allées a i et a i’ exprimée en unités temporelles correspondant chacune à un pas temporel du collecteur, et comprenant en outre les étapes suivantes : - pour chaque charge utile provenant d’une allée a i , calcul des dates de passage de la charge utile devant les allées a i à a k , connaissant la date d’injection de la charge utile sur le collecteur ; - pour chaque allée a i , , obtention d’un ensemble contenant chaque date de passage d’une des charges utiles devant l’allée a i ; - pour chaque charge perturbatrice contrôlée p d’un flux perturbateur contrôlé grâce à un moyen de contrôle situé le long du collecteur et avant une allée a g(p) dans le sens de déplacement du collecteur, avec , a g(p) étant également la première allée, dans le sens de déplacement du collecteur, devant laquelle passe la charge perturbatrice contrôlée : a) initialisation de t avec la date , avec représentant la date d’arrivée possible, en cas de non mise en attente, de la première charge perturbatrice contrôlée devant l’allée a k ; b) calcul des dates , ,…, de passage de la charge perturbatrice contrôlée devant les allées a g(p) à a l(p) , avec a l(p) la dernière allée, dans le sens de déplacement du collecteur, devant laquelle passe la charge perturbatrice contrôlée ; c) si aucune des dates , ,…, n’appartient respectivement aux ensembles , ,…, , calcul d’une date fictive de passage de la charge perturbatrice contrôlée p devant l’allée a 1 , avec la formule suivante : ; d) si une des dates , ,…, appartient respectivement à un des ensembles incrémentation de t d’une unité et réitération des étapes b), c) et d) avec la nouvelle valeur de t ; - commande du moyen de contrôle, pour une injection à la date de chaque charge perturbatrice contrôlée p devant l’allée a g(p) . Procédé de fusion, au sein d’un entrepôt logistique, de k flux entrants de charges utiles, transportés respectivement par k convoyeurs appelés allées , en un flux sortant de charges utiles, transporté par un autre convoyeur appelé collecteur, l’entrepôt logistique étant tel que : les k allées sont de type « premier entré premier sorti », réparties le long du collecteur et numérotées de a 1 à a k dans un sens de déplacement du collecteur, et est une distance temporelle entre les allées a i et a k exprimée en unités temporelles correspondant chacune à un pas temporel du collecteur, le procédé étant exécuté au moins une fois par un système de pilotage, une exécution donnée étant effectuée à un instant T et comprenant : - obtention d’un ensemble L comprenant n charges utiles réparties à l’instant Tb sur les k allées et devant être injectées sur le collecteur pour former une séquence de sortie , chacune des n charges utiles étant identifiée par un unique numéro de séquence au sein de la séquence de sortie , chacune des k allées contenant un ensemble ordonné, selon un sens croissant du numéro de séquence, de h i charges utiles devant être injectées une à une sur le collecteur ; - pour chaque allée a i , , obtention d’un ensemble de dates non valides pour une injection d’une des charges utiles de l’allée a i sur le collecteur à cause d’une charge perturbatrice non contrôlée ou d’une autre obstruction d’un pas temporel du collecteur ; - en ne prenant pas en compte les ensembles , , calcul d’une date t 0 à laquelle la première charge utile de la séquence de sortie passe devant l’allée a k ; - pour la première charge utile de la séquence de sortie , en supposant que la première charge utile provienne de l’allée a i : a) initialisation de t avec t 0 ; b) si aucune des dates , , ,…, n’appartient respectivement aux ensembles , , ,…, , calcul d’une date d’injection de la première charge utile sur le collecteur avec la formule suivante : , avec ; c) si une des dates , , ,…, appartient respectivement à un des ensembles , , ,…, , incrémentation de t d’une unité et réitération des étapes b) et c) avec la nouvelle valeur de t ; - pour chaque charge utile suivante de la séquence de sortie , , en supposant que la charge utile suivante provienne de l’allée a i : a’) incrémentation de t d’une unité, avec t utilisé pour calculer la date d’injection de la charge utile précédente ; b’) si aucune des dates , , ,…, n’appartient respectivement aux ensembles , , ,…, , calcul d’une date d’injection de la charge utile suivante sur le collecteur avec la formule suivante : , avec ; c’) si une des dates , , ,…, appartient respectivement à un des ensembles , , ,…, , incrémentation de t d’une unité et réitération des étapes b’) et c’) avec la nouvelle valeur de t ; - commande du collecteur et des k allées, pour une injection des n charges utiles sur le collecteur conformément aux n dates d’injection . Procédé selon la revendication 3, dans lequel l’étape de commande du collecteur et des k allées, pour une injection des n charges utiles sur le collecteur conformément aux n dates d’injection , est précédée des étapes suivantes : - calcul de selon la formule suivante : ; - si , modification des n dates d’injection selon la formule suivante : . Procédé selon la revendication 3 ou 4, dans lequel est une distance temporelle entre les allées a i et a i’ exprimée en unités temporelles correspondant chacune à un pas temporel du collecteur, et comprenant en outre les étapes suivantes : - pour chaque charge utile provenant d’une allée a i , calcul des dates de passage de la charge utile devant les allées a i à a k , connaissant la date d’injection de la charge utile sur le collecteur ; - pour chaque allée a i , , obtention d’un ensemble contenant d’une part chaque date de passage d’une des charges utiles devant l’allée a i et d’autre part l’ensemble de dates non valides pour une injection d’une des charges utiles de l’allée a i sur le collecteur ; - pour chaque charge perturbatrice contrôlée p d’un flux perturbateur contrôlé grâce à un moyen de contrôle situé le long du collecteur et avant une allée a g(p) dans le sens de déplacement du collecteur, avec , a g(p) étant également la première allée, dans le sens de déplacement du collecteur, devant laquelle passe la charge perturbatrice contrôlée : a) initialisation de t avec la date , avec représentant la date d’arrivée possible, en cas de non mise en attente, de la première charge perturbatrice contrôlée devant l’allée a k ; b) calcul des dates , ,…, de passage de la charge perturbatrice contrôlée devant les allées a g(p) à a l(p) , avec a l(p) la dernière allée, dans le sens de déplacement du collecteur, devant laquelle passe la charge perturbatrice contrôlée ; c) si aucune des dates , ,…, n’appartient respectivement aux ensembles , ,…, , calcul d’une date fictive de passage de la charge perturbatrice contrôlée p devant l’allée a 1 , avec la formule suivante : ; d) si une des dates , ,…, appartient respectivement à un des ensembles incrémentation de t d’une unité et réitération des étapes b), c) et d) avec la nouvelle valeur de t ; - commande du moyen de contrôle, pour une injection à la date de chaque charge perturbatrice contrôlée p devant l’allée a g(p) . Procédé selon l’une quelconque des revendications 1 à 5, dans lequel la date t 0 est calculée avec la formule suivante : , avec : une charge utile d’un ensemble L’ comprenant des charges utiles placées en première position des allées situées, en suivant le sens de déplacement du collecteur, depuis l’allée a 1 jusqu’à l’allée contenant la première charge utile de la séquence de sortie . Procédé selon l’une quelconque des revendications 1 à 6, caractérisé en ce qu’il est exécuté de manière itérative, chaque nouvelle exécution étant effectuée à un nouvel instant Tb calculé avec la formule suivante : , avec une dernière charge utile, provenant de la ème position dans l’allée , de la séquence de sortie d’une exécution précédente à un instant Tb précédent. Procédé selon l’une quelconque des revendications 1 à 6, caractérisé en ce qu’il est exécuté de manière itérative, chaque nouvelle exécution étant effectuée à un nouvel instant Tb défini comme un instant auquel aucune charge de la séquence de sortie d’une exécution précédente à un instant Tb précédent ne se trouve dans une portion du collecteur allant de la première allée a 1 à l’allée contenant la première charge de la séquence de sortie de la nouvelle exécution au nouvel instant Tb. Procédé selon l’une quelconque des revendications 1 à 6, caractérisé en ce qu’il est exécuté de manière itérative, chaque nouvelle exécution étant effectuée à un nouvel instant Tb calculé avec la formule suivante : , avec : une dernière charge utile, provenant de la ème position dans l’allée , de la séquence de sortie d’une exécution précédente à un instant T précédent, et obtenu par une incrémentation d’une unité de l’instant Tb précédent.