Bonjour,
J'ai le problème suivant :
j'ai une hauteur connu que je dois remplir et optimiser pour qu'elle soit entièrement rempli. Pour cela je dispose de 4 types d'éléments A,B,C chacun de ces éléments est un tableau(List) d'objets qui ont une hauteur, ces tableaux sont triés de manière décroissante, chaque hauteur de n'importe quel type est un multiple de 5 ex :
A(25,20,15,10) B(100,85,70,25,15) C(90,75,60,45,30)
il y a qq contraintes :
on doit toujours essayer de placer un et un seul A. Bien que ce type soit optionnel on essaie au max d'en placer 1
L'elément B est obligatoire (un et un seul) si pas d’élément B possible la combinaison ne peut être résolue , on arrete là
L'élément C est optionnel mais il peut y avoir pour finir la combinaison plusieurs éléments C.
On privilégie d'abord les grandes hauteurs
J'ai une tolérance de -5cm mais je dois toujours essayer de tomber juste
Je dois donc construire l'objet le plus optimiser possible (avoir rempli toute la hauteur connue )
quelque exemple attendu
pour une hauteur de :
60 -> A=15,B=15,C=30
95 -> A=25,B=70
220 -> A=15,B=85,C=2*60
Voilà ce que je fait mais je ne suis pas certain que cela soit très optimisé, c'est pour cela que j'ai besion de vos lumières ;-) (pour info c'est ecrit en PHP)
-Je choisie arbitrairement la A la plus grande A=25
- J'itere sur B
- pour chaque elément de B je verifie si A+B < H (si > j'essais sans le A si toujours > impossible décomposition )
******** si oui j'essaie de placer un C de manière a ce que A+B+C(n fois) <= h si le reste est divisible par 5 je considère que je peux mieux faire
*********** je contrains donc la prochaine boucle a essayer avec le A juste au dessous de 25, je passe a 20 et je recommence avec touts les B ainsi de suite jusqu'a épuisement de tous les A , j'essais une nouvelle boucle sans les A
si le resultat est inferieur a H et qu'il ne peut pas tomber juste je regarde ma tolérance si je suis dans les clous (5cm) c'est Ok si je suis au dessus : impossible décomposition
Y aurait'il une approche plus mathématique a ce problème ? je ne suis pas un grand matheux mais avec des efforts j'arrives a suivre.
Merci a celles et a ceux qui prendront un peu de leur temps.
Partager