반응형

인공지능을 구현 할 때 가장 기본적으로 생각하는 것이

 

상태의 변화를 통한 인공지능이다.

 

이 상태일 때 만약 이 조건이면 상태를 어떤 상태로 바꾸어라 뭐 이런 것이다 -0-;;

 

예를 들어

 

상태가 stand일 때 적이 시야에 들어오면 walk로 상태를 바꿔야 한다고 해보자.

 

state = STATE_STAND;

 

switch( state )

{

        case STATE_STAND:

                if ( SEEN_ENEMY )      // 적을 봤다는건 내 FOV안에 적이 들어왔다는 것인데 일단 이렇게 간단하게 표현하겠다.

                    state = STATE_WALK;

                break;

        case STATE_WALK:

                if ( .... )

                  ....

}

 

이런식으로 구현이 될 것이다.

 

유한 상태 기계는 위와 같은 구현을 쉽게 할 수 있게 도와주는 일종의 도구이다.

 

기본적인 아이디어는 상태를 하나의 객체로 두고 이 상태를 관리하는 매니저를 둔다.

하나의 상태객체는 어떤 현상이 오면 어떤 상태로 변할 것이다라는 것을 저장해 둔다.

매니저는 현재 상태를 유지하면서 어떤 현상이 발생하면 현재 상태객체에서

현생이 발생하면 변하는 상태를 구해 적용시킨다.

 

말로 쓰니까 뭔가 이상한데 쉽게 설명하면

 

STATE_STAND

일 때

 

SEEN_ENEMY면 STATE_WALK로 변해라.를 저장하고 있는 것이다.

 

그래서 현재 상태가 STATE_STAND인데

 

SEEN_ENEMY라는 현상이 일어나면 매니저는

 

STATE_STAND에서 SEEN_ENEMY라는 현상이 일어나면 STATE_WALK로 변해라 라는 것을 구할 수 있기 때문에

 

현재 상태는 STATE_WALK로 변하게 된다.

 

다음은 GPG 1권에 나오는 구조다.

 

위에 것은 상태를 나타내는 객체이다.

 

위는 상태를 관리하는 매니저 이다.

 

사용할 때는 위 처럼 일단 상태를 만들고 객체가 나타낼 상태와 이 상태가 변화할 수 있는 가지수를 적어준다.

 

그리고 특정 현상이 생기면 어떤 상태로 변화할 지를 등록시킨다.

 

다 등록시키면 매니저를 만들고 추가 시켜준다.

 

 

등록을 다 했으면 다음과 같이 현상만 넘겨주면 상태가 계속 변화한다.

 

ProcessState에서 하고 싶은 걸 구현하면 되겠다.

 

 

테스트 해 본 결과다..-0-;;;

 

유한 상태기계를 사용하면 간단한 인공지능은 쉽게 구현할 수 있겠다.

반응형

'프로그래밍 > 인공지능' 카테고리의 다른 글

유전 알고리즘이란 무엇인가?  (0) 2011.10.28
OpenSteer 링크  (0) 2011.10.28
Posted by msparkms
,