GN⁺: 플래너 프로그래밍, 놀라움을 선사하다
(hillelwayne.com)Picat 프로그래밍 언어의 마법 같은 기능
- Picat은 논리 프로그래밍, 명령형 프로그래밍, 제약 조건 해결을 결합하려는 연구 언어임.
- Picat의
planner
모듈은 매우 흥미로운 프로그래밍 모델 중 하나임.
논리 프로그래밍에 대한 간단한 설명
- 명령형 및 함수형 프로그래밍에서는 입력을 받아 출력을 생성하는 알고리즘을 작성함.
- 논리 프로그래밍과 제약 조건 해결에서는 일련의 방정식을 제공하고 이러한 관계를 만족하는 할당을 찾음.
문제 정의
- 그리드에 마커를 놓고 시작점(원점)에서 목표 좌표로 이동하는 문제를 해결함.
- 각 단계에서는 사방으로 한 칸씩 이동할 수 있으며, 그리드의 경계를 벗어날 수 없음.
- 마커가 목표 좌표에 있을 때 프로그램이 성공함.
첫 번째 구현
- 초기 상태
Start
, 상태 전환을 나타내는 일련의action
함수, 최종 상태를 결정하는final(S)
함수를 제공해야 함. -
best_plan(Start, Plan)
을 호출하여 최종 상태에 도달하는 데 필요한 가장 짧은 단계 수열을Plan
에 할당함.
여러 목표 추가
- 계획자가 모든 목표를 순서대로 도달해야 함.
- 목표에 도달하면 해당 목표를 큐에서 제거하는 새로운
action
을 추가함.
비용 최소화
- 목표를 순서대로 방문하는 것이 항상 최단 총 경로를 의미하지는 않음.
- 목표의 순서에 상관없이 최단 경로를 찾고 싶다면,
action
을 수정하여 계획자가 다음 목표를 선택하여 전체 경로 길이를 최소화할 수 있음.
다른 변형
- Picat은 계획에 대한 많은 변형을 지원함.
-
best_plan(S, Limit, Plan)
은 최대 비용을Limit
으로 제한함. -
sequence(P, Action)
은 현재 부분 계획에 따라 가능한 행동을 제한함.
Picat 사용 여부
- Picat은 연구 언어이며, 좋은 문서화나 명확한 오류 메시지와 같은 편의성이 부족함.
- Picat은 특정 계산 문제를 해결하기 위해 배우는 "도구" 언어로 더 유용함.
부록: 다른 계획 언어
- "계획"은 로봇공학과 AI를 위해 개발되었지만, 주로 비디오 게임 AI에서 "목표 지향 액션 계획"(GOAP)으로 사용됨.
- PDDL은 독립적인 계획자가 입력으로 사용하는 계획 설명 언어임.
GN⁺의 의견
-
프로그래밍 모델의 혁신: Picat의
planner
모듈은 프로그래밍에 새로운 차원을 추가함. 이는 특히 복잡한 경로 찾기와 같은 문제를 해결할 때 매우 강력함. - 교육적 가치: Picat은 프로그래밍 언어의 교육적 측면에서 중요함. 이는 논리 프로그래밍과 제약 조건 해결의 개념을 학습하는 데 도움이 될 수 있음.
- 특정 문제 해결: Picat은 특정 계산 문제를 해결하기 위한 도구로서의 가치가 있음. 이는 일반 프로그래밍 언어로 해결하기 어려운 문제에 대한 새로운 접근 방식을 제공함.
Hacker News 의견
-
Picat의 계획 모드를 실제로 업무에 활용한 사례
- 장치 유지보수를 위한 시스템 프로토타입 개발
- 시스템에 '어떻게'가 아닌 '무엇을' 원하는지 지시
- Picat으로 최적의 계획을 생성하였으나, 대규모로 확장할 때 문제 발생
- 계획은 EXPTIME이기 때문에 예상대로 확장성에 한계
- 휴리스틱 정의, 나이브 베이즈 분류기, 대칭성 제약 조건 등을 사용했지만 여전히 많은 관리 필요
- 고전적인 GOFAI 문제 영역에 대해서는 여전히 AI 겨울 상태
-
Picat 자원 및 예제 제공자 정보
- 제약 프로그래밍 커뮤니티의 활발한 멤버인 Hakan Kjellerstrand의 웹사이트에서 Picat 자료 및 예제 제공
-
Prolog 및 MiniZinc 추천
- Prolog는 이해하기 쉽고 성숙한 언어로 제약 해결 기능 제공
- MiniZinc는 다양한 목적에 특화된 솔버에 접근할 수 있는 인터페이스
- Prolog는 성능을 높이기 위해 상당한 이해가 필요
- Picat으로 작성한 후 다른 언어로도 쉽게 작성 가능한지 고려 권장
-
Firebase 기술 면접과 관련된 댓글
- Firebase 기술 면접이 Picat과 같은 도구를 사용하면 더 쉬울 것
- Predrag이 리뷰어로 등장한 것에 대한 반가움
-
타입 시스템과 프로그래밍 언어의 비교
- 타입스크립트에서의 타입 시스템과 유사하지만, 직접 해결해야 함
- 타입스크립트는 제약 조건을 표현하는 데 충분히 강력하지 않음
- 계획자 스타일 프로그래밍의 간결함과 간편함 강조
-
GOAP(Goal-Oriented Action Planning)의 언급
- F.E.A.R. 게임의 적 AI에 사용되어 재미를 더한 GOAP
- Jeff Orkin의 GOAP에 관한 논문이 읽기 쉽고 재미있다고 평가
-
Picat의 계획자 기능에 대한 평가
- Prolog와 유사하지만 계획자 기능이 추가된 Picat
- 계획자 기능으로 문제를 간단하게 해결할 수 있지만, 성능은 명령형 프로그래밍과 비교 필요
-
컴퓨터에게 최종 상태를 알려주고 해결하게 하는 꿈
- A* 알고리즘을 사용하여 코드 생성 및 상태 전환
- 계획 커뮤니티나 솔버에 대한 경험은 적지만, ortools로 실험
- 프로그래밍을 물류와 유사하게 인식하며, '슬라이딩 퍼즐'로 비유
-
Prolog과 유사한 문법에 대한 부가적인 논평
- Prolog과 유사한 문법을 사용하며, 'comma first' 대신
true.
로 끝내는 것이 더 우아한 해결책으로 제시
- Prolog과 유사한 문법을 사용하며, 'comma first' 대신
이 요약은 다양한 개인의 의견을 반영하며, 각각의 관점을 중립적으로 전달함. 프로그래밍 언어와 관련된 기술적인 내용은 초급 소프트웨어 엔지니어가 이해할 수 있도록 간결하게 설명함.