2022.11.13 - [Game AI] - 마르코프 시스템(Markov Systems)
개요
지금까지는 몇몇 인풋들이 캐릭터에게 제공되면 그에 따라 어떤 행동을 할지 결정했다. 이런 과정에서 캐릭터의 '목표'는 빠져있다.
심즈(The sims)와 같은 게임의 경우 캐릭터는 밥을 먹거나, 잠을 자거나, 책을 읽는 등의 행동을 취할 수 있다. 이런 행동들은 캐릭터들의 정서 및 신체적인 상태를 표현한다.
이런 행동들을 하기 위해서 결정 트리(Decision Tree)를 사용할 수도 있지만 심즈와 같은 경우라면 결정 트리가 매우 커질 것이고 각 캐릭터마다 수백개의 액션이 존재하게 된다.
더 나은 방법은 캐릭터가 자신의 욕구에 맞는 행동 중 하나를 고르게 하는 것이다.
이것이 목표 지향 행동 (Goal-Oriented Behavior, GOB)이다.
목표 지향 행동
캐릭터들은 하나 이상의 목표(혹은 동기)를 가질 수 있다. 목표와 동기는 명백히 따지만 다른 것이만 같은 것으로 취급하기도 한다. (결국 동기가 목표를 만드는 것이니 구현의 측면에서 동기라는 레이어를 생략해도 무방하다는 말인 듯)
행동은 보통 한 번에 생성되기도 하지만, 게임 내의 물체에 의해서 생성되기도 한다. 예를 들어, '문'이라는 물체는 캐릭터에게 '문 열기', '문 잠그기' 등의 행동을 추가 할 수 있다.
이런 행동들은 리스트로 묶어 캐릭터의 동기에 따라 평가된다. 그리고 행동은 달성할 수 있는 목표들의 목록을 포함한다. 하나의 행동은 다시 여러 행동으로 구성되어 있기도 하다.
간단한 선택법
먼저 여러 목표와 행동들이 있다. 각각의 행동은 다른 목표들을 만족시킨다.
가령 다음과 같은 목표와 행동들이 있다.
목표 :
먹기 = 4
잠 = 3
행동
밥 먹기 ( 먹기 - 3)
간식 먹기 (먹기 - 1)
침대에서 잠 자기 (잠 - 4)
의자에서 잠 자기 (잠 - 2)
위와 같은 상황에서 간단한 접근법은 가장 수치가 높은 목표를 정한 다음(여기서는 먹기) 그 목표를 가장 잘 만족시키는 행동을 선택하는 것이다. (밥 먹기가 선택된다.)
만약 조건을 만족하는 행동이 여러 개라면 무작위로 고르거나 첫번째를 고를 수 있다.
구현
public class Goal
{
public string name;
public float value;
};
public abstract class Action
{
//행동이 수행될 때 목표 수치의 변화량을 반환.
public abstract float GetGoalChange(Goal goal);
}
public Action ChooseAction(Action[] actions, Goal[] goals)
{
Goal topGoal = goals[0];
for (int i = 1; i < goals.Length; ++i)
{
if (goals[i].value > topGoal.value)
topGoal = goals[i];
}
Action bestAction = actions[0];
//행동이 수행될 때 변화량은 음수이다. 이런 변화량이 클 수록 효용이 높기 때문에 부호를 -로 바꾼다.
float bestUtility = -actions[0].GetGoalChange(topGoal);
for (int i = 0; i < actions.Length; ++i)
{
float utility = -actions[i].GetGoalChange(topGoal);
if (utility > bestUtility)
{
bestUtility = utility;
bestAction = actions[i];
}
}
return bestAction;
}
이런 접근법은 단순하고 빠르며 행동이 별로 없는 게임들 (슈터, 액션, RPG장르)에서는 꽤 그럴 듯 하다. 그러나 크게 두 가지 문제가 있는데, 하나는 행동을 하며 생기는 부수 효과(side effect)들을 무시한다는 것이고 다른 하나는 수행 시간을 무시한다는 것이다.
참고 : Ian Millington, AI for GAMES 3rd edition, CRC press, [Chapter 5.7]
'Game AI' 카테고리의 다른 글
목표지향 행동 - 3 (0) | 2022.12.04 |
---|---|
목표 지향 행동 - 2 (0) | 2022.11.24 |
마르코프 시스템(Markov Systems) (0) | 2022.11.13 |
퍼지 상태 머신 (Fuzzy State Machine) (2) | 2022.11.02 |
퍼지 로직 의사 결정(Decision making) (0) | 2022.10.23 |