Bonjour la communauté
J'ai une question sur le calepinage dans OPL. J'ai beau changer tous les paramètres je n'arrive à pas changer la proposition de calepinage qui ne me permet pas (je crois) d'optimiser mes chutes (longues).
Je poste la photo pour illustrer cette question.
Il me semble que le résultat de 2 planches débitées en 4xB et les deux dernières avec les 4 A (soit 3xA + 1A), laisse une chute plus importante que le calepinage proposé.
Bon j'ai essayée d'être claire, mais dites moi si je dois préciser.
Merci d'avance pour vos réponses
1 réponse
Ta remarque est justifiée. OCL utilise une méta-heuristique, une collection de stratégies pour résoudre le problème et choisi "la meilleure solution", pour calculer le calepinage 2D. L'algorithme reste cependant prévisible, dans la mesure où il livre toujours le même résultat sur n'importe quel ordinateur (rien n'est aléatoire, ni dans le temps, ni dans l'espace). Ces stratégies ont l'inconvénient d'être parfois trop gloutonnes, c'est-à-dire de vouloir remplir l'espace trop vite en passant à côté d'une solution qui pourrait être meilleure. La seule solution serait une recherche exhaustive de toutes les possibilités, mais ça exploserait nos ordinateurs assez vite et aucun utilisateur n'est prêt à attendre 24h que OCL aye fait son calepinage. On aurait pu implémenter un algorithme qui fait une recherche exhaustive pour un nombre de pièces < X, mais cela l'aurait rendu plus compliqué et que très rarement meilleur.
Pour ceux intéressé par la complexité, le problème du calepinage est NP-complet et même la vérification efficace d'une solution est un problème "exponentiel".
Pour le cas en 1D, j'ai utilisé une variante différente, d'ailleurs si tu configures tes planches en barre de section 200 x 26 avec 733 x 8 pièces et 827 x 4 pièces à placer dans une barre type de 3000, tu retrouveras la solution optimale que tu voulais obtenir, soit 2 barres avec les 8 pièces de 733, 1 barre avec 3 pièces de 827 et 1 barre avec une pièce de 827.
La variante la plus simple de ton problème est la suivante:
- 2 pièces de longeur 3
- 4 pièces de longeur 2
à placer dans une barre de longueur 7. On trouvera facilement que le placement [3, 2, 2] et [3, 2, 2] n'a besoin que de 2 barres. Si on trie les pièces par ordre décroissant et on les place dans les barres, on trouvera [3, 3] et [2, 2, 2] et [2], donc 3 barres, 1 de trop.
Le problème du calepinage en 1D est également NP-complet (du moins sa variante de décision).
Donc oui, il y a certainement plein de cas où le calepinage d'OCL ne trouve pas la solution optimale en terme de panneau ou de barre. Il y a des algorithmes OpenSource qui trouvent de très bonnes solutions, mais ils sont souvent basés sur des recherches exhaustives en limitant le temps de recherche ou sur des recherches aléatoires. Le calepinage d'OCL n'est jamais enregistré dans le modèle, donc nous devons garantir qu'il soit toujours le même, en passant d'une croûte d'ordi à la fusée du joueur.
Pour suivre les réponses,
je me suis déjà confronté au problème, et je l'ai réglé manuellement (papier/crayon)
. Pareil. Mais je voulais quand même savoir si il y a moyen de le faire sur ocl