• 沒有找到結果。

模組程式實現

在文檔中 中 華 大 學 (頁 38-49)

第四章 實驗結果

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)

在文檔中 中 華 大 學 (頁 38-49)

相關文件