示例#1
0
def testDeDijsktra():
    carte = Carte()

    carte.ajouterSommet('a')
    carte.ajouterSommet('b')
    carte.ajouterSommet('c')
    carte.ajouterSommet('d')
    carte.ajouterSommet('e')
    carte.ajouterSommet('f')

    carte.ajouterArete('a', 'b', 7)
    carte.ajouterArete('a', 'c', 9)
    carte.ajouterArete('a', 'f', 14)
    carte.ajouterArete('b', 'c', 10)
    carte.ajouterArete('b', 'd', 15)
    carte.ajouterArete('c', 'd', 11)
    carte.ajouterArete('c', 'f', 2)
    carte.ajouterArete('d', 'e', 6)
    carte.ajouterArete('e', 'f', 9)

    cheminement = Cheminement(carte)

    print 'Carte data:'
    for v in carte:
        for w in v.recupererConnection():
            vid = v.recupererId()
            wid = w.recupererId()
            print '( %s , %s, %3d)'  % ( vid, wid, v.recupererCout(w))

    cheminement.dijkstra(carte.recupererSommet('a'))

    target = carte.recupererSommet('e')
    path = [target.recupererId()]
    cheminement.plusCourtChemin(target, path)
    print 'The shortest path : %s' % (path[::-1])
示例#2
0
class TestUnitaire_Carte(unittest.TestCase):
    carte = Carte()
    point1 = (0, 0)
    point2 = (1, 1)

    def setUp(self):
        self.carte = Carte()
        self.positionXAleatoire = 100
        self.positionYAleatoire = 100
        self.point1 = (0, 0)
        self.point2 = (1, 1)

    def tearDown(self):
        self.carte = None

    def test_ajouterDesSommetsAugmenteLaListe(self):
        self.carte.ajouterSommet('a', self.positionXAleatoire, self.positionYAleatoire)
        self.carte.ajouterSommet('b', self.positionXAleatoire, self.positionYAleatoire)
        self.carte.ajouterSommet('c', self.positionXAleatoire, self.positionYAleatoire)

        self.assertEqual(len(self.carte.recupererSommets()), 3)

    def test_recupererSommetRetourneLeBonNoeud(self):
        self.carte.ajouterSommet('a', self.positionXAleatoire, self.positionYAleatoire)
        self.carte.ajouterSommet('b', self.positionXAleatoire, self.positionYAleatoire)
        self.carte.ajouterSommet('c', self.positionXAleatoire, self.positionYAleatoire)

        self.assertEqual(self.carte.recupererSommet(1).id, 'b')

    def test_ajouterAreteMetLesNoeudsVoisin(self):
        self.carte.ajouterSommet('a', self.positionXAleatoire, self.positionYAleatoire)
        self.carte.ajouterSommet('b', self.positionXAleatoire, self.positionYAleatoire)
        self.carte.ajouterSommet('c', self.positionXAleatoire, self.positionYAleatoire)

        self.carte.ajouterArete(self.carte.recupererSommet(0),
                                self.carte.recupererSommet(1),
                                1)
        self.carte.ajouterArete(self.carte.recupererSommet(1),
                                self.carte.recupererSommet(2),
                                1)

        self.assertEqual(len(self.carte.recupererSommet(0).adjacent), 1)
        self.assertEqual(len(self.carte.recupererSommet(1).adjacent), 2)

    def test_distanceEntreDeuxSommetsRetourneLaBonneDistance(self):
        valeurRetournee = self.carte.distanceEntrePoint(self.point1, self.point2)

        self.assertEqual(valeurRetournee, np.sqrt(2))
class TestUnitaire_Cheminement(unittest.TestCase) :
    carte = Carte()
    cheminement = Cheminement(carte)
    sommetA = Sommet('a', 10, 20, False)
    sommetB = Sommet('b', 100, 100, False)
    sommetC = Sommet('c', 95, 125, False)
    sommetD = Sommet('d', 0, 140, False)
    sommetE = Sommet('e', 80, -60, False)
    sommetF = Sommet('f', -150, -20, False)

    def setUp(self):
        self.carte = Carte()
        self.sommetA = Sommet(0, 10, 20, False)
        self.sommetB = Sommet(1, 100, 100, False)
        self.sommetC = Sommet(2, 95, 125, False)
        self.sommetD = Sommet(3, 0, 140, False)
        self.sommetE = Sommet(4, 80, -60, False)
        self.sommetF = Sommet(5, -150, -20, False)

        self.carte.ajouterSommet(self.sommetA.id, self.sommetA.x, self.sommetA.y)
        self.carte.ajouterSommet(self.sommetB.id, self.sommetB.x, self.sommetB.y)
        self.carte.ajouterSommet(self.sommetC.id, self.sommetC.x, self.sommetC.y)
        self.carte.ajouterSommet(self.sommetD.id, self.sommetD.x, self.sommetD.y)
        self.carte.ajouterSommet(self.sommetE.id, self.sommetE.x, self.sommetE.y)
        self.carte.ajouterSommet(self.sommetF.id, self.sommetF.x, self.sommetF.y)

        self.carte.ajouterArete(self.carte.recupererSommet(0), self.carte.recupererSommet(1), 7)
        self.carte.ajouterArete(self.carte.recupererSommet(0), self.carte.recupererSommet(2), 9)
        self.carte.ajouterArete(self.carte.recupererSommet(0), self.carte.recupererSommet(5), 14)
        self.carte.ajouterArete(self.carte.recupererSommet(1), self.carte.recupererSommet(2), 10)
        self.carte.ajouterArete(self.carte.recupererSommet(1), self.carte.recupererSommet(3), 15)
        self.carte.ajouterArete(self.carte.recupererSommet(2), self.carte.recupererSommet(3), 11)
        self.carte.ajouterArete(self.carte.recupererSommet(2), self.carte.recupererSommet(5), 2)
        self.carte.ajouterArete(self.carte.recupererSommet(3), self.carte.recupererSommet(4), 9)
        self.carte.ajouterArete(self.carte.recupererSommet(4), self.carte.recupererSommet(5), 9)

        self.cheminement = Cheminement(self.carte)


    def tearDown(self):
        pass

    def test_dijkstraRetourneLePrecedentLePlusProche(self):
        self.cheminement.dijkstra(self.carte.recupererSommet(0))

        '''print self.sommetB.recupererConnection()
        print self.sommetB.adjacent
        print self.sommetB.precedent
        print self.sommetB.distance
        print self.carte.recupererSommet(1)'''

        self.assertEqual(self.carte.recupererSommet(0).precedent, None)
        self.assertEqual(self.carte.recupererSommet(1).precedent.id, self.sommetA.id)
        self.assertEqual(self.carte.recupererSommet(2).precedent.id, self.sommetA.id)
        self.assertEqual(self.carte.recupererSommet(3).precedent.id, self.sommetC.id)
        self.assertEqual(self.carte.recupererSommet(4).precedent.id, self.sommetF.id)
        self.assertEqual(self.carte.recupererSommet(5).precedent.id, self.sommetC.id)


    def test_trouverTrajectoireDonneLePlusCourtChemin(self):
        debut = (self.sommetA.x, self.sommetA.y)
        cible = (self.sommetE.x, self.sommetE.y)

        trajectoire = self.cheminement.trouverTrajectoire(debut, cible)

        self.assertEqual(trajectoire[0].id, 0)
        self.assertEqual(trajectoire[1].id, 2)
        self.assertEqual(trajectoire[2].id, 5)