第三章、 系統設計
3.2 各功能之設計
以下將說明在 3.1 節需求中提出來的運算功能,以及第一章提到的雲端教學系統的 情境,兩者之間如何搭配利用。這邊將以情境為主來說明各功能如何配合。
3.2.1 算出最佳著手
算出最佳著手是利用六子棋人工智慧程式計算出目前盤面上下一步怎麼走最好。因 為每一個盤面只需要運算出一個最好的結果,所以主要利用到每個工作只會有一個結果 的「單一結果回傳」功能。「單一結果回傳」這個功能也是一般桌機格網系統或是雲端 系統皆有提供的最基本功能。
單一結果回傳的執行流程:
1. Client 發送一個 Job 給 Broker。
2. Broker 挑選 Worker 來執行此 Job。
3. 直到 Worker 執行完成才將結果回傳給 Broker。
4. Broker 再將結果傳回給 Client 。
圖表 6 算出最佳著手流程
3.2.2 算出所有擋法
算出所有擋法則是透過六子棋人工智慧程式先算出目前的盤面是否已經有一方已 經必勝了,無論防守方怎麼擋都無法阻止攻擊方獲勝。但若是目前盤面還沒有任何一方 已經被計算出必勝的話,六子棋人工智慧程式則是會回傳所有可能可以防守的方法。這 些所有擋法的數量通常會非常非常的龐大,而且部份的資訊就有用。所以我們不能等到 所有的擋法都計算出來之後才一次全部回傳,也就不能夠使用之前的「單一結果回傳」
功能,而是要利用提供類似 Streaming 的方式,Worker 計算出了多少結果,就把那些結 果回傳給 Broker 的「連續結果回傳」這個功能,這個功能也是一般市面上的桌機格網系 統或是一般雲端系統中比較少見到有提供的運算功能,但是為了滿足六子棋人工智慧程 式的特性我們必須要提供「連續結果回傳」。
連續結果回傳的執行流程:
1. Client 發送一個 Job 給 Broker。
2. Broker 挑選 Worker 來執行此 Job。
3. Worker 邊執行邊產生部分結果就回傳給 Broker。
4. Broker 也立刻將此結果回傳給 Client。
圖表 7 算出所有擋法流程-1
然而 Client 也可能從這些部份的結果去產生新的工作來執行,或是要求 Broker 中止 一個正在執行中的工作,為了要做到這一點 Worker 也必須要持續的與 Broker 保持連線 狀態,才能收到來自 Broker 中止一個 Job 的指令。
圖表 8 算出所有擋法-2
圖表 9 算出所有擋法-3
3.2.3 棋譜儲存與搜尋
首先是棋譜儲存,主要工作內容就是 Client 想要將一個盤面儲存在雲端,作法是利 用「資料儲存」的功能,Client 首先會將該盤面傳給 Broker,之後由 Broker 來決定要把 該盤面存在哪個 Worker 上,Client 不需要知道該盤面最後是儲存在哪個 Worker 上。
棋譜儲存的執行流程:
1. Client 發送一個要儲存的盤面給 Broker。
2. Broker 挑選 Worker 來儲存此盤面。
3. Client 不需知道該盤面儲存於哪個 Worker,僅得到來自 Broker 表示完成的訊息。
圖表 10 棋譜儲存流程
最後是棋譜搜尋的部份,棋譜搜尋是利用一個盤面、部份棋型或是 Little Golem 上 的玩家資訊去雲端資料庫中搜尋一個完整的盤面。主要是要利用「Map-Reduce 資料搜 尋」功能。執行流程會分為 Map 階段與 Reduce 階段,在 Map 階段 Broker 會把將此搜 尋工作傳送給所有負責儲存的 Worker,所有負責儲存的 Worker 都要執行此類工作,各 自搜尋本機的儲存空間有無符合的結果,之後再將搜尋結果回傳給 Broker,而 Broker 的 Reduce 階段則會接收各個 Worker 回傳的結果並排序,排序的方式我們是依照 Little Golem 網站上面雙方玩家的分數來排序,我們認為實力比較高強的玩家所下出來的盤面 是比較重要也比較具代表性的。Reduce 完成之後會把排序好的所有盤面再回傳給 Client。
棋譜搜尋的執行流程:
1. Client 發送一個要搜尋的盤面給 Broker。
2. Broker 上面的 Map 方法執行。
a. Broker 將此盤面 Map 給所有負責儲存的 Worker。
b. 由各 Worker 在各自本機的儲存空間搜尋。
3. 各 Worker 分別執行並回傳結果給 Broker。
4. Broker 上面的 Reduce 方法執行。
a. Broker 等著接收各 Worker 的回傳結果。
b. 蒐集完所有 Worker 的結果後進行排序。
c. 再將排序後的結果回傳給 Client。
圖表 11 Map-Reduce 棋譜搜尋