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_target
と self.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インスタンス。