핼턴 수열

Halton sequence
2,3 Halton 시퀀스(상단)의 첫 256점에서 256점(아래쪽)으로 가성수 출처(아래쪽)와 비교했을 때 256점.Halton 시퀀스는 공간을 보다 고르게 커버한다. (빨간색=1,..,10,파랑=11,..100,녹색=101,256)

통계에서, Halton 시퀀스몬테카를로 시뮬레이션과 같은 수치적 방법에 대해 우주에서 점을 생성하기 위해 사용되는 시퀀스다.이러한 시퀀스는 결정론적이긴 하지만 불일치가 낮다는 것, 즉 여러 가지 목적을 위해 무작위로 나타난다.그것들은 1960년에 처음 도입되었으며 준랜덤 수열의 한 예다.그들은 1차원 반데르 코퍼트 시퀀스를 일반화한다.

(0, 1) × (0, 1) × (0, 1) in R에 있는2 점을 생성하는 데 사용되는 Halton 시퀀스의 예

2,3 Halton 시퀀스 중 처음 8개 지점

Halton 시퀀스는 coprime 숫자를 기초로 사용하는 결정론적 방법에 따라 구성된다.간단한 예로, 할튼 수열의 한 차원은 2를 기준으로 하고 다른 차원은 3을 기준으로 삼도록 하자.2에 대한 시퀀스를 생성하기 위해서는 먼저 간격(0,1)을 반으로 나눈 다음, 4초, 8초 등으로 나누어 생성한다.

12,
14, 34,
18, 58, 38, 78,
116, 916,...

동등하게, 이 시퀀스의 n번째 숫자는 이진법으로 쓰여지고, 반전되어 소수점 뒤에 쓰여진 n번째 숫자다.이것은 어떤 근거에도 해당된다.예를 들어, 위의 순서의 여섯 번째 요소를 찾기 위해 6 = 1*22 + 1*21 + 0*20 = 110을2 쓰는데, 이 값은 반전되어 소수점 뒤에 배치되어 0.0112 = 0*2-1 + 1*2-2 + 1*2 + 1*2-3 = 3/8을 줄 수 있다.따라서 위의 순서는 다음과 같다.

0.12, 0.012, 0.112, 0.0012, 0.1012, 0.0112, 0.1112, 0.00012, 0.10012,...

3에 대한 시퀀스를 생성하기 위해 간격(0,1)을 3으로 나눈 다음 9, 27을 생성한다.

13, 23, 19, 49, 79, 29, 59, 89, 127,...

페어링하면 단위 사각형에서 일련의 포인트가 나온다.

(12, 13), (14, 23), (34, 19), (18, 49), (58, 79), (38, 29), (78, 59), (116, 89), (916, 127).

표준 Halton 시퀀스는 저차원에서 매우 잘 수행되지만, 높은 프리타임에서 생성된 시퀀스 사이에 상관관계 문제가 지적되어 왔다.예를 들어, 소수점 17과 19로 시작한다면, 처음 16쌍의 점: (½17, ½19), (3/17, 3/19), ... (16/17, 16/19)는 완벽한 선형 상관관계를 가질 것이다.이를 피하기 위해 처음 20개 항목, 즉 선택한 소수점에 따라 미리 정해진 수량을 삭제하는 것이 일반적이다.몇 가지 다른 방법들도 제안되었다.가장 두드러진 해결책 중 하나는 스크램블 할튼 수열로, 표준 수열 구성에 사용되는 계수의 순열을 사용한다.또 다른 해결책은 표준 순서에서 포인트를 건너뛰는 도약대 할튼이다.예를 들어, 각 409번째 지점(Halton 코어 시퀀스에서 사용되지 않는 다른 소수도 가능)만 사용하면 상당한 개선을 달성할 수 있다.[1]

실행

유사 코드:

알고리즘 Halton-Sequence은 입력:나는 기지 b{\displaystyle b}출력{\displaystyle 나는}지수:결과 r{r\displaystyle}f← 1{\displaystyle f\leftarrow 1}r← 0{\displaystyle r\leftarrow 0}는 동안 나는입니다.;f/b{\displaystyle f\leftarrow f/b}0{\displaystyle i>0}니 f←.     r←+      b) )}i /   {\ i/반환  r}

베이스 b에 대한 Halton 시퀀스의 후속 숫자를 생성하는 대체 구현은 다음 제너레이터 함수(Python)[2]에 제공된다.이 알고리즘은 내부적으로 정수만 사용하므로 반올림 오류에 대해 강력하다.

반항하다 하프톤(b):     """"Halton 시퀀스에 대한 생성기 함수."""     n, d = 0, 1     하는 동안에 진실의:         x = d - n         만일 x == 1:             n = 1             d *= b         다른:             y = d // b             하는 동안에 x <= y:                 y //= b             n = (b + 1) * y - x         양보하다 n / d 

참고 항목

참조

  1. ^ Kocis and Whiten, 1997
  2. ^ Berblinger, Michael; Schlier, Christoph (1991). "Monte Carlo integration with quasi-random numbers: some experience". Computer Physics Communications. 66 (2–3): 157–166. doi:10.1016/0010-4655(91)90064-R. ISSN 0010-4655.