2012-06-02 2 views
0

나는 300 개 중에서 선택하는 약 1 억 개의 난수를 생성 중입니다. 각자 10 번을 선택하는 1,000 만 개의 독립 인스턴스 (다른 시드)를 갖도록 설정해야합니다. 목표는 집계 결과가 매우 낮은 불일치를 갖는 것입니다. 각 항목은 동일한 횟수만큼 선택됩니다.랜덤 제너레이터의 여러 인스턴스를 결합했지만 낮은 불일치를 여전히 유지

문제는 일반 prng에서 발생하며, 일부 숫자는 다른 숫자보다 많이 선택됩니다. (lcg 및 mersenne 트위스터 시도) 가장 많이 고른 것과 가장 많이 선택하지 않은 것의 차이는 수천에서 수천 개까지 될 수 있습니다.) 선형 일치 생성기와 메르 센 트위스터를 사용하면 1 인스턴스로 1 억 번을 선택해도 시도하지 않았습니다. 일관된 결과. 저는이 기간이 매우 길어서 아마도 1 억 명이 충분히 크지 않기 때문이라고 추측합니다. 이론적으로, 충분한 수를 골라 내면 결과는 균일하게됩니다. (예상 값으로 안정되어야 함)

준 의사 생성기 인 Sobol으로 전환하여 1 인스턴스 테스트에서 1 억 개로 훨씬 좋은 결과를 얻었습니다. (가장 많이 뽑은 것과 가장 많이 뽑히지 않은 것의 차이는 약 5입니다.) 그러나 각각 10 배씩 1,000 만 개까지 나누면 균일 성이 사라지고 prng와 비슷한 결과를 얻었습니다. Sobol은 시퀀스에 매우 민감한 것처럼 보입니다. 앞으로 건너 뛰면 무작위로 균일 성이 줄어 듭니다.

1 천만 개의 독립 인스턴스를 결합 할 때도 유사 차이가 낮은 불규칙성을 유지할 수있는 임의의 생성기 클래스가 있습니까? 아니면 이론적으로 불가능한가요? 내가 지금 생각할 수있는 한 가지 해결책은 1 천만 인스턴스에서 공유되는 1 대의 Sobol 생성기를 사용하는 것이므로 실제로 1 인스턴스 테스트에서 1 억 번과 동일합니다.

+0

완벽한 균일 성을 원한다면 [shuffle] (http://en.wikipedia.org/wiki/Fisher-Yates_shuffle) 변형을 사용하지 않을까요? 논리적으로는, 각 값의 100million/300 copies로 채워진 벡터로 시작한 다음, 그것을 섞는다. (분명히 1 억 명이 정확히 300으로 나눠지지는 않지만 ...) –

+0

글쎄, 목표는 각각 10 개의 값을 갖는 1000 만 개의 인스턴스를 가지며 (300 개의 아이템에서 무작위로 선택됨), 여전히 집계 레벨에서 일관성을 유지하는 것입니다. 셔플 링은 1 인스턴스에서 완료되면 일관성을 유지하지만 1 천만 개의 독립 인스턴스에서 수행되는 경우 불일치 문제가 발생할 수 있습니다. – user1432577

+0

정말 많은 RNG 인스턴스가 필요한가요? 아니면 하나의 RNG 만 사용하고 10e6 버킷에서 라운드 로빈 방식으로 출력을 배포 할 수 있습니까? - 게다가 : RNG 출력을 [0,299]의 필요한 범위에 어떻게 맵핑합니까? 단순 모듈러스 연산은 [0, n x 300] 범위에서 출력 단어를 기본적으로 생성하지 않는 모든 RNG의 일부 바이어스를 확실히 유발합니다. – JimmyB

답변

0

소볼의 셔플과 적절한 사용은 원하는대로 균일 성을 제공해야합니다. 셔플 링은 집계 레벨에서 수행해야합니다 (원하는 집계 빈도를 갖는 전역 100M 샘플부터 시작하여 무작위성을 도입하기 위해 임의로 혼합 한 다음 최종적으로 10 가지 값 인스턴스로 분할합니다. 각 인스턴스 내에서 셔플 링은 전체적으로 도움이되지 않습니다) .

그러나 이것은 추가 수준의 균일 성입니다. 실제로는 필요하지 않을 수도 있습니다. 임의성으로 충분할 수 있습니다. 우선, 충분한 샘플을 가지고 상당한 편차를 얻는 이상한 소리가 나기 때문에 (수표 "chi square test"를 확인하거나 상당수의 "충분"샘플을 등량으로 계산하는 등) 자체를 검사합니다. 따라서 첫 번째 안전성 검사의 경우 : 독립 값을 선택하는 경우 10 개 인스턴스 중 2 개 카테고리를 10 개 선택하면 다르게 단순화됩니다. 대략 이항 분포를 얻습니까? 독점적 인 따기를 위해서 그것은 다른 분포 (초고속 iirc, 그러나 점검 할 필요가 있음)입니다. 그런 다음 더 많은 범주 (다항 분포)로 일반화하고 나중에 문제를 진행하는 것이 안전합니다.

관련 문제