Saltar al contenido principal

env

Entorno del Cubo de Rubik

Este módulo define la clase Cube3 que representa un Cubo de Rubik 3x3x3 en la Métrica de Medios Giros.

Clase: Cube3: Una clase para el Cubo de Rubik 3x3x3 en la Métrica de Medios Giros.

Cube3

class Cube3()

Una clase para el Cubo de Rubik 3x3x3 en la Métrica de Medios Giros (HTM).

Esta clase proporciona métodos para manipular y resolver un Cubo de Rubik 3x3x3 utilizando la métrica de medios giros. Define los estados inicial y objetivo del cubo, los movimientos disponibles y los métodos para la manipulación del cubo.

Representación:

Orden de las caras:

   0
2 5 3 4
1

Orden de las pegatinas en cada cara:

  2   5   8
1 4 7
[0] 3 6

Índices del estado (cada uno comenzando con 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

Colores (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

Atributos:

  • state ndarray - Estado actual del cubo representado como un arreglo de colores de pegatinas.
  • GOAL ndarray - Estado objetivo fijo representado como un arreglo de colores de pegatinas.
  • moves list - Lista de posibles movimientos del cubo (cara y dirección).
  • allow_wide bool - Bandera que indica si se permiten movimientos amplios.
  • sticker_target dict - Un diccionario que mapea cadenas de movimientos a listas de índices de pegatinas objetivo.
  • sticker_source dict - Un diccionario que mapea cadenas de movimientos a listas de índices de pegatinas fuente.
  • sticker_target_ix ndarray - Un arreglo numpy 2D que mapea índices de movimientos a índices de pegatinas objetivo para movimientos normales.
  • sticker_source_ix ndarray - Un arreglo numpy 2D que mapea índices de movimientos a índices de pegatinas fuente para movimientos normales.
  • sticker_target_ix_wide ndarray - Un arreglo numpy 2D que mapea índices de movimientos a índices de pegatinas objetivo para movimientos amplios.
  • sticker_source_ix_wide ndarray - Un arreglo numpy 2D que mapea índices de movimientos a índices de pegatinas fuente para movimientos amplios.

show

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

Muestra el estado actual del cubo.

Argumentos:

  • flat bool - Si se debe mostrar el estado en forma plana.
  • palette list - Lista de colores para representar las pegatinas.

validate

def validate(state=None, centered=True)

Valida el estado y la disposición del cubo.

Argumentos:

  • centered bool - Si los centros deben estar centrados o no.

Lanza:

  • ValueError - Si el estado o la disposición del cubo es inválida.

reset

def reset()

Restablece el estado del cubo al estado resuelto.

reset_axes

def reset_axes()

Restablece los índices de color de acuerdo con los colores de los centros dados. Útil cuando se aplican movimientos gruesos o cuando se especifica una perspectiva inesperada.

is_solved

def is_solved()

Verifica si el cubo está en el estado resuelto.

finger

def finger(move)

Aplica un solo movimiento en el estado del cubo utilizando una cadena de movimiento.

Argumentos:

  • move str - Cadena de movimiento en notación HTM.

finger_ix

def finger_ix(ix)

Aplica un solo movimiento utilizando el índice de movimiento para una ejecución más rápida.

Argumentos:

  • ix int - Índice del movimiento.

apply_scramble

def apply_scramble(scramble)

Aplica una secuencia de movimientos (mezcla) al estado del cubo.

Argumentos:

  • scramble str or list - Secuencia de movimientos en notación HTM o lista.

__vectorize_moves

def __vectorize_moves()

Vectoriza las operaciones de reemplazo de grupos de pegatinas para un cálculo más rápido. Este método define self.sticker_target y self.sticker_source para administrar los colores de las pegatinas (el objetivo se reemplaza por la fuente). Definen índices de pegatinas objetivo y fuente para que los movimientos puedan ser vectorizados.

Dataset

class Dataset(torch.utils.data.Dataset)

Clase de conjunto de datos pseudo para generar infinitamente mezclas aleatorias.

Ejemplo
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)

Crea una instancia de DataLoader para generar mezclas aleatorias del Cubo de Rubik.

Argumentos:

  • batch_size int - El número de muestras por lote.
  • num_workers int, opcional - El número de procesos de trabajadores a utilizar para la carga de datos. Por defecto, es el número de núcleos de CPU o 32 (más allá del cual el retorno disminuirá), lo que sea menor.
  • max_depth int, opcional - La profundidad máxima de las mezclas. Por defecto es 20.
  • **dl_kwargs - Argumentos de palabra clave adicionales para pasar al constructor de DataLoader.

Retorna:

  • torch.utils.data.DataLoader - Una instancia de DataLoader que genera lotes de mezclas aleatorias.