def gen(dico_cube): """ applique l'algo gen a un dico pour construire la figure entree en parametres """ liste_fig = [] liste_c = g.liste_cube(dico_cube) for i in range(len(liste_c)): liste_fig.append(gf.init_fig(o.hauteur, o.largeur, o.longueur)) g.placer_cube((0, 0, 0), liste_c[i], liste_fig[i], dico_cube) i = 0 while (not (Mut.est_pleine(liste_fig)) and i < nb_iter_max): liste_pond = t.ponderation(liste_fig) place_p = t.choix_pond(liste_pond) porteuse = liste_fig.pop(place_p) place_d = t.choix_alea(liste_fig) donneuse = liste_fig.pop(place_d) porteuse_temp = porteuse donneuse_temp = donneuse #matrice 3D croismnt = C.croisement(porteuse_temp, donneuse_temp, dico_cube) mut = R.randint(1, 10) if (mut == 1 and Me.nb_cube(donneuse_temp)): Mut.mutation(porteuse_temp, liste_fig, dico_cube) if (Me.nb_cube(porteuse_temp) >= Me.nb_cube(porteuse) and croismnt): liste_fig.append(porteuse_temp) else: liste_fig.append(porteuse) if (Me.nb_cube(donneuse_temp) != 0 ): #on rement la donneuse dans la liste que si elle est non vide liste_fig.append(donneuse_temp) else: liste_fig.append(donneuse) if not (i % 100000): print(i) if (len(liste_fig) <= 2): for k in range(len(liste_c)): liste_fig.append(gf.init_fig(o.hauteur, o.largeur, o.longueur)) g.placer_cube((0, 0, 0), liste_c[k], liste_fig[k], dico_cube) liste_fig = gf.en_double(liste_fig) liste_fig = gf.doublon(liste_fig) i += 1 print("nombre d'iteration : {0}".format(i)) return liste_fig
def ponderation(liste_fig): """ retourne la liste ponderee et normee des sous solutions """ liste_pond=[] for i in range (len(liste_fig)): liste_pond.append(float(Me.nb_cube(liste_fig[i]))/float(len(g.objets_cubes))) return liste_pond
def gen(dico_cube): """ applique l'algo gén à un dico pour construire la figure entrée en paramètres """ liste_fig = [] liste_c = gf.Cubes_libre_fig(figure) #liste_cube(dico_cube) a faire for i in range(len(liste_c)): liste_fig.append(gf.init_fig(o.hauteur, o.largeur, o.longeur)) placer_cube((0, 0, 0), dico_cube[liste_c[i]], liste_fig[i], dico_cube) i = 0 while (non(est_pleine(liste_fig)) and i < nb_iter_max): liste_pond = t.ponderation(liste_fig) place_p = t.choix_pond(liste_pond) porteuse = liste_fig.pop([place]) place_d = t.choix_alea(liste_fig) donneuse = liste_fig.pop([place_d]) porteuse_temp = porteuse donneuse_temp = donneuse #matrice 3D C.croisement( porteuse_temp, donneuse_temp ) #le croisement ne se fait pas toujourd (false si non fait), si non fait modifier critere elitise mut = Rnd.randint(1, 100) if mut == 1: Mut.muation(porteuse_temp) if Me.nb_cube(porteuse_temp) > Me.nb_cube( porteuse ): #tester si il y a des figure vide dans la liste des figure liste_fig.append(porteuse_temp) liste_fig.append(donneuse_temp) else: liste_fig.append(porteuse) liste_fig.append(donneuse) return liste_fig
def gen(dico_cube): """ applique l'algo gen a un dico pour construire la figure entree en parametres """ liste_fig=[] liste_c= g.liste_cube(dico_cube) #print(liste_c) for i in range(len(liste_c)) : #print("ici") liste_fig.append(gf.init_fig(o.hauteur, o.largeur, o.longueur)) #print(dico_cube[liste_c[i]]) g.placer_cube((0, 0, 0), liste_c[i], liste_fig[i], dico_cube) #gf.afficher_fig(liste_fig[i]) i=0 while (not(Mut.est_pleine(liste_fig)) and i<nb_iter_max and len(liste_fig)>=2): #print("s") #print(i) #for j in liste_fig : # gf.afficher_fig(j) liste_pond=t.ponderation(liste_fig) place_p=t.choix_pond(liste_pond) porteuse=liste_fig.pop(place_p) place_d=t.choix_alea(liste_fig) donneuse=liste_fig.pop(place_d) porteuse_temp=porteuse donneuse_temp=donneuse#matrice 3D #gf.afficher_fig(porteuse_temp) #gf.afficher_fig(donneuse_temp) croismnt=C.croisement(porteuse_temp,donneuse_temp, dico_cube) mut= R.randint(1,10) if (mut==1 and Me.nb_cube(donneuse_temp)): Mut.mutation(porteuse_temp, liste_fig, dico_cube) if (Me.nb_cube(porteuse_temp)>=Me.nb_cube(porteuse) and croismnt): liste_fig.append(porteuse_temp) else: liste_fig.append(porteuse) if (Me.nb_cube(donneuse_temp)!=0):#on rement la donneuse dans la liste que si elle est non vide liste_fig.append(donneuse_temp) else: liste_fig.append(donneuse) if not(i%100): print(i) #print(len(liste_fig)) # gf.afficher_fig(porteuse_temp) # gf.afficher_fig(donneuse_temp) liste_fig=gf.en_double(liste_fig) liste_fig=gf.doublon(liste_fig) i+=1 #a chaque tour il faudrai enlever les figures en double et celle qui ont plusieur fois le meme cube return liste_fig
#g.objets_cubes[2].rotation("X", 1) #print (g.objets_cubes[2].L_faces) #print (g.objets_cubes[2].angle) print(Mut.Pos_libre(figure)) g.placer_cube((0, 0, 0), 24, figure, g.objets_cubes) print('coordonnees de 24 : ', g.objets_cubes[24].X, g.objets_cubes[24].Y, g.objets_cubes[24].Z) print('voisins de 24 : ', g.objets_cubes[24].L_voisins) gf.afficher_fig(figure) print(Mut.Pos_libre(figure)) g.placer_cube((1, 1, 0), 20, figure, g.objets_cubes) print('coordonnees de 20 : ', g.objets_cubes[20].X, g.objets_cubes[20].Y, g.objets_cubes[20].Z) print('coordonnees de 24 : ', g.objets_cubes[24].X, g.objets_cubes[24].Y, g.objets_cubes[24].Z) print('voisins de 20 : ', g.objets_cubes[20].L_voisins) print('voisins de 24 : ', g.objets_cubes[24].L_voisins) g.MAJ_L_voisins(g.objets_cubes, 24, figure) print('voisins de 24 : ', g.objets_cubes[24].L_voisins) gf.afficher_fig(figure) print(Me.nb_cube(figure)) print(Mut.Pos_libre(figure))