명시적 조건-행동 규칙의 구현 방식 (Implementation Methods of Explicit Condition-Action Rules)
1. 개요
명시적 조건-행동 규칙(explicit condition-action rules)은 하드코딩 기반 행동 제어의 가장 기본적인 형태로, “특정 조건이 충족되면 특정 행동을 수행한다“는 규칙을 직접 코드로 구현하는 방식이다. 이 접근은 직관적이고 구현이 단순하나, 규칙의 수가 증가하면 복잡도가 급격히 상승하는 한계를 가진다.
2. 구현 형태
2.1 If-Else 체인
가장 단순한 형태로, 순차적 조건 평가를 통해 행동을 선택한다.
void decideAction(const SensorData& data)
{
if (data.emergency_stop)
{
emergencyHalt();
}
else if (data.obstacle_distance < 0.3)
{
avoidObstacle();
}
else if (data.battery_level < 0.15)
{
returnToBase();
}
else if (data.goal_reached)
{
performTask();
}
else
{
navigateToGoal();
}
}
2.2 규칙 우선순위의 암묵적 결정
If-Else 체인에서 규칙의 평가 순서가 곧 우선순위이다. 위의 예에서 비상 정지가 최고 우선순위, 장애물 회피가 그 다음이다. 이 우선순위는 코드의 순서에 의해 암묵적으로 결정되므로, 규칙이 많아지면 우선순위 관리가 어려워진다.
2.3 규칙 테이블
조건-행동 쌍을 데이터 구조로 관리하여 유지보수성을 향상시킨다.
struct Rule
{
std::function<bool(const State&)> condition;
std::function<void()> action;
int priority;
};
std::vector<Rule> rules = {
{isEmergency, emergencyStop, 100},
{isObstacleNear, avoidObstacle, 90},
{isBatteryLow, returnToBase, 80},
{isGoalReached, performTask, 50},
};
2.4 행동 트리에서의 표현
행동 트리는 조건-행동 규칙을 구조적으로 표현하는 개선된 형태이다.
<Fallback>
<Sequence>
<Condition ID="IsEmergency"/>
<Action ID="EmergencyStop"/>
</Sequence>
<Sequence>
<Condition ID="IsObstacleNear"/>
<Action ID="AvoidObstacle"/>
</Sequence>
<Action ID="NavigateToGoal"/>
</Fallback>
3. 조건-행동 규칙의 한계
3.1 상태 공간 폭발
n개의 이진 조건에 대해 가능한 상태 수는 2^n이다. 모든 상태에 대한 행동을 명시적으로 정의하려면 최대 2^n개의 규칙이 필요하다.
3.2 규칙 간 충돌
복수의 규칙 조건이 동시에 충족되는 경우, 어떤 규칙을 우선 적용할지의 충돌 해소(conflict resolution) 메커니즘이 필요하다.
3.3 유지보수 비용
새로운 조건이나 행동이 추가될 때마다, 기존 규칙과의 상호 작용을 재검토하여야 한다.
4. 자율 계획과의 대비
명시적 규칙에서는 개발자가 “어떤 상황에서 무엇을 할 것인가“를 일일이 정의하나, 자율 계획에서는 “무엇을 달성할 것인가(목표)“와 “어떤 행동이 가능한가(도메인)“만을 정의하면, 계획기가 “어떻게 달성할 것인가(계획)“를 자동으로 도출한다.
5. 참고 문헌
- Ghallab, M., Nau, D., & Traverso, P. (2016). Automated Planning and Acting. Cambridge University Press.
- Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
| 버전 | 날짜 | 변경 사항 |
|---|---|---|
| v0.1 | 2026-04-05 | 초안 작성 |