I keep meaning to get round to making the optimization to combine moves like this and replace them with tilts or, better still, allow it to search directly for solutions with the final color placement in any orientation since there may be more direct solutions to do that than simply combining these moves with my existing algorithm.
I believe the fastest way to do it is using 64-bit bitboards to detect the solved state, like I am doing now. I can "check" all 24 solved states with one instruction. No flipping of the cube, no calling conversion data structures. My 4x4x4 cube is constructed using only 6 variables, 64-bits each, one for each face. Each "sticker" is 4-bits: 0010 for top, 0011 for right, 0101 for front... etc, with 1101 for bottom (all primes in base 10). So I can check if a face is solved by testing if the cube.whatever_face == 0x222222222222222 or 0x3333333333333333 .... 0xDDDDDDDDDDDDDDDD. So my compound instruction tests cube.top = 0x22..., 0x33..., 0x55...,0x77..., 0xBB... or 0xDD..., ditto for right, front, bottom, left, back. It executes very quickly.
And yes, I agree that a direct search for an optimal solution is currently way out of reach until someone has an insight into the group theory behind it that could help prune the search optimally or we manage to create quantum computers on a large scale?
There is hope. Remember, we just need to come up with an approach. It is obvious a great deal of pruning is needed. One of the questions I have been asking is,
"Can pruning techniques be combined in a non-hazardous way?" Well, we know I have already come up with a hazardous solution
despite the fact that the over-aggressive pruning solved a 22-ply "snake" position in under one minute (and offered a few interesting non-regurgitated version of the scramble).
The answer to the question is: yes! Consider this example:
We see
look-ahead search and
back-end pruning being combined successfully. Note this is different from Bruce's forward pruning of the 2x2x2 corners data. Once I add this 3rd type of pruning to these two pruning mechanisms, the search depths shown will probably be amazing.
I only need to generate one-ply worth of moves to see up to ply 6 when I have the 5-Turns-From-Solved database probed in RAM. In the diagram, I only have the 3-TFS loaded in RAM. Basically, for the cost of spawning 64-bit hash numbers and probing an O(1) hash table implementation, I get up to 5 plies of search. A very good trade.
Next, look at [Solution 0001]. It is during the 10th ply, and I only had to generate 7 plies' worth of nodes, yet it found a 13-ply solution! How? It probed the 6-Turns-From-Solution database that features positions where only centers are in need of solving, and it found a matching position. So, even from "ply 7" which is really "ply 10" when you are using a 3-TFS database, I can look ahead even further by using a specialized database I can query IF there is a "ring" of corners and edges solved (I don't need to call this database otherwise).
So, with enough tricks like these, we can shave up to 12-plies off searches for now. I am in the process of building larger center databases, and have enough resources to get to 10-TFS on my own. Coupled with an 11-ply max reduction with 2x2x2 corner pruning, and the 5-TFS database, there is a chance for a
26-ply reduction in search.