Exemple #1
0
    def construct_Arbre(self, methode, liste, i=0):

        self.canvas.delete("all")

        self.arbre = Arbre(methode, liste, i)
        self.arbre.MAJ()
        self.arbre.calcul_Pos_SA()
        self.arbre.calcul_barycentre()
        self.texte.config(text=Arbre.typeArbre, fg="white")
        self.afficheArbre(self.arbre, 1920 // 2, 0)
Exemple #2
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
Exemple #3
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
Exemple #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
Exemple #5
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")
Exemple #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
Exemple #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
Exemple #8
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()
Exemple #9
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()
Exemple #10
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
Exemple #11
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]
Exemple #12
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]
Exemple #13
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] 
Exemple #14
0
def assert_arbre_prob(input):
    arbre = Arbre()
    root = arbre.root
    add_children(root, 10)
    assert_answer(input, arbre)
Exemple #15
0
 def creationFeuille(self):
     for (u, v) in self.elem:
         self.listeArbre.append(Arbre(v, u))
Exemple #16
0
class Interface(Frame):
    """
    """

    def __init__(self, fenetre):
        Frame.__init__(self, fenetre)
        frame_gauche = Frame(fenetre)  # partie boutons
        frame_droite = Frame(fenetre)  # partie Image Module

        frame_gauche.pack(side=LEFT, fill="y")
        frame_droite.pack(side=RIGHT, fill="both", expand=1)
        frame_gauche.config(background="#303030")

        Bouton_A = Button(
            frame_gauche,
            text="Ouvrir fichier Arbre",
            fg="white",
            bg="#7F7F7F",
            highlightbackground="#303030",
            highlightthickness=3,
            command=self.openfile_Arbre,
        ).grid(
            row=0, column=0, sticky=W + N + E + S
        )  # ouvrir Arbre
        Bouton_B = Button(
            frame_gauche,
            text="Ouvrir fichier Liste",
            fg="white",
            bg="#7F7F7F",
            highlightbackground="#303030",
            highlightthickness=3,
            command=self.openfile_Liste,
        ).grid(
            row=1, column=0, sticky=W + N + E + S
        )  # ouvrir Liste
        self.texte = Label(
            frame_gauche, text="Pas d'arbre Ouvert", bg="#7F7F7F", highlightbackground="#303030", highlightthickness=3
        )
        self.texte.grid(row=2, column=0, sticky=W + N + E + S)  # ouvrir Liste

        self.canvas = Canvas(
            frame_droite, background="#EDEDED", scrollregion=(0, 0, 1920, 1080)
        )  # partie ou on dessine les arbres

        # les ScrollBar de la partie ou on dessine
        hbar = Scrollbar(frame_droite, orient=HORIZONTAL, activebackground="#333333")
        hbar.pack(side=BOTTOM, fill=X)
        hbar.config(command=self.canvas.xview)
        vbar = Scrollbar(frame_droite, orient=VERTICAL, activebackground="#333333")
        vbar.pack(side=RIGHT, fill=Y)
        vbar.config(command=self.canvas.yview)

        # configuration du canevas dessin
        self.canvas.config(
            width=640,
            height=480,
            xscrollcommand=hbar.set,
            yscrollcommand=vbar.set,
            highlightbackground="#000000",
            borderwidth=1,
            highlightthickness=2,
        )
        self.canvas.pack(expand=True, fill=BOTH)
        self.canvas.bind("<4>", lambda event: self.canvas.yview("scroll", -1, "units"))
        self.canvas.bind("<5>", lambda event: self.canvas.yview("scroll", 1, "units"))

    def openfile_Arbre(self):
        self.filename = askopenfilename(parent=self)
        try:
            f = open(self.filename)
        except IOError:
            print("Pas de fichier")
            return
        liste1 = f.readline()
        liste1 = eval(liste1)

        self.construct_Arbre("A", liste1)

    def openfile_Liste(self):
        self.filename = askopenfilename(parent=self)

        # POPUP
        self.popup = Toplevel()

        self.popup.title("Options d'ouverture")

        # choix binaire/n-aire
        self.radio_var = StringVar(self.popup)
        self.radio_var.set(1)
        binaire = Radiobutton(
            self.popup, text="Binaire", variable=self.radio_var, value=1, command=self.select_Naire
        ).grid(row=0, column=0, sticky=W)
        naire = Radiobutton(
            self.popup, text="N-aire", variable=self.radio_var, value=2, command=self.select_Naire
        ).grid(row=0, column=1, sticky=W)

        # choix methode construction
        lab_Methode = Label(self.popup, text="Methode de Construction :").grid(row=1, column=0, sticky=W)
        self.var_methode = StringVar(self.popup)
        self.var_methode.set("Arbre binaire Complet")
        self.listeMethode = OptionMenu(self.popup, self.var_methode, *dict[1].keys())
        self.listeMethode.grid(row=1, column=1, sticky=W)

        # choix nombre d'arrete
        lab_nb_Arretes = Label(self.popup, text="Nombre d'arrete :").grid(row=2, column=0, sticky=W)
        self.nombre_arrete = StringVar()
        self.nombre_arrete.set(3)
        self.entry = Entry(self.popup, textvariable=self.nombre_arrete, state="disable")
        self.entry.grid(row=2, column=1, sticky=W)

        #
        Bouton_A = Button(self.popup, text="Annuler", command=self.popup.destroy).grid(row=3, column=1, sticky=W)
        Bouton_OK = Button(self.popup, text="OK", command=self.optionListe).grid(row=3, column=1, sticky=E)

    def select_Naire(self):

        if int(self.radio_var.get()) == 1:  # si binaire
            self.entry.configure(state="disabled")  # nombre d'arrete non modifiable

            # On change la liste des options d'ouverture
            liste = [i for i in dict[1].keys()]
            self.var_methode.set(liste[0])
            menu = self.listeMethode["menu"]
            menu.delete(0, "end")
            for item in liste:
                menu.add_command(label=item, command=lambda item=item: self.var_methode.set(item))

        elif int(self.radio_var.get()) == 2:  # si n-naire
            self.entry.configure(state="normal")

            liste = [i for i in dict[2].keys()]
            self.var_methode.set(liste[0])
            menu = self.listeMethode["menu"]
            menu.delete(0, "end")
            for item in liste:
                menu.add_command(label=item, command=lambda item=item: self.var_methode.set(item))

    def optionListe(self):
        print("Vous Avez Choisi la : " + self.var_methode.get() + " nb arrete: " + str(self.nombre_arrete.get()))
        f = open(self.filename)
        liste1 = f.readlines()
        liste1 = [int(i) for i in liste1]

        methode = dict[int(self.radio_var.get())][self.var_methode.get()]
        self.construct_Arbre(methode, liste1, int(self.nombre_arrete.get()))
        self.popup.destroy()
        self.arbre.saveArbre("test1")

    def afficheArbre(self, arbre, x, y):

        self.canvas.create_line(x, y, x, y + 30, width=3)

        if arbre.sous_arbre:
            self.canvas.create_line(
                x - arbre.barycentre, y + 30, x + (arbre.longueur_Tige_Total - arbre.barycentre), y + 30, width=3
            )
            a, b = x - arbre.barycentre, y + 30
            for i, elt in enumerate(arbre.sous_arbre):
                self.afficheArbre(elt, a + arbre.ecarts_Tiges[i], b)

        else:
            pconst = arbre.pprop
            self.canvas.create_oval(
                x - pconst // 2, y + 30, x + pconst // 2, y + 30 + (pconst), fill="deep sky blue", width=2
            )
            self.canvas.create_text(x, (y + 35 + (pconst // 4)), text=arbre.poids)

    def rollWheel(event):
        if event.num == 4:
            self.module.yview("scroll", -1, "units")
        elif event.num == 5:
            self.module.yview("scroll", 1, "units")

    def construct_Arbre(self, methode, liste, i=0):

        self.canvas.delete("all")

        self.arbre = Arbre(methode, liste, i)
        self.arbre.MAJ()
        self.arbre.calcul_Pos_SA()
        self.arbre.calcul_barycentre()
        self.texte.config(text=Arbre.typeArbre, fg="white")
        self.afficheArbre(self.arbre, 1920 // 2, 0)
Exemple #17
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
Exemple #18
0
 def testArbre(self):
     graphe = Graphe("centresLocaux.txt")
     arbre = Arbre(2)
     arbre.fillArbre(graphe.listeSommets, graphe.matriceArete, 0, 1)