「シートバッテングを極める部屋」の編集履歴(バックアップ)一覧はこちら
シートバッテングを極める部屋 - (2018/02/21 (水) 13:54:00) の最新版との変更点
追加された行は緑色になります。
削除された行は赤色になります。
&bold(){シートバッティングを極める部屋}
*&bold(){投手も打者も『ガチ』でシートバッティングしたらどうなるか検証。}
*&bold(){乱数要素100%なので、その辺がわかってない人は今すぐページバックしてね。}
----
**カウントに依らず
**ストライク率・スイング率が一定である単純ケース
***前提条件
1) 打者の勝利条件:ホームラン・ヒット・四球
2) 投手の勝利条件:三振
3) 投手のストライク率(どの程度ストライクを投げるか)は一定
4) 打者のスイング率(どの程度スイングするか)は一定
***プログラム(見たい人だけ)
#region(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
#endregion(VBA)
***試行結果(カウント別)
#region(表のみかた)
各カウントについて、
投手のストライク率・打者のスイング率を元に10000回のフリーバッティングを行う。
その結果を、打者の勝利条件(打者の出塁率)基準で数値化する。最小0.000~最大1.000
例えば、0ストライク・0ボールで
投手のストライク率=50%・打者のスイング率=50%とすると、
打者の勝率は0.269(26.9%)。逆に投手の勝率は0.731(73.1%)となる。
投手がどれだけストライクを選択するか
打者がどれだけスイングするのか(経験則で)わかっていれば、
各カウント毎に投手or打者の勝率を求めることができる。
#endregion(表のみかた)
#region(表1)
#region(0ストライク)
#image(https://i.imgur.com/oC43Bgq.png,width=700,height=350)
#image(https://i.imgur.com/9KnyOVh.png,width=700,height=350)
#image(https://i.imgur.com/vSyjA4Q.png,width=700,height=350)
#image(https://i.imgur.com/W2oYXyx.png,width=700,height=350)
#endregion(0ストライク)
#region(1ストライク)
#image(https://i.imgur.com/Zwuh3fa.png,width=700,height=350)
#image(https://i.imgur.com/4muHLY2.png,width=700,height=350)
#image(https://i.imgur.com/MCY9Zbs.png,width=700,height=350)
#image(https://i.imgur.com/3j0EE1U.png,width=700,height=350)
#endregion(1ストライク)
#region(2ストライク)
#image(https://i.imgur.com/b8LyiV7.png,width=700,height=350)
#image(https://i.imgur.com/5g7oT7A.png,width=700,height=350)
#image(https://i.imgur.com/O8JOcix.png,width=700,height=350)
#image(https://i.imgur.com/LwSo1Oe.png,width=700,height=350)
#endregion(2ストライク)
#endregion(表1)
***試行結果(まとめ)
#region(グラフのみかた)
各カウントが推移するとともに、打者or投手の勝率がどの程度変化するか示す。
表1と同じく、打者の勝利条件(打者の出塁率)基準で数値化する。最小0.000~最大1.000
#endregion(グラフのみかた)
#region(グラフ1)
#image(https://i.imgur.com/edvlcHl.png,width=700,height=450)
#endregion(グラフ1)
***反証
&bold(){&color(red){ちょっと待てや 3ボール2ストライクで.330打てるか?}}
&bold(){&color(red){投手にストライク放られたら、逆立ちしても.250しか打てないやんけ!}}
↓
せや!minmax法つかえばええやん。検証が捗るで~
↓
次の章へつづく
----
**カウントによって
**ストライク率・スイング率が変化するケース
絶賛検証中
#region(おまけ)
#image(https://i.imgur.com/4s6Slu2.png,width=700,height=350)
#endregion(おまけ)
***ご意見・ご感想どうぞ
- あ~こ↓れ↑かぁ。ええやん -- 名無しさん (2018-02-19 08:30:34)
- 打者にとって五分五分以上の状況が3-0か3-1だけってほんまに投手有利やな -- 名無しさん (2018-02-19 13:11:21)
- おつなのかー -- 名無しさん (2018-02-21 13:54:00)
#comment()
&bold(){シートバッティングを極める部屋}
*&bold(){投手も打者も『ガチ』でシートバッティングしたらどうなるか検証。}
*&bold(){インハイ教徒はお呼びでないので、今すぐページバックしてね。}
----
***【検証1】
*** カウントに依らずストライク率・スイング率が一定であるケース
#region(ケース)
***前提条件
1) 打者の勝利条件:ホームラン・ヒット・四球
2) 投手の勝利条件:三振
3) 投手のストライク率(どの程度ストライクを投げるか)は一定
4) 打者のスイング率(どの程度スイングするか)は一定
***プログラム(見たい人だけ)
#region(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
#endregion(VBA)
***試行結果(カウント別)
#region(表のみかた)
各カウントについて、
投手のストライク率・打者のスイング率を元に10000回のフリーバッティングを行う。
その結果を、打者の勝利条件(打者の出塁率)基準で数値化する。最小0.000~最大1.000
例えば、0ストライク・0ボールで
投手のストライク率=50%・打者のスイング率=50%とすると、
打者の勝率は0.269(26.9%)。逆に投手の勝率は0.731(73.1%)となる。
投手がどれだけストライクを選択するか
打者がどれだけスイングするのか(経験則で)わかっていれば、
各カウント毎に投手or打者の勝率を求めることができる。
#endregion(表のみかた)
#region(表1)
#region(0ストライク)
#image(https://i.imgur.com/oC43Bgq.png,width=700,height=350)
#image(https://i.imgur.com/9KnyOVh.png,width=700,height=350)
#image(https://i.imgur.com/vSyjA4Q.png,width=700,height=350)
#image(https://i.imgur.com/W2oYXyx.png,width=700,height=350)
#endregion(0ストライク)
#region(1ストライク)
#image(https://i.imgur.com/Zwuh3fa.png,width=700,height=350)
#image(https://i.imgur.com/4muHLY2.png,width=700,height=350)
#image(https://i.imgur.com/MCY9Zbs.png,width=700,height=350)
#image(https://i.imgur.com/3j0EE1U.png,width=700,height=350)
#endregion(1ストライク)
#region(2ストライク)
#image(https://i.imgur.com/b8LyiV7.png,width=700,height=350)
#image(https://i.imgur.com/5g7oT7A.png,width=700,height=350)
#image(https://i.imgur.com/O8JOcix.png,width=700,height=350)
#image(https://i.imgur.com/LwSo1Oe.png,width=700,height=350)
#endregion(2ストライク)
#endregion(表1)
***試行結果(まとめ)
#region(グラフのみかた)
各カウントが推移するとともに、打者or投手の勝率がどの程度変化するか示す。
表1と同じく、打者の勝利条件(打者の出塁率)基準で数値化する。最小0.000~最大1.000
#endregion(グラフのみかた)
#region(グラフ1)
#image(https://i.imgur.com/edvlcHl.png,width=700,height=450)
#endregion(グラフ1)
***反証
&bold(){&color(red){ちょっと待てや 3ボール2ストライクで.330打てるか?}}
&bold(){&color(red){投手にストライク放られたら、逆立ちしても.250しか打てないやんけ!}}
↓
せや!minmax法つかえばええやん。検証が捗るで~
↓
次の章へつづく
#endregion(ケース)
----
***【検証2】
*** カウントによってストライク率・スイング率が変化するケース
#region(ケース)
***前提条件
1) 打者の勝利条件:ホームラン・ヒット・四球
2) 投手の勝利条件:三振
3) 投手のストライク率(どの程度ストライクを投げるか)はカウント次第で変わる
4) 打者のスイング率(どの程度スイングするか)はカウント次第で変わる
5) [[ストライク率・スイング率の決定には、minmax法を使用する>https://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%8B%E3%83%9E%E3%83%83%E3%82%AF%E3%82%B9%E6%B3%95]]
***プログラム(見たい人だけ)
#region(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」「打者勝利」へ変更
#endregion(VBA2)
***試行結果(カウント別)
#region(表のみかた)
各カウントについて、
投手のストライク率・打者のスイング率を元に10000回のフリーバッティングを行う。
その結果を、打者の勝利条件(打者の出塁率)基準で数値化する。最小0.000~最大1.000
#endregion(表のみかた)
#region(表1)
#image(https://i.imgur.com/CfCPsaX.png,width=700,height=350)
#image(https://i.imgur.com/XpRD3yc.png,width=700,height=350)
#image(https://i.imgur.com/L3yROkF.png,width=700,height=350)
#image(https://i.imgur.com/Np0s8JF.png,width=700,height=350)
#image(https://i.imgur.com/w2RGbhu.png,width=700,height=350)
#image(https://i.imgur.com/VTCKob8.png,width=700,height=350)
#image(https://i.imgur.com/WSefTl5.png,width=700,height=350)
#image(https://i.imgur.com/9lZzHut.png,width=700,height=350)
#image(https://i.imgur.com/8CnXQmJ.png,width=700,height=350)
#image(https://i.imgur.com/Lkz6txF.png,width=700,height=350)
#image(https://i.imgur.com/1zdl2eY.png,width=700,height=350)
#image(https://i.imgur.com/cpeB0GN.png,width=700,height=350)
#endregion(表1)
***試行結果(まとめ)
#region(グラフのみかた)
各カウントが推移するとともに、打者or投手の勝率がどの程度変化するか示す。
表1と同じく、打者の勝利条件(打者の出塁率)基準で数値化する。最小0.000~最大1.000
#endregion(グラフのみかた)
#region(グラフ1)
#image(https://i.imgur.com/ND5c4Rr.png,width=700,height=450)
#endregion(グラフ1)
#region(グラフのみかた)
【到達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%】(黄色枠・赤文字)
各カウントにおける理想的な投手ストライク率、打者スイング率を指す。
逆に言うと、この数値から離れるほど損をすることになる。
(厳密に言えば、ちょっと得するかもしれないけど、その分を上回るリスクを抱えることになる)
#endregion(グラフのみかた)
#region(グラフ2)
#image(https://i.imgur.com/d8O5w4p.png,width=800,height=285)
#endregion(グラフ2)
***主張
>投手のストライク率30~40%あれば十分。
>だたし、3ボールまで行ってしまったらストライク率80%にすること。
>打者のスイング率40~50%あれば十分。
>3ボールまで行ったらチャンスです。スイング率80%にしましょう。
細かい数値は、表1・グラフ2を見てね
#endregion(ケース)
----
&bold(){&color(red){スイング率30%とか雑じゃない? もうちょっと厳密な数値だそうや}}
↓
&bold(){&color(red){でも、検証するのに乱数繰り返すの面倒だなぁ 結果も安定しないからわけわからんし}}
↓
&bold(){&color(red){ちょっと待てよ、そもそも乱数いらなくね?}}
↓
&bold(){&color(red){それだ!}}
----
***【検証3】
*** カウントによってストライク率・スイング率が変化するケース(乱数なし)
#region(考え方)
ストライク率=X (0.00≦X≦1.00)
スイング率=Y (0.00≦Y≦1.00)
#image(https://i.imgur.com/yJVwj2F.png,width=600,height=300)
X=0.80
Y=0.80
#image(https://i.imgur.com/Te6T9Og.png,width=600,height=300)
結果
#image(https://i.imgur.com/N1BY6Dg.png,width=600,height=300)
あとはXとYを0.00~1.00まで0.01刻みで変えてくだけ
すると乱数使ってないのに、結果がわかっちゃう。
今まで、自動でシトバ何万回とか繰り返してたのがアホらしいンゴねぇ・・・
#endregion(考え方)
#region(結論)
【検証2】で得られた結果とほぼ同じや。
乱数要素を外すことに成功したんで、かなり数値が厳密になったんや。やったぜ。
シトバのルールが変わらない限り、これ以上ガチ研究するのは無理。ゆえに最終形とも言える。
#image(https://i.imgur.com/8supVPV.png,width=700,height=450)
#image(https://i.imgur.com/Q02WE4G.png,width=800,height=285)
#endregion(結論)
#region(独り言)
&bold(){&color(red){シトバする度に、頭つかって考えるの面倒臭いンゴねぇ・・・}}
&bold(){&color(red){勝っても負けても精神すりへるのは嫌ンゴ・・・}}
↓
&bold(){&color(red){せや!ツールで自動化したろ!}}
↓
&bold(){ガチ・シトバ予測ツール(※ダウンロードしてから使ってね)}
[[https://docs.google.com/spreadsheets/d/1uhHnaN_FqiUdkF6Icj9O6WUOFO0Qb-5yEjiP7euKOEY/edit?usp=sharing>https://docs.google.com/spreadsheets/d/1uhHnaN_FqiUdkF6Icj9O6WUOFO0Qb-5yEjiP7euKOEY/edit?usp=sharing]]
#image(https://i.imgur.com/WyklMdS.png)
↓
&bold(){これ使うと、相手のストライク率・スイング率に関係なく}
&bold(){打者なら.223打てるようになるし、投手なら.223まで抑えられるようになるで}
&bold(){便利かどうかは、各自つこうてから判断してな}
マクロつこうてへんから安心やと思うけど、
ウイルス怖い人はダウンロードしたらダメやで、責任とれへん。
#endregion(独り言)
----
***ご意見・ご感想どうぞ
- あ~こ↓れ↑かぁ。ええやん -- 名無しさん (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)
- メニューの「行動」→「シートバッティング」のページからこのページにリンクを貼りました。 -- wiki製作者 (2018-02-24 14:48:27)
- めちゃくちゃおもろいです。BBL挑戦した時はガチシトバやるつもりです。対戦よろしくお願いします^^ -- 名無しさん (2020-07-11 03:02:38)
#comment()