env
Rubik's Cube Umgebung
Dieses Modul definiert die Klasse Cube3, die einen 3x3x3 Rubik's Cube in der Half-Turn Metrik repräsentiert.
Klasse:
Cube3
: Eine Klasse für den 3x3x3 Rubik's Cube in der Half-Turn Metrik.
Cube3
class Cube3()
Eine Klasse für den 3x3x3 Rubik's Cube in der Half-Turn Metrik (HTM).
Diese Klasse stellt Methoden zur Manipulation und Lösung eines 3x3x3 Rubik's Cube unter Verwendung der Half-Turn Metrik bereit. Sie definiert den Anfangs- und Zielzustand des Würfels, verfügbare Züge und Methoden zur Würfelmanipulation.
Repräsentation:
Reihenfolge der Flächen:
0
2 5 3 4
1Reihenfolge der Sticker auf jeder Fläche:
2 5 8
1 4 7
[0] 3 6Indizes des Zustands (jeweils beginnend mit
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 15Farben (
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
Attribute:
state
ndarray - Aktueller Würfelzustand, dargestellt als Array von Stickerfarben.GOAL
ndarray - Fester Zielzustand, dargestellt als Array von Stickerfarben.moves
list - Liste der möglichen Würfelzüge (Fläche und Richtung).allow_wide
bool - Flag, das angibt, ob weite Züge erlaubt sind.sticker_target
dict - Ein Dictionary, das Zugstrings auf Listen von Ziel-Stickerindizes abbildet.sticker_source
dict - Ein Dictionary, das Zugstrings auf Listen von Quell-Stickerindizes abbildet.sticker_target_ix
ndarray - Ein 2D-NumPy-Array, das Zugindizes auf Ziel-Stickerindizes für normale Züge abbildet.sticker_source_ix
ndarray - Ein 2D-NumPy-Array, das Zugindizes auf Quell-Stickerindizes für normale Züge abbildet.sticker_target_ix_wide
ndarray - Ein 2D-NumPy-Array, das Zugindizes auf Ziel-Stickerindizes für weite Züge abbildet.sticker_source_ix_wide
ndarray - Ein 2D-NumPy-Array, das Zugindizes auf Quell-Stickerindizes für weite Züge abbildet.
show
def show(flat=False, palette=["white", "yellow", "orange1", "red", "blue", "green"])
Zeigt den aktuellen Zustand des Würfels an.
Argumente:
flat
bool - Ob der Zustand in flacher Form angezeigt werden soll.palette
list - Liste der Farben zur Darstellung der Sticker.
validate
def validate(state=None, centered=True)
Überprüft den Zustand und die Anordnung des Würfels.
Argumente:
centered
bool - Ob die Zentren zentriert sein sollen oder nicht.
Wirft:
ValueError
- Wenn der Zustand oder die Anordnung des Würfels ungültig ist.
reset
def reset()
Setzt den Würfelzustand auf den gelösten Zustand zurück.
reset_axes
def reset_axes()
Setzt die Farbindizes entsprechend der angegebenen Mittenfarben zurück. Nützlich, wenn breite Züge angewendet werden oder eine unerwartete Perspektive angegeben wird.
is_solved
def is_solved()
Prüft, ob sich der Würfel im gelösten Zustand befindet.
finger
def finger(move)
Wendet einen einzelnen Zug auf den Würfelzustand unter Verwendung des Zugstrings an.
Argumente:
move
str - Zugstring in HTM-Notation.
finger_ix
def finger_ix(ix)
Wendet einen einzelnen Zug unter Verwendung des Zugindex für eine schnellere Ausführung an.
Argumente:
ix
int - Index des Zuges.
apply_scramble
def apply_scramble(scramble)
Wendet eine Folge von Zügen (Scramble) auf den Würfelzustand an.
Argumente:
scramble
str or list - Folge von Zügen in HTM-Notation oder als Liste.
__vectorize_moves
def __vectorize_moves()
Vektorisiert die Ersetzungsoperationen der Stickergruppen für eine schnellere Berechnung.
Diese Methode definiert self.sticker_target
und self.sticker_source
, um die Stickerfarben zu verwalten (Ziel wird durch Quelle ersetzt).
Sie definieren Indizes von Ziel- und Quellstickern, so dass die Züge vektorisiert werden können.
Dataset
class Dataset(torch.utils.data.Dataset)
Pseudo-Datensatzklasse, um unendlich zufällige Scrambles zu erzeugen.
Beispielbatch_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)
Erstellt eine DataLoader-Instanz zur Erzeugung zufälliger Rubik's Cube Scrambles.
Argumente:
batch_size
int - Die Anzahl der Samples pro Batch.num_workers
int, optional - Die Anzahl der Worker-Prozesse für das Laden der Daten. Standardmäßig die Anzahl der CPU-Kerne oder 32 (darüber hinaus nimmt der Ertrag ab), je nachdem, was kleiner ist.max_depth
int, optional - Die maximale Tiefe der Scrambles. Standardwert ist 20.**dl_kwargs
- Zusätzliche Schlüsselwortargumente, die an den Konstruktor von DataLoader übergeben werden.
Rückgabe:
torch.utils.data.DataLoader
- Eine DataLoader-Instanz, die Batches von zufälligen Scrambles liefert.