Showing posts with label puzzle. Show all posts
Showing posts with label puzzle. Show all posts

Tuesday, February 25, 2003

又遇 N Puzzle

針對 N Puzzle,之前以 CLIPS, C Language Integrated Production System 求解過,那是專家系統的課,所以我也很配合地,以 heuristic 的方式,寫起一條條的 production rules 。

這次研究所的 AI 課則要求分別利用 BFS (Breadth-First Search), DFS (Depth-First Search), Iterative Deepening DFS 及 A* Search 這四種方式來求解,並比較結果。

無論在 AI searh 理論方面,或是 OOA/OOD 上,這都是個有趣的練習,所以我自告奮勇要打頭陣,完成 framework, BFS, DFS, 和最後的整合及 CUI (Character-based User Interface) 等。

設計的目標有:

  1. Correctness
    最起碼要能通老師指定的兩個 case 的試驗。
  2. Clarity
    系統架構設計要清晰、簡單、易理解,以方便對軟體作追蹤、審閱、除錯、細部調整、功能刪減等。
  3. Performance
    在滿足了correctness 及clarity之後,還要考量程式的高階效率和低階效率。舉凡底層資料結構的選擇、和高層抽象表示法連結上的介面設計等,都是考量重點。
  4. Flexibility
    我們在設計時還希望對系統架構能保持一定的彈性。如,不要只針對 8-Puzzle 設計,而更進一步粹取出N-Puzzle的表達方式。

由於分析及設計階段就是採用 OOA/OOD 的方式,所以很自然地要採用支援 OO 的程式語言來實作。經討論,我們決定採用 ANSI C++ 來實作這份設計,並利用 GNU Compiler Collection 來製作可執行檔。

雖然我們只在 Windows 下的 DJGPP 搭配 rhide 的 IDE 及 Linux 下的 g++ 搭配 make 試著編譯過我們的源碼。但理論上應可以適用於任何支援「完整」ANSI C++ 語法的平台。除了 STL 外,還使用了namespace,所以古老的 C++ 編譯環境可能無法順利編出可執行檔。

※請參閱附件:

  1. The Report
  2. Its UML diagram
Tags: [] [] [] [] [] [] [] []

Sunday, July 02, 2000

The Puzzle Game

大學時(1996)選修的“專家系統”課,任課老師要我們以 CLIPS 實作智慧拼盤程式。當初對這的專家系統的 CLIPS 感到滿新鮮的,所以就把這個問題的核心往自己身上攬,而將使用者介面讓其他組員去發揮。CLIPS 是 C Language Integrated Production System 的縮寫,由美國 NASA 太空中心的一個人工智慧部門所發展,就發展專家系統而言,是個很有用的工具。

“智慧拼盤”(puzzle),是一個n×n的格狀棋盤(grid board)遊戲。棋盤上的每一格都有一個正方形的積木(block),每個積木都有自己正確順序(order)的位置,為了區別,依序編上1到n×n的 編號。遊戲啟始時先將其中一格積木取走,造成的空缺(blank),使相鄰的積木可以移動至空缺上,並編上“0”。如此,利用這個空缺,可以將棋盤上原先 就定位的積木之順序打散(disorder)。玩遊戲的一方(player)所要完成的目標(goal)就是要將積木利用空格 (編號為0),排回(reorder)原先的位置。

這個題目的目的是要設計一個會玩智慧拼盤的專家系統,所以一開始由人將積木的順序 打散,再要求電腦將其排回正確的位置。為了達成更好的展示效果,於是選定了圖形化的使用者介面。又為了簡化問題,於是先從3個階層著手,也就是3×3的智 慧拼盤遊戲,作為測試規則的用途。不過,為了將來能夠將系統套用於任何階層,所以規則制定時都很一般化,原則上這些規則要能在任何階層的智慧拼盤下運轉, 至於能否在任何階層都求出解答,不是目前所要求的。

這個軟體的開發平台是在 MS-DOS 下的 CLIPS v6.0 上建立 puzzle 規則,並利用 MS Windows 3.1 下的 MS Visual Basic 設計使用者介面。

※請參閱《智慧拼盤