1295.8 Parallel 노드의 실패 정책 (Failure Policy)

1295.8 Parallel 노드의 실패 정책 (Failure Policy)

1. 실패 정책의 정의

실패 정책(Failure Policy)은 Parallel 노드가 FAILURE 상태를 반환하기 위해 충족되어야 하는 조건을 규정하는 매개변수이다. 성공 정책이 “얼마나 많은 자식이 성공해야 전체가 성공인가“를 결정하는 것과 대칭적으로, 실패 정책은 “얼마나 많은 자식이 실패해야 전체가 실패인가“를 결정한다.

행동 트리의 원론적 정의에서 Parallel 노드의 실패 조건은 성공 정책으로부터 논리적으로 파생된다(Colledanchise & Ögren, 2018). 성공 임계값이 M인 경우, 실패한 자식의 수가 N - M을 초과하면 성공 임계값 도달이 불가능해지므로 FAILURE가 반환된다. 그러나 일부 프레임워크에서는 성공 정책과 독립적으로 실패 정책을 별도 매개변수로 설정할 수 있도록 확장하고 있다.

2. 파생 실패 정책과 독립 실패 정책

2.1 파생 실패 정책(Derived Failure Policy)

성공 정책으로부터 자동 도출되는 실패 조건이다. 성공 임계값이 M일 때, 실패 임계값은 N - M + 1로 자동 결정된다.

\text{Derived Failure Threshold} = N - M + 1

즉, N - M + 1개 이상의 자식이 FAILURE를 반환하면 Parallel 노드가 FAILURE를 반환한다. 이는 잔여 자식이 모두 성공하더라도 성공 개수가 M - 1에 불과하여 임계값에 도달할 수 없기 때문이다.

2.2 독립 실패 정책(Independent Failure Policy)

일부 프레임워크에서는 성공 정책과 별개로 실패 임계값 F_{\text{th}}를 독립적으로 설정할 수 있다. 이 경우 Parallel 노드의 상태 결정은 두 개의 독립적 조건에 의해 이루어진다.

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

여기서 S는 성공한 자식의 수, F는 실패한 자식의 수이다.

3. 실패 정책의 유형

성공 정책과 대칭적으로, 실패 정책도 세 가지 유형으로 분류된다.

정책 명칭실패 임계값실패 조건논리적 의미
FAILURE_ALLF_{\text{th}} = N모든 자식이 FAILUREAND (모든 실패 확인)
FAILURE_ONEF_{\text{th}} = 1하나 이상의 자식이 FAILUREOR (단일 실패 감지)
FAILURE_COUNT(K)F_{\text{th}} = KK개 이상의 자식이 FAILURE쿼럼 (부분 실패 감지)

3.1 FAILURE_ALL

모든 자식이 FAILURE를 반환해야 Parallel 노드가 FAILURE를 반환하는 가장 관대한 실패 정책이다. 개별 자식의 실패에 대한 내성이 최대이며, 모든 대안이 소진된 경우에만 전체 실패를 선언한다.

3.2 FAILURE_ONE

하나의 자식이라도 FAILURE를 반환하면 Parallel 노드가 즉시 FAILURE를 반환하는 가장 엄격한 실패 정책이다. 개별 실패에 대한 민감도가 최대이며, 안전이 최우선인 시나리오에서 적용된다.

3.3 FAILURE_COUNT(K)

K개 이상의 자식이 FAILURE를 반환하면 Parallel 노드가 FAILURE를 반환하는 일반화된 실패 정책이다.

4. 성공 정책과 실패 정책의 상호작용

성공 정책과 실패 정책이 독립적으로 설정되는 경우, 두 정책 간의 상호작용을 신중하게 고려해야 한다.

4.1 일관성 조건

성공 임계값 M과 실패 임계값 F_{\text{th}}는 다음의 일관성 조건을 만족해야 한다.

M + F_{\text{th}} \leq N + 1

이 조건이 위반되면 성공도 실패도 아닌 교착 상태(deadlock)가 발생할 수 있다. 예를 들어, N = 3에서 M = 3이고 F_{\text{th}} = 3이면, 자식 중 1개가 성공하고 2개가 실패한 경우 성공 조건(S \geq 3)도 실패 조건(F \geq 3)도 충족되지 않으며, 더 이상 RUNNING 상태의 자식이 없어 상태 결정이 불가능해진다.

4.2 동시 충족 방지

성공 조건과 실패 조건이 동일 틱에서 동시에 충족되는 경우의 처리 규칙도 정의되어야 한다. 일반적으로 성공 조건이 먼저 평가되어 우선권을 갖거나, 구현별로 명시적 우선순위가 정의된다.

5. BehaviorTree.CPP에서의 실패 정책

BehaviorTree.CPP 4.x에서 Parallel 노드는 success_countfailure_count 두 매개변수를 통해 성공 및 실패 정책을 독립적으로 설정할 수 있다.

<!-- 3개 중 2개 이상 성공 시 SUCCESS, 2개 이상 실패 시 FAILURE -->
<Parallel success_count="2" failure_count="2">
    <ActionA/>
    <ActionB/>
    <ActionC/>
</Parallel>

failure_count가 명시적으로 설정되지 않은 경우, 성공 정책으로부터 파생된 실패 조건이 기본값으로 적용된다.

6. 실패 정책의 로봇공학적 의의

6.1 안전 민감 시스템에서의 FAILURE_ONE

안전이 최우선인 로봇 시스템에서는 FAILURE_ONE 정책이 적합하다. 하나의 서브시스템이라도 이상을 보고하면 전체 행동을 즉시 중단하여 안전을 확보한다.

<Parallel success_count="2" failure_count="1">
    <ExecuteMainTask/>
    <MonitorSafety/>
</Parallel>

MonitorSafety가 안전 위반을 감지하여 FAILURE를 반환하면, failure_count="1"에 의해 Parallel 노드가 즉시 FAILURE를 반환하고 ExecuteMainTask가 중단된다.

6.2 내결함성 시스템에서의 FAILURE_ALL

센서 이중화(redundancy)를 적용한 시스템에서 모든 백업 센서가 실패해야 전체 실패로 판정하는 경우에는 FAILURE_ALL 정책이 적합하다.

6.3 부분 실패 허용 시스템에서의 FAILURE_COUNT

다중 로봇 시스템에서 일정 비율 이상의 로봇이 실패해야 임무 포기로 판정하는 경우에는 FAILURE_COUNT 정책이 적합하다.

7. 성공 정책과 실패 정책의 종합 비교

측면성공 정책실패 정책
결정 대상SUCCESS 반환 조건FAILURE 반환 조건
임계값 방향성공 개수 기준실패 개수 기준
엄격한 정책SUCCESS_ALL (모든 자식 성공)FAILURE_ONE (단일 자식 실패)
관대한 정책SUCCESS_ONE (단일 자식 성공)FAILURE_ALL (모든 자식 실패)
안전 측면 영향임무 완료 기준임무 중단 기준

8. 참고 문헌

  • 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