2022 KBO 일정을 세워보자(1)
이제 본격적으로 2022년 프로야구 일정을 세워보도록 하겠습니다.
무엇이 좋은 계획인가?
우리가 원하는 것은 실현 가능한 각 구단별로 총 통행거리와 주말 및 휴일 배정 건수가 공정한 계획을 원합니다. 그러나 컴퓨터가 이를 어떻게 판단할 수 있을까요? 따라서 생성된 계획을 어떻게 평가할지를 생각해야 합니다. 여기서부터가 모든 계획의 시작입니다.
딥러닝이든 강화학습에서는 이를 목적 함수라 부릅니다. 첫 시작은 이 목적함수를 정의하는 것에서 시작합니다. 무엇을 최소화하고 무엇을 최대화해야 할까요?
예를 들어 두 명의 플래너가 있습니다. 두 명의 플래너가 수립한 계획의 구단별 총 통행거리가 아래와 같다고 가정해보겠습니다. 무엇이 좋은 계획일까요?
표1. 이동거리 예시
팀 | A | B |
두산 | 8000 | 7700 |
NC | 8100 | 7800 |
SSG | 8200 | 8100 |
LG | 8100 | 8100 |
KT | 8200 | 8100 |
삼성 | 8300 | 8300 |
키움 | 8100 | 8100 |
한화 | 8200 | 8200 |
KIA | 8300 | 8600 |
롯데 | 8400 | 8700 |
평균은 동일하지만 A의 계획이 B의 계획보다 좋은 계획이라는 것을 알 수 있습니다. (구단 별로 이동 거리가 훨씬 공정하니까요!) 그렇다면 이를 어떻게 수치화할 수 있을까요? 이런 경우 보통 모집단의 분산이나 표준편차를 사용합니다.
A계획과 B계획의 분산의 값은 각각 12,900, 84,900이 됩니다. A계획이 B계획보다 분산의 값이 낮기 때문에 더 좋은 계획으로 판변할 수 있습니다.
제약 조건 및 목적함수 정의하기
1. 제약 조건 정의하기
반드시 지켜야 하는 제약 조건입니다. 야구팬이라면 상식적으로 알고 있는 당연한 것이지만 그럼에도 불구하고 정의를 해줘야 합니다. 그렇지 않으면 컴퓨터는 말도 안되는 해를 만들어 낼 것입니다. (하루에 10경기가 열리거나 잠실경기장에서 2경기가 열릴 수도 있습니다. ㅎㅎ)
이 모든 제약 조건은 반드시 지켜져야 하며, 하나라도 지키지 못한다면 실현 불가능한 계획이므로 폐기됩니다.
1. 모든 팀은 하루에 한 경기를 치룬다.
2. 하나의 경기장에서는 하나의 경기를 치룬다.
- 잠실을 홈구장으로 사용하는 두산과 LG의 홈경기는 동시에 열릴 수 없다.
3. 개막전 및 어린이날 일정은 변경되어서는 안된다.
4. 한 주동안 동일한 팀과 연속해서 경기를 치루지 않는다.
- 4월 2일 창원에서 NC(홈)와 SSG(원정)가 열린다면, 다음 일정인 4월 5일에는 다시 창원에서 NC(홈), SSG(원정)이 열리거나 문학에서 SSG(홈), NC(원정)이 열릴 수 없습니다.
5. 원정 경기는 최대 9연전까지 허용한다.
- 과도한 원정 경기가 문제가 된 케이스가 있어서(최대 15연전) 2022년 편성 결과를 확인해보니 최대 9연전까지 허용하였습니다. 이 제약 조건을 그대로 적용하였습니다.
2. 목적 함수 정의하기
더 좋은 계획을 위해 최소화/최대화해야 하는 목적 함수입니다. 크게 3개 유형의 목적 함수를 가지고 있습니다.
1. 10개 구단의 총 이동 거리의 공정 배분
- 각 구단별로 총 통행거리의 분산을 점수로 측정합니다.
- 구단별 총 통행거리의 분산을 일정 거리(100km)로 나누어주고 내림 처리를 하였습니다. 즉 100km 이내 차이는 무방하다고 보는 것입니다. (이렇게 Allownce를 주는 목적은 하위 목적식을 풀 여지를 주고 계산의 속도를 높이기 위해서입니다.)
2. 주말 및 휴일 일정의 공정 배분
- 마찬가지로 각 구단별 주말 및 휴일 배정 건수의 분산을 최소화합니다.
3. 모든 구단의 총 통행거리의 최소화
- 모든 구단의 통행 거리의 합을 최소화합니다.
지금까지 모든 계획의 시발점인 제약 조건과 목적 함수를 정의해보았습니다.
다음 글에서는 KBO가 수립한 2022년 일정을 이 목적 함수로 평가해보고 수치화해보도록 하겠습니다.