이 질문은 주로 실용적인 소프트웨어 엔지니어링 문제와 관련이 있지만 이론가들이 더 많은 통찰력을 제공 할 수 있는지 궁금합니다.
간단히 말하면, 의사 난수 생성기를 사용하는 Monte Carlo 시뮬레이션이 있으며 동일한 시뮬레이션을 병렬로 실행하는 1000 대의 컴퓨터가 있도록 병렬화하고 싶습니다. 따라서 1000 개의 독립적 인 의사 난수 스트림이 필요합니다.
다음과 같은 속성을 가진 1000 개의 병렬 스트림을 가질 수 있습니까? 여기서 는 모든 종류의 훌륭한 이론적 및 경험적 특성을 가진 매우 유명하고 널리 연구 된 PRNG 여야합니다.
스트림은 단순히 를 사용 하고 에 의해 생성 된 스트림을 1000 스트림으로 분할하면 얻을 수있는 것만 큼 좋을 것 입니다.
스트림에서 다음 숫자를 생성하는 것은 다음 숫자를 생성하는 것만 큼 빠릅니다 .
달리 말해 : "무료"로 여러 개의 독립적 인 스트림을 얻을 수 있습니까?
물론 우리가 단순히 를 사용 하고 항상 999 개의 숫자를 버리고 1을 고르면 반드시 1의 속성을 가지게되지만, 실행 시간에는 요소 1000만큼 잃게됩니다.
간단한 아이디어는 시드 1, 2, ..., 1000과 함께 1000 개의 사본을 사용하는 것입니다. 이것은 확실히 빠르지 만 스트림에 우수한 통계적 속성이 있는지는 분명하지 않습니다.
인터넷 검색 후 예를 들어 다음을 발견했습니다.
SPRNG의 라이브러리는 정확히 이러한 목적을 위해 설계되는 것, 그리고 그것을 지원하는 여러 PRNG도를 .
메르 센 트위스터 는 요즘 인기있는 PRNG 인 것처럼 보이며 여러 스트림을 병렬로 생성 할 수있는 변형에 대한 참조를 발견했습니다.
그러나이 모든 것이 제 연구 분야와는 거리가 멀기 때문에 실제로 최신 기술이 무엇인지, 그리고 이론적으로뿐만 아니라 실제로 어떤 구조가 잘 작동하는지 알 수 없었습니다.
몇 가지 설명 : 나는 어떤 종류의 암호화 속성이 필요하지 않습니다. 이것은 과학적 계산을위한 것입니다. 수십억 개의 난수가 필요하므로 기간의 발전기를 잊을 수 있습니다 .
편집 : 나는 진정한 RNG를 사용할 수 없습니다; 결정적인 PRNG가 필요합니다. 첫째, 디버깅에 많은 도움이되고 모든 것이 반복 가능해집니다. 둘째, 다중 패스 모델을 사용할 수 있다는 사실을 이용하여 예를 들어 중간 값 찾기를 매우 효율적으로 수행 할 수 있습니다 ( 이 질문 참조 ).
편집 2 : @StackOverflow : 클러스터 환경에 대한 의사 난수 생성기 와 밀접한 관련이 있습니다 .