Ugrás a fő tartalomhoz

Rubik-kocka környezet

Ez a modul definiálja a Cube3 osztályt, amely egy 3x3x3-as Rubik-kockát reprezentál a félegyfordulós metrika (Half-Turn Metric) szerint.

Osztály: Cube3: Egy osztály a 3x3x3-as Rubik-kockához a félegyfordulós metrika (Half-Turn Metric) szerint.

Cube3

class Cube3()

Egy osztály a 3x3x3-as Rubik-kockához a félegyfordulós metrika (HTM) szerint.

Ez az osztály metódusokat biztosít egy 3x3x3-as Rubik-kocka manipulálására és megoldására a félegyfordulós metrika használatával. Definiálja a kocka kezdeti és célállapotát, az elérhető lépéseket, valamint a kocka manipulálására szolgáló metódusokat.

Reprezentáció:

Oldalak sorrendje:

   0
2 5 3 4
1

Matricák sorrendje minden oldalon:

  2   5   8
1 4 7
[0] 3 6

Állapotindexek (mindegyik 9 * (n-1)-gyel kezdődik):

                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

Színek (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

Attribútumok:

  • state ndarray - A kocka jelenlegi állapota, matricaszin-tömbként reprezentálva.
  • GOAL ndarray - A rögzített célállapot, matricaszin-tömbként reprezentálva.
  • moves list - A lehetséges kockamozdulatok listája (oldal és irány).
  • allow_wide bool - Jelző, amely azt jelzi, hogy a széles (wide) mozdulatok engedélyezettek-e.
  • max_depth int - A maximális keverési mélység az adatgenerátor számára.
  • sticker_target dict - Egy szótár, amely a mozdulat-sztringeket a cél matrica indexek listájához rendeli.
  • sticker_source dict - Egy szótár, amely a mozdulat-sztringeket a forrás matrica indexek listájához rendeli.
  • sticker_target_ix ndarray - Egy 2D numpy tömb, amely a mozdulatindexeket a normál mozdulatok cél matrica indexeihez rendeli.
  • sticker_source_ix ndarray - Egy 2D numpy tömb, amely a mozdulatindexeket a normál mozdulatok forrás matrica indexeihez rendeli.
  • sticker_target_ix_wide ndarray - Egy 2D numpy tömb, amely a mozdulatindexeket a széles (wide) mozdulatok cél matrica indexeihez rendeli.
  • sticker_source_ix_wide ndarray - Egy 2D numpy tömb, amely a mozdulatindexeket a széles (wide) mozdulatok forrás matrica indexeihez rendeli.

show

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

Megjeleníti a kocka jelenlegi állapotát.

Argumentumok:

  • flat bool - Hogy az állapotot kiterített formában jelenítse-e meg.
  • palette list - A matricák reprezentálására szolgáló színek listája.

validate

def validate(
state=None,
centered=True
)

Ellenőrzi a kocka állapotát és elrendezését.

Argumentumok:

  • centered bool - Hogy a középső elemeknek középen kell-e lenniük vagy sem.

Kivételek:

  • ValueError - Ha a kocka állapota vagy elrendezése érvénytelen.

reset

def reset()

Visszaállítja a kocka állapotát a megoldott állapotba.

reset_axes

def reset_axes()

Visszaállítja a színindexeket a megadott középső színeknek megfelelően. Hasznos, ha vastag (fat) mozdulatokat alkalmaznak, vagy ha váratlan perspektíva van megadva.

is_solved

def is_solved()

Ellenőrzi, hogy a kocka megoldott állapotban van-e.

finger

def finger(move)

Egyetlen mozdulatot alkalmaz a kocka állapotára egy mozdulat-sztring segítségével.

Argumentumok:

  • move str - Mozdulat-sztring HTM jelölésben.

finger_ix

def finger_ix(ix)

Egyetlen mozdulatot alkalmaz az indexe segítségével a .finger-nél gyorsabb végrehajtás érdekében. Ellenőrzi, hogy a mozdulatindex egy normál (ix < 18) vagy egy széles (wide) mozdulatnak felel-e meg, és az állapotváltozást előre kiszámított indextömbök segítségével alkalmazza.

Argumentumok:

  • ix int - Az alkalmazandó mozdulat indexe.

apply_scramble

def apply_scramble(scramble)

Egy mozdulatsorozatot (keverést) alkalmaz a kocka állapotára.

Argumentumok:

  • scramble str vagy list - Mozdulatsorozat HTM jelölésben vagy listaként.

__iter__

def __iter__()

Létrehoz egy végtelen generátort a kevert állapotokból és megoldási sorozatokból.

Ez a metódus modelltanításra szolgál. Minden iterációban egy új, véletlenszerű, max_depth hosszúságú keverést generál, elkerülve a triviális mozdulatsorozatokat. Visszaadja az állapotok történetét és a megfelelő mozdulatot, amely az egyes állapotokhoz vezetett.

Hozam:

tuple[np.ndarray, np.ndarray]: Egy tuple, amely a következőket tartalmazza:

  • X (np.ndarray): A kockaállapotok (max_depth, 54) méretű tömbje.
  • y (np.ndarray): Az állapotokat generáló mozdulatindexek (max_depth,) méretű tömbje.

__vectorize_moves

def __vectorize_moves()

Vektorizálja a matricacsoport-cserélési műveleteket a gyorsabb számítás érdekében. Ez a metódus definiálja a self.sticker_target és self.sticker_source attribútumokat a matricaszin-kezeléshez (a cél helyére a forrás kerül). Ezek definiálják a cél- és forrásmatricák indexeit, hogy a mozdulatok vektorizálhatók legyenek.

Dataset

class Dataset(torch.utils.data.Dataset)

Pszeudo adathalmaz osztály, amely végtelenül generál véletlenszerű keveréseket.

Példa
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
)

Létrehoz egy DataLoader példányt véletlenszerű Rubik-kocka keverések generálásához.

Argumentumok:

  • batch_size int - A minták száma egy kötegben (batch).
  • num_workers int, opcionális - Az adatbetöltéshez használandó worker folyamatok száma. Alapértelmezés szerint a CPU magok száma vagy 32 (amely felett a hozam csökken), attól függően, melyik a kisebb.
  • max_depth int, opcionális - A keverések maximális mélysége. Alapértelmezés szerint 20.
  • **dl_kwargs - További kulcsszavas argumentumok, amelyeket a DataLoader konstruktorának ad át.

Visszatérési érték:

  • torch.utils.data.DataLoader - Egy DataLoader példány, amely véletlenszerű keverések kötegeit adja vissza.