2011-01-13 4 views
23

randn 의사 난수 생성기를 사용하는 경우 몇 가지 테스트를 수행해야합니다. 어떻게하면 시드를 직접 설정할 수 있습니까?이 테스트를 실행할 때마다 동일한 결과가 나타납니다. (예, 좀 이상하게 들리지만 그게 문제입니다).의사 난수 생성기에 대한 사용자 지정 시드를 설정하는 방법

seed 속성을 가진 RANDSTREAM 개체를 찾았지만 읽기 전용입니다. 발전기를 시딩 할 때 사용할 수있는 방법이 있습니까?

+6

아니요, 이상하지 않습니다. 테스트와 디버깅을 위해서는 실제로 상당히 중요합니다. – Jonas

+0

@Jonas, 그래, 특히 결과의 반복성에 관해서라면 ... – Gacek

+0

반대의 경우 즉, Matlab을 다시 시작할 때마다 반복성을 피하기 위해 명령은 ['rng ('shuffle')'] (http://mathworks.com/help/matlab/ref/rng.html). 현재 시간을 기준으로 시드를 설정합니다. –

답변

24

그 일의 옛날 방식 :

randn('seed',0) 

새로운 방법 : 당신이 randrandn주 같은 스트림 새로운 방법을 사용하는 경우

s = RandStream('mcg16807','Seed',0) 
RandStream.setDefaultStream(s) 

참고 호출하는 경우 그래서 둘 다 이전 방법 (별도의 생성기가 있음)에 비해 다른 숫자가 생성 될 수 있습니다. 이 방법 (및 레거시 코드)에서는 이전 방법이 계속 지원됩니다.

자세한 내용은 http://www.mathworks.com/help/techdoc/math/bsn94u0-1.html을 참조하십시오.

+0

은 매력처럼 작동합니다, 감사합니다! – Gacek

+1

링크에는 이제 'rng'기능을 사용하는 2011a 버전이 표시됩니다. – Debilski

+8

또한'RandStream.setDefaultStream' 대신'RandStream.setGlobalStream'을 사용하는 것이 좋습니다. 외관상으로는 그것은 장래 버전에있는 그 기능을 대체 할 것이다. – Brandon

9

rng(mySeed)을 호출하여 전역 스트림 (Matlab R2011b에서 테스트 됨)의 시드를 설정할 수 있습니다. 이는 rand, randnrandi 기능에 영향을줍니다.

same page that James linked to은 여러 가지 오래된 방법 (표의 오른쪽 열의 가운데 셀 참조) 대신 권장되는 방법으로이 목록을 나열합니다.

 
format long;    % Display numbers with full precision 
format compact;   % Get rid of blank lines between output 
mySeed = 10; 
rng(mySeed);    % Set the seed 
disp(rand([1,3])); 
disp(randi(10,[1,10])); 
disp(randn([1,3])); 
disp(' '); 
rng(mySeed);    % Set the seed again to duplicate the results 
disp(rand([1,3])); 
disp(randi(10,[1,10])); 
disp(randn([1,3])); 

출력은 다음과 같습니다 : 당신은 단지 몇 가지 알려진 상태로 RNG를 재설정 할 때

 
    0.771320643266746 0.020751949359402 0.633648234926275 
    8  5  3  2  8  2  1  7 10  1 
    0.060379730526407 0.622213879877005 0.109700311365407 

    0.771320643266746 0.020751949359402 0.633648234926275 
    8  5  3  2  8  2  1  7 10  1 
    0.060379730526407 0.622213879877005 0.109700311365407 
2
mySeed=57; % an integer number 
rng(mySeed,'twister') %You can replace 'twister' with other generators 
+0

Thx. 이것을 투표하십시오! –

0

, 그냥 사용

seed = 0; 
randn('state', seed); 
rand ('state', seed); 
A = round(10*(rand(1,5))); // always will be [10 2 6 5 9] 
여기

몇 가지 예제 코드입니다
관련 문제