IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Comment implémenter dijkstra


Sujet :

VB.NET

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut Comment implémenter dijkstra
    Bonjour,

    J'ai un fichier excel structuré comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Nom     Description    lien    coût    Type
    A         Certains         B        1        1
    A         ont               C         0        1
    A         une               D         4        2
    A         description     E         3        3
    B                             A         2        1
    C         d'autre           A        0        1
    D         pas               A         4        2
    E                             D         1        1
    E                             A         2        3
    D                             E         1        1
    E                             F         0        1
    Le nom c'est le nom La description c'est superficiel. Certain en ont, d'autre pas. Le lien c'est un des noeuds rejoignables. L'ajout d'un nouveau noeud rejoignable se fait par convention à la fin alors parfois certains noms n'ont pas leurs liens à la suite. Le coût est le coût du déplacement. Le coût de A vers B peut être différent de celui de B vers A. Le coût peut être 0 mais ne sera jamais négatif. Il est aussi possible d'avoir des sens unique. Le type donne la force d'un cehmin. Il n'est que descriptif et n'a pas de réel impacte pour le moment mais le conserver est bien pour plus tard.

    Je voudrais trouver le chemin le plus court entre 2 points. En entrée, on demande le nom du point de départ et de celui du point d'arrivée. La sortie serait par exemple pour du point A au point F :

    Chemin le plus court :
    A à E coût 3 type 3
    E à F coût 0 type 1
    Coût total : 3

    Mes connaissances de bases et poussiéreuses sur la théorie des graph me disent d'utiliser l'algorythme de dijkstra. Mes connaissances en VB sont proche du null. J'en suis encore à essayer d'intégrer mon fichier excel dans mon formulaire sous forme de base de donnée. Je n'ai aucune idée de comment programmer l'algorithme qui fera le travail que je veux. Quelqu'un peut m'aider?

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Si ceci peut aider ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Initialisations
    // DistFromA : Coût du chemin mini de A (point de départ) à chaque point 
    Pour tous les points i { DistFromA[i]=MaxValue; }
    DistFromA[a]=0 ;
    AddListe(a) ; // Liste : liste des points traités ou à traiter
    ListIndex=0 ; // Point traités entre 0 et ListIndex-1, 
                  // Points à traiter entre ListIndex et List.Count
    DistAB=-1 ;  // Résultat final (DistAB =-1 ==> pas encore de chemin AB trouvé)
    Tant que (DistAB=-1 et ListIndex<List.count) 
    { 
        si (Liste[ListeIndex]=b) DistAB=DistFromA[b] ;
       sinon { Traiter(ListeIndex) ; ListIndex=ListIndex+1  ; }
    }
    Si (DistAB=-1) Write("pas de chemin entre A et B") ;
    sinon ("Cout mini entre A et B="+DistAB) ;
     
    procedure AddListe(k)
    {
    // insérer k dans Liste[] entre ListeIndex+1 et Liste.Count 
    // de façon à ce que DistFromA[Liste[k]] soit compris entre 
    // DistFromA[Liste[i-1]] et DistFromA[Liste[i+1]]
    ... 
    }
     
    procedure Traiter(i)
    Pour tous les points j reliés à i 
    {
       si (DistFromA[j]<DistFromA[j]+Dist(i,j))
       {
           DistFromA[j]=DistFromA[j]+Dist(i,j);
           AddListe(j) ;
        }
    }

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    Plus ou moins. Je comprend la logique mais je nn'arrive pas à mettre ça dans vb. Comment créer la liste des points par exemple?

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Pour la liste de points, tu peux faire dans un premier temps une "List" d'int ou un tableau d'int et pour insérer un élément en position n, faire un décalage " à droite" de tous les éléments d'indice supérieur ou égal à n.

    Dans un 2ème temps, tu pourras remplacer la gestion en tableaux(ou List) par une liste chainée, qui optimise l'insertion.

    je nn'arrive pas à mettre ça dans vb
    Je ne maîtrise pas la syntaxe vb , mais les membres du forum pourront facilement t'aider à traduire l'algorithme de mon post précédent .

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Par défaut
    Bonjour

    L'utilisation d'une base de donnée à cartouche spatiale comme postgis vous permettra d'utiliser des algorithmes du plus court chemin. Comme celui que vous évoquez. En plus postgis est accessible via VB.Net au travers de npgSQl.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    Liste chaînée?

    base de donnée à cartouche spatiale?

    Je part de plus loin que je pensais...

  7. #7
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Une liste simplement chaînée, c'est tout simple!
    Voir dans wikipédia : http://fr.wikipedia.org/wiki/Liste_cha%C3%AEn%C3%A9e

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Par défaut
    Bonjour,

    Le parcours d'un graphe (c'est à dire des noeuds ayant plusieurs arrivées et plusieurs départs) est un peu plus complexe qu'une simple liste chaînée, et la problématique du commis voyageur ou du plus court chemin est complexe.

    Pour ce faire :

    http://www.postgis.fr/node/360

    A+

  9. #9
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Citation Envoyé par Geo2A Voir le message
    Le parcours d'un graphe (c'est à dire des noeuds ayant plusieurs arrivées et plusieurs départs) est un peu plus complexe qu'une simple liste chaînée.
    Oui, l'algorithme du plus court chemin est dans ma première réponse.

    La liste chainée n'est qu'une option pour l'implémentation d'une des fonctions de cet algo.

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Par défaut
    Bonjour,

    La liste chainée n'est qu'une option pour l'implémentation d'une des fonctions de cet algo.
    Vous m'avez devancé de quelques minutes, je voulais justement mettre un petit correctif, car à la relecture je me suis rendu compte que j'avais fais un raccourci, entre l'algo et la structure de donnée. Mes excuses.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    Tout ça ne me dit pas plus comment coder ça... Je fais comment par exemple pour prendre mon tableau et le mettre dans un format de matrice comme l'algorythme donné semble vouloir utiliser?

  12. #12
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut algo djiskra,plus court chemin,shortestpath,floydwarshall
    bonjour chackadar,
    c'est pas plutot l'algo FloydMarshall qu'il te faut. L'algo FloydMarshall est une variante de Djiskra mais c'est un monstre de calcul car il permet de :
    -trouver tous chemins pour tous les couples sommets de ton graphe (nom,lien).
    -tenir compte du fait que tu as un graphe oriente(sens des liens).
    Ensuite c'est une problematique non triviale que tu pose c'est celle du stockage des donnees dans un fichier.

    Eh bien moi j'utilise la librairie QuickGraph de codeplex (elle-meme adaptation pour .net de la librairie BCL en c++).I y a tous les algorithmes des graphes.

    maintenant je t'envoie le code ci-apres en vb.net qui utillise la librairie QuickGaph avec l'algo FloydMarshal et microsofot office 2003
    1/on lit les donnees à partir d'un classeur excel (feuille 1)
    2/on stocke les donnees en memoire dans une liste de lien( de la classe lien)
    3/on charge l'objet "graph" avec les donnees de la liste(nom,lien,cout)
    4/on appelle floydmarshall sur ce "graph"
    5/on recupere chaque chemin avec la methode TryGetPath
    6/on recupere le cout de chaque chemin avec la methode TryGetDistance
    Les resultat sont affiches dans 2 textbox.
    Nota-Bene:le projet doit etre cree en .net framework 3.5

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
     
     
    'projet principal frmFloydWarshal
    '--------------------------
    '1 AJOUT REFERENCE À  :
    '- QuickGraph.dll , QuickGraph.Glee.dll
    '- Microsot Excel 11.0 Object Library(office 2003) ou bien
    '- Microsot Excel 12.0 Object Library(office 2007) 
    '2 AJOUT CONTROLES :
    '-  2 TextBox(pour resultats),1 Button(pour ouvrir classeur)
    '3 GENERATION DU PROJET:
    '- dans projet frmFloydWarshal ajouter reference->projets>InterFacevb->0k
    '6- GENERER LA SOLUTION
     
    Option Explicit On
    Option Compare Text
    Imports System
    Imports System.Globalization
    Imports System.Threading
    Imports System.Windows
    Imports System.Collections
    Imports System.Drawing
    'imports pour MS Office Excel 2003
    Imports Microsoft.Office.Interop
    'imports pour la librairie des graphes(QuickGraph)
    Imports QuickGraph
    Imports Algo_Extension = QuickGraph.Algorithms.AlgorithmExtensions
    Imports FLOYDWARSHAL = QuickGraph.Algorithms.ShortestPath.FloydWarshallAllShortestPathAlgorithm(Of String, QuickGraph.Edge(Of String))
    'imports pour les methodes d'extensions 
    Imports QuickGraph.Glee
    'imports pour projet interfaceVB(classes Lien )
    Imports InterfaceVB
     
    Public Class frmFloydWarshal
     
        'objets donnees liens de MS Excel
        '--------------------------------------------------
        Public listeLiens As List(Of Lien) = New List(Of Lien)
        Public objLien As Lien
     
        'Lib QuickGraph (Partie graphe)
        '------------------------------
        'objet public graphe d'adjacence simple 
        Public objGraph As AdjacencyGraph(Of String, Edge(Of String))
        'objet un lien  du graphe
        Dim lienGraphe As QuickGraph.Edge(Of String)
        'objet "cout d'un lien"  de type Dictionnaire (lienGraphe,Cout)
        Dim coutLien As Dictionary(Of Edge(Of String), Double)
        'objet delegue "fonction cout lien"  (methode d'aide bibliotheque)
        Dim FNCout As Func(Of Edge(Of String), Double)
        ' objet Algorithme "FloydWarshal"
        Public objFloydWarshall As FLOYDWARSHAL
     
        'Objet classeur MS Excel 2003
        '----------------------------
        Dim appExcel As Excel.Application
     
     
        Public Sub New()
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent()
        End Sub
        'Recherche le fichier excel contenant les arcs du graphe
        Private Sub btnOuvreFichArcs_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOuvreFichLiens.Click
            Dim nomFichierLiens As String = ""
            Dim dlgOuvreFichier As OpenFileDialog = New OpenFileDialog
            dlgOuvreFichier.Filter = "Fichier Arcs(*.xls)|*.xls"
            If dlgOuvreFichier.ShowDialog = Forms.DialogResult.OK Then
                nomFichierLiens = dlgOuvreFichier.FileName
                If Len(nomFichierLiens) = 0 Then
                    MessageBox.Show("entrer un nom de fichier svp...")
                    Exit Sub
                Else
                    'Si fichier excel trouve
                    Call LitFichierGraphe(nomFichierLiens)
                    Call RemplitGraphe()
                    Call demarreFloydWarshal()
                End If
            End If
     
        End Sub
        'Lit le fichier excel et charge liens(arcs) du graphe
        Private Sub LitFichierGraphe(ByVal nomFichierLiens As String)
            Dim nbLig As Integer = 12 'limite à 12 lignes
            Dim nbCol As Integer = 5  'limite à 5 colonnes
     
            'ferme toute application excel en cours
            If appExcel IsNot Nothing Then
                appExcel.Quit()
            End If
            Try
                Dim appExcel As Excel.Application = New Excel.Application
                appExcel.Visible = True
                Dim monClasseur As Excel.Workbook = appExcel.Workbooks.Open(nomFichierLiens)
                Dim maFeuille As Excel.Worksheet = monClasseur.Worksheets(1)
                For I As Integer = 2 To nbLig
                    objLien = New Lien
                    For J As Integer = 1 To nbCol
                        Select Case J
                            Case 1
                                objLien.sommetNom = CType(maFeuille.Cells(I, J).value, String)
                            Case 2
                                objLien.Description = CType(maFeuille.Cells(I, J).value, String)
                            Case 3
                                objLien.sommetLien = CType(maFeuille.Cells(I, J).value, String)
                            Case 4
                                objLien.Cout = CType(maFeuille.Cells(I, J).value, Double)
                            Case 5
                                objLien.monType = CType(maFeuille.Cells(I, J).value, String)
                        End Select
                    Next
                    'ajout à liste liens
                    listeLiens.Add(objLien)
                Next
            Catch ex As Exception
                MessageBox.Show(ex.Message)
                If appExcel IsNot Nothing Then
                    appExcel.Quit()
                End If
     
            End Try
     
        End Sub
        'Remplit(populate) le graphe avec les donnes liens
        Private Sub RemplitGraphe()
            'parcourt liste des liens  
            'Ajoute Sommets et Liens au graphe
            objGraph = New AdjacencyGraph(Of String, Edge(Of String))
            coutLien = New Dictionary(Of Edge(Of String), Double)(objGraph.EdgeCount)
     
            For Each objLien As Lien In listeLiens
                lienGraphe = New QuickGraph.Edge(Of String)(objLien.sommetNom, objLien.sommetLien)
                objGraph.AddVerticesAndEdge(lienGraphe)
                'Ajoute "le cout du lien" au Dictionnaire "Cout Lien"
                coutLien.Add(lienGraphe, Double.Parse(objLien.Cout))
            Next
     
            'Assigne à la fonction "FNCout" delegue 
            'le dictionnaire "CoutLien" 
            FNCout = Algo_Extension.GetIndexer(coutLien)
        End Sub
        'executeFloydWarshal
        Private Sub demarreFloydWarshal()
            'Initialise  Algo FLOYDWARSHAL
            objFloydWarshall = New FLOYDWARSHAL(objGraph, FNCout)
            'Execute Algo "FLOYDWARSHALL" 
            objFloydWarshall.Compute()
            'Affiche les chemins et couts dans TextBox
            Call AfficheChemin()
        End Sub
        'Affiche les chemins et couts  dans TextBox.
        Private Sub AfficheChemin()
            txtListeSommet.ForeColor = System.Drawing.Color.DarkOliveGreen
            txtListeSommet.Font = New Font("courier new", 10, FontStyle.Bold)
     
            'compte  sommets(ou noeuds) du "graphe " 
            txtListeSommet.Text = "nombre Sommets :" & objGraph.Vertices.Count.ToString & vbCrLf & vbCrLf
     
            'compte liens (ou arcs) du "graphe " 
            txtListeSommet.Text = txtListeSommet.Text & "nombre Liens :" & objGraph.Edges.Count.ToString & vbCrLf & vbCrLf
     
     
            'Retrouve le cout chemin avec fonction TryGetDistance
            'Retrouve les liens chemin avec fonction TryGetPath
            txtChemin.Text = ""
            Dim objCoutChemin As Double = 0.0
            Dim objChemin As IEnumerable(Of QuickGraph.Edge(Of String)) = Nothing
            For Each objSource In objGraph.Vertices
                For Each objDestination In objGraph.Vertices
                    's'il ya  un chemin entre Source et Destination 
                    'liste le nom chemin et cout
                    If objFloydWarshall.TryGetDistance(objSource, objDestination, objCoutChemin) Then
                        txtChemin.Text = txtChemin.Text & _
                        "chemin de : " & objSource & " -> " & objDestination & " Cout: " & objCoutChemin.ToString & vbCrLf
                    End If
                    'liste les liens du chemin
                    If objFloydWarshall.TryGetPath(objSource, objDestination, objChemin) Then
                        For Each objLienGraphe In objChemin
                            txtChemin.Text = txtChemin.Text & objLienGraphe.Source & " -" & objLienGraphe.Target & vbCrLf
                        Next
                    End If
                    txtChemin.Text = txtChemin.Text & " --------- " & vbCrLf
                Next 'au chemin suivant
            Next
        End Sub
     
     End Class
     
    'projet InterFacevb  contient la Classe Lien
    '------------------
    'classe Lien sert à stocker les liens(arcs) du fichier excel 
    Public Class Lien
        Public sommetNom, sommetLien As String
        Public Description, monType As String
        Public Cout As Double ' quickgraph n'accepte le type integer
     
        Public Sub New()
            Me.sommetNom = ""
            Me.sommetLien = ""
            Me.Description = "Neant"
            Me.Cout = 0.0
            Me.monType = ""
        End Sub
    End Class
    piece jointes:
    -------------
    le fichier zip de la librairie QuickGraph version .Net FrameWork 3.5
    Disponible en opensource au site Microsoft codeplex ici
    http://www.google.fr/url?sa=t&source...71p-A9JzSNi2rg

    bon code ...(je ne sais pas pourquoi ton pseudo me rappelle nabuchdonosor le perse,en arabe bakhtanasar,en hebreu balthazar)....
    bonne soiree..

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    Merci pour ce bout de code. Je suis un peu débordé en ce momment mais je vais regarder ça en fin de semiane.

    J'ai fait un cours d'initiaiton au vb en 2008. Quand on m'a dit que je pourrais être utile en faisant un petit logiciel pour trouver le mielleur chemin entre 2 points, j'ai sauté de joie. Mon cours sur la théorie des graph date de 2005. C'est très poussiéreux. Quand on m'a préésenté le projet, dijkstra est le premier mot qui m,est venu à l'esprit.

    Est-ce que ton code tient conte du format de mon fichier de donnée comme je l'ai exposés?

    Le projet se précise plus. Une 6e colone a vu le jour. La colonne mot de pass. Si le type =3 et que la colone mot de pass contient quelque chose, alors il faut aussi afficher le mot de pass. Si le type = 3 et qu'il n'y a pas de mot de pass, alors le coût est fixé à 999. Pour ce qui est des type, des mots seraient utilisés à la place des chiffres. 1 = aller, 2 = entrer et 3 = guilde. Ton code reste toujours fonctionnel et colle à la situation?

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    Citation Envoyé par MABROUKI Voir le message
    piece jointes:
    -------------
    le fichier zip de la librairie QuickGraph version .Net FrameWork 3.5
    Disponible en opensource au site Microsoft codeplex ici
    http://www.google.fr/url?sa=t&source...71p-A9JzSNi2rg

    bon code ...(je ne sais pas pourquoi ton pseudo me rappelle nabuchdonosor le perse,en arabe bakhtanasar,en hebreu balthazar)....
    bonne soiree..
    J'arrive sur la page d'accueil du site. J'imagine que je vais une recherche de QuickGraph? Si oui, le premier résultat trouvé ne possède pas de téléchargement dans la section download. À la place ils parlent d'un machin du genre nuPack qu'il faudrait utiliser. Quand on veut téléchanger ce machin en cliquant sur le lien, l'extention du vichier est .vsix. Cela ne me dit rien tout comme mon ordi qui ne sait pas quoi uliser pour l'ouvrir... Ais-je fait quelque chose de pas correcte?

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    Un autre détail vient de me poper à l'esprit. Dans mon cours, il a été dit quelque chose du genre que nos programmes ne marcheraient que sur des odrinateurs qui ont vb d'installé dessus parce que si non, l'ordi n'aura pas les librairies nécessaire à l'excution du programme.

    Est-ce que j'ai une bonne mémoire? Si oui, il y a un moyen de solutionner ce problème pour que le .exe soit exécutable sur tout ordi?

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    Bon, j'ai le .Net FrameWork 3.5

    Pour avoir quickgraph, je dois avoir nuget et nuget demande visual studio 2010 et je n'ai que le 2008... Alors je fais quoi?

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    Merci tout le monde. J'ai fini par réussir à me débrouiller assez pour trouver quickgraph ailleur et pour corriger le code donné pour coller à mes besoins. "Tout" est parfait maintenant... Ou presque... Il me reste le plus dure : faire jolie!

  18. #18
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut ALGO DJISKRA,FloydWarshall
    bonjour chackadar,
    voila j'ai oublie de t'envoyer le fichier excel excuse-moi .
    ci-joint le fichier excel

    maintenant dans le principe du code que je t'ai envoye
    /la colonne Type est deja gere comme un texte
    /le rajout d'une 6eme colonne ne pose aucun probleme
    -il y a lieu de modifier la classe lien et rajouter un champ motPasse as string
    -il y a lieu d'inclure un Case 6 dans la procedure LitFichierGraphe pour lire ce champ et faire un test si ce champ est vide mettre objLien.Cout=999.0

    /pour associer un champ motPasse à chaque arc de ton graphe il suffit de declarer un dictionnaire auxiliaire de stockage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    dim motPasseLien as Dictionary(Of String,String)
     
    ' dans la procedure RemplitGraphe tu ajoute chaque champ mot de passe au nouveau dico
     
    motPasseLien.Add(lienGraphe, objLien.motPasse)
    ' dans la procedure AfficheChemin 
        'liste les liens du chemin
        If objFloydWarshall.TryGetPath(objSource, objDestination, objChemin) Then
             For Each objLienGraphe In objChemin
               'rajoute ceci
                Dim chaine As String
                motPasse.TryGet(objLienGraphe,chaine)    
                txtChemin.Text = txtChemin.Text & objLienGraphe.Source & " -" & objLienGraphe.Target &  "-" chaine  & vbCrLf
             Next
        End If
    Enfin j'attire ton attention sur 2 choses:
    -l'algo dans son principe ne travaille qu'avec les couts qui sont des invariants du probleme,il n'est pas possible de modifier la fonction interne de cout.
    -il est possible de visualiser le graphe avec les chemins ,a l'aide du controle graphique MS GLEE qui est dans la librairie QuickGraph.
    Si tu as besoin du code fais moi signe
    bonne soire.........

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    Citation Envoyé par MABROUKI Voir le message
    bonjour chackadar,
    voila j'ai oublie de t'envoyer le fichier excel excuse-moi .
    ci-joint le fichier excel

    maintenant dans le principe du code que je t'ai envoye
    /la colonne Type est deja gere comme un texte
    /le rajout d'une 6eme colonne ne pose aucun probleme
    -il y a lieu de modifier la classe lien et rajouter un champ motPasse as string
    -il y a lieu d'inclure un Case 6 dans la procedure LitFichierGraphe pour lire ce champ et faire un test si ce champ est vide mettre objLien.Cout=999.0

    /pour associer un champ motPasse à chaque arc de ton graphe il suffit de declarer un dictionnaire auxiliaire de stockage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    dim motPasseLien as Dictionary(Of String,String)
     
    ' dans la procedure RemplitGraphe tu ajoute chaque champ mot de passe au nouveau dico
     
    motPasseLien.Add(lienGraphe, objLien.motPasse)
    ' dans la procedure AfficheChemin 
        'liste les liens du chemin
        If objFloydWarshall.TryGetPath(objSource, objDestination, objChemin) Then
             For Each objLienGraphe In objChemin
               'rajoute ceci
                Dim chaine As String
                motPasse.TryGet(objLienGraphe,chaine)    
                txtChemin.Text = txtChemin.Text & objLienGraphe.Source & " -" & objLienGraphe.Target &  "-" chaine  & vbCrLf
             Next
        End If
    Enfin j'attire ton attention sur 2 choses:
    -l'algo dans son principe ne travaille qu'avec les couts qui sont des invariants du probleme,il n'est pas possible de modifier la fonction interne de cout.
    -il est possible de visualiser le graphe avec les chemins ,a l'aide du controle graphique MS GLEE qui est dans la librairie QuickGraph.
    Si tu as besoin du code fais moi signe
    bonne soire.........
    Il y a un léger problème... Tout marche bien chez nous et plusieurs utilisateurs mais chez certain, ça ne marche pas. Le message d'erreur est en pj
    Images attachées Images attachées  

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 14
    Par défaut
    Il y aurait peut-être un petit détail supplémentaire. Le fichier actuel fait 324 lignes et est appellé à changer régulièrement. J'ai donc ajouter un champ texte pour entrer le nombre de ligne actuelle du fichier mais ce n'est pas user friendly. Il y aurait un moyen de lire le fichier au complet peu importe le nombre de ligne?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment implémenter lemonldap?
    Par Aldo dans le forum Apache
    Réponses: 7
    Dernier message: 25/01/2007, 21h32
  2. [VB.Net]Comment implémenter un Simulateur de combats?
    Par stargatejojo dans le forum Windows Forms
    Réponses: 19
    Dernier message: 20/04/2006, 16h04
  3. Réponses: 4
    Dernier message: 07/04/2006, 18h08
  4. Réponses: 2
    Dernier message: 02/12/2005, 17h22
  5. Comment implémenter un Datawarehouse ?
    Par raslain dans le forum Alimentation
    Réponses: 2
    Dernier message: 20/10/2005, 11h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo