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_1C_2C_3SFParallel 상태
1RUNNINGRUNNINGRUNNING00RUNNING
2FAILURERUNNINGRUNNING01RUNNING
3FAILUREFAILURERUNNING02RUNNING
4FAILUREFAILUREFAILURE03FAILURE

틱 2에서 C_1이 실패하고 틱 3에서 C_2가 실패하더라도, C_3가 아직 RUNNING 상태이므로 Parallel 노드는 RUNNING을 유지한다. 모든 자식이 FAILURE를 반환한 틱 4에서 비로소 FAILURE가 확정된다.

3.2 시나리오 2: 일부 실패 후 하나가 성공

C_1C_2C_3SFParallel 상태
1RUNNINGRUNNINGRUNNING00RUNNING
2FAILURERUNNINGFAILURE02RUNNING
3FAILURESUCCESSFAILURE12SUCCESS

C_1C_3가 실패했지만, C_2가 틱 3에서 SUCCESS를 반환하여 SUCCESS_ONE 정책이 충족된다. FAILURE_ALL 정책에서는 모든 자식이 실패해야 하므로 실패 조건이 충족되지 않았으며, 성공 조건이 먼저 충족되어 SUCCESS가 반환된다.

3.3 시나리오 3: 첫 틱에서 모든 자식이 즉시 실패

C_1C_2C_3SFParallel 상태
1FAILUREFAILUREFAILURE03FAILURE

모든 자식이 첫 틱에서 FAILURE를 반환하면 즉시 FAILURE가 확정된다.

4. 실패 판정의 지연성

FAILURE_ALL 정책의 핵심 특성은 실패 판정의 지연성(deferred failure determination)이다. 단일 자식의 실패가 전체 실패를 즉시 야기하지 않으며, 모든 자식의 실패가 확인될 때까지 실패 판정이 보류된다. 이는 다음의 실질적 효과를 갖는다.

  1. 최대 실패 내성: N - 1개의 자식이 실패하더라도, 마지막 하나의 자식이 아직 RUNNING 상태이면 Parallel 노드는 RUNNING을 유지한다. 이는 가능한 모든 대안이 소진될 때까지 실행을 지속하는 낙관적(optimistic) 전략이다.

  2. 늦은 리소스 해제: 실패한 자식이 있어도 다른 자식이 계속 실행되므로, 조기 리소스 해제가 발생하지 않는다. 이는 리소스 효율성 측면에서는 불리하지만, 모든 가능성을 탐색한다는 측면에서는 유리하다.

  3. 성공 기회 극대화: 마지막 자식까지 성공 가능성을 유지하므로, 성공 확률이 극대화된다.

5. SUCCESS_ALL과의 쌍대성

FAILURE_ALL은 SUCCESS_ALL과 쌍대(dual) 관계에 있다. 두 정책의 대칭적 구조를 비교하면 다음과 같다.

속성SUCCESS_ALLFAILURE_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