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

Réseau/Web Python Discussion :

Graphe aléatoire d'un réseau maillé


Sujet :

Réseau/Web Python

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 110
    Points : 51
    Points
    51
    Par défaut Graphe aléatoire d'un réseau maillé
    bonjour
    j'ai essayé de genérer un graphe aléatoire d'un réseau maillé telque il existe un lien entre deux noeuds lorsque distance(xi,xj)<=r
    avec r est transmission range
    j'ai essayé d'exécuter cet code mais j'ai l'erreur suivant
    There's an error in your program:
    expected an indented block .
    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
     
    # -*- coding: cp1252 -*-
    import random # pour tirer aléatoirement des nombres
    import Matrix as mat # pour les matrices
    import UserArray as ua # pour les matrices
    import math # fonction sqrt
    import PIL.Image as Im # pour les images
    import PIL.ImageDraw as Id # pour dessiner
    def construit_noeud(n, x =500, y = 500):
     l=[]
    for i in range(0,n):
    xx = x * random.random ()
    yy = y * random.random ()
    l.append ((xx,yy))
    return l
    def distance_noeud (l,i,j):
    """calcule la distance entre deux villes i et j de la liste l"""
    x = l [i][0] - l [j][0]
    y = l [i][1] - l [j][1]
    d=math.sqrt (float (x*x+y*y))
    return d
    def construit_arete (l,part = 0.15,r=20):
    """tire aléatoirement part * len (l) arêtes et construit la matrice
    d'adjacence"""
    nb = len (l)
    m = mat.Matrix ( [ 0 for i in range(0,nb) ]) # crée un vecteur de nb zéros
    m = ua.transpose (m) * m # effectue une multiplication du vecteur
    # précédent avec son vecteur transposé
    # pour obtenir une matrice carrée nulle
    are = int (part * nb * nb)
    while are > 0:
    i = random.randint (0,nb-1)
    j = random.randint (0,nb-1)
    if (distance_ville (l,i,j)-r )>0
     m [i,j] =0
     else m[i][j]=1
    are -= 1
    return m
    def dessin_noeud_arete (l,m,chemin):
    """dessine la ville et les routes dans une image"""
    mx, my = 0,0
    for i in l:
    mx = max (mx, i [0])
    my = max (my, i [1])
    mx += 25
    my += 25
    mx, my = int (mx), int (my)
    im = Im.new ("RGB", (mx, my), (255,255,255)) # création d'une image blanche
    draw = Id.Draw(im)
    # dessin des noeuds
    for i in l:
    j = (int (i [0]), int (i[1]))
    j2 = (j [0] + 10, j [1] + 10)
    draw.ellipse ((j,j2), fill = (0,0,0))
    # dessin des arêtes
    for i in range (0,len(l)):
    for j in range (0,len(l)):
    if m [i,j] > 0:
    a = (int (l [i][0]+5), int (l [i][1]+5))
    b = (int (l [j][0]+5), int (l [j][1]+5))
    draw.line ((a,b),fill=(255,0,0))
    # dessin des noeuds de départ et d'arrivée
    v1 = chemin [0]
    v2 = chemin [ len (chemin)-1]
    a = (int (l [v1][0]), int (l [v1][1]))
    b = (int (l [v1][0]+10), int (l [v1][1]+10))
    draw.ellipse ((a,b), fill = (0,255,0))
    a = (int (l [v2][0]), int (l [v2][1]))
    b = (int (l [v2][0]+10), int (l [v2][1]+10))
    draw.ellipse ((a,b), fill = (0,255,0))
    # dessin du chemin
    for c in range (0,len(chemin)-1):
    i = chemin [c]
    j = chemin [c+1]
    print i,j
    if m [i,j] > 0:
    a = (int (l [i][0]+5), int (l [i][1]+5))
    b = (int (l [j][0]+5), int (l [j][1]+5))
    draw.line ((a,b),fill=(0,0,255))
    else:
    a = (int (l [i][0]+5), int (l [i][1]+5))
    b = (int (l [j][0]+5), int (l [j][1]+5))
    draw.line ((a,b),fill=(0,0,50))
     
    # programme principal
    # construction des noeuds
    l = construit_ville (10)
    print l
    # construction des arêtes
    m = construit_arete (l)
    print m
    41
    # choix de noeud de départ de d'arrivée
    a,b = 0,0
    while a == b:
    a = random.randint (0,len(l)-1)
    b = random.randint (0,len(l)-1)
    print "noeud de départ et d'arrivée : ",a,b
    # construction de l'image du résultat
    im = dessin_ville_arete(l,m,[a,b])
    S'il vous plait pouvez vous m'aider
    merci d'avance.

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2012
    Messages
    321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2012
    Messages : 321
    Points : 604
    Points
    604
    Par défaut
    Bonjour, les indentations du programme ne sont pas bonnes.

    Sans aller plus loin que la première fonction, vous avez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def construit_noeud(n, x =500, y = 500):
     l=[]
    for i in range(0,n):
    xx = x * random.random ()
    yy = y * random.random ()
    l.append ((xx,yy))
    return l
    alors que vous devriez avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def construit_noeud(n, x =500, y = 500):
        l=[]
        for i in range(0,n):
            xx = x * random.random ()
            yy = y * random.random ()
            l.append ((xx,yy))
        return l
    En python, les blocs d'instructions sont reconnus par l'interpréteur par le nbr d'espaces de retraits de retraits. Pas d'espace pour les premiers blocs, puis 4 espaces pour le bloc suivant etc...

    Ici votre fonction commence sans espace, puis toutes les commandes doivent avoir le même retrait. Toutes les commandes du bloc for doivent avoir 4 espaces de retrait et ainsi de suite...

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 110
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par killian68 Voir le message
    Bonjour, les indentations du programme ne sont pas bonnes.

    Sans aller plus loin que la première fonction, vous avez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def construit_noeud(n, x =500, y = 500):
     l=[]
    for i in range(0,n):
    xx = x * random.random ()
    yy = y * random.random ()
    l.append ((xx,yy))
    return l
    alors que vous devriez avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def construit_noeud(n, x =500, y = 500):
        l=[]
        for i in range(0,n):
            xx = x * random.random ()
            yy = y * random.random ()
            l.append ((xx,yy))
        return l
    En python, les blocs d'instructions sont reconnus par l'interpréteur par le nbr d'espaces de retraits de retraits. Pas d'espace pour les premiers blocs, puis 4 espaces pour le bloc suivant etc...

    Ici votre fonction commence sans espace, puis toutes les commandes doivent avoir le même retrait. Toutes les commandes du bloc for doivent avoir 4 espaces de retrait et ainsi de suite...

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 110
    Points : 51
    Points
    51
    Par défaut
    merci beaucoup

Discussions similaires

  1. Géneration d'un graphe de réseau maillé
    Par zeinab ali dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 18/06/2016, 12h33
  2. Réponses: 3
    Dernier message: 25/03/2013, 10h31
  3. Ordonnancement du trafic dans un réseau maillé sans fil
    Par kader_maaoui dans le forum MATLAB
    Réponses: 2
    Dernier message: 24/07/2012, 18h13
  4. générer un graphe aléatoirement en C
    Par iziwschi dans le forum Débuter
    Réponses: 1
    Dernier message: 26/04/2009, 16h23
  5. Graphe aléatoire
    Par lovely_ned dans le forum Langage
    Réponses: 1
    Dernier message: 29/01/2008, 23h38

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