999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于數據庫和經驗分析的橋牌混合策略打牌模型

2022-01-13 01:37:00邱虹坤鄭曉東王亞杰
重慶理工大學學報(自然科學) 2021年12期
關鍵詞:程序優化策略

邱虹坤,鄭曉東,王亞杰

(沈陽航空航天大學 a.計算機學院;b.工程訓練中心,沈陽 110136)

機器博弈是人工智能領域最重要的研究方向之一,而非完備信息博弈是近期機器博弈研究的熱點。現實生活中,處處充滿了非完備信息博弈的例子,如拍賣、投標、競價等。其中,投標過程與橋牌博弈極為相似。因為在投標時,首先要分析對方的可能出價和己方合理出價。這與橋牌中的叫牌相互吻合,同樣是通過逐級遞增的加價方式來實現互通牌情的過程(包含己方和對方)。而在打牌過程中的贏墩策略也與投標公司的戰略相契合,同是在掌握信息有限的情況下進行博弈。因此,對橋牌博弈AI引擎的研究,是極具現實意義的[1]。

目前,更為精準的橋牌模型,逐漸成為研究者們關注的熱點之一。在AMMAS2019入選論文中,就有一篇研究了基于神經網絡構建叫牌系統的方法[2]。而所有叫牌方式的側重點無一不是在于消除叫牌時產生的模糊信息,旨在得到唯一且精確的結果。但是連續3年獲得冠軍的Wbridge5是基于規則的,他們通過消除已有規則中的歧義和沖突來優化自己的系統,這樣就會有一定的局限性,把系統的性能的上限局限在了人類已有的知識中。因此,想要繼續提升橋牌AI的能力,需要從叫牌、打牌和評估函數3個方面分別給出優化的新思路。即構建精確叫牌體系、分階段牌局策略及更為準確的評估函數。

1 叫牌優化

1.1 構建精確叫牌體系

橋牌主流的叫牌體系分為2種:自然叫牌體系和精確叫牌體系。傳統的程序大多采用自然叫牌體系。自然叫牌法是最為常用的叫牌方式,并且大多數橋牌好手也在使用。但是對于計算機來說,由于其普適性與模糊性,對于同一牌型在不同的特定場合給出的不同叫品,這反而是模糊的[3]。與之相反,對于充滿各種定約的精確叫牌體系更加適合程序理解人類的叫牌。

對于叫牌的初始狀態,有6.35×1011種可能的牌局。首先對于手牌的大牌點數進行條件分類,細化為14類,再對每一類中的情況進行牌型分類,來決定開叫叫品。此時每一種牌局狀況對應唯一叫品,同伴可以通過該叫品準確定位該叫品所對應的牌型及牌點范圍[4]。從而構建出精確叫牌體系。

下面給出其中一組示例:11-15 4-4-1-4或4-4-0-5牌型,單缺為D,開叫2D。

pgame->honorCardPoint>=11&&pgame->honorCardPoint <=15

pgame->suit[1].cardnum==1&&pgame->suit[0].cardnum==4 &&pgame->suit[1].cardnum==4

pgame->suit[1].cardnum==0&&pgame->suit[0].cardnum==4 &&pgame->suit[2].cardnum==4

pgame->Open_RecordBid[0]=′2′;

pgame->Open_RecordBid[1]=′2′;

pgame->Open_RecordBid[2]=pgame->position;

sprintf_s(r_bid,80,"BID%c22",pgame->position);

因為手牌總數為13張,故對于4-4-1-4和4-4-0-5只需要寫出其中任意3個即可,返回叫牌結果為2D。

通過結構體數組對于手牌的存儲,記錄手牌花色、數量、牌型信息,通過record數組實現隊友之間互通牌情,從而構建出精確叫牌體系。

1.2 叫牌體系二次優化

上述構建的精確叫牌體系,解決了叫牌模糊的問題,通過大量定約實現精準叫牌,更加適用于計算機。與此同時,大量定約所形成的代碼量巨大,通常,僅僅實現部分定約,就需要代碼量約 7 000行。代碼冗余的問題瞬間暴露得一覽無余。

出現此問題的原因在于程序之間的大量重復,比如相似的定約,卻需要重新構建完整的if判斷邏輯。為了簡化代碼,增加程序的可維護性和擴充性,提煉出共同因子,用struct Pai[]結構體數組進行表示。

綜合考慮到牌力、牌型對于叫牌過程的影響,歸納出的共同因子可以分成三大類,即存儲牌力上下限、存儲手牌信息、返回叫牌結果[5]。

這三大類又可以細分為12個小類,即牌點上限、牌點下限、梅花張數、方片張數、黑桃張數、紅桃張數、梅花大牌張數、方片大牌張數、黑桃大牌張數、紅桃大牌張數、返回的叫牌花色和階數。如圖1所示。

圖1 Pai數組具體實現

構建好數組后,每次叫牌不需要再進行n行if查詢,只需要對應叫牌查詢表,如開叫查詢開叫表,爭叫查詢爭叫表即可[6]。此處給出開叫表數組的部分示例(表1),對于17×12的開叫表,其功能等價于500行左右代碼量的if查詢。

表1 開叫查詢表部分示例

例如,第一行數據應理解為,通過評估函數計算得到的牌力范圍在12~15之間時,并且4個花色的牌,數量均大于等于3(表現為average均勻牌型),并且在梅花上有3張及3張以上大牌,那么開叫1梅花。

此時,如果想繼續擴充定約,那么只需要在表格中新增行數據,省去了動輒成百上千行的代碼量。至此,叫牌部分模糊性和代碼冗余的問題得以解決。

2 打牌優化

2.1 傳統經驗打牌

傳統的橋牌程序大多采用經驗出牌,按照經驗出牌的程序在遇到特定場景下的牌張組合,著實能打出不錯的配合,但幾率極小。如果試圖窮盡橋牌的打牌組合,按照目前計算機的算力,又難以實現。

值得一提的是,單純基于經驗打牌策略,沒有考慮到橋牌中存在的明手這一規則,使得己方相較于對方缺失了13張手牌的信息。而在比賽中,占據1/4的信息量。這部分信息所影響的牌局信息會成指數式增長,直接影響到整輪對局的發展趨勢。

2.2 “monte Carlo+Dummy”打牌

針對于橋牌的信息非完備性,或者說對于所有的非完備信息博弈,一個重要的思路就是將非完備轉換為完備。目前橋牌的主流算法就是“蒙特卡洛+雙明手求解器”[7]打牌。通過蒙特卡洛算法大量生成對于牌型的限制,將這個限制傳入到一個約束數組里,通過(爆炸式)生成牌局的方式,使得信息變為完備。此時,可以使用雙明手求解器進行求解。

但該思路存在明顯的不足之處:當牌局剛剛開始進行時,所掌握的信息極為有限,約束遠遠不足,爆炸式生成牌局過多,會發生棧溢出[8]。并且生成樣本所需時間長,精準度低。通過實驗測試,發現在前幾墩牌中,程序往往會呈現“亂打”的現象。

該如何解決這個問題呢?如何既能夠保證程序不會朝著錯誤的方向前進,又能進行非完備信息與完備信息之間的轉化。給出的方案就是分階段生成牌局,不同階段采用不同策略。

2.3 新型混合打牌策略

首先將牌局分為2個階段[9],前一部分因為掌握的信息極為有限,適合采用精準度高,要求性高的經驗打牌策略,后一部分因為信息逐漸暴露,掌握信息更多,采用蒙特卡洛+雙明手求解器打牌方式。

經驗打牌:

這里的經驗打牌并不指傳統的特定牌型下經驗打牌,而是通過人為大量分析對局得到的。值得注意的是,在不同方位下,程序的打牌策略應該是完全不同的。

比如首攻,它的打牌原則應該是:穿強擊弱。攻擊己方最強的或者對方最弱的。通過存儲己方叫牌信息,掌握己方叫過的花色,比如在和上,己方有過叫品,而對方在上也有過叫品,那么根據穿強擊弱的原則[10],此時應該主打的花色為。

下面給出偽代碼,其功能是在程序中養成出頂張連續大牌的習慣。

bignum ←0

/*設置臨時變量來存放大牌數量*/

for i ←0 to num do

if(putCard[i]/4)>0 then

bignum++;

if bignum>=5 then

for i ←0 to num do

if(putCard[i]/4)>0 then

index=i;

這樣做有非常明顯的好處。如圖2所示牌局。

圖2 牌局示意圖

這幅牌局是叫的2◆,南北兩家主打◆,如果北家攻擊一張◆K,那么此時在固定了攻擊連續大牌中的頂張,作為其隊友(南家)完全可以意識到隊友的K是其在◆上最大的一張牌,立刻反推出他一定有◆J◆Q◆K,并且沒有◆A。再加上自己手里沒有◆A,那么◆A一定在對方手里,通過這一張大牌,可以實現傳遞牌情信息量是原來的數倍[11]。

其余的各家都根據位置的不同,有其對應專屬的打牌策略,所以在這里只列出首攻的部分打牌函數,其余類似但不相同,不做贅述。

在開局時,根據經驗打牌旨在搶得一個良好的開局,但隨著牌局情況的逐漸復雜,將很難再用經驗去描述打牌過程。此時,應該采用具有完備信息博弈能力的蒙特卡洛算法加上雙明手求解器進行求解的策略(圖3)。

圖3 蒙特卡洛算法+雙明手求解器策略圖

對于打牌來說,其主要的2個限制條件分別為“經驗打牌策略所帶來的復雜程度”以及“完備信息求解的準確性”。此時問題轉化為“當牌局進行到何種程度時,由經驗打牌轉換為蒙卡算法+求解器求解”。

這里設置2個變量:N(牌的總數,在橋牌中為52),D(牌局進行的輪數,在橋牌中為13)。

不妨假設,每位牌手在打牌時打出任意一張牌的可能性是相同的。此時則有,打出任意張牌的概率為:P打牌=1/(13-D+1),而對于進行中的牌局來說,牌是動態的,即第一次出牌時牌張總數為N,那么下一次出牌,牌的總數為N-1,在每一墩中,牌況總數最多為:W牌況=(N)(N-4(D-1)-1)(N-4(D-1)-2)(N-4(D-1)-3)。此時可以將牌況的復雜程度近似看成是D的4次方函數。

這里對于每一墩的可能牌況為:V可能=C2X(X=N-13-4D),表示目前仍然未知的牌中,選擇兩張(自己和隊友每人一張)打出。這里減去的13是指,明手信息的13張牌可以被所有牌手看到,即可利用的信息。由于求解器的算法已經固定。求解器的能力正比于牌局預測的準確度。比值可以取K,給出一個衡量牌局準確性的指標(任何牌局適用):S=K(N-13-4D)2/2-N4。將相關數據帶入可以得到解,當進行到第三輪時,由經驗分析策略轉變為求解器分析可以獲得的程序,準確度最高,收益最大[12]。

至此,提供了叫牌與打牌的新型策略。相應的,也需要一個更為精確的評估函數作為支撐。

3 評估函數優化

傳統的評估函數采用高倫計點法來評估一手牌的力量,即A=4,K=3,Q=2,J=1。但如果牌值評估只做到這種程度,其準確性顯然不足以滿足中級以上橋手的需求。

為此,分為3點進行評估函數優化:

1)短門上的大牌進行調整(主要體現為扣點);

2)長門上的調整(主要體現為加點);

3)定約不同時的調整。

隨機生成了一副牌局(隨機數種子為135246),以其中的北家為例進行說明:

假設北家手牌中的大牌和小牌分別如圖4與圖5所示。

圖4 大牌

圖5 小牌

采用如下方法對評估函數進行優化。

第一步,使用高倫計點法評估。

3*J+1*K+2*A=3*1+1*3+2*4=14

第二步,進行扣點。

由于單張大牌有被擊落的可能性,所以對于KQJ分別扣1點。而單張的A由于不會被擊落,所以只扣半個點。如果是雙張時,那么KQJ扣半個點,A不扣點。A-num=1,牌點-0.5;KQJ-num=1,牌點-1;KQJ-num>1,牌點-0.5。

此時就有:單張紅桃K,單張黑桃J分別扣1點,雙張的梅花JA和方片JA,各扣半個點。

總計扣:1+1+0.5+0.5=3

此時牌點為:14+(-3)=11

第三步,進行加點。

此副牌在梅花上有AJ帶頭的6張好套,那么應該考慮到它所帶來的贏墩潛力[13],所以在這里可以+2.5。n張好套對應著(n/2-0.5)的贏墩潛力。

此時牌點為:11+(+2.5)=13.5

第四步,通過該局的王牌來進行加點。

如果在這局中梅花成為王牌,那么作為北家占據了大部分優勢還應該再+2。即王牌花色為己方最強花色,牌力+2,為己方較強花色,牌力+1。

此時牌點為:13.5+2=15.5

最終得到的牌值,看似與起初差距不大(14—>15.5),但是所考慮到的信息較于以前是更為完善的,這里考慮到了牌型、牌張、牌況對于牌力的影響,更吻合牌局中的實際情況。

4 實驗

為檢測新型打牌模型所帶來的優化效果,設置2組對照實驗。第1組實驗是優化后的引擎與傳統引擎對局(注:傳統程序指2020年遼寧省計算機博弈競賽一等獎獲獎程序),檢驗博弈引擎的綜合能力。第2組實驗是分別采用新型混合打牌策略和經驗打牌策略進行對局。為避免叫牌差異所導致的影響,二者在相同叫牌體系下對弈。此外,由于精確叫牌體系和自然叫牌體系分屬2個體系,無法直接比較好壞,故不設置打牌相同情況下叫牌準確度的對比(注:所有參與對比實驗的程序均采用優化后的評估函數)。

這里對局是指,讓兩套程序在同一幅牌中均與測試程序對局,分別記錄兩套程序贏得的分數,并進行對比,借此檢驗優化引擎后橋牌程序的實戰能力。

4.1 叫牌準確度測試實驗

優化前后的程序分別與測試程序(優化前后程序均自主開發)對局500輪,共計1 000輪對局,檢驗優化后橋牌程序的綜合能力是否有提升(圖6)。

圖6 綜合能力測試結果

從圖6中可以看出,橙色的線在藍色線上方,比如在傳統程序得到100分時,優化后的程序可以得到200分左右,而在傳統程序得到-100分時,優化后的程序,往往可以負分更少,甚至少許贏分。那么根據測試結果,可以看出經過優化后的橋牌AI程序,有著更強的綜合能力。

4.2 打牌能力測試實驗

整體優化后的程序同叫牌部分優化的程序分別與測試程序對局500輪,共計1 000輪對局,檢驗優化后橋牌程序的打牌能力是否有提升(圖7)。由于在同一叫牌體系下,得分相似的可能性較大,所以直接取絕對值進行比較。

圖7 打牌能力對比曲線

這里取絕對值旨在更好地區分打牌能力,對于正分,取原本值,對于負分,在同一組牌局下,負的越少,證明能力越強,所以取同組中負分更多的絕對值進行表示。對照組程序和優化后程序均采用同樣的叫牌策略,即精確叫牌法。在這里出現部分牌局下得分相同的情況,因為采用完全相同的叫牌,定約相同,得分相同的可能增大。從圖7中可以看出,橘黃色的線在藍色線的上方,即在采用相同叫牌策略下,優化后打牌策略要遠遠優于傳統打牌策略。

通過上述實驗,說明經過優化后,橋牌AI引擎對于牌局的分析更為準確,擁有更強的打牌能力。

5 結論

將經驗性的代碼與求解器混合,實現分階段模擬牌局。首先,采用開局經驗、中局和殘局進行完備信息處理。接著,通過數學推導,計算得到分割不同策略界線的位置。最后,等信息暴露更完全,再進行策略轉換,使得程序打牌能力更為穩定。此外,對于大量if造成的代碼冗余問題,其關鍵部分在于存儲牌局信息數據結構的設計。通過牌局信息分析,將所需信息抽象成結構體數組,對于程序的規范性與可維護性有極大幫助。通過多角度多方位優化,橋牌博弈AI的牌力獲得較大提升,大大提高了獲勝幾率。

現實中,企業或國家間的競爭與合作是典型的非完備信息問題,與橋牌博弈極為相似。因此,構建橋牌混合策略模型,研究橋牌AI,對解決現實中的合作競爭關系問題具有重要的現實意義。

猜你喜歡
程序優化策略
超限高層建筑結構設計與優化思考
房地產導刊(2022年5期)2022-06-01 06:20:14
民用建筑防煙排煙設計優化探討
關于優化消防安全告知承諾的一些思考
一道優化題的幾何解法
例談未知角三角函數值的求解策略
我說你做講策略
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
高中數學復習的具體策略
數學大世界(2018年1期)2018-04-12 05:39:14
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
主站蜘蛛池模板: 一级全黄毛片| 天天操精品| 永久免费AⅤ无码网站在线观看| 亚洲欧美一级一级a| 欧美日在线观看| 尤物国产在线| 亚洲第一中文字幕| 国产欧美又粗又猛又爽老| 亚洲最大在线观看| 国产成人高清在线精品| 三上悠亚一区二区| 亚洲视频在线网| 在线观看精品自拍视频| 天天综合网在线| 国产精品无码一二三视频| 在线欧美一区| 国产正在播放| 婷婷色一区二区三区| 久久特级毛片| 亚洲人成网站在线观看播放不卡| 精品国产网| 亚洲美女一区二区三区| 久久人人97超碰人人澡爱香蕉 | 亚洲欧美激情小说另类| 国产精品尤物铁牛tv| 动漫精品啪啪一区二区三区| 最新日本中文字幕| 欧美激情视频一区二区三区免费| 国产黄网站在线观看| 四虎成人在线视频| 夜夜爽免费视频| 成人午夜视频在线| 日韩欧美色综合| 亚洲综合狠狠| 日本午夜在线视频| 国产精品yjizz视频网一二区| 国产18页| 亚洲v日韩v欧美在线观看| 色偷偷男人的天堂亚洲av| 日韩精品免费在线视频| 国产99视频精品免费观看9e| 欧美全免费aaaaaa特黄在线| 四虎永久在线| 欧美全免费aaaaaa特黄在线| 国产第一页亚洲| 国产国模一区二区三区四区| 一级毛片在线免费看| 日本人妻一区二区三区不卡影院 | 日本人妻丰满熟妇区| 狠狠干综合| 国产福利小视频在线播放观看| 成人va亚洲va欧美天堂| 久久不卡国产精品无码| 欧美综合区自拍亚洲综合天堂| 国产十八禁在线观看免费| 四虎在线高清无码| 2021最新国产精品网站| 精品一区二区三区四区五区| 久久国产精品77777| av午夜福利一片免费看| 亚洲日韩精品综合在线一区二区| 一级毛片免费播放视频| 精品视频一区二区三区在线播| 色亚洲激情综合精品无码视频| 精品超清无码视频在线观看| 国产精品xxx| 亚洲欧美色中文字幕| 一本综合久久| 亚洲精品无码av中文字幕| 999国内精品久久免费视频| 国产婬乱a一级毛片多女| 毛片久久久| 日韩在线1| 永久免费无码成人网站| 91亚洲视频下载| 欧美五月婷婷| 国产区成人精品视频| 99精品在线看| 凹凸国产分类在线观看| 国产精品成人免费视频99| 久久99国产综合精品1| 国产福利2021最新在线观看|