정확히 동일한 랜덤 숫자들을 재현하는 방법

random
script
seed

#1

이번 토픽은 아래 KX 컨텐츠를 번역하여 작성되었습니다.
How to reproduce exact values of random numbers by @mbenes

어떤 응용분야(applications)의 시뮬레이션 개체(objects)는 숫자를 랜덤하게 생성시키는 방법을 이용하는 것이 유용할 수도 있습니다. 일례로, 개체 라이브러리(object library)에서 가용할 수 있는 다양한 크기를 갖는 입자들의 랜덤한 분포를 들 수 있습니다. 다른 한편으로, 관련있는 스크립트나 시뮬레이션을 각각 실행시킬 때마다 랜덤한 분포가 달라지는 것이 바람직하지 않은 경우도 있을 것입니다.

예를 들면, 다음의 명령어는 1과 10사이의 랜덤 숫자를 만들 것 입니다.

x=rand(1,10);

그럼에도 불구하고 rand() 명령어는 재현하기 힘든 랜덤 숫자를 항상 발생시킬 것입니다.

이에 대한 해결책은 randreset(seed) 명령어를 rand() 명령어와 함께 활용하는 것입니다. 이 명령어는 랜덤 기능의 시드 값(seed value)과 rand()를 리셋합니다. 이 기능은 다음 예제에서 보는 바와 같이 주어진 시드 값에 대해서 정확게 동일한 랜덤 숫자들의 배열(sequence)이 항상 생성됩니다.

seed=10;
for (i=1:3) {
randreset(seed);
?r=rand(1,10);
?r=rand(1,10);
?r=rand(1,10);
}

위 코드는 3개 세트의 정확하게 일치하는 랜덤 숫자들을 화면에 출력합니다. 만약에 randreset() 라인이 삭제된다면, 단순히 9개의 랜덤 숫자들을 화면에 출력하게 됩니다. 추가적으로, 다른 시드 값은 다른 배열의 랜덤 숫자를 생성시키게 됩니다.