化學(xué)習(xí)游戲環(huán)境構(gòu)建:ARPG0.1實踐拆解)
做ARPG游戲深度強(qiáng)化學(xué)習(xí)這事兒我琢磨了挺久。很多朋友一上來就懟著算法調(diào)參結(jié)果訓(xùn)練出來的智能體要么原地轉(zhuǎn)圈要么瘋了一樣往墻上撞。根子往往不在模型上而在環(huán)境本身——你給智能體提供的那個“世界”構(gòu)造得不夠合理它當(dāng)然學(xué)不到有意義的行為。ARPG0.1這個項目名字起得很實在它就是在做一個專門用于深度強(qiáng)化學(xué)習(xí)實驗的ARPG游戲世界版本號0.1意味著先跑通再說。ARPG這個品類對強(qiáng)化學(xué)習(xí)特別有挑戰(zhàn)性因為它天然包含連續(xù)動作移動方向、轉(zhuǎn)向速度、離散決策攻擊、翻滾、用藥還帶時序延遲的反饋一個技能打中目標(biāo)要經(jīng)過施法前搖、彈道飛行、傷害結(jié)算。跟棋盤游戲或簡單街機(jī)游戲比起來這個世界復(fù)雜得多也真實得多。如果你正打算拿強(qiáng)化學(xué)習(xí)做游戲AI或者想搞一套能訓(xùn)練智能體的游戲環(huán)境又不想從零寫物理引擎那這篇關(guān)于ARPG0.1世界構(gòu)造的拆解正好是給你準(zhǔn)備的。1. 整體設(shè)計思路為什么用ARPG環(huán)境來訓(xùn)練強(qiáng)化學(xué)習(xí)1.1 環(huán)境設(shè)計的本質(zhì)給智能體一個可交互的協(xié)議構(gòu)建ARPG0.1世界之前必須先想清楚一個根本問題強(qiáng)化學(xué)習(xí)環(huán)境到底是什么它不是一個游戲它是一個接口協(xié)議。智能體不關(guān)心你的傷害數(shù)值怎么算不關(guān)心你的美術(shù)動畫有多華麗它只關(guān)心三件事我當(dāng)前能觀測到什么我能執(zhí)行什么動作做完動作之后我得到了多少獎勵。所以ARPG0.1的世界構(gòu)造本質(zhì)上是定義三個接口觀測空間、動作空間、獎勵機(jī)制。任何ARPG玩法都是這三者的具體化。這么說你可能覺得抽象拿生活類比一下你把一個孩子放到游樂場里他要學(xué)會“怎么玩得開心”。孩子看不到商家的運(yùn)營規(guī)則他只能看到滑梯、秋千、沙坑觀測能選擇去玩哪個設(shè)施動作玩了之后覺得高興還是無聊獎勵。強(qiáng)化學(xué)習(xí)的智能體就是這樣一個孩子ARPG0.1就是游樂場——游樂場設(shè)計得好不好直接決定孩子能不能學(xué)會“玩”。很多初學(xué)者容易犯一個錯誤把環(huán)境設(shè)計等同于游戲功能開發(fā)。結(jié)果做了一堆漂亮的UI界面、攝像機(jī)跟隨、角色動畫狀態(tài)機(jī)但這些對訓(xùn)練毫無幫助。在ARPG0.1里我堅持一個原則能用數(shù)值表示的不用視覺呈現(xiàn)能用向量解決的不用圖像渲染。智能體需要的不是“看起來像游戲”而是“信息完整且動作有效”。1.2 模塊拆分讓環(huán)境可維護(hù)、可擴(kuò)展、可調(diào)試ARPG0.1的世界被拆成五個獨立模塊這也是我強(qiáng)烈建議的架構(gòu)方式地圖模塊管理地形數(shù)據(jù)、出生點、障礙物碰撞、可破壞物刷新。實體模塊管理玩家角色、敵方AI、投射物、掉落物負(fù)責(zé)生命周期和屬性狀態(tài)。戰(zhàn)斗模塊處理攻擊判定、傷害計算、技能冷卻、狀態(tài)效果比如眩暈、減速。觀測模塊把游戲狀態(tài)翻譯成智能體的輸入張量包括向量觀測和可選的視覺觀測。獎勵模塊根據(jù)游戲事件計算即時獎勵并維護(hù)累計回報統(tǒng)計。每個模塊之間有明確的調(diào)用關(guān)系但不互相依賴實現(xiàn)細(xì)節(jié)。地圖模塊不關(guān)心戰(zhàn)斗模塊怎么算傷害戰(zhàn)斗模塊也不關(guān)心觀測模塊最終輸出什么格式。這樣做的最大好處是你可以單獨替換掉獎勵模塊或者把地圖從矩形改成圓形其他模塊基本不用動。ARPG0.1初期版本我沒有引入復(fù)雜的場景管理框架就是一組Python類加一個環(huán)境狀態(tài)字典。游戲循環(huán)用固定步長模擬每步0.05秒20幀邏輯幀刷新一次世界。這個幀率對訓(xùn)練來說完全夠了而且遠(yuǎn)快于真實時間——智能體在一小時內(nèi)可以經(jīng)歷幾十萬步交互這是強(qiáng)化學(xué)習(xí)數(shù)據(jù)效率的基礎(chǔ)保障。2. ARPG0.1世界核心細(xì)節(jié)解析2.1 地圖構(gòu)造與碰撞處理規(guī)則網(wǎng)格比物理引擎更香ARPG0.1的地圖設(shè)計采用規(guī)則網(wǎng)格柵格化方案而非連續(xù)物理碰撞。整個地圖是30×30的網(wǎng)格每個網(wǎng)格單元對應(yīng)1米×1米墻體和障礙物直接標(biāo)記為不可通行。玩家和敵人的位置用浮點數(shù)坐標(biāo)表示但碰撞判定時做網(wǎng)格映射。為什么不用物理引擎我之前踩過坑引入物理引擎后碰撞體形狀調(diào)試、摩擦系數(shù)、彈力系數(shù)這些東西會消耗大量時間而且物理引擎的微小抖動會讓觀測數(shù)據(jù)產(chǎn)生噪聲。深度強(qiáng)化學(xué)習(xí)對輸入噪聲非常敏感哪怕位置觀測上出現(xiàn)0.01米的抖動策略網(wǎng)絡(luò)都可能學(xué)到奇怪的行為。網(wǎng)格碰撞的好處是確定性高。同樣一個動作序列環(huán)境永遠(yuǎn)給出同樣的結(jié)果。這對強(qiáng)化學(xué)習(xí)尤其重要因為算法要評估“這個狀態(tài)下執(zhí)行這個動作的價值”如果環(huán)境帶隨機(jī)抖動價值估計的方差會變大訓(xùn)練周期直接拉長。碰撞處理的具體實現(xiàn)是每次移動前先計算目標(biāo)位置然后檢查目標(biāo)位置占據(jù)的四個角點所在的網(wǎng)格是否可通行。如果可通行就移動否則就卡在碰撞邊界。function can_move(current_pos, target_pos, grid_map): corners get_four_corners(target_pos, character_radius) for corner in corners: grid_x floor(corner.x / grid_size) grid_y floor(corner.y / grid_size) if grid_map[grid_x][grid_y] BLOCKED: return False return True這個方案看似簡單但有一個重要細(xì)節(jié)角色不能看成質(zhì)點。如果只用中心點判斷碰撞角色會“擠”進(jìn)墻體里。所以ARPG0.1里判斷四個角點相當(dāng)于給角色加了一圈碰撞盒。這個改動雖然小但直接決定了智能體能不能學(xué)會貼墻走位而不是穿模。2.2 戰(zhàn)斗系統(tǒng)攻擊判定窗口決定游戲手感ARPG戰(zhàn)斗系統(tǒng)的核心不是傷害數(shù)值而是攻擊判定窗口。什么叫判定窗口就是從按下攻擊鍵到傷害實際生效的時間段。ARPG0.1里普通攻擊的判定窗口設(shè)為0.15秒也就是攻擊前搖0.15秒前三幀播放攻擊動作第四幀產(chǎn)生傷害判定。這個設(shè)計是為了讓智能體必須學(xué)會“預(yù)判”。如果按下攻擊鍵立刻造成傷害那智能體只需要學(xué)會“看見敵人就按攻擊”毫無策略可言。有了前搖時間智能體就要學(xué)會在敵人靠近之前提前按下攻擊還要學(xué)會在攻擊落空時承擔(dān)冷卻代價。冷卻機(jī)制也是關(guān)鍵。普通攻擊冷卻0.5秒翻滾技能冷卻1.5秒遠(yuǎn)程飛彈技能冷卻2.8秒。這些冷卻時間設(shè)計為彼此不整除目的是避免智能體學(xué)到“固定節(jié)奏循環(huán)”這種投機(jī)策略——如果所有技能冷卻都是1秒智能體可能學(xué)到“攻擊-攻擊-攻擊”的循環(huán)根本不需要感知敵人位置。而不整除的冷卻時間迫使智能體必須實時判斷當(dāng)前態(tài)勢選擇最合適的技能。傷害計算采用簡單公式物理傷害 攻擊力 - 防御力但最低傷害保底為1點。法術(shù)傷害 技能基礎(chǔ)傷害 法術(shù)強(qiáng)度×系數(shù)。敵人AI分三種類型近戰(zhàn)沖鋒型、遠(yuǎn)程風(fēng)箏型、爆炸自爆型。每類AI的行為參數(shù)攻擊距離、追逐速度、攻擊頻率都暴露在環(huán)境配置中方便做課程學(xué)習(xí)。2.3 觀測空間設(shè)計不是所有信息都要塞給智能體ARPG0.1的觀測空間分為向量觀測和可選視覺觀測。向量觀測是智能體的主要感知通道總共包含三個部分自身狀態(tài)當(dāng)前生命值、生命值百分比、攻擊力、防御力、移動速度、當(dāng)前技能冷卻進(jìn)度3個技能、面向方向角的正弦余弦值。敵人感知最近敵人的相對位置、距離、相對速度、敵人類型編號、敵人當(dāng)前生命值百分比。環(huán)境感知距離最近的障礙物方向、距離最近的可破壞物方向。總共17個數(shù)值。每個數(shù)值在輸入網(wǎng)絡(luò)之前做歸一化處理不能直接塞原始值。比如生命值用當(dāng)前值除以最大值距離除以地圖對角線長度。如果不歸一化網(wǎng)絡(luò)很難收斂——攻擊力可能是幾百而方向角的正弦值只有-1到1梯度更新時量綱差異會把訓(xùn)練帶偏。視覺觀測我預(yù)留了接口但沒有在0.1版本啟用。如果啟用做法是渲染俯視圖的網(wǎng)格編碼把30×30的柵格轉(zhuǎn)成一個30×30×3的張量三個通道分別為可行走標(biāo)記、敵人位置標(biāo)記、玩家位置標(biāo)記。這比渲染RGB圖像高效得多因為RGB需要編碼材質(zhì)、光照、陰影這些對決策毫無用處反而增加網(wǎng)絡(luò)負(fù)擔(dān)。注意觀測空間的設(shè)計原則是“完整但不冗余”。信息缺失會讓智能體變成盲人信息冗余則會顯著拖慢訓(xùn)練速度。ARPG0.1的原則是凡是決策需要的信息必須存在凡是與決策無關(guān)的信息一律剔除。3. 實操過程搭建ARPG0.1環(huán)境與訓(xùn)練接口3.1 核心技術(shù)選型與原因ARPG0.1的環(huán)境主體用Python編寫狀態(tài)管理采用純函數(shù)式字典結(jié)構(gòu)不引入面向?qū)ο蟮膹?fù)雜繼承。每個游戲?qū)ο缶褪且粋€字典player { id: player_0, pos: [15.0, 15.0], hp: 100, max_hp: 100, attack: 12.0, defense: 3.0, speed: 2.0, skills_cd: {basic: 0.0, dash: 0.0, fireball: 0.0}, facing: 0.0 }為什么用字典而不是類因為強(qiáng)化學(xué)習(xí)環(huán)境每走一步就要復(fù)制或更新大量狀態(tài)數(shù)據(jù)字典的序列化效率高調(diào)試時直接打印dict內(nèi)容也很直觀。等環(huán)境架構(gòu)穩(wěn)定后可以再優(yōu)化成有slot的類或用numpy結(jié)構(gòu)體數(shù)組但0.1版本不需要那么復(fù)雜。訓(xùn)練接口遵循常見的環(huán)境交互協(xié)議每個step接收動作返回觀測、獎勵、是否終止、是否截斷四個值。這個協(xié)議的好處是兼容主流強(qiáng)化學(xué)習(xí)框架無論是用策略梯度、PPO還是DQN都不用改環(huán)境代碼。環(huán)境內(nèi)部邏輯幀是0.05秒一步但訓(xùn)練step可以配置為n步邏輯幀聚合一次推薦4幀聚合一次也就是訓(xùn)練決策周期0.2秒。因為ARPG這種決策速度0.2秒一次決策足夠聚合幀還減少了環(huán)境交互次數(shù)訓(xùn)練速度能提升不少。3.2 動作空間定義連續(xù)動作加離散技能ARPG0.1的動作空間是混合型這也是ARPG和很多棋類游戲環(huán)境的本質(zhì)區(qū)別。連續(xù)部分二維向量表示移動方向第一個分量是左右方向-1到1第二個分量是前后方向-1到1。第三個連續(xù)量是面向角度用于控制角色朝向。移動速度由環(huán)境內(nèi)部歸一化為固定最大速度乘方向向量。離散部分一個整數(shù)取值0到3分別表示不釋放技能、普通攻擊、翻滾閃避、釋放飛彈?;旌蟿幼骺臻g在深度強(qiáng)化學(xué)習(xí)里是個需要處理的細(xì)節(jié)。我采用的方案是把動作扁平化成一個長度為3的連續(xù)向量加一個離散索引的元組然后在策略網(wǎng)絡(luò)輸出層分別計算連續(xù)動作的均值方差和離散動作的概率分布。訓(xùn)練時使用Beta分布采樣連續(xù)動作而不用高斯分布因為Beta分布天然限制在0到1區(qū)間不會出現(xiàn)越界值。這一點在實戰(zhàn)中很重要——如果用高斯分布采樣偶爾采出超過[-1,1]的數(shù)值環(huán)境里再夾取就會產(chǎn)生大量“撞墻”行為干擾策略學(xué)習(xí)。dataclass class Action: move_dir: np.ndarray # shape (2,), range [-1, 1] face_angle: float # range [-pi, pi] skill_id: int # 0: none, 1: basic, 2: dash, 3: fireball動作時序上還有一個小設(shè)計翻滾及飛彈技能允許在移動中釋放而普通攻擊釋放時會短暫減速為原速度的60%。這個減速設(shè)定給智能體造成了“攻擊代價”避免它養(yǎng)成一邊移動一邊無限普攻的習(xí)慣。3.3 獎勵設(shè)計從稀疏到稠密的漸進(jìn)式調(diào)整獎勵設(shè)計是我最想分享的部分。ARPG0.1初版獎勵非常稀疏只有擊敗敵人給10自己死亡給-10其余時間零獎勵。結(jié)果訓(xùn)練了半天智能體的策略毫無進(jìn)展獎勵曲線跟心電圖一樣平。后來我改成漸進(jìn)式獎勵設(shè)計分三層底層事件獎勵每次普通攻擊命中敵人給0.3飛彈技能命中給0.8被敵人擊中給-0.5成功翻滾閃避一次攻擊給0.5。這個層級的目的是讓智能體盡早建立“攻擊能命中”和“躲開能避免受傷”的基本認(rèn)知。戰(zhàn)斗進(jìn)程獎勵敵人生命值每降低20%給0.5獎勵擊殺敵人給5.0額外獎勵。這個層級的目的是引導(dǎo)智能體去推進(jìn)戰(zhàn)斗而不是只做無意義的攻擊動作。策略獎勵根據(jù)智能體與敵人的距離變化給一個-0.1到0.1之間的密集獎勵。如果距離在緩慢逼近到攻擊范圍給正獎勵如果被拉開太遠(yuǎn)或貼到死角給負(fù)獎勵。這個獎勵分量是很多人忽略的但它對解決“智能體不敢靠近敵人”這個問題至關(guān)重要。獎勵的絕對值大小需要統(tǒng)一量綱我經(jīng)驗上把所有獎勵控制在單個step內(nèi)總獎勵絕對值不超過1.0避免獎勵爆炸。數(shù)值跨度太大的訓(xùn)練策略網(wǎng)絡(luò)更新幅度會反復(fù)橫跳很難收斂。提醒一句獎勵設(shè)計不要一步到位。我建議先跑一個完全密集獎勵版本看智能體能不能學(xué)會基本操作然后逐步削減獎勵密度讓智能體在更稀疏的信號下學(xué)會泛化。這種由密到疏的調(diào)法遠(yuǎn)比一開始設(shè)定稀疏獎勵然后干等有效。3.4 訓(xùn)練流程與日志監(jiān)控ARPG0.1的訓(xùn)練流程是這樣的環(huán)境初始化重置到隨機(jī)出生點玩家出生在地圖左半?yún)^(qū)隨機(jī)生成1到3個敵人分布在地圖右半?yún)^(qū)。一個episode最長持續(xù)1200步邏輯幀超時自動截斷返回不獎勵也不懲罰。訓(xùn)練中使用PPO算法主要超參數(shù)如下學(xué)習(xí)率3e-4線性衰減到1e-5GAE gamma0.99lambda0.95每次更新使用batch size 2048訓(xùn)練4個epochclip epsilon0.2熵系數(shù)0.01防止策略過快確定性運(yùn)行中每100步記錄一次環(huán)境交互日志包括累計獎勵、episode長度、命中率、每秒邏輯幀數(shù)。我特意在環(huán)境里加了命中率統(tǒng)計因為這是判斷獎勵設(shè)計是否合理的探測器——如果命中率極低說明觀測空間缺了關(guān)鍵信息或者獎勵信號引導(dǎo)方向有問題。訓(xùn)練到第3萬個episode左右能看到比較明顯的行為涌現(xiàn)智能體學(xué)會繞開障礙物接近敵人在攻擊前搖時保持移動被敵人追擊時用翻滾拉開距離。到第8萬個episode智能體已經(jīng)能穩(wěn)定擊殺2個敵人面對3個敵人時會優(yōu)先解決血量低的這個策略行為屬于模型自己學(xué)出來的并沒有在獎勵里顯式編碼。4. 常見問題與排查技巧實錄4.1 撞墻與原地轉(zhuǎn)圈獎勵設(shè)計失衡的典型表現(xiàn)訓(xùn)練中最常見的問題是智能體在原地轉(zhuǎn)圈。那陣子獎勵曲線不降也不升智能體仿佛在游泳。我用日志一查發(fā)現(xiàn)它的動作輸出一直在一個方向附近反復(fù)橫跳。排查結(jié)果有兩種可能。第一種是智能體已經(jīng)陷入局部最優(yōu)原地轉(zhuǎn)圈不會受傷因為敵人追不上它也不會被懲罰同時探索到某些狀態(tài)時剛好卡在攻擊判定的邊界偶爾命中敵人拿到正獎勵。這波操作非常“茍”但確實是強(qiáng)化學(xué)習(xí)典型的局部優(yōu)解。第二種可能是動作采樣太隨機(jī)熵系數(shù)過高導(dǎo)致策略還沒成型。解決辦法是雙管齊下降低熵系數(shù)從0.01到0.003同時給長時間不移動的行為施加一個微小懲罰碼比如每50步如果位置偏移小于0.2米就扣0.02分。這樣可以從源頭上抑制“站樁發(fā)呆”的行為模式。4.2 訓(xùn)練太慢網(wǎng)格碰撞和對象復(fù)制是主要瓶頸ARPG0.1跑起來發(fā)現(xiàn)每秒只有100個邏輯幀訓(xùn)練速度慢得讓人急躁。做了profiling后發(fā)現(xiàn)瓶頸不在算法而在環(huán)境本身每步循環(huán)內(nèi)部創(chuàng)建了大量臨時對象碰撞判斷調(diào)用了地形坐標(biāo)轉(zhuǎn)換函數(shù)每次還附帶多個屬性字典拷貝。做了兩個改動一是把網(wǎng)格地圖預(yù)計算為布爾型二維數(shù)組碰撞檢測改為直接下標(biāo)索引不每次做floor運(yùn)算二是把觀測構(gòu)建提取到獨立的函數(shù)里每步只更新增量狀態(tài)而不是重建整個字典。改完以后邏輯幀速率直接翻了三倍多訓(xùn)練時間明顯縮短。還有一個小技巧如果你的訓(xùn)練框架支持向量化環(huán)境盡量開8個并行環(huán)境。ARPG0.1的狀態(tài)沖突很少多開幾個環(huán)境并行跑采集經(jīng)驗的速度要快得多采樣效率的提升對訓(xùn)練收斂幫助巨大。4.3 觀測差異過大不歸一化導(dǎo)致策略振蕩有一次訓(xùn)練時策略網(wǎng)絡(luò)損失函數(shù)在訓(xùn)練中期突然出現(xiàn)周期性尖峰。排查了很久最后定位到是敵人數(shù)量觀測的問題——敵人數(shù)量是0到3的整數(shù)而其他觀測值是0到1的浮點數(shù)量綱差異讓網(wǎng)絡(luò)底層特征的梯度更新方向出現(xiàn)沖突。解決方式是全觀測統(tǒng)一變換到0到1區(qū)間。包括坐標(biāo)位置除以地圖尺寸30.0攻擊力除以最大可能攻擊力30.0冷卻時間除以最大值3.0。這個歸一化改造做完訓(xùn)練過程平穩(wěn)很多損失曲線的尖峰也基本消失。如果你在訓(xùn)練自己的環(huán)境時也遇到“損失下降后又突然暴漲”優(yōu)先檢查觀測空間有沒有量綱不統(tǒng)一的地方這是最容易忽略的原因。4.4 常見問題速查表現(xiàn)象可能原因排查思路與解決建議智能體原地轉(zhuǎn)圈局部最優(yōu)或熵系數(shù)過高降低熵系數(shù)增加靜止懲罰檢查獎勵密度訓(xùn)練速度過慢碰撞檢測瓶頸、對象復(fù)制過多用網(wǎng)格索引替代浮點碰撞優(yōu)化觀測構(gòu)建邏輯獎勵曲線劇烈波動獎勵量綱不統(tǒng)一或觀測未歸一化檢查觀測數(shù)值范圍統(tǒng)一獎勵尺度至[-1,1]區(qū)間學(xué)到反復(fù)釋放技能冷卻時長存在整除關(guān)系調(diào)整冷卻時間使其互不整除或增加技能觸發(fā)代價不敢主動接近敵人獎勵過于懲罰受傷忽視進(jìn)攻收益增加命中獎勵占整個獎勵結(jié)構(gòu)的比重讓進(jìn)攻有正向激勵環(huán)境狀態(tài)重置出錯隨機(jī)生成邏輯產(chǎn)生重疊出生點增加出生點生成邏輯中的碰撞檢測與有效位置校驗5. 經(jīng)驗總結(jié)與進(jìn)階建議做ARPG0.1這段時間體驗最深刻的是環(huán)境設(shè)計的優(yōu)先級遠(yuǎn)高于調(diào)參。很多強(qiáng)化學(xué)習(xí)教程反復(fù)強(qiáng)調(diào)算法細(xì)節(jié)但我發(fā)現(xiàn)只要環(huán)境有邏輯漏洞或獎勵信號設(shè)計得不夠合理再好的算法也跑不出效果。反過來只要環(huán)境穩(wěn)定、觀測完整、獎勵有漸進(jìn)性哪怕用最基礎(chǔ)的PPO也能學(xué)到很驚艷的策略。如果再迭代0.2版本我會優(yōu)先做三件事一是加入多玩家協(xié)作場景讓智能體學(xué)習(xí)配合行為二是加入可破壞的障礙物增加策略維度三是引入隨機(jī)掉落物品迫使智能體學(xué)會探索地圖和選擇拾取時機(jī)。這些擴(kuò)展在ARPG0.1這個架構(gòu)上都能比較平滑地加進(jìn)去因為模塊的邊界已經(jīng)劃清楚了。最后給你一個實際的建議如果你也在搭類似的強(qiáng)化學(xué)習(xí)游戲環(huán)境一定不要把全部精力放在游戲可玩性上?;ù罅庾龀銎恋漠嬅婧涂犰诺募寄軐?qiáng)化學(xué)習(xí)訓(xùn)練幾乎沒有幫助。把時間花在獎勵塑形、觀測設(shè)計、碰撞引擎確定性和訓(xùn)練數(shù)據(jù)采集效率這四個方面回報率高得多。模型能不能學(xué)會一項能力七成以上由環(huán)境決定而不是由算法決定。ARPG0.1最大的價值其實不是“做了一個游戲”而是驗證了一套“如何構(gòu)造一個適合強(qiáng)化學(xué)習(xí)的游戲世界”的方法。這套方法通用不限于ARPG。不管你做的是MOBA、格斗游戲還是自走棋核心的邏輯模型都一樣界面定義可觀測信息接口定義可執(zhí)行動作獎勵函數(shù)定義學(xué)習(xí)方向剩下的就是等智能體在反復(fù)試錯中找到自己的策略了。