DOTA2 插眼位置进行聚类分析,你也可以成为眼位大师
輔助英雄
DOTA2 是一款 MOBA 游戲,有許多有趣是隱藏的機制。 這是一項團隊運動每個團隊成員都應該扮演他們指定的角色。 例如,輔助英雄應該為Farm英雄創造發育空間,包括拉野,購買輔助物品、賣血等。
輔助英雄一個至關重要的角色是控制地圖視野。 正確位置的視野可以幫助團隊實現關鍵目標。 此外,視野也會為隊友創造了地圖意識和活動空間,以便在相對安全的情況下游走gank。
這篇文章的目標是:
定義視野
第一種是提供區域視野的觀察者守衛(假眼)。 他們的視野受到樹林的阻礙,放置在山頂上的觀察者守衛提供飛行視野。 請注意,觀察者守衛不會顯示隱形單位。
哨兵守衛(真眼)不提供自己視野。 但是,站在哨兵守衛旁邊的玩家可以看到隱形單位。
除非放置哨兵守衛,否則這兩種守衛對敵人都是隱形的。 在戰略要地布置守衛的行為稱為插眼,撤除敵方隊伍放置的守衛稱為排眼。
地圖概覽
下圖顯示了完整的 DOTA 地圖,左下角是 Radiant 團隊,右上角是 Dire 團隊。
OpenDota 項目允許玩家查看比賽摘要和有用的圖表,如下面的示例比賽所示:
數據采集
任何人都可以從 OpenDota 免費查詢數據:
我們可以直接使用SQL語句獲取結果。以下 SQL 查詢返回比賽的日志數據。 時間范圍任意設置為 2021 年 1 月 1 日及以后。 25000 個匹配應該足以滿足我們的需求。
SELECT/*number of sentries plances as single (1D aarray) value*/ array_length(sen_log, 1) num_sen_placed, /*same but for observer*/ array_length(obs_log, 1) num_obs_placed, /*JSON of sentry wards placed*/ sen_log, /*JSON of observer wards placed*/ obs_log, /*match id*/ matches.match_id, /*start time*/ matches.start_time, /*hero id*/ player_matches.hero_id, /*account id*/ player_matches.account_id FROM matches /*match_id is common name for column in joined tables*/ JOIN match_patch using(match_id) JOIN player_matches using(match_id) JOIN heroes on heroes.id = player_matches.hero_id /*only look at pro matches*/ LEFT JOIN notable_players ON notable_players.account_id = player_matches.account_id WHERE TRUE /*at least 1 sentry placesd*/ AND array_length(sen_log, 1) IS NOT NULL /*at least 1 observer placed*/ AND array_length(obs_log, 1) IS NOT NULL /*2021 games only*/ AND matches.start_time >= extract(epoch from timestamp '2021-01-01T00:00:00.000Z')ORDER BY matches.start_time LIMIT 25000我們主要獲取我們需要的眼位數據, 日志采用 JSON 格式,并將被壓扁(平鋪)方便在使用的時候獲取。 我們主要使用以下信息:
OpenDota 坐標系
OpenDota 使用與實際地圖尺寸不同的坐標系。 實際上,地圖的左下角對應的坐標 (64,64),地圖被劃分為編號從 0 到 127 的塊。因此,地圖的右上角的坐標是(192, 192)。
初步分數據
數據看起來如何? 下圖顯示了數據集中所有假眼的散點圖,以及按高度著色的地圖。 藍點 (z=132) 對應一座小山,因此放置在小山上的眼可以提供無障礙視野。 此外,還添加了一個紅色邊界框以顯示地圖的范圍。
有趣的事實:(100,150) 處的灰色空點對應肉山的深坑,里面不能放眼。
上面的可視化很亂基本上得不到任何有用的信息。 讓我們看看隨著時間的推移放置的所有眼位:
有人可能會問:兩個隊伍的插眼活動是一樣的嗎? 下圖證實,是的,無論是哪個團隊,活動基本都是相同的。
此外,讓我們看看在山頂上插眼的情況。 它遵循與整體插眼活動相同的趨勢,并在比賽第 40 分鐘后下降。
如何選擇眼位
看看下圖,該圖顯示了游戲開始前放置的所有眼位。 一目了然,我們可以推斷出玩家想要在哪里放置視野,但不能推斷出他們優先考慮的位置。
如果我們想看看首先應該把眼放在哪里,團隊在哪里優先收到保護,怎么辦? 我們可以使用下一節中介紹的聚類算法來回答這些問題。
選擇模型:DBSCAN
DBSCAN 由兩個關鍵參數控制:
DBSCAN 的一個好處是它不需要指定簇的數量,它可以找到任意形狀的簇。 此外,它具有噪聲概念并且對異常值具有健壯性。 因此,一些眼位是不會被分配到一個集群中,而是作為異常值保留。
為什么不使用 KMeans?
KMeans 可以用作替代聚類算法。 但是,它依賴于三個假設:
這是最嚴重問題是 KMeans 的第三個假設。 確實,有些位置很好會方多眼,例如中路,而另一些地方則經常受到競爭,例如河道。
后期游戲與早期游戲
DOTA 是秒級更新游戲,每一刻都是創造新事物的機會。 事實上,時間(比賽階段)的影響是防守策略的主要因素。
如果 1 級塔仍然存在,則在基地中放置真眼是沒有意義的。 因此,基于任意時間框架對眼位進行聚類比忽略時間的影響更有洞察力。
每個階段的眼位聚類分析
本部分提供了雙方的真假眼聚類圖。 此外,還提供了評論以解釋集群如何反映參與者的策略。
開始前 - 0:00 分鐘前
在第一波小兵離開基地之前,玩家會爭奪河道符文。 因此玩家在靠近地圖中心的河流處放置假眼,以便查看敵人在做什么。 在敵人有時間阻止它之前,會在敵人的野區放置一些假眼觀察敵人的活動。
最后,以紅色顯示的眼位對應于經濟戰。 放置在中立野怪營地邊界框內的眼會阻止也怪生成。 這樣敵方隊伍被剝奪了金錢和拉野的能力。
早期 — 0:00 至 10:00
在游戲初期,中路和野區都不會受到很大的威脅。 由于 1 級塔可能仍然存在,因此在野區入口附近給予優先視野。
早期到中期 - 10:00 到 20:00
在游戲的早期到中期,大部分人開始嘗試入侵敵人的野區并且在敵人的野區放置視野。
中期 - 20:00 至 30:00
視野更多的出現在了山頂區域
中后期 — 30:00 至 40:00
中后期,注意力已經轉向了肉山的坑。 這表現為坑附近的山頂上布滿了各種真假眼,它們被放置在入口的各處處,以檢測搶奪肉山盾的企圖。
后期 — 40:00 至 60:00
肉山的坑還是一個最相關的目標。 一些眼會放置在基地附近。
大后期 - 60:00 及以后
在游戲的最后階段,兵營和 3 級塔可能已經都沒了。 為了彌補塔樓視野的損失,在基地內部會放置一些眼位。
交互式瀏覽器
繪圖的輸入和參數是任意的,并且基于DATA2相關的知識(即數百小時的游戲)。 如果您想調整數據,
可以到我們的公眾號中找到在線的鏈接
下面的截圖顯示了該應用程序并要求用戶提供 3 個輸入:
- epsilon 的值
- 大體時間
- 每個簇的最小采樣器
總結
這個項目大規模使用真實可靠的數據。 因此,它可能會捕捉職業玩家的最佳實踐并跟上策略和游戲機制的變化。
此外,這里使用的方法與地圖的變化無關。 因此對地圖布局或機制的任何更改都已在輸出中考慮在內。但是這個項目不評估眼的存活時間。 真假眼的花費成本/收益比方面的問題,這篇文章沒有解決。
可以查詢數據并確定放置眼位的位置可以幫助團隊確保擊殺或關鍵目標的關鍵地圖視野。 這篇文章的方法論的優勢在于它能夠跟上地圖布局和游戲機制的變化。 因此,通過觀察大量匹配,我們可以發現關鍵位置并在我們的游戲玩法中實現它們。
最后本文的源代碼在這里:https://github.com/NadimKawwa/DOTAWardFinder,請隨意查看
作者:Nadim Kawwa
總結
以上是生活随笔為你收集整理的DOTA2 插眼位置进行聚类分析,你也可以成为眼位大师的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决Windows7右键菜单出现乱码的详
- 下一篇: QT视频播放器(windows qt、l