2017-11-08 11 views
0

GSL에는 많은 랜덤 생성기가 있습니다. 예를 들어, 최대 등거리 분산 Tausworthe 생성기의 구현은 gsl/taus.c에 위치합니다. 랜덤 씨앗은 다음 함수에서 설정 : 그들은 여섯 "워밍업"필요 왜난수 발생기에서 워밍업의 역할은 무엇입니까?

static inline unsigned long 
taus_get (void *vstate) 
{ 
    taus_state_t *state = (taus_state_t *) vstate; 

#define MASK 0xffffffffUL 
#define TAUSWORTHE(s,a,b,c,d) (((s &c) <<d) &MASK)^((((s <<a) &MASK)^s) >>b) 

    state->s1 = TAUSWORTHE (state->s1, 13, 19, 4294967294UL, 12); 
    state->s2 = TAUSWORTHE (state->s2, 2, 25, 4294967288UL, 4); 
    state->s3 = TAUSWORTHE (state->s3, 3, 11, 4294967280UL, 17); 

    return (state->s1^state->s2^state->s3); 
} 

static void 
taus_set (void *vstate, unsigned long int s) 
{ 
    taus_state_t *state = (taus_state_t *) vstate; 

    if (s == 0) 
    s = 1;  /* default seed is 1 */ 

#define LCG(n) ((69069 * n) & 0xffffffffUL) 
    state->s1 = LCG (s); 
    state->s2 = LCG (state->s1); 
    state->s3 = LCG (state->s2); 

    /* "warm it up" */ 
    taus_get (state); 
    taus_get (state); 
    taus_get (state); 
    taus_get (state); 
    taus_get (state); 
    taus_get (state); 
    return; 
} 

내 질문은? 워밍업이 없다면 어떤 문제가 있습니까?

답변

1

6은 임의의 숫자 일 가능성이 큽니다. 랜덤 성이 충분하지 않고 크기가 크지 않아 시작이 느려지 지 않도록 작게는 안됩니다.

게시 한 코드에 언급 된 문서에는 언급이 없습니다. 또 다른 논문 (http://www0.cs.ucl.ac.uk/staff/d.jones/GoodPracticeRNG.pdf)에서는 난수 생성기의 "예열"에 대한 필요성을 논의합니다.

기본적으로 "시드 값의 엔트로피가 매우 낮을 때"사용됩니다. 이 토론은 참조 된 논문 9 페이지에 있습니다.

+0

이 신문은 매우 감사합니다. –