第四章 實驗結果
4.1 模組程式實現
來得到電腦的最佳下棋位置,然後又如何透過具有人工智慧的井字遊戲演算法,來與 玩家產生遊戲的對奕互動。系統怎麼依照玩家的最新下棋位置,藉由演算法的試算並 找出具有對奕互動效果的電腦最佳下棋位置,讓棋局產生有趣的對奕效果。以下將針 對本模擬結果時序圖做完整的說明。
l 演算法模組架構
為實現該井字遊戲範例的人工智慧演算法,於是設計出一個能代表玩家已 完成下棋動作的新棋局狀態,在此以輸入訊號方式來表示。當棋局狀態經過井 字遊戲演算法的計算後,系統將產生電腦的最佳下棋位置,這些演算法的計算 與研判結果,在此以輸出訊號方式來表示。本演算法模組的控制訊號架構圖,
如圖 4-2 所示。
圖 4-2、井字遊戲演算法模組的架構圖
本井字遊戲演算法模組,分別有 4 組輸入及 4 組輸出訊號,這些訊號主要 讓我們在韌體設計階段,可以先透過 Quartus II 模擬軟體來產出控制訊號時序 圖,然後從時序圖上的控制訊號做推導,進一步了解本模組的模擬結果是否與 演算法理論相同,因此得知本模組程式的設計是否正確,以節省許多寶貴的問 題除錯時間。對於演算法模組的控制訊號說明表,如表 4-1 所示。
訊號名稱 (屬性)
資料
長度 功能說明
clock
(Input) 1-bit 作為模擬軟體的基礎時鐘(Clock)。
reset 1-bit 1.作為模擬軟體的重置(Reset)訊號。
(Input) 2.若 clock = “Low”,表示系統重置。
read_enable
(Input) 1-bit
1.作為啟動演算法模組的輸入觸發訊號。
2.若 read_enable 輸入一個上升緣觸發訊號,表示井 字遊戲演算法模組要開始做運算。
table_in
(Input) 18-bits
1.代表玩家已完成下棋動作,進入演算法運算前的 最新棋局狀態,共有 18-bit。
2.每一個棋局共有 9 個位置,每一個位置以 2-bit 來 表示。
busy
(Output) 1-bit
1.代表系統狀態的輸出訊號。
2.若 busy = “High”,表示系統忙碌,正在處理井字 遊戲演算法的運算,尚未算出電腦的最佳下棋位 置,不允許讀取結果。
max_position
(Output) 4-bits
1.代表系統完成演算法運算後,所找到的電腦最佳 下棋位置。
2.例如 max_position = 4,表示電腦的最佳下棋位置 為 P4 位置。
max_calculate
(Output) 4-bits
1.代表系統完成演算法運算後,該棋局的評估函數 最大值。
2.例如 max_calculate = 8,表示該棋局的評估函數最 大值為 8。
table_out
(Output) 18-bits
1.代表系統已完成演算法運算,找到電腦的最佳下 棋位置,並完成電腦下棋動作的最新棋局狀態,共 有 18-bits。
2.每一個棋局共有 9 個位置,每一個位置以 2-bit 來 表示。
表 4-1、演算法模組的控制訊號說明表
1. 控制訊號 table_in 及 table_out 的 Bit[1:0] 都是代表井字遊戲棋局的 P0 位 置,Bit[3:2] 表示棋局的 P1 位置,Bit[5:4] 表示棋局的 P2 位置,依此類
推…,Bit[17:16] 則表示棋局的 P8 位置,如圖 4-3 所示。
圖 4-3、table_in 及 table_out 與井字遊戲棋局的對應圖
2. 在 table_in 及 table_out 中,用來代表棋盤下棋狀態的這兩個位元 Bit[s:t],
其中 s = (n*2)+1,t = (n*2),n = 0、1、2…、8,表示如下:
(1). Bit[s:t] = “00”,代表該棋局位置未被玩家或電腦下過。
(2). Bit[s:t] = “01”,代表該棋局位置已被電腦下過。
(3). Bit[s:t] = “10”,代表該棋局位置已被玩家下過。
3. 範例說明:假設有一井字遊戲,電腦以「O」表示,玩家以「X」表示,
進行到電腦完成下棋動作,table_out = “00 00 00 00 01 00 01 00 10”,如圖 4-4(a) 所示。然後玩家也隨之完成下棋動作,table_in = “00 00 10 00 01 00 01 00 10”,如圖 4-4(b) 所示。則這兩個下棋步驟在實際井字遊戲的棋局位置 及狀態,如圖 4-4 所示。
圖 4-4、table_in 與 table_out 的範例說明
l 模擬結果說明
關於井字遊戲演算法的軟體模擬結果,是以 Quartus II 為模擬軟體平台,採 用與該井字遊戲範例相同的「最佳解優先搜尋法」評估函數,以及與電腦和玩 家相同的對弈棋步,最後得到與該評估函數理論值相同的模擬結果。軟體模擬
結果說明表(1/5),如下表 4-2 所示:
時間 控制事件 動作說明
T1 table_in =
“000000000000000000”
假設這是一個新開始的棋局,棋盤上的所有位置 都是空的,因此記錄目前的棋局狀態到 table_in 記憶體,如圖 4-5(a)。
T2 ready_enable = LàH busy = LàH
(1).若由電腦先下,當系統已確認所有的棋盤位置 狀態後,演算法模組收到 read_enable 上升緣觸發 訊號,表示系統要做演算法的運算。
(2).在收到 read_enable 上升緣觸發訊號的同時,
busy 訊號也跟著拉起來。由於兩者沒有時間上的 延遲,因此不會有時序上的錯誤發生。
(3).若 busy = “High”,代表系統正在處理演算法的 運算工作,系統狀態為忙碌。
T3
max_calculate = 8 max_position = 4 table_out =
“000000000100000000”
(1).在系統忙碌期間(busy = “High”),主控制程 式在完成演算法的運算後,將得知評估函數的最 大值為 8(max_calculate = 8),電腦的最佳下棋 位置為 P4(max_position = 4)。
(2).在電腦完成下棋動作後,系統將紀錄最新的棋 局狀態到 table_out = “000000000100000000”,表 示棋局位置 P4 已被電腦下過,如圖 4-5(b)。
T4 busy = H à L
(1).系統在 busy 送出下降緣觸發訊號前,已完成 演算法運算;然後在 busy 送出下降緣觸發訊號 後,讀出電腦最佳下棋位置的計算結果。
(2).若 busy = “Low”,代表系統不在忙碌狀態,此 時已完成演算法的運算,隨後電腦將完成下棋動 作,輪到玩家下棋。
表 4-2、軟體模擬結果說明表(1/5)
圖 4-5、軟體模擬結果說明圖(1/5)
軟體模擬結果說明表(2/5),如下表 4-3 所示:
時間 控制事件 動作說明
T5 table_in =
“000000000100000010”
(1).假設玩家選擇 P0 的下棋位置。
(2).系統會把當時的棋局狀態,記錄到 table_in =
“000000000100000010”,代表玩家已完成下棋動 作,如圖 4-6(c)。
T6 ready_enable = L à H busy = L à H
(1).當系統已辨識出玩家的下棋位置後,控制訊號 read_enable 收到上升緣觸發訊號,表示系統開始 執行演算法的運算。
(2).在收到 read_enable 上升緣觸發訊號的同時,
busy 訊號也跟著拉起來,兩者沒有時間上的延 遲,因此不會有時序上的錯誤發生。
(3).若 busy = “High”,代表系統正在處理演算法的 運算工作,系統為忙碌狀態。
T7
max_calculate = 5 max_position = 2 table_out =
“000000000100010010”
(1).在系統忙碌期間(busy = “High”),主控制程 式在完成演算法的運算後,將得知評估函數的最 大值為 5(max_calculate = 5),共有 5 個位置,
分別為 P2、P5、P6、P7 和 P8。此時系統選擇最 前面的 P2(max_position = 2),作為電腦的最佳 下棋位置。
(2).在電腦完成下棋動作後,系統將紀錄最新的 棋局狀態到 table_out = “000000000100010010”,
表示棋局位置 P2 已被電腦下過,如圖 4-6(d)。
T8 busy = H à L
(1).系統在 busy 送出下降緣觸發訊號前,已完成 演算法運算;然後在 busy 送出下降緣觸發訊號 後,讀出電腦最佳下棋位置的計算結果。
(2).若 busy = “Low”,代表系統不在忙碌狀態,此 時已完成演算法的運算,隨後電腦將完成下棋動 作,輪到玩家下棋。
表 4-3、軟體模擬結果說明表(2/5)
圖 4-6、軟體模擬結果說明圖(2/5)
軟體模擬結果說明表(3/5),如下表 4-4 所示:
時間 控制事件 動作說明
T9 table_in =
“000010000100010010”
(1).假設玩家選擇 P6 的下棋位置。
(2).系統會根據玩家的下棋位置,把新的棋局狀態 記錄到 table_in = “000010000100010010”,代表玩 家已完成下棋動作,如圖 4-7(e)。
T10 ready_enable = L à H busy = L à H
(1).當系統已辨識出玩家的下棋位置後,控制訊號 read_enable 收到上升緣觸發訊號,表示系統開始 執行演算法的運算。
(2).在收到 read_enable 上升緣觸發訊號的同時,
busy 訊號也跟著拉起來,兩者沒有時間上的延 遲,因此不會有時序上的錯誤發生。
(3).若 busy = “High”,代表系統正在處理演算法的 運算工作,系統為忙碌狀態。
T11
max_calculate = 7 max_position = 3 table_out =
“000010000101010010”
(1).在系統忙碌期間(busy = “High”),主控制程 式在完成演算法的運算後,將得知評估函數的最 大值為 7(max_calculate = 7),電腦的最佳下棋 位置為 P3(max_position = 3)。
(2).在電腦完成下棋動作後,系統將紀錄最新的棋 局狀態到 table_out = “000010000101010010”,表 示棋局位置 P3 已被電腦下過,如圖 4-7(f)。
T12 busy = H à L
(1).系統在 busy 送出下降緣觸發訊號前,已完成 演算法運算;然後在 busy 送出下降緣觸發訊號 後,讀出電腦最佳下棋位置的計算結果。
(2).若 busy = “Low”,代表系統不在忙碌狀態,此 時已完成演算法的運算,隨後電腦將完成下棋動 作,輪到玩家下棋。
表 4-4、軟體模擬結果說明表(3/5)
軟體模擬結果說明表(4/5),如下表 4-5 所示:
時間 控制事件 動作說明
T13 table_in =
“000010100101010010”
(1).假設玩家選擇 P5 的下棋位置。
(2).系統會根據玩家的下棋位置,把新的棋局狀態 記錄到 table_in = “000010100101010010”,代表玩 家已完成下棋動作,如圖 4-8(g)。
T14 ready_enable = L à H busy = L à H
(1).當系統已辨識出玩家的下棋位置後,控制訊號 read_enable 收到上升緣觸發訊號,表示系統開始 執行演算法的運算。
(2).在收到 read_enable 上升緣觸發訊號的同時,
busy 訊號也跟著拉起來,兩者沒有時間上的延 遲,因此不會有時序上的錯誤發生。
(3).若 busy = “High”,代表系統正在處理演算法的 運算工作,系統為忙碌狀態。
T15
max_calculate = 4 max_position = 1 table_out =
“000010100101010110”
(1).在系統忙碌期間(busy = “High”),主控制程 式在完成演算法的運算後,將得知評估函數的最 大值為 4(max_calculate = 4),電腦的最佳下棋 位置為 P1(max_position = 1)。
(2).在電腦完成下棋動作後,系統將紀錄最新的棋 局狀態到 table_out = “000010100101010110”,表 示棋局位置 P1 已被電腦下過,如圖 4-8(h)。
T16 busy = H à L
(1).系統在 busy 送出下降緣觸發訊號前,已完成 演算法運算;然後在 busy 送出下降緣觸發訊號 後,讀出電腦最佳下棋位置的計算結果。
(2).若 busy = “Low”,代表系統不在忙碌狀態,此 時已完成演算法的運算,隨後電腦將完成下棋動 作,輪到玩家下棋。
表 4-5、軟體模擬結果說明表(4/5)
圖 4-8、軟體模擬結果說明圖(4/5)
軟體模擬結果說明表(5/5),如下表 4-6 所示:
時間 控制事件 動作說明
T17 table_in =
“001010100101010110”
(1).假設玩家選擇 P7 的下棋位置。
(2).系統會根據玩家的下棋位置,把新的棋局狀態 記錄到 table_in = “001010100101010110”,代表玩 家已完成下棋動作,如圖 4-9(i)。
T18 ready_enable = L à H busy = L à H
(1).當系統已辨識出玩家的下棋位置後,控制訊號 read_enable 收到上升緣觸發訊號,表示系統開始 執行演算法的運算。
(2).在收到 read_enable 上升緣觸發訊號的同時,
busy 訊號也跟著拉起來,兩者沒有時間上的延 遲,因此不會有時序上的錯誤發生。
(3).若 busy = “High”,代表系統正在處理演算法的 運算工作,系統為忙碌狀態。
T19
max_calculate = 6 max_position = 8 table_out =
“011010100101010110”
(1).在系統忙碌期間(busy = “High”),主控制程 式在完成演算法的運算後,將得知評估函數的最 大值為 6(max_calculate = 6),電腦的最佳下棋 位置為 P8(max_position = 8)。
(2).在電腦完成下棋動作後,系統將紀錄最新的棋 局狀態到 table_out = “011010100101010110”,表 示棋局位置 P1 已被電腦下過,最後雙方和局。如 圖 4-9(j)。
表 4-6、軟體模擬結果說明表(5/5)
圖 4-9、軟體模擬結果說明圖(5/5)