トーナメントの賞金ストラクチャについて


最近日本でも、ごく一部のオタクな方達(自分included?)の間で、お金を賭けないゲームとしてのポーカートーナメントがブームですね。本場米国でのreal moneyのtournamentに対する練習という位置付けにもなっているようです。こういったトーナメントで、入賞者にどのように入賞ポイント(real money tournamentにおける賞金に対応するもの)を配分するかということが問題になります。事前に決めておけばどんな方法でも公平は公平なのですが、

  1. 参加人数のが変わっても、ある程度合理性のあるストラクチャにする
  2. 現実のトーナメント(例はここ参照)に近い賞金ストラクチャにする
  3. コンピュータアルゴリズムの組み易いストラクチャにする
  4. 参加人数が変動する場合でも、現場で即座に算出できるストラクチャにする

などの要件を満たしていることが望ましいでしょう。

 まず1.を満たすためには、総入賞ポイントを参加人数人数に比例するものとして、それを上位で配分するのが合理的でしょう。(簡単にするためには、総入賞ポイント=参加人数でも全く問題ないでしょう。)なぜならば、このような構造にしておけば、獲得出来る入賞ポイントの期待値が人数に依らず一定となるからです。また、実際のreal moneyトーナメントの場合、出し合ったお金を(手数料をのぞいて)上位に再配分するという形式になっているので、この方式が現実を良く反映していると考えられます。ちなみにこのような方式にしておけば、IRC pokerのtournamentと同様のprofit/tourneyなども計算出来ます。ある意味で、profit/tourney(利益率)が大きいことが、上級プレーヤーの指標になりますので、その意味からも明快なストラクチャだと言えます。

従って、残る問題は総入賞ポイントの「配分方法」ということになります。

これもいろいろな配分方法があり、IRC tournamentのように、Winner takes it all(1位がポイントを総取り)というのもあるのですが、現実のpoker tournamentではこのようなストラクチャはあまりありません。しかも、Winner takes it all、あるいは1位がほとんどのポイントを取るストラクチャの場合、下位にも厚い通常のtournamentと異なり、戦術自体がかなり特殊なものとなってきます。

もう少し理屈として(あくまで理屈として)納得しやすいポイント分配は、「1位になることは2位になることより2倍難しい。n位になることよりn倍難しい」という仮説を
立て、1位1回のポイントが2位2回のポイントに、3位3回分のポイントに、n位n回分のポイントにほぼ匹敵するようにポイントを配分するという考え方があります。ここでは、簡単のため、総入賞ポイント=参加者数として、この考え方に沿ったポイント分配を考えてみます。

この場合、細かく小数点まで計算すると最下位にも一定の点数が配分されてしまうことになりトーナメントの賞金ストラクチャと著しくことなるものになってきます。あくまで、ポイントは1点単位で配分することとし、小数点はなるべく切り捨ての方向にする。これを機械的にやるには、比例代表制の議席配分などで使われているのと同じドント式でポイントを配分するのが良いかと思います。

即ち議席数=参加者数=総順位ポイント=S

であるとすると、S個の議席を各順位の人に配る訳ですが、配分の基礎となる得票に相当するものを、
1位を100票、2位を100/2=50票、3位を100/3=33.33票、n位100/n票であるとし、

まず1位に議席を配る(当選順位1位)。次に1位の得票を2で割る(=50になる)、

1位の人 2位の人 3位の人
100   50     33・3
100/2 50/2     33.3/2
100/3  50/3     33.3/3
100/4 50/4      33.3/4
100/5  50/5      33.3/5

これをその他の順位の人の得票と比べると、2位の50と同じ。で、同点の場合は「順位の上位の人」に優先してポイントを配分(これは順位の下位の人に優先してもまあ構わないけどどちらかに統一すべきでしょう)する。すると次も1位の人に1ポイント、次のポイントは2位の人に配る。今度は1位の人の得票を3でわる。2位の人の得票は2でわって、それらと他の順位の人の得票を比べていくという感じです。

一見ややこしそうにみえますが、いわゆる「当選順位」を50位まで表にしておくと以下のようになります。

表:当選順位表(相対的に入賞ポイントが順位に反比例する場合)
獲得ポイント数→
↓トーナメント順位
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1位 1 2 4 6 9 11 15 17 21 24 28 30 36 38 42 46
2位 3 7 12 18 25 31 39 47
3位 5 13 22 32 43
4位 8 19 33 48
5位 10 26 44
6位 14 34
7位 16 40
8位 20 49
9位 23
10位 27
11位 29
12位 35
13位 37
14位 41
15位 45
16位 50


ドント式配分にしておくことの一つの利点は、上のような表を予め作っておけば、現場のトーナメントでエクセルなどを叩いてわざわざ計算する必要がないということです。

表の見方の例をしめすと
10人のトーナメントの場合
1位の人:1,2,4,6,9の5人当選で5点
2位の人:3,7の二人当選で2点
3位の人:5の一人当選で1点
4位の人:8の一人当選で1点
5位の人:10の一人当選で1点

30人のトーナメントですと
1位:1,2,4,6,9,11,15,17,21,24,28,30で12点
2位:3,7,12,18,25で5点
3位:5,13,22で3点
4位:8,19で2点
5位:10,26で2点
以下11まで1点という感じの配分になります。

ちょっと上位が重過ぎるので「同点の場合は、順位の下に優先配分」の方がいいかな?

●パラメータをいじる
上の得票数というのは結局、「賞金の相対的な比率」なのですから、順位が上の方が大きければ実はなんでもいいわけです。で、上の例だと1位:2位:3位=100:50:33.3となって、ちょっと1位が重過ぎる一方、通常のトーナメントストラクチャに比べて2,3位の比率が低すぎるような感じです。なので、ちょっとだけパラメータをいじって

得票数
1位:100票
2位:60票
3位:40票
4位:25票
n位:100/n票(nは4以上)
とすると、2位、3位のポイントが少し増加する一方、下の順位へのポイントの配分が少し少なくなります。
これでやってみると(但し、同点は順位が上の人に優先して配る)

表:当選順位表(上記パラメータの場合)
獲得ポイント数
tourney
順位↓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
1位 1 3 5 7 9 13 16 19 23 25 30 33 38 41 44 49 54 57 62 64 71 75 79 82 88 93 97
2位 2 6 10 15 22 26 32 40 45 53 61 65 74 81 89 96
3位 4 11 18 27 37 46 56 66 78 90 00
4位 8 20 34 50 67 83
5位 12 28 47 68 91
6位 14 35 58 84
7位 17 42 72
8位 21 51 85
9位 24 59 98
10位 29 69
11位 31 76
12位 36 86
13位 39 94
14位 43
15位 48
16位 52
17位 55
18位 60
19位 63
20位 70
21位 73
22位 77
23位 80
24位 87
25位 92
26位 95
27位 99

(3位11ポイント目の00は100のこと

となります。
これですと、普通のトーナメントの賞金構造に割と似ており比較的良い賞金ストラクチャになっている感じです。なお、2000年のStraddle杯はこのポイント(賞金)ストラクチャを採用する方向で話が進んでいます。そこで、Straddle杯の現場などにプリントアウトしてもっていくために、印刷用の50位までの表をここに示しておきます。


なお、参考までに1999年のStraddle杯について、このストラクチャを使った場合のポイントを、9月分までについて、ポイント順(注:入賞ポイントの他に、出席点として、参加する毎に1点が加算されます)と、profit/tourney順にソートしたものを以下に示します。


A.ポイント順ソート

name jan feb mar apr may june July Aug Sep 総ポイント 参加回数 出席点込 prof/tny
hatter 5 5 0 1 0 0 6 0 7 24 9 33 1.666667
kazu0021 1 0 4 4 0 4 0 4 0 17 9 26 0.888889
awk 1 3 8 0 1 0 0 1 0 14 9 23 0.555556
kobayashi 1 0 2 0 12 15 5 20 2
soufull 0 1 1 0 0 8 0 1 11 8 19 0.375
tamapon 0 10 1 0 1 1 13 6 19 1.166667
ungar 0 0 0 8 1 0 0 0 0 9 9 18 0
kankon 3 0 0 3 4 10 6 16 0.666667
bluejay 0 0 1 0 3 0 1 0 1 6 9 15 -0.33333
doyle 0 0 10 0 0 10 5 15 1
kkai 1 7 3 11 3 14 2.666667
VP_KID 2 0 1 3 0 0 6 6 12 0
mamoru01 0 0 0 3 0 0 0 3 7 10 -0.57143
marisuke 1 0 1 0 0 1 0 3 7 10 -0.57143
saitoh 1 0 0 1 0 2 4 6 10 -0.33333
gen 1 0 0 2 1 0 4 6 10 -0.33333
ohtsuka 5 0 0 0 5 4 9 0.25
kaz5593 0 0 0 0 0 0 0 0 0 8 8 -1
jo 1 0 0 0 0 0 1 6 7 -0.83333
norion 1 2 1 4 3 7 0.333333
tiffany 1 0 0 0 0 1 5 6 -0.8
sasakimmx 4 0 4 2 6 1
shin 0 0 2 2 3 5 -0.33333
osakana 3 3 1 4 2
surrender 0 0 0 0 0 4 4 -1
busi 0 0 0 0 0 4 4 -1
bakuhadoh 0 1 0 1 3 4 -0.66667
pinktwo 0 0 1 1 3 4 -0.66667
blacktree 0 1 1 2 3 -0.5
heaven 1 0 1 2 3 -0.5
genkiyo 2 2 1 3 1
bert_99 1 0 1 2 3 -0.5
kugatsu 1 0 1 2 3 -0.5
takashi 1 0 1 2 3 -0.5
nakumo 1 1 1 2 0
sakamoppy 1 1 1 2 0
doc 1 1 1 2 0
sapyon 1 1 1 2 0
kaminaga 1 1 1 2 0
hinata 0 0 0 2 2 -1
kum2 0 0 0 2 2 -1
bakutoh 0 0 0 2 2 -1
nagoyann 0 0 1 1 -1
heba 0 0 1 1 -1
sami 0 0 1 1 -1
micky 0 0 1 1 -1
luckysatart 0 0 1 1 -1
miuta 0 0 1 1 -1
tosh8 0 0 1 1 -1
ki324401 0 0 1 1 -1
murayama 0 0 1 1 -1
nico 0 0 1 1 -1


B.profit/touney順ソート

name jan feb mar apr may june July Aug Sep 総ポイント 参加回数 出席点込 prof/tny
kobayashi 1 0 2 0 12 15 5 20 2
hatter 5 5 0 1 0 0 6 0 7 24 9 33 1.666667
tamapon 0 10 1 0 1 1 13 6 19 1.166667
doyle 0 0 10 0 0 10 5 15 1
kazu0021 1 0 4 4 0 4 0 4 0 17 9 26 0.888889
kankon 3 0 0 3 4 10 6 16 0.666667
awk 1 3 8 0 1 0 0 1 0 14 9 23 0.555556
soufull 0 1 1 0 0 8 0 1 11 8 19 0.375
ungar 0 0 0 8 1 0 0 0 0 9 9 18 0
VP_KID 2 0 1 3 0 0 6 6 12 0
bluejay 0 0 1 0 3 0 1 0 1 6 9 15 -0.33333
saitoh 1 0 0 1 0 2 4 6 10 -0.33333
gen 1 0 0 2 1 0 4 6 10 -0.33333
mamoru01 0 0 0 3 0 0 0 3 7 10 -0.57143
marisuke 1 0 1 0 0 1 0 3 7 10 -0.57143
tiffany 1 0 0 0 0 1 5 6 -0.8
jo 1 0 0 0 0 0 1 6 7 -0.83333
kaz5593 0 0 0 0 0 0 0 0 0 8 8 -1

●もう少し一般化してまとめておくと。。

この方式をもう少し一般化してまとめておくと、
1.総入賞ポイントに対して、各順位に配分されるのポイントを、単調減少関数f(n) (n:その人の順位)で配分する
2.配分方法として、端数処理のためにドント式を導入する

ということになります。一応、この方法を吠太郎式ポイントストラクチャと命名しておくことにします。
また、特に上に示したStraddle杯用のパラメータをVP_KIDパラメータと称することにしておきます(^^;)。

細かいパラメータの設定などには、いろいろ工夫の余地があり、例えば上位の票数は100:70:50などにするというのも一つの考え方ですし、VP_KIDパラメータですと、人数が多いときに元取り(1点確保)となる人の人数がちょっと多いような気がしなくもないです。これを防ぐには
例えば、f(n)として
f(1)=100
f(2)=60
f(3)=40
f(4)=25
f(n)=100*(1/n)^α/((1/4)^α) (for n>4)
として、αを1よりほんの少し大きい数(例えばα=1.05など)にしておけば、5位以下の得票、即ちf(n)を1/nよりは速く0に近づけることが出来るでしょう。(多分。。誰かいろいろいじってみて下さい)

また、別の考え方として、ある程度以上(例えば100人以上)人数が大きくなった場合は、100人の場合のストラクチャをそのまま用いるという考え方もあります。その場合、1議席に相当するポイントが1より大きくなります。基本的には上の考え方を元にしていろいろなストラクチャを作ることが出来ます。Doyle氏が現在運営されているポーカーレーティングの場合でも、『「場」に出すポイントがプレーヤーによって異なる=総ポイントは同じ人数でも異なる』ので、議席数=参加人数として、1議席単位でポイントを配っています。

ちなみに、通用のトーナメントでは、1位に全体賞金の40%、2位に25%。。。というような配分をしているものも多いようですが、その場合はf(n)を「定数」としているとみなすことが出来ますので、一応吠太郎ポイントストラクチャの範疇ではあります。しかし、nの人数に依らず柔軟が大きくなっても対応出来るように、ある程度nが大きい部分を数学的な関数(ex.100/n)にしてしまう所に、この方式の肝がある訳です。

●他のゲームへの活用
ゲーム関係のオフなどは、本当のポーカートーナメントだけでなく、ライブポーカーや、手本引き(^^;)、その他諸々のゲームを何種類もやることになります。人の出入りも結構あるようなこのようなオフ会でも、各ゲームでの順位に対して上の方法でポイントを配れば、総合順位をつけたりする場合にも、割と公平感が出てくるものと思われます。profit/tourneyで評価するのか、合計得点で評価するのかは主催者のポリシー次第ですが、まあそのあたりは適当に決めればいいんじゃないかと思います。


●追記(2000年5月22日)
なお、本賞金ストラクチャは東京で開催されるStraddle杯yahoo poker名古屋オフ、の他新宿にある唯一(?)のアミューズメントカジノ、パンドラルーレットクラブで開催されているパンドラTOC杯で採用されています。(パンドラのママに、「この賞金ストラクチャ使うんだったら何かちょうだい」と言った所、「キスしていいわよ」とのこと。ラッキー(\^o^/)(オエッツ(^^;)))


【ホームページへ戻る】