HELP!!! Problème complexe d'ordonnancement

hela_bouks Messages postés 18 Date d'inscription vendredi 24 février 2006 Statut Membre Dernière intervention 2 janvier 2008 - 31 déc. 2007 à 11:29
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 1 janv. 2008 à 10:21
    Bonjour,
J'explique mon probleme : j'ai 3 produit P1, P2, P3 à affecter sur 5 machines.
Chaque produit est divisé en opération, ce qui donne :
O11
O21
O31
O12
O22
O32
O13
O23
Le premier chiffre indique le numéro de l'operation et le deuxième le numéro du produit.
Bien sur, l'operation 1 passe toujours avant la 2 et la 2 avant la 3. Chaque operation est affectée aleatoirement à une machine.
Le but est de choisir une operation au hasard parmi cet ensemble et de verifier que :
1- qu'elle n'a pas encore été choisie auparavant
2 - que les operations qui la precedent ont deja été affectée à des machines (cad si le choix est O32, il faut verifier que O22 et O12 ont été préalablement traitées)

Ce serait mega génial si vous pouviez m'aider!!!!
Un grand merci

5 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
31 déc. 2007 à 12:05
Bonjour,

Je ne comprends pas la philosophie de ton truc !

je dirais :

pour chaque produit : une chaine 123
- tirage aléatoire d'une machine (sur une leste de 5 machines)
- tirage aléatoire d'un produit (sur une liste de 3 produits) - attribution du 1er caractère de la chaine et suppresion de ce caractère dans la chaine. Et si, après suppression (dernier caractère) la chaine et vide : suppression du produit dans la liste des produits.
0
hela_bouks Messages postés 18 Date d'inscription vendredi 24 février 2006 Statut Membre Dernière intervention 2 janvier 2008
31 déc. 2007 à 12:54
    En fait, à la base ce n'est pas trés compliqué,
Chaque produit doit passer par une machine, peu importe laquelle. Mais par exemple sur une même machine, le produit O32  ne peut pas passer avant O22, l'ordre doit être respecté!!!
Un autre exemple : On peut traiter O11 sur la machine 4 et O21 sur la machine 1 en parallère, ça ne pose pas de problème.
Ce qui me pose problème c'est comment respecter l'ordre de passage sur une machine donnée.
Si je peux donner plus d'explication, je suis à votre disposition.
Merci
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
31 déc. 2007 à 13:07
Bon,

1) j'ai maintenant bien compris ton truc
2) il s'agit là d'un problème simple et non "complexe"
3) je t'ai donné des indications suffisamment précises
4) je viens de mettre en oeuvre, sans problèmes, la "chose"
5) il s'agit manifestement là d'un exercice de cours et je n'ai dans ce cas absolument pas l'intention de le faire à ta place
6) la solution est moins dans le code VB que dans l'élaboration d'un mécanisme de pensée (comme toujours, d'ailleurs)
7) dans ce cas et en conclusion :
- une listbox comportant 3 articles : 1123 2123 3123, où le 1er caractère est l'identificateur du produit
- 5 listboxes vides au départ, représentant tes 5 machines et qui seront alimentées par les produits jusqu'à épuisement

Pour le reste : à toi de jouer (celà se fait en à peine quelques lignes de code... !). Je ne reviendrai ici que si tu nous montres un peu de code d'essai sur ces bases et celles que je t'ai montrées plus haut. Le tout est fort simple.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
1 janv. 2008 à 09:38
Allez ...

Un cadeau pour le jour de l'an, va...

Une listbox nommée List1, une listbox nommée List2 et un bouton de commande nommé Command1

Code :

Private Sub Form_Activate()
  Randomize Timer
End Sub



Private Sub Command1_Click()
  Dim nb As Integer, machine As Integer, produit As Integer, chaine As String
  List1.Clear
  List1.AddItem "1231"
  List1.AddItem "1232"
  List1.AddItem "1233"
  List2.Clear
  While List1.ListCount > 0
    nb = List1.ListCount
    produit = Int(nb * Rnd)
    machine = Int((5 * Rnd) + 1)
    chaine = List1.List(produit)
    List2.AddItem "machine " & machine & " : 0" & Left(chaine, 1) & Right(chaine, 1)
    List1.List(produit) = Mid(chaine, 2)
    If Len(List1.List(produit)) = 1 Then List1.RemoveItem produit
  Wend
  End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
1 janv. 2008 à 10:21
Une autre feinte est de traiter tes produits dans l'ordre et de leur attribuer aléatoirement une machine, tout simplement :

Exemple :

1 seule listbox nommée List1 et un bouton de commande Command1

code :

Private Sub Command2_Click()
 Randomize Timer
 Dim nbproduits As Integer, nbmachines As Integer, nbreferences As Integer
 nbproduits = 3
 nbmachines = 5
 nbreferences = 3
 List2.Clear
 Dim I As Integer, J As Integer
 For I = 1 To nbproduits
   For J = 1 To nbreferences
     List2.AddItem "machine " & Int((nbmachines * Rnd) + 1) & " : " & "0" & J & I
   Next
 Next I
End Sub

Tu remarqueras que tu peux faire varier à ta guise le nombre des machines, celui des produits et celui des références de chaque produit

Voilà ... tu découvres ainsi que le développement informatique est avant tout celui de sa propre pensée...
0
Rejoignez-nous