两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種機(jī)器博弈的亞馬遜棋ai算法

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

【發(fā)明內(nèi)容】

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