DOCS/journey/research/autonomous_agents/planning/250925_classical_planning_basics.md
Claude-51124 48edd9a7b4 docs: 리서치 폴더 구조 통합 및 정리
- knowledge_graph와 ontology 통합 (ontology_papers/ 서브폴더)
- statistical_physics와 bayesian_theory 통합 (physics/ 서브폴더)
- autonomous_agents와 ai_planning 통합 (planning/ 서브폴더)
- 각 폴더에 README.md 추가하여 구조 명확화
- 핵심 문서 보존 및 링크 업데이트
- research/README.md 업데이트
2025-12-31 16:50:13 +09:00

8.4 KiB
Raw Blame History

tags, date, modification_date
tags date modification_date
AI
ClassicalPlanning
PDDL
STRIPS
Heuristics
2025-09-25 2025-09-25

고전 계획(Classical Planning) 기초

1. 개요

**고전 계획(Classical Planning)**은 인공지능의 한 분야로, **초기 상태(Initial State)**에서 **목표 상태(Goal State)**에 도달하기 위한 **행동(Action)의 순서, 즉 계획(Plan)**을 자동으로 찾는 것을 목표로 합니다.

고전 계획은 다음과 같은 핵심적인 가정을 전제로 합니다.

  • 완전 관측(Fully Observable): 환경의 모든 상태를 완벽하게 알 수 있습니다.
  • 결정론적(Deterministic): 특정 행동의 결과는 항상 동일하며 예측 가능합니다.
  • 정적(Static): 외부 요인에 의해 상태가 스스로 변하지 않습니다. 오직 에이전트의 행동만이 상태를 변화시킵니다.
  • 이산적(Discrete): 시간, 상태, 행동이 모두 이산적인 단위로 나뉩니다.

2. 핵심 구성 요소 (수학적 모델)

고전 계획 문제는 수학적으로 다음과 같이 정의됩니다.

  • 상태 (State): s로 표현하며, 세상에 대한 참인 사실(Fact)들의 집합입니다. 예를 들어, on(A, B), clear(A)와 같은 원자 명제(atomic proposition)의 집합으로 표현됩니다.
  • 목표 (Goal): G로 표현하며, 만족시켜야 할 사실들의 집합입니다. 특정 상태 s가 목표 G의 모든 조건을 만족하면 s ⊨ G라고 표기합니다.
  • 행동 (Action): a로 표현하며, 다음과 같은 세 부분으로 구성됩니다.
    • 전제조건 (Preconditions, pre): 행동을 수행하기 위해 반드시 참이어야 하는 사실들의 집합.
    • 추가 효과 (Add Effects, add): 행동 수행 후 새롭게 참이 되는 사실들의 집합.
    • 삭제 효과 (Delete Effects, del): 행동 수행 후 더 이상 참이 아니게 되는(거짓이 되는) 사실들의 집합.
  • 전이 함수 (Transition Function): γ(s, a)는 상태 s에서 행동 a를 수행했을 때의 결과 상태 s'를 반환합니다. 행동 apre ⊆ s일 때만 적용 가능하며, 결과 상태는 s' = (s - del) add로 계산됩니다.
  • 계획 (Plan): π = (a₁, a₂, ..., aₙ)은 행동들의 순차적인 나열입니다. 초기 상태 s₀에서부터 계획 π를 순서대로 적용했을 때, 최종 상태 sₙ이 목표 G를 만족하면(sₙ ⊨ G) 이 계획은 유효한 것으로 간주됩니다.

3. 대표적인 형식: STRIPS와 PDDL

  • STRIPS (Stanford Research Institute Problem Solver): 위에서 설명한 precondition, add, delete 효과 모델을 정립한 고전적인 계획 문제 형식입니다.
  • PDDL (Planning Domain Definition Language): STRIPS를 기반으로, 실제 계획기(Planner)들이 사용할 수 있도록 문법을 표준화한 언어입니다. PDDL은 두 부분으로 나뉩니다.
    • 도메인(Domain): 문제의 규칙을 정의합니다. 즉, 술어(predicates)와 행동(actions)의 종류를 기술합니다.
    • 문제(Problem): 특정 시나리오를 정의합니다. 즉, 객체(objects), 초기 상태(init), 목표 상태(goal)를 기술합니다.

PDDL 예시: 블록 쌓기 (Blocks World)

도메인 파일 (domain.pddl)

(define (domain blocks)
  (:predicates (on ?x ?y) (ontable ?x) (clear ?x) (holding ?x) (handempty))

  (:action pick-up
    :parameters (?x)
    :precondition (and (ontable ?x) (clear ?x) (handempty))
    :effect (and (holding ?x) (not (ontable ?x)) (not (clear ?x)) (not (handempty))))

  (:action put-down
    :parameters (?x)
    :precondition (holding ?x)
    :effect (and (ontable ?x) (clear ?x) (handempty) (not (holding ?x))))

  (:action stack
    :parameters (?x ?y)
    :precondition (and (holding ?x) (clear ?y))
    :effect (and (on ?x ?y) (clear ?x) (handempty) (not (holding ?x)) (not (clear ?y))))

  (:action unstack
    :parameters (?x ?y)
    :precondition (and (on ?x ?y) (clear ?x) (handempty))
    :effect (and (holding ?x) (clear ?y) (not (on ?x ?y)) (not (clear ?x)) (not (handempty)))))

문제 파일 (problem.pddl)

(define (problem bw-simple)
  (:domain blocks)
  (:objects A B)
  (:init (ontable A) (ontable B) (clear A) (clear B) (handempty))
  (:goal (and (on A B))))

이 문제에 대한 유효한 계획 중 하나는 (pick-up A), (stack A B) 입니다.

4. 계획 탐색 방법

고전 계획은 결국 거대한 상태 공간에서 초기 상태로부터 목표 상태까지의 경로를 찾는 탐색(Search) 문제로 귀결됩니다.

  • 상태 공간 탐색 (State-Space Search)
    • 전진 탐색 (Forward Search): 초기 상태에서 시작하여 가능한 행동들을 적용해가며 목표 상태에 도달하는지 탐색합니다.
    • 후진 탐색 (Regression/Backward Search): 목표 상태에서 시작하여, 그 목표를 달성할 수 있는 행동을 역으로 적용해가며 초기 상태에 도달하는지 탐색합니다.
  • 계획 공간 탐색 (Plan-Space Search): 상태가 아닌 부분적인 계획에서 시작하여, 계획의 결함(threats, open goals)을 해결해나가며 점진적으로 완전한 계획을 만듭니다.

대표적인 알고리즘

  • A*: 최적의 계획(가장 짧은 길이 또는 최소 비용)을 찾기 위해 휴리스틱 함수를 사용하는 탐색 알고리즘입니다.
  • Greedy Best-First Search: 최적성을 보장하지는 않지만, 휴리스틱 값에만 의존하여 빠르게 목표에 도달하는 경로를 찾습니다.
  • Graphplan: 계획 그래프(Planning Graph)를 생성하여 행동 간의 상호 배제 관계(mutex)를 파악하고, 이를 바탕으로 유효한 계획을 추출합니다.
  • SATPlan: 계획 문제를 부울 만족도 문제(Boolean Satisfiability Problem, SAT)로 변환하여 강력한 SAT 솔버로 해결합니다.

5. 휴리스틱 (Heuristics)

상태 공간이 거대하기 때문에 맹목적인 탐색은 비효율적입니다. 따라서 현재 상태에서 목표까지 얼마나 남았는지를 추정하는 **휴리스틱 함수 h(s)**가 탐색 성능의 핵심입니다.

  • 삭제 효과 무시 (Delete Relaxation): 가장 유명한 휴리스틱 계산 방식으로, 모든 행동의 delete 효과를 무시한다고 가정합니다. 이렇게 하면 문제는 훨씬 단순해지며, 이 완화된 문제(relaxed problem)를 해결하는 데 필요한 행동의 수가 현재 상태의 휴리스틱 값이 됩니다.
  • FF 휴리스틱 (Fast Forward): 삭제 효과를 무시한 완화된 계획을 실제로 빠르게 찾아내고, 그 계획의 길이를 휴리스틱 값으로 사용하는 매우 강력한 휴리스틱입니다.

6. 계획 검증: VAL

계획기(Planner)가 생성한 계획이 정말로 유효한지 독립적으로 검증하는 것은 매우 중요합니다. **VAL (Validator)**은 PDDL로 기술된 도메인과 문제에 대해, 주어진 계획의 각 단계가 전제조건을 만족하는지, 상태 전이가 올바른지, 최종적으로 목표를 달성하는지를 순차적으로 검사하는 표준 도구입니다.

7. 복잡도 (Complexity)

일반적인 STRIPS 형식의 계획 문제에서 "유효한 계획이 존재하는가?"를 판정하는 것은 PSPACE-완전(PSPACE-complete) 문제로 알려져 있습니다. 이는 계획 문제가 매우 어려운 문제임을 시사하며, 휴리스틱의 중요성을 뒷받침합니다.

8. 고전 계획의 한계와 확장

현실 세계의 많은 문제는 고전 계획의 가정을 위반하며, 이를 해결하기 위해 다음과 같은 분야로 확장되었습니다.

  • 시간 계획 (Temporal Planning): 행동에 지속 시간(duration)이 있는 경우
  • 수치 계획 (Numeric Planning): 연속적인 수치 변수가 포함된 경우
  • 확률적 계획 (Probabilistic Planning): 행동의 결과가 불확실한 경우 (MDP, POMDP)
  • 다중 에이전트 계획 (Multi-Agent Planning): 여러 에이전트가 상호작용하는 경우

9. 학습 로드맵

  1. STRIPS 모델 이해: precondition, add, delete 개념을 명확히 이해합니다.
  2. PDDL 작성: 간단한 도메인과 문제를 직접 작성하고, 오픈소스 계획기를 사용해 실행해 봅니다.
  3. 탐색과 휴리스틱 원리 학습: 전진 탐색과 FF 휴리스틱이 어떻게 동작하는지 손으로 따라가 봅니다.
  4. VAL 사용: 생성된 계획을 VAL로 검증하며 개념 이해를 확인합니다.