티스토리 뷰

요 며칠은 계속 밸런싱과 관련한 연구를 진행했다. 게임에서 등장하는 다양한 강화 옵션들이 가진 효과를 밸런싱하려면 일정한 기준이 필요한데, 워낙 다양한 시너지가 존재하고 배치를 어떻게 하느냐에 따라서도 옵션의 효율이 달라져서 이런 부분을 좀 쉽게 밸런싱할 수 있는 방법에 대해 계속 연구하는 중. 게임 속의 수많은 조합을 일일히 플레이해서 밸런싱하는 건 현실적으로 불가능해서 어떤 식으로든 밸런싱의 근거가 될 자료를 효율적으로 만들고 개선할 방법을 찾기 위해 노력하고 있다.

 

시뮬레이션 부분도 여전히 고쳐야할 점이 많아서 밸런싱 툴 작업을 하면서 조금씩 고치는 중. 오늘은 병렬 처리로 인해 요리 작업이 멈춰버리는 문제를 고쳤다. 기존에 시뮬레이션이 비는 클론이 있을 경우 무조건 새로운 작업을 할당하고 진행하는데, 각각의 작업도 노는 도구 / 노는 클론이 있으면 무조건 그걸 할당해서 다음 단계를 진행한다.

그러다보니 배치에 따라 간혹 위와 같은 경우가 발생하게 된다. 두 요리가 모두 오븐을 요구하는데, 파인애플 케이크 요리 과정이 오븐을 할당 받는다(1), 그리고 파인애플을 썰기 전에 닭꼬치 요리 작업이 도마를 할당받아서 닭고기를 썬다(2), 도마가 있어야 파인애플을 썰어서 오븐에서 요리를 한 후 오븐이 할당 해제되고 닭꼬치 요리 작업을 이을 수 있는데, 둘 모두 다음 진행이 안되므로 요리가 모두 멈춰버린다.

이를 해결하기 위해 보수적으로 할당작업을 진행하면(모든 요리 작업을 마칠 수 있을 때에만 도구를 할당), 병렬 처리가 잘 안돼서 클론 수가 많아도 엄청 비효율적으로 동작한다. 기존 시뮬레이션에도 있었던 문제인데 시뮬레이션을 개선하면서 효율이 더 좋아지니 이런 상황이 오히려 더 눈에 띄게 바뀌어버렸다.

이를 개선한 버전. 요리가 멈추게 되는 일부 상황에서는 최대 효율을 발휘하진 못하지만, 일단 최소한 모든 요리작업이 멈추지는 않음 + 최대한 단순한 방식으로 체크 두 가지에 촛점을 맞췄다. 나중에 또 좀 더 개선을 하는걸로. 바꾼 버전은 아래의 논리를 이용해서 절대 시뮬레이션이 멈추지 않게 했다.

 

- 각 요리가 도구를 할당 받을 때, 현재 시점으로부터 내가 기존에 할당받은 도구와 맵 상의 아직 할당이 안 된 도구에 대해 나머지 작업에 필요한 도구가 모두 최소한 하나씩은 존재하는지 확인한다. 그렇다면 새로 할당받고, 아니라면 할당을 거부한다.

- 이런 논리로 순서대로 할당된 요리도구를 a_1, a_2, .. a_n 이라고 하자. a_1, .. a_{n-1}에 대해서는 새로 할당된 a_n이 위의 논리를 깨서 작업을 끝마칠 수 없을 수도 있지만, 맨 마지막에 할당된 a_n은 항상 어떤 과정을 거쳐서 요리를 모두 끝마칠 수 있다(필요한 요리도구를 반드시 하나씩은 가지고 있으므로). 그리고 a_n이 요리를 끝마치는 순간 할당된 a_n도 할당이 해제되고, 할당된 요리도구는 a_1, .. a_{n_1}만 남게 된다. 이제 a_{n-1}이 마지막으로 할당된 요리도구이므로, 마찬가지로 이 요리는 어떤 과정을 거쳐서 요리를 모두 끝마치고 할당을 해제할 수 있다. 이 과정을 반복하면 모든 요리는 항상 요리 과정을 거치고 요리의 할당을 해제할 수 있으므로 이 방법을 통해 도구를 할당할 경우 병렬 처리 도중에 요리 과정이 멈추는 일은 발생하지 않는다.

 

댓글
공지사항