env
Environnement du Rubik's Cube
Ce module définit la classe Cube3 représentant un Rubik's Cube 3x3x3 dans la métrique Half-Turn.
Classe :
Cube3
: Une classe pour le Rubik's Cube 3x3x3 dans la métrique Half-Turn.
Cube3
class Cube3()
Une classe pour le Rubik's Cube 3x3x3 dans la métrique Half-Turn (HTM).
Cette classe fournit des méthodes pour manipuler et résoudre un Rubik's Cube 3x3x3 en utilisant la métrique half-turn. Elle définit les états initial et final du cube, les mouvements disponibles et les méthodes de manipulation du cube.
Représentation :
Ordre des faces :
0
2 5 3 4
1Ordre des autocollants sur chaque face :
2 5 8
1 4 7
[0] 3 6Indices de l'état (chacun commençant par
9 * (n-1)
) :2 5 8
1 4 7
[0] 3 6
20 23 26 47 50 53 29 32 35 38 41 44
19 22 25 46 49 52 28 31 34 37 40 43
[18] 21 24 [45] 48 51 [27] 30 33 [36] 39 42
11 14 17
10 13 16
[9] 12 15Couleurs (
indices // 9
) :0 0 0
0 0 0
0 0 0
2 2 2 5 5 5 3 3 3 4 4 4
2 2 2 5 5 5 3 3 3 4 4 4
2 2 2 5 5 5 3 3 3 4 4 4
1 1 1
1 1 1
1 1 1
Attributs :
state
ndarray - État actuel du cube représenté par un tableau des couleurs des autocollants.GOAL
ndarray - État final fixe représenté par un tableau des couleurs des autocollants.moves
list - Liste des mouvements possibles du cube (face et direction).allow_wide
bool - Indicateur indiquant si les mouvements larges sont autorisés.sticker_target
dict - Un dictionnaire associant les chaînes de mouvements aux listes d'indices d'autocollants cibles.sticker_source
dict - Un dictionnaire associant les chaînes de mouvements aux listes d'indices d'autocollants sources.sticker_target_ix
ndarray - Un tableau numpy 2D associant les indices de mouvements aux indices d'autocollants cibles pour les mouvements normaux.sticker_source_ix
ndarray - Un tableau numpy 2D associant les indices de mouvements aux indices d'autocollants sources pour les mouvements normaux.sticker_target_ix_wide
ndarray - Un tableau numpy 2D associant les indices de mouvements aux indices d'autocollants cibles pour les mouvements larges.sticker_source_ix_wide
ndarray - Un tableau numpy 2D associant les indices de mouvements aux indices d'autocollants sources pour les mouvements larges.
show
def show(flat=False, palette=["white", "yellow", "orange1", "red", "blue", "green"])
Affiche l'état actuel du cube.
Arguments :
flat
bool - Indique s'il faut afficher l'état sous forme plate.palette
list - Liste des couleurs pour représenter les autocollants.
validate
def validate(state=None, centered=True)
Valide l'état et l'arrangement du cube.
Arguments :
centered
bool - Indique si les centres doivent être centrés ou non.
Lève :
ValueError
- Si l'état ou l'arrangement du cube est invalide.
reset
def reset()
Réinitialise l'état du cube à l'état résolu.
reset_axes
def reset_axes()
Réinitialise les indices de couleurs en fonction des couleurs des centres données. Utile lorsque des mouvements larges sont appliqués ou lorsqu'une perspective inattendue est spécifiée.
is_solved
def is_solved()
Vérifie si le cube est dans l'état résolu.
finger
def finger(move)
Applique un seul mouvement sur l'état du cube en utilisant une chaîne de mouvement.
Arguments :
move
str - Chaîne de mouvement en notation HTM.
finger_ix
def finger_ix(ix)
Applique un seul mouvement en utilisant l'indice de mouvement pour une exécution plus rapide.
Arguments :
ix
int - Indice du mouvement.
apply_scramble
def apply_scramble(scramble)
Applique une séquence de mouvements (mélange) à l'état du cube.
Arguments :
scramble
str or list - Séquence de mouvements en notation HTM ou liste.
__vectorize_moves
def __vectorize_moves()
Vectorise les opérations de remplacement des groupes d'autocollants pour un calcul plus rapide.
Cette méthode définit self.sticker_target
et self.sticker_source
pour gérer les couleurs des autocollants (la cible est remplacée par la source).
Ils définissent les indices des autocollants cibles et sources afin que les mouvements puissent être vectorisés.
Dataset
class Dataset(torch.utils.data.Dataset)
Classe de pseudo-dataset pour générer infiniment des mélanges aléatoires.
Exemplebatch_size = 1024
dl = get_dataloader(batch_size)
for i, (batch_x, batch_y) in zip(range(1000), dl):
batch_x, batch_y = batch_x.to(device), batch_y.device().reshape(-1)
get_dataloader
def get_dataloader(batch_size, num_workers=min(os.cpu_count(), 32), max_depth=20, **dl_kwargs)
Crée une instance de DataLoader pour générer des mélanges aléatoires de Rubik's Cube.
Arguments :
batch_size
int - Le nombre d'échantillons par lot.num_workers
int, optionnel - Le nombre de processus de travail à utiliser pour le chargement des données. Par défaut, le nombre de cœurs CPU ou 32 (au-delà duquel le retour diminuera), selon la valeur la plus petite.max_depth
int, optionnel - La profondeur maximale des mélanges. Par défaut, 20.**dl_kwargs
- Arguments mot-clé supplémentaires à passer au constructeur de DataLoader.
Retourne :
torch.utils.data.DataLoader
- Une instance de DataLoader qui génère des lots de mélanges aléatoires.