1295.4 Parallel 노드의 성공 정책 (Success Policy)

1295.4 Parallel 노드의 성공 정책 (Success Policy)

1. 성공 정책의 정의

성공 정책(Success Policy)은 Parallel 노드가 SUCCESS 상태를 반환하기 위해 충족되어야 하는 조건을 규정하는 매개변수이다. Parallel 노드는 복수의 자식 노드를 논리적으로 동시에 실행하므로, 각 자식이 독립적으로 상이한 상태를 반환할 수 있다. 이때 “전체적으로 성공한 것으로 간주하는 기준“을 성공 정책이 결정한다(Colledanchise & Ögren, 2018).

성공 정책은 Parallel 노드의 의미론(semantics)을 결정하는 핵심 요소이다. 동일한 자식 구성이라 하더라도 성공 정책의 설정에 따라 Parallel 노드의 동작이 논리적 AND, 논리적 OR, 또는 쿼럼(quorum) 기반의 의사결정 구조로 변모한다.

2. 성공 정책의 유형

BehaviorTree.CPP 및 주요 행동 트리 프레임워크에서 지원하는 성공 정책의 유형은 다음과 같다.

정책 명칭매개변수성공 조건논리적 의미
SUCCESS_ALL없음모든 자식이 SUCCESSAND
SUCCESS_ONE없음하나 이상의 자식이 SUCCESSOR
SUCCESS_COUNT(M)임계값 MM개 이상의 자식이 SUCCESS쿼럼(quorum)

2.1 SUCCESS_ALL

SUCCESS_ALL 정책은 Parallel 노드의 모든 자식이 SUCCESS를 반환해야 Parallel 노드 자체가 SUCCESS를 반환하는 가장 엄격한 정책이다. N개의 자식 중 하나라도 아직 RUNNING 상태이면 Parallel 노드는 RUNNING을 유지하고, 하나라도 FAILURE를 반환하면 나머지 자식을 중단하고 FAILURE를 반환한다.

수식으로 표현하면, 성공 임계값 M = N인 경우에 해당한다.

\text{SUCCESS\_ALL}: \quad \forall i \in \{1, \ldots, N\}, \quad \text{status}(C_i) = \text{SUCCESS}

2.2 SUCCESS_ONE

SUCCESS_ONE 정책은 자식 중 하나만 SUCCESS를 반환하면 Parallel 노드가 즉시 SUCCESS를 반환하는 가장 관대한 정책이다. 성공 임계값 M = 1인 경우에 해당한다.

\text{SUCCESS\_ONE}: \quad \exists i \in \{1, \ldots, N\}, \quad \text{status}(C_i) = \text{SUCCESS}

2.3 SUCCESS_COUNT(M)

SUCCESS_COUNT(M) 정책은 M개 이상의 자식이 SUCCESS를 반환하면 Parallel 노드가 SUCCESS를 반환하는 일반화된 정책이다. 1 \leq M \leq N의 범위에서 임의의 임계값을 설정할 수 있으며, M = N이면 SUCCESS_ALL과 동치이고, M = 1이면 SUCCESS_ONE과 동치이다.

\text{SUCCESS\_COUNT}(M): \quad \lvert \{i : \text{status}(C_i) = \text{SUCCESS}\} \rvert \geq M

3. 성공 정책과 실패 판정의 관계

성공 정책은 Parallel 노드의 성공 조건만을 규정하지만, 이로부터 실패 판정 조건도 논리적으로 도출된다. 성공 임계값이 M인 경우, 실패한 자식의 수가 N - M을 초과하면 나머지 자식이 모두 성공하더라도 임계값 M에 도달할 수 없다. 따라서 다음의 조건이 성립하면 Parallel 노드는 FAILURE를 반환한다.

\lvert \{i : \text{status}(C_i) = \text{FAILURE}\} \rvert > N - M

이 관계를 각 정책에 적용하면 다음과 같다.

성공 정책성공 조건파생 실패 조건
SUCCESS_ALL (M = N)모든 자식 SUCCESS하나 이상 FAILURE (> 0)
SUCCESS_ONE (M = 1)하나 이상 SUCCESS모든 자식 FAILURE (> N - 1)
SUCCESS_COUNT(M)M개 이상 SUCCESSN - M + 1개 이상 FAILURE

이러한 파생 실패 조건은 별도의 실패 정책(Failure Policy)이 설정되지 않은 경우에 적용되는 기본 동작이다. 일부 프레임워크에서는 성공 정책과 독립적으로 실패 정책을 별도 설정할 수 있으며, 이 경우 두 정책이 독립적으로 평가된다.

4. 성공 정책의 선택 기준

로봇 시스템에서 Parallel 노드의 성공 정책을 선택하는 기준은 자식 행동 간의 관계 성격에 따라 결정된다.

4.1 필수적 동시 완료가 요구되는 경우

모든 자식 행동이 반드시 성공적으로 완료되어야 전체 임무가 의미 있는 경우에는 SUCCESS_ALL 정책을 선택한다. 예를 들어, 다중 센서 데이터를 모두 수집해야 융합(fusion) 처리가 가능한 경우이다.

<Parallel success_count="3">
    <AcquireLidarData/>
    <AcquireCameraData/>
    <AcquireIMUData/>
</Parallel>

4.2 대안적 행동 중 하나만 성공하면 되는 경우

복수의 대안적 접근 방식 중 하나만 성공하면 충분한 경우에는 SUCCESS_ONE 정책을 선택한다. 예를 들어, 복수의 경로 중 하나를 통해 목표에 도달하는 경우이다.

<Parallel success_count="1">
    <NavigateViaPathA/>
    <NavigateViaPathB/>
</Parallel>

4.3 부분적 성공이 허용되는 경우

전체 중 일정 비율 이상이 성공하면 충분한 경우에는 SUCCESS_COUNT(M) 정책을 선택한다. 예를 들어, 다중 로봇 시스템에서 5대 중 3대 이상이 목표에 도달하면 임무가 성공으로 간주되는 경우이다.

5. 성공 정책의 형식적 성질

5.1 단조성(monotonicity)

성공 임계값 M_1 \leq M_2인 두 정책 P_1, P_2에 대해, P_2가 충족되면 P_1도 반드시 충족된다. 즉, 임계값이 높은 정책의 충족은 낮은 정책의 충족을 함의한다.

M_1 \leq M_2 \implies (\text{SUCCESS under } P_2 \implies \text{SUCCESS under } P_1)

5.2 포함 관계

SUCCESS_ALL은 SUCCESS_COUNT(M)의 특수 사례이며, SUCCESS_ONE 역시 SUCCESS_COUNT(M)의 특수 사례이다. 따라서 SUCCESS_COUNT(M)은 모든 성공 정책을 포괄하는 일반화된 정책으로 볼 수 있다.

\text{SUCCESS\_ONE} \subseteq \text{SUCCESS\_COUNT}(M) \subseteq \text{SUCCESS\_ALL}

여기서 \subseteq는 정책의 충족 조건이 더 관대함을 의미한다. SUCCESS_ONE의 성공 조건 집합이 가장 넓고, SUCCESS_ALL의 성공 조건 집합이 가장 좁다.

6. 참고 문헌

  • 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