Przejdź do głównej zawartości

env

Środowisko kostki Rubika

Ten moduł definiuje klasę Cube3 reprezentującą kostkę Rubika 3x3x3 w metryce Half-Turn.

Klasa: Cube3: Klasa dla kostki Rubika 3x3x3 w metryce Half-Turn.

Cube3

class Cube3()

Klasa dla kostki Rubika 3x3x3 w metryce Half-Turn (HTM).

Ta klasa dostarcza metody do manipulacji i rozwiązywania kostki Rubika 3x3x3 przy użyciu metryki half-turn. Definiuje początkowy i docelowy stan kostki, dostępne ruchy oraz metody do manipulacji kostką.

Reprezentacja:

Kolejność ścian:

   0
2 5 3 4
1

Kolejność naklejek na każdej ścianie:

  2   5   8
1 4 7
[0] 3 6

Indeksy stanu (każdy zaczynający się od 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 15

Kolory (indeksy // 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

Atrybuty:

  • state ndarray - Aktualny stan kostki reprezentowany jako tablica kolorów naklejek.
  • GOAL ndarray - Ustalony stan docelowy reprezentowany jako tablica kolorów naklejek.
  • moves list - Lista możliwych ruchów kostki (ściana i kierunek).
  • allow_wide bool - Flaga wskazująca, czy szerokie ruchy są dozwolone.
  • sticker_target dict - Słownik mapujący ciągi ruchów na listy indeksów naklejek docelowych.
  • sticker_source dict - Słownik mapujący ciągi ruchów na listy indeksów naklejek źródłowych.
  • sticker_target_ix ndarray - Dwuwymiarowa tablica numpy mapująca indeksy ruchów na indeksy naklejek docelowych dla normalnych ruchów.
  • sticker_source_ix ndarray - Dwuwymiarowa tablica numpy mapująca indeksy ruchów na indeksy naklejek źródłowych dla normalnych ruchów.
  • sticker_target_ix_wide ndarray - Dwuwymiarowa tablica numpy mapująca indeksy ruchów na indeksy naklejek docelowych dla szerokich ruchów.
  • sticker_source_ix_wide ndarray - Dwuwymiarowa tablica numpy mapująca indeksy ruchów na indeksy naklejek źródłowych dla szerokich ruchów.

show

def show(flat=False, palette=["white", "yellow", "orange1", "red", "blue", "green"])

Wyświetla aktualny stan kostki.

Argumenty:

  • flat bool - Czy wyświetlić stan w formie płaskiej.
  • palette list - Lista kolorów do reprezentacji naklejek.

validate

def validate(state=None, centered=True)

Sprawdza poprawność stanu i ułożenia kostki.

Argumenty:

  • centered bool - Czy środki powinny być wyśrodkowane czy nie.

Podnosi:

  • ValueError - Jeśli stan lub ułożenie kostki jest nieprawidłowe.

reset

def reset()

Resetuje stan kostki do stanu rozwiązanego.

reset_axes

def reset_axes()

Resetuje indeksy kolorów zgodnie z podanymi kolorami środków. Przydatne, gdy stosowane są grube ruchy lub gdy podana jest nieoczekiwana perspektywa.

is_solved

def is_solved()

Sprawdza, czy kostka jest w stanie rozwiązanym.

finger

def finger(move)

Wykonuje pojedynczy ruch na stanie kostki przy użyciu ciągu ruchu.

Argumenty:

  • move str - Ciąg ruchu w notacji HTM.

finger_ix

def finger_ix(ix)

Wykonuje pojedynczy ruch przy użyciu indeksu ruchu w celu szybszego wykonania.

Argumenty:

  • ix int - Indeks ruchu.

apply_scramble

def apply_scramble(scramble)

Stosuje sekwencję ruchów (scramble) do stanu kostki.

Argumenty:

  • scramble str lub list - Sekwencja ruchów w notacji HTM lub lista.

__vectorize_moves

def __vectorize_moves()

Wektoryzuje operacje zastępowania grup naklejek w celu szybszego obliczania. Ta metoda definiuje self.sticker_target i self.sticker_source do zarządzania kolorami naklejek (docelowy jest zastępowany przez źródłowy). Definiują one indeksy naklejek docelowych i źródłowych, tak aby ruchy mogły być zwektoryzowane.

Dataset

class Dataset(torch.utils.data.Dataset)

Pseudo klasa zbioru danych do nieskończonego generowania losowych pomieszań.

Przykład
batch_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)

Tworzy instancję DataLoader do generowania losowych pomieszań kostki Rubika.

Argumenty:

  • batch_size int - Liczba próbek na partię.
  • num_workers int, opcjonalnie - Liczba procesów roboczych do użycia przy ładowaniu danych. Domyślnie jest to liczba rdzeni CPU lub 32 (powyżej której zwrot będzie maleć), w zależności od tego, która wartość jest mniejsza.
  • max_depth int, opcjonalnie - Maksymalna głębokość pomieszań. Domyślnie 20.
  • **dl_kwargs - Dodatkowe argumenty słów kluczowych do przekazania do konstruktora DataLoader.

Zwraca:

  • torch.utils.data.DataLoader - Instancja DataLoader, która generuje partie losowych pomieszań.