T.vs.D <- 7 # 直接対決の残り試合数
T.vs.Rest <- 24 # 他のチームとの残り試合数
D.vs.Rest <- 28
T.won <- 65 # これまでの勝ち数
D.won <- 61
T.lost <- 44 # これまでの負け数
D.lost <- 48
avr.win <- 0.5 # 今後の平均勝率(共通.引き分けはないとする)
# 各試合,この確率でランダムに勝ったり負けたりする.
##################
# これから両者が T.win および D.win 試合勝ったら,
# T の最終勝率は Dを上まわるか?
T.over.D <- function(T.win, D.win)
{
T.rate = (T.won + T.win) / (T.won + T.lost + T.vs.D + T.vs.Rest)
D.rate = (D.won + D.win) / (D.won + D.lost + T.vs.D + D.vs.Rest)
if (T.rate > D.rate) {
return (T)
} else {
return (F)
}
}
prob.T.beats.D <- 0 # 最終的に T の勝率が D に勝る確率の積算
for (T.win.D in 0:T.vs.D) { # 直接対決での T の勝ち数を 0 から T.vs.D まで動かす
p.T.D <- dbinom(T.win.D, T.vs.D, avr.win) # 実現確率
D.win.T <- T.vs.D - T.win.D # 対応する D の勝ち数
for (T.win.Rest in 0:T.vs.Rest) { # 他チームとの試合での T の勝ち数
for (D.win.Rest in 0:D.vs.Rest) { # 他チームとの試合での D の勝ち数
if (T.over.D(T.win.D + T.win.Rest, D.win.T + D.win.Rest) == F) {
break # そんなに D に勝たれたらかないません…
}
else {
p <- (p.T.D * # 直接対決の成績の実現確率
dbinom(T.win.Rest, T.vs.Rest, avr.win) * # T がこれだけ勝つ確率
dbinom(D.win.Rest, D.vs.Rest, avr.win)) # D がこれだけ勝つ確率
prob.T.beats.D <- prob.T.beats.D + p # 最終的に勝る確率を増やす
}
}
}
}
cat("T が D に勝る確率は ", prob.T.beats.D, "\n")