Bonjour,
Je souhaiterai soumettre vos méninges à un petit pb.
On a 20 files permettant de stocker des lots de marchandises. Toutes ces marchandises sont à destination d'un même lieu. Chaque file correspond à une livraison.
Toute les X minutes (X dépend du nombre de départ par heure) on a une file complète (15 lots) qui est envoyé sur une livraison. Il peut arriver qu'il y ait un problème avec le transporteur (ce qui va ralentir le nombre de départ par heure) et nous obliger à stocker simultanément davantage de livraison en attente.
En amont des files on a un trieur qui va envoyer le colis qui se présente sur le premier départ disponible. On a donc un stockage sur les livraisons selon les règles FIFO.
Dans le nouveau dispositif, nous voulons introduire la notion de colis prioritaires.
Nous savons en temps réel combien de colis prioritaires sont injectés dans le circuit (avant trieur) mais une fois dans le circuit nous procédons à des tests par échantillonage sur les colis (certains peuvent mettre du temps à arriver).
Il est donc impossible de savoir dans quel ordre les colis arrivent devant le trieur. Quand un colis prioritaire se présente il peut y avoir un certain nombre de ligne en attente déjà remplies.
Les objectifs que je me fixe sont:
-Quand un colis prioritaire se présente au niveau du trieur il doit être envoyé sur le prochain départ
-L'ordre FIFO des colis standard doit être conservé
-Essayer d'avoir toujours des départ de 15 lots (taux de chargement 100%)
J'ai écrit l'algorithme que voici:
Cet algorithme nécessite une ligne supplémentaire (dite "ligne d'optimisation")
- Durant la composition d'une livraison, on a un compteur qui indique le nombre de colis prioritaire dans le circuit (donc susceptible d'arriver)
- Pour chaque mission on créé un "airbag" qu'on va propager aux livraisons suivantes tant que les colis prioritaires ne sont pas arrivés:
Le calcul de la taille de l'airbag se fait comme suit : nbColis_Prio_Attendu + nbColis_optimisation - nbPLacesLibres (dans les airbags précédents).
- Si on arrive au nombre de lots max (15) - taille Airbag. On arrête d'envoyer des colis dans cette file.
- Quand un colis prioritaire se présente et qu'on est déjà en présence de ligne avec airbag on l'envoi sur la première place libre dans les airbags
(le compteur nbColis_Prio_Attendu est décrémenté). S'il n'y a pas d'airbag cela veut dire que la livraison courante est la prochaine à partir (il n'y a pas d'autres livraisons stockées dans les réservoirs) On décrémente le compteur nbColis_Prio_Attendu et on envoie le colis prio dans la ligne courante.
- A chaque fois qu'on constitue un airbag dans une file,on envoie les colis standard qui suivent en ligne d'optimisation (un colis standard en ligne d'optimisation pour un colis prioritaire attendu)
- Si arrivé à l'heure H pour un départ on est toujours en attente de colis prioritaire , on libère la file et on compléte le chargement avec des colis en voie d'optimisation (pour avoir un taux de chargement à 100%). En effet, une fois arrivé à l'heure H, la livraison doit partir avec ou sans les colis prioritaires. Il faut juste propager l'airbag pour se donner la capacité d'accueillir les colis prioritaires sur la mission suivante.
Quand il n'y a plus de colis prioritaire attendu on arrête d'envoyer des colis en voie d'optimisation. Ainsi on "tue" l'airbag et tout redevient normal.
Pour résumé avec cette méthode:
-les colis stockés en voie d'optimisation peuvent être décalé d'une mission maximum si des colis prio prennent leurs places
-Une fois devant le trieur, les colis prios prennent le prochain départ
-le taux de chargement est toujours de 100%
Mais le problème c'est qu'il me faut segmenter la ligne d'optimisation pour compléter les chargements. Or dans le système on ne peut pas couper une ligne.
A partir du moment où on ouvre une ligne on libère tous les colis présents.
Avez vous d'autres idées pour résoudre ce problème? on est libre d'imaginer d'autres formes pour les réservoirs
Je ne sais pas si je suis très clair dans mes explications. N'hésitez pas à poser des questions
Partager