유한 상태기계(FSM)은 인공지능 기법중 하나로 유한한 개수의 상태를 가지는 추상기계이다.
한번에 보통 하나의 상태(state)만을 가지며 어떤 사건(event),입력에 따라서 다른 상태로 전환(Transition)되거나 출력이나 액션이 일어나게 하는 장치 또는 기계이다.
AI프로그래밍에서는 이러한 방법을 많이 사용하는데 복잡한 행동을 간단하게 할수있고, AI의 행동과 외부 사건등을 동기화 하는데에 유용하다
FSM의 특징을 정리해보자
- 빠르고 코딩하기가 쉽다.
FSM을 프로그래밍하는 방법은 많이 있으며 대부분 설치가 쉽다.
- 오류수정이 용이하다.
행동들이 덩어리로 분할되기 때문에 잘못된 행동에 선행되는 사건들의 순서를 쉽게 따라 갈 수 있고 그에 따른 조치를 취할 수 있다.
- 계산 부단이 없다.
코드화된 규칙들을 따르기 때문에 계산이 필요가없다.
- 직관적이다.
그림으로도 그려서 나타낼수가 있기때문에 프로그래밍을 몰라도 이해하기 쉽다.
- 유연성이 있다.
여러 간단한 조성을 통해서 (새로운 규칙을 추가시킨다거나) 행동의 범위를 간단하게 조절 할 수 있다.
이러한 FSM의 가장 간단한 형태로 책에서는 이러한 예시를 보여준다
켜짐(on)과 꺼짐(off)의 두 개의 상태를 가지고 있으며 상태들 간의 전환은 손가락동작에 의해서 이뤄진다.
FSM을 구현하기 위한 가장 간단한 방법은 switch, if-else를 사용하여 구현하는 것이다.
그럴듯해 보이지만, 가장 간단한 게임 객체보다 조금이라도 더 복잡한 것에 적용해보면 이 방법은 헝클어진 구조가 되어버리고 프로그램의 흐름을 이해하기 어렵게 만들고 유연성도 없으며, 초기에 디자인한 범위 이상으로 확장하는 것이 쉽지않다.
그래서 책에는 또다른 방법을 제시하고 있다. 바로 상태전환표(state transition table)을 사용하여서 만드는 것이다. 이 표는 위에서 보여준 상태들과 조건들을 사상(mapping)하는 예이다.
에이전트는 이 표를 정기적으로 질의하여 상태를 전환 시킨다.
예를들어 만약 현재상태가 도망가기 이고 조건이 안전하다 이면 순찰하기로 전환해라
이런식으로 매 단계마다 표에 있는 모든규칙들을 조사해서 그에 따라 명령이 전달된다.
이러한 테이블은 에이전트 외부에 존재하며 (기본코드 + 상태전환표)라는 구조를 가진다.
이러한 방법이 더욱 진화된것이 책에서 나오는 내장된 규칙들을 이용하는 방법이다.
상태들 자신의 내부에 상태 전환을 위한 규칙들을 내장시키는 것이다.
이것을 비디오게임 환경에서 살펴보도록하면
이런 구조는 상태 디자인 패턴으로 알려진 것으로, 상태구동형(state-driven)행동을 구현화한다. 직관적이고 코딩하기 간단하며 확장이 용이하다. Enter와 Exit메소드를 생성하고 그에따라 에이전트의 ChangeState메소드를 조정하는 일뿐이다.
댓글 없음:
댓글 쓰기