aboutsummaryrefslogtreecommitdiff
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
parentfb058ea953f1d352dd52355252462153a9436689 (diff)
downloadnissy-8595bd0aa8d55b698f2de15b28c20b482df366c3.tar.gz
nissy-8595bd0aa8d55b698f2de15b28c20b482df366c3.zip
added info on compact tables and warning about installation process being deprecated for tables
-rw-r--r--README.md25
-rw-r--r--TODO.md6
2 files changed, 21 insertions, 10 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
diff --git a/TODO.md b/TODO.md
index c85a8c2..a7a41e1 100644
--- a/TODO.md
+++ b/TODO.md
@@ -38,6 +38,7 @@ It's more of a personal reminder than anything else.
38 38
39* Add EXAMPLES.md file 39* Add EXAMPLES.md file
40* webapp (cgi) 40* webapp (cgi)
41* Re-upload tables, fix README.md
41 42
42## Technical stuff 43## Technical stuff
43 44
@@ -52,11 +53,6 @@ It's more of a personal reminder than anything else.
52 it will only be used by the few who have less than 4(?) Gb of ram. 53 it will only be used by the few who have less than 4(?) Gb of ram.
53* Check if memory is enough for loading pruning tables; if not, abort 54* Check if memory is enough for loading pruning tables; if not, abort
54* For optimal solver: choose largest that fits in memory between nxopt and light 55* For optimal solver: choose largest that fits in memory between nxopt and light
55* Remove ptable khuge
56
57### Performance
58* solve (allow_next): filter out based on base_move; only check once for each
59 triple of moves; how to deal with different movesets?
60 56
61### Other optimal solvers 57### Other optimal solvers
62* try htr corners + edges in slice but not oriented (300Mb table); 58* try htr corners + edges in slice but not oriented (300Mb table);

Generated with cgit - Back to sebastiano.tronto.net