[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
19 août 2020 à 06:23
Bonjour,

Comme ça n'est pas simple de décrire une optimisation de production, il est souvent très utile de faire un modèle de données, d'indiquer les cardinalités importantes et de bien faire attention à ne pas mélanger les entités et leurs types (les conteneurs par exemple).
Ensuite il faut préciser une fonction économique à minimiser et des contraintes à respecter.

Ceci étant dit, j'ai lu plusieurs fois ton message et j'ai donc des questions :

1) prenons l'atelier 1, il a droit à 5 conteneurs par jours.
Ces 5 conteneurs peuvent-ils être n'importe quelle combinaison de type 1 (180kg) et de type 2 (250kg), allant de 5 type 1 à 5 type 2?

2) un conteneur peut-il transporter des matières différentes?
Dans le cas contraire, il faudra sans doute plutôt partir d'un tableau comme ça :


3) quelles contraintes y a-t-il sur les types de conteneurs?
Est-il plus coûteux d'utiliser un type 2 plutôt qu'un type 1?

4) tes références spéciales avec leurs conteneurs spéciaux, font-elles partie du nombre maximum de conteneurs par jour pour un atelier?

5) j'ai cru comprendre que tu voulais remplir au mieux les conteneurs. Tu veux donc minimiser le nombre de conteneurs nécessaires à la production de la semaine?

Plus généralement, pour l'atelier 1 en semaine 1, tu as un peu moins de 3t de matières à transporter avec 25 conteneurs par semaine.
Ça fait un peu plus de 118kg par conteneur (moyenne).
A première vue, ça n'a pas l'air trop contraignant vu la capacité des conteneurs.

Mais comme la première vue ne fait pas bon ménage avec l'optimisation en nombres entiers, j'attends tes réponses pour envisager un modèle.
Comme le solveur d'excel est très limité en nombre de variables, il faudra sans doute passer par un autre solveur (tout en restant dans excel)

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

Merci de votre réponse rapide. J'ai mis en gras la réponse à tes différentes questions pour essayer de t'éclaircir au maximum.


" Bonjour,

Comme ça n'est pas simple de décrire une optimisation de production, il est souvent très utile de faire un modèle de données, d'indiquer les cardinalités importantes et de bien faire attention à ne pas mélanger les entités et leurs types (les conteneurs par exemple).
Ensuite il faut préciser une fonction économique à minimiser et des contraintes à respecter.

Ceci étant dit, j'ai lu plusieurs fois ton message et j'ai donc des questions :

1) prenons l'atelier 1, il a droit à 5 conteneurs par jours.
Ces 5 conteneurs peuvent-ils être n'importe quelle combinaison de type 1 (180kg) et de type 2 (250kg), allant de 5 type 1 à 5 type 2?

Dans l'idée, les 5 conteneurs peuvent être de type 1 ou 2 --> on privilégieras le moins de conteneurs possible. ex : si la production passe en 4 conteneurs (250 Kg) contre 5 conteneurs (180 Kg) on choisira la solution avec le moins de conteneurs.

2) un conteneur peut-il transporter des matières différentes?

Chaque conteneur est propre à son atelier respectif et ne peux pas transporter différentes matière. Il est donc conditionné par un poids max de plusieurs références avec la même matière

Dans le cas contraire, il faudra sans doute plutôt partir d'un tableau comme ça :


3) quelles contraintes y a-t-il sur les types de conteneurs?
Est-il plus coûteux d'utiliser un type 2 plutôt qu'un type 1?

Dans l'idée, on part du principe que ce soit un conteneur 1 ou 2 (180 ou 250 Kg), le temps de "remplissage" est quasiment identique (2h00 pour un type 1 et 2h30 pour un type 2). Il est donc plus efficient de préparer 4 conteneurs de type 2 plutôt que 5 de types 1.

4) tes références spéciales avec leurs conteneurs spéciaux, font-elles partie du nombre maximum de conteneurs par jour pour un atelier?

En effet, ces références font parties du nombre global de 5 conteneurs pour atelier 1 et 7 conteneurs pour atelier 3. Sachant ici celle citée dans le premier message faisant partie de l'atelier 3, elle prendra 1 conteneur à elle toute seul pour l'atelier 3. --> 5 conteneurs atelier 1 dispo contre 6 conteneurs dispo atelier 3 restant.

5) j'ai cru comprendre que tu voulais remplir au mieux les conteneurs. Tu veux donc minimiser le nombre de conteneurs nécessaires à la production de la semaine?

Oui c'est l'idée global, minimiser le nombre de conteneurs pour ne pas se retrouver avec 1 conteneur rempli à 50 % et un autre à 40 % soit 2 préparation de 2h00 au lieu d'une seule de 2h00 rempli à 90 %. Bien sur avec des références de même matière comme indiqués plus tôt.

Plus généralement, pour l'atelier 1 en semaine 1, tu as un peu moins de 3t de matières à transporter avec 25 conteneurs par semaine.
Ça fait un peu plus de 118kg par conteneur (moyenne).
A première vue, ça n'a pas l'air trop contraignant vu la capacité des conteneurs.

Normalement oui car à cause de la COVID-19 il y a une baisse des commandes récemment. Mais de manière générale et malgré cette baisse de commande, une optimisation permettra d'être plus efficient en terme de temps et ainsi de "dégager" du temps supplémentaires pour des tâches annexes type nettoyage, briefing, etc.

Mais comme la première vue ne fait pas bon ménage avec l'optimisation en nombres entiers, j'attends tes réponses pour envisager un modèle.
Comme le solveur d'excel est très limité en nombre de variables, il faudra sans doute passer par un autre solveur (tout en restant dans excel)

Pour l'histoire des deux solveurs, je ne vois pour le moment pas trop comment tu compte faire ça mais je suis impatient de comprendre :D.

Cordialement"



Merci par avance pour ce que tu pourras faire de ces informations ^^".

Cordialement,
Paradjanov
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
Modifié le 20 août 2020 à 02:45
Bonsoir,

Voilà une ébauche de solution pour ton problème de fonderie.

1) le problème global est à découper en sous-problèmes disjoints, ces derniers représentant le convoyage de chaque matière pour chaque atelier dans le cadre d'une production d'une semaine donnée.

Pour rester simple, je considère l'atelier 1 pour la semaine 1.
Il y a ainsi 3 sous-problèmes : Convoyage_Matière_2, Convoyage_Matière_3 et Convoyage_Matière_6.
Il suffira de juxtaposer les convoyages de chaque sous-problème pour avoir le planning de l'atelier 1 pour la prod de la semaine 1.

2) je ne prend en compte que des conteneurs de type 2.
Soit on peut les remplir au delà de la capacité des conteneurs de type 1 et ce choix ne pose pas de problème.
Soit le conteneur de type 2 contient moins que la capacité d'un conteneur de type 1 et il suffira alors, lors du planning, de le rebaptiser conteneur de type 1.
Ce choix simplifie les modèles.

3) je raisonne en convoyages, de 1 à 25 par semaine (pour l'atelier 1).

4) j'utilise OpenSolver qui est une extension du solveur d'excel que tu trouves dans toutes les bonnes pharmacies. Charge le et installe-le, sinon tout ce que je vais te dire n'aura aucun sens.

5) Je ne t'apporte pas une solution clé en main vu que je ne sais pas trop si tu es ingénieur ESFF ou apprenti, ou en stage... ou rien de tout ça.
Bref, je ne veux pas faire ton boulot à ta place.
L'exemple que je te fournis concerne Convoyage_Matière_6.
Tu y trouveras la solution pour Convoyage_Matière_2 et _3 (enfin, elle est évidente cette dernière), sans les modèles, sachant qu'ils fonctionnent de la même manière que ce que je t'envoie..

6) Globalement, les données s'organisent comme ça dans une feuille excel :


Pas de panique, il y a beaucoup de chose qui sont là pour expliquer le fonctionnement.
Les modèles du solveur sont très simples (sauf si c'est nouveau pour toi, bien sûr), ça reste de l'optimisation linéaire et les temps d'exécutions varient de 32 secondes pour la solution exacte de Convoyage_Matière_2 à quelques centièmes de secondes pour Convoyage_Matière_6

7) Il est possible d'encapsuler les différents modèles dans une couche de vba.
Ça sera même nécessaire pour tester différents modèles et retenir le meilleur.

Après, peut se poser la question de la nécessité d'avoir un optimisation de folie "coûteuse" en temps, ou si on peut se satisfaire d'une solution à quelques kg près.

L'habillage VBA n'est pas forcément immédiat, mais c'est faisable.


8) je ne trouve plus le bouton pour envoyer un fichier ......
Mais c'est quoi c'taffaire !!!
Ah bin oui, je me croyais sur un autre forum .....
Le voilà : https://www.cjoint.com/c/JHuapII8qux


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



Merci pour ton retour et merci pour le fichier. Effectivement tu as vu juste, c’est bien lié à un problème de fonderie et je suis bien un apprenti de l’ESFF :).

Comme détaillé dans ton précédent message, mon souhait est bien de minimiser le nombre de conteneurs nécessaires à la production de la semaine.

J’ai noté mes réponses à tes questions/description en gras pour faciliter ta lecture.




« Le problème global est à découper en sous-problèmes disjoints, ces derniers représentant le convoyage de chaque matière pour chaque atelier dans le cadre d'une production d'une semaine donnée.

Pour rester simple, je considère l'atelier 1 pour la semaine 1.

Il y a ainsi 3 sous-problèmes : Convoyage_Matière_2, Convoyage_Matière_3 et Convoyage_Matière_6.

Il suffira de juxtaposer les convoyages de chaque sous-problème pour avoir le planning de l'atelier 1 pour la prod de la semaine 1. »



Jusque-là ok pour les 3 sous problèmes, par contre comment peut-on juxtaposer les différents convoyages (j’imagine que ce sont les différents modèles paramétrés dans l’Opensolveur ?!).





« 2) je ne prends en compte que des conteneurs de type 2.

Soit on peut les remplir au-delà de la capacité des conteneurs de type 1 et ce choix ne pose pas de problème.



– Tu veux dire un remplissage > à 180 Kg (type 1) mais limité à un Maximum de 250 Kg ? Ou sans prendre en compte la limite MAX de 250 Kg, comment cela ne peut pas poser de problème ?



Soit le conteneur de type 2 contient moins que la capacité d'un conteneur de type 1 et il suffira alors, lors du planning, de le rebaptiser conteneur de type 1.

Ce choix simplifie les modèles.



Dans le cas où il est rempli à 160 Kg (pour 180 Kg Max type 1) par exemple si je te suis bien ? Même si dans l’idée il faut le remplir au maximum et donc au plus proche de sa capacité totale.



3) je raisonne en convoyages, de 1 à 25 par semaine (pour l'atelier 1).

Oui on est d’accord sur le nombre de convoyage max semaine (de 5 pour 1 jour de prod à 25 pour la semaine)





4) j'utilise OpenSolver qui est une extension du solveur d'excel que tu trouves dans toutes les bonnes pharmacies. Charge-le et installe-le, sinon tout ce que je vais te dire n'aura aucun sens.



J’ai bien réussi à aller sur le site de l’Opensolveur et je peux m’en servir : ouf !.





5) Je ne t'apporte pas une solution clé en main vu que je ne sais pas trop si tu es ingénieur ESFF ou apprenti, ou en stage... ou rien de tout ça.

Bref, je ne veux pas faire ton boulot à ta place.

L'exemple que je te fournis concerne Convoyage_Matière_6.

Tu y trouveras la solution pour Convoyage_Matière_2 et _3 (enfin, elle est évidente cette dernière), sans les modèles, sachant qu'ils fonctionnent de la même manière que ce que je t’envoie.



J’ai regardé, compris le principe pour l’utilisation de l’opensolveur mais je n’ai pas encore réussi à retrouver les mêmes valeurs pour le convoyage de matière 2 (à 15h30) mais je ne désespère pas !



6) Globalement, les données s'organisent comme ça dans une feuille excel :



Tu me montres là un extrait d’un Tableau Croisée Dynamique ? j’ai pris du temps sur mon projet pour étudier les TCD pour enfin arriver aujourd’hui à la réalisation via ton aide pour m’éclairer et à l’aide de l’Opensolveur. Ou alors est-ce un tableau simplement filtrer ?



Pas de panique, il y a beaucoup de chose qui sont là pour expliquer le fonctionnement.

Les modèles du solveur sont très simples (sauf si c'est nouveau pour toi, bien sûr), ça reste de l'optimisation linéaire et les temps d'exécutions varient de 32 secondes pour la solution exacte de Convoyage_Matière_2 à quelques centièmes de secondes pour Convoyage_Matière_6



C’est nouveau donc l’assimilation sera un peu plus longue. Oui dans l’idée je comprends que plus il y a de données à traiter, plus il faut du temps pour les traiter.



7) Il est possible d'encapsuler les différents modèles dans une couche de vba.

Ça sera même nécessaire pour tester différents modèles et retenir le meilleur.



C’est l’idée afin, comme tu le détail, pour obtenir un planning de production hebdomadaire complet. Et surtout afin de comparer :

1) Si l’on souhaite faire la production de manière à minimiser le nombre de conteneurs total quitte à finir la production le mercredi soir par exemple.

2) Si l’on souhaite faire la production sur toute la semaine avec une production « lissé » mais un grand nombre de conteneurs et des conteneurs à moitié rempli (normalement non car moins rentable que la solution 1) économiquement mais cela sera intéressant d’en parler).




Après, peut se poser la question de la nécessité d'avoir un optimisation de folie "coûteuse" en temps, ou si on peut se satisfaire d'une solution à quelques kg près.



A l’heure actuelle il n’existe aucun outil pour optimiser et je suis plus partisan de la solution à quelques kg près (voire au pire du pire à 1 conteneurs près).



L'habillage VBA n'est pas forcément immédiat, mais c'est faisable.



Je ne sais pas si j’aurais le temps d’ici dimanche pour l'étape finale de l’habillage VBA en plus de toutes ces différentes étapes comme tu le préconises même si je suis tout à fait d’accord qu’il sera bien à faire dans le futur.



8) je ne trouve plus le bouton pour envoyer un fichier ......

Mais c'est quoi c'taffaire !!!

Ah bin oui, je me croyais sur un autre forum .....

Le voilà : https://www.cjoint.com/c/JHuapII8qux





Cordialement



Je te mets en « annexes » les questions que j’avais préparés en épluchant ton fichier car il y a des données supplémentaires pour la résolution de mon problème.



Annexes :



J’ai regardé ton fichier et cela entraîne de nouvelles questions (tu t’en doutes ^^) qui sont les suivantes :



1) Peut-on avoir en parallèle sur un même fichier Excel différents « modèles » pour pouvoir les comparer rapidement ?



Je pense à un bouton auquel on applique une macro pour lancer le scénario 1 et à un second bouton pour 2. Car lorsque je modifie le modèle, je « perds » l’ancien et lors de l’enregistrement je ne vois pas de fonction pour obtenir un fichier type des différents scénarios « testés ».



2) Peut-on ajouter des références « spécifiques/spéciales » en tant que contrainte pour allouer un conteneur entier à cette référence directement ?



Ex : J’ai une référence qui prend à elle seule un conteneur. J’ai besoin de la prendre en compte dans le planning de production mais sans remplir avec d’autre références son conteneur parmi les conteneurs totaux de l’atelier concerné.

Si non, comment faire pour les prendre en compte dans la formule ? (Peut être en écrivant une ligne avec une contrainte défini dans le solveur pour la prendre en compte ? Mais cette démarche, si elle doit être appliqué à beaucoup de références doit être chronophage et source d’erreur non ?)



3) Comment faire pour prendre en compte, en plus de l’atelier et de la matière, la température de coulée ?



J’ai différentes températures de coulées allant de 730 à 790°C avec des intervalles de +-5°C. Je pense qu’il faut regrouper les températures dans des groupes exploitable par le solveur ? Ex : 730 ;735 ;740 pour le Groupe A nommé « Température 1 » qui correspond au 735+-5°C, jusqu’à 780 ;785 ;790°C pour le groupe Z « Température X » ?

Comme ça par la suite on peut utiliser faire le même principe qu’actuel pour dire si :

- Atelier = 1

- Matière = 1

- Température = 1



Alors l’opensolveur pourra fonctionner et on obtiendra un regroupement dans le même conteneur ?

Si non, comment faire pour prendre en compte cette nouvelle contrainte ?



4) Peut-on prioriser certaines références par rapport à d’autres ?





Ex : On sait qu’une référence peut être rangée dans un conteneur mais seulement par lot de 2 maximum. Il reste donc de la place dans le conteneur inutilisé après l’avoir rempli de ces 2 pièces. S’il y a 10 pièces à convoyer, on aura 1 conteneur par jour qui sera remplie obligatoirement de cette référence mais dont la seconde partie (capa max – capa de cette référence) sera disponible à d’autres références du même type (même atelier, même matière et même température).



5) Peux-tu m’expliquer la différence et/ou la complémentarité entre le solveur et l’opensolveur ?



De ce que j’ai compris, et d’après le tutoriel cité dans mon premier message, le solveur a besoin d’une formule dans la cellule objectif pour « fonctionner ». Tandis qu’avec ce que j’ai vu de l’Opensolveur, on peut juste lui donner des contraintes et il nous génère un résultat sans avoir à écrire de formules dans la cellule objectif ?!



6) Comment faire pour calculer tout la semaine de production pour l’atelier 1 puis pour l’atelier 3 en « 1 clic » ?



En regardant ton fichier et la configuration du solveur de plus près, on arrive à obtenir un remplissage des conteneurs en prenant matière par matière (surement plus simple pour la masse totale par rapport à la capacité maximum du conteneur).

Peut-être est-ce réalisable, mais toujours matière après matière, d’où l’utilité de mettre en place une ou plusieurs macros avec VBA ?! Et est-ce que cette optimisation sur VBA, sans connaissance en VBA, peut se mettre en place en très peu de temps ? (Deadline du projet dimanche soir, j’aurais dû poster plus tôt sur ce forum).



Merci par avance pour ta réponse,



Cordialement,

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

Jusque-là ok pour les 3 sous problèmes, par contre comment peut-on juxtaposer les différents convoyages (j’imagine que ce sont les différents modèles paramétrés dans l’Opensolveur ?!).


Pour l'atelier 1, il y a 24 produits à base de 3 matières :
19 pour matière_2
1 pour matière_3
4 pour matière_6

Chaque matière à droit à son optimisation de convoyage avec des modèles OpenSolver.
Pour matière_2 le convoyage optimisé se fait en 8 conteneurs.
Le résultat est donc une matrice 19 lignes x 8 colonnes. appelons le bloc_1
Pour matière_3 c'est trivial, la solution est le bloc_2 de 1 ligne x 1 colonne.
Pour matière_6, le bloc_3 solution de l'optimisation fait 4 lignes x 5 colonnes

Pour juxtaposer les 3 solutions de convoyage, il suffit de créer la matrice diagonale bloc avec bloc_1, bloc_2 et bloc_3 sur la diagonale et des zéros partout ailleurs.
Le résultat est donc une matrice 24 lignes x 14 colonnes, les produits à fabriquer semaine 1 pour l'atelier 1 en lignes et les convoi en colonnes.

Le fait que ce soit une matrice diagonale bloc vient de l'interdiction de mélanger les matières dans un conteneur.


Tu veux dire un remplissage > à 180 Kg (type 1) mais limité à un Maximum de 250 Kg ? Ou sans prendre en compte la limite MAX de 250 Kg, comment cela ne peut pas poser de problème ?


Bien sûr que je tiens compte de la limite à 250kg.
Quand il y a de 1 à 180kg pour le dernier conteneur, il faudra choisir un type 1 et quand il y a entre 181kg et 250kg ce sera un type 2.

Le cas 250kg pour le dernier conteneur devrait être impossible vu qu'on raisonne modulo 250.
Je devrais donc plutôt dire de 181 à 249kg => type 2.


Dans le cas où il est rempli à 160 Kg (pour 180 Kg Max type 1) par exemple si je te suis bien ? Même si dans l’idée il faut le remplir au maximum et donc au plus proche de sa capacité totale.


Le cas du remplissage incomplet ne concerne que le dernier conteneur de la matière considérée.
Dans la démarche retenue, on divise la masse totale de la matière considérée par 250kg
On obtient un quotient et un reste.
Le quotient représente le nombre minimum des conteneurs que l'on va bourrer au maximum.
Le reste concerne le dernier conteneur, celui qui ne sera pas forcément rempli au maximum.

Exemple : matière_2 a une masse totale de 1865,2kg qui fait 7,46 conteneurs.
Donc a priori il y aura 7 conteneurs proches de 250kg et un qui contiendra au minimum 115,2kg.
Il se trouve que pour matière_2, il est possible de remplir à 250kg chacun des 7 premiers conteneurs et de mettre le minimum dans le 8ème.

Mais, il y a des cas pathologiques.
Exemple : 10 produits uniques nécessitant 126kg chacun d'une matière donnée.
La masse globale est de 1260kg soit 5,04 conteneurs théoriques alors qu'en réalité il en faudra 10.

Le nombre de conteneurs nécessaires est donc compris entre le quotient de la division par 250 et le nombre de produits.

Ce que j'ai modélisé ne prend pas en compte les cas pathologiques mais il faut savoir qu'ils existent.


J’ai bien réussi à aller sur le site de l’Opensolveur et je peux m’en servir : ouf !.


Une petite info pratique : quand tu vas dans Model\Options, tu as une case à cocher "Show optimisation progress while solving".
Coche la et tu verras, lors d'une optimisation, une fenêtre Dos qui montre l'intimité du fonctionnement du solveur avec les coupes puis les itérations et les réponses d'infaisabilité ou d'optimum atteint.


J’ai regardé, compris le principe pour l’utilisation de l’opensolveur mais je n’ai pas encore réussi à retrouver les mêmes valeurs pour le convoyage de matière 2 (à 15h30) mais je ne désespère pas !


Je crois qu'il y avait une incohérence entre les données des 2 onglets de ton fichier original.
C'est peut-être une explication.
Je vais te donner les modèles pour matière_2.
Il faut que je nettoie mon classeur vu que j'ai fait des essais dans tous les sens et que c'est un bordel sans nom...


Tu me montres là un extrait d’un Tableau Croisée Dynamique ? j’ai pris du temps sur mon projet pour étudier les TCD pour enfin arriver aujourd’hui à la réalisation via ton aide pour m’éclairer et à l’aide de l’Opensolveur. Ou alors est-ce un tableau simplement filtrer ?


En fait j'ai fait un simple tri sur atelier et matières.
S'il y avait des productions à zéro il faudrait les virer avant de lancer le modèle.


C’est nouveau donc l’assimilation sera un peu plus longue. Oui dans l’idée je comprends que plus il y a de données à traiter, plus il faut du temps pour les traiter.


Là c'est chaud!
il y a beaucoup de choses nouvelles et pas forcément simples à intégrer....


C’est l’idée afin, comme tu le détail, pour obtenir un planning de production hebdomadaire complet. Et surtout afin de comparer :

1) Si l’on souhaite faire la production de manière à minimiser le nombre de conteneurs total quitte à finir la production le mercredi soir par exemple.

2) Si l’on souhaite faire la production sur toute la semaine avec une production « lissé » mais un grand nombre de conteneurs et des conteneurs à moitié rempli (normalement non car moins rentable que la solution 1) économiquement mais cela sera intéressant d’en parler).


L'avantage de l'optimisation est de pouvoir identifier de nouvelles plages de production à isopérimètre social et structurel.
Il faut bien sûr qu'il y ait des clients....


A l’heure actuelle il n’existe aucun outil pour optimiser et je suis plus partisan de la solution à quelques kg près (voire au pire du pire à 1 conteneurs près).


J'étais parti sur des optimisations "optimales" qui ne sont plus forcément utiles.
Ça peut simplifier les modèles. A voir.


Je ne sais pas si j’aurais le temps d’ici dimanche pour l'étape finale de l’habillage VBA en plus de toutes ces différentes étapes comme tu le préconises même si je suis tout à fait d’accord qu’il sera bien à faire dans le futur.


Surtout si, comme tu le disais dans ton premier message, tu n'es pas un pro de vba excel.



Cordialement
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
Modifié le 20 août 2020 à 20:59
Bonsoir,

Je n'ai toujours pas trouvé comment répondre comme toi sur ce forum en citant les messages.


Je plussoie 90 % du contenu de ton dernier message.

Pour être claire sur les 10 derniers % :

Peux-tu me confirmer si la démarche est bonne pour ajouter la variable supplémentaire qui est la température de coulée ?

"Ce que j'ai modélisé ne prend pas en compte les cas pathologiques, mais il faut savoir qu'ils existent."

Ces cas pathologiques existent et j'en ai recensé plusieurs malheureusement et je souhaite les intégrer dans cet outil.

"S'il y avait des productions à zéro il faudrait les virer avant de lancer le modèle."

Oui je suis tout à fait d'accord, car dans Excel en général s'il y a une valeur vide ça part en erreur.

Assimilation longue[...] : " Là c'est chaud!
Il y a beaucoup de choses nouvelles et pas forcément simples à intégrer...."

Je me doute et je suis tout à fait disposer et motiver pour apprendre/intégrer ces différentes choses. Tout du moins, et s'il y a vraiment trop d'informations, le minimum requis pour faire tourner cet outil d'ici dimanche soir en non stop.


"L'avantage de l'optimisation est de pouvoir identifier de nouvelles plages de production à isopérimètre social et structurel.
Il faut bien sûr qu'il y ait des clients...."

En effet, c'est pour cela que ces deux visions seront intéressantes à exploiter, car la avec la COVID-19 les clients se sont pas mal absentés...

"J'étais parti sur des optimisations "optimales" qui ne sont plus forcément utiles.
Ça peut simplifier les modèles. A voir."

Autant pour moi ma langue à fourchée, le modèle que je cherche à obtenir doit bien répondre à des optimisations "optimales" avec comme mentionné dans l'idée quand on trouve 7,4 conteneurs --> 7 remplis au max puis le dernier rempli avec ce qu'il reste en prenant un conteneur de capacité inférieur.

Et pour finir, même si cela m'intéressait dans le futur, mais manque de temps ici et tu l'as bien compris, l'habillage à l'aide de VBA pourra me servir dans tous mes prochains fichiers Excel et c'est donc un aspect de ce logiciel que je souhaiterai développer/apprendre.

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

J'ai oublié les annexes....

1) Peut-on avoir en parallèle sur un même fichier Excel différents « modèles » pour pouvoir les comparer rapidement ?


Une façon de faire est de créer autant de feuilles que de modèles.
L'autre façon consiste à créer par vba les modèles et d'attribuer les différentes macros à des boutons


2) Peut-on ajouter des références « spécifiques/spéciales » en tant que contrainte pour allouer un conteneur entier à cette référence directement ?


oui.
Tu vires la référence de l'optimisation et tu lui affectes un convoi dédié.
Il faudra ajouter ce convoi aux convois trouvés par le modèle.


3) Comment faire pour prendre en compte, en plus de l’atelier et de la matière, la température de coulée ?


Comme tu le dis, tu peux envisager des classes de températures mais tu risque d'avoir des instances à modéliser très petites et donc d'avoir une multiplication des conteneurs.
Reste à savoir si c'est un unique fourneau qui monte et baisse en température ou s'il y en a plusieurs, chacun ayant ses propres classes de températures.
Egalement, combien de classes de températures sont "utilisables" par jour?


4) Peut-on prioriser certaines références par rapport à d’autres ?


Il faudra ajouter une contrainte sur la ligne de la référence indiquant <=2


5) Peux-tu m’expliquer la différence et/ou la complémentarité entre le solveur et l’opensolveur ?


C'est principalement une question de capacité.
Solver d'excel est limité en nombre de variables et de contraintes. Mais c'est un excellent bac à sable.
Opensolver peut travailler avec plusieurs "solver engine" et n'a pas les limitations de Solver d'excel.
Mais il reste quand même très lent.
Perso je préfère Solver studio que j'associe à glpk.
Au delà, quand il faut avoir une meilleure réactivité au niveau des résultats, je passe par Gusek, un Ide de glpk que l'on marie assez facilement avec excel.

Et quand ça rame toujours malgré cette escalade, j'essaie Cplex.


6) Comment faire pour calculer tout la semaine de production pour l’atelier 1 puis pour l’atelier 3 en « 1 clic » ?


Bin là il faut mettre du code autour, à la fois pour boucler sur les différentes classes d'instances (atelier - matière - température) à la fois pour, à l'intérieur d'une classe, itérer sur le nombre de conteneurs et donc sur les différents modèles.


Et est-ce que cette optimisation sur VBA, sans connaissance en VBA, peut se mettre en place en très peu de temps ? (Deadline du projet dimanche soir, j’aurais dû poster plus tôt sur ce forum).


Tu aurais du poster plus tôt.

Encore que ce code n'est pas très compliqué mais il y a de la mise au point à prévoir.


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

J'ai oublié les annexes....


1) Peut-on avoir en parallèle sur un même fichier Excel différents « modèles » pour pouvoir les comparer rapidement ?

Une façon de faire est de créer autant de feuilles que de modèles.
L'autre façon consiste à créer par vba les modèles et d'attribuer les différentes macros à des boutons

Alors quand je dis modèle j'entend une configuration type un calcul dans opensolveur mais je pense qu'on parle de la même chose. Pour VBA, j'ai vraiment des petites bases "vu en cours" mais sinon j'ai déjà utiliser l'enregistreur de macro (même si en général cela donne un code pas très soigné mais qui pourrait dépanner le temps de finaliser le rapport puis l'optimiser pour la suite d'ici 2 semaines maximum.


2) Peut-on ajouter des références « spécifiques/spéciales » en tant que contrainte pour allouer un conteneur entier à cette référence directement ?

oui.
Tu vires la référence de l'optimisation et tu lui affectes un convoi dédié.
Il faudra ajouter ce convoi aux convois trouvés par le modèle.

C'est à dire qu'on enlève la référence du modèle global pour le mettre dans "convoi" seul mais qui sera quand même toujours lié au modèle ? Car il faut que j'arrive à lui dire qu'il prend un conteneur solo mais qu'en même temps sur les 5 possible dans la même journée, que les 4 restants soit gérer par le modèle. Est-ce que cela devient complexe si il y a plus d'une référence ? Car en réalité pour l'atelier 1 j'ai une référence mais pour l'atelier 3 j'en ai une dizaine.

3) Comment faire pour prendre en compte, en plus de l’atelier et de la matière, la température de coulée ?

Comme tu le dis, tu peux envisager des classes de températures mais tu risque d'avoir des instances à modéliser très petites et donc d'avoir une multiplication des conteneurs.
Reste à savoir si c'est un unique fourneau qui monte et baisse en température ou s'il y en a plusieurs, chacun ayant ses propres classes de températures.
Egalement, combien de classes de températures sont "utilisables" par jour?

Et dans le cas où il y aurai une multiplication des conteneurs, cela impacterai négativement le modèle ou cela deviendra juste plus lourd et long à mettre en place ? Nous sommes ici sur un unique fourneau qui monte et baisse en température. Si on se base sur les nombre de conteneurs journaliers, on peut dire que si 5 conteneurs, on pourra utiliser 5 classes de températures différentes. Les références présentes dans le conteneur devront avoir la même classe de température car en réalité ce sont pour répartir la coulée des différentes références, et donc il faut qu'elles aient la même température à +-5°C pour être coulées avec la même poche (je disais conteneur par le passé mais je suis bien sur l'étude des poches au secteur fusion).

4) Peut-on prioriser certaines références par rapport à d’autres ?

Il faudra ajouter une contrainte sur la ligne de la référence indiquant <=2

D'accord mais peut-on aussi faire en sorte que le modèle, en plus de n'en mettre que 2 MAX, en répartisse obligatoirement à partir du moment où il y en a produire?

5) Peux-tu m’expliquer la différence et/ou la complémentarité entre le solveur et l’opensolveur ?

C'est principalement une question de capacité.
Solver d'excel est limité en nombre de variables et de contraintes. Mais c'est un excellent bac à sable.
Opensolver peut travailler avec plusieurs "solver engine" et n'a pas les limitations de Solver d'excel.
Mais il reste quand même très lent.
Perso je préfère Solver studio que j'associe à glpk.
Au delà, quand il faut avoir une meilleure réactivité au niveau des résultats, je passe par Gusek, un Ide de glpk que l'on marie assez facilement avec excel.

Et quand ça rame toujours malgré cette escalade, j'essaie Cplex.


Tu m'as perdu à partir de glpk ^^'. Mais dans l'idée si je comprend bien, opensolveur doit pouvoir résoudre mon problème sans que j'ai à passer par solver studio ou gusek ou Cplex ?!


6) Comment faire pour calculer tout la semaine de production pour l’atelier 1 puis pour l’atelier 3 en « 1 clic » ?

Bin là il faut mettre du code autour, à la fois pour boucler sur les différentes classes d'instances (atelier - matière - température) à la fois pour, à l'intérieur d'une classe, itérer sur le nombre de conteneurs et donc sur les différents modèles.

D'accord car c'est au final, cet objectif que je dois atteindre donc il va falloir que j'apprenne a identifier le code et à créer ceci.

Et est-ce que cette optimisation sur VBA, sans connaissance en VBA, peut se mettre en place en très peu de temps ? (Deadline du projet dimanche soir, j’aurais dû poster plus tôt sur ce forum).

Tu aurais du poster plus tôt.

Encore que ce code n'est pas très compliqué mais il y a de la mise au point à prévoir.

Je suis vraiment dégouté car j'avais premièrement posté sur le forum Excel Download en ayant eu des premières réponses mais sans un cahier des charges bien défini, je ne savais pas que mon outil ne pouvait être créer uniquement avec le solveur. Sinon c'est sur j'aurai pu poster début août (sachant que j'ai travaillé dessus à chercher des combinaisons de formules a s'en tirer les cheveux au lieu de venir poster ici...).

Penses-tu que tu pourrais m'expliquer ce code et que l'on regarde cette mise au point ? Car ça je me doute qu'avec les différents éléments + les différents variables il va y avoir des mise au points et c'est ce qui m'inquiète niveau timing.



Cordialement

Paradjanov'
1
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
20 août 2020 à 23:43
Bon, il y a des annexes aux annexes.

Avant tout, pour faire ce que tu appelles des citations, je sélectionne le texte à citer, je clique sur le bouton "italique", je resélectionne le texte avec les balises < ital > ......< /ital > et je clique sur le bouton "<>" (code, comme si c'était des lignes de codes)

Peux-tu me confirmer si la démarche est bonne pour ajouter la variable supplémentaire qui est la température de coulée ?


Je dirais oui, a priori.
Il faudrait que tu envoies des données complétées de la classe de température (et plusieurs instances dont des pathologiques).
Mais se posera alors la question de la multiplicité des conteneurs et de leurs remplissages.
Enfin, c'est ce que j'imagine.
Il faudrait des instances diverses et variées pour apprécier les conséquences.
Il suffit d'envoyer une dizaine d'onglets Prod avec la classe de température en plus.


Ces cas pathologiques existent et j'en ai recensé plusieurs malheureusement et je souhaite les intégrer dans cet outil.


C'est faisable en itérant sur le nombre de convois tant que le modèle est infaisable.
Avec l'exemple que je prenais sur les 10 références à 126kg, on commencera à 5 (partie entière de 1260/250) et on ira jusqu'à 10 pour obtenir une "optimisation à 10 convois!!!


Je me doute et je suis tout à fait disposer et motiver pour apprendre/intégrer ces différentes choses. Tout du moins, et s'il y a vraiment trop d'informations, le minimum requis pour faire tourner cet outil d'ici dimanche soir en non stop.


Pour optimiser ton temps, il faut d'abord laisser tomber la théorie de l'optimisation.
Ensuite, il faut comprendre comment sont construits les modèles et commencer à jouer avec.
Il faut également stabiliser ta demande (la température n'était pas dans ta demande initiale, ni les contraintes sur le nombre max de matière dans un même conteneur pour une référence)
Il faut valider l'algorithme qui est censé résoudre l'optimisation y compris dans les cas pathologiques.
Enfin il faut trouver des bouts de codes sur le net pour piloter OpenSolver, faire des copier/coller et intégrer le tout dans les boucles kibonbien sur les ateliers - matière - classe température.

Pour ma part, j'ai construit les optimisations par tâtonnements sur une instance (forcément incomplète).
J'ai en tête un algorithme qui me semble tenir la route mais ça reste à prouver.
Je n'ai pas testé la construction d'un modèle par vba sur OpenSolver (même si ça semble assez standard au niveau des appels API)


Autant pour moi ma langue à fourchée, le modèle que je cherche à obtenir doit bien répondre à des optimisations "optimales" avec comme mentionné dans l'idée quand on trouve 7,4 conteneurs --> 7 remplis au max puis le dernier rempli avec ce qu'il reste en prenant un conteneur de capacité inférieur.


C'est le plus coûteux en temps de traitement. A voir.


Et pour finir, même si cela m'intéressait dans le futur, mais manque de temps ici et tu l'as bien compris, l'habillage à l'aide de VBA pourra me servir dans tous mes prochains fichiers Excel et c'est donc un aspect de ce logiciel que je souhaiterai développer/apprendre.


C'est un savoir faire intéressant pour tes futurs employeurs.


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 21 août 2020 à 00:31
Avant tout, pour faire ce que tu appelles des citations, je sélectionne le texte à citer, je clique sur le bouton "italique", je resélectionne le texte avec les balises < ital > ......< /ital > et je clique sur le bouton "<>" (code, comme si c'était des lignes de codes)


Test micro 1-2. D'accord, manip bien prise en compte !!

Il faudrait que tu envoies des données complétées de la classe de température (et plusieurs instances dont des pathologiques).


Je te met un lien pour obtenir le fichier que j'ai fait jusqu'à présent (attention les yeux ça va piquer avec des formules SI.Conditions et autres galères de débutant... Ce qui est sur c'est qu'en données d'entrée :
- J'ai 2 chantier appelé I1 et I3 (d'où le nom d'emprunt atelier 1 et 3 au début du post)
- Plusieurs "matières" qui correspondent à différentes nuances d'alliage d'aluminium
- Les classes de températures ne sont pas encore "faite" mais j'ai, pour chaque référence dans ma base de données préalablement créée, la température de coulée avec son intervalle : ex Ref 1 - 780 °C +- 5°C et ref 2 : 755°C +-5°C
- Et au lieu de "convoyer" les pièces, sachant que je suis au secteur fusion c'est directement à la préparation des poches de métal liquide que je suis censé "obtenir un planning". C'est pour cela que la température (petit fourchette de +-5 °C) est primordial pour associer les références entre elles dans les poches avant coulée.

Quand tu dis plusieurs instances dont des pathologiques ? à quoi tu penses ? Cela ne me parles pas mais je pense que tu veux parler des différents groupements que j'ai supposé précédemment ? C'est à dire répartir les références par petit groupe avant d'utiliser le solveur ?


C'est faisable en itérant sur le nombre de convois tant que le modèle est infaisable.
Avec l'exemple que je prenais sur les 10 références à 126kg, on commencera à 5 (partie entière de 1260/250) et on ira jusqu'à 10 pour obtenir une "optimisation à 10 convois!!!


Un petit quiproquos en gras j'imagine où alors il faut que tu m'expliques. Oui dans l'idée c'est ça ! Comme ça on peut à la fois prendre en compte une référence "prioritaire" qui revient dès que possible tout en prenant en compte des références annexes disponibles pour combler les trous au même moment.


Pour optimiser ton temps, il faut d'abord laisser tomber la théorie de l'optimisation.
Ensuite, il faut comprendre comment sont construits les modèles et commencer à jouer avec.
Il faut également stabiliser ta demande (la température n'était pas dans ta demande initiale, ni les contraintes sur le nombre max de matière dans un même conteneur pour une référence)
Il faut valider l'algorithme qui est censé résoudre l'optimisation y compris dans les cas pathologiques.
Enfin il faut trouver des bouts de codes sur le net pour piloter OpenSolver, faire des copier/coller et intégrer le tout dans les boucles kibonbien sur les ateliers - matière - classe température.

Pour ma part, j'ai construit les optimisations par tâtonnements sur une instance (forcément incomplète).
J'ai en tête un algorithme qui me semble tenir la route mais ça reste à prouver.
Je n'ai pas testé la construction d'un modèle par vba sur OpenSolver (même si ça semble assez standard au niveau des appels API)


Alors oui quand je dis "optimisation" c'est déjà surtout --> obtenir un modèle qui fonctionne pour la semaine puis après on l'adaptera à plus d'une semaine et, peut être, avec une optimisation différente si on trouve mieux (mais ce n'est pas dis pour le moment).

Je suis d'accord, j'ai encore du mal à comprendre comment sont construits les modèles sachant que je découvre ça depuis ce matin. Penses-tu que je peux en trouver un "basique" sur le net pour commencer à jouer avec et comprendre comment il marche ?

La demande stabilisé, avec les détails plus haut dans ce message, est ainsi de "Générer par chantier I1 puis I3 (chacun un planning propre défini) le meilleur remplissage possible des poches en prenant en compte le chantier, la nuance, la température toujours avec une capacité max de poche (comme dans les messages précédent).

- Au chantier I1, il y a une référence qui revient tous le temps et où l'on peut en mettre que 2 max par poche (contrainte qualité sinon trop de défauts après coulée dû à la température qui descend trop entre le 1er et 3e moule coulée). Dans l'onglet routine côté IMF1 (= I1), les 2 références peuvent être coulée en même temps par habitude (Si 2x 12016006 soit 160 kg alors on peut rajouter x1 11987001 car 160 + 60 = 220 Kg ok pour une poche de 250 Kg. Ou alors il arrive aussi de mettre 1 seule 12016006 + 1x 12007002 soit 80 + 110 = 190 Kg pour 250 Kg max.

- Au chantier I3, il y a la liste des références que l'on peut organiser seule dans une poche dans la feuille "routine". Il y a différentes capacités de poches (250, 450, 560 & 650 Kg). La poche de 650 Kg est réservé à la référence 22007001. Sinon en règle général on utilise des poches de 450 Kg voire des poches de 250 Kg si la masse de la référence n'excède pas 250. Ex : 2 x 22007002 qui donne 240 Kg.

Dans tous les cas, ce qui est sur c'est que ces "routines" sont impactés avec la date de réception des moules, d'où le fait de couler ce qu'on a sous la main au mieux.
Or ici, on regarde une optique différente, où d'après le planning de production initial, on génère un planning composé des meilleures combinaisons de remplissage pour ensuite, si l'outil est validé, demander les différentes références pour le jour J.

On peut donc prendre en compte que les 2 ref 12016006 sont coulées systématiquement par 2 et toutes les autres références ensemble sans devoir attendre (car sinon on ne s'en sortira jamais !).

Pour l'histoire de l'algorithme, j'imagine que tu entends résoudre différentes erreur de macro VBA pour ne pas qu'elle plante lors de la résolution en prenant en compte les références "routines" qui sont bloquées par la qualité et les autres références qui peuvent elles être rassemblées n'importe quand.

Pour la suite, trouver des bouts de code sur le net d'accord mais si jamais tu as des sites de "références" en tête je suis preneur, sinon il faudra que je fasses de grandes recherches (pas le choix quand il faut, il faut...).

Construire les optimisations sur une instance incomplète, en termes du manque de données que j'ai finalement détaillées ici, ou en terme de code qui ne pourrait pas tout prendre en compte ?
Enfin, en tout cas je n'ai pas encore d'idée à quoi ressemble un algorithme (peut être un soupçon d'idée mais à confirmer en voyant la chose) mais je ferais tout en sorte pour obtenir un algorithme qui puisse tenir la route et ainsi réussir l'objectif global.

Merci encore par avance pour tout ce que tu me détailles et toute l'aide précieuse que tu m'accordes, on s'enverra nos informations persos en message privé pour rester en contact et que je te récompense (resto ou autres) comme il se doit une fois tout ceci terminé !


Cordialement,


PS : j'espère que ce n'est pas trop fouillis. Si ça l'est, tu me diras et je remettrai de l'ordre dans le cahier des charges demains matin dès la première heure.

PS 2 : le lien du fichier tant attendu !!! https://www.cjoint.com/c/JHuwFWLLL67
1
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
21 août 2020 à 01:10
On est presque synchrone, à une minute près.


Alors quand je dis modèle j'entend une configuration type un calcul dans opensolveur mais je pense qu'on parle de la même chose. Pour VBA, j'ai vraiment des petites bases "vu en cours" mais sinon j'ai déjà utiliser l'enregistreur de macro (même si en général cela donne un code pas très soigné mais qui pourrait dépanner le temps de finaliser le rapport puis l'optimiser pour la suite d'ici 2 semaines maximum.


Modèle : on parle de la même chose
Vba : l'enregistreur ne sera pas très utile puisqu'il faut mettre des boucles en place et dialoguer avec les Apis


C'est à dire qu'on enlève la référence du modèle global pour le mettre dans "convoi" seul mais qui sera quand même toujours lié au modèle ? Car il faut que j'arrive à lui dire qu'il prend un conteneur solo mais qu'en même temps sur les 5 possible dans la même journée, que les 4 restants soit gérer par le modèle. Est-ce que cela devient complexe si il y a plus d'une référence ? Car en réalité pour l'atelier 1 j'ai une référence mais pour l'atelier 3 j'en ai une dizaine.


Quand je dis de virer la référence de l'optimisation, j'entends que l'on crée hors optimisation un/des convoi(s) pour la ou les références spécifiques.
Ces convois seront mis en premières places de l'optimisation de la classe de température.
Ces références spécifiques seront ensuite exclues de l'optimisation de cette classe de température (donc ça simplifie l'optimisation) et le résultat des calculs (les convois hors ceux des références spécifiques) se mettront à la suite des convois des références spécifiques.

Elles seront donc intégrées naturellement dans les 5 convois max par jour.
Si il y a plusieurs références ça ne complique pas le travail, au contraire puisque ça diminue le nombre de lancement des modèles.

En revanche, il faut préciser une chose :
Peut-il y avoir plusieurs pièces d'une référence spécifique (et donc la création de plusieurs convois)
Le code qui permet d'identifier une référence spécifique (une colonne supplémentaire par exemple).
Et pendant qu'on y est, le code qui permet d'identifier le max de pièces d'une référence dans un même conteneur (2ème colonne supplémentaire?)


Et dans le cas où il y aurai une multiplication des conteneurs, cela impacterai négativement le modèle ou cela deviendra juste plus lourd et long à mettre en place ?


Non, le modèle s'appliquera sur des instances plus petites et devrait donc être plus rapide.
Mais il sera lancé plus de fois.
Ce qui m'inquiète, c'est que tu n'as que 25 conteneurs par semaine pour l'atelier 1.



on peut dire que si 5 conteneurs, on pourra utiliser 5 classes de températures différentes. 


5 classes de températures au plus.
On peut imaginer rester à la même température plusieurs jours de suite selon la production de la semaine.


D'accord mais peut-on aussi faire en sorte que le modèle, en plus de n'en mettre que 2 MAX, en répartisse obligatoirement à partir du moment où il y en a produire?


Pas sûr de bien comprendre...
Le modèle a une contrainte de base : toutes les pièces à produire doivent être produites.
Dans le cas des 2 MAX, on rajoute une contrainte sur le max de cette référence par conteneur.
Un problème surviendrait si il y avait plus de 50 pièces d'une référence 2 MAX à produire puisque dans ce cas on n'aurait pas assez de conteneurs.


Mais dans l'idée si je comprend bien, opensolveur doit pouvoir résoudre mon problème sans que j'ai à passer par solver studio ou gusek ou Cplex ?!


Oui.
Enfin, j'espère....


D'accord car c'est au final, cet objectif que je dois atteindre donc il va falloir que j'apprenne a identifier le code et à créer ceci.


oui.


Je suis vraiment dégouté car j'avais premièrement posté sur le forum Excel Download en ayant eu des premières réponses mais sans un cahier des charges bien défini, je ne savais pas que mon outil ne pouvait être créer uniquement avec le solveur. Sinon c'est sur j'aurai pu poster début août (sachant que j'ai travaillé dessus à chercher des combinaisons de formules a s'en tirer les cheveux au lieu de venir poster ici...).


Pas sûr que je t'aurais répondu sur XLdownload. D'ailleurs je ne l'ai pas fait.
Sur CCM, c'est le mot optimisation dans le sujet de ta demande qui a attiré mon attention.
Les réponses sur Xldownload sont quasiment toujours de bonne qualité.

Quant au solver, c'est une possibilité, mais peut-être pas la seule.
Encore que... Ton problème est un classique de recherche opérationnelle (Bin Packing Problem 1D) et les heuristiques connues ne sont pas terribles.
On pourrait aussi envisager la force brute pour les petites instances.


Penses-tu que tu pourrais m'expliquer ce code et que l'on regarde cette mise au point ? Car ça je me doute qu'avec les différents éléments + les différents variables il va y avoir des mise au points et c'est ce qui m'inquiète niveau timing.


Je ne vois pas trop comment tu peux t'en tirer seul.
Je vais donc continuer à t'aider sans garantie de respecter ta contrainte de dimanche soir.



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 21 août 2020 à 06:30
Réponse au post <10>

Tu dérapes.
Il faut rester focus sur la demande actuelle (que tu as déjà augmentée depuis le premier message).
Je ne vais surtout pas rentrer dans le détail de ton classeur.

Il faudrait que tu envoies des données complétées de la classe de température (et plusieurs instances dont des pathologiques).


Je n'ai besoin que de ça et rien de plus :

Retire ton fichier qui contient une liste de client. Tout doit être anonyme sur un forum.

Tu feras toi même les transformations entre tes appellations métier et le vocabulaire utilisé dans ce post depuis le début.

Pour les cas pathologiques, on en a déjà parlés et tu m'as dit que tu en avais souvent (cf l'exemple de 10 références ayant 1 pièce chacune pour 126kg d'une matière).

Il faut des instances qui représentent la réalité dans sa diversité, d'où ma demande d'une dizaine d'onglets dans un classeur "instances".

C'est faisable en itérant sur le nombre de convois tant que le modèle est infaisable.


Non, il n’y a pas d'erreur.
On part du nombre minimal de conteneurs nécessaires (tu te souviens qu'on divise la masse totale par 250 pour avoir ce nombre minimal).
Dans le meilleur des cas l'optimisation fournit un résultat et on s'arrête là.
Si c'est infaisable, on ajoute un conteneur et on relance un modèle adapté à ce nombre de conteneurs.
Et on continue tans que c'est infaisable.


Comme ça on peut à la fois prendre en compte une référence "prioritaire" qui revient dès que possible tout en prenant en compte des références annexes disponibles pour combler les trous au même moment.


Là, je ne comprends pas.


Je suis d'accord, j'ai encore du mal à comprendre comment sont construits les modèles sachant que je découvre ça depuis ce matin. Penses-tu que je peux en trouver un "basique" sur le net pour commencer à jouer avec et comprendre comment il marche ?


Il faut regarder les modèles que je t'ai fournis et voir ce qui change.
C'est sûr que ça n'est pas simple quand on se prend la Programmation Linéaire en Nombres Entiers en pleine tête.

Il faut que tu comprennes l'algorithme également pour voir les changements à opérer ente 2 itérations d'une optimisation.

Mais là, je rencontre une grosse difficulté : je passe des heures à affiner ta demande à travers nos échanges et il en faudrait plus pour t'expliquer pédagogiquement le fonctionnement du solveur dans le cadre de ton projet.

Avec tout ça je ne peux pas avancer sur le vba pour piloter OpenSolver.



Pour le reste de ton message, je ne sais pas si c'est fouillis (en fait, si, ça l'est mais je n'ai pas besoin que tu précises) mais je n'en tiendrai pas compte.
Je reste sur la demande initiale et j'essaie de construire un prototype.


En guise de conclusion de cette réponse, j'ai déjà participé à de l'aide sur des projets ou des stages de fin d'études et je ne comprends toujours pas comment on peut demander à des étudiants dont ça n'est pas la spécialité de développer une application alors qu'ils ne maîtrisent ni vba ni l'optimisation ni l'algorithmique!


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 21 août 2020 à 09:33
Bonjour,

Je te répond aux deux messages directement ici :

Modèle : on parle de la même chose
Vba : l'enregistreur ne sera pas très utile puisqu'il faut mettre des boucles en place et dialoguer avec les Apis



Oui pour l'histoire de l'enregistreur de macro VBA c'est bien ce qu'il me semblait que ça peut dépanner pour faire des petites macros mais pas de ce cas la, cela aurait été trop simple ^^. Je vais faire des recherches ce matin pour comprendre ce que sont les Apis dans VBA pour comprendre la suite.

Quand je dis de virer la référence de l'optimisation, j'entends que l'on crée hors optimisation un/des convoi(s) pour la ou les références spécifiques.
Ces convois seront mis en premières places de l'optimisation de la classe de température.
Ces références spécifiques seront ensuite exclues de l'optimisation de cette classe de température (donc ça simplifie l'optimisation) et le résultat des calculs (les convois hors ceux des références spécifiques) se mettront à la suite des convois des références spécifiques.

Elles seront donc intégrées naturellement dans les 5 convois max par jour.
Si il y a plusieurs références ça ne complique pas le travail, au contraire puisque ça diminue le nombre de lancement des modèles.

En revanche, il faut préciser une chose :
1) Peut-il y avoir plusieurs pièces d'une référence spécifique (et donc la création de plusieurs convois)
2) Le code qui permet d'identifier une référence spécifique (une colonne supplémentaire par exemple).
3) Et pendant qu'on y est, le code qui permet d'identifier le max de pièces d'une référence dans un même conteneur (2ème colonne supplémentaire?)


1 et 2) Oui il peut y avoir plusieurs pièces d'une même référence. C'est pour cela que j'avais fait une colonne supplémentaire dans mon tableau recensant les références "routines" en indiquant leurs nombre respectif. Pour les autres références qui sont la pour finir de remplir les conteneurs, il n'y a en revanche pas de limite fixée (et cela nous arranges pour nous permettre d'en caser le + possible pour combler les espaces restants).

3) Pour répondre à ta question, il n'y a que 4 références sur 10 pour l'atelier 3 où le nombre de pièces est différent de 1. Et 1 seule référence pour l'atelier 1 ou le nb de pièces est différent de 1.

Non, le modèle s'appliquera sur des instances plus petites et devrait donc être plus rapide.
Mais il sera lancé plus de fois.
Ce qui m'inquiète, c'est que tu n'as que 25 conteneurs par semaine pour l'atelier 1.


D'accord. Alors après ce n'est pas un problème en soit car cela sera aussi un élément d'analyse.
Cas 1) La production de la semaine rentre dans le planning : ok on regarde ce que ça donne et on optimise de manière à faire ça bien.
Cas 2) La production de la semaine ne rentre pas entièrement sur la semaine et cela prouve ainsi que le programme est surdimensionné. Après je ne suis pas sur que l'on rencontrera ce cas la souvent car pour le moment au vu contexte économique actuel, on est plus souvent dans le cas 1.

5 classes de températures au plus.
On peut imaginer rester à la même température plusieurs jours de suite selon la production de la semaine.


Oui je comprend ce que tu veux dire. C'est sur que dans l'idéal il faut faire toutes les références d'une même classe de température et de matière en même temps. Si l'on doit prendre plusieurs classe de température, cela impactera le temps avant que le fourneau soit bien à la bonne température pour prendre en charge les pièces (perte de temps sur la journée).


Pas sûr de bien comprendre...
Le modèle a une contrainte de base : toutes les pièces à produire doivent être produites.
Dans le cas des 2 MAX, on rajoute une contrainte sur le max de cette référence par conteneur.
Un problème surviendrait si il y avait plus de 50 pièces d'une référence 2 MAX à produire puisque dans ce cas on n'aurait pas assez de conteneurs.


Cf phrase en gras qui répond à ma question : Toutes les pièces prise en compte doivent être produites. Donc pas de soucis, on ajoutera comme tu dis la ligne de contrainte qui dis que la référence <= 2 mini.
Et bien sur aussi, ici cela permettra de mettre l'accent sur un nombre MAX par semaine à faire en si l'on veut tenir le planning. Néanmoins, dans les 5 conteneurs par jour on peut en mettre 2 (mais bien sur cela impactera l'espace pour prendre en compte d'autre références) et donc en produire théoriquement 10 par jour.

Je ne vois pas trop comment tu peux t'en tirer seul.
Je vais donc continuer à t'aider sans garantie de respecter ta contrainte de dimanche soir.


Merci beaucoup car j'avoue que la je me sens perdu avec toutes ces nouvelles informations. Je t'en remercie d'avance !! :)

Je n'ai besoin que de ça et rien de plus :

Retire ton fichier qui contient une liste de client. Tout doit être anonyme sur un forum.

Tu feras toi même les transformations entre tes appellations métier et le vocabulaire utilisé dans ce post depuis le début.

Pour les cas pathologiques, on en a déjà parlés et tu m'as dit que tu en avais souvent (cf l'exemple de 10 références ayant 1 pièce chacune pour 126kg d'une matière).

Il faut des instances qui représentent la réalité dans sa diversité, d'où ma demande d'une dizaine d'onglets dans un classeur "instances".


Oui pardon et merci, j'ai retiré le fichier du site cjoint.
Alors si je comprend bien il te faut (cf. nouveau fichier cjoint) la même chose que ta première image mais avec la colonne de température en + ?

Oui pas de problème comme tu le dis je ferais les transformations appellations métier et vocabulaire.

Pour les cas pathologiques, j'en ai parlé un peu plus haut : une dizaine pour atelier 3 et une seul pour atelier 1.

Alors pour les différentes instances représentant la réalité dans sa diversité, je m'excuse mais je ne comprend pas trop ce qu'il te faut.

Non, il n’y a pas d'erreur.
On part du nombre minimal de conteneurs nécessaires (tu te souviens qu'on divise la masse totale par 250 pour avoir ce nombre minimal).
Dans le meilleur des cas l'optimisation fournit un résultat et on s'arrête là.
Si c'est infaisable, on ajoute un conteneur et on relance un modèle adapté à ce nombre de conteneurs.
Et on continue tans que c'est infaisable.


Oui je me souviens de la démarche détaillé dans ton premier fichier. Et d'accord, un type de raisonnement en sous estimant le nombre de conteneur jusqu'à tomber sur le bon nombre lorsque la solution deviendra "faisable". Ou alors restera infaisable et la on pourra conclure que le planning de production n'est pas réalisable.

Là, je ne comprends pas.


Répondu plus haut en disant que toutes pièces marqué doit être produites. Même si j'avoue qu'en relisant ma phrase cela ne veut pas dire grand chose ^^'.


Il faut regarder les modèles que je t'ai fournis et voir ce qui change.
C'est sûr que ça n'est pas simple quand on se prend la Programmation Linéaire en Nombres Entiers en pleine tête.

Il faut que tu comprennes l'algorithme également pour voir les changements à opérer ente 2 itérations d'une optimisation.

Mais là, je rencontre une grosse difficulté : je passe des heures à affiner ta demande à travers nos échanges et il en faudrait plus pour t'expliquer pédagogiquement le fonctionnement du solveur dans le cadre de ton projet.

Avec tout ça je ne peux pas avancer sur le vba pour piloter OpenSolver.



Pour le reste de ton message, je ne sais pas si c'est fouillis (en fait, si, ça l'est mais je n'ai pas besoin que tu précises) mais je n'en tiendrai pas compte.
Je reste sur la demande initiale et j'essaie de construire un prototype.


En guise de conclusion de cette réponse, j'ai déjà participé à de l'aide sur des projets ou des stages de fin d'études et je ne comprends toujours pas comment on peut demander à des étudiants dont ça n'est pas la spécialité de développer une application alors qu'ils ne maîtrisent ni vba ni l'optimisation ni l'algorithmique!



D'accord je vais regarder ça de plus près pour mettre à plat les différences et les comprendre. Comprendre l'algorithme pour voir les changements à opérer entre itérations : bien reçu.

Je me doutes et je te laisses à partir de maintenant, le temps que j'analyse tout dit plus haut, le temps de te concentrer sur Opensolveur pour le prototype.

Et pour la conclusion, je suis malheureusement bien d'accord avec toi car ne pas maitriser ces choses la mais devoir sortir un truc c'est très complexe ! Et c'est la que je me rend compte de l'importance et la puissance d'utiliser VBA dans Excel comme tu me l'as dis précédemment qui servira pour mes futures employeurs.

Merci encore pour tout et par avance pour tes prochains messages,

Cordialement,

PS : lien du fichier cjoint : https://www.cjoint.com/c/JHvhHwdv2I7
1
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
Modifié le 21 août 2020 à 16:18
Bonjour,

Dans ton fichier tu m'as mis des températures alors que je te demandais (et tu proposais toi-même) des classes de températures.
Comment je reconnais une référence spécifique ou une référence n_MAX?
Il faut 2 colonnes supplémentaires dans ton fichier pour identifier ces données.

L'objectif est de créer un module d'optimisation invariant (indépendant de la structuration de tes données dans ton classeur excel (celui que tu aurais dû effacer dans ton post <10>).

Tu n'auras plus qu'un petit module d'interfaçage entre tes données et celles que le module d'optimisation attend en entrée.
Idem pour le retour en sortie du module d'optimisation pour aller dans ta feuille planning.


Refais un onglet prod avec toutes les infos.

Concernant le problème BPP (Bin Packing Problem), voici sa modélisation mathématique :


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.

Comme ce 2ème modèle ne fournit pas les meilleurs résultats de remplissage, il est possible de raffiner l'optimisation en ajoutant des modèles complémentaires (un modèle qui plafonne tous les conteneurs pleins à 250kg ou un modèle qui minimise les reste à remplir des conteneurs pleins par exemple).
A voir en fonction du temps.
Tu pourras les décrire dans tes axes d'améliorations.

Niveau algorithme, le module d'optimisation fera :
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



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 21 août 2020 à 17:41
Bonjour,

Merci pour toutes ces informations, je suis en train de faire le nouvel onglet prod comme demandé avec toutes les infos dont ces fameuses classes de températures.

J'ai une question la dessus qui a son importance pour la suite concernant ces classes de températures :

Sachant que j'ai deux ateliers différent mais des références propre à chaque atelier.

Je pensais effectuer la démarche suivante pour obtenir la classe de température (a voir si ça peut se faire ou si il y a plus simple ?!) :

1) Via excel je sors un graphique me montrant les différentes températures de coulées en fonction de la matière utilisé (Cf. lien cjoint pour exemple) - https://www.cjoint.com/c/JHvo337tjY7

Chaque bâton bleu correspond à une matière donnée.
L'ovale rouge + la ligne rouge en tiret en son centre, permet de donner la valeur moyenne admissible pour la classe de température : ici 750;755;760 donc température finale (qui correspond a une température possible pour toutes les références dans l'intervalle) --> 755 °C.

2) Chaque classe (= un ovale rouge) aura un nom propre : Classe A, B, C, etc..
3) Formule dans l'onglet prod qui prend la température de la référence ex : 750 °C puis qui lui attribue sa classe de température.
Après plusieurs recherches, j'ai pensé à une formule de ce type :
=SI(Valeur_température>=Valeur moyenne classe A<=Valeur_température MAX ; A; NOK)

Sauf qu'en l'écrivant ici je me rend compte que cette formule, qui ne marche pas écrite comme ça, ne prendra en compte que la classe A et non le lot de A à D par exemple si on a 4 classes différentes.

4) On pourra utiliser dans les modèles les cellules des classes de températures comme références aux contraintes.

Ma question est la suivante :
- Quel est la méthode pour définir les meilleures intervalle de tolérance des classes de températures ?

Cas 1) Basique mais pas efficace à mon sens : on prend la température la plus basse et on ajoute 5°C --> Première classe. Puis pour toutes les autres on prend la valeur et on prend la valeur min = valeur - 5 °C et valeur Max = valeur + 5°C.

Cas 2) Ce que j'explique plus haut en prenant, après analyse des références totales produites, une valeur moyenne qui possède un intervalle de tolérance avec le plus de références.

J'opterais pour le cas 2) car on facilitera le remplissage des conteneurs via des classes de températures possédant le + de références.

A mon avis et pour faciliter les modèles en fonction des ateliers, il faut faire des classes pour les références de l'atelier 1 puis d'autre pour l'atelier 3 OU BIEN on fait des classes globales qui , une fois la contraintes du chantier sélectionné, prendront en compte seulement ce qui l'intéresse.

Merci par avance pour ta réponse, que je fignole tout ça pour avancer sur la suite.


Edit : Ou alors tout simplement ajouter 2 colonnes 1 colonnes température min, valeur moyenne et une dernière colonne température MAX et si la température de la référence est égale à l'une ou l'autre alors on renvoi la valeur moyenne si vrai; sinon si faux(dans le cas aucun des 2 colonnes min ou Max) on renvoi valeur moyenne aussi car cela veux dire que c'est cette valeur la est égale à la valeur moyenne directement ?!
Je sais pas si j'suis clair XD

Edit 2 : Je penses qu'ayant étudié la fonction SI.CONDITIONS précédemment vu que je pensais pouvoir faire avec ça (quel naif j'étais il y a encore 2 semaines) on pourrait faire une fonction qui ressemblerai à ça :
=SI.CONDITIONS(ET(Température_ref>=Température_valeur_min;

Mais idem je peux mettre a la suite les SI mais je ne pourrait pas obtenir la classe en fonction de la température donnée. Je potasse encore un peu et j'te renvoi un truc si vraiment j'suis coincé ^^.


Edit 3 :
Comment je reconnais une référence spécifique ou une référence n_MAX?


J'ai pas compris ta question par rapport à ça. Tu veux dire une référence qui prend un conteneur a lui tout seul et les références qu'on peut mettre, en quantité illimité dans la limité du conteneur, pour finir de combler l'espace ?

Si c'et ça, je vais ajouter une colonne à la feuille Prod pour dire si seul ou non via une liste déroulante préalablement définie.

Sinon je pense avoir trouvé et cela revient au cas 2) à la main pour bien définir les différentes classes puis tableau pour dire ex : température 725;730;735 = Classe A comme ça dès que dans le tableau on a une des trois valeurs sela renverra la classe A via une formule RechercheV
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 21 août 2020 à 18:14
Re,

Alors j'y suis presque mais je pense qu'il faut rajouter un fonction EQUIV + INDEX permettant de dire, une fois la valeur trouvée via RechercheV, que l'on reporte le contenu de la cellule de la première colonne du tableau et de la ligne où l'on a trouvé le résultat.

Ex ici : température 780 °C soit présent dans la ligne 5 ce qui équivaut à la lettre D.

On doit donc retrouver la lettre D pour détailler la classe.

Le hic avec cette méthode, c'est que je ne peut pas prendre en compte des température qui serait dans 2 lignes différents (cas 1 précédent, oui celui que je ne voulais pas faire mais qui m'a paru le plus simple...).


Fonction :
=RECHERCHEV([@Température];classe_ref;1;FAUX)

a ça, si cela fonctionne comme ça, il faudrait ajouter le combo index+equiv détaillé plus haut pour obtenir dans la cellule cible la classe de température associé ?

Lien du fichier pour y voir plus clair : https://www.cjoint.com/c/JHvqn3bbu27
1
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
21 août 2020 à 19:24
La mise en classe de températures est un problème à part entière.
Il y à certaines classification qui donneront de meilleurs résultats que d'autres à l'optimisation.


il n'y a que des #n/a dans classe de température.
Met des valeurs!!!! pas des formules avec des références à un classeur externe.

Tu n'as toujours pas mis le repérage des n_MAX

Je ne vois pas trop de données pathologiques dans ton instance.

As-tu d'autres instances?

Fais un tri Atelier\matière\classe température. A chaque fois je me fais avoir car je crois que tes données sont triées.

Remarque :
Le fourneau est à une température élevée en fin de semaine. Ne faut-il pas tenir compte de cette température pour ne lui envoyer que des conteneurs trié en classes de températures décroissantes la semaine suivante?
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 21 août 2020 à 20:29
Re,

La mise en classe de températures est un problème à part entière. 
Il y à certaines classification qui donneront de meilleurs résultats que d'autres à l'optimisation.

il n'y a que des #n/a dans classe de température.
Met des valeurs!!!! pas des formules avec des références à un classeur externe.


Oui j'imagine. J'ai pris pour faire un test, de manière croissante par tranche possible, des classes de numéro 1 à 5.


Tu n'as toujours pas mis le repérage des n_MAX


Je te rajoute une colonne pour donner le nombre de références max.

Je ne vois pas trop de données pathologiques dans ton instance.

As-tu d'autres instances?
Tu parles de différents modèles ? Qu'entend tu par données pathologiques ? Des contraintes pour mettre dans le modèles ? Je n'arrives pas à mettre une fonction/donnée sur ce nom.

Fais un tri Atelier\matière\classe température. A chaque fois je me fais avoir car je crois que tes données sont triées.


En effet désolé, voici le fichier mis à jour avec les différentes remarques et le contenu triée.

Remarque :
Le fourneau est à une température élevée en fin de semaine. Ne faut-il pas tenir compte de cette température pour ne lui envoyer que des conteneurs trié en classes de températures décroissantes la semaine suivante?


Le fourneau est ajustable en température mais dans l'idée c'est sur qu'il faut faire les références les plus "froides"/aux températures les plus basses en priorités. Mais je ne sais pas si il faut vraiment en tenir compte à 100 % car si l'on réfléchi comme ça et qu'il faut 1 conteneur tout seul de perdu ds le début de la semaine pour faire 2 référence à faible températures comparé à 5-6 aux températures moyennes...
Ce qui est sur c'est qu'il faut remplir au Max, en esseyant de faire les références avec la plus faible température en début de journée. Sinon, c'est toujours faisable mais il y a aura un temps technique d'attente le temps que le fourneau redescende (ex : si on fait une référence à 780 °C puis après 730°C, il y aura un delta de température entre le temps de passer de 780 à 730 °C).

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

nota : Les références qui ne sont pas contraintes en nombre MAX ont une case vide. Les autres possède un nombre MAX qui leur est propre.


EDIT et désolée, yes j'essaie de te faire ça la je suis dessus 19h59.

Edit 2 : 20h28, dans ta démarche j'arrives à reprendre les premiers points 1 et 2 mais tu lances le modèle qu'à partir du point 7. Pour ma part, je ne peux plus obtenir de résultat aux points 3) à 6) sans avoir fait mouliné un modèle. Est-ce que c'est comme ça que tu as réussi à le faire ?
1
Paradjanov Messages postés 57 Date d'inscription mardi 18 août 2020 Statut Membre Dernière intervention 25 octobre 2020 18
21 août 2020 à 22:06
Re,


ça fait 1h30 que je galérais sur ton fichier en ayant un solveur qui ne marchait pas.

réponse tout con : j'utilisais le solveur basique d'Excel et non l'opensolveur.

J'ai du coup bien réussi à refaire ton fichier pour les résultats du modèle qui maximise les 4 conteneurs pleins.

Je vais de ce pas appliquer ça à mon nouveau fichier + essayer de mettre en place des modèles prenant en compte la température mais je ne sais pas si ça va être simple car de mettre un type de classe de 1 à 5, je ne vois pas comment je peux dire dans les contraintes de regrouper seulement les 1 avec les 1 etc...

Je t'upload le fichier dès que c'est good.

Merci pour la démarche et pour reprendre de ce que j'ai fait :

Démarche :
1) masse totale matière 6 (1 052kg)

Oui la pas de problème, on fait la somme des différentes masses à couler toute références confondues (enfin dans celle que l'on regarde bien sur !).

2) estimation du nombre de conteneurs (4 pleins + 1)

De la, on reprend la masse total du 1) en la divisant par la capacité maximum du type de conteneur utilisé --> 4,x soit 5 conteneurs (ajout d'une formule =ARRONDISUP pour obtenir forcément tous le temps le nb de conteneurs exacts).

Et à partir de la, il faut lancer les modèles pour obtenir les valeurs qui suivent.

3) calcul du reste à remplir pour chacun des 4 conteneurs pleins
4) calcul du remplissage des 5 conteneurs
5) faire les sommes des 4 restes à remplir (objectif à minimiser)
6) faire les sommes des 4 conteneurs pleins (objectif à maximiser)
Remarque : Le remplissage du 5ème conteneur peut être un objectif à minimiser
7) lancer un des 5 modèles linéaires selon les cas


merci encore pour tout.
1
Paradjanov Messages postés 57 Date d'inscription mardi 18 août 2020 Statut Membre Dernière intervention 25 octobre 2020 18
21 août 2020 à 23:32
Re,

J'ai vraiment une bride du fichier car depuis 5min, dès que je veux me servir d'opensolveur et ajouter une contrainte, il fait planter Excel.

Peut être que lorsque je sélectionne les cellulles il me met le nom du classeur avant la selection de cellule cela engendre trop de caractère et il ne peux plus les prendre en compte ? Mon pc ne chauffe pas et malgré que ce soit un pc portable, il est très récent et je l'ai payé 1 500 € (i7, 16go de ram, GTX 2070 enfin vraiment pas dégeu quoi..)


Et d'ailleurs, est-ce qu'on peut installer opensolveur comme solveurstudio pour qu'il soit directement dans Excel tout le temps au lieu de devoir le relancer depuis son dossier après chaque ouverture de fichier ?

Lien du fichier : https://www.cjoint.com/c/JHvvFVMTYu7

C'est ça quand tu parlais des différences instances = différents classeurs pour classé matière par matière et faire les modèle dans chaque onglet ?
Mais, même si je comprend le principe, il faut obtenir les résultats de cette manière "simple" pour ensuite superposer les résultats et ainsi obtenir le remplissage des différentes références/matière/température combiné ? Car le soucis c'est que cela n'a rien d'automatique s'il faut a chaque fois remettre dans chaque onglet les différentes références de la semaine.

question annexe : Comment cela se fait que mettre 2 " -- " entre le = et la fonction Somme permet de renvoyer un chiffre plutôt que Vrai ou Faux ? Car dans ta fonction pour le nombre de conteneur


Bon je fatigue et je ne comprend plus grande chose, surement pareil dans la rédaction de ce message d'ailleurs...

Je reprend ça demain matin à tête reposée.
1
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
Modifié le 22 août 2020 à 02:12
Bonsoir,

Le "moins moins" devant une valeur booléenne la transforme en valeur 0 ou 1.
Tu pourrais aussi mettre =1*maVarBooléenne, ça reviendrait au même.

Bon, pour que tu comprennes bien le principe de l'algo, voilà un fichier qui traite manuellement les 9 étapes de l'optimisation de l'atelier 1 sur la base de ton dernier fichier de prod.
J'ai mis les modèles en regard, du moins au début.
Tu comprendras peut-être mieux la juxtaposition en diagonale des solutions.

Je ne t'ai peut être pas assez dit que l'algo avait évolué et que maintenant on ne lance qu'un modèle (le BPP pour Bin Packing Problem) à chaque étape (une étape est une classe de température) en modifiant le modèle à chaque étape.
Naturellement toutes ces étapes seront automatisées par macro.... bientôt.

L'intérêt de BPP est qu'il évite d'itérer des modèles de remplissage sur des nombres croissants de conteneurs.
Il donne le nombre minimum de conteneurs directement (mais ne cherche pas à maximiser les remplissages).

Ce dernier point serait gênant sur des grosses instances mais comme avec les classes de températures les références sont hachées menu , l'optimisation de remplissage est quasi inutile.

J'ai modifié tes classes pour diminuer le nombre de conteneurs de 1.

Oui, on peut installer OpenSolver dans Excel.
Regarde dans Fichiers\options\compléments et référence opensolver.xlam

Pour ton dernier classeur, oui, le fait de créer des onglets pour chaque matière permet d'avoir plusieurs modèles dans un classeur (1 par feuille).
Mais regarde plutôt ce fichier https://www.cjoint.com/c/JHwahErxzxx
Il contient le dernier algo et me sembles plus pédagogique.
Il tient sur une feuille et donc les modèles sont à recréer à chaque étape mais tout ce côté fastidieux disparaîtra avec l’automatisation.

Cordialement
1