ヴァルのゲームAI開発記

ヴァルの開発記

コンテスト参加記など

CodinGameのランキングの計算式

この記事では、CodinGameのGlobal Leaderboardにおける順位の決定方法を解説します。

Global Leaderboardとは

CodinGameにおける最も優秀なユーザーを決めるためのランキングです。

上部メニューから『COMPETE』『LEADERBOARDS』 を選択することで見ることができます。

 ↓これです↓

f:id:ValGrowth:20200206233207p:plain

CodinGame Global Leaderboard

https://www.codingame.com/leaderboards/general/global

このランキングは各プレイヤーが持つCPという値によって決定します。

CPとは

CodinPointsの略。Competeタブにあるゲームをプレイすることで得ることができます。主に【強さ】【やりこみ度】【アクティブさ】の3つの観点から算出されます。

CPの計算方法

 

CP計算の基本

ゲームごとに以下の計算式で計算されます。

CP=(BASE * min(\frac{N}{500},1))^ {\frac{N-C+1}{N}}

ここで、BASEはゲームモードによって決まる定数(後述)、Nはゲームの参加者数、Cは自分の順位です。min(\frac{N}{500},1)の項は、参加者数が500人未満のゲームのCPを下げる補正です。参加者が500人以上の場合はCP最大値=BASEですが、500人未満の場合はCP最大値=BASE*(N/500)になります。

グラフで描くと以下のようになります。

f:id:ValGrowth:20200206235114p:plain

Cをx軸にとり、BASE=5000, N=3000のとき

順位が上がる(0に近づく)につれて得られるCPは指数関数的に上昇します。上の例だと、1位で5000CP、100位で3775CP、1000位で293CP、2000位で17CPです。

参加人数が多いほど、傾斜は緩やかになります。

f:id:ValGrowth:20200206235518p:plain

Cをx軸にとり、BASE=5000, N=30000のとき

同じ順位の場合、参加人数が多いほうが得られるCPは多くなります。この例だと、1位で5000CP、100位で4861CP、1000位で3765CP、2000位で2835CPです。

ゲームモードごとのBASE

Contest

最も最近開かれたコンテストから順にBASE = 10000, 9000, 8000, ... というようにBASEが変化します。10回以上前のコンテストは全てBASE = 1000です。

2020/02/21 追記:

BASE値が変更されました。最も最近開かれたコンテストから順にBASE = 10000, 9500, 9000, 8500, ... というようにBASEが変化します。BASEの最小値は2000で、それよりは下がりません。

全てのコンテストのCPを計算し、CPが高い順に3つのコンテストを選び、それらの合計値がコンテストモード全体のCPとなります。

参加/不参加に関わらず、コンテストが開かれる度に過去のコンテストのCPは下がっていくので、高いCPを維持するためには新しいコンテストに常に参加し続けることが重要になります。

Bot Programming

BASE=5000で固定。
全てのゲームのCPが加算されます。

Optimization

BASE=2500で固定。
全てのゲームのCPが加算されます。

Code Golf

BASE=200が5つ。
言語ごとに個別にランキングを作成して、それぞれBASE=200でCPを計算します。
1つのゲームで最大で5つの言語までCPが加算されます。
全てのゲームのCPが加算されます。

CodeGolfは言語によって有利/不利がある競技ですが、CPは言語ごとに計算されるため、CP計算においては言語選択による有利/不利はありません。

Clash Of Code

BASE=5000
このモードそのものを1つのゲームとして考え、レートランキングでCPを計算します。
レートは時間経過とともに下がっていくため、CPを維持するためには日々参加し続ける必要があります。

効率よくCPを得るには

最も効率良くCPを得る方法は、コンテストに参加することです。コンテストで使用されたゲームは終了後にBot Programmingモードに置かれることが多く、コンテストとBot Programmingの両方のCPを得ることができるためです。

コンテスト期間外はBASE値の高いモードであるBot Programmingをやるのが良さそうです。参加人数が多いゲームを選んだほうが多くCPを得られる傾向にあります。

Clash of Codeは放置したときのレートの減衰が速く、1ヶ月程度放置するとCPが0になるため、CP効率の観点からはあまりオススメしません。(CP抜きでいうと、楽しいゲームモードです!)

2020/02/07 追記:

Clash of Codeのレート減衰を以前より小さくしたと公式アナウンスがありました。また、一度レートが減衰しても少しプレイするだけですぐに以前のレートを取り戻せるようになっているそうです。

Ranking rework - Platform Evolution - CodinGame Forum

まとめ

強さとやりこみ度をバランス良く評価できており、とても良い評価方法と思います。

遊んだぶんだけ確実にランクが上がるので常に達成感を得続けることができるのが良さといえます。

 

2020/02/21追記:

先日行われたランキングシステムのアップデートについて、公式Blogでアナウンスがありました。この記事で紹介したCP計算式以外にも、ランキングのシステムの様々な事柄が書かれています。

https://www.codingame.com/blog/ranking-rework-competition/