ForceFailure의 Running 통과 규칙 (ForceFailure’s Running Pass-Through Rule)
1. 개요
ForceFailure 데코레이터의 Running 통과 규칙은 자식 노드가 RUNNING 상태를 반환할 때, 이를 변환하지 않고 그대로 부모에게 전달하는 규칙이다. 이 규칙은 Inverter 및 ForceSuccess의 Running 통과 규칙과 동일한 원칙에 기반하며, 비동기 실행의 정합성을 보장한다.
2. 규칙의 정의
f_{\text{ForceFailure}}(\text{RUNNING}) = \text{RUNNING}
ForceFailure는 SUCCESS와 FAILURE를 모두 FAILURE로 변환하나, RUNNING은 예외적으로 변환하지 않는다.
RUNNING 통과의 필요성
ForceFailure에서의 RUNNING 통과 필요성은 ForceSuccess와 동일한 근거를 가진다.
- 비동기 실행 추적: 자식이
RUNNING을 반환하면 아직 실행 중이므로, 다음 tick에서 자식을 다시 tick하여야 한다. - halt 정합성:
RUNNING상태가FAILURE로 변환되면, 실행 중인 자식이 halt되지 않아 리소스 누수가 발생한다. - 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로 변환된다.
모든 반환 상태 변환 데코레이터의 공통 규칙
| 데코레이터 | SUCCESS | FAILURE | RUNNING |
|---|---|---|---|
| Inverter | FAILURE | SUCCESS | RUNNING |
| ForceSuccess | SUCCESS | SUCCESS | RUNNING |
| ForceFailure | FAILURE | FAILURE | RUNNING |
모든 반환 상태 변환 데코레이터에서 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.1 | 2026-04-04 | 초안 작성 |