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
1Kolejność naklejek na każdej ścianie:
2 5 8
1 4 7
[0] 3 6Indeksy 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 15Kolory (
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ładbatch_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ń.