第三章 無王及各階段演算法
3.4 換牌演算法
3.4.4 改良過後的換牌演算法
在測試葉俊廷的程式時,發現原來的程式裡會有一些出牌不合理的地方,像 是會為了搶牌而有可能出實際上比自己大的牌。還有審局函數,把 2、3、4 的分 數定的比 5、6、7、8、9 還高,原本是為了在出現不想要的牌時拿來墊牌,但是 在換牌後期價值較低的牌出已經出現後不需要墊牌了,原本的程式還有可能繼續 保留小牌然後選擇 5、6、7、8、9 優先出牌。
首先我決定改變原來的審局分數,就直接按照每張牌在實際打牌時的大小來
翻開的牌 對 方 出 的 牌 我方的手牌
42
43
44
圖 24、例 3.4 牌張狀態圖
例 3.4:現在王牌為梅花
因為翻開的牌為黑桃 7,我方並不想要這張牌,在搜尋過自己的手牌後找到 兩張一樣價值最低的 6,分數皆為 24。在經過機率計算後兩張能比對方小的機率 也都是(1 −1230)4,最後再根據擁有 35 分以上的牌紅心較多所以我們選擇出方塊 6
翻開的牌 我方的手牌
45
當作這一回合的出牌。
(二) 持先手且翻開的分數大於 35
因為出現的牌分數大於 35,代表說我們是想要得到這一張牌的。但是要出價 值多好的牌來搶,我有了ㄧ個新的想法,就是會不會下一張牌的價值其實並不會 比現在出現的這一張低還有可能比較高。所以就新增了ㄧ個蓋著的牌的期望值。
公式變成了(W − X) ∗ P1 + (W − X) ∗ P2 = V。其中 W:出現的牌的價值
X:我方出的牌
P1:得到這張牌的機率
P2:下一張牌大於等於出現的牌的機率 V:得到總和分數
這樣子可以隨著換牌階段後期,如果有更好的牌還未出現,我們就可以用較 小的牌換到價值較好的牌。同樣以例 3.4 為例。
例 3.4:以梅花為王牌
翻開的牌 我方的手牌
46
經過計算後我們出黑桃 J 是最有利的,所以這回合選擇出黑桃 J。
(三) 持後手且翻開的分數小於 35
這時候情況就比較簡單,如果我們有相同花色的牌,則從裡面找一張最小的 牌出。如果缺門的話,則從其它花色中找一張價值最低的牌當作這回合的選擇。
同樣用例 3.4 當作例子。
例 3.4:王牌為方塊
梅花 4 的價值只有 16,因為對方出了紅心 7,而我方有紅心並沒有缺門,搜 尋過後找到紅心 6 比對方小,所以就決定以紅心 6 當作這回合的選擇。
(四) 持後手且翻開的分數大於 35
分數大於 35 代表說我們想要這張牌,而且對方已經出牌了。首先我們會找 對方出的牌是否比翻開的這張牌還小,如果比較小而且我們沒有缺門的話,則從 對方出的牌與翻開的牌大小之間找到價值最小的牌當作選擇,如果沒有在兩者之 間的牌,則觀察對方出的牌與翻開的牌這張牌之間的價值差距,然後在我方手牌 中找一張差距最小的牌當作選擇。如果缺門的話,則會選擇一張比翻開的牌價值 還要低且能贏過對方的牌當作選擇。以例 3.4 為例子:
翻開的牌 對 方 出 的 牌 我方的手牌
47
例 3.4:王牌為梅花
因為王牌為梅花,所以梅花 4 的分數為 74,所以我們會想要這張牌。對方出 了紅心 J,而我方剛好有紅心 Q 比紅心 J 大而且價值不大於梅花四,所以用梅花 4 當作這回合的選擇。