import graphe import graphique import copy import numpy as np import matplotlib.pyplot as pl import time def creerGrapheFigure1(): """ Crée le graphe de la figure 1 """ g = graphe.Graphe("Graphe de la figure 1") s1 = g.ajouteSommet(1.0, 1.0) s2 = g.ajouteSommet(2.0, 3.5) s3 = g.ajouteSommet(2.5, 2.5) s4 = g.ajouteSommet(5.0, 2.0) s1.couleur = (1., 1., 0.) s2.couleur = (0., 0., 1.) s3.couleur = (1., 0., 0.) s4.couleur = (1., 1., 0.) a = g.connecte(s1, s2, 4.0, 90.) a.couleur = (1., 1., 0.) g.connecte(s1, s4, 5.2, 124.) g.connecte(s2, s3, 2.0, 54.) g.connecte(s2, s4, 5.0, 90.) return g def testQuestion1_2(): """' Teste que la création d ' un graphe ne plante pas print ”Question 1.2 :""" creerGrapheFigure1() print("Ok. Pas de plantage") def testQuestion1_3(): """ Teste l ' affichage d ' un graphe dans la console""" print("Question 1.3 :") g = creerGrapheFigure1() print(g) def testQuestion1_4(): """ Teste du dessin d'un graphe.""" print("Question 1.4:") graphique.affiche(creerGrapheFigure1(), (3., 2.), 100.) def testQuestion2_2(): """Teste de génération aléatoire de graphe.""" print("Question 2.2:") graphique.affiche(graphe.pointsAleatoires(5, 30), (0, 0), 10.) def testQuestion2_4(): """Teste de gabriel et gvr.""" print("Question 2.4") g = graphe.pointsAleatoires(30, 30) g.renomme("Gabriel") g1 = copy.deepcopy(g) g1.renomme("GVR") graphe.gabriel(g) graphe.gvr(g1) graphique.affiche(g, (0, 0), 10.) graphique.affiche(g1, (0, 0), 10.) def testQuestion2_5(): """Teste de la création de réseau.""" g = graphe.pointsAleatoires(30, 30) graphe.reseau(g) graphique.affiche(g, (0, 0), 10.) def chronometre(fonctionTest, fonctionPreparation, parametres): ''' Mesure le temps d ' exécution fonctionTest pour différentes valeurs d ' un paramètres ''' temps = [] # Pour chaque valeur de paramètre for p in parametres: # Génère les entrées du test pour la valeur p entrees = fonctionPreparation(p) # Lance le test pour ces entrées print("t({}) = ".format(p), end="", flush=True) debut = time.time() fonctionTest(entrees) fin = time.time() # Mesure le temps d ' exécution t = (fin - debut) print("{:.2f} s".format(t)) temps.append(t) return temps def testQuestion2_6(): """Mesure la performance de graphe.reseau""" prepare = lambda p : graphe.pointsAleatoires(p, 10) valeurs_n = np.arange(1, 200) temps = chronometre(graphe.reseau, prepare, valeurs_n) pl.close('all') pl.title("Mesure du temps d'exécution de `reseau`.") pl.plot(valeurs_n, temps) pl.xlabel("n") pl.ylabel("temps") pl.show() pl.title("Mesure du temps d'exécution de `reseau`.") pl.loglog(valeurs_n, temps, label='temps de calcul') pl.loglog(valeurs_n, (lambda x : x**3)(valeurs_n), label='$x\mapsto x^3$') pl.legend(loc='best') pl.xlabel("n") pl.ylabel("temps") pl.show() def testQuestion2_7(): """Compare la création de graphe de gabriel et ed delaunay.""" prepare = lambda p : graphe.pointsAleatoires(p, 10) valeurs_n = np.arange(1, 200) temps1 = chronometre(graphe.gabriel, prepare, valeurs_n) temps2 = chronometre(graphe.delaunay, prepare, valeurs_n) pl.close('all') pl.title("Comparaison du temps pour `delaunay` et `gabriel`") pl.plot(valeurs_n, temps1, label='gabriel') pl.plot(valeurs_n, temps2, label='delaunay') pl.legend(loc='best') pl.xlabel('n') pl.ylabel('temps') pl.show() def testQuestion2_8(): """Compare le reseau naif et non naif.""" g = graphe.pointsAleatoires(30, 30) g1 = copy.deepcopy(g) g.renomme("Naïf") g1.renomme("Non naïf") graphe.reseau(g) graphe.reseauRapide(g1) graphique.affiche(g, (0, 0), 10.) graphique.affiche(g1, (0, 0), 10.) def testQuestion2_9(): """Compare le temps de création des deux méthodes de création de réseau""" prepare = lambda p : graphe.pointsAleatoires(p, 10) valeurs_n = list(map(lambda x: int(x), np.logspace(1, 3, 30))) temps1 = chronometre(graphe.reseau, prepare, valeurs_n) temps2 = chronometre(graphe.reseauRapide, prepare, valeurs_n) pl.close('all') pl.title("Comparaison du temps d'exécution de `reseau` et `reseauRapide`.") pl.plot(valeurs_n, temps1, label='reseau') pl.plot(valeurs_n, temps2, label='reseauRapide') pl.legend(loc='best') pl.xlabel("n") pl.ylabel("temps") pl.show() pl.title("Comparaison du temps d'exécution de `reseau` et `reseauRapide`.") pl.loglog(valeurs_n, temps1, label='reseau') pl.loglog(valeurs_n, temps2, label='reseauRapide') pl.legend(loc='best') pl.xlabel("n") pl.ylabel("temps") pl.show() # testQuestion1_2() # testQuestion1_3() # testQuestion1_4() # testQuestion2_2() # testQuestion2_4() # testQuestion2_5() # testQuestion2_6() # testQuestion2_7() # testQuestion2_8() testQuestion2_9()