1292.44 Parallel 노드의 실패 임계값 정책

1. 실패 임계값의 정의

Parallel 노드의 실패 임계값(failure threshold) M_F는, Parallel 노드가 Failure를 반환하기 위해 필요한 자식 노드의 최소 실패 횟수를 지정하는 매개변수이다. N개의 자식 중 M_F개 이상이 Failure를 반환하면, Parallel 노드는 나머지 자식의 상태와 무관하게 즉시 Failure를 반환한다. 실패 임계값은 성공 임계값과 함께 Parallel 노드의 종료 조건을 완전히 정의한다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).

2. 형식적 정의

Parallel 노드 P가 자식 노드 c_1, c_2, \ldots, c_N을 가지고, 실패 임계값이 M_F로 설정되었을 때, P가 Failure를 반환하기 위한 조건은 다음과 같다.

\text{status}(P) = Failure \iff |\{c_i \mid \text{status}(c_i) = Failure\}| \geq M_F

여기서 |\cdot|는 집합의 원소 수를 나타낸다. 이 조건은 성공 임계값의 형식적 정의와 대칭적 구조를 가진다.

임계값의 유효 범위

실패 임계값 M_F1 \leq M_F \leq N의 범위에서 설정된다.

M_F = 1인 경우: 자식 중 하나라도 Failure를 반환하면 Parallel 노드가 즉시 Failure를 반환한다. 이는 가장 엄격한 실패 판정으로, 모든 자식의 성공이 요구되는 경우에 사용된다. BehaviorTree.CPP에서의 기본값이다 (Faconti, BehaviorTree.CPP Documentation, 2024).

M_F = N인 경우: 모든 자식이 Failure를 반환해야 Parallel 노드가 Failure를 반환한다. 이는 가장 관대한 실패 판정으로, 하나의 자식이라도 성공하면 실패를 회피할 수 있다.

1 < M_F < N인 경우: “N개 중 M_F개 이상 실패” 정책을 구현한다.

실패 임계값에 따른 동작 예제

자식 노드가 4개인 Parallel 노드에서 c_1 = S, c_2 = F, c_3 = F, c_4 = R인 경우(n_S = 1, n_F = 2, n_R = 1)를 고려한다.

M_F조건 충족 여부P 반환 상태
12 \geq 1 (충족)Failure
22 \geq 2 (충족)Failure
32 \geq 3 (미충족)성공 임계값 또는 Running
42 \geq 4 (미충족)성공 임계값 또는 Running

M_F = 3이고 성공 임계값도 충족되지 않은 경우, A4가 아직 Running이므로 P는 Running을 반환한다.

임계값 도달 시의 처리

실패 임계값에 도달하면 Parallel 노드는 다음의 처리를 수행한다.

  1. 자신의 반환 상태를 Failure로 확정한다.
  2. 아직 Running 상태에 있는 모든 자식에 halt를 요청한다.
  3. 내부 상태를 초기화한다.

halt 요청은 실패가 확정된 후 더 이상 의미 없는 진행 중인 작업을 정리하는 역할을 한다 (Colledanchise & Ögren, 2018).

성공 임계값과 실패 임계값의 상호작용

우선순위 규칙

단일 tick에서 성공 임계값과 실패 임계값이 동시에 충족되는 경우, 구현에 따라 둘 중 하나가 우선된다. BehaviorTree.CPP에서는 일반적으로 실패 검사가 성공 검사보다 먼저 또는 동등하게 수행된다. 그러나 이 상황은 임계값 설정이 적절하면 발생하지 않는다.

일관성 제약 조건

성공 임계값 M_S와 실패 임계값 M_F는 다음의 제약 조건을 만족하여야 한다.

M_S + M_F \leq N + 1

이 조건이 만족되면, 임의의 시점에서 성공 조건과 실패 조건이 동시에 충족되는 모순이 발생하지 않는다. M_S + M_F = N + 1로 설정하면, 모든 자식이 완료된 시점에서 성공 또는 실패 중 정확히 하나가 확정되어 Running 상태가 무한히 지속되는 교착 상태가 방지된다.

예를 들어, N = 3인 경우:

  • M_S = 2, M_F = 2: M_S + M_F = 4 = N + 1. 적절한 설정이다.
  • M_S = 3, M_F = 1: M_S + M_F = 4 = N + 1. 적절한 설정이다.
  • M_S = 1, M_F = 1: M_S + M_F = 2 < N + 1. 적절하나, 첫 번째 완료된 자식의 결과에 의해 즉시 종료된다 (Faconti, 2024).

3. 다중 Tick에 걸친 임계값 도달

실패 임계값의 도달은 다수의 tick에 걸쳐 점진적으로 이루어질 수 있다.

Parallel [P1, M_S=3, M_F=2]
 ├─ Action [A1]
 ├─ Action [A2]
 └─ Action [A3]
TickA1A2A3n_FP1 반환
t_1RunningRunningFailure1Running
t_2FailureRunning(기억: F)2Failure

tick t_1에서 n_F = 1 < M_F = 2이므로 아직 임계값에 도달하지 않았다. tick t_2에서 A1이 Failure를 반환하여 n_F = 2 \geq M_F = 2가 되면, P1은 Failure를 반환하고 아직 Running 상태인 A2에 halt를 요청한다.

4. 로봇 공학에서의 설계 지침

4.1 내결함성 설계

M_F를 높게 설정하면, 개별 자식의 실패에 대한 내결함성(fault tolerance)이 증가한다. 예를 들어, 4개의 센서 중 1개의 고장을 허용하려면 M_F = 2로 설정한다. 이는 2개 이상의 센서가 실패해야만 전체 작업이 실패로 판정됨을 의미한다 (Colledanchise & Ögren, 2018).

4.2 조기 실패 감지

M_F = 1로 설정하면, 하나의 자식이라도 실패하는 즉시 전체 작업이 중단된다. 이 설정은 모든 병렬 작업의 성공이 필수적인 경우에 적합하며, 불필요한 작업의 지속을 조기에 차단하여 자원 낭비를 방지한다.

4.3 다수결 기반 실패 판정

M_F = \lceil N/2 \rceil + 1로 설정하면, 과반수 이상의 자식이 실패해야 전체가 실패로 판정되는 다수결 기반 실패 정책을 구현할 수 있다. 이 정책은 소수의 자식이 일시적으로 실패하더라도 전체 작업을 계속 진행할 수 있도록 하며, 로봇 시스템의 견고성(robustness)을 높인다.


참고 문헌

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