本研究的蜜月橋牌是 C++語言寫成的,開發軟體式 Dev C++ 4.9.9.2,硬體的 規格是 Intel Core i5-2400cpu 3.10GHz,記憶體 2GB,作業系統 Windows7 SP1
32Bit。
我們將實驗分成三個,第一個是測試第一階段喊牌的效果如何,第二個則測 試換牌有沒有如我們預期的改進,第三個是測試無王演算法加入 Alpha-Beta
pruning 的速度及準確率如何。
以下為實際遊戲畫面:
50
51
4.1 喊牌測試與分析
首先我們要測試的是改變喊牌策略以後勝率會不會變得比較高,所以我就設 計了ㄧ個自動對下程式 com 代表的是葉俊廷原始程式的喊牌策略,player 代表的 是我改良過後的喊牌策略。第二階段換牌跟第三階段打牌用的都是原來同一套演 算法。以這個模式測試了 50 場,而我改良的喊牌策略贏了 40 場。結果如表 8:
表 8、新舊喊牌策略實驗結果
葉俊廷版本獲勝 我的版本獲勝
10 40
從上面的實驗結果可以看到,改良過的喊牌比原始的喊牌有很大的進步。對 下的勝率有八成。接下來要測試的是哪一方喊到且勝率是多少,實驗中從總共 45 場我改良的程式喊到了 25 場而葉俊廷的程式喊到了 20 場,雙方喊到的比率幾乎 是一樣,然後各挑了 20 場我改良的程式(player)喊到以及葉俊廷的程式(com)喊到 的場次,多於 20 場以後的場次不列入實驗結果中,實驗結果如表 9。
52
53
由表 9 的結果我們可以看到只要是我改良的程式(player)喊到的牌局,幾乎都 可以贏,20 場裡贏了 18 場,勝率有九成。而葉俊廷的程式(com)喊到的牌局裡,
20 場玩家贏了 11 場,勝率也有超過 50%,這也證明了新的喊牌策略在喊牌的時 候比較保守,如果會選擇喊上去的話代表自己的牌是有一定程度的實力,而在學 長喊到的 20 局中,我的喊牌策略可以得到超過 50%的勝率,經過我的分析,會 比自己喊到的勝率低是因為某些牌局的起手手牌比對方弱太多,自己根本沒有與 對方對抗的實力,或者是雙方實力差不多所以放棄繼續喊上去,結果不容易預 測。
4.2 換牌測試與分析
在換牌階段,我們先測試的也是哪一個版本勝率比較高,所以用的是相同的 喊牌及打牌演算法。用這個方法測試了 50 場,改良過後版本的換牌策略贏了 35 場。勝率有 70%。實驗的結果如表 10。
表 10、新舊換牌策略實驗比較表
葉俊廷版本獲勝 我的版本獲勝
15 35
由實驗結果來看,我改良的程式(player)的勝率有 70%,雖然比起喊牌策略低
54
55
4.3 無王搜尋演算法測試
在無王搜尋演算法的實驗階段,首先我們要測試的是加入 Alpha-Beta pruning 演算法之後速度比原本的快多少。 在測試的時候,一開始原本雙方都有 13 張的 時候,電腦思考下第一步需要超過 20 分鐘的時間,而在加入 Alpha-Beta pruning 演算法之後的速度,每一步只要思考兩秒之內就可以出來,所以代表加入了
Alpha-Beta pruning 演算法大大的減少了不必要的分支。
第二個要實驗的是加入了 Alpha-Beta pruning 演算法所搜尋到的最佳走步是 否與原來沒使用的一樣好。因為原本沒有加入 Alpha-Beta pruning 演算法的無王 演算法是將所有節點展開,所以走的一定是最佳走步,所以我們要測試加入了 Alpha-Beta pruning 演 算法會不會把最佳走步截斷了。實驗設定是給有加入 Alpha-Beta pruning 演算法與沒有 Alpha-Beta pruning 演算法兩個程式每次都給一 樣的盤面去檢查出來的結果。我們實驗了ㄧ百個的盤面,結果出來都是一樣的,
代表說加入了 Alpha-Beta pruning 演算法不但可以加快原來搜尋的速度而且跟原 本的走步一樣準確。
56