begin process at 2012 02 17 12:01:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Divers

 > 

General

 > 

Probleme d'ordonnancement


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Probleme d'ordonnancement

mercredi 2 janvier 2008 à 12:06:54 | Probleme d'ordonnancement

hela_bouks

    Bonjour,
j'ai un fichier donnees_init que j'ai transféré dans un tableau donnees_init
Nom    M1      M2       M3    M4     M5
O11    1.50    9.50    3.12    4.91    4.50
O21    3.00    4.50    1.75    4.70    4.50
O31    4.50    7.00    1.75    4.50    3.75
O12    1.50    4.50    4.50    3.25    6.37
O22    1.50    8.25    4.91    4.50    3.75
O32    4.50    4.50    1.75    2.00    4.50
O13    1.50    4.50    4.91    3.25    3.00
O23    4.50    9.50    1.75    4.50    3.75
Oij représente la ième opération d'un produit j. Le passage des opérations Oij sur les machines doit se faire dans l'ordre, par exemple sur la machine 1, O12 doit passer obligatoirement avant O22, ...
J'ai défini deux structures :
Public Type position
       nom As String
       mach As Variant
       td_eff As Double
       tf_eff As Double
End Type


Public Type individu
        liste(nbre_op - 1) As position
        cmax As Double
        vit(nbre_op - 1) As Double
End Type

Le but est de creer une population d'individus respectant les contraintes d'ordre.

Voici ce que j'ai commencé à faire

Private Sub cmdcreer_Click()
Dim disp_mach(1 To nbre_mach) As Variant
Dim m, n, op, pr, op1, pr1 As Integer
Dim i, j, k As Integer
Dim nom1 As String
Dim nom2 As String
Dim nom3 As String
Dim nom4 As String
Dim pop1(nbre_pop) As individu
Dim pop2(nbre_pop) As individu
Dim pop3(nbre_pop) As individu
Dim tab_int(1) As Variant
Dim tab_int1(1) As Variant
Dim c1, c2, c3, c4, c5, c6, c As Integer
Dim tab_max(nbre_mach - 1) As Integer
Dim t1(nbre_job - 1) As Integer
'Dim tab_m1(nbre_mach - 1) As Integer
'Dim tab_m2(nbre_mach - 1) As Integer
'Dim tab_m3(nbre_mach - 1) As Integer
'Dim tab_m4(nbre_mach - 1) As Integer
'Dim tab_m5(nbre_mach - 1) As Integer


''''' Creation aléatoire de la population initiale '''''''''


For p = 0 To nbre_pop - 1

    For k = 1 To nbre_mach
        disp_mach(k) = 0
    Next k

    For i = 0 To nbre_op - 1
        For j = 0 To i
            rep = 0
            Randomize Timer
            n = Int((nbre_op * Rnd) + 1)
            m = Int((nbre_mach * Rnd) + 1)
            nom1 = donnees_init(n - 1, 0)
            nom2 = Left(nom1, 2)
            pr = Val(Right(nom1, 1))
            op = Val(Right(nom2, 1))

            For l = 0 To i
                nom3 = population_init(p).liste(l).nom
                nom4 = Left(nom3, 2)
                pr1 = Val(Right(nom3, 1))
                op1 = Val(Right(nom2, 1))
                If nom1 = nom3 Then
                    rep = 1
                End If
                If pr1 = pr Then
                    If op1 < op Then
                        m1 = Int((nbre_mach * Rnd) + 1)
                        If m1 = m And m1 < 5 Then
                            m1 = m1 + 1
                            m = m1
                        End If
                    End If
                End If
            Next l
            If rep = 0 Then
                Exit For
            End If
        Next j
        population_init(p).liste(i).nom = nom1
        population_init(p).liste(i).mach = m
        population_init(p).liste(i).td_eff = disp_mach(m)
        population_init(p).liste(i).tf_eff = population_init(p).liste(i).td_eff + donnees_init(j, m)
        disp_mach(m) = population_init(p).liste(i).tf_eff
    Next i
Next p

'''''''''' Determination du Cmax ''''''''''

For i = 0 To nbre_pop - 1
    Max = population_init(i).liste(0).tf_eff
    max1 = 0
    max2 = 0
    max3 = 0
    max4 = 0
    max5 = 0
   
    For j = 0 To nbre_op - 1
        If population_init(i).liste(j).mach = 1 Then
            c1 = population_init(i).liste(j).tf_eff
            If c1 > max1 Then
                max1 = c1
            End If
        ElseIf population_init(i).liste(j).mach = 2 Then
                c2 = population_init(i).liste(j).tf_eff
                If c2 > max2 Then
                    max2 = c2
                End If
           
        ElseIf population_init(i).liste(j).mach = 3 Then
                c3 = population_init(i).liste(j).tf_eff
                If c3 > max3 Then
                    max3 = c3
                End If
           
        ElseIf population_init(i).liste(j).mach = 4 Then
                c4 = population_init(i).liste(j).tf_eff
                If c4 > max4 Then
                    max4 = c4
                End If
           
        ElseIf population_init(i).liste(j).mach = 5 Then
                c5 = population_init(i).liste(j).tf_eff
                If c5 > max5 Then
                    max5 = c5
                End If
        End If
      
    Next j
   
tab_max(0) = max1
tab_max(1) = max2
tab_max(2) = max3
tab_max(3) = max4
tab_max(4) = max5
tab_max(5) = max6

c = 0
For k = 0 To nbre_mach - 1
    If tab_max(k) > c Then
        c = tab_max(k)
    End If
Next k

population_init(i).cmax = c

Next i


''''' Enregistrement de la population initiale ''''''''''
f2 = FreeFile
Open App.Path + "\population initiale.txt" For Output As #f2
For i = 0 To nbre_pop - 1
    Print #f2, "individu"; i
    For j = 0 To nbre_op - 1
    Print #f2, population_init(i).liste(j).nom, population_init(i).liste(j).mach, population_init(i).liste(j).td_eff, population_init(i).liste(j).tf_eff
    Next j
    Print #f2, "Cmax "; population_init(i).cmax
    Print #f2, " "
Next i
Close f2

End Sub

Je ne suis pas trés convaincue de mon raisonnement, un peu d'aide serait la bienvenue.
Merci
jeudi 3 janvier 2008 à 12:21:13 | Re : Probleme d'ordonnancement

jean_marc_n2

Hello,

c'est un cas typique de problème qui se résolvent très naturellement avec les algorithmes génétiques.
Je te conseille la lecture attentive de cet article, qui contient tout ce qu'il fait pour faire une implémentation simple de cette méthode:
[ Lien ]

Bon codage;

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: [ Lien ]


Cette discussion est classée dans : liste, init, nbre, population, mach


Répondre à ce message

Sujets en rapport avec ce message

Changer dans une liste de nbre un "." en ",". [ par napab ] Bonjour,je voudrai une routine qui puisse changer le point séparateur des unités en virgule.exemple32.3247 en 32,32473333.2322 en 333 ou trouver la liste des erreurs api? [ par kakoujade ] Je cherche la signification de l'erreur 274 sur l'api MciSendCommand.Je ne m'en sors pas , aidez moi SVP!!!Merci. Recup de donnees de liste modifiable ss access [ par tema ] Salut a tous, voila g un peti prob, en fait je voudrais recuperer la valeur contenue dans une zone de liste modifiable pour pouvoir ouvrir un formulai Liste des codes d'erruers [ par xavier77 ] salut à tous.........J'aimerai savoir s'il existe un moyen de retrouver la description d'une erreur en fonction de son code car une fois un projet com liste des icones sur le bureau de windows [ par martinkk ] je voudrais avoir la liste des icones sur le bureau dans une table ou un tableau.je voudrais aussi avoir la liste des lecteurs du reseau dans une tabl liste / vector [ par Dorgendubal ] Bonjour,y a t'il un moyen de créer une liste d'objets (que ce soit des Strings, Integer ou quelconque objets) sans savoir au préalable combien d'objet javascript pour faire comme dans vb [ par thrakkazz2000 ] bonjour,Dans une feuille asp j'ai deux listes déroulantes avec chacune 15 lignes.je voudrais que lorsque je sélectionne le n ième élément de ma premiè Liste des pilotes DSN [ par JeanFrancis68 ] COmment récupérer la liste des DSN utilisateurs sur ma machine ???Merci d'avance. valeur selectionnée d'une liste box [ par spivetea ] bjr,g une liste box qui contient plusieurs valeurs, et je voudrai récupérer la valeur selectionnée lorsque je clique dessus.g essayé "nom_de_ma_liste. Liste Ascii [ par greg13 ] gregJe cherche une liste complète des codes asciimerci


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,108 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales