난수에 대한 선형 합동 발생기의 품질


14

다양한 외부 힘에 대해 Langevin 방정식을 시뮬레이션하고 있습니다. C의 출처는 내 결과에 편견 rand()stdlib.h가져올 수 있다고 말하면서 Mersenne Twister를 사용하고 있습니다.

그럼에도 불구하고, 선형 합동 발생기가 시뮬레이션에서 어떤 종류의 오류를 유발할 수 있는지 정확히 알고 싶습니다. 이것들은 내가 시도한 것입니다.

  • 초평면을보기 위해 3D 랜덤 튜플을 생성합니다. 나는 아무것도 볼 수 없습니다.
  • 임의의 숫자로 구성된 큰 벡터의 FFT 수행 Mersenne Twister와의 경우 거의 동일합니다 rand().
  • 브라운 운동의 입자에 대한 등분 원리를 확인합니다. 두 통합 업체의 기대 값에 동의 KE=12kBT자리수 동일한 번호.
  • 그들이 힘 2가 아닌 많은 쓰레기통에 얼마나 잘 들어가는 지 확인하십시오. 둘 다 동일한 질적 결과를 제공하지만 아무도 더 나아지지 않습니다.
  • 브라운 경로를 보면 분명 이견을 볼 수 x=0 . 다시 한 번 운이 없다.
  • 원 안에 점의 분포. 주변에 채워져 있습니다. 그들 모두와 가장 가까운 이웃 사이 (댓글에서 아래의 답변). 이 요지 에서 사용할 수 있으며 필요한 라이브러리를 설치 한 후 Julia 0.5.0으로 실행하십시오 (지침은 요지 참조).

나는 물리적 시뮬레이션의 맥락에서 도입 된 편견을 찾고 있음을 강조하고 싶습니다. 예를 들어, rand()Mersenne Twister는 그렇지 않지만 지금은 그다지 의미가없는 순간에 다 이하 드러 테스트가 얼마나 비참하게 실패 하는지 보았습니다 .

불량 난수 생성기가 어떻게 몬테카를로 (Montecarlo) 시뮬레이션을 파괴하는지에 대한 물리적이고 구체적인 예가 있습니까?

참고 : PRNG와 같은 RANDU것이 얼마나 끔찍한 지 보았습니다 . 나는 무해 해 보이지만 궁극적으로 편견을 유발하는 발전기의 명백한 예는 아닙니다.


1
요청한 예제가 없지만 내 C 프로그램에서 rand () / srand () 대신 drand48 () / srand48 ()을 사용하고 있습니다. 각각의 man 페이지는 사용 된 다른 prng 알고리즘을 문서화하고 (rand의 알고리즘에 대해서는 man random 참조) drand48이 일반적으로 바람직하지만 내 세부적인 이해는 거의 작지 않다고 생각합니다. 플랫폼 전체에서 휴대용 재현성을 보장하려면 C, 2nd Edition, WHPress 등의 Numerical Recipes의 ran1 ()을 코딩하고 Cambridge UP 1992, ISBN 0-521-43108-5, 280 페이지를 작성했습니다. 말할 수는 있지만 정량적으로 테스트하지는 않았습니다.

random () 또는 drand48 () / lrand48 () 사용하십시오 (저는 항상 분자 역학 및 Monte Carlo 시뮬레이션에 후자를 사용하며 꽤 좋습니다). 또한 무작위 시드를 사용하십시오. 이것은 단일 입자 Langevin 방정식의 시뮬레이션에 충분해야합니다.
valerio

우리는 원이 아닌 원주를 사용했습니다.

@PeterShor 수정 해 주셔서 감사합니다. 나는 대답을 업데이트했지만 여전히 운이 없다.
RedPointyJackson

1
@DanielShapero random 및 urandom은 키 생성과 같은 암호화 목적을 위해 암호화 된 안전한 RNG 여야합니다. 그것 의 하드웨어 측면은 리눅스에서 환경 엔트로피를 사용한다는 것입니다. 그것은 하드웨어 가속과 동일하지 않습니다. 몬테카를로 시뮬레이션과 같은 것은 아닙니다.
Kirill

답변:


3

부적절한 RNG로 인한 물리적 시스템의 Monte Carlo 시뮬레이션 실패를 설명하는 흥미로운 참고 문헌은 (LCG를 사용하지 않았지만) 다음과 같습니다.

A. Ferrenberg와 DP Landau. Monte Carlo Simulations : "좋은"난수 생성기의 숨겨진 오류. 물리적 검토 서신 63 (23) : 3382-3384, 1992.

Ferrenberg와 Landua가 연구 한 Ising 모델은 RNG에 대한 훌륭한 테스트입니다. (2 차원 문제의 경우) 정확한 솔루션과 비교하고 숫자에서 벗어나는 오류를 찾을 수 있기 때문입니다. 이러한 모델은 구식 32 비트 산술 PMMLCG에서 오류를 너무 어렵게 보여 주어야합니다.

또 다른 흥미로운 참조는 다음과 같습니다.

H. Bauke와 Stephan Mertens. Pseudo Random Coin은 꼬리보다 더 많은 머리를 보여줍니다. arXiv : cond-mat / 0307138 [cond-mat.stat-mech]

Bauke와 Mertens는 이진 선형 피드백 시프트 레지스터 스타일 난수 생성기에 대해 강력한 사례를 제시합니다. Bauke와 Mertens는 이와 관련된 다른 논문을 가지고 있습니다.

3D 산점도에서 Marsaglia 평면을 찾기가 어려울 수 있습니다. 플롯을 회전하여 더 잘 볼 수 있으며 때로는 눈에 띄게 나타납니다. 구형 32 비트 LCG에 대해 통계적 균일성에 대한 3D 테스트를 수행 할 수도 있습니다. 예를 들어, 3 차원으로 20x20x20 격자의 빈을 갖는 균일 성 시험은 m = 2 ^ 31-1, a = 7 ^ 5를 갖는 널리 사용되는 (및 이전에 잘 알려진) PMMLCG에 대한 균일 성의 결여를 검출하기에 충분하다.


1

어떤 테스트 가 실패 했는지 확인 하기 위해 TestU01 PRNG 테스트 스위트 를 사용할 수 있습니다 . ( 테스트 스위트에 대한 개요는 TestU01 : 난수 생성기의 경험적 테스트를위한 AC 라이브러리를 참조하십시오 .) 이는 자신의 Monte Carlo 시뮬레이션을 만드는 것보다 쉽습니다. 어떤면에서 그것은 소프트웨어 구성 성 (그리고 소프트웨어 정확성)에 관한 문제이기도합니다. PRNG가 작고 간단한 테스트에서 잘 작동하는 것처럼 보이면 병리학 적 행동이 더 큰 프로그램에 의해 유발되지 않는다는 것을 어떻게 알 수 있습니까?rand

코드는 다음과 같습니다.

#include "TestU01.h"

int main() {
  // Same as rand() on my machine
  unif01_Gen* gen = ulcg_CreateLCG(2147483647, 16807, 0, 12345);

  bbattery_SmallCrush(gen);
  bbattery_Crush(gen);

  return 0;
}

를 들어 SmallCrush의 스위트, 15 밖으로 실패 3 개 시험이있다 (참조 guidelongtestu01.pdf 긴 설명과 모든 참조를 TestU01의를,이 10 개 테스트에서 15 개 통계이다).

  • n tdtdI1,{나는제이+1나는제이}

  • [0,1)tdt

  • MaxOft : 생성합니다.t[0,1)XnP(X<x)=xtn=2×106t=6χ2<10300

이것들이 모두 "일반적인"몬테카를로 시뮬레이션이라고 가정하면 (이것은 생각했던 문제와 같지 않을 수도 있지만) 결론은 rand알려지지 않은 부분 집합에 실패 한다는 결론입니다 . 왜 그것이 왜 그 하위 집합인지는 모르겠습니다. 그래서 그것이 자신의 문제에서 작동하는지 여부를 말할 수는 없습니다.

MaxOft 는 설명이 얼마나 간단한 지 감안할 때 특히 의심 스러워 보입니다.

Crush Suite 의 테스트 중 rand140 개 중 51 개가 실패했습니다 (96 개 테스트에서 140 개 통계). Fourier3 와 같은 일부 실패한 테스트 는 비트 문자열에서 수행되므로 아마도 관련이 없을 수도 있습니다. 실패한 또 다른 흥미로운 테스트는 GCD입니다 .이 테스트는 두 개의 임의 정수의 GCD 분포를 테스트합니다. (또,이 특정 테스트가 실패한 이유나 시뮬레이션으로 인해 어려움을 겪을 지 모르겠습니다.)

PS : 아직 주에 다른 것은 즉 rand()성공적으로 모든 통과 일부 PRNG는보다 실제로 느립니다 SmallCrush , 호감 , BigCrush의 같은 테스트, MRG32k3a를 (위의 L' Ecuyer & Simard 종이 참조).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.