[RECH] Optimisation d'un tableau excel à l'aide du solveur.

Résolu/Fermé
Paradjanov Messages postés 57 Date d'inscription mardi 18 août 2020 Statut Membre Dernière intervention 25 octobre 2020 - 18 août 2020 à 20:21
Paradjanov Messages postés 57 Date d'inscription mardi 18 août 2020 Statut Membre Dernière intervention 25 octobre 2020 - 29 sept. 2020 à 23:42
Bonjour à tous,

Je suis confronté à un problème quant à l'utilisation du solveur (je me suis renseigné et je pense que c'est le bon outil à utiliser car je ne m'y connais vraiment pas en VBA).

J'ai vu une vidéo tuto très bien ici : https://www.youtube.com/watch?v=6HidDATdDaU - Qui m'as bien fait comprendre le principe « de base ».

Néanmoins, et vous devez vous en doutez en postant un message ici, mon problème n'est pas identique (en termes de variables) et j'espère que vous pourrez m'éclairer sur sa solution !

Alors voilà,
J’ai deux ateliers différents nommés : Atelier 1 et Atelier 3 (oui des fois il n’y a pas de numéro 2, soit…).
Dans ces deux ateliers sont fabriqués, chaque semaine des pièces de matières différentes :
- Matière 1
- Matière 2
- Matière 3
- Matière 4
- Matière 5
- Matière 6
Lorsque que la case de production est vide, cela veut dire que nous n’avons pas de pièce fabriquée cette semaine et donc pas de convoyage.
Chaque référence de pièces possède un type de matière et un poids unique (cf. fichier Excel - ex : Référence 1 : 20 Kg en matière 1 ; Référence 2 : 35 Kg en matière 1, Référence 3 : 47,5 Kg en matière 2, etc…).
Et pour corser le tout, le convoyage des pièces, en fonction de l’atelier 1 ou 3, se fait à l’aide de conteneur ayant un poids différent :
- Conteneur 1 : 180 Kg et Conteneur 2 : 250 Kg en capacité Maximum pour l’atelier 1
- Conteneur 1 : 250 Kg et Conteneur 2 : 450 Kg en capacité Maximum pour l’atelier 3
Nous disposons de 5 conteneurs par jour pour l’atelier 1 et de 7 conteneurs par jour pour l’atelier 3.
Ma question est la suivante :
• Comment faire pour « optimiser », par atelier et par matière, le convoyage des pièces dans les différents conteneurs ? C’est-à-dire, comment réussir à combler, dans la limite du possible, la capacité des différents conteneurs avec le plus de références possibles ?
Ex : Réf 1,2,3 : 15, 150 et 10 Kg de matière 1 --> Ok 175 Kg pour le conteneur 1 sur 180 Kg Maxi.

Je pense qu’avec l’outil Solveur ce serait possible d’obtenir une optimisation d’un lot de références (de la même matière) dans un conteneur de taille variable défini par la somme totale du poids desdites références obtenu après résolution de l’équation du solveur.
Ex : si on obtient 4 références pour 170 Kg --> Ok conteneur 180 Kg mais si l’on obtient 7 références pour 244,7 Kg --> Il faudra un conteneur de 250 Kg for sure !

Il y a des références « spéciales » : ici j’ai en tête PS-22007001 qui pèse 550 Kg et est convoyé avec son propre conteneur de 650 Kg.

Est-ce que la méthode change si certaines références, qui reviennent souvent, sont prioritaires par rapport à d’autres ? Au cela aura juste un impact au niveau des contraintes du solveur ?

Une fois les différentes combinaisons obtenues, elles seront « redirigées » via rechercheV ou Equiv dans un onglet « planning » pour détailler comment s’organise les conteneurs au jour sur la semaine pour être envoyé plein en fin de journée. (Ex combinaison 1 rempli le lundi pour être envoyé le et combinaison 2 pour envoyer le mardi soir)

Merci par avance pour votre temps de lecture pour ce problème et de votre future réponse,

Cordialement,
Paradjanov


Fichier dispo au lien suivant : https://www.cjoint.com/c/JHssvtDG007

80 réponses

JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
22 août 2020 à 08:21
Bonjour,

Voilà un nouveau classeur, xlsm cette fois ci.
Il y a un bouton, tu appuies dessus et, si tu as autorisé les macros, tu regardes ce qui se passe.

Tout n'est pas au point, bien entendu!
Je ne gère pas les n_MAX ni les spécifiques pour le moment.

https://www.cjoint.com/c/JHwgrzCKlWx

Les macros sont bricolées et très courtes mais il y a un enchevêtrement d'indices qui fait mal au crâne.
1
Paradjanov Messages postés 57 Date d'inscription mardi 18 août 2020 Statut Membre Dernière intervention 25 octobre 2020 18
Modifié le 22 août 2020 à 10:48
Bonjour,

J'ai bien regardé ton fichier et yes c'est top !

Oui tkt je me doute que ce n'est qu'un premier jet qui ne prend pas en compte les n_Max ni les spécifiques tant bien que tu as pris en compte le N_Max dans le cas de l'atelier 1 matière 2 classe température 5 (2 références) mais peut être gérable car la somme des références n'excédait pas la capacité MAX du conteneur ?

Sinon pour répondre à ton ancien message :

Merci pour l'explication des tirets pour obtenir soit un 0 soit un 1.
J'ai bien réussi à installer opensolveur pour qu'il se lance directement à l'ouverture d'excel.

Pour l'organisation des juxtapositions, peut-on définir une contraintes qui permet de mettre en avant une matière spécifique ? Ex : si je doit commencer la semaine avec la matière 6 en raison de contraintes de l'atelier, il faudra peut être faire 1 poche de matière 6 puis 4 poches de matière 2 et 3 pour la première journée. Dans ce cas, il faut poser toutes les hypothèses dès le départ ou cela peut se faire mais cela sera bien plus complexe niveau macro/BPP à mettre en place ?

Car la cela marche bien si l'on fait matière par matière (ce qui est le plus logique je te rassure). Néanmoins et dans la réalité, dans une journée sur les 5 conteneurs ils ne sont pas figés pour une seule et même matière. Ex : 1 conteneur matière 2 puis 3 conteneur matière 4 et 1 conteneur matière 6. Je ne t'avais peut être pas dit ça et je m'en excuse de le dire que maintenant...
Et le top, ce serai d'avoir en fonction des références qui "sortent" un regroupement qui maximise le remplissage des conteneurs toutes matières confondus. Bien sur tout en gardant, par conteneur, une seule et même matière possible.1*

Je ne sais pas si tu vois la nuance entre la méthode de calcul sur ton fichier et la méthode que j'essaye de t'expliquer. En gros il y aura toujours juxtaposition, mais au lieu d'avoir des groupes entier de matière, on pourra se retrouver avec juste un conteneur (en gros je pense à un gros calcul global qui après ressort les conteneurs les mieux rempli dans le cas où on n'a pas de références spécifiques et sinon si référence spécifique, elles seront prioritaires et ont essaiera de les combler avec d'autre du même type au maximum).

Mais je pense que cette étape sera prise en compte par la suite quand tu dis que l'on ne prend pas encore les spécifiques et les n_Max non ?


J'ai regardé le code VBA des deux fonctions, sans surprise je comprend bien celui pour effacer vu qu'il est relativement simple.

Pour le 1er et le plus important, je me doute que l'idée globale est de regrouper puis de lancer à la suite les différents BPP (d'où le fait que lorsqu'on lance la macro je voit au fur et à mesure les différentes étapes s'afficher).
Ton nombre total de ref (que tu as regroupé en une colonne en haut de la feuille) te donnes ton nombre de ligne de ta matrice qui détaille le remplissage. Mais pour l'histoire du nombre de colonnes, que l'on obtenait via le nb de conteneur quand on le faisait à la main, je ne vois pas comment tu le génère. Ou alors vu que tu me parlais de matrice, tu fais une multiplication du nombre de ref par le nombre à produire qui te donne ton nombre de colonnes pour chaque étape ?

Dans ta macro la ligne "incrémentation des pointeurs ligne et colonne" que décrit-elle ?
Et pour l'autre "contrôle bonne juxtaposition des convois" cela correspond à contrôler que l'on est bien les uns à la suite des autres pour ne pas avoir de conteneurs vide entre eux ou de problèmes de calculs vu que tu poses, lorsque tu calcul pour l'étape 1, que les données de l'étape 2 soit = 0 de ce que j'ai compris ?

Sinon, oui merci d'avoir marqué à la main "Contrainte de respect de la capacité de chaque conteneur selon qu'il est choisi (variable binaire à 1)" et "Il faut que "Remplissage des conteneurs" soit inférieur ou égal à "capacité des conteneurs choisis" qui correspondent tout deux à deux des conditions dans le BPP (ce sur quoi j'ai buté hier soir mais finalement compris avant d'aller dormir ^^).

J'ai vu que tu as fait une matrice globale des températures tout à droite. à quoi te sert-elle ? C'est parce qu'il faut penser à un autre moyen pour gérer les classes de température comme tu l'as dis précédemment (cas à part) ?

Et dernière question, j'ai vu ton tableau en haut à droite comprenant 3 colonnes "3 devant, 3 milieu et 3 derrière". A quoi sert-il ? ^^'

Merci par avance,

Cordialement

Edit : Je pense à ça pour le 1* car la il est question que de 2 pièces la mais en général il y a plutôt 8 - 16 ou 32 pièces à faire, soit 2 pièces par conteneurs pour mini 16 conteneur si 32 pièces, etc... Donc en général elles sont étalées sur toute la semaine.
1
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
22 août 2020 à 15:37
... ne prend pas en compte les n_Max ni les spécifiques ...

C'est parce j'estime qu'il est préférable que tu prennes connaissance de l'automatisation de l'optimisation le plus tôt possible et que tu ne perdes pas de temps à trop chercher dans des zones non "rentables" pour ton planning serré.
Et puis, ça te permet d'avoir quelque chose à présenter, même si ça n'est pas complet.

Le problème, c'est que tu rajoutes des fonctionnalités à tour de bras et que tu ne proposes pas de façons de les gérer (que ce soit au niveau des données et de leurs structures ou au niveau de l'algo pour les traiter).
Tu ne décris pas non plus l'organisation dans laquelle s'inscrit cette fonctionnalité (la priorisation matière est faite par quelqu'un? suivant quel processus décisionnel? il utilisera la feuille de calcul? il doit pouvoir prioriser en temps réel ou tranquillement le soir pour le lendemain? quelle interface utilisateur prévoir?)

... définir une contraintes qui permet de mettre en avant une matière spécifique ...

La priorisation actuelle est Atelier/Matière/Classe de température.

Il est possible d'inverser, en amont de l'optimisation, la priorisation pour les 2 derniers termes et avoir Atelier/Classe de température/Matière.
Ce sera alors le module d'extraction des données qui se chargera de ça.

Je préconiserais plutôt de le traiter post optimisation en offrant une possibilité de modifier l'ordre des convois (dans le respect, je suppose, des contraintes de classes de températures)
Dans ce cas, on peut considérer que c'est de l'excel "manuel" et le déléguer au module de réintégration du convoyage optimisé.

Tu vois que dans les 2 cas le module d'optimisation n'est que très peu touché.
Il travaille sur les données que tu lui présentes et restitue le convoyage que tu te charges de réintégrer dans ton classeur Excel.

... dans la réalité, dans une journée sur les 5 conteneurs ils ne sont pas figés pour une seule et même matière ...

Dans l'exemple que tu donnes tu ne parles pas de classes de températures....
Tu mets également un 1* dans ton texte. C'est une note bas de page?
Décrit ce que tu veux sur la base du convoyage qui résulte de la macro actuelle.
Je te demande un résultat et une façon d'y arriver.
Et tu me retournes le classeur avec le tableau issu de l'optimisation et, à côté, le tableau "réarrangé". Et tu n'oublies pas les règles de gestion (description du processus décisionnel qui t'a amené à cette réorganisation du convoyage).

... cette étape sera prise en compte par la suite quand tu dis que l'on ne prend pas encore les spécifiques et les n_Max non ...

Heuuuuu...... pas sûr d'avoir compris!
L'intégration des spécifiques et des n_MAX se fera dans le cadre de l'optimisation actuelle et n'intègre aucune priorisation.

As-tu réellement une dead line à dimanche soir?
Si c'est le cas, oublie tous tes élargissements de fonctionnalités.

J'ai regardé le code VBA des deux fonctions, sans surprise je comprend bien celui pour effacer vu qu'il est relativement simple.

Il est effectivement très très très simple!

... regrouper puis de lancer à la suite les différents BPP ...

"regrouper" je ne vois pas trop.
La macro est pilotée par les classes de températures et le nombre total de ref devrait être calculé par macro mais vu le temps imparti, j'ai créé rapidement une petit tableau manuel.
Ce nombre total de ref indique au programme combien de ligne le modèle BPP doit réserver pour optimiser cette classe de température.
Le nombre de colonnes qui résultera de l'optimisation n'est pas connu à l'avance.C'est la cellule objectif qui le contiendra en fin d'optimisation.
Ces 2 données seront utiles pour décaler et redimensionner le prochain BPP (celui sur la classe suivante).
C'est pour ça que tu vois beaucoup de Offset(...) et de Resize(...) dans la macro.

Au fur et à mesure du déroulement de la macro, il faut cumuler toutes ces données (d'où l'incrémentation des pointeurs")
Pour être plus précis :
le premier BPP utilise G46:AE51 (parce qu'il y a 6 références dans la première classe d'où 6 lignes )comme variables entières et G71:AE71 comme variables binaires.
Le résultat me donne 2 conteneurs

Pour le BPP suivant, comme ne ne veux pas perdre mes résultats précédents, je décale G46 de 6 lignes et de 2 colonnes et je prends 4 lignes (c'est le tableau du nombre de réf qui me le dit) sur 25-2 colonnes, soit I52:AE55 et I71:AE71 pour les variables.
J'obtiens à nouveau 2 conteneurs.

Pour le BPP suivant, comme ne ne veux pas perdre mes résultats précédents, je décale G46 de 6+4 lignes et de 2+2 colonnes et je prends 7 lignes (c'est le tableau du nombre de réf qui me le dit) sur 25-2-2 colonnes, soit K56:AE62 et K71:AE71 pour les variables.
J'obtiens 3 conteneurs.

Pour le BPP suivant, comme ne ne veux pas perdre mes résultats précédents, je décale G46 de 6+4+7 lignes et de 2+2+3 colonnes et je prends 2 lignes (c'est le tableau du nombre de réf qui me le dit) sur 25-2-2-3 colonnes, soit N63:AE64 et N71:AE71 pour les variables.
J'obtiens 2 conteneurs.
etc...
Donc le nombre de colonnes est fourni par BPP.

... "contrôle bonne juxtaposition des convois" ...

BPP fournit parfois les résultats "éparpillés sur les colonnes.
Il faut donc les resserrer à gauche.

... matrice globale des températures tout à droite ... 

Oui, j'ai voulu chercher une façon de mettre les références produit en classe de températures pour minimiser le nombre (anticipé) de conteneurs.
D'où les tableaux 3_devant, 3_milieu et 3_derrière qui comptent le nombre de références qui peuvent être mises dans une même classe (+ ou - 5°) en partant du début pour devant, du milieu pour ... milieu etc...
Partant de là, il est possible de modéliser la mise en classes comme l'écriture de nombres de 19 positions (parce que matière_2 a 19 référence à produire en semaine 1) en multi-bases, celle des 3_devant(i).
Chaque nombre sera une mise en classe possible.
Le premier chiffre de gauche pourra aller de 1 à 7, le second de 0 à 6, le troisième de 1 à 6 et le dernier de 0 à 1.
Il y a une contrainte complémentaire qui est que si une position i d'un nombre contient un chiffre p alors les p-1 positions suivantes du même nombre sont à zéro.
Cette contrainte réduit considérablement le nombre de combinaisons et, comme on veut réduire le nombre de conteneurs, ce nombre de combinaisons sera réduit aux combinaisons ayant le moins de conteneurs (un conteneur est un chiffre différent de zéro dans le nombre à 19 chiffres).
On devrait atteindre une dizaine de mises en classe prometteuses.
Il suffirait alors de lance l'optimisation sur chaque mises en classes retenues pour ne garder que l'une des meilleures, c'est à dire celles qui nécessitent le moins de conteneurs.

C'est pour ça que je disais que la mise en classe est un problème à part entière.
J'ai commencé manuellement pour finir par abandonner faute de temps.
Je crois que cette mise en classes est un problème d'algo bien connu. Il suffit de trouver le bon site ou le bon bouquin qui le décrit (généralement je regarde d’abord le livre de Berstel, Pin et Pocchiola "mathématiques et informatiques")

Edit : Je pense à ça pour le 1* car la il est question que de 2 pièces la mais en général il y a plutôt 8 - 16 ou 32 pièces à faire, soit 2 pièces par conteneurs pour mini 16 conteneur si 32 pièces, etc... Donc en général elles sont étalées sur toute la semaine.

Là c'est le coup de grâce!!!
Faut-il revoir la façon d'aborder le problème et raisonner en semaine?
Quand je te demande d'envoyer des instances représentatives, tu n'en envoie qu'une (j'en demandais 10) et en plus il n'y a pas les cas généraux!!!!!

Tu n'aurais pas dû faire un Edit.


Cordialement
1
Paradjanov Messages postés 57 Date d'inscription mardi 18 août 2020 Statut Membre Dernière intervention 25 octobre 2020 18
Modifié le 22 août 2020 à 19:06
Bonjour,

Tout d’abord merci pour toutes tes réponses que je viens de lire attentivement.

Avant cela j’était en train de comprendre l’algorithme que tu me décris dans le message 14 et je pense avoir compris la logique.


Boucle sur les classes de températures
traitement des cas spécifiques et n_MAX
Lancement Modèle BPP sur références résiduelles de la classe de températures
nbConteneurs <--- solution Modèle BPP
Solution <-- convoyage Modèle BPP
Création puis lancement modèle Minimisation conteneur n° nbConteneurs
Si convoyage Modèle Minimisation conteneur n° nbConteneurs meilleur que Solution
Alors Solution <-- convoyage Modèle Minimisation conteneur n°nbConteneurs
Sinon
Lancement modèle max remplissage
Si convoyage Modèle max remplissage meilleur que Solution
Alors Solution = convoyage Modèle max remplissage
Sinon
dichotomie sur la minimisation des restes à remplir des conteneurs pleins
Si convoyage minimisation des restes à remplir meilleure que Solution
Alors Solution <-- convoyage minimisation des restes à remplir
Fin Boucle


On trie premièrement nos données via les onglets différents (Atelier 1 onglet 1 et Atelier 2 onglet 2 jusque-là pas de pb c’est ce dont on parle depuis le début).
Ensuite, dans ces onglets on fait un tri dans leurs tableaux correspondant pour avoir les lignes des différentes matières possibles.
Vient alors la dernière donnée dont on ne peut pas trier/filtrer comme l’atelier et la matière : la classe de température.

Donc si je comprends bien le cheminement (reprend moi si je me trompe) :
1) Boucle classe température (c’est pour sélectionner seulement ensemble les références compatibles dans le conteneur).
De là on obtient différentes combinaisons possibles à mettre ensemble « exploitables ».
2) Sachant qu’il y a des références qui sont toute seules (donc qui monopolise 1 conteneur à elle seule) et des références dont le rangement dans un conteneur est limité (ex pour le cas à 2 références MAXI par conteneur)
Ici ce sont les dernières contraintes pour réussir, par rapport à l’étape 1) à obtenir une liste de combinaisons de références possible ensemble.
3) On utilise le modèle BPP comme tu me l’a expliqué
Là c’est ce 1er modèle qui va nous donner un nombre de conteneurs requis pour assurer la production de la semaine mais sans prendre en compte qu’ils doivent être tous remplis au MAX (en prenant les contraintes atelier, matière, température).
4) On utilise un second modèle (autre que BPP ou un modèle BPP configuré différemment ?!)
Ce second modèle est celui qui va venir maximiser le remplissage des poches comme on le souhaite.

Et ensuite pour la suite de l’algorithme, tu prends en compte d’autres modèles en les comparant à la solution initiale pour savoir si on remplace la solution initiale par ces modèles la ou si on continue de chercher (avec le modèle max remplissage puis avec la dichotomie) pour trouver l’optimisation la plus « puissante ».


... ne prend pas en compte les n_Max ni les spécifiques ...

C'est parce j'estime qu'il est préférable que tu prennes connaissance de l'automatisation de l'optimisation le plus tôt possible et que tu ne perdes pas de temps à trop chercher dans des zones non "rentables" pour ton planning serré.

Oui je sais bien qu’il ne me reste vraiment pas beaucoup de temps dans ce planning . Après normalement on doit rendre le rapport mercredi soir mais je pense pouvoir pousser à vendredi prochain. C’est juste que pour écrire le rapport, expliquer comment je compte faire (grâce à ton aide avec l’explication d’opensolveur + de l’algorithme de VBA) pour obtenir le fichier demandé c’est cette deadline.

Et puis, ça te permet d'avoir quelque chose à présenter, même si ça n'est pas complet.


Je comprends et je suis d’accord avec toi, ma présentation finale a lieu de le 2 septembre. Donc dans l’idée, et heureusement, pour le côté théorique du rapport a expliqué comment je m’y prends j’ai encore jusqu’à vendredi soir prochain sans relecture de mon n+1 (là j’ai une deadline dimanche soir car je lui donne le rapport lundi matin et il me fait un retour dans la journée pour les « dernières » modifications. Enfin je mets dernières entre guillemets bien sur car je suis encore dans le cœur du projet pour réussir à faire ça, grâce à ton aide).

Le problème, c'est que tu rajoutes des fonctionnalités à tour de bras et que tu ne proposes pas de façons de les gérer (que ce soit au niveau des données et de leurs structures ou au niveau de l'algo pour les traiter).


C’est vrai que c’est compliqué d’avoir toutes les données d’un coup. Mais la avec type atelier/matière/température et les n spécifique et n max ont a tout et plus aucunes mauvaises surprises promis !

Tu ne décris pas non plus l'organisation dans laquelle s'inscrit cette fonctionnalité (la priorisation matière est faite par quelqu'un? suivant quel processus décisionnel? il utilisera la feuille de calcul? il doit pouvoir prioriser en temps réel ou tranquillement le soir pour le lendemain? quelle interface utilisateur prévoir?)


Alors cette fonctionnalité s’inscrit directement dans l’organisation. A l’heure actuelle, il n’y a aucun moyen pour prédire les bonne références à produire en même temps et on fait ce que l’on peut quand on peut (autant dire pas du tout optimisé) et du coup les opérateurs peuvent travailler normalement comme être sollicité à 200 % et la c’est vraiment pas terrible… La priorisation matière est fait de base par quelqu’un avec un planning prévisionnel sur 4 semaines. Sauf que ce planning ne prenant pas en compte les contraintes détaillées avant : atelier/matière/température, des fois il y a des incohérence (ex : je demande à fabriquer 3 pièces car j’en ai 3 sur mon planning sauf qu’elles se fabriquent par 2).

MAIS, car j’imagine que la tu te dis que c’est peine perdue.
Ce n’est pas du tout le cas car le fichier que je mets en place doit servir en insérant ces données du planning prévisionnel (réalisé par le service supply-chain) :
- Affirmer ou infirmer que la production est réalisable (en gros, une fois les différentes contraintes prises en compte dans les calculs des modèles, si on ne trouve pas de solution c’est qu’ils demandent trop de pièces et que nous ne possédons pas assez de conteneurs pour les faire.

Dans le cas où on ne peut pas le faire : conclusion que ce n’est pas possible au vu des quantités (mais avec la covid-19 et la baisse de commandes clients on ne devrait pas être dans ce cas-là).

Dans le cas où on peut faire le planning, ce sera pour optimiser le remplissage des conteneurs comme demandé pour organiser au mieux le secteur.

Pour répondre à ta question, il doit pouvoir obtenir un planning « automatique » via les données de base adapté à son secteur (en prenant les contraintes atelier/matière/température)  soit en gros, une fois le planning validé qu’on peut produire les références : une optimisation comme dans le premier exemple que tu m’as envoyé pour matière 6 (matrice orange 4 x 5).
Quand tu dis quel interface utilisateur prévoir c’est-à-dire ? dans l’idée un calcul via un bouton macro comme tu m’as montré « optimiser atelier 1 ».

Mais la grande question qui me trotte en tête, tu m’as dis que normalement ce serai bon mais je te demande quand même confirmation, c’est que la je t’ai envoyé des données d’un planning sur 1 semaine. Mais dans le planning sur 4 semaines par exemple, les références « tournent » et leurs nombre à produire aussi.

Du coup, l’algorithme que tu me propose avec les différents modèles, pourront s’adapter en vu d’un nombre différents et générer un remplissage des poches lié à ces nouvelles références de la semaine ?

Après, étant donné le timing serré et que c’est quelque chose de nouveau que je mets en place, si je sors un planning à la semaine qui prend en compte les données qu’on lui donne ce sera AMPLEMENT SUFFISANT étant donné le timing restant. Dans les axes d’améliorations je dirai qu’on peut augmenter à plusieurs semaines (en modifiant l’algorithme ? ou en réussissant à prendre en compte les semaines les unes à la suite des autres. Mais dans tous les cas, le calcul revient au même car on aura chaque semaine des références spécifiques pour définir un planning semaine.

J’espère ne pas t’avoir perdu jusqu’ici…


... définir une contraintes qui permet de mettre en avant une matière spécifique ...
La priorisation actuelle est Atelier/Matière/Classe de température.


Ok et c’est ce que je cherche donc impeccable.

Il est possible d'inverser, en amont de l'optimisation, la priorisation pour les 2 derniers termes et avoir Atelier/Classe de température/Matière.
Ce sera alors le module d'extraction des données qui se chargera de ça.

Je préconiserais plutôt de le traiter post optimisation en offrant une possibilité de modifier l'ordre des convois (dans le respect, je suppose, des contraintes de classes de températures)
Dans ce cas, on peut considérer que c'est de l'excel "manuel" et le déléguer au module de réintégration du convoyage optimisé.

Tu vois que dans les 2 cas le module d'optimisation n'est que très peu touché.
Il travaille sur les données que tu lui présentes et restitue le convoyage que tu te charges de réintégrer dans ton classeur Excel.


Je comprends. Après le meilleur des cas est de prioriser atelier/matière/classe de température donc ok la dessus aussi.

... dans la réalité, dans une journée sur les 5 conteneurs ils ne sont pas figés pour une seule et même matière ...


Alors, actuellement c’est ce qu’il se passe car l’organisation est dépendante de quand arrive les références.

MAIS, dans l’étude que je fais actuellement, on ne pourrait pas générer de planning si on le prenais en compte.

Je dois générer un planning type matière 6 (matrice 4 x 5) de toute la semaine, en ayant pour chaque conteneur différentes références priorisées selon atelier/matière/température. Parcontre, en fonction de comment sont « étalonnés » les références, il est fort possible d’avoir jour 1 :
- Un conteneur de matière 2
- Un conteneur de matière 3
- Les 3 conteneur reste de matière 1

Comme ça on prend en compte les différentes références et leurs nombres max possible par conteneur.
Dans l’exemple que tu as fait qui met matière après matière, j’aurai tendance à dire que c’est ce qu’il faut faire. Mais dans le cas où j’ai la référence (à max 2 par conteneur) en grande quantité disons 16. Il me faudra obligatoirement 16/2 = 8 conteneurs (répartis dans la semaine le plus tôt possible) qui seront remplis avec les autres à côtés.
En gros si cette quantité nous dis que l’on doit utiliser 8 conteneurs, ces 8 premiers conteneurs seront utilisé par 2 de ces références et des références annexes (dans le planning tant qu’elles sont ok en priorisation atelier/matière/température qu’on pourra mettre en même temps).

Pour résumé, il faut à l’aide des données de fabrication prévisionnelles de la semaine et en prenant en compte les données ici (atelier/matière/température et n spécifique et n max) obtenir un planning semaine si réalisable comme l’exemple que tu m’as montré. Les données prévisionnelles semaines sont une partie des données de la base de données globale que j’ai pour chaque références (code article, client, référence, atelier, matière, température, poids). Comment faire pour que cela se mettre à jour entre 2 semaines de production lorsque les références à produire tournent ?

Par la suite et après avoir généré le planning  Si 32 références total semaine et que l’on peut produire ça en 15 conteneurs sur 25  semaine réalisable et il restera du temps (et là après ce sera la personne qui reprendra la suite pour aura surement un projet pour trouver quelque chose pour combler). Et c’est pour ça, qu’après avoir étudié ta proposition d’algorithme, cela me semble vraiment adéquat pour définir ce planning et répondre au cahier des charges.

J’espère que je ne t’ai pas perdu et que j’ai été assez clair dans mon besoin synthétisé.



Dans l'exemple que tu donnes tu ne parles pas de classes de températures....


C’est parce qu’au début je pensais pouvoir prendre en compte la température avec un tolérance de +-5 °. Mais ce que j’ai proposé par la suite c’est de gérer cette donnée en ayant les fameuses classes de températures pour regrouper ces données.
Le seul hic c’est que chaque référence possède une température donnée. Elle doit donc se voir attribuer une classe de température lié à sa température pour être utilisable dans l’algorithme dont tu m’as parlé. Et cela permettra également, quel que soit le nouveau contenu du planning initial entre les différentes semaines, de pouvoir les trier et les utiliser.
Bien sûr ici, je ne souhaite pas faire un planning de + d’une semaine. Cela sera envisageable pour les personnes futures sur de l’optimisation plus large.


Et tu me retournes le classeur avec le tableau issu de l'optimisation et, à côté, le tableau "réarrangé". Et tu n'oublies pas les règles de gestion (description du processus décisionnel qui t'a amené à cette réorganisation du convoyage).


Qu’entends-tu par le tableau réarrangé ? Et oui c’est vrai que je n’ai pas fait comme toi un fichier avec les différentes étapes. Les règles de gestions, tu veux dire la démarche détaillée ?!


As-tu réellement une dead line à dimanche soir?
Si c'est le cas, oublie tous tes élargissements de fonctionnalités.


Ma deadline a dimanche soir est pour donner théoriquement ma version final à mon n+1. Je peux encore pousser jusqu’à mercredi soir prochain pour qu’il me fasse un retour jeudi (dernier carat pour le rapport). Mais après comme dit plus haut, la présentation est le 2 septembre prochain donc j’ai encore un petit peu de temps, une fois avoir détaillé dans le rapport les principes de bases de ce que l’on voit ensemble, pour finir le fichier Excel comme demandé.


Le nombre de colonnes qui résultera de l'optimisation n'est pas connu à l'avance. C'est la cellule objectif qui le contiendra en fin d'optimisation.


Oui d'accord car c’est le nombre de conteneur que l’on doit utiliser pour y parvenir comme vu ensemble.

Ces 2 données seront utiles pour décaler et redimensionner le prochain BPP (celui sur la classe suivante).
C'est pour ça que tu vois beaucoup de Offset(...) et de Resize(...) dans la macro.


Donc dans l’idée en utilisant des Offset et Resize, on peut adapter avec un changement du nombre de références et d’une quantité à produire (quand cela varie entre les semaines). Comme ça, cela se met à jour et ça prend en compte les nouvelles références ? C’est ce que l’on cherche.

Au fur et à mesure du déroulement de la macro, il faut cumuler toutes ces données (d'où l'incrémentation des pointeurs")
Pour être plus précis :
le premier BPP utilise G46:AE51 (parce qu'il y a 6 références dans la première classe d'où 6 lignes )comme variables entières et G71:AE71 comme variables binaires.
Le résultat me donne 2 conteneurs

Pour le BPP suivant, comme ne ne veux pas perdre mes résultats précédents, je décale G46 de 6 lignes et de 2 colonnes et je prends 4 lignes (c'est le tableau du nombre de réf qui me le dit) sur 25-2 colonnes, soit I52:AE55 et I71:AE71 pour les variables.
J'obtiens à nouveau 2 conteneurs.

Pour le BPP suivant, comme ne ne veux pas perdre mes résultats précédents, je décale G46 de 6+4 lignes et de 2+2 colonnes et je prends 7 lignes (c'est le tableau du nombre de réf qui me le dit) sur 25-2-2 colonnes, soit K56:AE62 et K71:AE71 pour les variables.
J'obtiens 3 conteneurs.

Pour le BPP suivant, comme ne ne veux pas perdre mes résultats précédents, je décale G46 de 6+4+7 lignes et de 2+2+3 colonnes et je prends 2 lignes (c'est le tableau du nombre de réf qui me le dit) sur 25-2-2-3 colonnes, soit N63:AE64 et N71:AE71 pour les variables.
J'obtiens 2 conteneurs.
etc...
Donc le nombre de colonnes est fourni par BPP.


Oui je comprends l’acheminement, je n’arrive juste pas à mettre une image sur le mot « pointeurs ». Ils correspondent à quoi au juste ?


... "contrôle bonne juxtaposition des convois" ...
BPP fournit parfois les résultats "éparpillés sur les colonnes.
Il faut donc les resserrer à gauche.


D’accord je comprend mieux ^^


... matrice globale des températures tout à droite ... 
Oui, j'ai voulu chercher une façon de mettre les références produit en classe de températures pour minimiser le nombre (anticipé) de conteneurs.
D'où les tableaux 3_devant, 3_milieu et 3_derrière qui comptent le nombre de références qui peuvent être mises dans une même classe (+ ou - 5°) en partant du début pour devant, du milieu pour ... milieu etc...
Partant de là, il est possible de modéliser la mise en classes comme l'écriture de nombres de 19 positions (parce que matière_2 a 19 référence à produire en semaine 1) en multi-bases, celle des 3_devant(i).
Chaque nombre sera une mise en classe possible.
Le premier chiffre de gauche pourra aller de 1 à 7, le second de 0 à 6, le troisième de 1 à 6 et le dernier de 0 à 1.

Il y a une contrainte complémentaire qui est que si une position i d'un nombre contient un chiffre p alors les p-1 positions suivantes du même nombre sont à zéro.
Cette contrainte réduit considérablement le nombre de combinaisons et, comme on veut réduire le nombre de conteneurs, ce nombre de combinaisons sera réduit aux combinaisons ayant le moins de conteneurs (un conteneur est un chiffre différent de zéro dans le nombre à 19 chiffres).
On devrait atteindre une dizaine de mises en classe prometteuses.
Il suffirait alors de lance l'optimisation sur chaque mises en classes retenues pour ne garder que l'une des meilleures, c'est à dire celles qui nécessitent le moins de conteneurs.


Je vois à peu près l’idée mais je pense être incapable, à l’heure actuelle, de mettre ça en place. Et sinon est-ce possible de regrouper comme j’avais pensé au début via les tableaux ? Je n’ai pas d’idées là-dessus encore :/.

C'est pour ça que je disais que la mise en classe est un problème à part entière.
J'ai commencé manuellement pour finir par abandonner faute de temps.
Je crois que cette mise en classes est un problème d'algo bien connu. Il suffit de trouver le bon site ou le bon bouquin qui le décrit (généralement je regarde d’abord le livre de Berstel, Pin et Pocchiola "mathématiques et informatiques")


Yep je comprends et c’est sûr que si j’avais posté plus tôt, nous avons une phase de « recherche bibliographique » où j’aurais pu faire mes recherches là-dessus pour comprendre comment résoudre ça. Mais vu que je ne suis pas très à l’aise en mathématiques, cela n’aide pas..


Edit : Je pense à ça pour le 1* car la il est question que de 2 pièces la mais en général il y a plutôt 8 - 16 ou 32 pièces à faire, soit 2 pièces par conteneurs pour mini 16 conteneur si 32 pièces, etc... Donc en général elles sont étalées sur toute la semaine.
Là c'est le coup de grâce!!!
Faut-il revoir la façon d'aborder le problème et raisonner en semaine?
Quand je te demande d'envoyer des instances représentatives, tu n'en envoie qu'une (j'en demandais 10) et en plus il n'y a pas les cas généraux!!!!!

Tu n'aurais pas dû faire un Edit.


Cordialement



Oui je m’excuse de cet édit qui a foutu la merde, disons-le.

Le cahier des charges est situé au-dessus mais je le remet ici en synthèse :

J’ai créée une base de données qui récences toutes les références tout ateliers confondus.
Chaque semaine, une partie de ces références est présente dans le planning prévisionnel réalisé par le service supply chain de l’entreprise --> Ce sont la prod de la semaine.
Je dois utiliser ces données, les insérer dans mon tableau (différent du tableau base de données car il ne contient que les références que l'on va produire) et réussir à générer un remplissage optimum des conteneurs en fonction de la production demandée.

Et comme vu ensemble, le remplissage de chaque conteneur doit être priorisé par :
- L’atelier
- La matière
- La classe de température que l'on obtient via la température (pour obtenir des groupes prenant en compte la valeur +-5 °C).
- Les références spécifiques (qui prennent un conteneur à elles seules et à qui on ne peut rien rajouter)
- Les références avec un nombre MAX auquel on peut rajouter des références, dans la limite de capacité du conteneur. Nota : quand il n'y a pas de nombre MAX marqué, c'est que nous somme sommes juste contraint par la capacité du conteneur et non du nombre de références !

Les références qui ne sont pas spécifiques, peuvent se mettre avec toutes les autres références de même atelier/matière/nuance dans un conteneur.


Je te joins un fichier Excel ici contenant toute la base de donnée (onglet BDD) et un onglet typique de ce que j'ai eu pour la première semaine de production (onglet Prod) pour que tu puisses bien comprendre. Ce que j'aurai du te fournir dès le début de notre conversation et je m'en excuse...

1)Tu imagine que j'ai le fichier prod de base qui correspond à l'onglet PROD.

2) Je fais un tri par atelier pour n'afficher que les références concernées par l'atelier 1
3) Je copie/colle le contenu filtré des 3 premières colonnes (pour 1 semaine de prod) dans le tableau atelier 1.
4) A l'aide des fonctions RechercheV en lien avec l'onglet BDD j'obtiens les informations dont j'ai besoin : matière, température, poids
5) On filtre par matière et on cache les cellules de la semaine vide (qui représente des références non coulées la semaine 1 mais coulé en semaine 2, 3 ou 4)
6) Et c'est la qu'on met en place la démarche opensolveur (après avoir classé par matière)
7) Utilisation des instances pour générer la meilleure combinaison par matière et température pour le planning de production.

Sauf que dans ce cas la, je n'ai pas encore détaillé les routines (je suis dessus le temps que tu puisse lire ma réponse quand même 19h05) car vu qu'il y a plusieurs matières dans le même planning on est coincé pour l'optimisation ? ou il faut juste faire plusieurs cellules avec les différentes somme de matière ? Comment faire que ça se mette à jour automatiquement ?!

Lien fichier cjoint : https://www.cjoint.com/c/JHwrcyszov7

J’espère avoir été clair dans toutes ces réponses.

Merci par avance pour tout,

Cordialement

Ps : je remets ici pour pas que tu ai a remonté le message. Deadline du dimanche soir qu’on pourra pousser jusqu’à mercredi soir (même si il faut que j'ai détaillé la théorie du rapport dimanche soir comme ça elle est validée avec mon n+1 à partir de lundi). Et après la soutenance pour présenter le projet, et donc me laisse un petit peu plus de temps pour avancer le fichier Excel est le 2 septembre matin. Donc dans l’idée ce serai top que j’arrive à finir ça pour vendredi soir prochain, qu’il ne me reste plus que la présentation à faire le 29-30 Août.

S'il manque encore d'autre informations, je peux te donner mon numéro de téléphone en message privé et on peut en parler de vive voix si tu veux ?!


Merci !!
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Paradjanov Messages postés 57 Date d'inscription mardi 18 août 2020 Statut Membre Dernière intervention 25 octobre 2020 18
22 août 2020 à 20:23
Et je regardais sur internet même si je pense que la réponse sera non.

Mon problème n'est pas envisageable en utilisant la fonction d'Excel VALEURCIBLE ?

Après cela ferai surement des fonctions de fonctions à n'en plus finir si déjà c'est autant complexe en utilisant le solveur. Je n'arrives pas encore a le faire fonctionner entièrement (j'obtiens des résultats aberrant car il doit manquer des contraintes).

J'ai commencé à rédiger une "check-list" des différentes contraintes, à l'aide de ton fichier excel matière 6 (celui ou j'avais réussi a refaire le résultat de la matrice 4 x5 ) et cela donne :

- La cellule objectif = cellule à minimiser.
- Cellule variable = la plage de cellule que l'on veut calculer (jusque la on est d'accord)
- Contraintes :
1) Plage de cellules variables = entier (pour obtenir des résultats entier car on ne peut pas produire un nombre non entier de pièces)
2) Remplissage des conteneurs < = Capacité maximum admissible par le conteneur
3) Plage de cellule de la production prévisionnelle = plage de cellules de la production réalisé

Je n'ai pas plus de contraintes dans ce modèle la mais comme tu dis on ne prenait pas encore en compte la classe de température et les références spécifique et n_Max.

Tu penses que l'opensolveur ne marche pas à cause du fait que ces nouvelles données d'entrées perturbe le calcul ?


Je te joint le fichier pour te montrer ce que j'ai fait : https://www.cjoint.com/c/JHwsxCSW487


Je penses savoir pourquoi cela ne fonctionne pas. J'ai des cellules cachées car elle étaient vide.
Il faudra surement faire un tri avant de copier/coller le tableau dans l'onglet du planning correspondant.
1
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
Modifié le 23 août 2020 à 02:32
Bonsoir

Mon problème n'est pas envisageable en utilisant la fonction d'Excel VALEURCIBLE ?

Je ne pense pas. C'est beaucoup trop limité.

J'ai commencé à rédiger une "check-list" des différentes contraintes, à l'aide de ton fichier excel matière 6 (celui ou j'avais réussi a refaire le résultat de la matrice 4 x5 ) et cela donne :

Non, je te conseille les derniers classeurs et surtout celui que je vais joindre.

- La cellule objectif = cellule à minimiser.

OK il s'agit du nombre de conteneurs et c'est pour ça que ton sujet se modélise très bien avec le modèle BPP.
Tu pourras mettre le modèle mathématique du BPP dans ta recherche documentaire.

- Cellule variable = la plage de cellule que l'on veut calculer (jusque la on est d'accord)

Il y a 2 plages de cellules variables :
Le tableau 2D X(i,j) de variables entières qui contient le nombre de pièces d'une référence i mises dans le conteneurs j
Le tableau 1D Y(j) de variables booléennes qui vaut 1 lorsque le conteneur j est utilisé et zéro sinon.
Ces variables sont utilisées pour calculer les contraintes et l'objectif.
OpenSolver cherche la meilleure combinaison de valeurs dans ses variables pour minimiser la somme des Y(j) (ie le nbre de conteneurs utilisés</gras>

- Contraintes :
1) Plage de cellules variables = entier (pour obtenir des résultats entier car on ne peut pas produire un nombre non entier de pièces)
2) Remplissage des conteneurs < = Capacité maximum admissible par le conteneur
3) Plage de cellule de la production prévisionnelle = plage de cellules de la production réalisé

1) oui mais il manque le 1 bis) pour les variables booléennes

2) oui mais il y a une finesse : il s'agit de la capacité du conteneur SI il est utilisé sinon la capacité sera à zéro et donc on ne pourra pas mettre de pièces dans un conteneur non utilisé.

C'est pour cela que tu vois le libellé "capacité des conteneurs choisis" dans mon classeur : il s'agit de la capacité (250kg) multipliée par la variable booléenne.

3) oui

4) j'ai ajouté le traitement des n_MAX donc il y a une 4ème contrainte lorsque la colonne n_MAX est remplie.
Ça fonctionne bien. J'ai mis un n_MAX à 1 au lieu de 2 et j'ai mis 7 pièces au lieu de 2 dans ton instance de prod et on voit bien les 7 conteneurs avec une pièce seulement (il n'y avait rien d'autre à mettre dedans dans cett classe de température.

Tu penses que l'opensolveur ne marche pas à cause du fait que ces nouvelles données d'entrées perturbe le calcul ?

OpenSolver est un peu soupe au lait, jusqu'au moment où on se rend compte qu'il est simplement rigoureux et que le problème est assis devant le PC....
J'ai passé 1h à essayer de comprendre pour il ne marchait plus ce soir!!
J'avais mal apprécié une ligne dans une contrainte et je partais en débogage dans le vba d'openSolver....

Il faudra surement faire un tri avant de copier/coller le tableau dans l'onglet du planning correspondant.

oui, il y a une liste de chose à faire avant de lancer l'optimisation


J'ai donc reconstruit le modèle vu que tu m'as inquiété avec tes 16 conteneurs pour une référence.
La taille du modèle est paramétrable via des paramètres sur la feuille de calcul.
J'ai ajouté le code pour gérer les n_MAX.
J'ai ajouté des commentaires dans le module et j'ai inséré 3 lignes juste au dessus des variables entières pour avoir les infos de matière et de classe de températures pour chaque conteneur.
La 3ème ligne pourra contenir des infos de priorisation plus tard pour réorganiser le convoyage.


Le fichier : https://www.cjoint.com/c/JHxaugJcEex


Cordialement

edit : avec les infos de matière et de classe de températures au dessus des convoyeurs, on remarque très vite que le tri matière puis classe de températures amène des ruptures de températures quand on change de matière.
On passe du très chaud au moins chaud.

Je me demande s'il ne faut pas inverser le tri et faire classe puis matière pour avoir une continuité dans la montée en chaleur sur une semaine.

Je ne sais pas du tout si ça a des impacts sur le nombre de conteneurs.
1
Paradjanov Messages postés 57 Date d'inscription mardi 18 août 2020 Statut Membre Dernière intervention 25 octobre 2020 18
23 août 2020 à 10:07
Bonjour,


Merci pour ton fichier excel il est vraiment bien fait et ressemble presque à ce que je cherche !

Néanmoins j'ai encore quelques questions ^^' :
1) Peut-on rajouter, en + des 2 lignes matière et classe de température, une ligne qui détaille les différentes références contenu dans le même conteneur ? Car si on ne visualise pas en détail les références d'une matière 1 à rassembler, on ne pourras pas passer le mot aux équipes.
Sachant que selon la taille des références, le conteneur contiendra plus ou moins de références. Ex : 1 conteneur avec 3 références matière 2 et 1 conteneur avec 5 références matière 6.

Il faudrait ainsi identifier une plage de cellule MAX (ici je dirais en visuel je dirais grand MAXIMUM 10 histoire d'être le plus large possible et qu'on contienne toujours toutes les différentes références même si en contrainte avec la capacité MAX/conteneur on arrivera pas au dessus de 5-6 je pense. Enfin tout dépend des optimisations via calculs pour ça que je prévoit "large").

2) J'ai vu que tu as mis les différentes classes de température en prenant en compte les matières. Ex : on a une matière 2 en classe de température 3 et la matière 3 en classe de température 3 car elles ont la même température. Je vais essayer de comprendre ton code mais c'est exactement ce que je cherche aussi pour ainsi prendre en compte, même si la température est identique mais la matière différente, les références selon la même classe de température.

3) Les cellules sommes par classe qui réponde à ta formule =SI SOMME PROD & DECALER peuvent-elles se mettre à jour entre 2 semaines de prod différentes avec des références différentes (si le format est identique bien entendu) pour réussir à générer le planning de la semaine suivante dans les mêmes conditions mais avec les nouvelles références à produire ?

4) Je comprend mieux l'histoire de la variable binaire du conteneur : après calcul via modèle BPP si l'on rempli un conteneur celui-ci passe d'une valeur de 0 à 1. La valeur 1 est ensuite sommé pour obtenir le nombre total de conteneur que l'on cherche à minimiser c'est ça ?

5) Dans les paramètre à ne pas modifier, je ne comprend pas ce que représente "nb ref atelier", je vois 9 qui correspond au nombre de ligne des classes de température mais non au référence du coup. Est-ce le nombre total de classe de combo classe de température/matière différent ?

6) Une fois l'optimisation effectué grâce à ta macro de dingue (oui oui :D), le planning est généré sur cette feuille. Penses-tu qu'il est possible de reporter automatiquement ces données sur la feuille de planning (ayant son format spécifique mais donnée d'entrées identique) pour obtenir le contenu des différentes références ? En gros cela répondrai un peu à la question que j'ai posé plus tôt en te demandant si on rajoute une plage de cellule pour détailler les différentes références contenues dans chaque conteneur.


J'ai testé en modifiant la fameuse valeur 1206006 et en passant à 8 (2 anciennement), on passe de 16 à 19 poches, ce qui est logique car plus de prod à faire avec un nombre MAX par conteneur.


Merci par avance pour les prochaines réponses et je file essayer de comprendre tout ce code !! :)

Cordialement
1
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
Modifié le 23 août 2020 à 12:22
1) Peut-on rajouter, en + des 2 lignes matière et classe de température, une ligne qui détaille les différentes références contenu dans le même conteneur ? 

Les références sont les en-têtes de lignes du tableau des variables entières.
Pas besoin de les faire apparaître en en-tête de colonnes.
Dans un souci de lisibilité du prototype on pourrait rappeler les références à gauche (en AL27:AL50 par exemple) mais pour un module d'optimisation ça n'est pas utile.

Je te rappelle la décomposition modulaire de ton projet (voir post <14>) pour que tu ne fasses pas de confusion entre chacun.

Car si on ne visualise pas en détail les références d'une matière 1 à rassembler, on ne pourras pas passer le mot aux équipes.

Je crois que c'est la première fois que tu parles de la finalité opérationnelle de ton projet et que tu fais apparaître les équipes comme des clients de ton programme d'optimisation.
Jusqu'à présent, le résultat de l'optimisation réintégrait ta feuille de prod. Pas plus.

Cette information aux équipes doit se décrire en terme de support et de format de restitution.
Ça fait partie du module réintégration du convoyage optimisé. Ça élargit ses attendus d'ailleurs.
Ce qui est intéressant ici, pour toi, c'est de voir que faire un cahier des charges ex ante comme on dit est quelque chose de pas simple du tout.
Ce que nous faisons nous deux, c'est du prototypage. On avance en marchant, et les fonctionnalités apparaissent au fur et à mesure.
La démarche est coûteuse en temps mais à la fin, tu as une maquette qui fonctionne comme tu le souhaites et ainsi ton cahier des charges est finalisé.

2) J'ai vu que tu as mis les différentes classes de température en prenant en compte les matières. Ex : on a une matière 2 en classe de température 3 et la matière 3 en classe de température 3 car elles ont la même température.

Où ça?
Au contraire, cf l'edit en fin de mon post <27>, il n'y a pas de continuité dans les classes de températures lorsque l'on change de matière.
Pour être plus précis : la matière 2 se termine avec le convoi 9 et une classe 5 (en AV24:AV26) et le convoi 10 contient la matière 3 en classe 3 puis le convoi 11 contient la matière 6 en classe 1.
C'est pour ça que je suis un peu surpris que tu me confirmes dans ton post <25> que "La priorisation actuelle est Atelier/Matière/Classe de température".

3) Les cellules sommes par classe qui réponde à ta formule =SI SOMME PROD & DECALER peuvent-elles se mettre à jour entre 2 semaines de prod différentes avec des références différentes

Oui.
Je pense que je vais ajouter un paramètre semaine que j'utiliserai dans tous mes DECALER(). A voir.... Vu qu'il y a des références à zéro selon les semaines....

4) Je comprend mieux l'histoire de la variable binaire du conteneur : après calcul via modèle BPP si l'on rempli un conteneur celui-ci passe d'une valeur de 0 à 1. La valeur 1 est ensuite sommé pour obtenir le nombre total de conteneur que l'on cherche à minimiser c'est ça ?

Tout à fait.

5) Dans les paramètre à ne pas modifier, je ne comprend pas ce que représente "nb ref atelier", je vois 9 qui correspond au nombre de ligne des classes de température mais non au référence du coup. Est-ce le nombre total de classe de combo classe de température/matière différent ?

Oui, mon libellé n'est pas très heureux et porte à confusion.
Je viens de le changer en nb combo pour reprendre ton expression.

6) Une fois l'optimisation effectué grâce à ta macro de dingue (oui oui :D), le planning est généré sur cette feuille. Penses-tu qu'il est possible de reporter automatiquement ces données sur la feuille de planning (ayant son format spécifique mais donnée d'entrées identique) pour obtenir le contenu des différentes références ?

Oui. C'est le module de réintégration qui doit s'en charger et pour info ce sera ton boulot.

J'ai testé en modifiant la fameuse valeur 1206006 et en passant à 8 (2 anciennement), on passe de 16 à 19 poches, ce qui est logique car plus de prod à faire avec un nombre MAX par conteneur.

Oui, j'ai adoré voir ce code fonctionner. Moi, j'avais mis 1 en n_MAX et 7 en prod.
Surtout que j'ai mis 2mn à écrire le code pour les N_MAX et que je n'ai même pas eu besoin de le déboguer!!! Ça ne m'arrive jamais!
Comme quoi, quand c'est mûr....

Cordialement
1
Paradjanov Messages postés 57 Date d'inscription mardi 18 août 2020 Statut Membre Dernière intervention 25 octobre 2020 18
23 août 2020 à 13:41
Bonjour,

Dans un souci de lisibilité du prototype on pourrait rappeler les références à gauche (en AL27:AL50 par exemple) mais pour un module d'optimisation ça n'est pas utile.


Oui en effet cela pourrait être plus parlant avant d'aller sur la feuille planning final.

Je te rappelle la décomposition modulaire de ton projet (voir post <14>) pour que tu ne fasses pas de confusion entre chacun.


Et oui désolé je me suis emmêlé les pinceaux, ce sont bien deux étapes différentes (merci car ce graphique aide grandement à la compréhension !!!).

Jusqu'à présent, le résultat de l'optimisation réintégrait ta feuille de prod. Pas plus.
Cette information aux équipes doit se décrire en terme de support et de format de restitution.


Alors oui, elle réintègre la feuille de prod.
Mais après par la suite, le planning généré doit répondre à un format spécifique de l'entreprise qui redonne :
- Les code articles
- Les clients
- Les références pièces
- La quantité à produire sur la semaine (= données d'entrées de la feuille excel)
- La quantité à produire sur la journée qui n'est ni plus ni moins que le résultat final de cette démarche d'optimisation à l'aide des modules BPP et du code VBA.

Comme ça on est peut imprimer au format A3 ce planning "synthèse condensé" et informer les autres secteurs des références requises pour les différents jour de la semaine.

La démarche est coûteuse en temps mais à la fin, tu as une maquette qui fonctionne comme tu le souhaites et ainsi ton cahier des charges est finalisé.


Oui c'est vrai, et c'est pour ça que c'est toujours très complexe de bien définir tous les besoins du projet au début, surtout lorsque l'on créée quelque chose de nouveau qui est amené à se mettre a jour au fur et a mesure que le projet avance.. Je sens qu'on approche du but, et je ne sais vraiment pas encore comment te remercier. (mais je trouverai bien !!)


Au contraire, cf l'edit en fin de mon post <27>, il n'y a pas de continuité dans les classes de températures lorsque l'on change de matière.
Pour être plus précis : la matière 2 se termine avec le convoi 9 et une classe 5 (en AV24:AV26) et le convoi 10 contient la matière 3 en classe 3 puis le convoi 11 contient la matière 6 en classe 1.
C'est pour ça que je suis un peu surpris que tu me confirmes dans ton post <25> que "La priorisation actuelle est Atelier/Matière/Classe de température".


Oui je comprend ton point de vue et mon erreur à dire ce que j'ai dis ^^. C'est que j'ai toujours abordé le problème en disant on optimise en produisant les différentes références de même matière et même température. Mais c'est vrai que ce serai pas plus mal pour éviter "les temps d'attente température" (le temps pour passer de 780 °C à 740 °C avant la coulée). Mais ces temps sont pris en compte dans le nombre Maximum de conteneurs possible par jour. Mais en effet, cela pourra être un point de conclusion/amélioration à la soutenance et/ou tout simplement une réponse à la question.

Oui.
Je pense que je vais ajouter un paramètre semaine que j'utiliserai dans tous mes DECALER(). A voir.... Vu qu'il y a des références à zéro selon les semaines....


Ok niquel. Parcontre, j'avais buté début août quand je cherchais des combinaisons de formules (qui n'ont servi à rien vu qu'on est obligé d'utilise le solveur) car le format des plannings de production, et tu l'as sans doute remarqué, contient les semaines avec leurs numéro propre. C'est à dire qu'on a pas pour semaine 1/4 du planning = semaine 1 mais la semaine de l'année en cours soit par exemple : semaine 35.
Est-ce génant pour les formules ? moi je sais que c'était pas envisageable de prendre en compte autre format que semaine 1, 2, 3, 4. Dans ce cas, il faudra que j'explique qu'il faut modifier à la main le numéro de semaine en début avant optimisation. Ou si oui, as-tu une idée de comment faire pour prendre en compte ces semaines sachant qu'en plus, avec les congés, il y a des semaines qui seront "vides".

Et oui il y aura des références à 0 chaque semaine car vu que le planning de base prend 4 semaines différentes, il y aura toujours malheureusement des références que l'on produira sur certaines semaines et pas d'autres. C'est pour cela qu'une fonction SIERREUR est peut être plus avantageuse pour gérer ces nombres 0 ? enfin même si je dit nombre 0 mais la quand il n'y a pas de prod c'est sous le format d'une case vide (a avoir si obligatoirement besoin sous format 0, je pourrait demander à ce qu'il le prenne en compte !).

Oui, mon libellé n'est pas très heureux et porte à confusion.
Je viens de le changer en nb combo pour reprendre ton expression.


Ou alors tu me test pour voir si je comprend le cheminement du fichier ? :D.
Mais oui merci de mettre à jour ^^'.

Oui. C'est le module de réintégration qui doit s'en charger et pour info ce sera ton boulot.


Oui, quand je parlais de ton code VBA de dingue je pensais au premier jet que tu m'as présenté. Il est bien évident que je suis ici pour demander de l'aide et confirmer mes différentes hypothèses pour réussir à définir ce nouveau module en partie seul (même si sans toi je n'ose pas imaginer comment je serai coincé à l'heure actuelle...)

Surtout que j'ai mis 2mn à écrire le code pour les N_MAX et que je n'ai même pas eu besoin de le déboguer!!! Ça ne m'arrive jamais!


Yep j'imagine exactement le bien que cela doit faire (les petites victoires sont les meilleures) !
Je ne peux pas encore connaître ce sentiment sur Excel avec les macros, mais il arrivera vite une fois ma macro finale (module de réintégration) trouvée !

Enfin la j'ai une dernière question pour avoir une idée. Est-ce que tu penses qu'il est plus facile de réaliser ce dernier module via macro ou simplement en revoyant les différentes valeurs avec des RechercheV, Index, Equiv à tout va ?

Merci encore pour tout !!!

Cordialement
1
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
23 août 2020 à 15:01
Bonjour,

Le dernier fichier : https://www.cjoint.com/c/JHxmA6cACxx

1) J'ai ajouté les références des pièces à gauche de la prod
2) Pour traiter une semaine il suffit de choisir la semaine que l'on souhaite en AJ23
3) Il y a des MFC sur la Prod en AM27:AM126 et AJ26 qui indique les éventuelles discordances entre la prod demandée et la prod planifiée.
4) j'ai mis un tableau des durées d'exécution en T38:T83
5) libellé nb combo à la place de nb ref atelier

6) Pour les référence à zéro ou vides dans les prod :
En fait, je n'ai pas enlevé ces références. Elles ressortent avec une ligne de planification vide, tout simplement.
Le module de réintégration gérera ces lignes vide (un filtre ou autre chose)

7) Je ne sais toujours pas si tu veux des combos (matière/classe°) ou (classe°/matière)
".....erreur.....Mais ces temps sont pris en compte ....... Mais en effet, cela pourra être un point de conclusion/amélioration"
C'est un "oui, mais, mais"

8) Pour les NO.SEMAINE() vs {1, 2, 3, 4}
En fait, c'est un faux problème.
Le module d'optimisation ne gère que des 1, 2, 3 et 4 mais rien ne t'empêche d'avoir dans les modules d'entrée et de sortie du module d'optimisation une table de transcodage qui présentera les bons n° de semaine aux utilisateurs.

9) parlons en de ces modules satellites.
a) je me suis concentré sur le module d'optimisation pour éviter de me disperser.
b) j'ai cherché à toutes forces de ne pas rentrer dans ton fichier excel d'origine parce qu'il me faudrait une tonne d'explications pour savoir d'où tirer les données et comment les combiner pour présenter au module d'optimisation quelque chose d'acceptable.
Et pour la réintégration ça serait pareil.
c) il faut pourtant bien les développer ces modules, soit par des opérations manuelles, soit par une macro (évidemment la macro est à privilégier) que tu ne vas peut-être pas savoir écrire.

Ce que je te propose, c'est d'utiliser l'enregistreur de macro pour enregistrer tout ce que tu fais pour chaque module.
Après on verra comment le packager dans ton appli.

Cordialement
1
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
Modifié le 23 août 2020 à 15:35
Voilà deux print écran pour t'aider à décider entre (matière, classe) et (classe, matière) :
(matière, classe) d'abord (c'est ce que tu avais jusqu'à présent) :


et (classe, matière) ensuite (la progression des températures est parfaite) :



Le nombre de conteneurs est inchangé et la durée du traitement ne bouge pas.
1
Paradjanov Messages postés 57 Date d'inscription mardi 18 août 2020 Statut Membre Dernière intervention 25 octobre 2020 18
Modifié le 23 août 2020 à 15:58
Re,

7) Je ne sais toujours pas si tu veux des combos (matière/classe°) ou (classe°/matière)
".....erreur.....Mais ces temps sont pris en compte ....... Mais en effet, cela pourra être un point de conclusion/amélioration"
C'est un "oui, mais, mais"


Alors je viens de potasser la dessus un bon quart d'heure et une page de cahier (mini dissertation xd) plus tard, j'en arrives à la conclusion suivante :

Cas 1) SI on prend logiquement matière puis classe, le seul point logique est qu'on pense comme ça car on privilégie le regroupement de références de même matière, puis de même température. Ok standard.

Cas 2) Si on prend classe puis matière, c'est beaucoup plus représentatif car à force d'utilser les conteneurs, il chauffe un minimum (température montante ou descendante en fonction). C'est à dire qu'un conteneur à 780 °C utilisé 3 fois de suite (donc "3 conteneurs différents") n'aura plus besoin de la même intensité de chauffe pour rester à cette température (chauffage au gaz et inertie des conteneurs. Mais cette inertie n'est pas prise en compte dans ce projet, car je n'ai pas d'informations la dessus et je n'ai pas les connaissances en thermodynamique pour).

Néanmoins, et ce sera le point bloquant ou validant qu'on part sur le cas 2), la production est journalière avec en gros 7h/jour. En arrivant le matin, les opérateurs mettent en chauffe les conteneurs pour atteindre les températures demandé par les différentes références présentes afin de les accueillir. Ensuite la journée passe où on se sert de ces conteneurs (+ ou - chaud en fonction de la demande). Puis après entre la fin de journée et le lendemain, il y a un bruleur gaz qui maintient à une température de base (une température plus basse que les références mais pas la température ambiante pour gagner du temps sur le chauffage. Ex : T ambiante : 20°C. température maintient : 450 °C, température après chauffe 750°C).

Du coup sachant que chaque jour, la température redescend à la valeur la plus faible et que l'on demande le matin à combien elle doit monter pour les références, je ne sais pas si un modèle croissant linéaire sur toute la semaine est compatible.
Enfin si j'ai bien compris ton idée, qui vaut vraiment matière à réfléchir et a être prise en compte, on se retrouve avec des températures croissantes le long des jours de la semaine. D'un autre côté, même si il y a bien cette "réinitialisation" au jour le jour, cela ne doit surement pas l'impacter et ce sera plus avantageux de répartir ainsi pour permettre une organisation croissantes. Tant que bien sur, la condition des références de même matière dans le même conteneur est elle aussi respectée.

Néanmoins et avec tes deux screens, je me dis qu'au final ce serait bête de ne pas le prendre en compte (surtout si cela n'impacte pas ou peu le nombre de conteneur !). Cela permettra ainsi de répartir l'organisation des poches rempli pour optimiser le chauffage !

8) Pour les NO.SEMAINE() vs {1, 2, 3, 4}
En fait, c'est un faux problème.
Le module d'optimisation ne gère que des 1, 2, 3 et 4 mais rien ne t'empêche d'avoir dans les modules d'entrée et de sortie du module d'optimisation une table de transcodage qui présentera les bons n° de semaine aux utilisateurs.


Je me doutes bien et j'espère qu'il existe une table de transcodage comme tu le mentionnes, même si cela ne me parles pas pour le moment (surement une espèce de convertisseur qui assigne un numéro de semaine donné à 1,2,3 ou 4 ? Ou alors qui assigne directement une cellule à ce numéro, comme ça quelque soit la cellule en entrée type semaine 1, 15 ou 42, en fonction de sa position elle pourrait être référencé comme la semaine 1 si je comprend bien ?!).

9) parlons en de ces modules satellites.
a) je me suis concentré sur le module d'optimisation pour éviter de me disperser.
b) j'ai cherché à toutes forces de ne pas rentrer dans ton fichier excel d'origine parce qu'il me faudrait une tonne d'explications pour savoir d'où tirer les données et comment les combiner pour présenter au module d'optimisation quelque chose d'acceptable.
Et pour la réintégration ça serait pareil.
c) il faut pourtant bien les développer ces modules, soit par des opérations manuelles, soit par une macro (évidemment la macro est à privilégier) que tu ne vas peut-être pas savoir écrire.



A) ok
B) Oui je me doute, sinon même par téléphone on n'aurait peut être pas réussi à se comprendre tous les deux
C) Oui je me doute et c'est ce sur quoi je vais m'efforcer de travailler dès demain matin après avoir rédiger la partie théorique du principe vu ici avec ton aide sur le rapport.

Ce que je te propose, c'est d'utiliser l'enregistreur de macro pour enregistrer tout ce que tu fais pour chaque module.
Après on verra comment le packager dans ton appli.


ça marche, oui une fois les différentes étapes bien définies (au niveau des fonctions d'Excel j'entends), je te ferais un enregistrement qui donnera une macro "brute et non optimisé" ^^'.


Merci !

Cordialement
1
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
23 août 2020 à 16:29
le dernier fichier avec les 2 possibilités de combos, une dans chaque onglet
https://www.cjoint.com/c/JHxoCC2o5tx
1
Paradjanov Messages postés 57 Date d'inscription mardi 18 août 2020 Statut Membre Dernière intervention 25 octobre 2020 18
Modifié le 23 août 2020 à 16:50
Re,

Je suis en train de faire la synthèse du process pour la partie théorique (vu ensemble sur le forum) et à un moment donné tu m'as dis :

Et ça se modélise très bien dans OpenSolver (tu le verras dans le fichier matière_2 que je vais t'envoyer).
L'intérêt de ce modèle est qu'il fournit le nombre de conteneurs directement et est très rapide pour ces petites instances
Ça évitera les itérations de modélisations inutiles que j'avais prévues initialement pour connaître ce nombre !

Mais cette modélisation BPP se fiche pas mal du remplissage des conteneurs.
Il faudra ensuite passer à un autre modèle qui minimisera le contenu du dernier conteneur.


Quand tu parles d'un seconde modèle, on est bien d'accord que c'est une second modèle BPP lié au premier pour réussir à minimiser le contenu du dernier conteneur ? Si non, quel autre modèle mathématique as-tu utilisé et où est-ce que je peux avoir des informations la dessus si tu sais stp ?!

Merci
1
Paradjanov Messages postés 57 Date d'inscription mardi 18 août 2020 Statut Membre Dernière intervention 25 octobre 2020 18
2 sept. 2020 à 18:29
Re,

Soit précis :
Par référence par jour?
Par référence par semaine?
Est-ce que c'est un n_MAX par jour? (qui peut donc se combiner avec le n_MAX (celui par conteneur)


Par référence et par jour.
C'est effectivement un n_MAX par jour du secteur situé en amont qui approvisionne les ateliers.


une optimisation journalière n'est qu'une optimisation hebdomadaire dont on prend le premier jour.


D'accord dans l'idée mais après comme tu le dis cela peut bloquer si le scénario n'est pas "sauvegardé" et que l'on change en milieu de semaine.

Il faudra donc prévoir un enregistrement des données de la semaine en cours pour les figer dans le marbre et pouvoir les recharger en cas de besoin.


D'accord.


Question : l'optimisation sur 4 semaines est-elle un besoin du client?


Oui c'est le cas.

Je sais bien qu'on te demande un boulot pour lequel tu n'as pas été formé mais, en tant que futur ingénieur, tu dois savoir t'adapter, et vite.


Complètement d'accord.

Cordialement
1
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
23 août 2020 à 17:36
cet autre modèle est un des anciens modèles que j'avais fait au départ.
Ça n'est pas un BPP.

C'était un modèle qui cherchait à minimiser le dernier conteneur (et ainsi maximiser les autres!)

Je ne l'ai plus appliqué parce que le nombre de références par combo est faible et que dans les faits il y avait peu de cas où il pouvait être utilisé.
Quand tu as 5 combos à une référence, tu n'as pas grand chose à optimiser.

Dans l'idéal il faudrait lancer ce deuxième modèle et ensuite faire une dichotomie sur un 3ème modèle qui, lui, voudra rendre les "reste à remplir" plus petit qu'une valeur en kg.
C'est sur cette valeur que la dichotomie se ferait.

Devant le peu de rentabilité de cette approche, j'ai laissé de côté.
Mais il faut savoir qu'il y a possibilité de faire plus précis.
0
Paradjanov Messages postés 57 Date d'inscription mardi 18 août 2020 Statut Membre Dernière intervention 25 octobre 2020 18
23 août 2020 à 17:42
Re,

D'accord c'est noté, merci !
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
23 août 2020 à 18:33
Mais pour que tu apprécies l'utilité d'une telle précision, voilà une comparaison sur le combo (2, matière 2) :
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
Modifié le 23 août 2020 à 18:54
mais pour (4, matière 2), l'utilité est plus probante :

Reste à savoir si les 31kg d'écart sur les 2 premiers conteneurs justifient de dérouler plusieurs modèles....
0
Paradjanov Messages postés 57 Date d'inscription mardi 18 août 2020 Statut Membre Dernière intervention 25 octobre 2020 18
23 août 2020 à 19:06
Re,

Alors je penses pas que j'en suis jusqu'à dire l'optimisation via différents modèles et démarches. Surtout ici pour au final, obtenir un même nombre de conteneurs remplis, donc sans grand intérêt d'un point de vue nombre entier de conteneur requis pour assurer la production.

Je reviens vers toi, pour le détail des différents modules "satellite" comme tu dis, savoir si je vois bien clair :
1) On a le fichier de base contenant les données prod de la semaine.
2) On créer et utilise le premier module "module d'extraction des données" pour extraire les données dans notre fichier cible
3) Ces données extraites sont ensuite assujetti au deuxième module "module d'optimisation" qui correspond à la démarche pour filtrer ces données d'une certaine manière, de sorte à ce qu'elles soient utilisables par l'opensolveur et le modèle BPP
4) Une fois les données converties au format voulu, on utilise opensolveur + BPP pour assurer le remplissage optimisé des conteneurs
5) Une fois le remplissage optimisé des conteneurs détaillé dans le format du solveur, on extrait ce format pour le renvoyer à l'autre feuille cible qui possède le format standard de planning de production.


Est-ce bien correct ? Je pense que oui mais je préfèrerai une confirmation de ta part :).

Merci !
0