I have tried many kernels before getting to that one.
Longer version:
In the last month I have tried many kernels (millions) generated using KernelFinder.c, most of the time on AWS small/medium instances with occasional upgrades to 4-8-core C-series to speed things up.
About a month ago I tested length 29-81 palindromic kernels using symmPairs+fullSymm but didn't find any solution (there are about 20M of them and almost all fail immediately).
But I was convinced that if a solution existed it would be generated by a short non-palindromic kernel (maximum flexibility, for example 66646646664466646662666466466646666 and 6664666466646666-6666466466646666) so I tried (together with Antigravity and Claude) some ideas to improve the speed of the search:
Most of the ideas were unsuccessful:
- meet in the middle, splitting the search graph into independent parts, stitching partial results together, caching remaining 2-cycles, investigating if some tested configurations are isomorphic - nothing helped
- modeling restrictions as a SAT problem. With the modelling I (and the agents) tried a SAT result didn't mean solvable and an UNSAT result generally came too late in the search (when it was already cheaper to let the backtracking complete unsuccessfully on that branch)
What worked was a counter-intuitive heuristic that brought up to 100X speed improvements for kernel lengths 31-40:
- AI summary: "At each node, searchPC() collects every top-level loop tied for the smallest freeCount into minL[], then branches on the first of those for which traverseLoopSearch() succeeds. Since that call succeeds for the first candidate in essentially all cases, the branching loop is the one that appears first in nextTop list order, and the remaining tied candidates are not consulted. h5 replaces that selection with an explicit comparison among the tied candidates.
Why the selection matters. The branching factor at a branch node is exactly 2, and the large majority of nodes are forced moves rather than branches. The shape of the entire subtree is therefore determined by which of the tied loops is branched on, making this single choice the dominant structural lever in the search.
The rule. For each loop tied for the minimum freeCount, consider its two candidate 2-cycles, and for each 1-cycle those 2-cycles touch, take that 1-cycle's currentTop->freeCount. Sum these to score the loop, and branch on the loop with the highest score — that is, the one whose immediate options retain the most free capacity in the surrounding structure."
(The usual fail-first intuition - branching where the problem is most constrained - didn't work well here)
Noticing that the search on longer kernels was faster than the search on shorter ones (because of the extra restrictions) I went back to the list of long palindromic kernels, tested them without symmetry parameters and found the above solution.
I am running KernelFinder to search for 5904 superpermutations in the same solution space (large palindromic kernels but without symmPairs+fullSymm) but with no luck so far.