Pb informatique sur un assemblage de pièce

Discutez d'informatique ici !
g.pinson
Messages: 2
Enregistré le: 23 Juin 2006, 14:49

Pb informatique sur un assemblage de pièce

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

Merci mais..

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.

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite