시뮬레이션을 위해 boost mt19937 구현을 사용하고 있습니다.부스터 Mersenne Twister : 두 개 이상의 값으로 시드하는 방법?
시뮬레이션은 재생성이 가능해야하며 이는 나중에 RNG 시드를 저장하고 잠재적으로 재사용한다는 의미입니다. 씨앗에 대한 외부 소스가 필요하고 난수의 특정 보장 때문에가 아니기 때문에 저는 시드 암호를 생성하기 위해 Windows 암호화 API를 사용하고 있습니다. 모든 시뮬레이션 실행 결과에는 RNG 시드를 포함하는 메모가 있습니다. 따라서 씨앗은 비교적 짧아야합니다. 다른 한편, 시뮬레이션 분석의 일환으로 몇 가지 실행을 비교해 보겠습니다. 그러나 이러한 실행이 실제로 다르다는 것을 확인하려면 다른 시드를 사용해야합니다. 따라서 시드가 길어야합니다. 우발적 인 충돌을 피하기에 충분합니다..
필자는 64 비트의 시딩으로 충분하다고 판단했습니다. 충돌 가능성은 약 2^32 회 실행 후 50 %에 도달합니다. 그 확률로 인해 발생하는 평균 오류가 저에게는 거의 미치지 않습니다. 단지 32 비트의 시드를 사용하는 것은 까다 롭습니다. 충돌의 기회는 2^16의 달리기 후에 이미 50 %에 이릅니다. 그건 내 취향에 맞지 않을 것 같아.
불행히도, 부스트 구현은 전체 상태 벡터 - 멀리, 너무 길다 - 또는 하나의 32 비트 부호없는 long으로 시드한다 - 이상적이지 않다.
전체 상태 벡터보다 작지만 32 비트 이상으로 생성기를 시드하려면 어떻게해야합니까? 나는 단지 벡터 패딩을 시도하거나 상태 벡터를 채우기 위해 씨앗을 반복하려했지만, 결과를 간략하게 보여도 그 결과가 좋지 않음을 보여줍니다.
현재 상태를 얻고 수정하십시오. – kennytm
충돌 계산이 정확하지 않습니다. 예를 들어, 64 비트 시드의 경우 77163! = 65536이 실행 된 후 복제 확률은> 0.5입니다. – user168715
충돌 수학은 단지 대략적인 근사값입니다. 64 비트 시드가 아닌 32 비트 시드를 의미한다고 가정합니다. –