From 131428b913a3d42f26714b8e5e873d8112db10c0 Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Wed, 8 Dec 2021 10:49:44 +0100 Subject: Faster ptable generation (but I can make it faster) --- TODO.md | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'TODO.md') diff --git a/TODO.md b/TODO.md index 7ab3287..f6c464b 100644 --- a/TODO.md +++ b/TODO.md @@ -42,11 +42,31 @@ It's more of a personal reminder than anything else. in non-posix systems * better man page * find a better way to distribute the large tables, especially khuge +(or just generate them quickly, see below) * webapp (cgi) ## Technical stuff -### Better pruning tables +## Performance (optimal solver) +* Khuge optimal solver: change direction of search when doing so leads to +less branching (like nxopt). Need to add some info to EstimateData or to +DfsData (like last moves on inverse/other scramble) and to change some of +the logic of niss (allow for switching multiple times). +* Light optimal solver: use drud table instead of khuge, with tricks as above +and one more trick: if the last move is 180° avoid computing inverse cube +and just use previous values for all 3 axes. + +## Coordinates, symmetries, pruning tables +* use multiple threads to search for solutions in parallel +* Faster pruning table generation: keep track of which positions are "nasty" +(i.e. self-symmetric with respect to the base symmetry coordinate but not +self-symmetric overall) by adding a function to struct coord and some datafield +to struct symdata. +* Faster pruning table generation: multithreading (divide table into large +sections and use one mutex for each section to avoid too much locking) +* Cleanup symcoord.c: some coordinates and symdata are never actually used; +remove also sd_eofbepos and just use sd_coud for khuge (this changes the +coordinate so the whole table must be generated again!) * Use pruning values mod 4 instead of mod 16 (or maybe not, I like the current system) @@ -60,4 +80,3 @@ current system) * client/server architecture: run a server process in the background so that multiple client processess can send it queries and get results; this would open up the door for a web-based version or graphical clients -* use multiple threads to search for solutions in parallel -- cgit v1.3