diff options
Diffstat (limited to 'doc/solvers.md')
| -rw-r--r-- | doc/solvers.md | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/doc/solvers.md b/doc/solvers.md new file mode 100644 index 0000000..e90a40b --- /dev/null +++ b/doc/solvers.md | |||
| @@ -0,0 +1,146 @@ | |||
| 1 | # Solvers | ||
| 2 | |||
| 3 | This document contains a list cube solvers supported by this library. | ||
| 4 | Some solvers require the cube to be in a certain state before they can | ||
| 5 | be used - see below for details. | ||
| 6 | |||
| 7 | ## The H48 optimal solver | ||
| 8 | |||
| 9 | An HTM-optimal solver using fully-symmetric pruning tables. For details | ||
| 10 | about how this solver works, see [h48.md](./h48.md). For benchmarks see | ||
| 11 | [benchmarks/benchmarks.md](../benchmarks/benchmarks.md). | ||
| 12 | |||
| 13 | * Name: of the form `h8hXk2` for `X` from 0 to 11, or `h48h0k4`. The name | ||
| 14 | `optimal` is an alias for `h48h7k2`. | ||
| 15 | * Requisites: none. | ||
| 16 | * Moveset: HTM (all 18 basic moves). | ||
| 17 | * Data size: 59MB for `h48h0k4`, from 115MB to 59GB for `h48hXk2` | ||
| 18 | (roughly 59MB + 2<sup>X</sup>*56MB). | ||
| 19 | |||
| 20 | ## Coordinate solvers | ||
| 21 | |||
| 22 | Various solvers to solve different substeps, commonly used for Fewest | ||
| 23 | Moves solving. | ||
| 24 | |||
| 25 | The names start either with `coord_` or with `mcoord_`, and the last two | ||
| 26 | letters denote a transformation to adjust the starting orientation. For | ||
| 27 | example, `coord_EO_UR` solves the edge orientation on the RL axis. | ||
| 28 | |||
| 29 | For simplicity and for compatibility with nissy-classic, some aliases | ||
| 30 | are provided. | ||
| 31 | |||
| 32 | ### Edge orientation | ||
| 33 | |||
| 34 | Solve the edge orientation on the FB axis. NISS can be used. | ||
| 35 | |||
| 36 | * Name: `coord_EO_xx`, where `xx` denotes the rotation. | ||
| 37 | Provided aliases are: | ||
| 38 | * `eofb` for `coord_EO_UF` (EO on FB) | ||
| 39 | * `eorl` for `coord_EO_UR` (EO on RL) | ||
| 40 | * `eoud` for `coord_EO_FD` (EO on UD) | ||
| 41 | * Requisites: none. | ||
| 42 | * Moveset: HTM (all 18 basic moves). The ending quarter turns are | ||
| 43 | always clockwise. | ||
| 44 | * Data size: 1.5KB. | ||
| 45 | |||
| 46 | ### Domino reduction | ||
| 47 | |||
| 48 | Solve the domino reduction on the UD axis. NISS can be used. | ||
| 49 | |||
| 50 | * Name: `coord_DR_xx`, where `xx` denotes the rotation. | ||
| 51 | Provided aliases are: | ||
| 52 | * `drud` for `coord_DR_UF` (DR on UD) | ||
| 53 | * `drrl` for `coord_DR_RF` (DR on RL) | ||
| 54 | * `drfb` for `coord_DR_FD` (DR on FB) | ||
| 55 | * Requisites: none. | ||
| 56 | * Moveset: HTM (all 18 basic moves). The ending quarter turns are | ||
| 57 | always clockwise. | ||
| 58 | * Data size: 72MB. | ||
| 59 | |||
| 60 | ### Domino reduction from edge orientation | ||
| 61 | |||
| 62 | Solve the domino reduction on UD from edge orientation on FB. | ||
| 63 | NISS can be used. | ||
| 64 | |||
| 65 | * Name: `coord_DREO_xx`, where `xx` denotes the rotation. | ||
| 66 | Provided aliases are: | ||
| 67 | * `drud-eofb` for `coord_DREO_UF` (DR on UD from EO on FB) | ||
| 68 | * `drrl-eofb` for `coord_DREO_RF` (DR on RL from EO on FB) | ||
| 69 | * `drud-eorl` for `coord_DREO_UR` (DR on UD from EO on RL) | ||
| 70 | * `drfb-eorl` for `coord_DREO_RU` (DR on FB from EO on RL) | ||
| 71 | * `drrl-eoud` for `coord_DREO_FR` (DR on RL from EO on UD) | ||
| 72 | * `drfb-eoud` for `coord_DREO_FD` (DR on FB from EO on UD) | ||
| 73 | * Requisites: edge orientation must be solved on FB. | ||
| 74 | * Moveset: {U, U', U2, D, D', D2, R2, L2, F2, B2}. | ||
| 75 | The ending quarter turns are always clockwise. | ||
| 76 | * Data size: 91KB. | ||
| 77 | |||
| 78 | ### HTR from domino reduction | ||
| 79 | |||
| 80 | Solve the half turn reduction from domino reduction on UD. | ||
| 81 | NISS can be used. | ||
| 82 | |||
| 83 | * Name: `coord_HTR_xx`, where `xx` denotes the rotation. | ||
| 84 | Provided aliases are: | ||
| 85 | * `htr-drud` for `coord_DR_UF` (HTR from DR on UD) | ||
| 86 | * `htr-drrl` for `coord_DR_LF` (HTR from DR on RL) | ||
| 87 | * `htr-drfb` for `coord_DR_BU` (HTR from DR on FB) | ||
| 88 | * Requisites: domino reduction is solved on UD. | ||
| 89 | * Moveset: {U, U', U2, D, R2, L2, F2, B2}. The ending quarter turns are | ||
| 90 | always clockwise. Moreover, solutions are filtered so that at most | ||
| 91 | one D move is used, and it will always appear before any U or U' move. | ||
| 92 | Solutions with consecutive U / U2 / U' / D moves are also filtered out. | ||
| 93 | This solver will produce therefore fewer solutions than nissy-classic. | ||
| 94 | * Data size: 265KB. | ||
| 95 | |||
| 96 | ### Leave slice from domino reduction | ||
| 97 | |||
| 98 | Solve all but the E-layer from domino reduction on UD. | ||
| 99 | The E-layer centers may not be solved. NISS will not be used. | ||
| 100 | |||
| 101 | * Name: `coord_DRSLICE_xx`, where `xx` denotes the rotation. | ||
| 102 | Provided aliases are: | ||
| 103 | * `drudslice` for `coord_DRSLICE_UF` (Leave slice from DR on UD) | ||
| 104 | * `drrlslice` for `coord_DRSLICE_LF` (Leave slice from DR on RL) | ||
| 105 | * `drfbslice` for `coord_DRSLICE_BU` (Leave slice from DR on FB) | ||
| 106 | * Requisites: domino reduction is solved on UD. | ||
| 107 | * Moveset: {U, U', U2, R2, L2, F2, B2}. | ||
| 108 | * Data size: 54MB. | ||
| 109 | |||
| 110 | ### Solve all from domino reduction | ||
| 111 | |||
| 112 | Solve the whole cube from domino reduction on UD. | ||
| 113 | NISS will not be used. | ||
| 114 | |||
| 115 | * Name: `coord_DRFIN_xx`, where `xx` denotes the rotation. | ||
| 116 | Provided aliases are: | ||
| 117 | * `drudfin` for `coord_DRSLICE_UF` (Solve from DR on UD) | ||
| 118 | * `drrlfin` for `coord_DRSLICE_LF` (Solve from DR on RL) | ||
| 119 | * `drfbfin` for `coord_DRSLICE_BU` (Solve from DR on FB) | ||
| 120 | * Requisites: domino reduction is solved on UD. | ||
| 121 | * Moveset: {U, U', U2, D, D', D2, R2, L2, F2, B2}. | ||
| 122 | * Data size: 54MB. | ||
| 123 | |||
| 124 | ### Undocumented coordinate solvers | ||
| 125 | |||
| 126 | There are some coordinate solvers that have not been listed above. These | ||
| 127 | are generally not very useful on their own, but instead they are combined | ||
| 128 | to produce some of the more complex coordinate solvers above. | ||
| 129 | |||
| 130 | These solvers include: | ||
| 131 | |||
| 132 | * `coord_CPEPE_xx`: solve the permutation of the corners and of the E-layer | ||
| 133 | edges. Requires DR to be solved on UD. | ||
| 134 | * `coord_DRFINNOE_xx`: like the "leave slice" solver, but the U and D | ||
| 135 | layers are going to be adjusted so that centers are solved. We chose | ||
| 136 | to use `coord_DRSLICE_xx` as described above as it may produce shorter | ||
| 137 | solutions, and it is easier to filter out duplicates (solutions that | ||
| 138 | differ only by how they affect the E-layer). | ||
| 139 | |||
| 140 | ## Planned future solvers | ||
| 141 | |||
| 142 | The following solvers are planned to be introduced in the future: | ||
| 143 | |||
| 144 | * Finish from HTR | ||
| 145 | * JZP / Axial reduction, from EO or direct | ||
| 146 | * Finish / leave double slice from JZP | ||
