欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種機器博弈的亞馬遜棋ai算法

文檔序號:10618496閱讀:1369來源:國知局
一種機器博弈的亞馬遜棋ai算法
【專利摘要】一種機器博弈的亞馬遜棋AI算法包括搜索算法和估計算法;其中,搜索算法將生成的可行招法排序,最大可能的將能引發(fā)剪枝或能得到較好效果的招法:通過為每一個效果賦值以判定招法的好壞,排在前面;搜索算法還體現在不同階段采用不同策略:搜索深度越小的層次,生成的招法會被裁剪的越??;而在較深的層次需要展開全招法,即不對招法進行裁剪;估值算法通過加入區(qū)域占領參數occupy,使對占領格子的判斷更準確;在不同階段采用不同估值參數,基于步數判斷棋局進行到了哪個程度,再決定使用哪種參數,再根據局面對估值參數進行動態(tài)調整;此外,還采用優(yōu)化的多線程:使共享資源盡量少以及使各線程間有互斥地共享有價值的資源。
【專利說明】
-種機器博弈的亞馬遜棋AI算法
技術領域
[0001] 本發(fā)明主要設及捜索算法、多線程運用W及估值函數,尤其設及一種機器博弈的 亞馬遜棋AI算法,屬于人工智能博弈、捜索算法、估值算法領域。
【背景技術】
[0002] 1.機器博弈
[0003] 計算機博弈(也稱機器博弈),是一個挑戰(zhàn)無窮、生機勃勃的研究領域,是人工智能 領域的重要研究方向,是機器智能、兵棋推演、智能決策系統(tǒng)等人工智能領域的重要科研基 礎。機器博弈被認為是人工智能領域最具挑戰(zhàn)性的研究方向之一。國際象棋的計算機博弈 已經有了很長的歷史,并且經歷了一場波欄壯闊的"搏殺","深藍"計算機的勝利也給人類 留下了難W忘懷的記憶。時至今日,每年仍有很多不同棋類的人機對戰(zhàn)W及機器間博弈在 包括中國的世界各地定期舉行。我們研究的亞馬遜棋作為國內計算機博弈錦標賽W及國際 計算機博弈競賽(ICGA)的重要比賽項目已有多年的競賽積累,兩項比賽的冠軍亦在不斷地 更迭中不斷進步。
[0004] 亞馬遜棋(Game of the Amazons),是由阿根廷人Walter Zamkauska在 1988年推 出的兩人棋類,是奧林匹亞電腦游戲程式競賽的比賽指定棋類-。
[0005] 由于局面過于復雜,僅第一步就有兩千屯百多種走法,故該棋類多不用于人類之 間比賽,而是用于計算機博弈相關方面的比賽與研究。
[0006] 10*10方格棋盤。
[0007] 每方各4枚棋子,W黑白兩色區(qū)分敵我,稱為亞馬遜(Amazons) ;92枚棋子雙方共 用,稱為箭(Arrows)。
[000引初始布置后,雙方輪流動一己子,方向可朝縱橫斜八方,距離無限制至空棋位,中 途不得有子。在移動至目標棋位后,從該棋位檢視其可移動范圍,然后在運范圍的任一空格 放置一枚箭。箭放定后,就不得移動或移除。
[0009] 直至一方無法行棋則輸掉此游戲。
[0010] 2.AlphaBe1:a 剪枝算法
[0011 ] AlphaBeta剪枝算法(AlphaBeta pruning algorithm)是一個捜索算法旨在減少 在其捜索樹中,被極大極小(Minimax)算法評估的節(jié)點數。運是一個常用人機游戲對抗的捜 索算法。它的基本思想是根據上一層已經得到的當前最優(yōu)結果,決定目前的捜索是否要繼 續(xù)下去。AlphaBe化剪枝算法是對Minimax方法的優(yōu)化,它們產生的結果是完全相同的,只不 過運行效率不一樣。AlphaBeta剪枝算法的前提假設與Minimax也是一樣的,具體體現在如 下Ξ方面:
[0012] 1)雙方都按自己認為的最佳著法行棋;
[0013] 2)對給定的盤面用一個分值來評估,運個評估值永遠是從一方(捜索程序)來評價 的,己方有利時給一個正數,對方有利時給一個負數;當紅方走棋時,如果紅方有利時返回 正數,當輪到黑方走棋時,評估值又轉換到黑方的觀點,如果認為黑方有利,也返回正數;
[0014] 3) -般來說分值大的數表示對己方有利,而對于對方來說,它會選擇分值小的著 法。
[0015] AlphaBeta算法嚴重依賴于著法的尋找順序,若總是先去捜索最壞的著法,那么 Beta截斷就不會發(fā)生,即AlphaBeta算法最終會找遍整個捜索樹,就像最小最大算法一樣, 效率非常低。
[0016] 若程序總是能挑最好的著法來首先捜索,那么數學上有效分枝因子就接近于實際 分枝因子的平方根,運是A1地aBeta算法可能達到的最好的情況。
[0017] 3.多線程技術
[0018]多線程(multithreading)是指從軟件或者硬件上實現多個線程并發(fā)執(zhí)行的技術。 具有多線程能力的計算機因有硬件支持而能夠在同一時間執(zhí)行多于一個線程,進而提升整 體處理性能。在一個程序中,運些獨立運行的程序片段叫"線程"(化read),利用它編程的概 念就叫做"多線程"或"多線程處理"(Multit虹eading processing)。
[0019] 4.估值函數
[0020] 估值函數用于估計一個局面的效果(正值表示對我方有利,越大越好,負值相反), 估值函數是A1地aBeta算法不可或缺的重要部分,估值函數的好壞一方面決定了剪枝效率, 另一方面也決定了最終招法的優(yōu)劣程度。
[0021] 針對亞馬遜棋捜索算法的研究,經過資料檢索,大約有如下幾類:
[0022] a)東北大學張柳在2010年發(fā)表的"題目為基于極大極小捜索算法的亞馬遜棋博弈 系統(tǒng)的研究"的學位論文中,利用經典的AlphaBeta算法、納什均衡原理W及基于棋子位置 的估值函數設計了一個亞馬遜棋的博弈程序。但是該程序的捜索效率依然較低。而且估值 函數較簡單,雖然可節(jié)省時間,但是其獲得的估值不能準確反映招法的真實價值。
[0023] b)在Julien Kloetzer等人發(fā)表于Computer Games Workshop 2007論壇上的題目 為"The Monte-Carlo Approach in Amazons"的論文中,他們利用機器博弈領域另一經典 算法,蒙特卡洛算法設計實現了一個亞馬遜棋博弈程序。同樣的,雖然采用了不同的算法, 其捜索效率并沒有得到顯著提升;且相對于A1地aBeta算法,采用uct算法的程序中對估值 函數難于掌握,不易編寫一個適應捜索深度變化的估值函數,即估值的效果不穩(wěn)定。
[0024] 其次,針對亞馬遜棋估值函數的研究,經過資料檢索,除上述論文外,還有W下運 種主流估值:
[00巧]C)在Jens Lieberum發(fā)表于Theoretical Computer Science ,Vol. :349,No. 2的題 目為''An evaluation function for the game of amazons"的論文中,采用了基于領地和 位置的估值,并引入了靈活度的概念。該估值算法具有一定準確性,但該算法對占領格子與 被棋子圍堵的情況考慮不到位,導致與對方搶占地盤時容易失利,或出現被對方圍堵在較 小范圍內的不利局面;并且該算法對棋子的影響范圍的估計不到位,容易出現某棋子被孤 立,形成W-敵多的局面。
[0026] 本申請致力于克服上述效率較低及估值不準確的問題,旨在提出更高效率的捜索 算法,W及更準確的用于亞馬遜棋博弈的估值函數。

【發(fā)明內容】

[0027] 本發(fā)明的目的是克服現有捜索算法捜索效率較低、估值不準確、估值效果不穩(wěn)定、 W及對占領格子與棋子圍堵情況考慮不周的問題,提出了一種機器博弈的亞馬遜棋AI算 法。
[0028] -種機器博弈的亞馬遜棋AI算法包括捜索算法和估值算法兩方面;
[0029] 其中,捜索算法方面,將生成的可行招法排序,最大可能的將能引發(fā)剪枝或能得到 較好效果的招法,具體的,通過為每一個效果賦值W判定招法的好壞,排在前面;捜索算法 還體現在不同階段采用不同策略:在捜索未到達最底層時,生成的招法會被裁剪;而當捜索 到達最底層時需要展開全招法,即不對招法進行裁剪;
[0030] 估值算法方面,一方面,通過加入區(qū)域占領參數occupy,使對占領格子的判斷更準 確;另一方面,在不同階段采用不同估值參數,基于步數判斷棋局進行到了哪個程度,再決 定使用哪種參數,再根據局面對估值參數進行動態(tài)調整;
[0031] 此外,捜索算法中還采用優(yōu)化的多線程:一方面使共享資源盡量少,W防止等待資 源消耗的時間;另一方面,使各線程間有互斥地共享有價值的資源,從而提升AlphaBeta算 法的效率;具體優(yōu)化參數主要包括全局變量A1地aB,MultiThread函數中變量i,將變量best 引入AlphaBe化函數,W及改進AlphaBe化算法中對返回和更新be化值的機制;
[0032] 另外,在A1地aBeta的最底層采用更新排序,其它層采用估值排序;
[0033] -種機器博弈的亞馬遜棋AI算法,主要設及如下函數:
[0034]
[0035]
[0036] -種機器博弈的亞馬遜棋AI算法,具體步驟如下:
[0037] 步驟一、聲明全局變量并初始化下棋步數為0;
[0038] 具體的,步驟一中聲明的全局變量主要如下:
[0039] 1.1聲明A1地aB用于記錄多線程中綜合的最好估值;
[0040] 1.2聲明maxdepth定義捜索深度;
[0041 ] 1.3聲明MOVEi記錄各線程各自的最好招法的編號;
[0042] 1.4聲明BestMove記錄全局的最好招法;
[0043] 1.5聲明qstep和kstep用于估值函數;
[0044] 1.6聲明51';
[0045] 1.7聲明to化ITime記錄一盤棋開始到目前的總用時;
[0046] 1.8聲明movestack用于存儲招法,moves1:ack又稱招法找;
[0047] 其中,qstep的含義為四個棋子中沿單一方向連續(xù)行進到達的某一格子所需的最 少步數;
[004引kstep的含義為四個棋子中方向任意地單步行進到達的某一格子所需的最少步 數;ST的含義為記錄最頂層捜索到了第幾個招法;
[0049]步驟二、捜索并選擇可用的招法,又具體包括如下步驟:
[0化0] 步驟2.1調用入口函數sea;rch_a_goo血ove;
[0051 ] 步驟2.2在函數36曰'油_曰_邑00(11]10¥6中初始化部分全局變量:其中所述的部分全局 變量主要包括全局變量AlphaB;
[0化2] 所述的A1地aB初始值為-INF;
[0053] 步驟2.3根據下棋步數得出捜索深度值Μ;
[0054] 具體步驟為:
[0055] 步驟2.3.1當步數step小于Κ1,則捜索深度值Μ為4;
[0056] 步驟2.3.2當步數step大于等于Κ1小于Κ2,則捜索深度值Μ為5;
[0057] 步驟2.3.3當步數step大于等于Κ2,則捜索深度值Μ為6;
[005引其中,優(yōu)選的Κ1為32,也可W是大于20小于38的整數;
[0059] 其中,優(yōu)選的Κ2為48,也可W是大于30小于60的整數;
[0060] 步驟2.4調用^日日1日1〇¥日_日¥日1生成招法;
[0061 ] 步驟2.5對生成的每一個招法調用Evaluate函數,并對所有招法調用Evaluate函 數的返回值進行排序;
[0062] 步驟2.6根據步數和對步驟2.5調用createMove_eval生成的招法進行裁剪,具體 為:
[00創(chuàng) 2.6.1當步數step小于K3且招法數大于K4,則保留排序在前K4的招法;
[0064] 2.6.2當步數step大于等于K3且招法數大于K5,則保留排序在前K5的招法;
[0065] 其中,優(yōu)選的K3為32,也可W是大于6小于36的整數;
[0066] 其中,優(yōu)選的K4為300,也可W是大于200小于400的整數;
[0067] 其中,優(yōu)選的K5為400,也可W是大于300小于500的整數;
[0068] 步驟2.7當總用時to化ITime超過14分鐘,則將捜索深度值Μ設為4;
[0069] 步驟2.8調用Mu 11 i Τ虹ead函數啟動多線程;
[0070] 步驟2.9等待直至步驟2.7的所有線程運行結束,刪除多線程并返回;
[0071] 步驟Ξ、調用createMove生成可行招法,將滿足條件的招法連同估值一起存入招 法找返回:
[0072] 所述的滿足條件是所產生的招法落子點或落障礙處,至少有一點滿足五步W內有 對方棋子;
[0073] 具體的,步驟Ξ的執(zhí)行過程包括:
[0074] 步驟3.1對本方四個棋子中的每一個棋子做如下3.11和3.12兩個操作,得出一個 可行招法;
[0075] 3.11從棋子出發(fā)遍歷上下左右四個方向,再遍歷每個方向上最多10個可行步,找 到符合落子的格子,再遍歷所有符合落子的格子,對每一格子執(zhí)行3.12;
[0076] 3.12從每一可落子的格子出發(fā),遍歷上下左右四個方向,再遍歷每個方向上最多 10個可行步,找到可W設置障礙的格子;
[0077] 步驟3.2根據步驟3.1得出的可行招法分別做如下四類操作:
[0078] 步驟3.2.1調用createMove得到可行招法后直接存入招法找,繼續(xù)捜索其他招法; [00巧]步驟3.2.2調用。的日*日1〇乂日_日乂日1執(zhí)行招法,調用估值函數,得到執(zhí)行招法后的估 值(可認為即為該招法的估值),將估值和招法都存入招法找;
[0080] 步驟3.2.3調用createMove_select在產生招法后先對招法進行檢查,是否滿足如 下條件:
[0081] 所產生的招法落子點或落障礙處,至少有一點滿足五步W內有對方棋子;
[0082] 再將滿足條件的招法加入招法找;
[0083] 步驟3.2.4沈6曰*6]\1〇¥6_3616(316¥曰1結合3.2.2和3.2.3,將滿足條件的招法連同估 值一起存入招法找;
[0084] 步驟3.3遍歷結束后,返回;
[00化]步驟四、調用處理多線程的函數MultiT虹ead,具體為:
[0086] 步驟4.1聲明變量i,為全局變量ST設置互斥鎖,在互斥鎖內將ST的值賦給i,并給 ST加1;然后釋放ST的互斥鎖;
[0087] 步驟4.2遍歷步驟Ξ生成的所有頂層招法;
[00則步驟4.2.1對遍歷到的每個招法,在模擬棋盤上執(zhí)行AlphaBeta捜索,返回該招法 的估值;再撤銷在模擬棋盤上該招法的執(zhí)行;
[0089] 步驟4.2.2若步驟4.2.1返回招法的估值大于當前線程的最好估值,則修改當前線 程最好招法,并記錄新的最好估值;
[0090] 步驟4.2.3為全局變量AlphaB設置互斥鎖,在互斥鎖內判斷如果當前線程最好估 值大于全局最好估值AlphaB,則修改全局最好招法及AlphaB,并更新全局最好招法 BestMove,然后釋放A1地aB的互斥鎖;
[0091] 步驟五、調用A1地aBeta函數進行捜索;
[0092] 步驟5.1判斷捜索深度,進行相應操作:
[0093] 5.11若捜索到達最底,即傳入的參數d邱地==0,則調用估值函數Evaluate,并返 回估值;
[0094] 5.12否則,調用createMove_selecteval 或 createMove_eval 生成招法,同時,對每 個生成招法調用Evaluate進行估值,生成全部招法后根據估值,即Evaluate返回值對招法 進行排序,具體為:
[00巧]5.12.1在20步W內有選擇性的生成招法,即調用createMove_selecteval函數來 生成招法;
[0096] 5.12.2否則生成全部招法,即調用createMove_eval函數來生成招法;
[0097] 步驟5.2根據捜索深度對招法進行裁剪,具體為:
[0098] 5.2.1當捜索深度d邱th為1時不裁剪招法;
[0099] 5.2.2當捜索深度d邱th為2且招法數大于K6,則保留排序在前K6的招法;
[0100] 5.2.3當捜索深度depth為3且招法數大于K7,則保留排序在前K7的招法;
[0101] 5.2.4當捜索深度d邱th為4且招法數大于Κ8,則保留排序在前Κ8的招法;
[0102] 其中,優(yōu)選的Κ6為300,也可W是大于250小于350的整數;
[0103] 其中,優(yōu)選的Κ7為200,也可W是大于150小于250的整數;
[0104] 其中,優(yōu)選的Κ8為100,也可W是大于80小于120的整數;
[0105] 步驟5.3判斷當前招法數是否為0,并進行相應操作:
[0106] 5.31若生成的招法數為0,說明棋局已經結束,返回-1肥+(111曰加6口地-(16口地);
[0107] 5.32若生成的招法數不為0,則繼續(xù)步驟5.4;
[0108] 步驟5.4對產生的招法估值,并返回該層的最好估值或第一個大于be化的估值,具 體為:
[0109] 步驟5.4.1聲明變量best,并初始化為-1,將當前最好估值賦值給best;
[0110] 步驟5.4.2遍歷執(zhí)行步驟5.1和5.2產生的所有招法并進入下一層A1地aBeta,遞歸 直至返回估值;
[0111] 步驟5.4.3得到步驟5.4.1的估值后,若估值大于best,則將得到的估值賦給best;
[0112] 步驟5.4.4若估值大于be化,則返回估值;
[0113] 步驟5.4.5遍歷結束后,若有更好的招法,則記錄并更新;
[0114] 步驟 5.4.6 返回best;
[0115] 步驟六、調用估值函數Evaluate;
[0116] 步驟6.1調用Evaluate該函數計算qst邱和kst邱;
[0117] 步驟6.2再計算四個基礎變量:*1、*2、(:1、〇2;運四個值在每次調用估值函數時都 初始化為0,具體包含如下操作:
[011引步驟6.2.1通過a和b確定tl的值:
[0119] a.當某個格子雙方qst邱值相同時,對于當前行棋顏色給予tlx分獎勵,非當前行 棋給予-tlx分的懲罰,再將此獎勵或懲罰的分數加在tl上;
[0120] 其中,所述的11X分數范圍為0.0到1.0;
[0121] b.當我方qst邱值較小時,使tl獲得一個加分score,反之獲得一個負分-score;的 值為能Wqst邱所代表的步數到達該格子的棋子的個數,即對于一個可最少步數到達 的格子,記錄能W最少步數到達的棋子的數量;
[0122] 其中,所述的score分數范圍為大于1的整數,原則上不設上限;
[0123] a、b同時運用W防止出現W-敵多的局面;
[0124] 步驟6.2.2計算t2的值,具體為:遍歷所有kst邱,當我方kst邱值較小則t2加1,當 對方kst巧值較小則t2減1;
[012引步驟6.2.3計算cl及c2的值,具體為:
[01%] cl + =(pow(2.0,-qstep[thread][i][ j][0])-pow(2.0,-qstep[thread][i][ j]
[0127] c化=min(l,max(-l,(kstep[thread][i][j][l].st-kstep[thread][i][j][0] .st)/6.0));
[01 %]注:thread表示當前線程數,i、j對應棋盤上格子,最后一維為0代表我方,1代表對 方;
[0129]步驟6.3聲明計算變量occupy,并賦occupy初值為1,當某格子只有我方可到達則 將occupy加一,否則將occupy減1,即occupy記錄了我方當前局面已經占領的空格子數量;
[0130] 步驟6.4聲明并計算變量3111114[2];
[0131] 其中,所述的sumA[2]代表雙方棋子的靈活度,計算方法如下:
[0132] 步驟6.4.1對于每一個棋子計算其靈活度:尋找該棋子一步即可到達的所有空格 子,對于每一個空格子記錄棋子與空格子的距離記為i,再計算該空格子周圍8個格子中為 空的格子數量記為N;計算A = N*pow(2.0,-i);對于所有棋子一步可到達的空格子都能得到 運樣一個A,棋子的靈活度AM即為所有運樣的A的和;
[0133] 步驟6.4.2sumA為四個棋子各自AM的和;對于雙方都計算靈活度,可W得到雙方各 自的sumA;
[0134] 至此,經過步驟一到步驟六,完成了一種機器博弈的亞馬遜棋AI算法。
[0135] 有益效果
[0136] 本發(fā)明一種機器博弈的亞馬遜棋AI算法與現有亞馬遜棋AI算法相比,具有如下有 益效果:
[0137] 1.本發(fā)明所述算法在多線程策略中,全局變量A1地aB不止在A1地aBeta的最頂層 被修改,而是在內層觸發(fā)某種條件時就能被修改,此策略的應用顯著地提高了捜素速度,即 提升了算法效率;
[0138] 2.本發(fā)明所述算法在多線程策略中,聲明變量i并為其設置互斥鎖,保證同一時刻 里只有一個線程能訪問該變量;i使得多個線程可W像一個線程運行時一樣,從0到η逐個捜 索招法,在有招法排序的前提下,此策略可W提高剪枝效率;
[0139] 3.本發(fā)明所提算法,在全盤運行時間為15分鐘W內的情況下,可實現將Α1地aBeta 捜索的最低層數由3層提升至4層,即表示本算法可W在全盤運行時間不允許超過15分鐘的 情況下,比同類算法的對手多考慮一步;
[0140] 4.本發(fā)明所提算法在有益效果1的基礎上,后期的最深思考層數可達6層,經測試 層數繼續(xù)加深依然可
[0141] 5.本發(fā)明所提估值算法中,代表靈活度的值sumA的計算方法的改進使得估值函數 對占領格子,與被圍堵的判斷更精準,使得在運兩個情況出現時,最終給出的招法更合理有 效。
【附圖說明】
[0142] 圖1為本發(fā)明一種機器博弈的亞馬遜棋AI算法的流程圖;
[0143] 圖2為本發(fā)明一種機器博弈的亞馬遜棋AI算法及其實施例中使用的亞馬遜棋盤。
[0144] 實施方式
[0145] 為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例 中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整的描述,顯然,所描述的實施例是 本發(fā)明的一部分實施例,而不是全部實施例。
[0146] 需要說明的是程序中有全局變量step,記錄雙方從開局到當前局面共執(zhí)行的步 數,初值為零。
[0147] 實施例1
[0148] 當step大于等于6小于10時,設置默認捜索深度Μ為4;帶估值的生成招法,按估值 排序招法找,剪枝留下排序在前Κ4的招法;交付多線程運行。
[0149] 各線程分別調用Α1曲aBeta函數,采用選擇性生成方式生成下一層招法,按估值排 序,然后剪枝,根據深度不同使招法分別不超過Κ6,Κ7,Κ8個。
[0150] 遍歷生成的招法,執(zhí)行之,再次調用Α1地aBeta進入下層。
[0151] 捜索深度在遞歸過程中遞減,直至為0,則調用估值函數,并返回;不再調用 A1地aBeta。該估值采用對靈活度更敏感的參數。
[0152] 根據規(guī)則更新al地a,be化,best值,修改A1地aB。遍歷所有招法后再向上層返回。
[0153] 直至返回到頂層,在Multi化read函數中根據規(guī)則更新該線程最好招法。
[0154] 所有線程結束后,綜合各線程最好招法選出全局最好招法。
[0155] 實施例2
[0156] 當step大于等于20小于32,在實施例3的基礎上采用更全面的招法生成,即在生成 招法時沒有選擇性。
[0157] 實施例3
[0158] 當step大于等于32小于48,設置默認捜索深度Μ為5;帶估值的生成招法,按估值排 序招法找,剪枝留下排序在前Κ5的招法;后續(xù)步驟與實施例1相同。
[0159] 綜上所述,W上僅為本發(fā)明的較佳實例而已,并非用于限定本發(fā)明的保護范圍。凡 在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保 護范圍之內。
【主權項】
1. 一種機器博弈的亞馬遜棋Al算法,其特征在于: 一種機器博弈的亞馬遜棋AI算法包括搜索算法和估值算法兩方面; 其中,搜索算法方面,將生成的可行招法排序,最大可能的將能引發(fā)剪枝或能得到較好 效果的招法,具體的,通過為每一個效果賦值以判定招法的好壞,排在前面;搜索算法還體 現在不同階段采用不同策略:在搜索未到達最底層時,生成的招法會被裁剪;而當搜索到達 最底層時需要展開全招法,即不對招法進行裁剪; 估值算法方面,一方面,通過加入區(qū)域占領參數occupy,使對占領格子的判斷更準確; 另一方面,在不同階段采用不同估值參數,基于步數判斷棋局進行到了哪個程度,再決定使 用哪種參數,再根據局面對估值參數進行動態(tài)調整; 此外,搜索算法中還采用優(yōu)化的多線程:一方面使共享資源盡量少,以防止等待資源消 耗的時間;另一方面,使各線程間有互斥地共享有價值的資源,從而提升AlphaBeta算法的 效率;具體優(yōu)化參數主要包括全局變量AlphaB ,MultiThread函數中變量i,將變量best引入 AlphaBeta函數,以及改進AlphaBeta算法中對返回和更新beta值的機制; 另外,在AlphaBeta的最底層采用更新排序,其它層采用估值排序。2. 如權利要求1所述的一種機器博弈的亞馬遜棋AI算法,其特征還在于: 一種機器博弈的亞馬遜棋AI算法,主要涉及如下函數:3.如權利要求1所述的一種機器博弈的亞馬遜棋Al算法,其特征還在于: 一種機器博弈的亞馬遜棋AI算法,具體步驟如下: 步驟一、聲明全局變量并初始化下棋步數為O; 步驟二、搜索并選擇可用的招法; 步驟三、調用createMove生成可行招法,將滿足條件的招法連同估值一起存入招法棧 返回: 所述的滿足條件是所產生的招法落子點或落障礙處,至少有一點滿足五步以內有對方 棋子; 步驟四、調用處理多線程的函數MultiThreacU具體為: 步驟4.1聲明變量i,為全局變量ST設置互斥鎖,在互斥鎖內將ST的值賦給i,并給ST加 1;然后釋放ST的互斥鎖; 步驟4.2遍歷步驟三生成的所有頂層招法; 步驟4.2.1對遍歷到的每個招法,在模擬棋盤上執(zhí)行AlphaBeta搜索,返回該招法的估 值;再撤銷在模擬棋盤上該招法的執(zhí)行; 步驟4.2.2若步驟4.2.1返回招法的估值大于當前線程的最好估值,則修改當前線程最 好招法,并記錄新的最好估值; 步驟4.2.3為全局變量AlphaB設置互斥鎖,在互斥鎖內判斷如果當前線程最好估值大 于全局最好估值AlphaB,則修改全局最好招法及AlphaB,并更新全局最好招法BestMove,然 后釋放AlphaB的互斥鎖; 步驟五、調用AlphaBeta函數進行搜索; 步驟5.1判斷搜索深度,進行相應操作: 5.11若搜索到達最底,即傳入的參數depth= = 0,則調用估值函數Evaluate,并返回估 值; 5 · 12否則,調用createMove_selecteval或createMove_eval生成招法,同時,對每個生 成招法調用Evaluate進行估值,生成全部招法后根據估值,即Evaluate返回值對招法進行 排序,具體為: 5.12.1在20步以內有選擇性的生成招法,即調用createMove_selecteval函數來生成 招法; 5.12.2否則生成全部招法,即調用createMove_eval函數來生成招法; 步驟5.2根據搜索深度對招法進行裁剪,具體為: 5.2.1當搜索深度depth為1時不裁剪招法; 5.2.2當搜索深度depth為2且招法數大于K6,則保留排序在前K6的招法; 5.2.3當搜索深度depth為3且招法數大于K7,則保留排序在前K7的招法; 5.2.4當搜索深度depth為4且招法數大于K8,則保留排序在前K8的招法; 其中,優(yōu)選的Κ6為300,也可以是大于250小于350的整數; 其中,優(yōu)選的Κ7為200,也可以是大于150小于250的整數; 其中,優(yōu)選的Κ8為100,也可以是大于80小于120的整數; 步驟5.3判斷當前招法數是否為0,并進行相應操作: 5.31若生成的招法數為0,說明棋局已經結束,返回-1即+(11^1(16口1:11-(16口1:11); 5.32若生成的招法數不為0,則繼續(xù)步驟5.4; 步驟5.4對產生的招法估值,并返回該層的最好估值或第一個大于beta的估值; 步驟六、調用估值函數Evaluate; 步驟6.1調用Evaluate該函數計算qstep和kstep; 步驟6.2再計算四個基礎變量4142、(31、(:2;這四個值在每次調用估值函數時都初始 化為0,具體包含如下操作: 步驟6.2.1通過a和b確定tl的值: a. 當某個格子雙方qstep值相同時,對于當前行棋顏色給予tlx分獎勵,非當前行棋給 予_t IX分的懲罰,再將此獎勵或懲罰的分數加在11上; 其中,所述的tlx分數范圍為0.0到1.0; b. 當我方qstep值較小時,使tl獲得一個加分score,反之獲得一個負分-score;的值為 能以qstep所代表的步數到達該格子的棋子的個數,即對于一個可以以最少步數到達的格 子,記錄能以最少步數到達的棋子的數量; 其中,所述的score分數范圍為大于1的整數,原則上不設上限; a、b同時運用以防止出現以一敵多的局面; 步驟6.2.2計算t2的值,具體為:遍歷所有kstep,當我方kstep值較小則t2加1,當對方 kstep值較小則t2減1; 步驟6.2.3計算cl及c2的值,具體為: cl+=(pow(2.0,-qstep[thread][i][j][0])-pow(2.0,-qstep[thread][i][j][I])); c2+=min(I,max(-l,(kstep[thread][i][j][l].st~kstep[thread][i][j][0].st)/ 6.0)); 注:thread表示當前線程數,i、j對應棋盤上格子,最后一維為0代表我方,I代表對方; 步驟6.3聲明計算變量occupy,并賦occupy初值為1,當某格子只有我方可到達則將 occupy加一,否則將occupy減1,即occupy記錄了我方當前局面已經占領的空格子數量; 步驟6.4聲明并計算變量81111^[2] ; 至此,經過步驟一到步驟六,完成了一種機器博弈的亞馬遜棋AI算法。4.如權利要求3所述的一種機器博弈的亞馬遜棋AI算法,其特征還在于: 一種機器博弈的亞馬遜棋AI算法,步驟一中聲明的全局變量主要如下: 1.1聲明AlphaB用于記錄多線程中綜合的最好估值; 1.2聲明maxdepth定義搜索深度; 1.3聲明MOVEi記錄各線程各自的最好招法的編號; 1.4聲明BestMove記錄全局的最好招法; 1.5聲明qstep和kstep用于估值函數; 1.6聲明ST; 1.7聲明totalTime記錄一盤棋開始到目前的總用時; 1 · 8聲明movestack用于存儲招法,movestack又稱招法棧; 其中,qstep的含義為四個棋子中沿單一方向連續(xù)行進到達的某一格子所需的最少步 數; kstep的含義為四個棋子中方向任意地單步行進到達的某一格子所需的最少步數;ST 的含義為記錄最頂層搜索到了第幾個招法。5. 如權利要求3所述的一種機器博弈的亞馬遜棋AI算法,其特征還在于: 步驟二又具體包括如下步驟: 步驟 2.1 調用入口函數 search_a_goodmove; 步驟2.2在函數search_a_goodmove中初始化部分全局變量:其中所述的部分全局變量 主要包括全局變量AlphaB; 所述的AlphaB初始值為-INF; 步驟2.3根據下棋步數得出搜索深度值M; 步驟2.4調用createMove_eval生成招法; 步驟2.5對生成的每一個招法調用Evaluate函數,并對所有招法調用Evaluate函數的 返回值進行排序; 步驟2.6根據步數和對步驟2.5調用createMove_eval生成的招法進行裁剪; 步驟2.7當總用時totalTime超過14分鐘,則將搜索深度值M設為4; 步驟2.8調用MultiThread函數啟動多線程; 步驟2.9等待直至步驟2.7的所有線程運行結束,刪除多線程并返回。6. 如權利要求5所述的一種機器博弈的亞馬遜棋AI算法,其特征還在于: 步驟2.3具體為: 步驟2.3.1當步數step小于Kl,則搜索深度值M為4; 步驟2.3.2當步數step大于等于Kl小于K2,則搜索深度值M為5; 步驟2.3.3當步數step大于等于K2,則搜索深度值M為6; 其中,優(yōu)選的Kl為32,也可以是大于20小于38的整數; 其中,優(yōu)選的K2為48,也可以是大于30小于60的整數。7. 如權利要求3所述的一種機器博弈的亞馬遜棋AI算法,其特征還在于: 具體的,步驟三的執(zhí)行過程包括: 步驟3.1對本方四個棋子中的每一個棋子做如下3.11和3.12兩個操作,得出一個可行 招法; 3.11從棋子出發(fā)遍歷上下左右四個方向,再遍歷每個方向上最多10個可行步,找到符 合落子的格子,再遍歷所有符合落子的格子,對每一格子執(zhí)行3.12; 3.12從每一可落子的格子出發(fā),遍歷上下左右四個方向,再遍歷每個方向上最多10個 可行步,找到可以設置障礙的格子; 步驟3.2根據步驟3.1得出的可行招法分別做如下四類操作: 步驟3.2.1調用createMove得到可行招法后直接存入招法棧,繼續(xù)搜索其他招法; 步驟3.2.2調用(^冊〖洲〇代_^&1執(zhí)行招法,調用估值函數,得到執(zhí)行招法后的估值(可 認為即為該招法的估值),將估值和招法都存入招法棧; 步驟3.2.3調用createMove_select在產生招法后先對招法進行檢查,是否滿足如下條 件: 所產生的招法落子點或落障礙處,至少有一點滿足五步以內有對方棋子; 再將滿足條件的招法加入招法棧; 步驟3.2.4(^6&七6]\1〇¥6_8616(^6¥&1結合3.2.2和3.2.3,將滿足條件的招法連同估值一 起存入招法棧; 步驟3.3遍歷結束后,返回。8. 如權利要求3所述的一種機器博弈的亞馬遜棋AI算法,其特征還在于: 步驟5.4具體為: 步驟5.4.1聲明變量best,并初始化為-1,將當前最好估值賦值給best; 步驟5.4.2遍歷執(zhí)行步驟5.1和5.2產生的所有招法并進入下一層AlphaBeta,遞歸直至 返回估值; 步驟5.4.3得到步驟5.4.1的估值后,若估值大于best,則將得到的估值賦給best; 步驟5.4.4若估值大于beta,則返回估值; 步驟5.4.5遍歷結束后,若有更好的招法,則記錄并更新; 步驟5.4.6返回best。9. 如權利要求5所述的一種機器博弈的亞馬遜棋Al算法,其特征還在于: 步驟2.6具體為: 2.6.1當步數step小于K3且招法數大于K4,則保留排序在前K4的招法; 2.6.2當步數step大于等于K3且招法數大于K5,則保留排序在前K5的招法; 其中,優(yōu)選的K3為32,也可以是大于6小于36的整數; 其中,優(yōu)選的K4為300,也可以是大于200小于400的整數; 其中,優(yōu)選的K5為400,也可以是大于300小于500的整數。10. 如權利要求3所述的一種機器博弈的亞馬遜棋AI算法,其特征還在于: 步驟6.4聲明并計算變量81111^[2]; 其中,所述的sumA[2]代表雙方棋子的靈活度,計算方法如下: 步驟6.4.1對于每一個棋子計算其靈活度:尋找該棋子一步即可到達的所有空格子,對 于每一個空格子記錄棋子與空格子的距離記為i,再計算該空格子周圍8個格子中為空的格 子數量記為N;計算A = N*pow(2.0,-i);對于所有棋子一步可到達的空格子都能得到這樣一 個A,棋子的靈活度AM即為所有這樣的A的和; 步驟6.4.2sumA為四個棋子各自AM的和;對于雙方都計算靈活度,可以得到雙方各自的 sumAo
【文檔編號】A63F3/00GK105999689SQ201610369682
【公開日】2016年10月12日
【申請日】2016年5月30日
【發(fā)明人】史繼筠, 宋鑫, 趙峻瑤, 孫云霄
【申請人】北京理工大學
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
武胜县| 万年县| 福鼎市| 石嘴山市| 花垣县| 乌海市| 什邡市| 博客| 庆云县| 定南县| 游戏| 漳平市| 碌曲县| 西乡县| 上犹县| 富平县| 上林县| 光泽县| 洱源县| 张家界市| 长治县| 环江| 阿鲁科尔沁旗| 乐都县| 奉新县| 绥化市| 贵港市| 台中市| 阿克| 五莲县| 宁远县| 珠海市| 台山市| 嘉黎县| 从江县| 凤城市| 鱼台县| 西和县| 涞水县| 长汀县| 洛川县|