亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        黑白棋博弈系統(tǒng)設(shè)計(jì)

        2020-11-10 07:52:26劉佳瑤
        關(guān)鍵詞:己方落子剪枝

        劉佳瑤, 林 濤

        (1 河北工業(yè)大學(xué) 國(guó)際教育學(xué)院, 天津300131; 2 河北工業(yè)大學(xué) 人工智能與數(shù)據(jù)科學(xué)學(xué)院, 天津300131)

        0 引 言

        人工智能是近年來(lái)非?;钴S的研究領(lǐng)域,計(jì)算機(jī)博弈是人工智能研究的重要分支[1]。 黑白棋在西方和日本是一種深受大眾廣泛喜愛(ài)的游戲,又叫奧賽羅棋(Othello)、蘋(píng)果棋或正反棋(Anti reversi)。雖然黑白棋規(guī)則簡(jiǎn)單,但其變化復(fù)雜,非常有趣味性。 黑白棋程序設(shè)計(jì)是通過(guò)編程使計(jì)算機(jī)學(xué)會(huì)黑白棋的規(guī)則,使計(jì)算機(jī)可以與人進(jìn)行對(duì)弈。 本文采用Eclipse 設(shè)計(jì)博弈黑白棋程序,應(yīng)用了Minimax 算法進(jìn)行搜索,通過(guò)Alpha-Beta 剪枝減少搜索數(shù)量。

        1 黑白棋規(guī)則

        黑白棋由黑、白兩種棋子組成,各32 枚,棋盤(pán)是64 個(gè)8×8 的正方格,棋子要落在方格內(nèi)[2]。 黑白棋的下棋方法:

        (1)在每一場(chǎng)棋局開(kāi)始時(shí),棋盤(pán)的正中間有交叉放置的黑、白棋各兩枚,執(zhí)黑棋一方先落子。

        (2)在空的方格新落下己方棋子,同時(shí)使對(duì)手一枚及以上棋子翻轉(zhuǎn),為一次合法的落子。

        (3)對(duì)手棋子被翻轉(zhuǎn)的條件:己方新落下的棋子與棋盤(pán)上已有的同色棋子間,被夾住的所有對(duì)手棋子(和己方棋子中間無(wú)間隙),夾住的方向可以是任何方向。

        (4)每次落子可以翻轉(zhuǎn)所有滿(mǎn)足條件(3)的對(duì)手棋子,可以翻轉(zhuǎn)的對(duì)手棋子必須被翻轉(zhuǎn)。

        (5)若棋盤(pán)上沒(méi)有位置能實(shí)現(xiàn)翻轉(zhuǎn)對(duì)方的棋子,則本輪由對(duì)手選擇落子的位置,直到己方有合法的落子位置為止。

        (6)如果一方有合法的落子位置,則必須選擇落子,不可以選擇放棄。

        (7)棋局持續(xù)下去,直到棋盤(pán)填滿(mǎn)或者雙方都無(wú)合法棋步可下。

        (8)當(dāng)棋盤(pán)被下滿(mǎn)時(shí),游戲結(jié)束;當(dāng)棋盤(pán)上只有一方的棋子時(shí),游戲結(jié)束。 游戲結(jié)束后,棋盤(pán)上剩余棋子多的一方贏得比賽。

        2 走棋著法

        2.1 局面表達(dá)

        局面表達(dá)指將黑白棋的棋盤(pán)上的信息轉(zhuǎn)化為電腦可以識(shí)別的數(shù)據(jù)。 局面表達(dá)的過(guò)程就是將人機(jī)對(duì)弈過(guò)程中棋局的棋子數(shù)據(jù)和整體局面信息,用計(jì)算機(jī)能夠識(shí)別的語(yǔ)言進(jìn)行描述的過(guò)程[3]。 對(duì)于棋子,黑色用B,白色用W;對(duì)于黑白棋的棋盤(pán),可以分為橫軸和縱軸,橫軸用a-h 的英文字母表示,縱軸用1-8 的阿拉伯?dāng)?shù)字表示。

        并做以下定義:

        (1)定義棋子的位置Position。 用有兩個(gè)參數(shù)的關(guān)鍵字Position 表示棋子的位置,第一個(gè)參數(shù)表示棋子的行,第二個(gè)參數(shù)表示棋子的列(從左到右為0-7,從上到下為0-7)。

        (2) 定 義 棋 子 的 顏 色 Player。 用 對(duì) 象PlayerWhite 表示白色,用對(duì)象PlayerBlack 表示黑色。 類(lèi)Player 定義玩家棋子顏色,其參數(shù)為對(duì)象PlayerWhite 或PlayerBlack。

        (3)定義棋子Piece。 用兩個(gè)參數(shù)的類(lèi)Piece 定義一個(gè)棋子,第一個(gè)參數(shù)為關(guān)鍵字Position 表示棋子的位置,第二個(gè)參數(shù)為類(lèi)Player 定義玩家棋子顏色。

        (4)定義棋盤(pán)Board。 Board 列表定義棋盤(pán)。 列表元素類(lèi)型為(3)中的棋子Piece,每次玩家或計(jì)算機(jī)落子后,將該棋子Piece 類(lèi)(含顏色和位置信息)加入到列表Board 中。

        (5)定義初始棋盤(pán)狀態(tài)initialBoard。 棋盤(pán)正中有兩枚白棋和兩枚黑棋,共四枚棋子交叉放置。

        2.2 著法表示

        著法指棋子從一個(gè)位置挪動(dòng)到另一個(gè)位置,或棋盤(pán)上的某個(gè)棋子變成其他棋子的過(guò)程,著法對(duì)應(yīng)于人機(jī)對(duì)弈中的行棋[3]。 在黑白棋博弈過(guò)程當(dāng)中著法指:棋盤(pán)上所下棋子的位置;人機(jī)兩方落子后,需改變顏色的棋子;什么情況下游戲結(jié)束。

        (1)判斷落子位置是否為空。 即遍歷列表Board 中的每一個(gè)元素,判斷是否有某一個(gè)元素中的位置為落子位置,沒(méi)有則說(shuō)明落子位置為空,否則不為空。

        (2)將棋子落在該位置,并改變棋盤(pán)狀態(tài)。 首先判斷落子位置是否為空,若為空則按2.4 中的方法將可以反轉(zhuǎn)的對(duì)手棋子全部反轉(zhuǎn),否則出現(xiàn)錯(cuò)誤。

        (3)判斷游戲是否結(jié)束。 當(dāng)雙方都沒(méi)有合法棋子可以下時(shí),游戲結(jié)束,棋子多的一方獲勝,通過(guò)Board 的元素個(gè)數(shù)是否為64 進(jìn)行判斷;當(dāng)棋盤(pán)還沒(méi)有下滿(mǎn)時(shí),如果棋盤(pán)上只剩下一個(gè)顏色的棋,則游戲結(jié)束,棋盤(pán)上剩下棋子的一方獲勝。 通過(guò)判斷某一玩家落子并進(jìn)行相應(yīng)反轉(zhuǎn)后,Board 中是否僅有一種顏色的棋子進(jìn)行判斷。

        2.3 判斷本次落子是否有效

        黑白棋中落子有效有兩個(gè)條件:首先要求落子在棋盤(pán)的一個(gè)空的位置;其次要求新落下的棋子可以翻轉(zhuǎn)對(duì)手一個(gè)或多個(gè)棋子。 因此每次落子前要檢查該次落子是否有效,使用isOccupied 函數(shù)判斷該位置是否為空,使用toFlip 函數(shù)判斷落子后可以翻轉(zhuǎn)對(duì)手的棋子集合是否為空,從而判斷本次落子是否有效。

        2.4 反轉(zhuǎn)

        每次落子后,當(dāng)自己放下的棋子在所有方向內(nèi)有一個(gè)自己的棋子,則被夾在中間的對(duì)方棋子全部翻轉(zhuǎn)成為自己的棋子。 通過(guò)窮舉實(shí)現(xiàn)反轉(zhuǎn)。 落子位置的橫向棋子翻轉(zhuǎn)過(guò)程如下:

        (1)得到棋盤(pán)上與所下棋子在同一行的所有棋子的列表row。

        (2)從列表row 中篩選出與所下棋子同種顏色的所有棋子,放在列表samePlayer 中。

        (3)依次判斷所下棋子與samePlayer 中的每一個(gè)棋子中間是否全部為異色棋子,是則反轉(zhuǎn)中間的棋子,否則保持不變。

        (4)對(duì)棋盤(pán)上的與所下棋子在同一列、同一條直線(xiàn)上從左上到右下、同一條直線(xiàn)上從右上到左下的棋子,分別進(jìn)行(1)(2)(3)操作。

        3 局面評(píng)估

        3.1 給不同位置設(shè)置權(quán)重

        對(duì)于不同的位置賦予不同的權(quán)重w, 使用函數(shù)score,計(jì)算將己方棋子放在某一位置后,當(dāng)前棋面上己方的分?jǐn)?shù)s(即當(dāng)前棋面上己方棋子的個(gè)數(shù))。

        (1)首先判斷是否可以放在四個(gè)角落的位置,如圖1。 如果可以,則這是最優(yōu)的位置,令w = 64,保證我方可以盡快占領(lǐng)角的位置。 因?yàn)楹诎灼宓乃膫€(gè)角很重要,所以在游戲過(guò)程中絕不能輕易的讓對(duì)手進(jìn)角[4]。

        圖1 最優(yōu)位置Fig. 1 The optimal location

        (2)避免在緊靠角的地方放棋子,如圖2。 如果放在這個(gè)地方,令w = 1。

        圖2 緊靠角的位置Fig. 2 Right next to the corner

        (3)避免在緊靠邊的地方放棋子,如圖3。 如果放在這個(gè)地方,令w = 3。

        圖3 緊靠邊的位置Fig. 3 Close to the side

        (4)避免在緊靠邊角的地方放棋子,如圖4,如果放在這個(gè)地方,令w = 2。

        圖4 緊靠邊角的位置Fig. 4 Close to the side and corner

        (5)當(dāng)雙方落棋子少于12 枚時(shí)(開(kāi)局系統(tǒng)給出的四枚除外),如果棋子放在藍(lán)色方框以?xún)?nèi),如圖5所示,令w = s +4。 最好不要把棋子放在藍(lán)色方框之外。 這個(gè)部分的宗旨是先占滿(mǎn)藍(lán)色方框,把對(duì)方逼出方框。

        (6)早翻轉(zhuǎn)很多對(duì)手的棋子實(shí)際上會(huì)給對(duì)手一個(gè)優(yōu)勢(shì)。 相反,應(yīng)該采取這樣的行動(dòng):在棋盤(pán)上有一半或更多的棋子之前,盡量將棋子放在可以最少反轉(zhuǎn)對(duì)手棋子的位置。 例如:在棋盤(pán)上有一半或更多的棋子之前,放在A 位置可以反轉(zhuǎn)對(duì)手3 個(gè)棋子,放在B 位置可以反轉(zhuǎn)對(duì)手5 個(gè)棋子,則選擇放在A位置。 在棋盤(pán)上有一半或更多的棋子之前, 令w =60 - s。

        (7)其他情況,令w = s。

        圖5 中心位置Fig. 5 Center position

        3.2 Minimax 搜索

        Minimax 搜索算法(即極大-極小算法),該算法要求己方在最壞情況中選擇最好的,其第一要義是按照對(duì)自己最有利的決策,對(duì)盤(pán)面進(jìn)行模擬。 如果能夠評(píng)價(jià)某一時(shí)刻其中一方的優(yōu)劣程度,則另一方走棋時(shí)就會(huì)選一種使對(duì)方優(yōu)勢(shì)盡可能小的走法[5]。假設(shè)對(duì)手每一步都會(huì)將我方引入從當(dāng)前看理論上價(jià)值最小的格局方向,即對(duì)手具有完美決策能力。 因此我方的策略應(yīng)該是選擇那些對(duì)方所能達(dá)到的讓我方最差情況中最好的,也就是讓對(duì)方在完美決策下所對(duì)我造成的損失最小。

        按照這種方式模擬出黑白棋可能的局面,所有局面就構(gòu)成一棵極大極小決策樹(shù),如圖6 所示。 第一行為游戲的初始狀況,第二行為對(duì)手可以下的棋的位置的所有情況,第三行為己方落子可能的情況,以此類(lèi)推,畫(huà)出決策樹(shù)的更深層。 當(dāng)搜索到預(yù)定深度時(shí),對(duì)當(dāng)前局面計(jì)算分值估算。 用函數(shù)score(Board)算出該層分值,當(dāng)前層顏色與己方相同時(shí),使之盡可能大。 從而選擇己方最壞情況中最好的位置進(jìn)行落子。

        博弈程序消耗的時(shí)間與搜索的層數(shù)緊密相關(guān)[6]。 因此要根據(jù)黑白棋的不同難度,以及計(jì)算機(jī)的運(yùn)算速度等,設(shè)置計(jì)算機(jī)玩家可以向前看的步數(shù),即決策樹(shù)的深度。 讓計(jì)算機(jī)又快又準(zhǔn)的找到目前最佳位置。

        3.3 Alpha-Beta 剪枝

        Alpha-Beta 剪枝用于裁剪搜索樹(shù)中不需要搜索的樹(shù)枝,以提高運(yùn)算速度。 基本的原理是:當(dāng)一個(gè)Min 節(jié)點(diǎn)的β 值≤任何一個(gè)父節(jié)點(diǎn)的α 值時(shí),剪掉該節(jié)點(diǎn)的所有子節(jié)點(diǎn);當(dāng)一個(gè)Max 節(jié)點(diǎn)的α 值≥任何一個(gè)父節(jié)點(diǎn)的β 值時(shí),剪掉該節(jié)點(diǎn)的所有子節(jié)點(diǎn)[7]。 本文的黑白棋博弈系統(tǒng)中指的是:刪除當(dāng)前結(jié)點(diǎn)獲得的值小于其父節(jié)點(diǎn)之前得出的值的分支。通過(guò)剪枝操作可以有效的減少搜索節(jié)點(diǎn)的個(gè)數(shù),從而使程序運(yùn)行更快速。

        圖6 決策樹(shù)示意圖Fig. 6 Decision tree diagram

        3.4 其他高級(jí)搜索算法

        (1)蒙特卡洛樹(shù)搜索(MCTS)。 蒙特卡洛樹(shù)搜索算法的最佳下一步的預(yù)測(cè)完全不同于Minimax 中決策樹(shù)的生成過(guò)程。 MCTS 是對(duì)游戲進(jìn)行多次模擬,最佳下一步的計(jì)算是根據(jù)嘗試和模擬結(jié)果進(jìn)行的。 該方法在保證降低問(wèn)題規(guī)模的同時(shí),能保持所求解的近似最優(yōu)性[8]。 蒙特卡洛樹(shù)搜索首先將游戲的當(dāng)前狀態(tài)作為一個(gè)獨(dú)立的根節(jié)點(diǎn),例如:在黑白棋中,將當(dāng)前的棋盤(pán)狀態(tài)作為一個(gè)根節(jié)點(diǎn)。 然后選擇一個(gè)節(jié)點(diǎn)進(jìn)行擴(kuò)展,并模擬,即完成一次從選擇節(jié)點(diǎn)到博弈結(jié)束的過(guò)程。 模擬的結(jié)果反向傳輸?shù)礁?jié)點(diǎn),更新根節(jié)點(diǎn)信息。 MCTS 算法會(huì)在滿(mǎn)足最大抽樣次數(shù)或者達(dá)到時(shí)間耗盡等設(shè)置后,根據(jù)第一層節(jié)點(diǎn)中每個(gè)節(jié)點(diǎn)的估值,從中選擇一個(gè)決策作為本次MCTS 算法的最佳決策[8]。

        (2) 遺傳算法(Genetic Algorithm)。 遺傳算法模擬了生物進(jìn)化論的自然選擇和遺傳學(xué)機(jī)理的生物進(jìn)化過(guò)程[9]。 該算法是通過(guò)模擬自然進(jìn)化過(guò)程得到搜索最優(yōu)解的一種計(jì)算模型,且得到演變最后遺留選擇的基因,即對(duì)應(yīng)該算法的最優(yōu)解[10]。 遺傳算法在初始化后,要對(duì)個(gè)體進(jìn)行適應(yīng)度計(jì)算,在黑白棋中,可根據(jù)局面評(píng)估中的原則,對(duì)棋盤(pán)中的位置進(jìn)行評(píng)價(jià)。 通過(guò)運(yùn)算將遺傳賦給下一代。 當(dāng)群體的代數(shù)達(dá)到預(yù)先設(shè)定值時(shí),適應(yīng)度最高的個(gè)體為最優(yōu)解,完成算法。 算法運(yùn)算過(guò)程:初始化→個(gè)體評(píng)價(jià)→選擇運(yùn)算→交叉運(yùn)算→變異運(yùn)算→終止條件判斷。

        4 測(cè)試與分析

        經(jīng)過(guò)人機(jī)對(duì)弈測(cè)試,發(fā)現(xiàn)該系統(tǒng)反應(yīng)較快,計(jì)算機(jī)出棋時(shí)間小于1s。 勝負(fù)率上,較為樂(lè)觀(guān)。 測(cè)試程序中,一方采用上述算法計(jì)算出落棋子位置,另一方模擬真人下棋,隨機(jī)在可落棋的方格內(nèi)著棋。 經(jīng)過(guò)100 次測(cè)試,該黑白棋博弈系統(tǒng)的勝出次數(shù)為87 次。

        5 結(jié)束語(yǔ)

        本文實(shí)現(xiàn)了黑白棋的人機(jī)對(duì)弈系統(tǒng)。 一個(gè)較好的人工智能對(duì)弈系統(tǒng)來(lái)自?xún)蓚€(gè)方面的因素:首先是局面評(píng)估的準(zhǔn)確;其次是博弈搜索的高效性,使程序可以在最短的時(shí)間內(nèi)搜索到足夠的深度。 本文在博弈樹(shù)搜索算法的設(shè)計(jì)上,運(yùn)用了Minimax 搜索算法,雖然使用Alpha-Beta 剪枝取得了很好的效果,但是該算法依然會(huì)導(dǎo)致游戲樹(shù)較大,搜索空間較大,需要進(jìn)一步進(jìn)行剪枝操作或嘗試其他搜索算法。

        該黑白棋對(duì)弈系統(tǒng)應(yīng)在以下方面有待改善:(1)局面評(píng)估應(yīng)該更加精準(zhǔn)、高效。 (2)在黑白棋下棋的搜索算法中,使用選擇性剪枝策略。 (3)嘗試使用不同的搜索算法,并進(jìn)行比較,使黑白棋對(duì)弈系統(tǒng)的搜索算法更加快速和精準(zhǔn)。

        猜你喜歡
        己方落子剪枝
        人到晚年宜“剪枝”
        基于圖論與PageRank的要地反導(dǎo)己方目標(biāo)重要性排序
        基于YOLOv4-Tiny模型剪枝算法
        情緒式表達(dá)讓愛(ài)很受傷
        百姓生活(2020年7期)2020-08-24 12:51:37
        基于語(yǔ)料庫(kù)的日語(yǔ)授受表現(xiàn)的研究
        琴(外一首)
        詩(shī)選刊(2019年8期)2019-08-12 02:29:36
        落子山東,意在全局
        金橋(2018年4期)2018-09-26 02:24:54
        剪枝
        90后唐丹:人生如棋,落子不悔
        金色年華(2016年8期)2016-02-28 01:40:30
        趣談漢字的另類(lèi)注解
        我的美艳丝袜美腿情缘| 久久久精品久久波多野结衣av | 国产96在线 | 免费| 亚洲成人av在线播放不卡 | 色avav色av爱avav亚洲色拍| 香蕉久久一区二区不卡无毒影院| 天堂新版在线资源| 伊人久久大香线蕉免费视频| 亚洲毛片av一区二区三区| 在线观看国产视频你懂得| 爆乳熟妇一区二区三区霸乳| 亚洲成人电影在线观看精品国产| 亚洲日本在线中文字幕| 人妻少妇中文字幕专区| 丰满少妇高潮惨叫久久久| 精品国产av最大网站| 色噜噜狠狠色综合欧洲| 宅男天堂亚洲一区二区三区| 日韩亚洲欧美久久久www综合| 欧美丰满大屁股ass| 亚洲一区二区精品久久岳| 少妇又紧又爽丰满在线视频| 好吊妞无缓冲视频观看| 日本VA欧美VA精品发布| 日韩乱码精品中文字幕不卡| 插上翅膀插上科学的翅膀飞| 欧美国产精品久久久乱码| 就国产av一区二区三区天堂| 国产精品髙潮呻吟久久av| av色综合久久天堂av色综合在 | 又粗又硬又大又爽免费视频播放| 国产黄页网站在线观看免费视频| 国产亚洲午夜高清国产拍精品不卡 | 久久中文字幕国产精品| 亚洲国产精品成人精品无码区在线| 国产99久久亚洲综合精品 | 无码乱肉视频免费大全合集| 亚洲国产成人va在线观看天堂 | 欧美亚洲综合另类| 青青青视频手机在线观看| 欧美男生射精高潮视频网站 |