1292.50 ReactiveFallback과 일반 Fallback의 차이
1. 개요
ReactiveFallback 노드와 일반 Fallback 노드(FallbackWithMemory)는 동일한 논리합(OR) 의미론을 공유하지만, Running 상태에서의 후속 tick 처리 방식에서 근본적으로 다르다. 이 차이는 ReactiveSequence와 일반 Sequence의 차이와 쌍대(dual) 관계에 있으며, 대안 선택의 적응성(adaptivity)과 실행 안정성(stability) 사이의 설계 균형을 결정한다 (Colledanchise & Ögren, Behavior Trees in Robotics and AI: An Introduction, 2018).
2. 핵심 차이의 요약
| 속성 | 일반 Fallback | ReactiveFallback |
|---|---|---|
| 후속 tick 시작 위치 | 이전 Running 자식부터 | 항상 첫 번째 자식부터 |
| 이전 Failure 자식 재평가 | 하지 않음 | 매 tick마다 재평가 |
| 상위 우선순위 대안 복원 | 불가 | 즉각적 복원 |
| tick당 실행 노드 수 | 적음 | 많음 |
| halt 발생 빈도 | 낮음 | 높음 |
| 실행 안정성 | 높음 | 상대적으로 낮음 |
3. 대안 전환 동작의 차이
3.1 일반 Fallback의 대안 고수
일반 Fallback 노드는 Running 상태의 자식 인덱스를 기억하고, 후속 tick에서 해당 자식부터 실행을 재개한다. 이전에 Failure를 반환한 상위 우선순위 대안은 재평가되지 않으며, 해당 대안이 다시 가용해지더라도 현재 실행 중인 대안을 계속 수행한다.
Fallback [F1]
├─ Action [A1: 최적 경로]
└─ Action [A2: 대체 경로]
| Tick | A1 | A2 | F1 | 비고 |
|---|---|---|---|---|
| t_1 | Failure | Running | Running | A1 실패, A2 사용 |
| t_2 | (미평가) | Running | Running | A1 재평가 안 함 |
| t_3 | (미평가) | Success | Success | A2로 완료 |
tick t_2에서 A1이 가용해졌더라도, 일반 Fallback은 A1을 재평가하지 않고 A2를 계속 실행한다 (Faconti, BehaviorTree.CPP Documentation, 2024).
3.2 ReactiveFallback의 동적 대안 전환
ReactiveFallback 노드는 매 tick마다 첫 번째 자식부터 재평가하므로, 상위 우선순위 대안이 가용해지면 즉시 전환한다.
ReactiveFallback [RF1]
├─ Action [A1: 최적 경로]
└─ Action [A2: 대체 경로]
| Tick | A1 | A2 | RF1 | 비고 |
|---|---|---|---|---|
| t_1 | Failure | Running | Running | A1 실패, A2 사용 |
| t_2 | Running | halt 요청 | Running | A1 복원, A2 중단 |
| t_3 | Success | (Idle) | Success | A1로 완료 |
tick t_2에서 A1이 Running을 반환하면(최적 경로가 복원됨), RF1은 A2에 halt를 요청하고 A1으로 전환한다.
4. 실행 안정성의 차이
4.1 일반 Fallback의 안정성
일반 Fallback은 한 번 선택한 대안을 완료될 때까지 고수하므로, 대안 간의 빈번한 전환(thrashing)이 발생하지 않는다. 이는 실행의 안정성과 예측 가능성을 보장한다.
4.2 ReactiveFallback의 전환 위험
ReactiveFallback은 상위 대안의 가용성이 불안정한 경우, 매 tick마다 대안 간의 전환이 반복될 수 있다. 예를 들어, 상위 대안이 한 tick에서 Success를 반환하고 다음 tick에서 Failure를 반환하면, 현재 대안의 halt와 새로운 대안의 시작이 매 tick마다 반복된다. 이러한 진동(oscillation)은 로봇의 물리적 행동에 부정적인 영향을 미칠 수 있다 (Colledanchise & Ögren, 2018).
이 문제를 완화하기 위해, 상위 대안의 가용성 판단에 히스테리시스(hysteresis)를 적용하거나, 조건 노드에서 일정 시간 이상 조건이 유지된 경우에만 Success를 반환하도록 설계하는 방법이 사용된다.
5. 실행 효율의 차이
일반 Fallback은 Running 상태의 자식만 tick을 수신하므로 tick당 계산 비용이 최소화된다. ReactiveFallback은 매 tick마다 선행 자식을 모두 재평가하므로 추가적인 계산 비용이 발생한다. 선행 자식이 조건 노드로 구성된 경우 이 비용은 미미하지만, 계산 비용이 높은 액션 노드가 선행 자식인 경우 성능에 영향을 줄 수 있다.
6. 선택 기준
일반 Fallback을 사용하는 경우:
- 한 번 선택한 대안을 완료될 때까지 유지하여야 하는 경우
- 대안 간 빈번한 전환이 물리적 행동에 부정적인 영향을 주는 경우
- 상위 대안의 재가용 여부를 감시할 필요가 없는 경우
- 예시: 장시간 소요되는 복구 작업의 안정적 완료
ReactiveFallback을 사용하는 경우:
- 상위 우선순위 대안이 가용해지면 즉시 전환하여야 하는 경우
- 환경 변화에 따라 최선의 대안이 수시로 변하는 경우
- 선행 자식이 계산 비용이 낮은 조건 노드인 경우
- 예시: 센서 가용성에 따른 항법 전략의 동적 전환
7. ReactiveSequence/Sequence 차이와의 대칭성
ReactiveSequence와 일반 Sequence의 차이에서 Success와 Failure의 역할을 교환하면, ReactiveFallback과 일반 Fallback의 차이가 도출된다. 이 쌍대적 대칭성은 행동 트리의 체계적 설계 원리를 반영한다 (Faconti, 2024).
| 비교 쌍 | 재평가 대상 상태 | 중단 유발 상태 |
|---|---|---|
| ReactiveSequence vs Sequence | 이전 Success 자식 | Failure 시 halt |
| ReactiveFallback vs Fallback | 이전 Failure 자식 | Success/Running 시 halt |
참고 문헌
- 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/