「シートバッテングを極める部屋」の編集履歴(バックアップ)一覧に戻る
シートバッテングを極める部屋 - (2018/02/24 (土) 13:48:45) の編集履歴(バックアップ)
シートバッティングを極める部屋
投手も打者も『ガチ』でシートバッティングしたらどうなるか検証。
乱数要素100%なので、その辺がわかってない人は今すぐページバックしてね。
カウントに依らず
ストライク率・スイング率が一定であるケース
+
|
ケース |
前提条件
1) 打者の勝利条件:ホームラン・ヒット・四球
2) 投手の勝利条件:三振
3) 投手のストライク率(どの程度ストライクを投げるか)は一定
4) 打者のスイング率(どの程度スイングするか)は一定
プログラム(見たい人だけ)
+
|
VBA |
Sub Macro1()
'
' Macro1 Macro
Dim mat As Integer '試合数
Dim win As Integer '投手勝利回数
Dim res As Double '投手勝率
Dim S As Integer 'ストライク
Dim B As Integer 'ボール
Dim PITCH As Double 'ストライク率
Dim BATER As Double 'スイング率
Dim x As Double
Dim y As Double
For i = 0 To 10
PITCH = ActiveSheet.Cells(23 + i, 7)
BATER = ActiveSheet.Cells(23 + i, 9)
mat = 0
win = 0
For mat = 1 To 10000 '10000回繰返し
'①試合前処理
S = 0
B = 0
'②試合中処理
Do While S < 3 And B < 4
ActiveSheet.Cells(1, 1) = 1 '乱数更新用
'変数読み
P_S = ActiveSheet.Cells(20, 7) '乱数(0.00~1.00)
B_S = ActiveSheet.Cells(20, 9) '乱数(0.00~1.00)
P_C = ActiveSheet.Cells(21, 7) '乱数(0.00~1.00)
B_C = ActiveSheet.Cells(21, 9) '乱数(0.00~1.00)
If (PITCH >= P_S) Then '投手・ストライク選択
If (BATER >= B_S) Then '打者・スイング選択
If (B_C >= 0.75) Then
B = 100
Else
S = S + 1
End If
Else '打者・見送り選択
S = S + 1
End If
Else '投手・ボール選択
If (BATER >= B_S) Then '打者・スイング選択
S = S + 1
If (S >= 3 And B_C >= 0.75) Then S = 2 'ファウル続行
Else '打者・見送り選択
B = B + 1
End If
End If
Loop
'③試合後処理
If S >= 3 Then win = win + 1
Next
mat = mat - 1
res = win / mat
ActiveSheet.Cells(23 + i, 11) = res
Next
End Sub
|
試行結果(カウント別)
+
|
表のみかた |
各カウントについて、
投手のストライク率・打者のスイング率を元に10000回のフリーバッティングを行う。
その結果を、打者の勝利条件(打者の出塁率)基準で数値化する。最小0.000~最大1.000
例えば、0ストライク・0ボールで
投手のストライク率=50%・打者のスイング率=50%とすると、
打者の勝率は0.269(26.9%)。逆に投手の勝率は0.731(73.1%)となる。
投手がどれだけストライクを選択するか
打者がどれだけスイングするのか(経験則で)わかっていれば、
各カウント毎に投手or打者の勝率を求めることができる。
|
試行結果(まとめ)
+
|
グラフのみかた |
各カウントが推移するとともに、打者or投手の勝率がどの程度変化するか示す。
表1と同じく、打者の勝利条件(打者の出塁率)基準で数値化する。最小0.000~最大1.000
|
反証
ちょっと待てや 3ボール2ストライクで.330打てるか?
投手にストライク放られたら、逆立ちしても.250しか打てないやんけ!
↓
せや!minmax法つかえばええやん。検証が捗るで~
↓
次の章へつづく
|
カウントによって
ストライク率・スイング率が変化するケース
(※速報版につき簡易報告)
前提条件
プログラム(見たい人だけ)
+
|
VBA2 |
Sub Macro2()
Dim mat As Integer
Dim P_S As Double
Dim B_S As Double
Dim P_C As Double
Dim B_C As Double
Dim S As Integer
Dim B As Integer
Dim winP As Integer
Dim plsS As Integer
Dim plsB As Integer
Dim winB As Integer
Dim res_winP As Double
Dim res_plsS As Double
Dim res_plsB As Double
Dim res_winB As Double
Dim PITCH As Double
Dim BATER As Double
Dim x As Double
Dim y As Double
'カウント設定
S = 0
B = 0
For i = 0 To 120
PITCH = ActiveSheet.Cells(23 + i, 7)
BATER = ActiveSheet.Cells(23 + i, 9)
mat = 0
res_winP = 0
res_plsS = 0
res_plsB = 0
res_winB = 0
For mat = 1 To 10000
'①試合前処理
winP = 0
plsS = 0
plsB = 0
winB = 0
'②試合中処理
Do While (winP + plsS + plsB + winB) = 0
ActiveSheet.Cells(1, 1) = 1
'変数読み
P_S = ActiveSheet.Cells(20, 7)
B_S = ActiveSheet.Cells(20, 9)
P_C = ActiveSheet.Cells(21, 7)
B_C = ActiveSheet.Cells(21, 9)
If (PITCH >= P_S) Then '投手・ストライク選択
If (BATER >= B_S) Then '打者・スイング選択
If (B_C >= 0.75) Then
winB = 1
Else
plsS = 1
End If
Else '打者・見送り選択
plsS = 1
End If
Else '投手・ボール選択
If (BATER >= B_S) Then '打者・スイング選択
plsS = 1
If (S = 2 And B_C >= 0.75) Then
plsS = 0
End If
Else '打者・見送り選択
plsB = 1
End If
End If
If S = 2 And plsS = 1 Then '三振
plsS = 0
winP = 1
Else
If B = 3 And plsB = 1 Then '四球
plsB = 0
winB = 1
End If
End If
Loop
'③試合後処理
If winP = 1 Then res_winP = res_winP + 1
If plsS = 1 Then res_plsS = res_plsS + 1
If plsB = 1 Then res_plsB = res_plsB + 1
If winB = 1 Then res_winB = res_winB + 1
Next
mat = mat - 1
res_winP = res_winP / mat
res_plsS = res_plsS / mat
res_plsB = res_plsB / mat
res_winB = res_winB / mat
ActiveSheet.Cells(23 + i, 11) = res_winP
ActiveSheet.Cells(23 + i, 12) = res_plsS
ActiveSheet.Cells(23 + i, 13) = res_plsB
ActiveSheet.Cells(23 + i, 14) = res_winB
Next
Beep
End Sub
(変更概要)
- ループの単位を「1勝負」→「1カウンド変化」へ変更
- 結果の単位を「打者の勝敗」→「投手勝利」「ストライク+1」「ボール+1」「打者勝利」へ変更
|
試行結果(カウント別)
+
|
表のみかた |
各カウントについて、
投手のストライク率・打者のスイング率を元に10000回のフリーバッティングを行う。
その結果を、打者の勝利条件(打者の出塁率)基準で数値化する。最小0.000~最大1.000
|
試行結果(まとめ)
+
|
グラフのみかた |
各カウントが推移するとともに、打者or投手の勝率がどの程度変化するか示す。
表1と同じく、打者の勝利条件(打者の出塁率)基準で数値化する。最小0.000~最大1.000
|
+
|
グラフのみかた |
【到達xxx%】
そのカウントに到達する確率。
開始時は0-0なので100%。
0-0でのストライク続行確率は0.561なので、1-0の到達確率が56%。
0-0でのボール続行確率は0.412なので、0-1の到達確率は41%。
【xストライクxボール】
そのまんまカウント状況
【投手勝・S続行・B続行・打者勝】
それぞれ、投手勝利・ストライク続行・ボール続行・打者勝利をしめす(ファールはファールしなくなるまで繰返し)
右欄の数値を合計すると必ず1.000になる。
【投xx%・打xx%】(黄色枠・赤文字)
各カウントにおける理想的な投手ストライク率、打者スイング率を指す。
逆に言うと、この数値から離れるほど損をすることになる。
(厳密に言えば、ちょっと得するかもしれないけど、その分を上回るリスクを抱えることになる)
|
主張
投手のストライク率30~40%あれば十分。
だたし、3ボールまで行ってしまったらストライク率80%にすること。
打者のスイング率40~50%あれば十分。
だたし、3ボールまで行ってしまったらスイング率80%にすること。
細かい数値は、表1・グラフ2を見てね
ご意見・ご感想どうぞ
- あ~こ↓れ↑かぁ。ええやん -- 名無しさん (2018-02-19 08:30:34)
- 打者にとって五分五分以上の状況が3-0か3-1だけってほんまに投手有利やな -- 名無しさん (2018-02-19 13:11:21)
- おつなのかー -- 名無しさん (2018-02-21 13:54:00)
- カウントごとに考えたらアカンやろ、勝負は0-0から始まって3ストライクをとられるまでに1回でも勝ったら打者の勝利になるんやから -- 名無しさん (2018-02-21 14:08:22)
- ↑ グラフ2で、投手勝利・ストライク続行・ボール続行・打者勝利を明確にしてみました。 -- くろいひと (2018-02-24 13:48:45)