나는 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 억 번과 동일합니다.
완벽한 균일 성을 원한다면 [shuffle] (http://en.wikipedia.org/wiki/Fisher-Yates_shuffle) 변형을 사용하지 않을까요? 논리적으로는, 각 값의 100million/300 copies로 채워진 벡터로 시작한 다음, 그것을 섞는다. (분명히 1 억 명이 정확히 300으로 나눠지지는 않지만 ...) –
글쎄, 목표는 각각 10 개의 값을 갖는 1000 만 개의 인스턴스를 가지며 (300 개의 아이템에서 무작위로 선택됨), 여전히 집계 레벨에서 일관성을 유지하는 것입니다. 셔플 링은 1 인스턴스에서 완료되면 일관성을 유지하지만 1 천만 개의 독립 인스턴스에서 수행되는 경우 불일치 문제가 발생할 수 있습니다. – user1432577
정말 많은 RNG 인스턴스가 필요한가요? 아니면 하나의 RNG 만 사용하고 10e6 버킷에서 라운드 로빈 방식으로 출력을 배포 할 수 있습니까? - 게다가 : RNG 출력을 [0,299]의 필요한 범위에 어떻게 맵핑합니까? 단순 모듈러스 연산은 [0, n x 300] 범위에서 출력 단어를 기본적으로 생성하지 않는 모든 RNG의 일부 바이어스를 확실히 유발합니다. – JimmyB