Rubik's Cube Simulator & SolverMô Phỏng & Giải Rubik's Cube
Initializing 3D Environment...Đang khởi tạo môi trường 3D...
Manual MovesXoay Thủ Công
Status / Move FeedTrạng Thái / Các Bước
Ready. Cube is Solved.Sẵn sàng. Rubik đã được giải.
How It Works
Solving a Rubik’s Cube programmatically is a classic problem in computer science. There are two primary ways algorithms solve this puzzle:
Rule-Based Search (Kociemba’s Algorithm): Solves the Rubik’s cube in 20 moves or less by breaking down the $4.3 \times 10^{19}$ states into subgroups.
Reinforcement Learning (RL): Using deep neural networks to learn representations of state orientation and using Deep Q-Learning or Pathfinding with Value Iteration to find optimal paths back to the solved state.
Giải khối Rubik bằng lập trình là một bài toán kinh điển trong khoa học máy tính. Có hai phương pháp chính mà các thuật toán sử dụng để giải câu đố này:
Tìm kiếm dựa trên luật lệ (Thuật toán Kociemba): Giải khối Rubik trong tối đa 20 bước xoay bằng cách chia nhỏ $4.3 \times 10^{19}$ trạng thái thành các nhóm con.
Học Tăng Cường (Reinforcement Learning - RL): Sử dụng mạng nơ-ron sâu để học cách biểu diễn định hướng trạng thái và sử dụng Deep Q-Learning hoặc Tìm đường với Lặp giá trị (Value Iteration) để tìm đường đi tối ưu đưa rubik về trạng thái đã giải.
The Python Desktop App (Option B)
If you want to train your own Reinforcement Learning Agent or run a native interactive solver on your computer, check out our Python implementation inside the python_app subdirectory.
To get started, clone the repository and run:
Nếu bạn muốn tự huấn luyện Agent Học Tăng Cường của riêng mình hoặc chạy trình giải tương tác gốc trên máy tính, hãy xem phần triển khai mã nguồn Python của chúng tôi trong thư mục con python_app.
Để bắt đầu, hãy nhân bản kho lưu trữ và chạy lệnh:
cd _MachineLearningProjects/05_Rubik/python_app
pip install-r requirements.txt
python gui.py
Reinforcement Learning Implementation Details
We define the Rubik’s Cube state space as a flattened vector representing color mapping of stickers. The reward structure:
Solved State: $+100$
Non-solved State: $-1$ per move to encourage finding the shortest path.
Using Deep Q-Networks (DQN) or double-DQN with experience replay, the agent learns sequence behaviors to untangle the cube.
Chúng tôi định nghĩa không gian trạng thái của Rubik dưới dạng một vectơ phẳng đại diện cho bản đồ màu của các nhãn dán. Cấu trúc phần thưởng:
Trạng thái Đã Giải: $+100$
Trạng thái Chưa Giải: $-1$ cho mỗi bước di chuyển để khuyến khích tìm đường đi ngắn nhất.
Sử dụng Mạng Q Sâu (DQN) hoặc double-DQN với lưu trữ trải nghiệm (experience replay), tác nhân (agent) sẽ học các hành vi chuỗi để gỡ rối khối rubik.
📘 Step-by-Step Guide to Solving a Rubik’s Cube (Beginner’s Method)
Understanding Cube Notation 📖
To follow Rubik’s Cube algorithms, you need to understand Singmaster Notation. Each letter represents a $90^\circ$ clockwise rotation of a specific face (as if you are looking directly at that face):
Để thực hiện được các công thức xoay Rubik, bạn cần hiểu Ký hiệu Singmaster. Mỗi chữ cái đại diện cho một lượt xoay $90^\circ$ theo chiều kim đồng hồ của một mặt cụ thể (như thể bạn đang nhìn thẳng vào mặt đó):
U (Up)Clockwise top layerXoay mặt U theo chiều kim
D (Down)Clockwise bottom layerXoay mặt đáy theo chiều kim
F (Front)Clockwise front faceXoay mặt trước theo chiều kim
R (Right)Clockwise right layerXoay mặt bên phải theo chiều kim
L (Left)Clockwise left layerXoay mặt bên trái theo chiều kim
Suffix Modifiers:
Prime ($’$) Suffix (e.g., $R’$, $U’$): Rotate the face counter-clockwise (e.g., $R’$ is Right counter-clockwise).
Number $2$ Suffix (e.g., $F2$, $U2$): Rotate the face $180^\circ$ (direction does not matter since two turns result in the same position).
If you want to solve the Rubik’s Cube manually, here is a breakdown of the standard Layer-by-Layer method:
Các Ký Hiệu Bổ Sung:
Dấu Phẩy ($’$) (ví dụ: $R’$, $U’$): Xoay mặt đó ngược chiều kim đồng hồ (ví dụ: $R’$ là xoay mặt Phải ngược chiều kim).
Số $2$ (ví dụ: $F2$, $U2$): Xoay mặt đó $180^\circ$ (hướng nào cũng được vì hai lần xoay $90^\circ$ sẽ cho kết quả giống nhau).
Nếu bạn muốn tự tay giải khối Rubik, dưới đây là chi tiết phương pháp giải từng tầng (Layer-by-Layer):
1. The White Cross ⬜
Find the yellow center piece. Move the 4 white edge pieces around the yellow center to form a “daisy”. Then, align the non-white color of each edge with its matching center piece and rotate that layer $180^\circ$ (a double turn) down to form a clean white cross on the bottom where the white edges match their side centers.
Tìm viên tâm màu vàng ở mặt trên. Di chuyển 4 viên cạnh màu trắng xung quanh viên tâm màu vàng để tạo hình hoa cúc (daisy). Tiếp theo, xoay khớp màu bên của mỗi viên cạnh trắng với viên tâm mặt bên tương ứng rồi xoay mặt đó $180^\circ$ xuống dưới để tạo thành chữ thập màu trắng chuẩn xác ở mặt đáy.
Daisy Pattern TargetMục Tiêu Mẫu Hoa Cúc
Bottom White Cross TargetMục Tiêu Chữ Thập Trắng Đáy
2. The First Layer Corners 🧩
Find white corner pieces on the top layer. Position them above the slot they belong to (determined by the other two colors of the corner). Execute the key algorithm (the Sexy Move) until the corner is correctly placed: \(\text{Algorithm: } R \ U \ R' \ U'\)
Tìm các viên góc có màu trắng ở tầng trên cùng. Di chuyển chúng tới vị trí ngay trên khe mà chúng thuộc về (xác định bởi hai màu còn lại của viên góc). Thực hiện công thức cốt lõi (gọi là Sexy Move) cho tới khi viên góc được đặt đúng chỗ: \(\text{Công thức: } R \ U \ R' \ U'\)
Solved First Layer Target (Bottom Face + Edges match Center)Mục Tiêu Tầng Đầu Tiên (Mặt Đáy Trắng + Khớp Cạnh Mặt Bên)
✓ Bottom layer is solid White✓ Mặt đáy đã hoàn thành Trắng
✓ T-shapes formed on all 4 sides✓ Tạo hình chữ T ở cả 4 mặt bên
3. Middle Layer (Second Layer Edges) 🟩
Find edge pieces on the top layer that do not contain yellow. Align the front color of the edge with its matching center.
To insert the edge to the Right: \(\text{Algorithm: } U \ R \ U \ R' \ U' \ F' \ U' \ F\)
To insert the edge to the Left: \(\text{Algorithm: } U' \ L' \ U' \ L \ U \ F \ U \ F'\)
Tìm các viên cạnh ở tầng trên cùng mà không chứa màu vàng. Xoay tầng trên để màu mặt trước của viên cạnh trùng khớp với viên tâm tương ứng bên dưới.
Để đưa viên cạnh sang khe bên Phải: \(\text{Công thức: } U \ R \ U \ R' \ U' \ F' \ U' \ F\)
Để đưa viên cạnh sang khe bên Trái: \(\text{Công thức: } U' \ L' \ U' \ L \ U \ F \ U \ F'\)
4. Yellow Cross (Orienting Edges) 🟨
Look at the top face. You will have a dot, an ‘L’ shape, a horizontal line, or a cross. Repeat this algorithm to progress towards the cross: \(\text{Algorithm: } F \ R \ U \ R' \ U' \ F'\)
Nhìn vào mặt trên của khối rubik. Bạn sẽ có một trong bốn trường hợp: một chấm tròn vàng ở tâm, hình chữ ‘L’ ngược, một đường thẳng nằm ngang hoặc chữ thập đã hoàn thành. Lặp lại công thức dưới đây để đạt được mục tiêu chữ thập: \(\text{Công thức: } F \ R \ U \ R' \ U' \ F'\)
1. Dot Case1. Trường hợp Chấm
2. L-Shape Case2. Trường hợp Chữ L
3. Line Case3. Trường hợp Đường Thẳng
4. Cross Target4. Mục Tiêu Chữ Thập
5. Aligning the Yellow Cross (Make a Cross Correctly with the 2nd Layer Below) 🟨
Once you have the yellow cross, you must align its side colors with the center pieces of the middle layer.
Turn the top layer to match as many side colors to their corresponding centers as possible.
If two adjacent edges match (e.g., Back and Right): Hold the cube so the matching edges are at the Back and Right faces, then execute the algorithm (known as Sune): \(\text{Algorithm: } R \ U \ R' \ U \ R \ U2 \ R' \ [U]\)
If two opposite edges match: Hold them on the Left and Right faces, execute the algorithm once, then re-align and follow the adjacent edges rule.
Sau khi có chữ thập vàng, bạn cần căn chỉnh màu các cạnh bên của chữ thập sao cho khớp với các viên tâm của tầng giữa (tầng 2).
Xoay tầng trên cùng để khớp nhiều cạnh nhất có thể với các tâm mặt bên tương ứng.
Nếu hai cạnh liền kề khớp (ví dụ: Mặt sau và bên Phải): Giữ khối rubik sao cho hai cạnh khớp nằm ở mặt Sau và mặt bên Phải, sau đó thực hiện công thức (gọi là Sune): \(\text{Công thức: } R \ U \ R' \ U \ R \ U2 \ R' \ [U]\)
Nếu hai cạnh đối diện khớp: Giữ chúng ở mặt bên Trái và mặt bên Phải, thực hiện công thức một lần, sau đó xoay căn chỉnh lại tầng trên và áp dụng quy tắc của hai cạnh liền kề.
Before: Mismatched EdgesTrước: Cạnh Chưa Khớp
Right edge (Orange) does not match center (Red).Cạnh bên phải (Cam) lệch so với tâm (Đỏ).
After: Aligned CrossSau: Khớp Chữ Thập
Top face shows a solved yellow cross; side colors not yet aligned.Mặt trên đã có chữ thập vàng; các màu mặt bên chưa được căn chỉnh.
After: Aligned EdgesSau: Khớp Cạnh
All four edge colors match their corresponding side centers.Cả 4 cạnh đã trùng khớp màu hoàn hảo với mặt bên.
Step 3: Position the Corners 🧩
Now, look at the yellow corners. The goal in this step is to get all four corners into their correct positions, even if they are not rotated facing the correct way (for example, a corner is in the correct spot if its three colors match the three surrounding side colors).
Standard Formula: \(U \ R \ U' \ L' \ U \ R' \ U' \ L\)
What it means: Top left, Right up, Top right, Left up, Top left, Right down, Top right, Left down
How to apply it:
If zero corners are in the correct place: Hold the cube in any rotation (with yellow on top) and perform the formula once. This will place at least one corner in the correct spot.
If one corner is in the correct place: Rotate the cube so that this correct corner is positioned in the bottom-right of the yellow top face (which is the Front-Right-Top / UFR slot). Perform the formula again. Check if all corners are in the correct place; if not, repeat the formula one more time with the correct corner still in the bottom-right.
Bây giờ, hãy nhìn vào các góc màu vàng. Mục tiêu của bước này là đưa cả 4 viên góc về đúng vị trí (khe) của chúng, ngay cả khi chúng chưa xoay đúng mặt màu (ví dụ, một góc nằm đúng chỗ nếu 3 màu của nó khớp với 3 màu mặt tâm xung quanh).
Công thức chuẩn: \(U \ R \ U' \ L' \ U \ R' \ U' \ L\)
Ý nghĩa: Mặt trên sang trái, Mặt phải hướng lên, Mặt trên sang phải, Mặt trái hướng lên, Mặt trên sang trái, Mặt phải hướng xuống, Mặt trên sang phải, Mặt trái hướng xuống.
Cách áp dụng:
Nếu không có góc nào đúng vị trí: Giữ khối rubik ở bất kỳ hướng xoay nào (mặt vàng ở trên) và thực hiện công thức một lần. Điều này sẽ đưa ít nhất một góc về đúng chỗ.
Nếu có một góc đúng vị trí: Xoay khối rubik để viên góc đúng này nằm ở phía dưới bên phải của mặt vàng trên cùng (chính là góc Trước-Phải-Trên / vị trí UFR). Thực hiện công thức thêm lần nữa. Kiểm tra xem tất cả các góc đã về đúng vị trí chưa; nếu chưa, lặp lại công thức một lần nữa với viên góc đúng vẫn giữ ở phía dưới bên phải.
Before: Scrambled CornersTrước: Các Góc Sai Vị Trí
Corners are in the wrong slots (e.g. Green face corner is Orange).Các viên góc nằm sai khe (ví dụ: góc ở mặt Xanh có màu Cam).
After: Corners in Correct SlotsSau: Góc Đúng Vị Trí Khe
Corners belong to these slots (colors match), but are twisted.Các góc đã về đúng vị trí khe khớp màu, nhưng đang bị xoay lệch.
Step 4: Solve the Corners (The Core 4-Move Formula) ✨
In this final step, you will rotate the corner pieces to face the correct way, solving the entire cube. Make sure the yellow cross is still matched up and all corners are in their correct positions before starting.
The Formula (The “Four Moves”):
Right side down ($R’$)
Bottom to the left ($D’$)
Right side up ($R$)
Bottom to the right ($D$)
How to apply it:
Step A: Position one unsolved yellow corner in the front-right spot of the yellow top face (the UFR slot).
Step B: Perform the 4-move formula twice ($2\times$) and check if that corner is solved (with yellow facing up). If it is not solved, perform the 4-move formula another two times (making four times total).
Step C:Do not rotate the entire cube. Once the first corner is solved, rotate only the top layer ($U$ or $U’$) to bring the next unsolved yellow corner into that exact same front-right spot.
Step D: Repeat the 4-move formula (either 2 or 4 times) for this corner until it is solved.
Step E: Continue rotating the top layer to bring any remaining unsolved corners into the front-right spot and apply the formula until all corners are solved.
Finally, rotate the top layer to align the sides, and your Rubik’s Cube is fully solved!
Trong bước cuối cùng này, bạn sẽ xoay các viên góc để hướng đúng mặt màu lên trên, hoàn thành giải toàn bộ khối rubik. Đảm bảo chữ thập màu vàng vẫn khớp màu và tất cả các viên góc đã nằm đúng vị trí khe trước khi bắt đầu.
Công thức (“Bốn Bước Xoay”):
Mặt phải hướng xuống ($R’$)
Mặt đáy sang trái ($D’$)
Mặt phải hướng lên ($R$)
Mặt đáy sang phải ($D$)
Cách áp dụng:
Bước A: Đặt một viên góc màu vàng chưa giải vào vị trí trước-phải của mặt vàng trên cùng (vị trí UFR).
Bước B: Thực hiện công thức 4 bước xoay trên 2 lần ($2\times$) và kiểm tra xem góc đó đã được giải chưa (mặt vàng hướng lên trên). Nếu chưa giải xong, thực hiện tiếp công thức 4 bước trên thêm 2 lần nữa (tổng cộng là 4 lần).
Bước C:Tuyệt đối không xoay cả khối rubik. Khi góc đầu tiên đã giải xong, hãy xoay chỉ riêng tầng trên cùng ($U$ hoặc $U’$) để đưa góc vàng chưa giải tiếp theo vào đúng vị trí trước-phải đó.
Bước D: Lặp lại công thức 4 bước xoay (2 hoặc 4 lần) cho viên góc này cho đến khi nó được giải xong.
Bước E: Tiếp tục xoay tầng trên cùng để đưa các góc chưa giải còn lại vào vị trí trước-phải và áp dụng công thức cho đến khi tất cả các góc được giải.
Cuối cùng, xoay tầng trên cùng để căn chỉnh trùng khớp các mặt bên, khối Rubik của bạn đã được giải hoàn toàn!
Before: Twisted CornersTrước: Các Góc Bị Xoay Lệch
Corners are correct on sides, but yellow face points sideways.Các góc đúng khe ở mặt bên, nhưng mặt vàng hướng sang bên.
After: Fully Solved!Sau: Giải Hoàn Tất!
All layers and sides are aligned and solved.Toàn bộ các tầng và mặt bên đã hoàn thành!