aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano.tronto@gmail.com>2021-12-24 18:30:44 +0100
committerSebastiano Tronto <sebastiano.tronto@gmail.com>2021-12-24 18:30:44 +0100
commit8595bd0aa8d55b698f2de15b28c20b482df366c3 (patch)
tree9388dad4e0d8187d9bbb406e6734aed795c256a6 /README.md
parentfb058ea953f1d352dd52355252462153a9436689 (diff)
downloadnissy-8595bd0aa8d55b698f2de15b28c20b482df366c3.tar.gz
nissy-8595bd0aa8d55b698f2de15b28c20b482df366c3.zip
added info on compact tables and warning about installation process being deprecated for tables
Diffstat (limited to 'README.md')
-rw-r--r--README.md25
1 files changed, 20 insertions, 5 deletions
diff --git a/README.md b/README.md
index 7bd8c8f..eac348c 100644
--- a/README.md
+++ b/README.md
@@ -21,6 +21,12 @@ solutions for EO/DR/HTR or similar substeps.
21 21
22## Requirements 22## Requirements
23 23
24** Warning: ** *This section is not up to date with the code. In nissy-2.0beta8
25or later the only way to get the table files is to generate them yourself.
26All but the huge table just requires a few minutes; the huge table for
27optimal solving can require a couple of hours. Use more than 1 thread
28if you can.*
29
24A full installation of Nissy requires a little more than 2Gb of space, 30A full installation of Nissy requires a little more than 2Gb of space,
25of which 1.6Gb are occupied by the huge pruning table for fast optimal solving, 31of which 1.6Gb are occupied by the huge pruning table for fast optimal solving,
26and running it requires the same amount of RAM. 32and running it requires the same amount of RAM.
@@ -120,17 +126,26 @@ of the cube if not necessary).
120 126
121Some coordinates make use of symmetries to reduce the size of the resulting 127Some coordinates make use of symmetries to reduce the size of the resulting
122pruning table. Unfortunately this complicates the code a lot, but it is a huge 128pruning table. Unfortunately this complicates the code a lot, but it is a huge
123advantage: it reduces by a factor of about 16 the huge pruning table, which 129advantage: it reduces by a factor of about 16 the pruning table size.
124results in around 1.6Gb instead of 24 or so.
125 130
126Pruning tables are related to a specific step, a moveset and a coordinate. They 131Pruning tables are related to a specific step, a moveset and a coordinate. They
127contain one value from 0 to 15 (4 bits) for each possible value for the coordinate, 132contain one value from 0 to 15 (4 bits) for each possible value for the coordinate,
128which is less or equal than the minimum number of moves required to solve the 133which is less or equal than the minimum number of moves required to solve the
129given step with the given moveset for a cube which has the given coordinate. For example, 134given step with the given moveset for a cube which has the given coordinate. For example,
130say the coordinate `neo` gives the number of non-oriented edges (say with respect to 135say the coordinate `neo` gives the number of non-oriented edges (say with respect to
131F/B). Then the possible values for the coordinate are 0,2,4,...,12. An associate pruning 136F/B). Then the possible values for the coordinate are 0,2,4,...,12. An associated
132table to solving EO with HTM moveset and this coordinate would have values 0 (for 137pruning table to solving EO with HTM moveset and this coordinate would have values 0
133`neo=0`), 3 (for `neo=2`), 1 (for `neo=4`)... 138(for `neo=0`), 3 (for `neo=2`), 1 (for `neo=4`)...
139
140The values for most pruning tables are memorized modulo 16, so they only occupy
1414 bits per entry, and values larger than 15 are saved as 15. This is good enough
142for most applications.
143Some large tables are memorized in compact form using only 4 bits, similarly
144to what [nxopt](https://github.com/rokicki/cube20src/blob/master/nxopt.md) does:
145a base value `b` is picked and a value of `n` is saved as `MIN(3,MAX(0,n-b))`.
146When a value of `v=1,2,3` is read it is simply returned as `v+b`, while if
147`0` is a successive lookup to a fallback table is performed. The base value `b`
148is picked to maximize the sum frequency of the values `1,2,3`.
134 149
135There is one caveat: each coordinates also needs an inverse function that takes a 150There is one caveat: each coordinates also needs an inverse function that takes a
136coordinate value and returns a cube which has that coordinate. This is in general 151coordinate value and returns a cube which has that coordinate. This is in general

Generated with cgit - Back to sebastiano.tronto.net