對抗類遊戲平衡性評價與環境預測方法
1前言
對於對抗類遊戲,無論是1v1還是5v5,FTG還是MOBA,只要存在多種策略供玩家選擇,那麼這些策略之間的“平衡性”就是一個老生常談的問題,這裡的策略可以是某個英雄(亞索)、某套組合(光猴、睡箭)、某種戰術(人族TR)。如果某種策略過於強勢,那麼逐利的玩家就會傾向於只使用這種策略,從而導致整個遊戲環境變得單一、缺乏變化和樂趣。因此遊戲設計者需要對遊戲中策略之間的平衡性進行評估,從而及時作出調整。
但是要評估遊戲的平衡性並不簡單,一方面對於大部分遊戲而言,遊戲中所包含策略的數量都很大,因為這樣才有足夠的遊戲性和博弈空間,從而導致人工評估需要消耗極大的人力;另一方面,遊戲中的策略也是動態變化的,隨著開發者對遊戲內容的修改(例如加強或者削弱某個英雄、新英雄新玩法的推出),或者僅僅是玩家開發出了一種新戰術,都可能當前遊戲的環境和平衡性產生衝擊,因此評估結果還需要動態更新的,不能做成“一錘子買賣”。
本文以Alexander Jaffe在GDC2015上的一次分享“Metagame Balance For eSports&Fighting Games”(https://www.youtube.com/watch?reload=9&v=miu3ldl-nY4)為靈感,談談筆者利用“對戰勝率/場次矩陣”進行遊戲環境預測和平衡性評價的一點思路和效果。
該方法首先使用策略之間的對局勝率和遊戲中不同策略的使用比例計算每種策略的“勝率期望”,然後以勝率期望為基礎使用線性規劃計算玩家勝率期望大於50%時每種策略的“可使用範圍”,並以此作為評價策略平衡性的指標。
為了便於說明和理解,後文中使用“英雄”作為“策略”的代表,但請注意“策略”一詞不僅僅包含英雄,而是“遊戲對局戰術思路”的合集。
2勝率期望計算
2.1對戰勝率表與遊戲環境
當談到衡量英雄強弱的標準時,我們最容易想的是“英雄勝率”,在大量對局資料的基礎上,勝率越高的英雄顯然越厲害
Dotamax上的英雄勝率資料
但實際上英雄勝率是由2個部分組成的:英雄之間的強弱關係+遊戲環境中不同英雄出現比例。例如對於2個勝率超過50%的英雄而言,可能1個是因為他打誰勝率都超過50%,另一個是因為目前遊戲環境中某個英雄數量很多,而它正好是這個熱門英雄的剋星。
因此,要客觀公正地評價英雄的強弱、平衡,需要同時考慮“英雄之間的強弱關係”和“遊戲環境中不同英雄出現比例”,同樣的高勝率英雄中,打誰勝率都超過50%的英雄顯然更加的不平衡。上述2點可以分別用“對戰勝率表(A)”“遊戲環境(E)”進行描述。
“對戰勝率表(A)”是一個記錄每個英雄兩兩之間的對局勝率的2維矩陣,每一行代表一個英雄在對陣其他英雄時的勝率,例如大家熟悉的石頭剪刀布的對戰勝率矩陣就是:
爐石傳說中不同職業之間的對戰勝率矩陣是:
資料來源:爐石傳說盒子,http://lushi.163.com/bigdata/
“遊戲環境(E)”雖然是一個抽象感念,但可以通過一個記錄每個英雄出場次數在所有英雄出場次數中佔比(也就是使用率)的1維矩陣來表示,例如:
代表目前遊戲環境中有40%的人出石頭,50%的人出剪刀和10%的人出布
在比如爐石傳說中不同職業的使用率為:
用1維矩陣表示即:
2.2玩家策略與勝率期望
在大部分遊戲中,玩家在一次對局裡只能使用一個英雄,甚至於在多次對局中,一些玩家也會只用1個或者少數幾個英雄。
但是從統計角度來看,大量玩家的英雄選擇、單個玩家在大量對局中的英雄選擇是以一定的比例進行分佈的,例如50%選A,30%選B,20%選C,我們可以用一個1維矩陣來表示,稱為“玩家策略(U)”,例如:
表示一個玩家出剪刀和布的概率各為50%,絕對不出石頭。
可以看出,玩家策略(U)和遊戲環境(E)在結構上完全相同,因為本質上2者是相同的概念,只是玩家策略描述的是單個玩家在長時間內、大量玩家在短時間內對於英雄的選擇偏好,而遊戲環境則是描述大量玩家在長時間內對於英雄的選擇偏好。如果所有玩家都追求高勝率且對遊戲環境足夠敏感,那麼最終U和E將會趨於相等,意味著環境趨於穩定。
那麼在對戰勝率表(A)、遊戲環境(E)、玩家策略(U)確定後,實際上我們可以根據這些資料計算出玩家的“勝率期望”P=U·A·ET(這裡需要一些基礎的矩陣運算知識),或者叫策略U的勝率期望。
以大家熟悉的石頭剪刀布為例,如果當前環境E=[0.33,0.33,0.33],也就是其他玩家出剪刀石頭布的概率都是三分之一,那麼如果我只出剪刀U=[0,1,0],那麼最終勝率會是0.5,
但如果當前環境是E=[0.5,0.5,0],也就是沒有人出布,那麼U=[1,0,0]的勝率就將會是0.25(從0.5的剪刀哪裡吃平局的分)
所以我們可以看到,當玩家策略、策略與策略之間的對戰勝負關係、遊戲環境中的策略分佈確定之後,那麼玩家策略的勝率期望是可以計算出來的。如果一個策略的勝率期望高,那麼說明這是一個強勢策略,反之則是一個弱勢策略。
進一步的,如果一個英雄總是出現在各種強勢策略中,且一旦將這個英雄移除,強勢策略就變得普通甚至弱勢,那麼說明這個英雄很強、用它就能贏;反之則說明這個英雄很弱,拉都拉不起來。這一計算過程充分利用了遊戲中英雄之間的勝負關係和遊戲環境裡不同英雄的出場比例資料,比單純使用英雄勝率評價英雄的強弱更加準確。
因此,通過計算不同玩家策略的勝率期望,可以更加準確地發現遊戲中那些明顯過強、過弱的英雄,進而評價遊戲的平衡性。
3遊戲平衡性評價
3.1平衡性的定義
在使用勝率期望進行遊戲平衡性評價之前,我們首先要弄清一個問題:什麼樣的遊戲環境是健康、平衡的?
可能對於不同的設計師來說這個問題有不同的答案,當然哪個對哪個錯也沒有定論,但本文提出一個觀點——玩家在遊戲中達到50%勝率所能使用的英雄越多,那麼遊戲環境就越平衡、健康。
對玩家來說,如果用一個英雄自己輸多勝少,那麼這個英雄本質上是弱勢的,有可能這個英雄很好玩,贏一把爽一天,但對於遊戲環境來說這個英雄很弱。不過好玩和能贏哪一個更重要又是另一個問題了,此處按下不表。
如果將“玩家在遊戲中達到50%勝率所能使用的英雄數量”作為評價遊戲平衡性的指標,那麼真的就僅僅是“勝率超過50%的英雄越多就越好越平衡”這麼簡單?顯然也不是,畢竟遊戲裡不可能大部分英雄勝率都超過50%。這裡需要將玩家多次遊戲中不同英雄的使用比例納入考慮的範圍,用到第二節裡提到的“玩家策略”這一概念。
對於一個英雄A,玩家如果只用A,可能勝率不足50%,但是十次遊戲裡用8次A,其他2次用其他版本強勢英雄,最後整體勝率超過50%,那麼整體體驗也是良好的。
對於一個英雄B,如果玩家在十次遊戲中只能用一次,如果用了2次,即使其他8次都用勝率最高的英雄最後總體勝率期望也不足50%,那麼英雄B顯然太弱了,屬於弟弟角色。
對於一個英雄C,如果玩家十次遊戲中得用他至少5次,否則如果只用4次,剩下6次無論怎麼選擇英雄,最後勝率都不足50%,那麼英雄C顯然太強了,玩家不玩C就寸步難行。
為此,我們需要以每個英雄為粒度,計算“玩家若想整體勝率超過50%,該英雄的出場率範圍是多少”,換言之,如果在玩家策略中該英雄的出場率低於或高於這個範圍,那麼玩家的勝率期望將會低於50%。如果這個出場率範圍合理,說明這個英雄的強度合理;如果強度合理的英雄數量足夠多,那麼說明整個遊戲環境是平衡和健康的。
3.2出場率範圍計算
對於2.2節中提到的P=U·A·ET,在英雄對戰勝率表A和遊戲環境E已知且不變的情況下,如果沒有其他約束條件,利用簡單的矩陣運算就可以求出在此條件下最佳的玩家策略U,使得P最大。
但在實際遊戲中,除了U、A、E這3個矩陣的規範性外(例如單英雄使用率在0到1之間),還可能有一些其他的限制條件,例如某個英雄由於其上手難度很高因此使用率存在某個上限,或者某個英雄由於其人氣很高因此使用率存在一個下限等等。
為能夠相容對這種複雜條件下的計算,這裡使用了線性規劃的方式,即將U=[u1,u2,…,un]作為引數,在一定的約束條件C={c1,c2,…,cm}的約束下,求解P=U·A·ET的最大值以及對應的U,例如:
其中c1和c2是對U規範性的約束(英雄使用率之和為1,單個英雄使用率在0到1之間),c3:uk=0.05代表正在求解玩家以5%的使用率使用第k個英雄時的最高勝率期望。
當按0.05、0.1、0.15、0.2……0.95、1的形式不斷變化uk的取值時,就可以算出對於第k個英雄而言,在不同使用率下的最高勝率期望,得到如下所示的一系列結果
其中,[使用率0.35,勝率期望48.42]的含義是,如果要求玩家在自己的策略中以35%的比例使用該英雄(不能多也不能少),那麼這個玩家最多隻能找到一個勝率期望是48.42%的策略,也就意味著玩家找不到任何一個策略能夠讓自己的勝率期望超過50%。
然後我們將其中勝率期望大於50%的部分標記為綠色,表示在對應的使用率下,能夠找到一個玩家策略使得玩家的勝率期望大於50%。
更換求目標英雄k,重複上述求解過程,將會得到一系列[使用率,勝率期望]的計算結果。我們以使用率為橫座標,英雄為縱座標,將每個英雄標綠的部分畫在一張圖上,並按綠條的長度進行排序,有如下結果:
可以看到,英雄8和4很厲害,即使玩家只用這一個英雄(使用率為100%),也能有超過50%的勝率,而英雄1、10、9則很弟弟,最多隻能用15%到20%,否則就拿不到50%勝率。
下面我們以幾個典型對局例子看看這套評價方法的結果如何,其中游戲環境假定為各種策略的使用比例相同。
首先是剪刀石頭布:
說明每種策略都可以全用或不用(當然前提是遊戲環境中剪刀石頭布的出現概率都是三分之一)
第二種是存在過強的英雄
對於那個過強的英雄,如果玩家想要獲得50%以上的勝率,至少得拿出四分之一的比例來使用它,而對於其他3個一般的英雄,使用比例則不能高於四分之三。
如果我們把“標綠”的閾值提高,把目標提升到超過56%勝率,甚至可以出現如下結果:
只用NB英雄的話,可以獲得超過56%的勝率
第三種,過弱的英雄
別的英雄都可以隨便用,但唯獨這個DD英雄的使用率不能超過四分之一,否則勝率就達不到50%
最後我們以前面給出的爐石傳說的對局勝率和遊戲環境為例進行一下計算
注意這裡的勝率矩陣是縱向排布的,即第一行是[各職業對陣戰士]的勝率,特別注意的是,所有職業對陣德魯伊的勝率均小於50%
資料來源:爐石傳說盒子,http://lushi.163.com/bigdata/1
3.3有約束條件下的平衡性計算
3.2節討論了當對玩家策略不做任何約束的情況下的平衡性計算,但在實際遊戲中,因為玩家喜好、英雄池的不同,是存在一些潛在約束條件的。
以3.2節最後的爐石傳說的計算結果為例,在勝率大於50%的求解結果中,看上去聖騎、盜賊在使用率超過50%的情況下,也能夠獲得超過50%的勝率,但是如果我們將求解的“最佳策略”輸出出來就會發現,在盜賊使用佔比55%的情況下,剩下45%必須全部用獵人才能獲得50.26%的勝率。
如果一個玩家不喜歡玩獵人,或者目前手裡的牌構築不出環境中主流獵人的卡組,那麼這個玩家55%使用盜賊的情況下就“有可能”拿不到50%的勝率了。
因此,3.2節的求解過程中,如果有一定的先驗知識,那麼可以加入一些額外的約束條件來使得整個求解結果更加接近於真實結果
這裡的c4:ul<0.2就是額外的約束條件,要求第l個英雄的使用率不能超過0.2。
加入一個約束條件對於求解問題本身並沒有難度,只是要注意2點
1是約束條件C={c1,c2,…,cm}本身需要是自洽的,不能既要求u1>0.6,u2>0.6,還要求u1+u2≤1
2是當求解到k=l的相關情況時(uk=0.05、0.10…),在程式碼中要做好處理,確定以誰為標準,是uk=0.05還是ul<0.2
我們將“獵人、德魯伊的使用率≤20%”作為條件加入到前面的爐石求解過程中,得到結果:
可知,限制了獵人、德魯伊的使用率後,玩家在55%使用盜賊的情況下已經只有50.01%的勝率了
3.4問題點討論
3.4.1資料缺失問題
如果遊戲的玩家數量不夠多,或遊戲版本更新較快,會導致同一個遊戲版本中難以獲得足夠多數量的對局覆蓋所有英雄之間的對抗情況,最終導致“對戰勝率矩陣”中存在空缺值。
對於這種情況,有2種解決方案
方案1是人為根據經驗、其他相似英雄的對局勝率估算一個勝率填補空缺值
方案2是在求解計算時,“不讓沒有對局勝率的2個英雄碰面”,即將本應該屬於他們2人的對局分配給其他有對局勝率的英雄
例如本來環境中石頭、剪刀、布的分佈是0.4、0.4、0.2,但現在布和石頭的對局勝率缺失了,那麼在計算到0.2*[石頭VS布]時,就用0.1*[石頭VS石頭]+0.1*[石頭VS剪刀]來代替
圖中函式getWinRateNow是用來計算玩家策略(myArray)對抗遊戲環境(enemyArray)時的勝率期望,對於每一個heroMe,55-57行用noRate統計了其存在空缺值(對局勝率小於0)的場次比例,並在61行在計算有對局勝率的場次時除以(1-noRate),從而實現將缺少資料的場次按比例分配給有資料對局。
但是該方案也僅僅適用於空缺值較少的情況,如果對於某個冷門英雄缺失了很多對局勝率資料,那麼這種將空缺場次分給非空缺場次的做法會帶來比較明顯的偏差,一個極端的例子是如果這個英雄只和一個英雄有對局勝率,勝率是55%,那麼最終結果將會是這個英雄對陣每個英雄的勝率都是55%,這顯然是不合理的。
3.4.2“策略”的粒度問題
正如第1節所說,“策略”是討論遊戲平衡性的單位,但是具體到實施中,對遊戲中的“策略”進行歸類時粒度的粗細卻不好把控,可以將大致相似的策略都歸為一種,也可以將但凡有一丁點不同的策略都視為不同的。
以WAR3為例,我們可以簡單地將獸、人、暗夜、亡靈作為4個策略,也可以將同一個種族的不同套路例如暗夜-亂礦流、暗夜-吹風流視為不同的策略,還可以將同一個種族、同一個套路但首發不同英雄視為不同的策略,甚至還可以繼續細分。那麼到底細分到哪個粒度可以認為是“夠了”,或者說2個策略相似到何種地步就可以認為是同一個策略?
這個問題筆者認為只能說因遊戲而已。
有的遊戲很容易給出2個策略之間數值上的相似/差異程度,例如爐石傳說的2個套牌之間可以用不同卡牌的張數來體現差異,從而很容易歸類出相似套路的卡組;而有的遊戲則不好判斷2個策略到底差別有多大,例如MOBA裡一個五人隊伍把輔助A換成輔助B,有可能最終隊伍的戰術玩法完全沒有區別,也有可能完全不同。
另一方面,有的遊戲DAU高、對局資料量很大,即使將策略劃分得很細緻,搞出幾十幾百個策略,策略之間的兩兩對局勝率也不會出現空缺值,而有的遊戲DAU低、對局資料不足,稍微把策略劃分細緻一點就出現大量空缺值,自然也就讓平衡性的計算無從下手了。
4遊戲環境預測
4.1簡單粗暴的環境預測
從第三節中可以看出,遊戲環境與遊戲平衡性計算關係密切,一方面計算P=U·A·ET時遊戲環境(E)是必不可少的要素,另一方面在存在資料空缺值時也可以通過遊戲環境進行一定程度地彌補。
雖然當前的遊戲環境是很容易通過資料統計的方式得到的,但遊戲環境是動態變化的,如果僅僅利用“當前遊戲環境”來評估遊戲平衡性,那麼評估結果僅僅只是“當前環境”的評價,在指導後續遊戲調整上還存在不足。如果能夠預測在不加入其他干預的情況下游戲環境會如何變化,對於遊戲設計者來說將更加能夠把控遊戲環境與玩家體驗。
但是對遊戲環境的預測是一門很複雜的學問,涉及很多方面。本文提出一種較為簡單粗暴的環境預測方法,該方法假設玩家都是追逐勝率的,會根據遊戲環境調整自己的策略選擇勝率最高的策略,而這一行為又會影響遊戲環境,從而形成一個迴圈,最終達到穩定,即全部玩家都選擇同樣/相似的策略,大家的勝率都是50%。
具體而言,整個預測過程是一個迭代迴圈:
1、根據P=U0·A·E0T求解對於當前遊戲環境E0和對戰勝率A而言的最佳玩家策略U0
2、根據U0將遊戲環境E0按一定演變係數x向U0靠近,模擬玩家因為追逐勝率選擇版本強勢英雄的過程,得到新的環境E1,即
3、返回第一步,用E1求解新的最佳玩家策略U1,反覆迭代一定次數,或直至En和En+1的向量距離小於特定引數,代表遊戲環境趨於穩定
以前面用到的爐石傳說的環境為例進行預測,演變係數x取0.05,得到如下結果:
由於德魯伊打誰都超過50%的勝率,導致最後大家都用德魯伊了
由於這樣的資料和結果實在不具有分析和驗證的能力,我們再往前選擇7月1日-7月7日的資料
得到如下結果
最初由於德魯伊的強勢,德魯伊迅速崛起,但隨著德魯伊數量越來越多,唯一能打德魯伊的術士變多,從而帶動了特別能打術士的獵人(59%勝率)和戰士(65%勝率)
4.2附帶限制條件的環境預測
出於和第三節提到的類似的原因,在實際遊戲中可能存在一些先驗的約束條件,例如遊戲中最多隻有15%的人擁有一個牛逼英雄,或者某個角色最少也有5%的死忠粉。
因此和3.3節一樣,需要將上述條件帶入到求解最佳玩家策略U的線性規劃中,例如我們假設爐石中9個職業均至少有5%的使用率,最高不超過50%,那麼最終的環境預測結果是
雖然德魯伊除了對陣術士外均是優勢對局,但是獵人在平均勝率上更高,因此從其他職業身上“吃分”的效率更高。
4.3存在問題的地方
4.3.1演變係數x的確定
環境預測的每次迭代計算中,當前環境向當前最優解靠近的速度是由演變係數x確定的,4.1節所提到的方案中x是固定值,這並不合理,因為遊戲環境的變化速度由很多原因決定,並不是固定的。因此這也導致預測結果的指導意義不足,我們無法知道“迭代50次”所展示的結果大概會在多少天后出現。
4.3.2演變係數x的生效方式
對於求解“當前環境下的最佳玩家策略”這一步而言,通過簡單的矩陣運算知識可以證明最終求解結果將會是某個“最優英雄”的使用率為100%,其他英雄使用率為0%。因此4.1節所提到的“當前環境向當前最優解的靠近”在本質上是讓環境中使用非最優英雄的玩家減少一定比例轉去玩最優英雄。
但實際上,使用不同非最優英雄的玩家並不會同等比例地轉去玩最優英雄。首先自身勝率超過50%的玩家可能並不會換英雄,其次自身勝率低於50%的玩家可能換去轉去玩勝率超過50%但並不最優的英雄
4.3.3對戰勝率表的變化
前面的整個預測過程中,對戰勝率矩陣是保持不變的,但實際情況下,隨著遊戲環境的變化,勝率矩陣大概率是也會變化的,例如開發出針對當前熱門英雄的打法,或者大量玩家在“打不過就加入後”由於自身對強勢英雄並不熟悉,導致強勢英雄的勝率降低等等。
結語
本文的起因是對Alexander Jaffe在GDC2015上分享進行復現和評估。在復現中發現其方法存在一定的弊端,例如使用“最低勝率”而非“勝率期望”作為評估一個玩家策略優劣的標準、未考慮遊戲中不同策略的使用比例等等。
於是在充分拆解了Alexander Jaffe所提方法的計算流程和邏輯後,提出了本文中的遊戲平衡性計算與評價方法,且由於需要用到“遊戲環境”作為輸入資料,簡單實現了一種遊戲環境的演變預測方法,最終覺得可以進行一下分享和討論。
從實踐效果上看,2個方法所得到的結果存在一定的指導意義,尤其是遊戲平衡性評價方法輸出的結果比單看勝率、出場率要更加客觀。但2個方法也有比較明顯的問題和弊端,存在一些“拍大腿”定下的引數,例如以50%勝率作為劃分標準和4.3節提到的問題。
後續準備結合專案組已有和未來的資料調整一些評價、預測的細節,並調研看看目前業界在這方面有沒有什麼好方法。
相關程式碼見:https://github.com/lwt1231234/MetaGame
作者:命運sniper
專欄地址:https://zhuanlan.zhihu.com/p/76479087
相關文章
- 對抗類遊戲應該追求“絕對的平衡”麼?遊戲
- 關於遊戲平衡性和遊戲公司如何利用遊戲平衡性賺錢遊戲
- 社交遊戲玩法設計—競爭與對抗遊戲
- 多人對抗類遊戲的10個空間佈局原則遊戲
- vue正式環境與測試環境壓包配置方法(vue-cli 2.0)Vue
- 遊戲模型研究:預測與反饋遊戲模型
- 在工業環境中透過預測性維護實現價值
- 不同性別玩家對於遊戲環境的不同選擇遊戲
- ESP32-C6測評-環境安裝
- 評價判斷類
- 從對抗到融合——遊戲“掛機”簡史遊戲
- 從《黎明殺機》看非對稱對抗遊戲的魅力遊戲
- 高難度畫素風格動作遊戲引薦與評價遊戲
- 如何延長遊戲的生命週期?從遊戲平衡性談起遊戲
- 你常說遊戲需要公平,又真的懂遊戲平衡性嗎?遊戲
- UC Berkeley提出變分判別器瓶頸,有效提高對抗學習平衡性
- 開發者談遊戲行業未來的發展狀態和對去年的預測評估遊戲行業
- 入行掃盲貼:<遊戲分析與評測>該怎麼做?遊戲
- 配置開發環境、生成環境、測試環境開發環境
- Laravel 原始碼環境檢測類詳細分析Laravel原始碼
- 2020移動遊戲預測遊戲
- 如何搭建良好的軟體測試環境?測試環境對軟體測試起到什麼作用?
- 對抗防禦之對抗樣本檢測(一):Feature Squeezing
- 理性與感性的碰撞-解析遊戲敘事的概念、價值與方法遊戲
- TapTap還有官方評分?已經給18款遊戲評價APT遊戲
- 【綜合評價方法】常見綜合評價方法及其實現
- 詳解vue-cli4環境變數與分環境打包方法Vue變數
- 蘋果在對抗還是推動整個遊戲界?蘋果遊戲
- 對抗攻擊方法一覽
- Steam解釋使用者評價對遊戲推薦演算法的影響遊戲演算法
- 機器學習股票價格預測從爬蟲到預測-預測與調參機器學習爬蟲
- Python遊戲開發:Pygame的執行環境|案例執行與分析Python遊戲開發GAM
- 資料資產價值評估常用方法及對比
- 在FPS遊戲中,玩家對音畫同步感知的量化與評估遊戲
- 談談測試環境管理與實踐
- 預測性分析的價值、方法和趨勢
- 從“遊戲批評”到“玩遊戲批評”遊戲
- 探索高效能圖形渲染能力,應對嚴苛視訊遊戲環境遊戲