HTReqを用いた効率的な探索方法
こんにちは、うえしゅうです。
FMCの解法であるDomino Reduction(DR)にはHTReq(HTR equivalence, HTR等価)という概念があり、これを知ることで普通に探索するよりも短い時間で効率的に探索することができます。
今回はこのHTReqの説明とそれを使った効率的な探索方法について解説していきます。
HTReqの定義
まず、そもそもHTReqとは何のことなのかを説明します。
スクランブル:
R' U' F D2 R' L' U2 F' R2 L' D R2 F L2 B' U2 B' R2 F2 R2 U2 B2 D R' U' F
(U' B2 R2 F) // EO①
(U' F2 L2 F) // EO②
インバースで見つかったこの2つのEOですが、EO①からHalf TurnのみでEO②と完全に同一な状態にすることが可能です。
手元にEO①の状態のキューブとEO②の状態のキューブをそれぞれ用意してみてください。次に、EO①のキューブをインバース状態のまま「R2 F2 B2 L2」と回してみてください。するとEO①のキューブがEO②のキューブと完全に同一な状態になっていると思います。
もう一つ例を出します。
スクランブル:
R' U' F L' U2 R2 D2 B2 R U2 L D2 L' U2 R' F U2 L' U' L2 F' L U2 B2 R' U' F
F2 U' D L // EO, RZP
D2 R2 U F' D2 F // DR①
F2 U' D L // EO, RZP
D2 R2 U B' L2 B // DR②
これについても、DR①からHTのみでDR②と完全に同一な状態にすることが可能です。
手元にDR①の状態のキューブとDR②の状態のキューブをそれぞれ用意してみてください。次に、DR①のキューブを「L2 F2 D2 F2 L2 F2 D2 F2」と回してみてください。するとDR①のキューブがDR②のキューブと完全に同一な状態になっていると思います。
このように、ある2つの部分的な解法があった時、片方からHTのみでもう片方の状態に遷移できるような2つの解法を「HTR等価である」と呼びます。
HTR等価は英語だとHTR equivalence、またはその略称のHTReqと呼ばれます。本記事では今後はHTReqと呼ぶことにします。
HTReqは先程の2例のように、EOパートとDRパートで使われる概念です。
HTReqの性質
HTReqには以下のような性質があります。
- HTReqな2つの解法があった時、それぞれをスイッチした時のbadパーツの配置は完全に同じになる
まずはHTReqなEOの例を見てみましょう。
スクランブル:
R' U' F D2 R' L' U2 F' R2 L' D R2 F L2 B' U2 B' R2 F2 R2 U2 B2 D R' U' F
(U' B2 R2 F) // EO①
(U' F2 L2 F) // EO②
EO①とEO②をそれぞれノーマル側へスイッチしてみてDRのbadパーツの配置を確認してみましょう。完全に同じになっているはずです。
次にHTReqなDRの例を見てみましょう。
スクランブル:
R' U' F L' U2 R2 D2 B2 R U2 L D2 L' U2 R' F U2 L' U' L2 F' L U2 B2 R' U' F
F2 U' D L // EO, RZP
D2 R2 U F' D2 F // DR①
F2 U' D L // EO, RZP
D2 R2 U B' L2 B // DR②
DR①とDR②をそれぞれインバース側へスイッチしてみてbadパーツの配置を確認してみましょう。完全に同じになっているはずです。
ではなぜこのような性質を持つのか?簡潔に説明します。
スクランブル:
R' U' F D2 R' L' U2 F' R2 L' D R2 F L2 B' U2 B' R2 F2 R2 U2 B2 D R' U' F
(U' B2 R2 F) // EO①
R' // RZP
U L2 B2 U' D' L // DR
R2 U B2 U' R2 U B2 R2 U // HTR
D2 R2 F2 R2 F2 R2 // Finish
EO①からスイッチして回答を作ったとします。
EO②はEO①からHTで遷移可能なので、以下のように書き換えられます。
(U' F2 L2 F [R2 F2 B2 L2]) // EO②からHTのみでEO①にしたもの、すなわちEO①
R' // RZP
U L2 B2 U' D' L // DR
R2 U B2 U' R2 U B2 R2 U // HTR
D2 R2 F2 R2 F2 R2 // Finish
EO後のHT部分はHTR後の部分とみなせるので、以下のように書き換えられます。
(U' F2 L2 F) // EO②
R' // RZP
U L2 B2 U' D' L // DR
R2 U B2 U' R2 U B2 R2 U // HTR
D2 R2 F2 R2 F2 R2 [L2 B2 F2 R2] // Finish
この回答はEO②でEO①と全く同じHTRまでの回答を作っていると解釈でき、HTR後が違う状態になっていると解釈できます。つまり、HTReqな2つの解法はスイッチをすればHTRまでは全く同じ解法で解ける、ということを意味します。そのためEOやDRのbadパーツの配置が同じになるのです。
HTReqの確認方法
ある2つの解法がHTReqであるかどうかは次のように判別できます。
A B // 解法①
A C // 解法②
の場合、完成状態から[B' C]を回した状態がHTR状態なら①と②はHTReq
具体例を見てみましょう。
(U' B2 R2 F) // EO①
(U' F2 L2 F) // EO②
この2つのEOはU’以降が異なる回転となっており、それぞれ[B2 R2 F]と[F2 L2 F]です。
先程の判別方法のように、完成状態から[B2 R2 F]の逆を回した後に[F2 L2 F]を回してみましょう。つまり[F' R2 B2 F2 L2 F]です。
するとキューブはHTR状態になっています。つまりこの2つのEOはHTReqである、と判別できました。
HTReqなEOバリエーション
ここからはHTReqを実践でどう使っていくかについて解説していきます。まずはEOバリエーションから説明します。
主なバリエーション一覧
HTReqとなる主なEOバリエーションは以下の通りです。
- [HTのみの回転]+qt (全てではないことに注意!)
- 例1: B2 R2 FとF2 R2 F
- 例2: U2 R2 FとD2 L2 B
- F U2 FとB L2 B
- U F BとU' F B
- F U2 BとB L2 F
4手EOや5手EOに関しても、上記の3手EOに帰着するようなケースの場合HTReqとなります。
どのEOとどのEOがHTReqなのかについてはShota君がスプレッドシートにまとめているので、興味があれば確認してみてください。
効率的な探索方法
まず、HTReqなEOはスイッチするとbadパーツの配置がそれぞれ同じになるため、EOのスイッチは片方だけ行えば良いです。
また、HTReqなEOをスイッチして数手回しRZPを作った場合、それをもう一度スイッチしてバリエーション側に戻すと実質的にRZPが2つ生まれることになりとてもお得です。(DRM, ARMは変わらずbadパーツの配置だけ変わっている)
また、HTReqなEOをスイッチしてDRまで完成させた場合、HTReqなもう一方のEOでも同じDRができるため、2つのバリエーションのDRができることになります。この時、その2つのDRはsubsetとbadエッジの個数は全く同じになります。
スクランブル:
R' U' F D2 R' L' U2 F' R2 L' D R2 F L2 B' U2 B' R2 F2 R2 U2 B2 D R' U' F
(U' B2 R2 F) // EO①、HTReqな(U' F2 L2 F)もあり
R' // RZP
U L2 B2 U' D' L // DR
この例だと、HTReqなEOからスイッチし11手のDRを作りました。もう片方のEOでも同じDRは作れるので2つのバリエーションのDRができます。
これらのバリエーションの効率的な探索方法はDRの章で詳しく解説します。
全体的に言えることとしては、HTReqなEOはスイッチするとお得、と覚えておくといいと思います。
HTReqなDRバリエーション
次はRZP→DRの部分でのHTReqなバリエーションについて解説していきます。
主なバリエーション一覧
AR
ARで作ったDRのバリエーションは必ずHTReqになります。
例えばDR-4c2eのトリガーはFB軸EO, UD面DRだとR U2 RもしくはL F2 Lですが、これはARトリガーです。そのためこの2つそれぞれで作ったDRは必ずHTReqとなります。
UD回転の位置変更
スクランブル:
R' U F2 U' D // DR-4c4e
D' U F2 U' R // DR①
D U' B2 U' L // DR②
このRZPは解き方が2通り考えられますね。最初のUD回転をどちらに回すか、です。
このようにUDの向きや入る場所のみ異なるDRバリエーションはHTReqになることが多いです。
ただし必ずHTReqになるというわけでもないようなので、一旦HTReqかどうか確認してから進めることをおすすめします。
効率的な探索方法
HTReqなDRバリエーションの探索方法は大きく分けて3つあります。それぞれ説明します。
バリエーションがない側でqtを減らしてスイッチ
スクランブル:
R' U' F B2 R2 U2 L2 D' R2 B2 D2 R2 B2 F2 R B L B' F2 U L2 D' B D R' U' F
D' B' U R' // EO, RZP
(U2 L2 D B L2 B) // 4b2 2e, [F U2 F]のHTReqなバリエーションあり
F2 B2 U (B2 U) // HTR
このスクランブルはDR-4c2eでDRを作っているので、DRトリガー部分がHTReqになっており2バリエーションあります。
バリエーションのどちらか片方でスイッチし、[F2 B2 U]でqtを減らして4a1 4eにして更にバリエーション側にスイッチすると、[B L2 B]と[F U2 F]の2バリエーションそれぞれで異なる4a1 4eが得られます。今回の場合、[B L2 B]であれば2手でHTRが完成する形でした。
このように、バリエーションがない側にスイッチしてqtを減らした後にバリエーション側に戻りqtの減った状態を量産する、というのがHTReqなDRバリエーションの基本的な探索方法の1つです。
バリエーションがない側でHTRを作ってスイッチ
スクランブル:
R' U' F L' U2 R2 D2 B2 R U2 L D2 L' U2 R' F U2 L' U' L2 F' L U2 B2 R' U' F
F2 U' D L // EO, RZP
D2 R2 U F' D2 F // 4b2 6e, [B' L2 B]のHTReqなバリエーションあり
(U2 R2 U' L2 F2 B2 U) // HTR
F2 B2 U2 B2 L2 // LS
このスクランブルもDR-4c2eなのでHTReqなバリエーションがあります。
バリエーションがない側にスイッチして7手のHTRを作りました。このHTRを更にスイッチしてバリエーション側に戻すと、[F' D2 F]と[B' L2 B]の2バリエーションそれぞれで異なるHTRが得られます。今回の場合、[F' D2 F]の方から5手でLSまで持っていけました。
このように、バリエーションがない側にスイッチしてHTRをいくつか作った後バリエーション側に戻ると、HTRを簡単に量産することができます。
また、この方針に関するtipsですが、以下のように探索するとスイッチ回数が減って効率良くできます。
- HTReqなDRバリエーションの数 > スイッチ側で作ったHTRの数、だった場合
- HTRをバリエーション側にスイッチして探したほうがスイッチ回数が少なくなる
- 例: HTReqなDRバリエーションの数=4, スイッチ側で作ったHTRの数=2, の場合、上記方法ならスイッチ回数は2回
- HTReqなDRバリエーションの数 < スイッチ側で作ったHTRの数、だった場合
- DRバリエーションをそれぞれスイッチしてHTRを適用したほうがスイッチ回数が少なくなる
- 例: HTReqなDRバリエーションの数=2, スイッチ側で作ったHTRの数=4, の場合、上記方法ならスイッチ回数は2回
バリエーションがない側でHTRを作ってDouble Sliceに持ち込む(ARの場合のみ)
スクランブル:
R' U' F L2 R2 U' R2 U F2 L2 U R2 F2 U' F2 L' D2 B' R F2 D2 U2 F U R' U' F
F L D // EO, RZP
(L D2 L2 B' L2 B) // 4a3, [F' D2 F]のHTReqなバリエーションあり
F2 L' U2 L B2 R2 D2 R // HTR
U2 D2 B2 U2 // Double Slice(S+M)
このスクランブルもDR-4c2eなのでHTReqなバリエーションがあります。
バリエーションがない側にスイッチして8手のHTRを作りました。そしてそこから4手でS列とE列以外を揃えました。このDRはARで作られておりARの軸はFB軸のため、S列に関してスライスを解くことが可能です。実際、S列に関しては+1手でスライスを解くことができるようです。
ARバリエーションはスイッチ側からAR軸のDouble Sliceを作るとDouble Sliceがとても解きやすい形になっているため、Double Sliceを故意に狙いに行くのはいい案だと思います。
注意点
qtを減らしてスイッチする場合、NISSトレースは使えない
例えばHTReqなDRバリエーションが4つあり、subsetが4b2 4eだったとします。
バリエーションがない側から4a1 4eにしてスイッチすることを考えますが、ここで4a1 4eをNISSトレースして良し悪しを判断することは全く意味がありません。
なぜなら、例えばDR①からスイッチして4a1 4eにしてNISSトレースしてもそれはDR①での状態に過ぎず、DR②・DR③・DR④での4a1 4eは全く違う形になっているからです。
そのため、HTReqを使う際はNISSトレースはしないように気をつけましょう。
バリエーション側は普通に探さないといけない
これまで言ってきた探索方法はバリエーションがない側にスイッチして色々する、というものでした。しかし、DR後optimalはどこに眠っているかはわからないわけで、バリエーション側から作るHTRにあるかもしれません。
以下の2つのルートはバリエーションによって効率化することはできず、単にバリエーションの数ぶんだけ探索が必要になります。
- バリエーション側でHTRを作る
- バリエーション側でqtを減らしてスイッチ
そのため、探索の順番としてはバリエーションを使った効率的な探索をまずは行い、何もなかったらバリエーション側の上記ルートを試す、というのがいいかと思います。
HTReqにならないDRバリエーション
一般的に、DR-3c2eのDRバリエーションはHTReqにならないことが多いです。
スクランブル: R U R' B2
B2 R U' R' // DR①
Bw2 R U' R' // DR②
このDR-3c2eのRZPからは2種類の4手DRが作れ、その2つはsubsetは同じになります。しかし、[DR①の逆→DR②]を回してみると0c0 2eの形になっていてHTReqではないことがわかります。
そのためDR-3c2eで同subsetのバリエーションが作れそうな時はあまりHTReqを期待しないほうが良さそうです。
対してDR-4c4eはHTReqになることが割と多い肌感があります。
HTReqにならないDRバリエーションのDR後探索方法は特に効率化できる部分はないので、普通に探索してください。
終わりに
HTReqについてEOとDRの観点から、自分の知っている限りのtipsをまとめてみました。
そもそもDRバリエーションというのは同subsetのDRが簡単に増やせるためとてもお得です。例えば4b2 2eのDRバリエーションが8個あったら、それはバリエーションでない4b2 2eのDRを8個見つけたと同義と言える、というとその重要さが伝わるでしょう。
そしてDRバリエーションの中でもHTReqなバリエーションはとても効率的にDR後探索を行えます。
sub23を狙うにあたってはDRバリエーションはとても重要です。
ぜひ皆さんもHTReqを使って効率的に探索を行ってみてください。
それでは。