예제 #1
0
def nombre_aretes(net):
    """Retourne le nombre d'aretes du réseau net."""
    M = mod.conv_net_to_matrix(net)
    nombre_aretes = 0
    for i in range(len(M[0])):
        for j in range(i, len(M[0])):
            nombre_aretes = nombre_aretes + M[i][j]
    return nombre_aretes
예제 #2
0
def est_connexe(net):
    """Retourne True si le graphe est connexe, False sinon."""
    M = mod.conv_net_to_matrix(net)
    Noeuds_visités = [0] * len(M)
    t = [0]
    for k in range(len(M)):
        r = t.copy()
        for n in r:
            Noeuds_visités[n] = 2
            if Noeuds_visités == [2] * len(M):
                return True
            t.pop(t.index(n))
            for i in range(len(M)):
                if M[n][i] == 1:
                    t.append(i)
    return False
예제 #3
0
def f_aretes(net, k, l):
    """Simule une attaque informatique contre le réseau net. k représente les moyens
    du défenseur, l ceux de l'attaquant."""
    M = mod.conv_net_to_matrix(net)
    L = liste_aretes(M)

    d = [-1] * k
    for i in range(1, k):
        c = -1
        while c in d or not c in L:
            c = (random.randint(0,
                                len(Noeuds) - 1),
                 random.randint(0,
                                len(Noeuds) - 1))
        d[i] = c

    a = [-1] * l
    for i in range(l):
        c = -1
        while c in a or not c in L:
            c = (random.randint(0,
                                len(Noeuds) - 1),
                 random.randint(0,
                                len(Noeuds) - 1))
        a[i] = c

    for c in a:
        if not c in d:
            i, j = c
            retire_arete(M, i, j)

    Nouveau_réseau = mod.conv_matrix_to_net(M)

    n = 0
    if est_connexe(Nouveau_réseau):
        n = 1
    else:
        print(M)

    return (est_connexe(Nouveau_réseau), (n - nombre_aretes(net) - k))
예제 #4
0
def f_etoile_noeuds(net, k, l):
    """Simule une attaque informatique contre le réseau net. k représente les moyens
    du défenseur, l ceux de l'attaquant."""
    Noeuds = net._get_list_id()
    M = mod.conv_net_to_matrix(net)

    d = [-1] * k
    d[0] = 0
    for i in range(1, k):
        c = -1
        while c in d:
            c = random.randint(0, len(Noeuds) - 1)
        d[i] = c

    a = [-1] * l
    for i in range(l):
        c = -1
        while c in a:
            c = random.randint(0, len(Noeuds) - 1)
        a[i] = c

    a = sorted(a, reverse=True)
    for i in a:
        if not i in d:
            retire_colonne(M, i)
            retire_ligne(M, i)

    Nouveau_réseau = mod.conv_matrix_to_net(M)

    n = 0
    if est_connexe(Nouveau_réseau):
        n = 1
    else:
        print(M)

    return (est_connexe(Nouveau_réseau), (n - nombre_aretes(net) - k))