Esempio n. 1
0
    def extraireSousGraphe(self, point, typeVehicule, etatPatient):

        # On utilise la classe Arbre pour créer l'arbre de chemins simples possibles
        # variable point étant la racine de l'arbre
        arbre = Arbre(point)
        arbre.remplirArbre(self.listeSommets, self.matriceArete, typeVehicule,
                           etatPatient)

        # Créer liste contenant les feuilles de l'arbres uniquement
        liste = []
        arbre.creerListeChemins(liste)
        maxDist = 0
        indexMax = -1

        # Trouver feuille ayant la plus grande distance (en min)
        for i in range(len(liste)):
            if liste[i].distance > maxDist:
                maxDist = liste[i].distance
                indexMax = i

        # Affichage du chemin et la longueur de celui-ci en minutes
        print("\nChemin le plus long sur une charge :\n")
        if not indexMax == -1:
            strChemin = []
            liste[indexMax].afficheChemin(strChemin)
            strChemin[len(strChemin) - 1] = strChemin[len(strChemin) - 1][:-3]
            for string in strChemin:
                print(string, end="")
        print("\nLongueur : " + str(maxDist) + " minutes\n")
Esempio n. 2
0
def constructionArbreLong(l):
    A = Arbre()
    if len(l) == 1:
        A = Feuille(l[0])
        return A
    else:
        A.droit = Feuille(l[0])
        A.gauche = Feuille(l[1])

    for i in range(2, len(l)):
        tmp = Arbre()
        tmp.gauche = Feuille(l[i])
        tmp.droit = A
        A = tmp
    A.equilibre()

    return A
Esempio n. 3
0
 def arbre_feuille(self):
     #pour chaque tuple(freq,char) de notre liste de l'alpha freq:
     for (freq,char) in self.listeAlpha_freq:
         #ajouter à la liste Arbre:
 # - la frequence correspondant à la "valeur" de l'arbre/feuille;
 # - le caractere correspondant au "label" de l'arbre/feuille; 
         self.listeArbre.append(Arbre(freq,char))
         
     #puis retourner la liste Arbre  
     return self.listeArbre
Esempio n. 4
0
class Main:  #classe ou o fait les test

    a = Freqlettre('extraitalice.txt')  #on crée un objet Freqlettre
    print(a.liste_freq_et_lettre)  #on affiche la liste de tuple
    b = a.creation_fichier()  #on crée le fichier avec les tuples
    arbre = Arbre('', a.liste_freq_et_lettre)  #création d'un arbre
    liste = arbre.tant_que(
    )  #on applique la methode tant_que a notre objet arbre pour parcourir ttes les feuilles, enlever
    #les 2 premiers elem et construire l'arbre
    liste[0].affiche_arbre()  #affichage du dernier arbre restant dans la liste
    a.ecrire_octet(liste[0])  #crée le fichier avec les caractères spéciaux
Esempio n. 5
0
    def creation_feuille(self):

        #on parcourt les tuples (frequences,caractere) present dans la liste
        #(frequence,alphabet)
        #print("les feuilles",liste_afreq,"\n")
        for (freq,alpha) in self.liste_afreq:
            #on ajoute a la liste des arbres chaque tuple en creant un arbre 
            #a partir de chaque tuple
            self.listeArbre.append(Arbre(freq,alpha))
            
        return self.listeArbre
Esempio n. 6
0
    def __init__(self, game, playerTurn=0, valFirstPlayerIsValJ2=False):
        # generation de l'arbre des differents etats possibles
        debutchrono = time.time()
        self.arbre = Arbre(game)
        finchrono = time.time()
        self.maximise = playerTurn == 1
        self.invertGame = valFirstPlayerIsValJ2  # invertion is needed because the first player of the tree is J1
        print('valFirstPlayerIsValJ2: ', valFirstPlayerIsValJ2)
        print("Travail termine !     temps ecoule: ",
              str(round(finchrono - debutchrono, 3)))

        self.game = game
        self.node = self.arbre.node
Esempio n. 7
0
def constructionArbre(l):
    A = Arbre()
    if len(l) == 0:
        showinfo("Erreur", "Le fichier est vide")
        return A
    elif len(l) == 1:
        A = Feuille(l[0])
        return A
    A.gauche = Feuille(l[0])
    A.droit = Feuille(l[1])

    for i in range(2, len(l)):
        A = A.constructionArbre(l[i])
    A.equilibre()

    return A
Esempio n. 8
0
def constructionMobile(l):
    A = Arbre()
    if type(l[0]) is int:
        A.gauche = Feuille(l[0])
    elif type(l[0]) is list:
        A.gauche = constructionMobile(l[0])

    if len(l) <= 1:
        return A.gauche

    if type(l[1]) is int:
        A.droit = Feuille(l[1])
    elif type(l[1]) is list:
        A.droit = constructionMobile(l[1])
    A.equilibre()

    return A
Esempio n. 9
0
    def creationArbre(self):
        # On prend les 2 plus petit elements de listeArbre
        abr1 = self.listeArbre[0]
        abr2 = self.listeArbre[1]

        # On cree un nouvel arbre qui va avoir 2 enfants (abr1 et abr2)
        arbre = Arbre("", abr1.valeur + abr2.valeur, abr2, abr1)

        # On enleve les 2 plus petit elements de listeArbre
        self.listeArbre.pop(1)
        self.listeArbre.pop(0)

        # On recupère l'index de la place ou doit etre placer arbre
        index = self.indexNouvelArbre(arbre)

        # On ajoute arbre au bon endroit dans listeArbre
        self.listeArbre[index:index] = [arbre]
Esempio n. 10
0
 def creationArbre(self):
     
     #on recupere les deux arbres les plus petits de la liste, ce qui correspond
     #aux arbres a la premiere et deuxieme places dans la liste
     ab1=self.listeArbre[0]
     ab2=self.listeArbre[1]
     
     #on cree un nouvel arbre qui prend en frequence la somme des deux arbres
     #en label une chaine vide et en fils gauche le plus petit des 2 et en fils
     #droit le plus grand
     arbre=Arbre(ab1.valeur+ab2.valeur,'',ab1,ab2)
     #on enleve de la liste des arbres le plus grand des 2 puis le plus petit
     self.listeArbre.pop(1)
     self.listeArbre.pop(0)
     
     #on recherche l'index correspond au nouvel arbre precedemment cree
     index=self.indexNewArbre(arbre)
     #on ajoute dans la liste arbre a sa place le nouvel arbre
     self.listeArbre[index:index]=[arbre]
Esempio n. 11
0
 def arbre(self):
 
 #le 1er arbre :
     arbre1=self.listeArbre[0]#le plus petit 
 #le 2eme arbre :
     arbre2=self.listeArbre[1]#le deuxième plus petit         
     
 #on crée un arbre qui va additionner la fréq des deux arbres/feuilles
 #et qui va mettre en fils droit l'arbre2 et en fils gauche l'arbre3
     arbre=Arbre(valeur=arbre1.valeur+arbre2.valeur,
                 label='',fils_droit=arbre2,fils_gauche=arbre1)
     
 #on supprime ensuite les deux arbres de gauche de la listeArbre
     self.listeArbre.pop(1)
     self.listeArbre.pop(0)
     
 #on appelle la méthode index() qui retourne l'index de l'arbre présent dans la liste en fct de sa valeur et label
     index=self.RecupIndexNewArbre(arbre) 
     
 #que l'on va utiliser pour ajouter l'arbre à 
 #la bonne place dans la liste Arbre:
     self.listeArbre[index:index]=[arbre] 
Esempio n. 12
0
    def branch_bound(self, V):

        # Affichage au début de l'algo
        if self.timed == 0:
            self.send_to_Trace("Debut du Branch & Bound :\n", "in")
            self.timed = time.time()

        # Initialisation de l'algo
        arbre = Arbre(V, self)

        # Initialisation de la liste des feuilles
        sol = arbre.update()
        # Tant qu'on a pas de solution, on met à jour la liste des feuilles
        while not sol:
            sol = arbre.update()
            if isinstance(sol, str):
                print sol
                return

        # Construction de la solution entière à partir de la feuille
        solution = []
        while sol:
            solution += [(sol.motObj, sol.mot, sol.value)]
            sol = sol.pere

        # Affichage de la solution et du temps de calcul
        self.timed = time.time() - self.timed
        self.send_to_Trace("Fin du Branch & Bound ", "out")
        self.send_to_Trace(" Temps :" + str(self.timed) + "\n", "time")
        self.res = solution
        self.sendResult(self.res)

        self.pause()
        with self.pause_cond:
            while self.paused:
                self.pause_cond.wait()
            self.timed = time.time()
Esempio n. 13
0
def assert_arbre_prob(input):
    arbre = Arbre()
    root = arbre.root
    add_children(root, 10)
    assert_answer(input, arbre)
Esempio n. 14
0
 def creationFeuille(self):
     for (u, v) in self.elem:
         self.listeArbre.append(Arbre(v, u))
Esempio n. 15
0
 def testArbre(self):
     graphe = Graphe("centresLocaux.txt")
     arbre = Arbre(2)
     arbre.fillArbre(graphe.listeSommets, graphe.matriceArete, 0, 1)