ForceFailure의 Running 통과 규칙 (ForceFailure's Running Pass-Through Rule)

ForceFailure의 Running 통과 규칙 (ForceFailure’s Running Pass-Through Rule)

1. 개요

ForceFailure 데코레이터의 Running 통과 규칙은 자식 노드가 RUNNING 상태를 반환할 때, 이를 변환하지 않고 그대로 부모에게 전달하는 규칙이다. 이 규칙은 Inverter 및 ForceSuccess의 Running 통과 규칙과 동일한 원칙에 기반하며, 비동기 실행의 정합성을 보장한다.

2. 규칙의 정의

f_{\text{ForceFailure}}(\text{RUNNING}) = \text{RUNNING}

ForceFailure는 SUCCESSFAILURE를 모두 FAILURE로 변환하나, RUNNING은 예외적으로 변환하지 않는다.

RUNNING 통과의 필요성

ForceFailure에서의 RUNNING 통과 필요성은 ForceSuccess와 동일한 근거를 가진다.

  1. 비동기 실행 추적: 자식이 RUNNING을 반환하면 아직 실행 중이므로, 다음 tick에서 자식을 다시 tick하여야 한다.
  2. halt 정합성: RUNNING 상태가 FAILURE로 변환되면, 실행 중인 자식이 halt되지 않아 리소스 누수가 발생한다.
  3. tick 연쇄 유지: RUNNING 신호가 루트까지 전달되어야 행동 트리의 tick 메커니즘이 올바르게 동작한다.

시간적 동작 흐름

Tick 1: Action=RUNNING → ForceFailure=RUNNING
Tick 2: Action=RUNNING → ForceFailure=RUNNING
Tick 3: Action=SUCCESS → ForceFailure=FAILURE

자식이 RUNNING 동안에는 ForceFailure도 RUNNING을 반환한다. 자식이 최종적으로 SUCCESS를 반환할 때에만 FAILURE로 변환된다.

모든 반환 상태 변환 데코레이터의 공통 규칙

데코레이터SUCCESSFAILURERUNNING
InverterFAILURESUCCESSRUNNING
ForceSuccessSUCCESSSUCCESSRUNNING
ForceFailureFAILUREFAILURERUNNING

모든 반환 상태 변환 데코레이터에서 RUNNING은 변환 없이 통과한다. 이는 행동 트리의 비동기 실행 모델에서 근본적인 불변 조건(invariant)이다.

설계 시 고려 사항

자식이 RUNNING을 반환하지 않는 경우(조건 노드), Running 통과 규칙은 발동되지 않으며, ForceFailure는 항상 FAILURE를 반환한다. 자식이 비동기 액션인 경우에만 Running 통과가 실제로 적용된다.

참고 문헌

  • Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
  • BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/

버전날짜변경 사항
v0.12026-04-04초안 작성