メインコンテンツまでスキップ

env

ルービックキューブ環境

このモジュールでは、ハーフターンメトリックにおける3x3x3ルービックキューブを表すCube3クラスを定義しています。

クラス: Cube3: ハーフターンメトリックにおける3x3x3ルービックキューブのクラス。

Cube3

class Cube3()

ハーフターンメトリック(HTM)における3x3x3ルービックキューブのクラス。

このクラスは、ハーフターンメトリックを使用して3x3x3ルービックキューブを操作および解くためのメソッドを提供します。 キューブの初期状態とゴール状態、利用可能な動き、およびキューブ操作のためのメソッドを定義します。

表現:

面の順序:

   0
2 5 3 4
1

各面のステッカーの順序:

  2   5   8
1 4 7
[0] 3 6

状態のインデックス (それぞれ 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

(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

属性:

  • state ndarray - ステッカーの色の配列として表される現在のキューブの状態。
  • GOAL ndarray - ステッカーの色の配列として表される固定のゴール状態。
  • moves list - 可能なキューブの動き(面と方向)のリスト。
  • allow_wide bool - ワイドムーブを許可するかどうかを示すフラグ。
  • sticker_target dict - 動きの文字列をターゲットステッカーのインデックスのリストにマッピングする辞書。
  • sticker_source dict - 動きの文字列をソースステッカーのインデックスのリストにマッピングする辞書。
  • sticker_target_ix ndarray - 動きのインデックスを通常の動きのターゲットステッカーのインデックスにマッピングする2次元のNumPy配列。
  • sticker_source_ix ndarray - 動きのインデックスを通常の動きのソースステッカーのインデックスにマッピングする2次元のNumPy配列。
  • sticker_target_ix_wide ndarray - 動きのインデックスをワイドムーブのターゲットステッカーのインデックスにマッピングする2次元のNumPy配列。
  • sticker_source_ix_wide ndarray - 動きのインデックスをワイドムーブのソースステッカーのインデックスにマッピングする2次元のNumPy配列。

show

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

キューブの現在の状態を表示します。

引数:

  • flat bool - 状態をフラットな形式で表示するかどうか。
  • palette list - ステッカーを表現するための色のリスト。

validate

def validate(state=None, centered=True)

キューブの状態と配置を検証します。

引数:

  • centered bool - センターがセンタリングされているべきかどうか。

例外:

  • ValueError - キューブの状態または配置が無効な場合。

reset

def reset()

キューブの状態を解かれた状態にリセットします。

reset_axes

def reset_axes()

与えられたセンターの色に従って色のインデックスをリセットします。 ファットムーブが適用された場合や、予期しない視点が指定された場合に便利です。

is_solved

def is_solved()

キューブが解かれた状態にあるかどうかを確認します。

finger

def finger(move)

HTM表記の動きの文字列を使用して、キューブの状態に単一の動きを適用します。

引数:

  • move str - HTM表記の動きの文字列。

finger_ix

def finger_ix(ix)

より高速な実行のために、動きのインデックスを使用して単一の動きを適用します。

引数:

  • ix int - 動きのインデックス。

apply_scramble

def apply_scramble(scramble)

一連の動き(スクランブル)をキューブの状態に適用します。

引数:

  • scramble str or list - HTM表記またはリストでの一連の動き。

__vectorize_moves

def __vectorize_moves()

より高速な計算のために、ステッカーグループの置換操作をベクトル化します。 このメソッドは、ステッカーの色を管理するために self.sticker_targetself.sticker_source を定義します(ターゲットはソースに置き換えられます)。 これらは、動きをベクトル化できるように、ターゲットとソースのステッカーのインデックスを定義します。

Dataset

class Dataset(torch.utils.data.Dataset)

無限にランダムなスクランブルを生成するための疑似データセットクラス。

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)

ランダムなルービックキューブのスクランブルを生成するためのDataLoaderインスタンスを作成します。

引数:

  • batch_size int - バッチごとのサンプル数。
  • num_workers int, optional - データ読み込みに使用するワーカープロセスの数。 デフォルトでは、CPUコアの数または32(これを超えるとリターンが減少する)のいずれか小さい方。
  • max_depth int, optional - スクランブルの最大深度。デフォルトは20。
  • **dl_kwargs - DataLoaderコンストラクタに渡す追加のキーワード引数。

戻り値:

  • torch.utils.data.DataLoader - ランダムなスクランブルのバッチを生成するDataLoaderインスタンス。