第2章-伪随机数的产生.ppt

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

**9-*第2章伪随机数的产生智能优化

IntelligentOptimization一、伪随机数1.随机数是各种智能算法中必不可少的一个基本要素;2.计算机不能产生真正的随机数,故称伪随机数;3.虽然各种编程语言都提供了伪随机数发生函数,但是发生的随机序列长度不足,并且不易实现程序员自我控制;4.最常用的是服从0-1均匀分布的伪随机数,经适当计算可产生服从正态分布的伪随机数,其他分布也可以通过逆变换产生。二、乘同余法产生0-1均匀分布的伪随机数1.高质量伪随机数特点(1)随机性强,序列均匀;(2)非重复序列尽可能长;(3)产生速度快,资源占用少。二、乘同余法产生0-1均匀分布的伪随机数2.0-1均匀分布函数设X是0-1区间内服从均匀分布的随机变量,x是X的一个取值,x∈U(0,1),则X的分布函数和X的密度函数:二、乘同余法产生0-1均匀分布的伪随机数3.乘同余法Sk+1=ASkmod(M)A——整常数Sk——第k个随机数Sk+1——第k+1个随机数M——一个大模数数论理论可证明:对于模数M=2L,当A=8k±3或A=4k+1(k为正整数)且S0为奇数时,可以获得最长随机数序列长度为2L-2。二、乘同余法产生0-1均匀分布的伪随机数例子:L=6,M=64,A=13,S0=1,可计算得到1~M之间非重复长度达到24=16的均匀分布伪随机序列。{1,13,41,21,17,29,57,37,33,45,9,53,49,61,25,5,1}二、乘同余法产生0-1均匀分布的伪随机数4.混合同余法可产生比上述方法更长的服从均匀分布的随机数序列。Sk+1=(ASk+C)mod(M)数论理论可证明:对于模数M=2L,当A=4k+1(k为正整数)且C、M互质时,可以获得最长随机数序列长度为2L。二、乘同余法产生0-1均匀分布的伪随机数5.从随机数Si到服从[0,1]分布的x∈U(0,1)随机数xi=Si/M若需要[a,b]之间均匀分布,则yi=a+(b-a)xi三、产生正态分布伪随机数的方法1.设X服从N(0,1)正态分布,则其分布函数和密度函数三、产生正态分布伪随机数的方法2.从一组服从均匀分布U(0,1)的随机变量可以产生服从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),令三、产生正态分布伪随机数的方法则z~N(0,1)把μx,σx代入上式,得:取yi为独立的同为0,1均匀分布的随机变量的样本,则此时μ=1/2,σ=1/2√3,代入上式:此式可计算出服从正态0,1分布的随机数序列z∈N(0,1)。若需要产生服从N(μ,σ2)的随机数,则先产生z∈N(0,1),再按照公式x=μ+σz计算得到。四、产生其他内部随机数的逆变法参见教材五、C#中随机数的产生.netFramework中提供了一个专门产生随机数的类System.Random,编程过程中可以直接使用。计算机生成的随机数字称为伪随机数,它是以相同的概率从一组有限的数字中选取的。用两种方法初始化一个随机数发生器:方法一:不指定随机种子,系统自动选取当前时间作随机种子Randomra=newRandom();x=ra.Next();方法二:指定一个int型的参数作为随机种子intiSeed=6;Randomra=newRandom(iSeed);五、C#中随机数的产生实例1:分别返回不同的随机数doublex;Randomra=newRandom();//Randomra=newRandom(unchecked((int)DateTime.Now.Ticks));for(intj=0;j10;j++){x=ra.NextDouble();//返回一个0.0-1.0之间的随机数x=ra.Next();//返回一个0-2,147,483,647的数2^31x=ra.Next(20);//返回一个0-20之间的随机数x=ra.Next(50,70);//返回一个50-70之间的随机数Console.WriteLine(x

文档评论(0)

好文精选 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档