各ハンド数にて、下表のバイイン以上を獲得できていれば、勝率の下限が定まる。(片側有意水準2.28%)
勝率 | >0.48 | >0.50 | >0.52 | >0.54 |
---|---|---|---|---|
1万hand時 | 22.57 | 34.41 | 46.56 | 58.50 |
2万hand時 | 24.80 | 48.86 | 72.88 | 96.79 |
5万hand時 | 17.20 | 77.07 | 137.25 | 197.16 |
10万hand時 | -10.82 | 109.36 | 229.27 | 348.97 |
逆に、下表のバイイン以下を獲得した場合、勝率の上限が定まる。
勝率 | <0.48 | <0.50 | <0.52 | <0.54 | <0.56 |
---|---|---|---|---|---|
1万hand時 | -46.44 | -34.61 | -22.46 | -10.52 | 1.52 |
2万hand時 | -72.86 | -48.80 | -24.78 | -0.87 | 23.11 |
5万hand時 | -137.30 | -77.43 | -17.25 | 42.66 | 102.73 |
10万hand時 | -229.25 | -109.06 | 10.84 | 130.55 | 250.65 |
補足
- 1万handにつき300回オールイン を仮定。人によっては適宜補正の必要あり。例えば150回オールインなら2万handで表内1万hand相当。
- ショートスタック前提。オールインに勝利してもダブルアップできないディープスタックの場合、おそらく3万hand程度で表内1万hand相当。
- トーナメントの場合、300回参加につき1万handと読み替えて欲しい。
バンクロール管理より
以上から、勝率50%以上、できれば52%以上を確定させることが目標となる。
- 勝率55%は非常に強く(非現実的?)、あまりBR考察の必要がない
- 2万handでさえ、BR2.5%以上バイインなら90%BRダブルアップする
- 勝率48%は非常に弱い
- BRダブルアップはBR5.0%バイインでさえ10%程度 ほぼ不可能
- 2万hand:BR2.0%以上バイインでは70%以上レートダウン
- 10万hand:100%レートダウン
- 勝率45%は論外
以上から、勝率50%以上、できれば52%以上を確定させることが目標となる。
- 20BBバイインだとすると、以下のように獲得BBはブれる。(両側有意水準4.56%)
- 一見、分散はhand数N倍で√N倍に増えているように見える。
- しかし分散/hand(=ブレ密度)は単調減少。
- hand数がN倍になると、√N倍でBB/100handは収束している。
BBブレ | BB/100hand ブレ | |
---|---|---|
1万hand時 | ±690.11BB | ±6.9BB |
2万hand時 | ±976.63BB | ±4.88BB |
5万hand時 | ±1545.03BB | ±3.09BB |
10万hand時 | ±2184.29BB | ±2.18BB |
- 試行回数:10万回
- 100万回にしても標準偏差が小さくならなかったため、正規分布に十分収束したと考えられる。計算時間的にこれで。
- 歩数:300,600,1500,3000
- 歩行距離 勝利時:1 敗北時:-1
表内は獲得バイイン数。
勝率 | 0.44 | 0.46 | 0.48 | 0.5 | 0.52 | 0.54 | 0.56 | 標準偏差σ(平均) |
---|---|---|---|---|---|---|---|---|
1万hand | -35.96 | -24.08 | -11.93 | -0.1 | 12.05 | 23.99 | 36.03 | ±17.25 |
2万hand | -72.01 | -48.09 | -24.03 | 0.03 | 24.05 | 47.96 | 71.94 | ±24.42 |
5万hand | -180 | -119.86 | -60.05 | -0.18 | 60.00 | 119.91 | 179.98 | ±38.63 |
10万hand | -359.8 | -240.05 | -120.04 | 0.15 | 120.06 | 239.76 | 359.86 | ±54.61 |
- 期待値から見て、σのn個分におさまる確率は以下の通り。
- 1σ内:68.26%
- 2σ内:95.44%
- 3σ内:99.74%(千3つしか外れない)
- 今回は3σでは有用な結論を得られそうにないので、(片側2.3%のリスクは覚悟で)2σに外れているかどうかを見て考える。
- オールインに依らず、CBやsteal,resteal,3Bの結果、ちまちま稼いでダブルアップor0倍 になる場合もありうるため、歩数を少なく見積もっている
- →hand数はやや少なくて良い?
- オールインを持ちかけてフォールドされた場合、歩数は増えているのにダブルアップにはならない。歩数を多く見積もっている
- PTには「Face allin and call」はあるが、「Raise allin」しかない。「Raise allin and called」を本来は使うべき。
- →hand数はやや多くて良い?
- ディープスタックの場合、オールインが少なくなる。
- むしろショートに付き合ってオールインしやすくなる?
- また、勝利しても相手がショートだとダブルアップできないため、歩行距離は±0.33-0.5程度が適切か。
import java.util.Arrays; import java.text.*; public class PokerTest { public static void main(String args[]){ //System.out.println("Hello world!"); //int[] startLife={20,25,33,40,50,100}; int[] startLife={0}; double[] winPercent={0.44,0.46,0.48,0.50,0.52,0.54,0.56}; int[] timeEnd={300,600,1500,3000}; //RandomWalk[] rw=new RandomWalk[100]; RandomWalkHP0[] rw=new RandomWalkHP0[100]; int count=0; for(int i=0;i<startLife.length;i++){ for(int k=0;k<timeEnd.length;k++){ for(int j=0;j<winPercent.length;j++){ //rw[count]=new RandomWalk(startLife[i],winPercent[j],timeEnd[k]); rw[count]=new RandomWalkHP0(startLife[i],winPercent[j],timeEnd[k]); rw[count].info(); count++; } } } } } public class RandomWalkHP0 { int timeEnd=3000;//タイムスパン //int memberMax=10000;//試す人数 int N=1000000;//試行回数 double startLife=0; //開始HP //double deadLife=startLife/2.0; //死亡HP //int nextRateLife=startLife*2;//終了HP double[] life=new double[N]; //残りHP double winPercent=0.52; //勝率 double winlife=1.0; //勝利の際、得るHP double loselife=1.0; //敗北の際、失うHP double lifeExpect=0;//終了HP期待値 double lifeVariance=0;//終了HP分散 double lifeDeviation=0;//終了HP標準偏差 /* int[] surviveCount= new int[N];//生存数 int[] nextRateCount= new int[N];//ダブルアップ数 double nextRateExpect=0;//ダブルアップ確率期待値 double nextRateVariance=0;//ダブルアップ確率分散 double nextRateDeviation=0;//ダブルアップ確率標準偏差 */ RandomWalkHP0(){//コンストラクタ。通常は↑↑の変数が適用される startWalk(); statistics(); } RandomWalkHP0(int st,double wp,int ts){//コンストラクタ 変数指定バージョン startLife=st; winPercent=wp; timeEnd=ts; startWalk(); statistics(); } void info(){ NumberFormat format = NumberFormat.getInstance(); format.setMaximumFractionDigits(2);//小数点以下桁数は2 System.out.println("試行回数:"+N+"回 タイムスパン:"+timeEnd); System.out.println("開始HP"+startLife+" 勝率:"+winPercent*100+"%"); System.out.println("平均HP:"+format.format(lifeExpect)+"±"+format.format(lifeDeviation)); } void statistics(){ expect(); variance(); } void expect(){//生存確率期待値を出す。 for(int i=0;i<N;i++){ lifeExpect+=life[i]; } lifeExpect=lifeExpect/(double)N; } void variance(){//分散を出す。expect前提 for(int i=0;i<N;i++){ lifeVariance+=Math.pow((life[i]-lifeExpect),2.0); } lifeVariance=lifeVariance/(double)N; lifeDeviation=Math.pow(lifeVariance, 0.5);//標準偏差 } void startWalk(){//実際にランダムウォークを実行する //Arrays.fill(surviveCount,memberMax);//生存数初期化(最大値から、どんどん死んでく) //Arrays.fill(nextRateCount,0);//ダブルアップ数初期化 Arrays.fill(life,startLife);//HP初期化 for (int i=0;i<N;i++){//N回試すよ for(int time=0;time<timeEnd;time++){ if(winPercent>Math.random()){ life[i]+=winlife; }else{ life[i]-=loselife; } /* if(life<=deadLife){ surviveCount[i]--;//死ぬ break; }else if(life>=nextRateLife){ nextRateCount[i]++;//ダブルアップ break; }*/ } }//N回end }//func end }
このページへのコメント
iKDqpt I appreciate you sharing this blog article. Awesome.
QkivNT <a href="http://xeomzutoescz.com/">xeomzutoescz</a>, [url=http://thxsxofqgxde.com/]thxsxofqgxde[/url], [link=http://zhlzwyuofojh.com/]zhlzwyuofojh[/link], http://mxgtlpzeqydo.com/
近似的に同じになります。
すいません。質問の意図がわからないです。グラフの描き方とはなんでしょうか。
勝率51%のランダムウォークはポーカーの収支のグラフの描き方とはだいぶ異なる動き方な気がしますが、近似的に同じになるんですかね?