競技遊戲的匹配系統要做到儘可能使雙方實力接近有多難?

坦克世界遊戲中常常出現一方吊打另一方,最終大比分結束的情況,這是因為要使雙方實力接近很難嗎?


—Queen of Pain

終於可以挑個正經問題回答一下了。

其實現在競技遊戲的實時匹配演算法已經很成熟了,大到 DotA 2,小到 Clash Royale(MD給他們家充錢還要給他們打廣告,手動斜眼),基本都是在用一個叫 ELO(因為作者叫 Arpad Elo)的演算法。

這個演算法來源於 1960 年,美國國際象棋協會採納使用的,最初的目的呢就是用來提升象棋比賽中匹配的合理性。

那麼怎麼樣的匹配才能被認為是合理的呢?首先我們有如下幾條假設:

  • 某個玩家,在某一分段區間內的波動屬於正常現象。

  • 在某一分段區間內的玩家,水平大致相同,勝出的期望也大致相同。

優化方向(合理性):

  • 保證匹配上的局勝負期望在50%左右。
  • 如果是多人匹配,避免出現菜雞被對面高手吊打。
  • 實時匹配的速度要快!(這點可以暫時不談,題主沒有要考慮這一點要求)

值得一提的是,如果我們樣本量夠大,出現勝率期望大於50%而失敗是可被允許的(比如5人抱團堅守高地的時候女朋友突然來電話了對吧……不過在大多DotAer眼裡可能是

一、統計玩家的勝負波動情況

ELO演算法先是採用了統計學的手段,用正態分布函數去擬合了玩家在比賽時的波動表現,其概率密度函數可表示為:(不要問我為什麼長這麼丑,此處應該請教數學大神)

P(x)=frac{1}{2} + int_{0}^{x} frac{1}{sigma sqrt{2pi }}cdot e^{-frac{x^{2}}{2sigma ^{2}} } dx

需要掃盲的請戳:概率密度函數_百度百科

有了這玩意兒之後,以DotA 2舉例,我們可以簡單地根據雙方的天梯分(或者叫MMR),來做一個勝率評估,但是這計算太過複雜,急需一個更簡單高效的擬合方式。

ELO經過了大量數據的模擬之後,發現玩家在比賽中表現的波動情況更接近於邏輯分布(logistic distribution),於是就有了以下公式可用:

R_{a} R_{b} 來表示a和b的天梯分(rating score),那麼a對b的期望勝率是:

E_{a} =frac{1}{1+10^{(R_{b}-R_{a})/400} }

於是概率密度函數為:P(x)=frac{1}{1+10^{-frac{x}{400} }}

這裡x的意思就是a和b的分差,P(x)就是a對b的期望勝率。

到這裡可能你已經有一點暈了,沒關係,我現在立馬祭出1550分的李狗蛋和1500分的王建國進行父子局Solo。我們認為這兩個人基本是在同一個水平段上的玩家,那麼高出50分的李狗蛋期望勝率究竟有多大?我們把 x = 50 代入以上式子,得到P(50) = 57.1%,也就是說,李狗蛋有57.1%的概率能成為爸爸!

可能細心的同學會問,11天梯上的分段和DotA 2的分段比例明顯不符合,能用同一個公式計算期望勝率嗎?

答:顯然不能,你需要自己重新調參。

二、根據近k場比賽數據來預測MMR

如果你們接觸過DotA 2的話應該會知道,在剛夠資格打天梯的時候,會有10盤被稱為「定分賽」的局。也就是說,這10盤的戰績很大程度上會決定你初始的天梯分,那麼系統是怎麼來評估的呢?其實並不難,從簡單模型角度出發,在這10把「定分賽」中,我們有一個期望的勝率和,用We來表示:

We = sum_{i}^{10}{P(i)}

然後這10場比賽的實際情況,我們用W來表示,取一個[0,1]之間的值,根據具體遊戲內容而定,比如在DotA2里就會考慮勝負、參團率、輸出、打塔、輔助支出、金錢、等級等等因素,我隨便找了一張IG的比賽戰績圖,來直觀感受一下每位選手表現的主要特徵:

可以看出,大媽的火貓無論在參展率還是傷害上都佔了很高的比重,打錢能力更是突破到每分鐘608金,無愧本場 MVP 稱號。

那麼你在10場「定分賽」後,天梯分(MMR)可以近似認為:

MMR = R_{0} + K(W-We)

其中R_{0}是根據你普通匹配得到的一個初始分,K是一個特殊的權重因子,可以對出分進行微調。

當然,以上提的所有內容都是競技遊戲匹配的大框架,放在具體的遊戲里,特徵就會有上百上千個,為了匹配的平衡性所要調整的參數也有上百甚至上千個,不同版本的迭代又會導致平衡問題的出現。不光是坦克大戰,即使在DotA、LOL這樣的MOBA遊戲里,會有不少針對性的手段來調整匹配的平衡性。據我所知,V社為了針對代刷代練,一般會有這樣的策略:

在相同分數段下(比如pm 100,如果一段時候後仍匹配不滿,這個區域會擴大),取每個人最近K場比賽的勝負記錄和(勝+1,負-1),然後使得兩邊隊伍總的最近K場勝負記錄和為0.

舉個極端的例子,比如K=10,這時候你戰績是近10場中9勝1負,和為8。假設此時已匹配3個隊友的和都為0,那麼最後會給你匹配一個和為-8(1勝9負)的選手。在這種機制下,比較能抑制代打,因為短期內你戰績越是厲害,隊友就越弱。

最後其實還是要具體遊戲具體分析,就好比我們都知道 AlphaGo 是用深度學習+蒙特卡洛+神經網路,但真正干起架來的時候,可不是那麼簡單的。

參考文獻:

  • Elo rating system


人多了好辦,人少的話,難道要去掰了他們的手嗎?

所以,我們有了「非常公正的」段位機制。

通過你遊戲的kda,勝率,還有一些計算公式。

玩家就獲得了象徵他在系統眼中的「真實實力」。


太難了。別說那些傻乎乎的AI,坐在我旁邊的女朋友都猜不到我會不會選炸彈人


大比分的比賽一般不是因為匹配系統的機制缺陷,而在於路人局尤其是低端局不會打逆風。

大部分競技遊戲都是需要累積優勢的。職業比賽中,大家比較專註認真,團隊協作比較好,劣勢的時候會盡量少進行正面衝突,選擇更合適的方式爭取扳平局勢。路人局是很難做到的,實力相當的兩支隊伍,很可能因為丟一血之後處理的不恰當,連丟2345678910血,簡稱血崩。甚至實力佔優的一方也有可能因為一兩個失誤被滾雪球,這個也是會不會玩的一個主要區別。

如果定義一個水平線,叫「會玩線」。這條線以下就會更容易出現一邊倒,無論匹配機制多麼完善。高於這條線的玩家懂得了什麼局勢該怎麼玩,實力相差不大的時候,輸了也不會輸的太難看。

值得注意的是,多人對戰的遊戲,開黑勝率更高是因為只要有一個會玩的指揮,其他人的大局觀不會特別重要,路人局需要5個人都會玩、願意認真玩,才能抗衡黑店。所以:

1、匹配的時候黑店會增加團隊匹配評分,無交流黑如果不夠默契的話,不如solo。

2、交流不便的遊戲,相對於語音系統完善的遊戲來說,更難產生漂亮的逆風局。這裡就不考慮開麥噴人吵架的負面影響了。

我的觀點就是:崩盤是因為不會玩,逆風就要多和隊友溝通,虛心考慮隊友指出的問題,指出隊友的問題。最恐怖的不是隊友不會玩,而是隊友覺得你sb,不願意和你溝通。因為出現這個情況的時候,你們倆肯定有一個sb,這遊戲就…難了。


據我所知WOT改了好幾次匹配演算法了,所以我猜問題並沒有出在演算法上,而是玩家池子太小了。玩家池子小會導致匹配到差不多玩家概率比較低,為了在有限時間內匹配成功,肯定是會放寬ELO的浮動範圍,導致單局內玩家不大平衡。

國服華南區我經常玩的時候才幾百人在匹配,要短時間湊出來多個30人平衡單局估計很難。


1V1的做到比較簡單,團隊競技想要做到很難,尤其是單排,團隊競技要達到的是團隊和團隊之間實力相當,比如在LOL中隨機匹配10個人勝率數據段位相當,但一隊匹配了5個擅長中單的玩家,而另一隊則是各個位置都有,這就使雙方團隊實力產生了差距,單用現有的匹配系統很難實現雙方實力相當。


參考暴雪的MMR系統


理論上不難 難的是實際

競技遊戲有個很有意思的特點

我喜歡叫他心理上的偏差

假設

ab兩隊 整體平均水平都在a級

a隊玩家在5分鐘內失去4個b水平隊友隊友

b隊玩家在1分鐘內失去4個d水平隊友

很可能b隊剩下的都是技術較好的玩家然而在心理預期上 b隊成員更可能產生失誤和放棄比賽

同時 可能b隊失去的四個隊友直接導致了b隊崩盤

所以 很多時候 競技遊戲 心態不好的 很容易跪


嚴格來說不存在可以直接知道玩家實力的演算法,任何演算法都需要基於玩家的遊戲信息來評價玩家的實力等級。也就是說即使你是一個大神,但如果你玩一個新號,那麼在系統眼裡你就是一個什麼都不會的菜鳥,之後隨著你的比賽場數增加和勝率提高,系統才會根據演算法不斷提高你的實力等級,逐漸匹配到更符合你實力的對手。

而且你玩得越多,系統獲得的數據越多,匹配的才會越準確


大比分結束戰鬥不代表兩邊的水平差距過大,競技充滿了不確定性,同樣的隊伍打兩把可能結果相差很多,坦克世界玩的少我不知道,LOL之類的職業比賽都經常出現三局比賽一場血虐對方一場被對方血虐,


謝邀

看到了坦克世界的標籤後我只想說:什麼時候才能盼到同級分房啊?我的E75對於天天當班長這件事已經饑渴難耐了!那感覺簡直是人間天堂啊!

好吧說正經的,個人覺得(僅僅針對wot來分析)技術上的差距是有很大的不確定性的,有時候一個600到700戰鬥力的人一樣會取得很好的戰績。所以如果在坦克世界現有的系統上嚴格按照戰鬥力來匹配的話肯定是無助於問題的解決的。(實際上一個真大神完全可以給賬號掛幾個月的機,待效率降低後沒事再上去虐兩把人)

既然嚴格按照戰力來匹配毫無作用,我認為最現實的方法就是同級分房,7級車在7級房裡對抗,8級車在8級房裡對抗等等以此類推。怎麼說呢,打個比方,如果一個高手對陣一個相對較弱的對手,那麼顯然E100對抗IS-7或者虎王對抗IS-3會更公平一些。而不是虎王對抗IS-7。戰鬥力(數值)上的區別匹配明顯是比不上裝備的區別匹配的(同樣是數值,不過涉及的領域不同,後者更能直接影響遊戲的進程,所以說一個人的命運啊,當然要靠自我的奮鬥,但是也要考慮到歷史的行程。)

私以為這是這個遊戲實現公平競技最有效的一種方式了,哎不知不覺就打了這麼一大段字有點小得意啊(雖然大多數其實廢話吧→_→)

至於輕坦怎麼劃分的問題我個人也沒有頭緒,而且這種方式可能會遭到技術流玩家的鄙視吧?算了,我只是分享一下自己的見解。如果有不同意見可以在評論區里和我交流,謝謝。

最後我要說的是

其實根本沒人邀請我答題


題主問的不是你們答得這些

坦克世界的匹配是雙方車型相近而不是雙方實力相近 所以才會出現一邊倒的局面

想做到實力相近確實很難 要考慮雙方玩家勝率 開黑情況 車型熟練度 地圖對駕駛水平的影響 金幣彈使用的可能 技能天賦點的平衡等很多因素

但坦克世界不是因為它難而不去做的 而是因為玩家人數太少了 不值得這麼做

以西歐服為例 平均同一時刻進行的戰門數不足40場 能把同級別車型的湊一起就已經不錯了 如果再加入實力相近匹配系統 恐怕想玩一局要等20分鐘

我曾經在Gaijin待過一段時間 War Thunder加入陸戰後就研究出一套隱藏分匹配系統 但根本用不上 想必坦克世界也是

至於其它的MOBA PvP遊戲 其實匹配系統做的還是不錯的


原來接觸過PVP匹配演算法,1V 1 ,N V N都有。簡單說下規則。

1.MMR:每次玩家A獲勝或者失敗,系統都會根據角色性質給其分配一個權值,在其再次匹配時根據權值總和來匹配與其相近的玩家。

2.為了避免作弊導致遊戲失去公平性,會讓任意雙方角色間隔一定時間且匹配超過一定次數方能再次匹配。

3,對於群V模式:會根據雙方角色裝備等綜合指標給其分配一個實力值而後再做匹配。


對於穿越火線槍王排位來說,這要看看對面有多少開掛的。


不足道


就好像匹配到的情敵都比我優秀


很簡單。隨便匹配一個,然後告訴玩家對面是「旗鼓相當的對手」就行了。


我玩英雄聯盟,雖然排位系統只允許段位相連的兩個段位雙排,但是玩家的真實水平並不可知。現在代練行業興盛,所以真正的公平並不是那麼簡單。


儘可能是可以的,什麼等級,勝率啊~ 設置定位例如幾星幾段啊~ 這些應該遊戲都會考慮到的了~~。但要排除一個號幾個人打,代練,等等無數的特殊現象.. 好象就不太科學也沒必要花這個成本啦~


講道理 育碧的r6 排位隨便打 上到百級大手 下到20級的菜雞 有幾個敢說自己沒開過掛?


LZ的問題在於把WOT當做了一個追求競技公平的對抗遊戲看待。

事實上,不平衡的地圖設計,不平衡的分房設計,不平衡的車型對位與不平衡的玩家裝備這些「不平衡」才是這款遊戲的對抗核心。WOT野隊的樂趣少有來自同XVM180+玩家的勾心鬥角,更多的還是開E100一路無雙或者小62式錫城奧力克啊。當年組隊屠殺小朋友刷勝率的我真是罪過……


按勝率排就可以。


推薦閱讀:

如何計算有多個起終點的最小費用流問題?

TAG:演算法 | 編程 | 電子競技 | 電子競技類遊戲 | 坦克世界 |