최종 2등 !!
상대방이 낼 액션을 확률적으로 예측하고 예측된 액션에 따른 최적의 액션을 선택합니다.
- 현재 턴에서 상대방이 낼 액션을 확률적으로 예측합니다.
- 예측한 액션에 따라서 해당 상황에 맞는 최적의 액션을 선택합니다. (mp, hp, you_mp, you_hp, 예측의 정확성도 어느정도 고려함)
- 끝
YOU_MP가 n 이라고 할때 상대방이 주로 어떤 액션을 취하는지를 예측합니다.
1) 예를들어 현재 턴에서 YOU_MP가 1이라면,
oldgames와 history에서 YOU_MP가 1일때 냈던 상대방의 액션의 빈도수를 계산합니다.
상대가 이전 턴들에서 YOU_MP가 1일때,
상대가 attack 을 8번내고, block을 1번내고, charge를 1번냈다면,
d = {"attack": 9, "block": 2, "charge": 2} 형태로 빈도수가 저장이 됩니다.
2) d에 저장된 액션들의 빈도수 합을 d_sum이라고 할때 (d_sum*0.75) 보다
한 액션의 빈도수가 더 많을경우에는 이를 상대방이 낼 액션이라고 예측하며 accuracy 를 high라고 지정합니다.
3) 2)의 경우에 해당이 되지않는 경우에는 d 에 저장된 빈도수를
랜덤함수의 가중치로 설정하여 상대방이 낼 액션을 예측합니다.
(*부가 설명: 위의 예시의 경우에는 [어택,어택,어택,어택,어택,어택,어택,어택,어택,블락,블락,차지,차지]
이런식의 배열이 만들어지고,랜덤함수를 통해 (0~마지막요소인덱스)중에 하나의 인덱스값이 선택된다.)
바로 이전 턴에서 (나: ACTION1, 상대: ACTION2)을 냈을때 상대는 이번턴에서 어떤 선택을 할것인지 예측합니다.
세부적인 알고리즘은 1.1의 예측 모델의 알고리즘과 유사함. (빈도계산->바로예측 또는 가중치 랜덤)
예측한 액션과 accuracy, hp,mp,you_mp,you_hp 등을 고려했을때의 최적의 선택을 수행함
- 상대의 액션이 charge 로 예측되었을때, counter_action_for_charge 함수 참고
- 상대의 액션이 block 로 예측되었을때, counter_action_for_block 함수 참고
- 상대의 액션이 attack 로 예측되었을때, counter_action_for_attack 함수 참고