비결정론적 프로그래밍
Nondeterministic programming프로그래밍 패러다임 |
---|
비결정론적 프로그래밍 언어는 프로그램의 특정 지점("선택 지점"이라 함)에서 프로그램 흐름에 대한 다양한 대안을 지정할 수 있는 언어다.if-then 문장과 달리, 이러한 대안들 사이의 선택 방법은 프로그래머에 의해 직접 지정되지 않는다. 프로그램은 모든 선택 지점에 적용되는 일반적인 방법을 통해 대안들 사이의 런타임에 결정해야 한다.프로그래머는 제한된 수의 대안을 지정하지만 프로그램은 나중에 그 대안들 사이에서 선택해야 한다.("선택"은 사실 비결정론적 운영자의 일반적인 이름이다.)높은 수준의 선택이 그 안에 하위 수준의 선택을 포함하는 분기로 이어지는 선택 지점의 계층이 형성될 수 있다.
한 가지 선택 방법이 역추적 시스템(Amb,[1] 또는 Prolog의 통일 등)에 구현되어 있는데, 이 시스템에서는 일부 대안이 "실패할 수 있으며, 이로 인해 프로그램이 역추적되어 다른 대안을 시도하게 된다.모든 대안이 특정 선택 지점에서 실패하면 전체 지점이 실패하게 되고 프로그램은 더 오래된 선택 지점으로 후퇴하게 된다.한 가지 복잡한 점은 어떤 선택이든 잠정적이고 리메이크될 수 있기 때문에 시스템은 결국 실패한 분기를 부분적으로 실행함으로써 야기된 부작용을 되돌림으로써 오래된 프로그램 상태를 복원할 수 있어야 한다는 것이다.
또 다른 선택방법은 Alisp와 같은 시스템으로 구현된 강화학습이다.[2]그러한 시스템에서는, 역추적이 아니라, 시스템은 어떤 성공의 척도를 추적하고 어떤 선택이 종종 성공으로 이어지며, 어떤 상황(내부 프로그램 상태와 환경 입력 모두 선택에 영향을 미칠 수 있는지)을 학습한다.이러한 시스템은 역추적이 어려울 수도 있고 비실용적일 수도 있는 동적 환경에서 수행된 조치를 취소하려는 시도를 포함하는 로봇공학 및 기타 영역에 적용하기에 적합하다.