Pb informatique sur un assemblage de pièce
Discutez d'informatique ici !
-
g.pinson
- Messages: 2
- Enregistré le: 23 Juin 2006, 14:49
-
par g.pinson » 23 Juin 2006, 15:02
Bonjour,
Je viens vers vous car je n'arrive pas à trouver une solution à mon problème.
J'ai une hauteur imposée (par exemple 565 cm).
Je dispose de 3 boites de hauteur différentes 40, 30, 15 cm.
En empilant un certain nombre de boite de chaque format, je dois m'approcher de la limite inférieur ou égale de la hauteur imposée (565 cm).
x*40+y*30+z*15 doit tendre vers 565.
Dans mon exemple, il faut 13 boites de 40, 1 de 30 et 1 de 15.
Je dois résoudre ça en VBA sur excel.
Cordialement
Geoffroy PINSON
-
olivthill
- Membre Relatif
- Messages: 349
- Enregistré le: 21 Avr 2006, 17:17
-
par olivthill » 23 Juin 2006, 18:09
Voici une solution que j'ai testée et qui marche, mais qui n'est peut-être pas la plus performante, bien que le résultat soit quasiment instantanné avec la puissance des ordinateurs modernes et les données de l'exemple :
- Code: Tout sélectionner
Sub boites()
but = 565
b1 = 40
b2 = 30
b3 = 15
best_x = 0
best_y = 0
best_z = 0
best_total = 0
For x = 1 To but / b1
total = x * b1
For y = 1 To (but - total) / b2
total = x * b1 + y * b2
For z = 1 To (but - total) / b3
total = x * b1 + y * b2 + z * b3
If (total = but) Then
MsgBox ("Solution trouvée : x = " & x & ", y = " & y & ", z = " & z & ".")
Exit Sub
Else
If (total best_total) Then
best_x = x
best_y = y
best_z = z
best_total = total
End If
End If
Next z
Next y
Next x
MsgBox ("Meilleure solution approchante : " _
& best_x & "*" & b1 & "+" & best_y & "*" & b2 & "+" & best_z & "*" & b3 _
& "=" & best_x * b1 + best_y * b2 + best_z * b3)
End Sub
-
g.pinson
- Messages: 2
- Enregistré le: 23 Juin 2006, 14:49
-
par g.pinson » 24 Juin 2006, 14:23
Je te remercie pour ce code, il est au poils... L'evidence même qui n'y était pas. Je m'embarquais dans des modulo pour pas grand chose.
Merci
A bientot
-
Patastronch
- Membre Irrationnel
- Messages: 1345
- Enregistré le: 22 Aoû 2005, 23:53
-
par Patastronch » 05 Juil 2006, 19:27
En effet le code est assez bourrin, mais suffit amplement pour ce probleme.
En général ce genre de probleme se resolvent en le modélisant par un programme linéaire et en appliquant l'algorithme du simplex.
Mais pour un probleme de si petite taille avec aussi peu de contraintes, la force brute suffit largement.
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités