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
Exemple #2
0
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
Exemple #3
0
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
Exemple #5
0
#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))