今天原本安排要繼續進行測試,結果一早開始搜尋資料和配置環境,意外把注意力放到魔術方塊上。這是一個很久以前做過的舊專案,當時曾經思考過使用 Python 計算三階魔術方塊的解答,今天重新整理之後,發現它不只是有趣的玩具,也可能成為一個很好的合作機會。
如果能把魔術方塊求解器重新整理完成,除了可以展示程式能力,也能和喜歡數學、演算法、人工智慧以及硬體加速的人交流。對新手來說,這類專案的吸引力在於結果非常直觀。只要輸入一組打亂的狀態,程式最後真的能夠列出還原步驟,就會很有成就感。
不過真正開始研究後,我才發現這個問題比想像中困難。表面上看起來只是轉動六個面,實際上每一次轉動都會影響許多方塊的位置和方向。想要有效率地找到解答,就必須理解狀態表示、搜尋策略、剪枝方法,以及背後的群論概念。
目前常被提到的 Kociemba 方法,通常是指兩階段求解法。它會先把魔術方塊轉換到較容易處理的狀態,再繼續尋找完整解答。這和嚴格意義上保證每次都找到最短步數的上帝演算法並不完全相同,因此不能只看到名稱就把所有方法混為一談。根據網站 (kociemba.org)
今天也注意到,Python 很適合用來驗證想法和建立原型,但當搜尋空間變大時,速度可能會成為限制。未來可以再比較一般 CPU、多執行緒,以及 GPU 是否適合這類計算。GPU 不一定能直接解決所有問題,因為求解過程包含大量狀態管理和分支判斷,必須先了解演算法特性,再決定是否值得加入加速。
雖然今天沒有完成原本預定的測試,卻找到一個新的研究方向。這也讓我重新理解,專案不一定要每天照著原定路線前進。有時候一次意外的搜尋,反而能找到更適合展示能力的題目。接下來我會先從狀態表示和簡單搜尋開始,讓這個舊專案重新運轉,再一步一步補上數學理論和效能測試。