|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- README file for optimal Rubik's cube solver
-
-
- 1. Preliminaries.
-
- After you gunzip and untar the file you should have (besides the
- tar file) three files:
-
- % ls -l
- -rw------- 1 501 100 4629 2004-06-03 00:05 README
- -rw------- 1 501 100 133158 2004-06-03 00:05 optimal.c
- -rw------- 1 501 100 20552 2004-06-03 00:05 twist.c
-
- README is the file you are presently examining. optimal.c is the
- source code for the optimal solver. twist.c is the source code to
- a related utility (see below).
-
-
- 2. System requirements
-
- At least 80Mb RAM for the optimal cube solver. With less than 80Mb
- it probably won't run at any reasonable speed. I'm not even sure it
- will run well with 80Mb, so 88Mb or 96Mb is preferred.
-
- If you get it running on your system, I would appreciate if you let me
- know, so that I know it works on that type of system. Please send me
- e-mail to let me know that you have it working!!
-
- The program was developed on a Linux system, but should use only
- ANSI standard C.
-
-
- 3. Compiling the optimal solver
-
- The source file is optimal.c . It is presently configured to search by
- quarter turns. If you want to search by face turns, change line #5 to
-
- #define USE_METRIC FACE_TURN_METRIC
-
- You can also change the value of SEARCH_LIMIT if you desire.
- This will limit how far the program searches. The default value of 0
- means no limit.
-
- My preferred method of compilation is
-
- % gcc -Wall -O2 optimal.c
-
- but feel free to use something else.
-
-
- 4. Startup time
-
- Startup time is significant. On my processor (200 MHz PentiumPro), it
- takes about 11 minutes to generate all the tables. While it's working
- on this, be sure to read the next section about input format.
-
- This is greatly reduced on newer computers. On a 933MHz P3, it should
- only take 2 or 3 minutes.
-
-
- 5. Input to the optimal solver
-
- A solved cube is represented as
-
- UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR
-
- To input a scrambled cube, first give the cubie that's in the UF location,
- then the cubie in the UR location, and so forth, according to this list
- above. For example, "cube in a cube" would be
-
- UF UR RD RB LU LF DB DL FR UB DF BL UFR RFD RDB RBU LFU LUB DLB LDF
-
- This input should all be on one line. Some people have expressed their
- displeasure with this system. I can't say I disagree, but I can't think
- of any system that's easy. So your ideas here would be useful. Read on
- to the next section about using "twist.c" to convert a sequence of twists
- into a cube in the desired format.
-
- Sequences that are produced as output solve the cube from the input state.
-
- You may also interrupt a search by typing Ctrl-C . Instead of exiting,
- it will prompt you for another cube. (To exit, type Ctrl-D .)
-
-
- 6. Using "twist.c"
-
- This is just a hack. Input to this program is a sequence of twists, all
- on one line. It outputs two cubes, the position created by applying the
- sequence to a solved cube, and the inverse position. The twists should
- be in the form F F2 F' etc. this program doesn't require any
- optimization. I compile it using
-
- % gcc -o twist.out -Wall twist.c
-
-
- 7. Miscellaneous
-
- The number of nodes overflows on long searches. With gcc this can be
- fixed by changing the global variable n_nodes to type long long int.
-
-
- 8. To do list
-
- a. Experiment with other "pattern databases."
- b. Perhaps unroll subfunctions in initialize_distance_table
- to reduce startup time.
- c. Consider solving the inverse position if this is a little
- bit easier
-
-
- 9. Changes since last version
-
- The main change is that I have implemented automatic symmetry reductions.
- This means that the program will analyze the symmetry of the input
- position, and use this to reduce the search space. If you input a
- position with 12-fold symmetry, it will run 12 times as fast.
- This feature is turned on by default. You can turn it off by #define-ing
- the symbol USE_SYMMETRY to 0 .
-
- Some other minor things: fixed a bug in twist.c when there's white
- space at the end of the input line. I also reverted to new-style
- function declarations. And the program should run fine without needing
- excess stack space.
-
-
- 10. Feedback
-
- e-mail me with any questions, comments, etc. at reid@math.ucf.edu .
- Currently, there is a pointer to the files on the web page
-
- http://www.math.ucf.edu/~reid/Rubik/optimal_solver.html
-
- Good luck, and enjoy the program. If you make any interesting discoveries
- with the program, please share them with me and the cube-lovers mailing list.
-
- June 3, 2004
|