173 lines
5 KiB
Python
173 lines
5 KiB
Python
|
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()
|