1295.9 FAILURE_ALL 정책의 정의와 동작
1. 형식적 정의
FAILURE_ALL 정책은 Parallel 노드의 모든 자식 노드가 FAILURE를 반환할 때에만 Parallel 노드 자체가 FAILURE를 반환하도록 규정하는 실패 정책이다. N개의 자식 노드 C_1, C_2, \ldots, C_N에 대해 이 정책의 실패 조건은 다음과 같이 정의된다.
\text{FAILURE\_ALL}: \quad \forall i \in \{1, 2, \ldots, N\}, \quad \text{status}(C_i) = \text{FAILURE}
이는 실패 임계값 F_{\text{th}} = N인 FAILURE_COUNT(K)의 특수 사례에 해당한다. FAILURE_ALL은 개별 자식의 실패에 대한 내성이 가장 높은 정책으로, 모든 대안이 소진되어야 비로소 전체 실패를 선언한다.
2. 상태 전이 규칙
FAILURE_ALL 정책 하에서 Parallel 노드의 상태 결정 규칙은 다음과 같다.
2.1 FAILURE 반환 조건
모든 N개의 자식이 FAILURE를 반환한 경우에 한하여 Parallel 노드가 FAILURE를 반환한다.
\text{status}(P) = \text{FAILURE} \iff \sum_{i=1}^{N} \mathbb{1}[\text{status}(C_i) = \text{FAILURE}] = N
2.2 SUCCESS 반환 조건
FAILURE_ALL이 독립적 실패 정책으로 사용되는 경우, 성공 조건은 별도로 설정된 성공 정책에 의해 결정된다. 성공 정책이 SUCCESS_ONE(M = 1)인 경우, 하나의 자식이 SUCCESS를 반환하면 Parallel 노드가 SUCCESS를 반환한다.
FAILURE_ALL이 성공 정책으로부터 파생된 경우, 이 정책은 SUCCESS_ONE(M = 1)의 파생 실패 조건과 동치이다. M = 1일 때 파생 실패 임계값은 N - 1 + 1 = N이므로 FAILURE_ALL과 일치한다.
2.3 RUNNING 반환 조건
성공한 자식이 없고(성공 정책이 SUCCESS_ONE인 경우), 아직 모든 자식이 실패하지 않은 경우에 RUNNING을 반환한다.
\text{status}(P) = \text{RUNNING} \iff \nexists i : \text{status}(C_i) = \text{SUCCESS} \;\land\; \exists j : \text{status}(C_j) = \text{RUNNING}
3. 틱별 동작 추적 예시
3개의 자식 노드 C_1, C_2, C_3을 갖는 Parallel 노드에 SUCCESS_ONE 성공 정책과 FAILURE_ALL 실패 정책이 적용된 경우를 분석한다.
3.1 시나리오 1: 모든 자식이 순차적으로 실패
| 틱 | C_1 | C_2 | C_3 | S | F | Parallel 상태 |
|---|---|---|---|---|---|---|
| 1 | RUNNING | RUNNING | RUNNING | 0 | 0 | RUNNING |
| 2 | FAILURE | RUNNING | RUNNING | 0 | 1 | RUNNING |
| 3 | FAILURE | FAILURE | RUNNING | 0 | 2 | RUNNING |
| 4 | FAILURE | FAILURE | FAILURE | 0 | 3 | FAILURE |
틱 2에서 C_1이 실패하고 틱 3에서 C_2가 실패하더라도, C_3가 아직 RUNNING 상태이므로 Parallel 노드는 RUNNING을 유지한다. 모든 자식이 FAILURE를 반환한 틱 4에서 비로소 FAILURE가 확정된다.
3.2 시나리오 2: 일부 실패 후 하나가 성공
| 틱 | C_1 | C_2 | C_3 | S | F | Parallel 상태 |
|---|---|---|---|---|---|---|
| 1 | RUNNING | RUNNING | RUNNING | 0 | 0 | RUNNING |
| 2 | FAILURE | RUNNING | FAILURE | 0 | 2 | RUNNING |
| 3 | FAILURE | SUCCESS | FAILURE | 1 | 2 | SUCCESS |
C_1과 C_3가 실패했지만, C_2가 틱 3에서 SUCCESS를 반환하여 SUCCESS_ONE 정책이 충족된다. FAILURE_ALL 정책에서는 모든 자식이 실패해야 하므로 실패 조건이 충족되지 않았으며, 성공 조건이 먼저 충족되어 SUCCESS가 반환된다.
3.3 시나리오 3: 첫 틱에서 모든 자식이 즉시 실패
| 틱 | C_1 | C_2 | C_3 | S | F | Parallel 상태 |
|---|---|---|---|---|---|---|
| 1 | FAILURE | FAILURE | FAILURE | 0 | 3 | FAILURE |
모든 자식이 첫 틱에서 FAILURE를 반환하면 즉시 FAILURE가 확정된다.
4. 실패 판정의 지연성
FAILURE_ALL 정책의 핵심 특성은 실패 판정의 지연성(deferred failure determination)이다. 단일 자식의 실패가 전체 실패를 즉시 야기하지 않으며, 모든 자식의 실패가 확인될 때까지 실패 판정이 보류된다. 이는 다음의 실질적 효과를 갖는다.
-
최대 실패 내성: N - 1개의 자식이 실패하더라도, 마지막 하나의 자식이 아직 RUNNING 상태이면 Parallel 노드는 RUNNING을 유지한다. 이는 가능한 모든 대안이 소진될 때까지 실행을 지속하는 낙관적(optimistic) 전략이다.
-
늦은 리소스 해제: 실패한 자식이 있어도 다른 자식이 계속 실행되므로, 조기 리소스 해제가 발생하지 않는다. 이는 리소스 효율성 측면에서는 불리하지만, 모든 가능성을 탐색한다는 측면에서는 유리하다.
-
성공 기회 극대화: 마지막 자식까지 성공 가능성을 유지하므로, 성공 확률이 극대화된다.
5. SUCCESS_ALL과의 쌍대성
FAILURE_ALL은 SUCCESS_ALL과 쌍대(dual) 관계에 있다. 두 정책의 대칭적 구조를 비교하면 다음과 같다.
| 속성 | SUCCESS_ALL | FAILURE_ALL |
|---|---|---|
| 판정 대상 | SUCCESS 반환 조건 | FAILURE 반환 조건 |
| 필요 조건 | 모든 자식 SUCCESS | 모든 자식 FAILURE |
| 단일 예외 시 | 하나라도 FAILURE → 전체 FAILURE | 하나라도 SUCCESS → 전체 SUCCESS 아님 |
| 판정 시점 | 최초 FAILURE에서 조기 종료 가능 | 최초 SUCCESS에서 조기 종료 가능 (성공 정책에 따라) |
| 내성 수준 | 실패 내성 없음 | 실패 내성 최대 |
6. 로봇공학 적용 사례
6.1 다중 경로 탐색
모바일 로봇이 복수의 경로를 동시에 탐색하여, 모든 경로가 차단된 경우에만 경로 계획 실패를 선언하는 구조이다.
<Parallel success_count="1" failure_count="3">
<PlanPathViaCorridorA/>
<PlanPathViaCorridorB/>
<PlanPathViaCorridorC/>
</Parallel>
세 개의 경로 중 하나라도 유효하면 SUCCESS를 반환하고, 세 경로 모두가 차단되었을 때에만 FAILURE를 반환한다.
6.2 다중 통신 채널 시도
로봇이 복수의 통신 채널을 통해 기지국과 연결을 시도하고, 모든 채널이 실패한 경우에만 통신 불가를 선언하는 구조이다.
<Parallel success_count="1" failure_count="3">
<ConnectViaWiFi/>
<ConnectViaCellular/>
<ConnectViaSatellite/>
</Parallel>
6.3 복수 파지 전략 시도
매니퓰레이터가 물체를 파지하기 위해 복수의 파지 전략(grasp strategy)을 동시에 시도하고, 모든 전략이 실패한 경우에만 파지 불가를 선언하는 구조이다.
<Parallel success_count="1" failure_count="3">
<GraspFromTop/>
<GraspFromSide/>
<GraspWithPinch/>
</Parallel>
7. 참고 문헌
- 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