1294.5 Sequence 노드의 논리적 의미 (AND 연산)
1. 논리 AND와 Sequence의 대응
Sequence 노드의 반환 규칙은 명제 논리의 논리곱(AND, \wedge) 연산과 구조적으로 대응된다. 논리곱에서 모든 피연산자가 참(TRUE)이어야 결과가 참이 되듯, Sequence 노드에서 모든 자식이 SUCCESS를 반환해야 전체가 SUCCESS를 반환한다(Colledanchise & Ogren, 2018).
\text{Sequence}(C_1, C_2, \ldots, C_N) \sim C_1 \wedge C_2 \wedge \cdots \wedge C_N
이 대응에서 SUCCESS는 TRUE에, FAILURE는 FALSE에 대응한다.
이진 논리와의 대응 표
자식이 2개인 Sequence의 경우, 모든 가능한 반환 상태 조합과 Sequence의 결과를 진리표(truth table)로 표현할 수 있다. 단, RUNNING 상태는 이진 논리에 존재하지 않는 제3의 상태이므로, 행동 트리의 삼치 논리(ternary logic)로 확장해야 한다.
| C_1 | C_2 | Sequence |
|---|---|---|
| SUCCESS | SUCCESS | SUCCESS |
| SUCCESS | FAILURE | FAILURE |
| SUCCESS | RUNNING | RUNNING |
| FAILURE | (미평가) | FAILURE |
| RUNNING | (미평가) | RUNNING |
C_1이 FAILURE 또는 RUNNING을 반환하면 C_2는 평가되지 않는다. 이는 논리곱의 단축 평가(short-circuit evaluation)와 동일한 원리이다.
단축 평가와 Sequence
프로그래밍 언어에서 A && B && C 표현식은 A가 FALSE이면 B와 C를 평가하지 않는다. Sequence 노드도 동일하게, 자식이 FAILURE를 반환하면 후속 자식의 평가를 생략한다. 이 단축 평가는 두 가지 이점을 제공한다.
첫째, 불필요한 연산을 회피하여 Tick 실행 시간을 절감한다. 전제 조건이 충족되지 않은 상태에서 비용이 큰 액션 노드를 실행하는 것은 낭비이다.
둘째, 전제 조건에 의한 보호(guard) 패턴을 자연스럽게 구현할 수 있다.
<Sequence>
<Condition ID="IsBatteryAbove20"/> <!-- 보호 조건 -->
<Action ID="NavigateToGoal"/> <!-- 보호되는 액션 -->
</Sequence>
배터리 수준이 부족하면 NavigateToGoal은 실행되지 않는다. 이는 프로그래밍의 if (battery > 20) { navigate(); } 구조와 동등하다.
삼치 논리로의 확장
이진 논리의 AND는 TRUE와 FALSE 두 값만 다루지만, 행동 트리의 Sequence는 RUNNING이라는 세 번째 상태를 포함하는 삼치 논리(ternary logic)에서 동작한다. RUNNING 상태는 “아직 결과가 확정되지 않음“을 의미하며, 비동기 작업의 진행 중 상태를 표현한다.
삼치 논리에서의 Sequence 규칙:
- FAILURE가 하나라도 있으면 → FAILURE (확정적 실패)
- FAILURE가 없고 RUNNING이 있으면 → RUNNING (미확정)
- 모든 자식이 SUCCESS이면 → SUCCESS (확정적 성공)
이 규칙은 Kleene의 강한 삼치 논리(Kleene’s strong three-valued logic)에서의 논리곱과 유사한 구조를 가진다. 여기서 RUNNING은 Kleene 논리의 “알 수 없음(UNKNOWN)“에 대응한다.
AND 의미론의 로봇공학 적용
전제 조건 검증
로봇의 작업 수행 전에 다수의 전제 조건을 모두 확인해야 하는 경우, Sequence의 AND 의미론이 자연스럽게 적용된다.
<Sequence>
<Condition ID="IsBatteryAbove20"/>
<Condition ID="IsLocalized"/>
<Condition ID="IsPathClear"/>
<Action ID="NavigateToGoal"/>
</Sequence>
모든 조건이 SUCCESS여야 NavigateToGoal이 실행된다. 하나라도 FAILURE이면 즉시 FAILURE가 반환되며, 실패한 조건 이후의 평가는 수행되지 않는다.
순차 작업 수행
로봇의 임무가 여러 단계의 순차적 작업으로 구성되는 경우, Sequence의 AND 의미론은 “모든 단계가 완료되어야 임무 성공“이라는 의미를 정확히 표현한다.
<Sequence>
<Action ID="ApproachObject"/>
<Action ID="GraspObject"/>
<Action ID="LiftObject"/>
<Action ID="PlaceObject"/>
</Sequence>
AND와 순차 실행의 결합
Sequence 노드는 논리적 AND와 순차적 실행(sequential execution)의 두 가지 개념을 결합한다. 순수한 논리 AND는 피연산자의 평가 순서에 무관하지만, Sequence 노드는 왼쪽에서 오른쪽으로의 순서가 의미론의 일부이다. 이는 자식 간에 의존 관계가 존재할 수 있기 때문이다. 예를 들어, 전제 조건을 먼저 확인하고 그 결과에 따라 액션을 실행하는 패턴에서 순서는 필수적이다(Colledanchise & Ogren, 2018).
참고 문헌
- Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
- Faconti, D. (2022). BehaviorTree.CPP documentation and API reference. https://www.behaviortree.dev/