일지 - (6) 경기 진행 알고리즘 짜기 - 타자 vs 투수
가장 핵심이 되는 타자와 투수의 맞대결 알고리즘을 짜기에 나섰다.
약 40년을 아우를 수 있는 대결이기에 통계학적 기법인 oz를 사용해야 했다.
필요한 것은 타자와 투수의 개인 출루율과 피출루율, 타자와 투수의 해당연도 리그 평균 출루율, 약 40년의 kbo 통산 리그 평균 출루율이다.
먼저 비교 하려는 투수와 타자의 개인 출루율의 oz를 구했다
batter_oz = batter_obp / (1 - batter_obp)
pitcher_oz = (1 - pitcher_obp) / pitcher_obp
그 후 타자와 투수의 해당 연도 리그 평균 출루율의 oz를 구한다.
batter_league_obp_oz = batter_league_obp / (1 - batter_league_obp)
pitcher_league_obp_oz = (1 - pitcher_league_obp) / pitcher_league_obp
마지막으로, 리그 통산 평균 출루율 oz와 함께 계산하여 두 선수의 출루율(피출루율)을 도출했다.
vs = ((batter_oz / batter_league_obp_oz) / (pitcher_oz / pitcher_league_obp_oz))
* total_league_obp_oz
vs_obp = vs / (1 + vs)
가장 기본적인 알고리즘이 완성되었다. 다음으로는 각 타자의 데이터로 안타, 2루타, 3루타, 홈런, 볼넷을 각 확률로 뽑아내었다.
투수도 땅볼, 뜬공, 삼진을 뽑아내고 싶었지만 특정연도 이전부터는 자세한 데이터가 없기에 33.333확률로 도출할 수 밖에 없었다.
파이썬 random 모듈의 choices를 사용하였다.
hit_kind = ['안타', '2루타', '3루타', '홈런', '볼넷']
run_rate = [hit_one / hit, hit_two / hit, hit_three / hit, home_run / hit, BB / hit]
hit_def = choices(hit_kind, run_rate)
마지막으로 투수를 투구 수에 따른 교체를 위해 한 타석 당 투구 수를 랜덤으로 출력했다. 최대 10개를 던진다고 가정하였고, 볼넷일 시에는 4~10개, 삼진일 시 3~10개, 나머지는 1~10개를 랜덤으로 나오게 하였다.
이제 가장 복잡할 것같고 오랜시간이 걸릴 것 같은 베이스러닝과 스코어링의 알고리즘을 짜야겠다...
Author And Source
이 문제에 관하여(일지 - (6) 경기 진행 알고리즘 짜기 - 타자 vs 투수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@vivala0519/프로젝트-일지-6-경기-진행-알고리즘-짜기-타자-vs-투수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)