First Post, General Puzzle Solving
Submitted by quadricode on Fri, 09/19/2008 - 02:51.
Hello.
A quick introduction: I'm Robert Smith, I'm 18, and I live in the US. I used to be quite into speedcubing, starting around 2003, but I have since moved into the more "theoretical" aspects of the cube. I also like mathematics, and, fortunately, programming. Anyway, that's that.
I have been writing a "general puzzle solver," whose goal is to be able to solve any (permutation) puzzle with (almost) any method. Quite quickly, we see there are definitely limits to this (e.g., we couldn't solve any scrambled 10x10x10 cube in a single phase). But, if some certain requirements are met, solving any puzzle should be an ability with this program.
I am actually designing it to be a "speedcubers' toolbox." I want it to be the first and last stop to finding a good algorithm for speedsolving puzzles. But, nonetheless, it could be used for analysis as well, and I am designing it with speed in mind.
The program was inspired by Kociemba's algorithm, Thistlethwaite's algorithm, Jelinek's (J)ACube, Krig's ksolve, and Reid's optimal cube solver. Also, Pochmann's thesis on his "Hume" program, Jaap (considering I probably incorrectly spelled aforementioned names, I won't try to spell his last name), Singmaster, and Longridge provided some ideas and mental motivation for the program. So, I hope the list of inspirations maybe gives some credibility to this project of mine; I am not just making a program that would attempt to solve a cube in O(n!^3) amortized time. ;)
Anyway, writing the program has been well underway for a while now, and I have a clear road-map of what I plan on doing and getting done. Here are some plans for the first release, though they are by no means any sort of guarantee:
*Puzzle specification via a definition file
-structure (piece names, orientation/permutation, ignored pieces, equivalent pieces (e.g., 2-color cube)
-possible moves (names and effect, uses cycle notation -- which is much less cumbersome than using ordinary "permutation index" notation)
-replicators (name and effect, e.g., P2 = twist move P twice)
-invalid following moves (an assumption is made that a move cannot be followed by its inverse)
*Method specification via a definition file
-specify for which puzzle the method is for
-specify possible turn metrics with names (moves could be weighted if need be, e.g., an R move is better and physically less costly than a B move)
-specify steps, which include which metric to use, and the goal state (ignored pieces/orientations/permutations allowed)
*'Automated heuristics' (heuristics are dynamically generated at runtime)
*Cross-platform support (it is written in C/C++)
Many of these have been implemented already (like all datastructures, file parsing, etc.). There are also of plenty future goals, such as solving every state under certain conditions, and outputting tables in HTML with associated cube images; or fast genetic algorithms.
The program is called 'qsolve', sort of like 'ACube' and 'ksolve'. I have not decided if the program will be open source or not. However, it will be free for personal use, of course. Also, it will come with documentation more sophisticated than a README.TXT, as well as some puzzle/method definition files.
Anyway, I thought now was an appropriate time to "make an announcement", and I'd be interested in hearing general questions and maybe some suggestions/comments/proposals/etc. Especially from the people here, who've done very good work. :D
Take care,
Robert
A quick introduction: I'm Robert Smith, I'm 18, and I live in the US. I used to be quite into speedcubing, starting around 2003, but I have since moved into the more "theoretical" aspects of the cube. I also like mathematics, and, fortunately, programming. Anyway, that's that.
I have been writing a "general puzzle solver," whose goal is to be able to solve any (permutation) puzzle with (almost) any method. Quite quickly, we see there are definitely limits to this (e.g., we couldn't solve any scrambled 10x10x10 cube in a single phase). But, if some certain requirements are met, solving any puzzle should be an ability with this program.
I am actually designing it to be a "speedcubers' toolbox." I want it to be the first and last stop to finding a good algorithm for speedsolving puzzles. But, nonetheless, it could be used for analysis as well, and I am designing it with speed in mind.
The program was inspired by Kociemba's algorithm, Thistlethwaite's algorithm, Jelinek's (J)ACube, Krig's ksolve, and Reid's optimal cube solver. Also, Pochmann's thesis on his "Hume" program, Jaap (considering I probably incorrectly spelled aforementioned names, I won't try to spell his last name), Singmaster, and Longridge provided some ideas and mental motivation for the program. So, I hope the list of inspirations maybe gives some credibility to this project of mine; I am not just making a program that would attempt to solve a cube in O(n!^3) amortized time. ;)
Anyway, writing the program has been well underway for a while now, and I have a clear road-map of what I plan on doing and getting done. Here are some plans for the first release, though they are by no means any sort of guarantee:
*Puzzle specification via a definition file
-structure (piece names, orientation/permutation, ignored pieces, equivalent pieces (e.g., 2-color cube)
-possible moves (names and effect, uses cycle notation -- which is much less cumbersome than using ordinary "permutation index" notation)
-replicators (name and effect, e.g., P2 = twist move P twice)
-invalid following moves (an assumption is made that a move cannot be followed by its inverse)
*Method specification via a definition file
-specify for which puzzle the method is for
-specify possible turn metrics with names (moves could be weighted if need be, e.g., an R move is better and physically less costly than a B move)
-specify steps, which include which metric to use, and the goal state (ignored pieces/orientations/permutations allowed)
*'Automated heuristics' (heuristics are dynamically generated at runtime)
*Cross-platform support (it is written in C/C++)
Many of these have been implemented already (like all datastructures, file parsing, etc.). There are also of plenty future goals, such as solving every state under certain conditions, and outputting tables in HTML with associated cube images; or fast genetic algorithms.
The program is called 'qsolve', sort of like 'ACube' and 'ksolve'. I have not decided if the program will be open source or not. However, it will be free for personal use, of course. Also, it will come with documentation more sophisticated than a README.TXT, as well as some puzzle/method definition files.
Anyway, I thought now was an appropriate time to "make an announcement", and I'd be interested in hearing general questions and maybe some suggestions/comments/proposals/etc. Especially from the people here, who've done very good work. :D
Take care,
Robert