第2章 伪随机数的产生

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 f(x) = 0
0 ≤ x <1 其它
9-4
二、乘同余法产生0-1均匀 乘同余法产生 均匀 分布的伪随机数
3. 乘同余法
Sk+1=ASk mod (M) A——整常数 整常数 Sk——第k个随机数 第 个随机数 Sk+1——第k+1个随机数 第 个随机数 M——一个大模数 一个大模数 数论理论可证明:对于模数M=2L,当A=8k±3或 数论理论可证明:对于模数 ± 或 为奇数时, A=4k+1(k为正整数)且S0为奇数时,可以获得 为正整数) ( 为正整数 最长随机数序列长度为2 最长随机数序列长度为 L-2。
9-7
二、乘同余法产生0-1均匀 乘同余法产生 均匀 分布的伪随机数
5. 从随机数 i到服从 从随机数S 到服从[0,1]分布的 ∈U(0,1)随 分布的x∈ 分布的 随 机数 xi=Si/M 若需要[a,b]之间均匀分布, 之间均匀分布, 若需要 之间均匀分布 则yi=a+(b-a)xi
9-8
三、产生正态分布伪随机数 的方法
9-11
四、产生其他内部随机数的 逆变法
参见教材
9-12
五、C#中随机数的产生 中随机数的产生
.net Framework中提供了一个专门产生随机数的类 中提供了一个专门产生随机数的类System.Random, 中提供了一个专门产生随机数的类 , 编程过程中可以直接使用。 编程过程中可以直接使用。 计算机生成的随机数字称为伪随机数, 随机数字称为伪随机数 计算机生成的随机数字称为伪随机数,它是以相同的概率从一组有 限的数字中选取的 限的数字中选取的。 两种方法初始化一个随机数发生器: 用两种方法初始化一个随机数发生器: 方法一:不指定随机种子, 方法一:不指定随机种子,系统自动选取当前时间作随机种子 Random ra=new Random(); x=ra.Next(); 方法二:指定一个int型的参数作为随机种子 方法二:指定一个 型的参数作为随机种子 int iSeed=6; Random ra=new Random(iSeed);
z = x − µ
σ
x
x
9-10
三、产生正态分布伪随机数 的方法
则z~N(0,1) 代入上式, 把µx,σx代入上式,得: , 代入上式
z =

n
y
i = 1
i

2
n µ
n σ
为独立的同为0,1均匀分布的随机变量的样本 均匀分布的随机变量的样本, 取yi为独立的同为 均匀分布的随机变量的样本,则此时 µ=1/2, σ=1/2√3, n y − ∑ 代入上式: 代入上式: 2
智能优化 Intelligent Optimization
Hale Waihona Puke Baidu
第2章 伪随机数的产生
一、伪随机数
1.随机数是各种智能算法中必不可少的一个基 . 本要素; 本要素; 2. 计算机不能产生真正的随机数,故称伪随机 计算机不能产生真正的随机数, 数; 3. 虽然各种编程语言都提供了伪随机数发生函 但是发生的随机序列长度不足, 数,但是发生的随机序列长度不足,并且不 易实现程序员自我控制; 易实现程序员自我控制; 4. 最常用的是服从 均匀分布的伪随机数,经 最常用的是服从0-1均匀分布的伪随机数 均匀分布的伪随机数, 适当计算可产生服从正态分布的伪随机数, 适当计算可产生服从正态分布的伪随机数, 其他分布也可以通过逆变换产生。 其他分布也可以通过逆变换产生。
1. 设X服从 服从N(0,1)正态分布,则其分布函数和 正态分布, 服从 正态分布 密度函数
F( x ) = 1 2π

x
−∞
e
t2 − 2
dt
f (x) =
1 e 2π
x2 − 2
9-9
三、产生正态分布伪随机数 的方法
2. 从一组服从均匀分布 (0,1)的随机变量 从一组服从均匀分布U( ) 可以产生服从0-1正态分布的随机数 可以产生服从 正态分布的随机数 个独立同分布的随机变量, 若Y1,Y2,…,Yn是n个独立同分布的随机变量, 个独立同分布的随机变量 足够大时, 当n足够大时,随机变量 足够大时 随机变量X=Y1+Y2+.…+Yn就 服从正态分布。 的均值和方差分别是 服从正态分布。X的均值和方差分别是 µx=µ1+µ2+…+µn=nµ,σx=σ1+σ2+…+σn=nσ2 , 即X~N(nµ,nσ2),令 ,
9-13
五、C#中随机数的产生 中随机数的产生
实例1 实例1: 分别返回不同的随机数 double x; Random(); Random ra = new Random(); //Random //Random ra = new Random(unchecked((int)DateTime.Now.Ticks)); (int for (int j = 0; j < 10; j++) { ra.NextDouble();//返回一个 返回一个0.0 x = ra.NextDouble();//返回一个0.0 -1.0 之间的随机数 //返回一个 2,147,483,647的数 返回一个0 的数2^31 x = ra.Next(); //返回一个0-2,147,483,647的数2^31 ra.Next(20);//返回一个 20之间的 返回一个0 之间的随机数 x = ra.Next(20);//返回一个0-20之间的随机数 ra.Next(50,70);//返回一个50-70之间的 返回一个50 之间的随机数 x = ra.Next(50,70);//返回一个50-70之间的随机数 Console.WriteLine("x={0}\ .WriteLine("x={0} Console.WriteLine("x={0}\n", x); }
9-5
二、乘同余法产生0-1均匀 乘同余法产生 均匀 分布的伪随机数
例子: 例子:L=6,M=64,A=13,S0=1,可计算得 , 之间非重复长度达到2 到1~M之间非重复长度达到 4=16的均 之间非重复长度达到 的均 匀分布伪随机序列。 匀分布伪随机序列。 {1,13,41,21,17,29,57,37,33,45,9,53,49,61 ,25,5,1}
9-6
二、乘同余法产生0-1均匀 乘同余法产生 均匀 分布的伪随机数
4. 混合同余法 可产生比上述方法更长的服从均匀分布的 随机数序列。 随机数序列。 Sk+1=(ASk+C) mod (M) ( ) 数论理论可证明:对于模数M=2L,当 数论理论可证明:对于模数 A=4k+1(k为正整数)且C、M互质时,可 为正整数) 互质时, ( 为正整数 、 互质时 以获得最长随机数序列长度为2 以获得最长随机数序列长度为 L。
n
z
=
i =
i
1
n 1 2
此式可计算出服从正态0,1分布的随机数序列 ∈ 此式可计算出服从正态 分布的随机数序列z∈N(0,1)。 分布的随机数序列 。 若需要产生服从N(µ, σ2)的随机数,则先产生 ∈N(0,1), 的随机数, 若需要产生服从 的随机数 则先产生z∈ , 再按照公式x=µ+σz计算得到。 计算得到。 再按照公式 计算得到
9-14
五、C#中随机数的产生 中随机数的产生
实例2 实例2: 产生一个随机数组 int[] int[10]; int[] arr = new int[10]; int i; //初始化数组 //初始化数组 for (i = 0; i < 10; i++) {arr[i] = i;} //随机数 //随机数 Random(); Random ra = new Random(); j---) for (int j = 9; j >=0; j--) { int address = ra.Next(j); int tmp = arr[address]; arr[address] = arr[j]; arr[j] = tmp; }
9-2
二、乘同余法产生0-1均匀 乘同余法产生 均匀 分布的伪随机数
1. 高质量伪随机数特点 (1)随机性强,序列均匀; )随机性强,序列均匀; (2)非重复序列尽可能长; )非重复序列尽可能长; (3)产生速度快,资源占用少。 )产生速度快,资源占用少。
9-3
二、乘同余法产生0-1均匀 乘同余法产生 均匀 分布的伪随机数
9-15
思考题
1、2、3 、 、
9-16
2. 0-1均匀分布函数 均匀分布函数 区间内服从均匀分布的随机变量, 设X是0-1区间内服从均匀分布的随机变量, 是 区间内服从均匀分布的随机变量 x是X的一个取值,x∈U(0,1),则X的分布 的一个取值, ∈ 是 的一个取值 , 的分布 函数和X的密度函数 的密度函数: 函数和 的密度函数:
0 F( x) = x 1 x < 0 0 ≤ x <1 x ≥1
相关文档
最新文档