1295.11 FAILURE_COUNT(N) 정책의 정의와 동작

1. 형식적 정의

FAILURE_COUNT(K) 정책은 Parallel 노드의 자식 중 K개 이상이 FAILURE를 반환하면 Parallel 노드 자체가 FAILURE를 반환하도록 규정하는 일반화된 실패 정책이다. 여기서 K는 사용자가 설정하는 실패 임계값(failure threshold)으로, 1 \leq K \leq N의 범위를 갖는다. N개의 자식 노드 C_1, C_2, \ldots, C_N에 대해 이 정책의 실패 조건은 다음과 같이 정의된다.

\text{FAILURE\_COUNT}(K): \quad \lvert \{i \in \{1, \ldots, N\} : \text{status}(C_i) = \text{FAILURE}\} \rvert \geq K

FAILURE_COUNT(K)은 FAILURE_ALL과 FAILURE_ONE을 모두 포괄하는 상위 정책이다. K = N이면 FAILURE_ALL과 동치이고, K = 1이면 FAILURE_ONE과 동치이다.

2. 상태 전이 규칙

FAILURE_COUNT(K) 정책 하에서, 성공 임계값 M이 별도로 설정된 Parallel 노드의 상태 결정은 다음과 같다. 성공 개수를 S, 실패 개수를 F라 하면,

\text{status}(P) = \begin{cases} \text{SUCCESS} & \text{if } S \geq M \\ \text{FAILURE} & \text{if } F \geq K \\ \text{RUNNING} & \text{otherwise} \end{cases}

성공 조건과 실패 조건이 동일 틱에서 동시에 충족될 가능성을 배제하기 위해, 일관성 조건 M + K \leq N + 1이 만족되어야 한다.

3. 파생 성공 조건과의 관계

FAILURE_COUNT(K) 정책으로부터 성공이 불가능해지는 조건을 역으로 도출할 수 있다. K개 이상의 자식이 실패하면 Parallel 노드가 FAILURE를 반환하므로, 성공을 위해서는 최대 K - 1개의 자식만 실패해야 한다. 이로부터 암묵적으로 요구되는 최소 성공 가능 자식 수는 N - K + 1이다.

\text{최소 성공 가능 자식 수} = N - K + 1

4. 틱별 동작 추적 예시

5개의 자식 노드를 갖는 Parallel 노드에 성공 임계값 M = 3과 실패 임계값 K = 2가 설정된 경우를 분석한다.

4.1 시나리오 1: 실패 임계값 도달

C_1C_2C_3C_4C_5SFParallel 상태
1RUNRUNRUNRUNRUN00RUNNING
2SUCFAILRUNRUNRUN11RUNNING
3SUCFAILFAILRUNRUN12FAILURE

틱 3에서 F = 2 \geq K = 2이므로, 실패 임계값이 충족되어 FAILURE가 반환된다. C_1이 이미 성공했고 C_4, C_5가 아직 RUNNING 상태이지만, 실패 정책이 먼저 충족되었으므로 전체가 FAILURE로 판정된다.

4.2 시나리오 2: 성공 임계값이 먼저 도달

C_1C_2C_3C_4C_5SFParallel 상태
1RUNRUNRUNRUNRUN00RUNNING
2SUCFAILSUCRUNRUN21RUNNING
3SUCFAILSUCSUCRUN31SUCCESS

틱 3에서 S = 3 \geq M = 3이므로, 성공 임계값이 먼저 충족되어 SUCCESS가 반환된다. F = 1 < K = 2이므로 실패 조건은 충족되지 않았다.

4.3 시나리오 3: 경계 조건에서의 지속 실행

C_1C_2C_3C_4C_5SFParallel 상태
3SUCFAILRUNSUCRUN21RUNNING

S = 2 < M = 3이고 F = 1 < K = 2이므로, 성공 조건도 실패 조건도 충족되지 않았다. C_3C_5가 RUNNING 상태이므로 양쪽 임계값 모두 도달 가능성이 남아 있어 RUNNING을 유지한다.

5. 실패 내성 수준의 제어

FAILURE_COUNT(K)의 핵심 장점은 실패 내성(fault tolerance) 수준을 정밀하게 제어할 수 있다는 점이다. 허용 가능한 최대 실패 수는 K - 1이다.

K허용 실패 수실패 내성 비율특성
K = 100%무관용 (FAILURE_ONE 동치)
K = 211/N단일 실패 허용
K = \lceil N/2 \rceil\lceil N/2 \rceil - 1\approx 50\%과반수 실패 시 중단
K = N - 1N - 2(N-2)/N높은 실패 내성
K = NN - 1(N-1)/N최대 내성 (FAILURE_ALL 동치)

6. BehaviorTree.CPP에서의 설정

BehaviorTree.CPP에서 FAILURE_COUNT 정책은 failure_count 속성을 통해 설정한다.

<!-- 5개 자식 중 2개 이상 실패 시 전체 FAILURE -->
<Parallel success_count="3" failure_count="2">
    <ActionA/>
    <ActionB/>
    <ActionC/>
    <ActionD/>
    <ActionE/>
</Parallel>

7. 로봇공학 적용 사례

7.1 이중화 센서 시스템의 실패 관리

센서 이중화(redundancy)를 적용한 시스템에서 일정 수 이상의 센서가 고장나면 신뢰할 수 없는 데이터로 판단하여 행동을 중단하는 구조이다.

<Parallel success_count="3" failure_count="3">
    <ReadLidar_Primary/>
    <ReadLidar_Secondary/>
    <ReadCamera_Primary/>
    <ReadCamera_Secondary/>
    <ReadRadar/>
</Parallel>

5개의 센서 중 3개 이상이 데이터를 성공적으로 반환하면 센서 융합을 진행하고, 3개 이상이 실패하면 데이터 신뢰성 부족으로 행동을 중단한다.

7.2 다중 로봇 임무의 부분 실패 관리

N대의 로봇이 협업 임무를 수행할 때, K대 이상이 실패하면 임무 수행 능력이 부족하다고 판단하여 임무를 중단하는 구조이다.

<Parallel success_count="3" failure_count="3">
    <Robot1_ExecuteTask/>
    <Robot2_ExecuteTask/>
    <Robot3_ExecuteTask/>
    <Robot4_ExecuteTask/>
    <Robot5_ExecuteTask/>
</Parallel>

5대 중 3대 이상이 성공하면 임무 성공, 3대 이상이 실패하면 임무 실패로 판정한다. 이 구성에서 M + K = 3 + 3 = 6 > N + 1 = 6이므로 일관성 조건의 경계에 있으며, 성공과 실패가 동시에 충족되는 경우는 없다.

8. 성공 정책과의 통합적 설계

FAILURE_COUNT(K)와 SUCCESS_COUNT(M)을 조합하면, Parallel 노드의 상태 공간을 세밀하게 분할할 수 있다. 다음은 N = 5에서 다양한 (M, K) 조합의 의미를 정리한 것이다.

(M, K)성공 조건실패 조건설계 의도
(5, 1)전원 성공단일 실패무결성 최우선
(3, 3)과반수 성공과반수 실패균형적 의사결정
(1, 5)단일 성공전원 실패대안 탐색 최우선
(3, 2)3개 이상 성공2개 이상 실패적극적 실패 감지
(2, 4)2개 이상 성공4개 이상 실패높은 실패 내성

9. FAILURE_ALL 및 FAILURE_ONE과의 통합적 관계

FAILURE_COUNT(K)은 FAILURE_ALL과 FAILURE_ONE을 특수 사례로 포함하는 일반화된 정책이다.

\text{FAILURE\_ONE} \equiv \text{FAILURE\_COUNT}(1) \subset \text{FAILURE\_COUNT}(K) \subset \text{FAILURE\_COUNT}(N) \equiv \text{FAILURE\_ALL}

여기서 \subset는 실패 판정의 관대함이 증가하는 방향을 나타낸다. K가 증가할수록 더 많은 자식의 실패를 허용하며, 전체 실패 판정이 더 늦어진다.

10. 참고 문헌

  • Colledanchise, M., & Ögren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • Faconti, D., & contributors. (2024). BehaviorTree.CPP Documentation. https://www.behaviortree.dev/

Version: 1.0-2026.04.03