2年前くらいからバックギャモンに凝っていて、BackgammonAceでしこしこレート上げに勤しんでます。
将棋や囲碁と違い、すべてをダイスの出目に委ねて与えられた選択肢の中で最適ムーブを選択するというゲーム性が、自分の人生っぽくてしっくりくるのです。
レートも人生の如く低迷していますが。。
ここ最近はテキストを購入して勉強に励んでいます。
で、バックギャモンでは確率を常に考えてプレイする必要があります。
ダイス2個の出目の確率計算なので暗算でもできますが、今回はPythonのグラフ作成の練習としてヒット確率とエンター確率を計算し、グラフを作成しました。
ヒット確率
def hit(pt): cnt = 0 for dice1 in range(1,7): for dice2 in range(1,7): if dice1 == pt or dice2 == pt or dice1+dice2== pt: cnt +=1 elif dice1 == dice2: for i in range(1,5): if dice1*i == pt: cnt += 1 break return cnt/36*100
引数を相手のブロットとの距離としてヒット確率を計算する関数を用意。
hit(7) #相手のブロットが7pt離れた場所にあるときのヒット確率 #出力 16.666666666666664
この関数を用いて横軸に距離、縦軸にヒット確率を持つグラフを作成。
import numpy as np import matplotlib.pyplot as plt hit_per = {} for num in range(1,25): hit_per[num] = hit(num) plt.bar(hit_per.keys(), hit_per.values()) plt.xlabel("distance of blot") plt.ylabel("hit probability") plt.show()
ダイレクトショット(~6ptまで)のヒット確率が高いことが分かります。
7pt以降は20%以下と確率が一気に下がるので、スロットを行う際は7pt以上の位置に置くことを意識したいです。
まぁいくら離れてても平気でヒットされるがありますけどね。
そういう時は相手の強運を褒め称えましょう。
ヒットされる可能性があるならば、それはヒットするのです。
エンター確率
ヒットされた駒を盤上に戻すエンターの確率を見てみましょう。
相手のインナーボードにあるポイントの数によってエンター確率が変わります。
まずは駒が1つバー上にある時のエンター確率を可視化してみます。
def enter(point_num): return (1-(point_num/6)**2)*100 enter_per = {} for i in range(1, 7): enter_per[i] = enter(i) enter_per plt.bar(enter_per.keys(), enter_per.values()) plt.xlabel("number of point at opponent inner board") plt.ylabel("enter probability") plt.show()
ポイントが3か所以下であればエンター確率は7割以上あります。
基本的に安全といっていいでしょう。
問題はダブルヒットされた場合のエンター確率です。
1個だけエンター、2個ともエンターする確率をそれぞれ検証します。
point_num = [1,2,3,4,5,6] enter_one = [] enter_two = [] for i in point_num: enter_one.append((i/6)*(6-i)/6*100) enter_two.append(((6-i)/6)**2*100) plt.bar(np.array(point_num)+0.2, enter_two, label="two enter", width = 0.2) plt.bar(point_num, enter_one, label="one enter", width = 0.2) plt.xlabel("number of point at opponent inner board") plt.ylabel("enter probability") plt.legend() plt.show()
ポイントが2か所の場合で2個ともエンターする確率は50%以下、
3か所だと30%以下で、2個ともエンターする確率はかなり低くなりました。
勝率計算はまだ出来ませんが、キューブアクションの良い判断材料になるのではないでしょうか。
自分のインナーボードにポイントが複数ある場合は積極的にダブルヒットを狙っていきたいですね。
おわりに
ヒット確率とエンター確率を可視化することで理解が深まりました。
特に2個オンザバーしている場合の2個ともエンターする確率が感覚以上に低く衝撃でした。
あとmatplotlibの基本的な使い方を学べるいい教材にもなりました。