goguelike2의 AI에 상전이 엔진을 적용했습니다.
By SeukWon Kang
상전이 엔진은 농담이고 실은 finite-state machine을 적용했습니다. 그래도 “유한 상태 기계"같은 심심한 이름 보다는 상전이 엔진( Phase Transition Engine )쪽이 있어보이기도 하고 의미상으로도 크게 다르지 않으니 좋아보이는 군요.
상전이엔진에 대한 설명.. 아시는 분이 적더라는;;; http://namu.mirror.wiki/wiki/%EC%83%81%EC%A0%84%EC%9D%B4%20%EC%97%94%EC%A7%84
오류가 발생했습니다.
www.youtube.com에서 동영상을 시청하거나 브라우저에서 자바스크립트가 사용 중지된 경우 사용 설정하세요.
3.3배속 AI 플레이 동영상
goguelike2의 기존 AI를 완전히 재작성해서 상전이엔진 stack-based FSM을 사용하도록 완전히 재작성하였습니다. AI를 새로 재작성한것이 이번으로 거의 5번째 정도 되는 것 같은데 이제야 겨우 좀 쓸만한 형태 ( 깔끔하고 수정, 확장하기 좋은 구조 )로 정리된것 같아 만족해 하고 있습니다.
그리고 이제 조금 FSM을 어떻게 사용하면 좋을지에 대해서도 감이 오는 군요. ( FSM을 사용한것은 이번이 2번째 )
상황에 따라 미래의 state를 예약해야 하는 것이 필요해서 stack-based FSM을 만들어 쓰고 있습니다. ( 또는 sub-state call 용으로도 사용할 계획이"었” 습니다. )
추가로 미래또는 다른 state로 보낼 argument 저장을 위해 name-value stack을 만들었는데 쓰다보니 쓸일이 없군요. 그냥 stack으로도 충분할듯 합니다.
결과적으로 AI는 step별 실행을 위한 https://github.com/kasworld/runstep goroutine 실행 상태 제어및 취소를 위한 https://github.com/kasworld/runstate nv-stack ( 미공개 상태) 그리고 분리되었다 병합된 FSM 모듈 들을 복합적으로 사용해서 flow 제어를 하는 구조가 되었습니다. ( 덕분에 구조를 잡고 정리하는데 꽤 머리가 아팠습니다. )
그리고 그 외에 보조 모듈로 주변 공간을 분석하는 AIEnv 모듈과 과거의 기억을 관장하는 AIMemory 를 사용하고 있습니다.
다음으로는 AI에 “개성(characteristic)“을 부여하는 작업을 해보고 싶군요. 그 다음에는 faction별 집단 행동역시 고민하고 있습니다.