get5loader icon indicating copy to clipboard operation
get5loader copied to clipboard

[API/Vue/Game/DB] Implement "Get5 Win Probability Rating" (GWPR)

Open FlowingSPDG opened this issue 5 years ago • 6 comments

Implement PRI-based new Rating system insted of current rating system(hltv1.0). PRI https://github.com/FlowingSPDG/get5-web-go/blob/9a2acf36244cd8030e076191d15db512f5e66a58/server/src/db/models.go#L959

FlowingSPDG avatar Jan 07 '20 20:01 FlowingSPDG

According to PRI Announcement,We should be able to get "Win probability" by map and situation. Situation can be calculated by Total equipment value of team(Im not sure if official PRI is doing the same) and It should be recorded into DB. API calculates "Win probability" by map and equipment value so I need to add new colmn like round_stats or s.th

(JP) PRIの計算式は、マップと状況(サイト上だと人数表示になっている,5v4とか)に応じて勝率を計算し勝率の計算とラウンド感の勝率%の推移によって算出される この「勝利確立(英:Win Probability)」は公開されていないように見えるが恐らく以下のどれかと思われる :

  1. 単純な人数ごとの勝率
  2. Mapごとの勝率
  3. プレイヤーの別のRatingから算出した勝率
  4. プレイヤーの装備品金額(チーム単位)を%にしたもの(例 : $3000 VS $1000 = 75% VS 25%)
  5. 4をマップごとにグルーピングしたもの

使用しているシステムを5番だと仮定し、これを"New Get5 Rating"として実装する 現状のget5-webのDBシステムはプレイヤーの装備品金額を取得しないので、API/Game/DBすべてで対応させる必要がある ステップとしては :

  1. Game側でbuyタイム終了時に全プレイヤーの装備品総額を記録(player_statsと同じ)、以後プレイヤーが死亡するたびに総額をアップデートし直す(仮 : round_stats)
  2. ラウンド終了時にこれをPOST(player_statsと同じタイミング)
  3. APIは受けた情報をDBに登録する(~~1Rにプレイヤーが9Kill発生した場合9レコード発生する~~)
  4. APIはマッチ終了時にDBからround_statsをmapでSELECTして勝率の計算を行う 5?. 算出した数値をDBに永続的に記録する(マッチ数が増えた時に数値が変動するのを回避するため)

永続的にDBに数値だけ保持するか、都度計算するかは迷い所 都度計算の場合レコードが増えた際にDBへの負荷が課題になる ただしHLTV Rating 2.0も変動してたと思うので、変動する事自体は問題ではない(はず)

edit1 : どうやらプレイヤーが死亡した際や武器をピックアップした時の装備品金額変動は考慮していないようなので、ラウンド開始時に纏めて記録して終了時にcommitするだけで良いかもしれない

edit1 : I think PRI is using Equipment-value based calculation:

Our initial win probability model is rudimentary and does not yet incorporate basic, important factors such as time remaining in the round, bomb factors, damage, and changes in equipped weaponry throughout a round. It also does not account for more complex factors like map control or the skill level of players and teams involved. All of these factors are on our radar and development to incorporate some of them is already underway.

FlowingSPDG avatar Jan 07 '20 20:01 FlowingSPDG

マップ毎の勝率と装備金額を用いてそのシチュエーションの勝率を出すらしいけど、どういう式で求めれるのか不明

FlowingSPDG avatar Jan 07 '20 22:01 FlowingSPDG

マップ毎の勝率は都度計算 ラウンド開始時に装備金額を割り出し、各プレイヤーの装備金額をパーセンテージ化する

例 : チーム1のプレイヤー1~5とチーム2のプレイヤー6~10がいるとする(以下p1-5,p6-10) p1-5: それぞれ$1000,p6-10 : それぞれ$4000の場合、全員の合計金額は$25000になる その場合p1-5の勝利確率(以下WP)は(4000 / 25000)*100=4% p6-10は(4000/25000)*100=16% となる。 これにマップ陣営毎のラウンド取得率・偏りを加算し(方法は不明)倒した相手のWPを加算する 例えばp6-10は所持金が多いのでWPが高いが、所持金の少ないp1-5はWPが低い(=倒してもレーティングに与える影響は小さい) p1がp6-10を全員倒した場合p1に入るGWPRは16*5=の+80GWPRになる

注 : この例ではチーム全員同じ装備金額だが、個人レーティングなので合計金額からのパーセンテージはしっかり計算して割り当てる

~最終的に表示するレーティングを合計値にするか平均値にするか、デスした場合減算するかなどは考える必要あり~ (edit:本家PRIは合計値,デス減算ありでしたのでこれを採用) マップ陣営毎の勝率の考慮は計算式を組み立てる必要がある

FlowingSPDG avatar Jan 07 '20 23:01 FlowingSPDG

陣営を考慮した勝率は (個人WP * 相対陣営WP)で良いか? 相対陣営WPは(自陣勝率%/相手陣営勝率%)で計算する 例 : 個人WPが10で自分サイドの勝率60%の場合 (10 * (60/40)) = 6.66 となる

例2 個人WPが16,自分サイド勝率が75%の場合 (16 * (75/25)) = 48となる

例3 個人WPが5,自分サイド勝率が30%の場合 (5 * (30/70)) = 2.14となる

FlowingSPDG avatar Jan 07 '20 23:01 FlowingSPDG

個人の持ちWP計算式(仮) ((個人装備品金額 / 全体装備品金額) * 100) * (自陣勝率 / 相手陣営勝率)) これは本人のポイントではなく、これを倒した人のポイントとなる

[EN] Personal Win Probability(WP) Calculation ((PersonalEquipmentValue / TotalEquipmentValue) * 100) * (YourTeamsideWinPercentage / OpponentTeamsiteWinPercentage))

FlowingSPDG avatar Jan 07 '20 23:01 FlowingSPDG

個人の計算は不要だが、キル発生時にチーム全体のWPの変動値とkillerの情報を押さえる必要がある p1-p10装備金額値カラムとkillN_killerとkillN_victimカラム(Nは数字)があれば計算できそう

FlowingSPDG avatar Jan 07 '20 23:01 FlowingSPDG