FSM, HFSM, B-TREE는 인공지능, 게임 개발, 로봇 제어 등에서 자주 사용되는 알고리즘 및 데이터 구조입니다. 각각의 개념을 간단히 정리하면 다음과 같습니다.
FSM (Finite State Machine, 유한 상태 기계)
- 상태(State)와 전이(Transition)로 구성된 단순한 상태 관리 기법.
- 특정 입력이나 조건을 충족하면 하나의 상태에서 다른 상태로 전이.
- 게임 AI, UI 흐름 제어, 네트워크 프로토콜 등에 자주 사용.
- 장점: 구현이 간단하고 직관적.
- 단점: 상태가 많아질 경우 복잡도가 증가하여 유지보수가 어려움.
FSM C# 구현 예제
public enum State { Idle, Walking, Running }
public class StateMachine {
private State currentState;
public StateMachine() {
currentState = State.Idle;
}
public void ChangeState(State newState) {
currentState = newState;
Console.WriteLine($"State changed to {currentState}");
}
}
public class Program {
public static void Main() {
StateMachine fsm = new StateMachine();
fsm.ChangeState(State.Walking);
fsm.ChangeState(State.Running);
}
}
HFSM (Hierarchical Finite State Machine, 계층적 유한 상태 기계)
- FSM을 계층적으로 확장한 구조.
- 상위 상태가 하위 상태를 포함하며, 복잡한 상태 관리를 더 쉽게 처리 가능.
- 예: 캐릭터가 "공격" 상태일 때, 하위 상태로 "근접 공격"과 "원거리 공격"이 있을 수 있음.
- 장점: 상태 수 증가 시에도 구조적 관리가 가능하여 유지보수 용이.
- 단점: 구조가 깊어질수록 디버깅이 어려울 수 있음.
HFSM C# 구현 예제
public class HFSM {
private Dictionary<string, List<string>> states = new Dictionary<string, List<string>>();
private string currentState;
public HFSM() {
states["Attack"] = new List<string> { "Melee", "Ranged" };
currentState = "Idle";
}
public void ChangeState(string newState) {
if (states.ContainsKey(newState)) {
currentState = newState;
Console.WriteLine($"State changed to {currentState}");
}
}
}
public class Program {
public static void Main() {
HFSM hfsm = new HFSM();
hfsm.ChangeState("Attack");
}
}
B-TREE (Behavior Tree, 행동 트리)
- 게임 AI에서 자주 사용하는 트리 기반 행동 제어 모델.
- 노드(Node)로 구성되며, 각 노드는 행동(Behavior), 조건(Condition), 선택(Selector), 순차(Sequence) 등의 역할을 수행.
- 게임 캐릭터 AI, 로봇 제어 시스템 등에 사용됨.
- 장점: FSM보다 확장성이 뛰어나며 복잡한 행동을 논리적으로 관리 가능.
- 단점: 트리 구조가 깊어질 경우 관리가 어려울 수 있음.
B-TREE C# 구현 예제
public abstract class Node {
public abstract bool Execute();
}
public class ActionNode : Node {
private Action action;
public ActionNode(Action action) {
this.action = action;
}
public override bool Execute() {
action.Invoke();
return true;
}
}
public class Program {
public static void Main() {
ActionNode actionNode = new ActionNode(() => Console.WriteLine("Executing Action"));
actionNode.Execute();
}
}
비교 요약
개념 구조 장점 단점 사용 사례
개념 | 구조 | 장점 | 단점 | 사용 사례 |
FSM | 단순 상태-전이 모델 | 구현이 간단, 직관적 | 상태 증가 시 복잡도 증가 | 게임 캐릭터 상태, UI 흐름 |
HFSM | 계층적 FSM | 복잡한 상태 관리 용이 | 깊어질수록 디버깅 어려움 | NPC AI, 로봇 제어 |
B-TREE | 트리 기반 행동 모델 | 복잡한 AI 행동 관리 가능 | 깊어지면 유지보수 어려움 | 게임 AI, 로봇 행동 |
Q&A
Q: FSM과 HFSM의 차이점은 무엇인가요?
A: FSM은 단순한 상태-전이 모델이며, HFSM은 계층 구조를 추가하여 더 정교한 상태 관리를 가능하게 합니다.
Q: B-TREE는 FSM보다 어떤 점에서 유리한가요?
A: B-TREE는 행동을 계층적으로 관리할 수 있어 복잡한 AI 행동을 더 체계적으로 구성할 수 있습니다.
Q: FSM, HFSM, B-TREE 중 어떤 것을 선택해야 하나요?
A: 간단한 상태 관리가 필요하면 FSM, 구조적 상태 관리가 필요하면 HFSM, 복잡한 행동 제어가 필요하면 B-TREE를 선택하는 것이 좋습니다.
각 모델은 상황에 따라 적절히 선택해야 하며, 실제 게임 개발에서는 FSM과 B-TREE를 함께 사용하는 경우도 많습니다.