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

        ?

        基于深度強(qiáng)化學(xué)習(xí)實(shí)時(shí)戰(zhàn)略卡牌游戲?qū)?zhàn)設(shè)計(jì)

        2022-03-15 09:45:24杜智華賴振清
        計(jì)算機(jī)仿真 2022年2期
        關(guān)鍵詞:程序動(dòng)作游戲

        杜智華,賴振清

        (深圳大學(xué)計(jì)算機(jī)與軟件學(xué)院,廣東 深圳 518000)

        1 引言

        目前深度強(qiáng)化學(xué)習(xí)已經(jīng)成為機(jī)器學(xué)習(xí)里一個(gè)非常熱門的研究方向,在2019年的人工智能頂級(jí)會(huì)議ICLR上,強(qiáng)化學(xué)習(xí)是最熱門的關(guān)鍵詞。強(qiáng)化學(xué)習(xí)的應(yīng)用非常廣泛,在機(jī)器人[1]、翻譯[2]、智能交通[3]、廣告推薦[4]、計(jì)算機(jī)視覺[5]、自動(dòng)駕駛[6]等領(lǐng)域都有非常具體的應(yīng)用。而在這些領(lǐng)域中,強(qiáng)化學(xué)習(xí)在游戲中的應(yīng)用最引人注目且成功,從DeepMind公司使用DQN玩Atari游戲,到開發(fā)AlphaGo擊敗圍棋世界冠軍,還有OpenAI組織使用強(qiáng)化學(xué)習(xí)在MOBA游戲Dota 2中擊敗世界冠軍隊(duì)伍等,強(qiáng)化學(xué)習(xí)一直與游戲相輔相成,互相促進(jìn)。游戲多樣的環(huán)境為強(qiáng)化學(xué)習(xí)提供了很好的訓(xùn)練材料,而強(qiáng)化學(xué)習(xí)在游戲中的成功應(yīng)用則給游戲注入了新的活力和更多樣的玩法。盡管強(qiáng)化學(xué)習(xí)在游戲中的應(yīng)用非常多,在棋類游戲、視頻類游戲、MOBA對(duì)戰(zhàn)游戲中都有非常多的應(yīng)用,但在即時(shí)策略的卡牌類游戲的應(yīng)用卻很少,這類游戲狀態(tài)空間大,策略具有多樣性而且信息并不完全?!痘适覒?zhàn)爭(zhēng)》就是一款即時(shí)策略卡牌游戲,由游戲公司Supercell在2016年推出,發(fā)行之后就霸占各個(gè)排行榜。游戲開始前,玩家選取8張卡牌進(jìn)入游戲,在限定時(shí)間內(nèi)通過(guò)卡牌拆毀對(duì)方防御塔并保護(hù)己方防御塔來(lái)贏得游戲勝利。由于進(jìn)入游戲時(shí)無(wú)法獲得對(duì)方卡牌的信息,所以這是一款不完全信息的游戲博弈,另外由于放置卡的位置非常多,它還具有狀態(tài)空間巨大的特點(diǎn),根據(jù)戰(zhàn)場(chǎng)局勢(shì)不同出卡的策略也有很大差異,所以還具有策略多樣性的特點(diǎn)。所以將深度強(qiáng)化學(xué)習(xí)方法應(yīng)用到《皇室戰(zhàn)爭(zhēng)》中是個(gè)不小的挑戰(zhàn)。為解決這些問(wèn)題,程序在深度強(qiáng)化學(xué)習(xí)方法的基礎(chǔ)上,使用了簡(jiǎn)化狀態(tài)空間的方法,使得程序的實(shí)現(xiàn)成為可能。

        最早引起學(xué)術(shù)界深度強(qiáng)化學(xué)習(xí)熱度的是2013年的論文《Playing Atari with Deep Reinforcement Learning》[7],將深度強(qiáng)化學(xué)習(xí)應(yīng)用到Atari游戲中,效果非常顯著,在實(shí)驗(yàn)的大部分游戲中,超過(guò)了之前的方法。對(duì)于將深度學(xué)習(xí)、強(qiáng)化學(xué)習(xí)應(yīng)用到游戲中,最知名、引起廣泛大眾熱度的則是DeeepMind公司開發(fā)的AlphaGo[8][9],采用了深度學(xué)習(xí)方法,在2016年擊敗世界冠軍李世石。其之后的版本AlphaGo Zero則采用的是強(qiáng)化學(xué)習(xí),對(duì)戰(zhàn)舊版AlphaGo的戰(zhàn)績(jī)?yōu)椋?00:0。圍棋屬于完全可觀測(cè)游戲,雙方能獲得全部的信息,這與《皇室戰(zhàn)爭(zhēng)》不同。對(duì)于深度強(qiáng)化學(xué)習(xí)在部分可觀測(cè)游戲中的應(yīng)用,有OpenAI開發(fā)的用于Dota 2對(duì)戰(zhàn)的程序,曾擊敗世界冠軍隊(duì)伍OG,還有知名Atari第一射擊游戲《毀滅戰(zhàn)士》,在VIZDOOM平臺(tái)上舉行的2016年競(jìng)賽中,田淵棟和吳育昕的 F1 團(tuán)隊(duì)獲得限制賽道冠軍[10],2017年競(jìng)賽中,Arnold獲得了完整版賽道的冠軍[11],marvin獲得了限制版賽道的冠軍,它們都使用了深度強(qiáng)化學(xué)習(xí)。

        2 相關(guān)技術(shù)介紹

        本節(jié)先從程序的核心算法Deep Q-learning(DQN)開始介紹,然后介紹程序中用于獲得游戲狀態(tài)的YOLO V3對(duì)象檢測(cè)算法,最后介紹程序中用來(lái)識(shí)別手中卡牌的CNN圖像識(shí)別技術(shù)。

        2.1 DQN算法

        DQN算法屬于強(qiáng)化學(xué)習(xí)算法中的一種,所以在介紹DQN算法之前,先來(lái)簡(jiǎn)單介紹下強(qiáng)化學(xué)習(xí)。強(qiáng)化學(xué)習(xí)是智能體通過(guò)試錯(cuò)的方式進(jìn)行學(xué)習(xí),通過(guò)與環(huán)境交互獲得獎(jiǎng)勵(lì)來(lái)指導(dǎo)行為,最終目的是最大化期望累積獎(jiǎng)勵(lì)。強(qiáng)化學(xué)習(xí)的主要特征有:1反饋具有延遲性,不是瞬時(shí)獲得;2沒有監(jiān)督,只有獎(jiǎng)勵(lì);3時(shí)間對(duì)于數(shù)據(jù)影響很大;4 智能體的動(dòng)作會(huì)影響之后獲得的數(shù)據(jù)。

        強(qiáng)化學(xué)習(xí)的四個(gè)主要要素:動(dòng)作、狀態(tài)、策略、獎(jiǎng)勵(lì),根據(jù)這四個(gè)要素,強(qiáng)化學(xué)習(xí)可以解釋為在當(dāng)前狀態(tài)下,應(yīng)用策略采取動(dòng)作來(lái)獲得當(dāng)前獎(jiǎng)勵(lì),并根據(jù)得到的反饋,更新策略,不斷進(jìn)行這些步驟從而使長(zhǎng)期累積獎(jiǎng)勵(lì)最大化的過(guò)程。DQN算法屬于強(qiáng)化學(xué)習(xí)算法的一種,為了得到一個(gè)策略使得長(zhǎng)期累加獎(jiǎng)勵(lì)最大化,需要評(píng)估一個(gè)策略的期望回報(bào),因此需要定義值函數(shù),而對(duì)于狀態(tài)非常龐大的環(huán)境,精確的值函數(shù)定義并不現(xiàn)實(shí),因此DQN采用了神經(jīng)網(wǎng)絡(luò)的方法來(lái)近似值函數(shù),這就是Q網(wǎng)絡(luò)。另外,為了更好地訓(xùn)練網(wǎng)絡(luò),DQN算法采用了經(jīng)驗(yàn)回放技術(shù)和e-greedy策略。

        2.2 YOLO V3對(duì)象檢測(cè)算法

        對(duì)象檢測(cè)就是在圖像中,識(shí)別出物體的種類,以及該物體的坐標(biāo)。YOLO(You Only Look Once)是一種基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法,目前已經(jīng)發(fā)展到Y(jié)OLO v3[16,17],YOLO v3 是目前為止性能最好的YOLO系列的目標(biāo)檢測(cè)模型。YOLO的思想是直接對(duì)輸入圖像中的目標(biāo)位置和目標(biāo) 類別進(jìn)行回歸預(yù)測(cè),這使得YOLO具有更快的檢測(cè)速 度。在YOLOv3中,直接對(duì)圖像進(jìn)行推斷,便能獲得物體的位置、類別以及物體屬于某種類別的概率。YOLO檢測(cè)網(wǎng)絡(luò)包含2個(gè)全連接層和24個(gè)卷積層,其中全連接層,也就是輸出層,用來(lái)預(yù)測(cè)圖像中物體的位置和物體所屬類別的概率值,卷積層則用來(lái)提取圖像的特征。YOLO將輸入圖像分成S × S個(gè)格子,每個(gè)格子負(fù)責(zé)檢測(cè)在其中的物體,輸出多個(gè)物體屬于哪種類別的概率以及物體中心點(diǎn)的坐標(biāo),然后選擇概率最高的那個(gè)類別,所以一個(gè)格子只能識(shí)別出一個(gè)物體,即使其中有多個(gè)物體,這也是對(duì)于密集物體的檢測(cè),YOLO精確度不夠高的原因。在檢測(cè)時(shí),YOLO訓(xùn)練模型只支持分辨率為448 × 448的圖像,這個(gè)分辨率與YOLO的訓(xùn)練圖像一致。

        2.3 CNN圖像識(shí)別技術(shù)

        卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN),在深度學(xué)習(xí)領(lǐng)域占據(jù)很重要的位置,對(duì)深度學(xué)習(xí)的發(fā)展起到很大的作用,主要用來(lái)進(jìn)行圖像處理。

        CNN中有三個(gè)基本概念:池化、共享權(quán)值以及局部感受野。

        1)池化。為了簡(jiǎn)化卷積網(wǎng)絡(luò)計(jì)算的復(fù)雜度,采用類似于圖像壓縮的方法,對(duì)圖像進(jìn)行卷積,然后進(jìn)行下采樣,從而減小圖像大小。

        2)共享權(quán)值。在CNN的卷積層中,多個(gè)神經(jīng)元共享同一個(gè)權(quán)值,從而減少訓(xùn)練的參數(shù)量。

        3)局部感受野。這一步同樣是為了減少參數(shù)訓(xùn)練量,采用的方式是將每一個(gè)隱藏節(jié)點(diǎn)只連接到圖像的某個(gè)局部區(qū)域,而不是圖像中的每個(gè)像素點(diǎn)。

        程序?qū)D像進(jìn)行分類主要使用的CNN網(wǎng)絡(luò)為L(zhǎng)eNet。LeNet-5[15]是Yann LeCun等人提出的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),是最早出現(xiàn)的卷積神經(jīng)網(wǎng)絡(luò)之一。LetNet-5雖然比較小,但是包含了深度學(xué)習(xí)的基本模塊:池化層、卷積層和全連接層。LeNet-5包含7層網(wǎng)絡(luò),包括三個(gè)卷積層,一個(gè)全連接層以及兩個(gè)池化層和一個(gè)輸入層,輸入數(shù)據(jù)為32 × 32像素的圖片。

        3 基于強(qiáng)化學(xué)習(xí)動(dòng)態(tài)對(duì)戰(zhàn)策略介紹

        3.1 游戲背景介紹

        《皇室戰(zhàn)爭(zhēng)》是一款曾經(jīng)風(fēng)靡全球的實(shí)時(shí)策略卡牌手游,游戲過(guò)程中,兩位玩家通過(guò)手中的卡牌,在規(guī)定的時(shí)間內(nèi)摧毀比對(duì)方更多的防御塔來(lái)獲得勝利。雙方各有兩座公主塔,一座國(guó)王塔,任何一方摧毀了國(guó)王塔都會(huì)直接獲勝,相當(dāng)于摧毀了三座塔。該游戲運(yùn)行在電腦安裝的逍遙模擬器中。

        游戲開始前,玩家選擇8張卡牌進(jìn)入游戲。游戲開始后的對(duì)戰(zhàn)界面如圖1。圖1最大的黑色矩形框圈出來(lái)的就是作戰(zhàn)區(qū)域,所有卡牌釋放不會(huì)超過(guò)那個(gè)范圍,雙方有兩座公主塔,一座國(guó)王塔。每人手上有四張卡牌,一開始4張卡牌出現(xiàn)的順序是隨機(jī)的,當(dāng)你用完一張卡后,就像棧一樣,那張卡會(huì)壓到最底下,在其余七張卡出現(xiàn)過(guò)后再次出現(xiàn)。不同的卡有不同的特性,卡牌之間有一定的克制關(guān)系,利用這種關(guān)系來(lái)獲得對(duì)戰(zhàn)的優(yōu)勢(shì)。場(chǎng)上的作戰(zhàn)隊(duì)伍如圖1圈出來(lái)的作戰(zhàn)區(qū)域內(nèi)的兩個(gè)矩形框。最下方的是圣水?dāng)?shù)量,它會(huì)隨著時(shí)間而增加,每2.8秒增加一滴,加時(shí)賽速度翻倍,最多能保存10滴,使用卡牌則會(huì)消耗卡牌對(duì)應(yīng)的圣水。右上角則是剩余時(shí)間,如果在3分鐘內(nèi)沒有決出勝負(fù),則進(jìn)入加時(shí)賽,加時(shí)賽任意一方推掉一座塔即獲勝。

        圖1 游戲開始前選擇卡牌界面

        3.2 基于強(qiáng)化習(xí)動(dòng)態(tài)對(duì)戰(zhàn)策略框架

        程序?qū)?zhàn)策略是通過(guò)強(qiáng)化學(xué)習(xí)網(wǎng)絡(luò)來(lái)動(dòng)態(tài)實(shí)施對(duì)戰(zhàn)策略,并通過(guò)python調(diào)用win api操縱電腦進(jìn)行游戲。實(shí)時(shí)采集對(duì)戰(zhàn)訓(xùn)練營(yíng)動(dòng)作,經(jīng)過(guò)圖像識(shí)別和對(duì)象檢測(cè)技術(shù)完成實(shí)時(shí)狀態(tài)識(shí)別和位置識(shí)別,然后分析對(duì)戰(zhàn)訓(xùn)練營(yíng)狀態(tài),并轉(zhuǎn)換為對(duì)戰(zhàn)策略的動(dòng)態(tài)控制數(shù)據(jù),從而控制游戲人物做出與玩家運(yùn)動(dòng)相應(yīng)的動(dòng)作,并根據(jù)游戲規(guī)則判斷游戲是否結(jié)束,更新游戲狀態(tài),直到游戲結(jié)束。具體算法1如下所示。

        算法1 強(qiáng)化學(xué)習(xí)的動(dòng)態(tài)對(duì)戰(zhàn)策略

        程序流程圖如圖2所示,其中程序通過(guò)YOLO V3對(duì)象檢測(cè)技術(shù)以及CNN圖像識(shí)別技術(shù)實(shí)時(shí)獲取游戲狀態(tài)(圖中①截圖)。獲取游戲狀態(tài)具體描述如圖3所示。

        圖2 程序流程圖

        圖3 實(shí)時(shí)獲取游戲狀態(tài)的策略

        3.2.1 DQN網(wǎng)絡(luò)構(gòu)成及更新

        DQN算法使用神經(jīng)網(wǎng)絡(luò)來(lái)近似值函數(shù),該神經(jīng)網(wǎng)絡(luò)就稱為Q網(wǎng)絡(luò)。構(gòu)成:Q網(wǎng)絡(luò)由兩個(gè)隱藏層,三個(gè)卷積層以及兩個(gè)完全連接層構(gòu)成,輸入層為64 x 64 x 4。

        更新:每次訓(xùn)練從經(jīng)驗(yàn)回放集中抽取m個(gè)樣本{Sj,Aj,Rj,S’j,game_overj},j=1,2,…,m,計(jì)算當(dāng)前網(wǎng)絡(luò)Q值Yj。如式(1)所示,其中γ為衰減因子,程序中設(shè)定為0.9,w為網(wǎng)絡(luò)參數(shù)

        (1)

        求得當(dāng)前網(wǎng)絡(luò)Q值后,使用均方差損失函數(shù),通過(guò)神經(jīng)網(wǎng)絡(luò)的梯度反向傳播來(lái)更新Q網(wǎng)絡(luò)的所有參數(shù)w。

        3.2.2 出卡選擇

        首先需要用到3.3節(jié)的對(duì)象檢測(cè)技術(shù)和3.4節(jié)的圖像識(shí)別技術(shù),來(lái)獲得場(chǎng)上隊(duì)伍最多的區(qū)域和手中的卡牌是什么。程序出卡選擇總共有9種,即出8種卡牌各算一種動(dòng)作,還有一種動(dòng)作是不出卡。在圣水?dāng)?shù)量沒有4時(shí),采取的動(dòng)作是不出卡。圣水?dāng)?shù)量在4以上時(shí),在當(dāng)前時(shí)刻t,狀態(tài)St的情況下,獲得出手上四張卡以及不出卡對(duì)應(yīng)的網(wǎng)絡(luò)值,假設(shè)網(wǎng)絡(luò)參數(shù)為ω,所有動(dòng)作為a,網(wǎng)絡(luò)值函數(shù)為Q,求得這5種選擇中Q值最高的選擇a′,如式(2)所示

        a′=argmax(Q(St,a;w))

        (2)

        然后用e-greedy貪婪法選擇動(dòng)作a′,還是隨機(jī)的5種動(dòng)作。e為探索率,隨訓(xùn)練場(chǎng)次增加而減小,初始設(shè)置為0.5,之后到1000場(chǎng)遞減為0.01。程序產(chǎn)生一個(gè)0到1之間的隨機(jī)數(shù)k,如果k小于等于1-e,選擇動(dòng)作a′,如果k> 1-e,選擇隨機(jī)的5種動(dòng)作。

        出某張卡確定后,程序需要確定出卡的位置。在獲得游戲狀態(tài)后,程序根據(jù)戰(zhàn)斗隊(duì)伍最多的區(qū)域,將作戰(zhàn)區(qū)域劃分成30x18塊,求出每塊區(qū)域的英雄數(shù),將卡投放到最多英雄的格子里。

        3.2.3 計(jì)算獎(jiǎng)勵(lì)

        動(dòng)作a帶來(lái)的游戲獎(jiǎng)勵(lì)Rstep劃分成四個(gè)部分:摧毀塔獲得的獎(jiǎng)勵(lì)Reto、被摧毀塔獲得的獎(jiǎng)勵(lì)Rmto,擊殺敵方隊(duì)伍獲得的獎(jiǎng)勵(lì)Rtroop,出卡的獎(jiǎng)勵(lì)Rcard,關(guān)系如式(3)所示

        Rstep=Reto+Rmto+Rtroop+Rcard

        (3)

        摧毀塔獲得的獎(jiǎng)勵(lì)Reto,由執(zhí)行動(dòng)作a后摧毀的塔減去執(zhí)行動(dòng)作a前摧毀的塔獲得,摧毀一座公主塔的獎(jiǎng)勵(lì)為10,摧毀一座國(guó)王塔的獎(jiǎng)勵(lì)為20。Reto和摧毀公主塔數(shù)Neprincess和摧毀國(guó)王塔數(shù)Neking的關(guān)系如式(4)所示

        Reto=Neprincess× 10+Neking× 20

        (4)

        被摧毀塔獲得的獎(jiǎng)勵(lì)R被摧毀塔,由執(zhí)行動(dòng)作a后被摧毀的塔減去執(zhí)行動(dòng)作a前被摧毀的塔獲得。被摧毀一座公主塔的獎(jiǎng)勵(lì)為-10,被摧毀一座國(guó)王塔的獎(jiǎng)勵(lì)為-20。所以Rmto和被摧毀公主塔數(shù)Neprincess和被摧毀國(guó)王塔數(shù)Nmking的關(guān)系如式(5)所示

        Rmto=-10 ×Nmprincess-20 ×Nmking

        (5)

        擊殺敵方隊(duì)伍獲得的獎(jiǎng)勵(lì),由執(zhí)行動(dòng)作a前敵方場(chǎng)上的隊(duì)伍,減去執(zhí)行動(dòng)作a后敵方場(chǎng)上共有的隊(duì)伍獲得。而摧毀一個(gè)敵方英雄的獎(jiǎng)勵(lì)由該卡消耗的圣水決定,比如飛龍寶寶該卡消耗的圣水為4,則摧毀該英雄獲得的獎(jiǎng)勵(lì)為4。假設(shè)被摧毀的敵方英雄為1到T,英雄消耗的圣水為N1到NT,則擊殺敵方隊(duì)伍獲得的獎(jiǎng)勵(lì)Rtroop如式(6)所示

        (6)

        出卡獲得的獎(jiǎng)勵(lì),由該卡消耗的圣水決定,出一張卡獲得的獎(jiǎng)勵(lì)為該卡消耗的圣水的負(fù)值,假設(shè)某張卡為k,其消耗的圣水?dāng)?shù)量為Nk,則出卡k獲得的獎(jiǎng)勵(lì)如式(7)所示

        Rcard=-Nk

        (7)

        以上均為一步動(dòng)作的獎(jiǎng)勵(lì),總獎(jiǎng)勵(lì)為每一步動(dòng)作獎(jiǎng)勵(lì)的累加。在訓(xùn)練的初期,由于出卡帶來(lái)的獎(jiǎng)勵(lì)必為負(fù)值,而摧毀敵方隊(duì)伍和防御塔則較為困難,為了減少程序因?yàn)槌隹ǘ@得更低的獎(jiǎng)勵(lì)導(dǎo)致的消極行為,摧毀敵方防御塔和摧毀敵方隊(duì)伍獲得的獎(jiǎng)勵(lì)都乘以系數(shù)1.5,這個(gè)系數(shù)會(huì)在訓(xùn)練過(guò)程中逐漸減少,到200場(chǎng)時(shí)為1。

        3.2.4 判斷游戲是否結(jié)束及輸贏

        程序使用3.4節(jié)中圖像識(shí)別技術(shù)獲得初始時(shí)間,以及場(chǎng)上防御塔摧毀情況。獲得初始時(shí)間,是為了避免網(wǎng)絡(luò)延遲帶來(lái)的時(shí)間誤差,之后由程序自主計(jì)時(shí)。

        判斷游戲結(jié)束總共分為四部分,一部分是常規(guī)時(shí)間3分鐘內(nèi),程序獲得狀態(tài)時(shí),判斷場(chǎng)上雙方國(guó)王塔的情況,任意一方國(guó)王塔被摧毀,游戲結(jié)束。第二部分時(shí)常規(guī)時(shí)間剛好結(jié)束時(shí),任意一方場(chǎng)上的塔數(shù)更多,游戲結(jié)束。第三部分,若三分鐘內(nèi)游戲未結(jié)束,任意一方防御塔減少一座,游戲結(jié)束。第四部分,加時(shí)賽的第三分鐘過(guò)去,游戲結(jié)束。

        判斷輸贏,在判斷游戲結(jié)束后返回輸贏結(jié)果。如果常規(guī)時(shí)間內(nèi)游戲結(jié)束了,則誰(shuí)的國(guó)王塔被摧毀,誰(shuí)失敗。如果常規(guī)時(shí)間結(jié)束時(shí)游戲結(jié)束了,則根據(jù)雙方的塔數(shù)判斷輸贏,塔數(shù)少的一方失敗。如果加時(shí)賽時(shí)間內(nèi)結(jié)束,塔數(shù)少的一方失敗。如果加時(shí)賽時(shí)間過(guò)去了,游戲結(jié)束,則存在三種情況,根據(jù)最后一刻的狀態(tài)來(lái)判斷,如果雙方塔數(shù)相同,則為平局,如果有一方塔數(shù)更少,則失敗。

        3.3 對(duì)象檢測(cè)

        本程序采用YOLO V3對(duì)象檢測(cè)識(shí)別場(chǎng)上英雄的位置和坐標(biāo)。程序通過(guò)python截圖獲得原始圖像,使用精靈標(biāo)注助手標(biāo)注圖片,制作并劃分VOC數(shù)據(jù)集,進(jìn)行訓(xùn)練。

        獲得原始圖片:這步使用python調(diào)用win32 api進(jìn)行游戲截圖,每隔一秒截圖,多局游戲,共有1050張截圖,每張圖片的名稱格式為:00xxxx.jpg,6位數(shù)字,按順序編號(hào)。為了適應(yīng)VOC數(shù)據(jù)集的要求,對(duì)圖片長(zhǎng)寬進(jìn)行0.4 x 0.4的壓縮處理,獲得的原始圖片如圖5所示。

        圖4 訓(xùn)練集的原始圖像

        圖5 YOLO V3測(cè)試識(shí)別圖片

        YOLO V3則直接通過(guò)regression一次既產(chǎn)生坐標(biāo),又產(chǎn)生每種類別的概率。

        訓(xùn)練:訓(xùn)練模型,程序使用的是阿里云GPU計(jì)算型 gn4系列NVIDIA M40 12GB的gpu,訓(xùn)練了大概18個(gè)小時(shí)。使用訓(xùn)練出來(lái)的模型進(jìn)行測(cè)試的結(jié)果如圖6所示,三個(gè)英雄都識(shí)別正確,速度只需要兩三毫秒。

        3.4 圖像識(shí)別

        本程序主要使用CNN網(wǎng)絡(luò)結(jié)構(gòu)LetNet來(lái)識(shí)別游戲中的時(shí)間,防御塔摧毀情況,手中的卡牌以及圣水?dāng)?shù)量等四種內(nèi)容。這四種內(nèi)容使用的網(wǎng)絡(luò)結(jié)構(gòu)一樣的,訓(xùn)練次數(shù)均為1800次,只有原始數(shù)據(jù)和種類有所不同。LetNet網(wǎng)絡(luò)使用keras實(shí)現(xiàn),包括了三個(gè)模塊:卷積層,池化層,全連接層。網(wǎng)絡(luò)包含14層,其中輸入層為32×32×3。

        識(shí)別防御塔情況:識(shí)別防御塔情況,對(duì)于整個(gè)程序來(lái)說(shuō),是比較重要的工作,因?yàn)閯儇?fù)判斷就是靠防御塔摧毀情況來(lái)判斷的,而且防御塔摧毀的獎(jiǎng)勵(lì)在設(shè)定的獎(jiǎng)勵(lì)計(jì)算中也占很大的比重。原始圖像如圖6所示,總共有5張,分別是敵方國(guó)王塔、敵方公主塔、防御塔被摧毀、己方國(guó)王塔和己方公主塔。公主塔和被摧毀的塔只算一次,是因?yàn)閷?duì)于同一方,公主塔的形狀是一樣的,所有塔被摧毀后也是一樣的。

        圖6 用來(lái)訓(xùn)練識(shí)別防御塔情況的原始圖像

        識(shí)別手中卡牌:識(shí)別手中卡牌,在游戲中同樣有重要作用,因?yàn)槌_獲得游戲狀態(tài)的各種工作,程序的核心就是出手中的卡牌,所以能準(zhǔn)確識(shí)別出手中的卡牌很重要。需要識(shí)別的卡牌總共有8張,分別是飛龍寶寶,煉獄飛龍,礦工,獵人,公主,皇家幽靈,騎士,黑暗王子。提供的原始圖片如圖7所示。

        圖7 訓(xùn)練識(shí)別手中卡牌的原始圖像

        識(shí)別圣水?dāng)?shù)量:識(shí)別圣水?dāng)?shù)量,是為了判斷是否有足夠的圣水出某張卡。提供的原始圖片如圖8所示。

        圖8 訓(xùn)練識(shí)別圣水?dāng)?shù)量的原始圖像

        4 實(shí)驗(yàn)結(jié)果與分析

        《皇室戰(zhàn)爭(zhēng)》中訓(xùn)練營(yíng)總共有14種,訓(xùn)練營(yíng)難度會(huì)根據(jù)玩家的杯數(shù)逐漸提高,其中4000杯內(nèi)的玩家,進(jìn)入前十二種訓(xùn)練營(yíng),4000杯到4300杯的玩家進(jìn)入訓(xùn)練營(yíng)格拉維,4300杯以上的訓(xùn)練營(yíng)齊達(dá)難度最高,擁有無(wú)限圣水和滿級(jí)傳奇卡。本程序?qū)?zhàn)的是訓(xùn)練營(yíng)格拉維,難度僅次于最強(qiáng)訓(xùn)練營(yíng)?!痘适覒?zhàn)爭(zhēng)》中,卡牌等級(jí)和國(guó)王塔等級(jí)對(duì)對(duì)戰(zhàn)都有很大影響,等級(jí)越高越強(qiáng),程序使用的卡牌等級(jí)和訓(xùn)練營(yíng)相比基本差兩級(jí),國(guó)王塔則差三級(jí),所以程序?qū)τ?xùn)練營(yíng)開始就處于很大劣勢(shì)。

        4.1 程序訓(xùn)練情況

        本程序記錄在日志文件中的對(duì)局共有2300場(chǎng)對(duì)局,如圖9是每百局程序的勝場(chǎng),x坐標(biāo)對(duì)應(yīng)的是坐標(biāo)值100的場(chǎng)次,y坐標(biāo)為勝場(chǎng)數(shù),可以看到程序從一開始0勝場(chǎng)到500場(chǎng)開始出現(xiàn)勝場(chǎng),然后勝場(chǎng)數(shù)一直提升,到1500場(chǎng)后,勝場(chǎng)基本穩(wěn)定,每百場(chǎng)18勝場(chǎng)到19勝場(chǎng)之間。如圖10則是每百局程序的平均獎(jiǎng)勵(lì),x坐標(biāo)對(duì)應(yīng)的是坐標(biāo)值 100的場(chǎng)次,y坐標(biāo)為獎(jiǎng)勵(lì)數(shù),從-42.2到后來(lái)基本穩(wěn)定在-10多。單局的獎(jiǎng)勵(lì)為全場(chǎng)摧毀對(duì)方防御塔以及作戰(zhàn)部隊(duì)的獎(jiǎng)勵(lì)加上被摧毀防御塔及出卡的負(fù)獎(jiǎng)勵(lì),獎(jiǎng)勵(lì)越高,說(shuō)明程序在對(duì)戰(zhàn)中表現(xiàn)越好。由圖10可以看到獎(jiǎng)勵(lì)逐漸提高,到穩(wěn)定在-10左右,這個(gè)曲線和勝場(chǎng)曲線相似,對(duì)局中的表現(xiàn)會(huì)體現(xiàn)在游戲的輸贏上,而最終獎(jiǎng)勵(lì)依然為負(fù)數(shù),說(shuō)明程序的表現(xiàn)還是低于訓(xùn)練營(yíng)。

        圖9 程序每百局勝場(chǎng)數(shù)

        圖10 程序每百局平均獎(jiǎng)勵(lì)

        4.2 與普通玩家的對(duì)比

        作為程序訓(xùn)練情況的對(duì)比,一共安排了兩名測(cè)試人員進(jìn)行了測(cè)試。測(cè)試人員1是一名游戲勝場(chǎng)648場(chǎng),最高獎(jiǎng)杯數(shù)為4711的玩家,測(cè)試人員2則是游戲勝場(chǎng)475,最高獎(jiǎng)杯數(shù)為3973的玩家。如表2,是測(cè)試人員各自用同樣的卡組與同樣的訓(xùn)練營(yíng)對(duì)戰(zhàn)了100局之后的戰(zhàn)績(jī)與程序2200場(chǎng)——2300場(chǎng)戰(zhàn)績(jī)的對(duì)比??梢钥吹匠绦蜃詈蟮膽?zhàn)績(jī)比測(cè)試人員都更好,勝場(chǎng)比測(cè)試人員1高38%,比測(cè)試人員2高100%。

        表2 普通玩家戰(zhàn)績(jī)與程序戰(zhàn)績(jī)對(duì)比

        5 總結(jié)

        本程序使用強(qiáng)化學(xué)習(xí)算法,使程序在多次游戲中不斷完善自己的出卡策略,提高游戲水平。使用CNN來(lái)識(shí)別卡牌、防御塔以及時(shí)間,通過(guò)YOLO V3來(lái)獲得場(chǎng)上英雄坐標(biāo),從而獲得游戲狀態(tài),通過(guò)投放卡牌到最多卡牌的區(qū)域來(lái)減少動(dòng)作空間。從結(jié)果來(lái)看,由于卡牌等級(jí)被壓制,后期對(duì)戰(zhàn)訓(xùn)練營(yíng)的戰(zhàn)績(jī)勝率在18%左右,超過(guò)了4000杯測(cè)試玩家的水平。后續(xù)為進(jìn)一步提高程序勝率,需要進(jìn)一步識(shí)別所有卡牌,并進(jìn)行玩家間的排位,從而達(dá)到最高的段位,并能夠進(jìn)行多種卡牌的組合,從而獲得多套強(qiáng)勢(shì)卡組。

        猜你喜歡
        程序動(dòng)作游戲
        試論我國(guó)未決羈押程序的立法完善
        動(dòng)作描寫要具體
        “程序猿”的生活什么樣
        畫動(dòng)作
        英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
        動(dòng)作描寫不可少
        數(shù)獨(dú)游戲
        瘋狂的游戲
        飛碟探索(2016年11期)2016-11-14 19:34:47
        爆笑游戲
        創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
        一本大道香蕉视频在线观看| 国偷自产一区二区免费视频| 国产精品va无码一区二区| 精品人无码一区二区三区 | 波多野吉衣av无码| 亚洲精品亚洲人成在线播放| 国产成人一区二区三区| 国产极品美女高潮无套| ā片在线观看免费观看| 国产激情久久99久久| 亚洲精品女优中文字幕| 手机看片久久第一人妻| 精品淑女少妇av久久免费| 久久亚洲国产中v天仙www| 久久深夜中文字幕高清中文| 不卡一区二区黄色av| 麻豆果冻传媒在线观看| 国产精品流白浆喷水| 精品色老头老太国产精品| 无码人妻久久一区二区三区免费丨| 艳妇臀荡乳欲伦交换在线播放| 国产短视频精品区第一页 | 老熟女老女人国产老太| 一本一道av无码中文字幕﹣百度| 免费AV一区二区三区无码| av免费在线观看在线观看| 久久精品网站免费观看| 老熟女高潮一区二区三区| 天堂69亚洲精品中文字幕| 特级黄色大片性久久久| 久久国产免费观看精品3| 久久久久99精品成人片试看| 精选二区在线观看视频| 自拍偷自拍亚洲精品第按摩| 又爽又黄又无遮挡网站动态图| 无码一区二区三区在线在看| 在线国产丝袜自拍观看| 久久无码专区国产精品| 国产91网| 免费蜜桃视频在线观看| 国产亚洲一区二区在线观看|