Search
🏫

[시뮬레이션] 6. 난수의 발생 및 검정

Tags
CS
Simulation
Last edited time
2024/12/05 14:05
2 more properties
Search
[시뮬레이션] 7. 확률변수와 확률분포
CS
Simulation
2024/12/05 14:10
[시뮬레이션] 7. 확률변수와 확률분포
CS
Simulation
2024/12/05 14:10

난수의 발생

1. 난수 발생 알고리즘

1.1. 예제

알고리즘
Subprogram random(n,U) { n = n * 843314861 + 453816693 if (n < 0) then { n = n + 2147483647 + 1 } U = n * 0.4656612E-9 }
Bash
복사
실행 결과

2. 난수의 성질과 발생법

2.1. 난수의 성질

U[0,1) 일양분포
임의성(random)
상관관계가 없음
반복가능
기억용량, 발생속도

2.2. 중앙 이승법

가운데 값을 활용하여 난수를 생성하는 것
예시)
X0 = 7182
X0^2 = 51,581,124
X1 = 5811
U1 = 0.5811

2.3. 중앙 이승법의 문제점

예측 가능
대수적 방법
0으로 수렴하는 경우 중앙 이승법을 사용하기 어려움

2.4. 합동법: Lehmer의 공식

Xᵢ = aXᵢ₋₁ + c (mod m)
a: 곱수 0 < a < m
c: 증분 0 ≤ c < m
m: 계수 m > 0
X₀: 초기값, 0 ≤ Xᵢ ≤ m-1

2.4. 합동법 최대 주기

Xᵢ = aXᵢ₋₁ + c (mod m)은 다음의 경우 최대 주기를 갖는다.
(m, c) = 1 (서로소)
m과 c는 서로 공통 인수가 없어야 함
q | m → q | (a-1) (q: m의 소수)
m을 q로 나눈다면, q는 a-1로도 나누어져야 한다.
4 | m → 4 | (a-1)
m을 4로 나눈다면, 4는 a-1로도 나누어져야 한다.
예시)

3. 컴퓨터 연산과정

3.1. 컴퓨터 연산 과정

Xᵢ = aXᵢ₋₁ + c (mod m)
m = 2ᵇ을 채택
2³¹ (32bit 머신)
컴퓨터에서 연산을 어떻게하면 효율적으로 빨리 할 수 있을지 고민
overflow 연산 활용

3.2. overflow 연산

overflow 연산
넘칠때 자동으로 짤리는 것이 mod와 똑같음
예시)
연산을 하지 않더라도 16을 나눴을때 오버플로우가 나머지가 됨

3.3. 컴퓨터 연산

컴퓨터 연산
우리가 원하는 것: 2^31로 나눈 나머지
= 31개의 비트로 취한 값
= 나머지

4. 합동법

4.1. 합동법

혼합식 합동법 c ≠ 0 최대주기 m
Xᵢ = aXᵢ₋₁ + c (mod m)
승산식 합동법 c = 0
Xᵢ = aXᵢ₋₁ (mod m)

4.2. 승산식 합동법

점화식
Xᵢ = aXᵢ₋₁ (mod m)
특징
최대주기를 갖지 못함
m = 2ᵇ이면 p ≤ 2ᵇ⁻²
p는 주기
최대주기 m-1 은 가능 (단, m 은 소수)

4.3. 합동법 문제점 Xᵢ = aXᵢ₋₁ + c (mod m)

Xᵢ는 결정적이다 (대수적 방법이므로)
예측 가능하다.
Xᵢ = [ aⁱX₀ + c(aⁱ⁻¹)/(a-1) ] (mod m)
Uᵢ는 유리수인 0, 1/m, 2/m, ..., (m-1)/m 값만 취한다.
무리수는 표현하지 못함
그럼에도 의사난수, 적당한 a, c, m 선택을 선택하여 난수를 선택함
m: 최대값, 검정통과
Pseudo random number

난수의 검정

1. 난수의 χ² 검정 (일양분포)

예시)
각 구간마다 30개씩 고르게 분포되어 있어야 함 (일양분포)
기대값: n/ k = 30 (3000/100)
실제 관측치: Oj

2. 연속형 검정 (d-차원)

2차원, 3차원 등 n 차원의 난수들에 대하여 χ² 검정을 어떻게 할 수 있을지?

3. Runs 검정 (임의성, 상관관계)

골고루 퍼져있더라도 난수와 난수 사이에 상관관계는 없는가?
독립적인가? 임의성인가?