Esempio n. 1
0
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
Esempio n. 2
0
def croisement(porteuse_temp, donneuse_temp, dico_cube):
    liste_cube_donn = gf.liste_cube_fig(donneuse_temp)  #liste_cube_fig
    liste_pos_por = Mut.Pos_libre(porteuse_temp)
    ajouter = False
    cpt_c = 0
    cpt_pos = 0
    cpt_rot_x = 0
    cpt_rot_y = 0
    cpt_rot_z = 0

    while (not ajouter and cpt_c < len(liste_cube_donn)):
        cube = dico_cube[liste_cube_donn[cpt_c]]
        while (not ajouter and cpt_pos < len(liste_pos_por)):
            while (not ajouter and cpt_rot_x < 3):
                while (not ajouter and cpt_rot_y < 3):
                    while (not ajouter and cpt_rot_z < 3):
                        ajouter = g.placer_cube(liste_pos_por[cpt_pos],
                                                liste_cube_donn[cpt_c],
                                                porteuse_temp, dico_cube)
                        cube.rotation('Z', 1)
                        cpt_rot_z += 1
                    cube.rotation('Y', 1)
                    cpt_rot_y += 1
                cube.rotation('X', 1)
                cpt_rot_x += 1
            cpt_pos += 1
        cpt_c += 1
    return ajouter  #croisement fait ou non ?
Esempio n. 3
0
def mutation(figure, liste_fig, dico_cube):
    """
	fait une mutation sur la figure
	"""

    cube_m = R.choice(gf.liste_cube_fig(figure))  #int
    g.retirer_cube_C(cube_m, figure, dico_cube)
    axe = R.choice(['X', 'Y', 'Z'])
    dico_cube[cube_m].rotation(axe, 2)

    place = False
    cpt = 0
    position = Pos_libre(figure)

    while (not place and cpt < len(position)):
        place = g.placer_cube(position[cpt], cube_m, figure, dico_cube)
        cpt += 1

    if (not place):
        liste_fig.append(gf.init_fig(o.hauteur, o.largeur, o.longueur))
        g.placer_cube((0, 0, 0), cube_m, liste_fig[-1], dico_cube)
Esempio n. 4
0
import definition_cube as d
import ordres as o
import gestion_cubes as g

print g.faces_cubes
print g.objets_cubes
print g.objets_cubes[2].L_faces
print g.Figure

g.objets_cubes[2].rotation("X", 1)

print g.objets_cubes[2].L_faces
print g.objets_cubes[2].angle

g.placer_cube((1, 1, 1), 24, g.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)
g.afficher_fig(g.Figure)

g.placer_cube((1, 1, 0), 20, g.Figure, g.objets_cubes)

print('coordonnees de 20 : ', g.objets_cubes[20].X, g.objets_cubes[20].Y,
      g.objets_cubes[20].Z)
print('voisins de 20 : ', g.objets_cubes[20].L_voisins)
print('voisins de 24 : ', g.objets_cubes[24].L_voisins)
g.afficher_fig(g.Figure)

g.placer_cube((1, 2, 0), 7, g.Figure, g.objets_cubes)
Esempio n. 5
0
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
Esempio n. 6
0
import mutation as Mut

figure = gf.init_fig(o.hauteur, o.largeur, o.longueur)
#print (g.faces_cubes)
#print (g.objets_cubes)
#print (g.objets_cubes[2].L_faces)
#print (gf.Figure)

#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)