-
내가 만든 2022 KBO 일정2022 프로야구 일정 톺아보기 2022. 3. 31. 15:58
AI Constraints Solver인 Optaplanner를 활용하여 계획을 수립하였습니다. 이론적 배경, AI Constraints 엔진인 Optaplanner에 대한 소개, Optaplanner를 활용한 개발 과정은 별도의 시리즈에서 상세하게 공유하겠습니다.
정석대로라면 위의 순서를 밟고 결과를 보여드려야 하는데, 이렇게 순서를 정한 이유는 먼저 결과를 보여드려야, 뒤에 이어질 내용이 다소 깊어지더라도 흥미를 가지고 읽으실 수 있으실 것 같아서 이렇게 작성해보았습니다.
또한 개발자가 아닌 일반인분들도 즐겁게 읽어주셨으면 합니다.
2022 전체 일정
아래는 제가 수립한 2022년 KBO일정입니다. 펼쳐보시면 되겠습니다.
더보기표1. 엔진이 생성한 2022년 일정표
일자 홈 원정 경기장 경기 수 주말 및 공휴일 여부 2022-04-02 두산 한화 잠실종합운동장 2 1 2022-04-02 KT 삼성 수원KT위즈파크 2 1 2022-04-02 키움 롯데 고척돔야구장 2 1 2022-04-02 KIA LG 광주챔피언스필드 2 1 2022-04-02 NC SSG 창원NC파크 2 1 2022-04-05 LG SSG 잠실종합운동장 3 0 2022-04-05 KT 두산 수원KT위즈파크 3 0 2022-04-05 키움 NC 고척돔야구장 3 0 2022-04-05 삼성 한화 대구삼성라이언즈파크 3 0 2022-04-05 롯데 KIA 사직야구장 3 0 2022-04-08 SSG KIA 문학경기장 3 1 2022-04-08 LG NC 잠실종합운동장 3 1 2022-04-08 한화 KT 한화이글스파크 3 1 2022-04-08 삼성 키움 대구삼성라이언즈파크 3 1 2022-04-08 롯데 두산 사직야구장 3 1 2022-04-12 두산 삼성 잠실종합운동장 3 0 2022-04-12 KT SSG 수원KT위즈파크 3 0 2022-04-12 키움 LG 고척돔야구장 3 0 2022-04-12 KIA 한화 광주챔피언스필드 3 0 2022-04-12 NC 롯데 창원NC파크 3 0 2022-04-15 SSG 삼성 문학경기장 3 1 2022-04-15 두산 키움 잠실종합운동장 3 1 2022-04-15 한화 LG 한화이글스파크 3 1 2022-04-15 KIA NC 광주챔피언스필드 3 1 2022-04-15 롯데 KT 사직야구장 3 1 2022-04-19 SSG 키움 문학경기장 3 0 2022-04-19 LG KT 잠실종합운동장 3 0 2022-04-19 KIA 두산 광주챔피언스필드 3 0 2022-04-19 NC 삼성 창원NC파크 3 0 2022-04-19 롯데 한화 사직야구장 3 0 2022-04-22 SSG 한화 문학경기장 3 1 2022-04-22 두산 LG 잠실종합운동장 3 1 2022-04-22 KT NC 수원KT위즈파크 3 1 2022-04-22 키움 KIA 고척돔야구장 3 1 2022-04-22 삼성 롯데 대구삼성라이언즈파크 3 1 2022-04-26 두산 NC 잠실종합운동장 3 0 2022-04-26 KT KIA 수원KT위즈파크 3 0 2022-04-26 한화 키움 한화이글스파크 3 0 2022-04-26 삼성 LG 대구삼성라이언즈파크 3 0 2022-04-26 롯데 SSG 사직야구장 3 0 2022-04-29 SSG 두산 문학경기장 3 1 2022-04-29 LG 롯데 잠실종합운동장 3 1 2022-04-29 키움 KT 고척돔야구장 3 1 2022-04-29 KIA 삼성 광주챔피언스필드 3 1 2022-04-29 NC 한화 창원NC파크 3 1 2022-05-03 SSG 한화 문학경기장 3 1 2022-05-03 LG 두산 잠실종합운동장 3 1 2022-05-03 KT 롯데 수원KT위즈파크 3 1 2022-05-03 삼성 NC 대구삼성라이언즈파크 3 1 2022-05-03 KIA 키움 광주챔피언스필드 3 1 2022-05-06 SSG 키움 문학경기장 3 1 2022-05-06 두산 KT 잠실종합운동장 3 1 2022-05-06 삼성 롯데 대구삼성라이언즈파크 3 1 2022-05-06 KIA 한화 광주챔피언스필드 3 1 2022-05-06 NC LG 창원NC파크 3 1 2022-05-10 두산 SSG 잠실종합운동장 3 0 2022-05-10 KT LG 수원KT위즈파크 3 0 2022-05-10 한화 삼성 한화이글스파크 3 0 2022-05-10 NC 키움 창원NC파크 3 0 2022-05-10 롯데 KIA 사직야구장 3 0 2022-05-13 LG KIA 잠실종합운동장 3 1 2022-05-13 키움 SSG 고척돔야구장 3 1 2022-05-13 한화 롯데 한화이글스파크 3 1 2022-05-13 삼성 KT 대구삼성라이언즈파크 3 1 2022-05-13 NC 두산 창원NC파크 3 1 2022-05-17 LG 한화 잠실종합운동장 3 0 2022-05-17 키움 두산 고척돔야구장 3 0 2022-05-17 삼성 SSG 대구삼성라이언즈파크 3 0 2022-05-17 KIA KT 광주챔피언스필드 3 0 2022-05-17 롯데 NC 사직야구장 3 0 2022-05-20 SSG LG 문학경기장 3 1 2022-05-20 두산 롯데 잠실종합운동장 3 1 2022-05-20 KT 삼성 수원KT위즈파크 3 1 2022-05-20 키움 한화 고척돔야구장 3 1 2022-05-20 NC KIA 창원NC파크 3 1 2022-05-24 LG 키움 잠실종합운동장 3 0 2022-05-24 한화 두산 한화이글스파크 3 0 2022-05-24 삼성 KIA 대구삼성라이언즈파크 3 0 2022-05-24 NC KT 창원NC파크 3 0 2022-05-24 롯데 SSG 사직야구장 3 0 2022-05-27 LG 삼성 잠실종합운동장 3 1 2022-05-27 KT 한화 수원KT위즈파크 3 1 2022-05-27 KIA SSG 광주챔피언스필드 3 1 2022-05-27 NC 두산 창원NC파크 3 1 2022-05-27 롯데 키움 사직야구장 3 1 2022-05-31 SSG KT 문학경기장 3 1 2022-05-31 두산 KIA 잠실종합운동장 3 1 2022-05-31 키움 삼성 고척돔야구장 3 1 2022-05-31 한화 NC 한화이글스파크 3 1 2022-05-31 롯데 LG 사직야구장 3 1 2022-06-03 LG SSG 잠실종합운동장 3 1 2022-06-03 KT KIA 수원KT위즈파크 3 1 2022-06-03 한화 키움 한화이글스파크 3 1 2022-06-03 삼성 두산 대구삼성라이언즈파크 3 1 2022-06-03 NC 롯데 창원NC파크 3 1 2022-06-07 두산 한화 잠실종합운동장 3 0 2022-06-07 키움 KT 고척돔야구장 3 0 2022-06-07 KIA LG 광주챔피언스필드 3 0 2022-06-07 NC SSG 창원NC파크 3 0 2022-06-07 롯데 삼성 사직야구장 3 0 2022-06-10 LG 두산 잠실종합운동장 3 1 2022-06-10 한화 SSG 한화이글스파크 3 1 2022-06-10 삼성 NC 대구삼성라이언즈파크 3 1 2022-06-10 KIA 키움 광주챔피언스필드 3 1 2022-06-10 롯데 KT 사직야구장 3 1 2022-06-14 SSG 롯데 문학경기장 3 0 2022-06-14 두산 KT 잠실종합운동장 3 0 2022-06-14 키움 LG 고척돔야구장 3 0 2022-06-14 KIA 삼성 광주챔피언스필드 3 0 2022-06-14 NC 한화 창원NC파크 3 0 2022-06-17 LG 삼성 잠실종합운동장 3 1 2022-06-17 KT SSG 수원KT위즈파크 3 1 2022-06-17 키움 두산 고척돔야구장 3 1 2022-06-17 한화 롯데 한화이글스파크 3 1 2022-06-17 NC KIA 창원NC파크 3 1 2022-06-21 SSG 두산 문학경기장 3 0 2022-06-21 LG 한화 잠실종합운동장 3 0 2022-06-21 KT NC 수원KT위즈파크 3 0 2022-06-21 삼성 키움 대구삼성라이언즈파크 3 0 2022-06-21 KIA 롯데 광주챔피언스필드 3 0 2022-06-24 SSG NC 문학경기장 3 1 2022-06-24 두산 KIA 잠실종합운동장 3 1 2022-06-24 KT LG 수원KT위즈파크 3 1 2022-06-24 한화 삼성 한화이글스파크 3 1 2022-06-24 롯데 키움 사직야구장 3 1 2022-06-28 LG NC 잠실종합운동장 3 0 2022-06-28 키움 KIA 고척돔야구장 3 0 2022-06-28 한화 SSG 한화이글스파크 3 0 2022-06-28 삼성 KT 대구삼성라이언즈파크 3 0 2022-06-28 롯데 두산 사직야구장 3 0 2022-07-01 SSG KIA 문학경기장 3 1 2022-07-01 LG 롯데 잠실종합운동장 3 1 2022-07-01 KT 두산 수원KT위즈파크 3 1 2022-07-01 키움 한화 고척돔야구장 3 1 2022-07-01 NC 삼성 창원NC파크 3 1 2022-07-05 SSG 롯데 문학경기장 3 0 2022-07-05 두산 키움 잠실종합운동장 3 0 2022-07-05 한화 NC 한화이글스파크 3 0 2022-07-05 삼성 LG 대구삼성라이언즈파크 3 0 2022-07-05 KIA KT 광주챔피언스필드 3 0 2022-07-08 두산 LG 잠실종합운동장 3 1 2022-07-08 KT 롯데 수원KT위즈파크 3 1 2022-07-08 키움 NC 고척돔야구장 3 1 2022-07-08 한화 KIA 한화이글스파크 3 1 2022-07-08 삼성 SSG 대구삼성라이언즈파크 3 1 2022-07-12 SSG NC 문학경기장 3 0 2022-07-12 LG KIA 잠실종합운동장 3 0 2022-07-12 KT 키움 수원KT위즈파크 3 0 2022-07-12 삼성 두산 대구삼성라이언즈파크 3 0 2022-07-12 롯데 한화 사직야구장 3 0 2022-07-22 두산 SSG 잠실종합운동장 3 1 2022-07-22 키움 삼성 고척돔야구장 3 1 2022-07-22 한화 KT 한화이글스파크 3 1 2022-07-22 KIA 롯데 광주챔피언스필드 3 1 2022-07-22 NC LG 창원NC파크 3 1 2022-07-26 SSG LG 문학경기장 3 0 2022-07-26 두산 롯데 잠실종합운동장 3 0 2022-07-26 KT 키움 수원KT위즈파크 3 0 2022-07-26 삼성 한화 대구삼성라이언즈파크 3 0 2022-07-26 KIA NC 광주챔피언스필드 3 0 2022-07-29 LG KT 잠실종합운동장 3 1 2022-07-29 한화 두산 한화이글스파크 3 1 2022-07-29 KIA SSG 광주챔피언스필드 3 1 2022-07-29 NC 키움 창원NC파크 3 1 2022-07-29 롯데 삼성 사직야구장 3 1 2022-08-02 두산 삼성 잠실종합운동장 3 0 2022-08-02 키움 SSG 고척돔야구장 3 0 2022-08-02 한화 KIA 한화이글스파크 3 0 2022-08-02 NC KT 창원NC파크 3 0 2022-08-02 롯데 LG 사직야구장 3 0 2022-08-05 SSG 삼성 문학경기장 3 1 2022-08-05 LG 키움 잠실종합운동장 3 1 2022-08-05 KT 한화 수원KT위즈파크 3 1 2022-08-05 KIA 두산 광주챔피언스필드 3 1 2022-08-05 롯데 NC 사직야구장 3 1 2022-08-10 SSG KT 문학경기장 3 0 2022-08-10 두산 NC 잠실종합운동장 3 0 2022-08-10 키움 롯데 고척돔야구장 3 0 2022-08-10 한화 LG 한화이글스파크 3 0 2022-08-10 삼성 KIA 대구삼성라이언즈파크 3 0 2022-08-13 두산 SSG 잠실종합운동장 2 1 2022-08-13 한화 키움 한화이글스파크 2 1 2022-08-13 삼성 KT 대구삼성라이언즈파크 2 1 2022-08-13 KIA 롯데 광주챔피언스필드 2 1 2022-08-13 NC LG 창원NC파크 2 1 2022-08-16 LG 삼성 잠실종합운동장 2 0 2022-08-16 KT 키움 수원KT위즈파크 2 0 2022-08-16 KIA SSG 광주챔피언스필드 2 0 2022-08-16 NC 한화 창원NC파크 2 0 2022-08-16 롯데 두산 사직야구장 2 0 2022-08-18 SSG LG 문학경기장 2 0 2022-08-18 두산 키움 잠실종합운동장 2 0 2022-08-18 한화 삼성 한화이글스파크 2 0 2022-08-18 KIA NC 광주챔피언스필드 2 0 2022-08-18 롯데 KT 사직야구장 2 0 2022-08-20 LG 두산 잠실종합운동장 2 1 2022-08-20 KT KIA 수원KT위즈파크 2 1 2022-08-20 키움 SSG 고척돔야구장 2 1 2022-08-20 삼성 NC 대구삼성라이언즈파크 2 1 2022-08-20 롯데 한화 사직야구장 2 1 2022-08-23 SSG 삼성 문학경기장 2 0 2022-08-23 두산 KT 잠실종합운동장 2 0 2022-08-23 키움 KIA 고척돔야구장 2 0 2022-08-23 한화 LG 한화이글스파크 2 0 2022-08-23 NC 롯데 창원NC파크 2 0 2022-08-25 SSG KT 문학경기장 2 0 2022-08-25 LG KIA 잠실종합운동장 2 0 2022-08-25 한화 두산 한화이글스파크 2 0 2022-08-25 NC 키움 창원NC파크 2 0 2022-08-25 롯데 삼성 사직야구장 2 0 2022-08-27 LG 키움 잠실종합운동장 2 1 2022-08-27 삼성 한화 대구삼성라이언즈파크 2 1 2022-08-27 KIA 두산 광주챔피언스필드 2 1 2022-08-27 NC KT 창원NC파크 2 1 2022-08-27 롯데 SSG 사직야구장 2 1 2022-08-30 SSG NC 문학경기장 2 0 2022-08-30 두산 롯데 잠실종합운동장 2 0 2022-08-30 KT LG 수원KT위즈파크 2 0 2022-08-30 키움 한화 고척돔야구장 2 0 2022-08-30 KIA 삼성 광주챔피언스필드 2 0 2022-09-01 LG NC 잠실종합운동장 2 0 2022-09-01 KT 두산 수원KT위즈파크 2 0 2022-09-01 키움 롯데 고척돔야구장 2 0 2022-09-01 한화 KIA 한화이글스파크 2 0 2022-09-01 삼성 SSG 대구삼성라이언즈파크 2 0 2022-09-03 SSG 키움 문학경기장 2 1 2022-09-03 두산 삼성 잠실종합운동장 2 1 2022-09-03 한화 NC 한화이글스파크 2 1 2022-09-03 KIA KT 광주챔피언스필드 2 1 2022-09-03 롯데 LG 사직야구장 2 1 2022-09-06 LG SSG 잠실종합운동장 2 0 2022-09-06 KT 한화 수원KT위즈파크 2 0 2022-09-06 삼성 키움 대구삼성라이언즈파크 2 0 2022-09-06 NC 두산 창원NC파크 2 0 2022-09-06 롯데 KIA 사직야구장 2 0 2022-09-08 두산 KIA 잠실종합운동장 2 1 2022-09-08 키움 KT 고척돔야구장 2 1 2022-09-08 한화 SSG 한화이글스파크 2 1 2022-09-08 삼성 LG 대구삼성라이언즈파크 2 1 2022-09-08 롯데 NC 사직야구장 2 1 2022-09-10 SSG KIA 문학경기장 2 1 2022-09-10 두산 한화 잠실종합운동장 2 1 2022-09-10 KT NC 수원KT위즈파크 2 1 2022-09-10 키움 LG 고척돔야구장 2 1 2022-09-10 삼성 롯데 대구삼성라이언즈파크 2 1 2022-09-13 SSG 롯데 문학경기장 2 0 2022-09-13 두산 LG 잠실종합운동장 2 0 2022-09-13 한화 KT 한화이글스파크 2 0 2022-09-13 KIA 키움 광주챔피언스필드 2 0 2022-09-13 NC 삼성 창원NC파크 2 0 2022-09-15 SSG 두산 문학경기장 2 0 2022-09-15 LG 한화 잠실종합운동장 2 0 2022-09-15 KT 롯데 수원KT위즈파크 2 0 2022-09-15 키움 NC 고척돔야구장 2 0 2022-09-15 삼성 KIA 대구삼성라이언즈파크 2 0 2022-09-17 LG KT 잠실종합운동장 2 1 2022-09-17 삼성 두산 대구삼성라이언즈파크 2 1 2022-09-17 KIA 한화 광주챔피언스필드 2 1 2022-09-17 NC SSG 창원NC파크 2 1 2022-09-17 롯데 키움 사직야구장 2 1 2022-09-20 두산 NC 잠실종합운동장 2 0 2022-09-20 KT SSG 수원KT위즈파크 2 0 2022-09-20 키움 삼성 고척돔야구장 2 0 2022-09-20 한화 롯데 한화이글스파크 2 0 2022-09-20 KIA LG 광주챔피언스필드 2 0 2022-09-22 SSG 한화 문학경기장 2 0 2022-09-22 LG 롯데 잠실종합운동장 2 0 2022-09-22 KT 삼성 수원KT위즈파크 2 0 2022-09-22 키움 두산 고척돔야구장 2 0 2022-09-22 NC KIA 창원NC파크 2 0 또한 댓글을 남겨주시거나 메일을 주시면 엑셀 파일을 공유드리겠습니다. 메일 주소는 sindeaf@gmail.com입니다.
결과 살펴보기
KBO가 수립한 계획에 대한 분석은 지난 글(https://absorbed-in-optimization.tistory.com/10) 참고 부탁드립니다.
1. 구단별 통행거리 분석
- KBO가 수립한 계획과 비교하여 구단 별 이동거리 편차가 많이 감소하였습니다. 가장 적은 이동거리를 가지는 구단은 KIA로 8,725.2km이고 가장 많은 이동거리를 가지는 구단은 삼성으로 8,908.5km입니다.
표2. 구단 별 총 통행거리 (엔진 수행 결과)
구단 A. 구단 별 이동거리 B. 모든 구단의 이동 거리 평균 C. 구단 별 평균 차이 (A-B) KIA 8725.2 8822.99 97.79 두산 8737.6 8822.99 85.39 한화 8813 8822.99 9.99 KT 8817.4 8822.99 5.59 NC 8818.7 8822.99 4.29 SSG 8823.5 8822.99 0.51 LG 8832.9 8822.99 9.91 키움 8857 8822.99 34.01 롯데 8896.1 8822.99 73.11 삼성 8908.5 8822.99 85.51 - KBO 수립 계획과 비교하였을 때, 가장 이동거리가 큰 구단과 작은 구단의 차이가 많이 줄어든 것을 볼 수 있습니다. 기존 1233.3km 에서 183.3km로 기존 대비 14.8% 수준으로 줄어들었습니다.
표3. KBO 대비 이동 거리 편차 비교
구분 KBO 엔진 최소 이동거리 구단 8121.1(한화) 8725.2(KIA) 최대 이동거리 구단 9354.4(KIA) 8908.5(삼성) 편차 1233.3 183.3 2. 구단별 주말 및 휴일 배정 분석
- 아쉽게도 ㅠㅠ SSG의 주말 및 휴일 배정 수가 줄어들었습니다. (15건->13건) 다만 더 공정한 결과를 위한 것이니 어쩔 수 없겠지요.
- 구단 별 주말 및 휴일 배정 건수는 13~14건으로 배정되었습니다.
- KBO 계획은 최대 2건 차이가 발생하였으나, 엔진은 1건으로 줄였습니다. (1건의 짜투리는 어쩔 수 없는 측면이 있으나, 전년도에 주말 및 휴일 배정을 못받은 구단에게 우선 배정하는 방법으로 해결이 가능해 보입니다. )
표4. KBO 대비 주말 및 공휴일 배정 비교
구단 KBO 엔진 KT 14 13 SSG 15 13 두산 14 13 롯데 13 13 키움 14 13 KIA 13 14 LG 13 14 NC 12 14 삼성 14 14 한화 13 14 3. 총 통행거리 분석
- 총 통행거리는 86,290.7km에서 88,229.9km 으로 증가한 것을 알 수 있습니다.
- 이는 더 중요한 목적인 분산을 최소화시키기 위해 KIA 구단의 총 통행 거리를 감소시키고, 다른 구단의 통행 거리가 증가한 결과입니다.
- 이는 충분히 해결이 가능한 문제입니다. 제약식에 총 통행거리를 기존 수준 (86,290.7km)으로 설정하면, 총 통행거리가 기존 수준을 넘지 않은 범위에서 계획을 수립할 것입니다. 이 경우 이동거리 편차는 기존 183km에서 증가할 가능성이 큽니다. 다만 기존 (1,233.3km)보다는 분명 적은 수준일 것입니다.
- 이렇게 상위 목적식과 하위 목적식은 상충 관계(Trade Off)가 있습니다. 좋은 Planner의 역할은 이렇게 상충 관계가 있는 목적식을 하나의 목적식으로 Conversion하는데 있습니다. 여기에 정답은 없다고 생각합니다. 많은 사람들이 머리를 맞대고 더 좋아보이는 계획에 대한 합의를 이루고 이를 수치화합니다. 그리고 이 작업을 계속 반복하게 됩니다. ㅠㅠ
4. Score 비교
- KBO 가 수립한 계획과 제가 수립한 계획을 Score로 비교해보면 아래와 같습니다.
- 엔진이 제약 조건을 준수하며, 목적식을 최대한으로 만족시키기 위해 열심히 해를 찾았구나 라는 생각이 드네요.
표5. Score 비교 결과
목적식 KBO 엔진 이동거리 분산 최소화-111.57 -4.01 주말 및 휴일 배정 분산 최소화-6 -2 총 통행거리 최소화-86590.7 -88229.9
회고
1. 직접 KBO 일정을 짜보는 즐거움
- 오랜 프로야구 팬으로서 그리고 개발자로서 이 과정이 굉장히 즐거웠습니다. KBO가 수립한 계획이 너무 훌륭해서 할까말까 고민을 많이 했는데 해보기를 잘했다는 생각이 듭니다.
2. KBO는 정말 고민을 많이 했다.
- 확실히 말씀드릴 수 있을 것 같습니다. 구단 별로 총 통행거리나 주말 및 휴일 배정도 전 구단별로 공정하게 배분되었습니다.
3. 이것은 참고 결과일 뿐입니다.
- 제가 엔진을 실행하기 위해 만든 정보들은 정확하지 않습니다.
- 제가 만든 구장 별 이동거리와, 주말 및 공휴일에 대한 가중치는 제가 임의로 만들어 낸 것입니다. (구단별로 머무르는 숙소가 있을 것이고, 주말과 휴일에 대한 가중치도 KBO나 구단 마케팅에서 정한 것이 있을 수 있습니다.)
- 어딘가 제가 모르는 제약 조건이 어딘가에 숨어 있을지 모릅니다. 아직도 KBO의 결과를 확인하면서 제가 놓친 제약 조건들을 계속 찾아보고 있습니다.
4. 데이터가 공개되면 많은 개발 고수들이 뛰어들 것입니다.
- KBO가 Planning하기 위한 캘린더 정보, 구단 별 이동 거리 정보, 실제 일정 계획을 수립하는데 쓰이는 제약 조건, 목적식을 Dacon (https://dacon.io/) 등 다른 많은 개발자 커뮤니티에 공유한다면 많은 개발 고수들이 뛰어들 것입니다.
- 혹시 없을까 걱정하시면..... 저 혼자라도 뛰어들겠습니다. ㅎㅎ
'2022 프로야구 일정 톺아보기' 카테고리의 다른 글
2022 KBO 일정을 세워보자(2) (0) 2022.03.31 2022 KBO 일정을 세워보자(1) (0) 2022.03.31 2022 KBO 일정 톺아보기 (0) 2022.03.31 얼마나 복잡한 문제인가? (0) 2022.03.31 드디어 시작하다. (0) 2022.03.31