본문 바로가기

카테고리 없음

FSM, HFSM, B-TREE

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를 함께 사용하는 경우도 많습니다.