示例#1
0
def cout_h () :  #Même fonction que cout_q en remplaçant q par h
    q = 5
    x=[]  #contient les différentes valeurs de h testées
    y=[]  #contient le temps d'execution associé
    for h in range(10,101) :   #on enlève les petites valeurs pour ne pas avoir un temps trop petit (et un problème lors du passage au log)
        p = Paramètres(q,h,T,m,alpha)
        x.append(log(h))
        y_moyen = 0
        for i in range(30) : #On réalise 100 simulations pour chaque point
            t=time()
            init_ville(p)   
            t=time()-t
            y_moyen+=t
        y.append(log(y_moyen/30))
    #Réalisons ensuite une régression linéaire pour trouver a et b tels que log(t) = a*log(h) + b :
    regressor = LinearRegression()
    X = [[i] for i in x]
    regressor.fit(X, y)
    a = regressor.coef_[0]
    b = regressor.intercept_
    r2 = regressor.score(X,y)
    y_droite = [a*i + b for i in x]
    #On trace ensuite les points obtenus en effectuant les simulations, et la droite obtenue par régression linéaire. 
    plt.plot(x,y, label = "log(t) en fonction de log(h)")
    plt.plot(x,y_droite, label = "log(t)="+str(a)+"log(h)+"+str(b)+", r² ="+str(r2))
    plt.title("Temps d'exécution t en fonction du nombre d'emplacements par quartiers h² (90 points créés à partir de 30 simulations chacuns)")
    plt.xlabel("log(h)")
    plt.ylabel("log(t) (t en secondes)")
    plt.legend()  
    plt.show()
示例#2
0
def cout_q () :   
    h = 20
    x=[]  #contient les différentes valeurs de h testées
    y=[]  #contient le temps d'execution associé
    for q in range(1,51) :
        p = Paramètres(q,h,T,m,alpha)
        x.append(log(q))
        y_moyen = 0
        for i in range(30) : #On réalise 100 simulations pour chaque point
            t=time()
            init_ville(p)   
            t=time()-t
            y_moyen+=t
        y.append(log(y_moyen/30))
    #Réalisons ensuite une régression linéaire pour trouver a et b tels que log(t) = a*log(h) + b :
    regressor = LinearRegression()
    X = [[i] for i in x]
    regressor.fit(X, y)
    a = regressor.coef_[0]
    b = regressor.intercept_
    r2 = regressor.score(X,y)
    y_droite = [a*i + b for i in x]
    #On trace ensuite les points obtenus en effectuant les simulations, et la droite obtenue par régression linéaire. 
    plt.plot(x,y, label = "log(t) en fonction de log(q)")
    plt.plot(x,y_droite, label = "log(t)="+str(a)+"log(q)+"+str(b)+", r² ="+str(r2))
    plt.title("Temps d'exécution t en fonction du nombre de quartiers q² (50 points créés à partir de 30 simulations chacuns)")
    plt.xlabel("log(q)")
    plt.ylabel("log(t) (t en secondes)")
    plt.legend()
    plt.show()
示例#3
0
def simulation(
        p, i_max,
        nb_graph):  #choisis de sorte que i_max divisible par (nb_graph-1)
    ville = init_ville(p)
    trace_ville(ville, p, 0)
    sub_i = i_max // (nb_graph - 1
                      )  # Nombre d'itérations entre chaque graphique
    for i in range(1, nb_graph):
        for j in range(sub_i):
            actualise(ville, p)
        trace_ville(ville, p, i)
示例#4
0
 def test_init_ville(self):
     p = Paramètres(2, 3, 1, 0.5, 0.2)
     ville = init_ville(p)
     n_al = 0  #nombre de personnes altruistes : normalement 3
     n_eg = 0  #nombre de personnes égoïstes : normalement 15
     for i in range(p.l):
         for j in range(p.l):
             if ville.ville[i, j] == 1:
                 n_eg += 1
             elif ville.ville[i, j] == 2:
                 n_al += 1
     self.assertEqual([n_eg, n_al], [15, 3])
示例#5
0
    def test_actualise(self):
        p = Paramètres(
            4, 5, 100, 0.2,
            0.1)  #Une grande valeur de T permet d'accélérer les déménagements
        ville = init_ville(p)
        copie_ville = np.copy(
            ville.ville)  #list permet de faire une copie indépendante
        copie_densites = np.copy(ville.densites)
        ville2 = Ville(copie_ville, copie_densites)

        test = True
        while test:  #on réactualise la ville jusqu'à ce qu'un déménagement ait lieu
            actualise(ville2, p)
            for i in range(p.l):
                for j in range(p.l):
                    if ville.ville[i, j] != ville2.ville[i, j]:
                        test = False
            #A ce stade, test vaut 1 si la ville est inchangée, et 0 sinon

        # Vérification de la grille de la ville :
        n_al = 0  #nombre de personnes altruistes : normalement 3
        n_eg = 0  #nombre de personnes égoïstes : normalement 15
        n_change = 0  #nombre de changements entre ville et ville2
        for i in range(20):
            for j in range(20):
                if ville2.ville[i, j] == 1:
                    n_eg += 1
                elif ville2.ville[i, j] == 2:
                    n_al += 1
                if ville.ville[i, j] != ville2.ville[i, j]:
                    n_change += 1
        test = (n_eg == 180) and (n_al == 20) and (
            n_change == 2
        )  #vérifie qu'il y a bien le bon nombre d'individus altruistes et égoistes, et que seules deux cases de la ville ont été modifiées

        #Vérification de la matrice des densités :
        for i in range(4):
            for j in range(4):
                d = np.sum(ville2.ville[i * 5:(i + 1) * 5 - 1,
                                        j * 5:(j + 1) * 5 - 1] != 0)
                test = (test and ((d / 25) == ville2.densites[i, j])
                        )  #vérifie que les densités sont bonnes
        self.assertEqual(test, True)