[Unofficial] Robot Rubik's Cube Solve 10.18

Status
Not open for further replies.
Go with inspection and let both Faz and the robot start with the cube in "hand". Could be a close race.
I guess this is a question for me, what is the record for solving an unknown cube with no inspection time?
 
Yeah it was our final year project at Swinburne University last year for our double degree in Mechatronics (Robotics) and computer science. It has been graded and we got High Distinctions (There was also a thesis, presentations and other course work involved).

Excellent. Well done, it's a seriously impressive bit of work.
 
Not sure, but it takes about 60-80 ms per 90deg turn. The problem here is that depending on how the cube is held, it may take more or less robot moves to turn a face. I guess it is an average of 22 cube moves per solve in approximately 6 seconds of actual solving so 3.67 per second. Hopefully we will get this faster.
- Have you considered recording a few of shortest solutions found by the algorithm and using a simple metric (count up and weight the number of grips / turns to estimate actual solve time) to pick the best one?

- You could also consider leaving the algorithm online and searching for shorter solutions from certain parts of the solve, allowing you to switch to one of them if you find it before your robot gets to executing that part of the solve. (e.g. find a solution with 22 moves, then start solving and try to compute a solution to what the cube state will be after, say, 4 moves. If you quickly find a solution for *that* which is under 18 moves (or faster to execute, if you use the robot metric), switch to it after the fourth move).

- If you want to do a little math (which should nevertheless be very fast for the computer), avoid scanning the sixth face if it is determined by the other 5.

As far as I know, none of these three has been implemented in a robot before, but they seem like relatively easy ways to shave off some time.
 
Last edited:
- If you want to do a little math (which should nevertheless be very fast for the computer), avoid scanning the sixth face if it is determined by the other 5.

I just calculated that the probability of being able to predict the sixth face is 377/440 ≈ 0.857.

In the video, you turned the cube around, then turned it back to start the solve. That would have been some good fraction of a second saved using a relatively simple algorithm. (Assuming face detection is fast, which it seems to be.)

Code:
cubies = {{"B", "D"}, {"B", "L"}, {"B", "R"}, {"B", "U"}, {"D", "F"}, {"D", "L"}, {"D", "R"}, {"F", "L"}, {"F", "R"}, {"F", "U"}, {"L", "U"}, {"R", "U"}};
OddPermutations[list_] := list[[#]] & /@ Select[Permutations[Range[Length[list]]], Signature[#] == -1 &];
EvenPermutations[list_] := list[[#]] & /@ Select[Permutations[Range[Length[list]]], Signature[#] == 1 &]; 
PartitionByVisibleStickers[l_] := Count[Length /@ (Flatten[Tuples /@ l, 1] // Gather), 1];
ProbabilityOfPredictability[l_] := (PartitionByVisibleStickers[OddPermutations[l]] + PartitionByVisibleStickers[EvenPermutations[l]])/(24*2^4);
ProbabilityOfPredictability /@ Subsets[cubies, {4}] // Mean

377/440
 
Last edited:
In the video, you turned the cube around, then turned it back to start the solve. That would have been some good fraction of a second saved using a relatively simple algorithm. (Assuming face detection is fast, which it seems to be.)

It must just look that way as it needs to pass over a few sides it has already seen while manipulating the cube to see every side. I can guarantee you it doesn't turn it back to the start to solve. The system currently keeps track of how the cube is held so you could start from any rotation.
 
It must just look that way as it needs to pass over a few sides it has already seen while manipulating the cube to see every side. I can guarantee you it doesn't turn it back to the start to solve. The system currently keeps track of how the cube is held so you could start from any rotation.
Yes, I understand that. What I'm saying is that in that solve, the last face you looked at required a certain move, and the first move of the solution happened to be exactly the inverse of that move. Therefore, if you could have predicted the last face, you could have saved both moves on that solve. In general, you can save at least one of those moves (most of the time).
 
Hi everyone,
This is then used to generate a solution of approximately 22 moves using the Kociemba algorithm.

I would love to be in contact to perhaps help with this; I think if you are using
22 move solutions it's quite likely there is a lot of speedup to be had in the
solving algorithm. Or perhaps you are using longer algorithms because the robot
can execute them faster?

In any case, my contact info is on http://cube20.org/ and I'd be absolutely
delighted to hear from you.
 
- Have you considered recording a few of shortest solutions found by the algorithm and using a simple metric (count up and weight the number of grips / turns to estimate actual solve time) to pick the best one?

- You could also consider leaving the algorithm online and searching for shorter solutions from certain parts of the solve, allowing you to switch to one of them if you find it before your robot gets to executing that part of the solve. (e.g. find a solution with 22 moves, then start solving and try to compute a solution to what the cube state will be after, say, 4 moves. If you quickly find a solution for *that* which is under 18 moves (or faster to execute, if you use the robot metric), switch to it after the fourth move).

- If you want to do a little math (which should nevertheless be very fast for the computer), avoid scanning the sixth face if it is determined by the other 5.

- As far as I know, none of these three has been implemented in a robot before, but they seem like relatively easy ways to shave off some time.

Great ideas!

- ARM Speedcuber already finds multiple solutions and picks the best using a model of the mechanics to predict how long the mechanical solve will take. (http://www.speedsolving.com/wiki/index.php/Robots)

- I've experimented with "keeping the algorithm online" but my code has never found a solution with fewer moves part of the way through, and even if it did, I suspect the chances of it being faster mechanically too are probably slim

- I've considered only scanning 5 faces (a friend's idea) but in my robots reliability of color discrimination from the camera means is an issue. It is useful to have the redundancy of information in the 6th face to resolve and check for inaccuracies in scanning the other 5.

BTW - shaving off time is something Mike and I have strived very hard for in CubeStormer II ;-)
 
I would love to be in contact to perhaps help with this; I think if you are using
22 move solutions it's quite likely there is a lot of speedup to be had in the
solving algorithm. Or perhaps you are using longer algorithms because the robot
can execute them faster?

In any case, my contact info is on http://cube20.org/ and I'd be absolutely
delighted to hear from you.

It is worth considering the mechanics of the robot.

With CubeStormer II for example it is often the case that a 22 move solution is mechanically significantly faster than a 20 move solution for the same scramble!
 
When I saw you explain the method, I thought your technique was similar to Kociemba's algorithm?

No, I believe it is quite different. It is a two-phase, table driven algorithm that I developed before I knew any of the details of Kociemba's algorithm.
 
No, I believe it is quite different. It is a two-phase, table driven algorithm that I developed before I knew any of the details of Kociemba's algorithm.

Yes, I know it was independently developed but I recall seeing similarities in the two systems. Kociemba is also a two-phase table driven algorithm.

If I recall correctly your first phase was sub-optimal with an optimal second phase (like Kociemba).

Have you studied the other algorithm enough to know the differences?
 
Yes, I know it was independently developed but I recall seeing similarities in the two systems. Kociemba is also a two-phase table driven algorithm.

If I recall correctly your first phase was sub-optimal with an optimal second phase (like Kociemba).

Have you studied the other algorithm enough to know the differences?

I've just re-read Kociemba's description on http://kociemba.org/twophase.htm and yes it is very different. For example, I believe from this description that at the end of the first phase there need not be any pieces in their final position but with my algorithm there will be at least 7 pieces in their final position at the end of the first phase.

Is this enough to convince you that they are different? ;-)
 
Is this enough to convince you that they are different? ;-)

No, no, don't get me wrong - I was aware they were different. I just recall seeing similarities between the two. Time passing seems to have made me assume they were more similar than they actually are.

Do you feel like giving more details on your algorithm or is it a secret for now? :)
 
Status
Not open for further replies.
Back
Top