一种生成随机数的方法技术

技术编号:20545401 阅读:137 留言:0更新日期:2019-03-09 18:21
本发明专利技术公开了一种生成随机数的方法,属于计算机领域。所述生成随机数的方法为区间算法在有限精度整数运算条件下的一种改进算法,其主要的改进包括输出区间的隐性分割方法和输出区间的3子区间重正化方法。该方法完全消除了区间算法输出区间分割的舍入误差问题,同时也极大地缓解了输入区间分割的舍入误差问题,从而基本解决了有限精度运算导致区间算法输出随机数质量下降的问题,实现了在有限精度整数运算条件下将任意给定概率分布的输入数据以精确或接近精确的方式转换为任意指定概率分布的随机数。

A Method of Generating Random Numbers

The invention discloses a method for generating random numbers, which belongs to the field of computer. The method of generating random number is an improved algorithm of interval algorithm under the condition of integer operation with limited precision. The main improvements include the implicit segmentation method of output interval and the 3-subinterval renormalization method of output interval. This method completely eliminates the rounding error of the output interval segmentation of the interval algorithm, and also greatly alleviates the rounding error of the input interval segmentation, thus basically solves the problem that the quality of the output random number of the interval algorithm decreases due to the finite precision operation, and realizes that the input data of any given probability distribution can be accurately or approximated under the condition of the finite precision integer operation. The exact method is converted to random numbers with arbitrary specified probability distribution.

【技术实现步骤摘要】
一种生成随机数的方法
本专利技术涉及计算机领域,特别涉及一种生成随机数的方法。
技术介绍
随机数在计算机仿真和信息安全等领域具有广泛的应用。随机数的质量,即随机数真实分布与目标分布的统计距离,是评价随机数生成方法的重要指标。在信源统计模型已知的条件下,文献[1]提出的区间算法(IntervalAlgorithm)不仅可以生成高质量的随机数,而且生成随机数的效率是各种已知方法中最高的。但原始的区间算法是基于无限精度算术运算的,当使用有限精度算术运算特别是有限精度整数运算时,存在以下问题:1、区间分割的舍入误差问题:分割区间需要进行除法运算,在一般情形下,有限精度的除法运算必然导致舍入误差。提高运算精度是缓解这一问题的常规思路,但无法消除这一问题。2、输入区间跨输出子区间边界的问题:区间算法运行中,会出现输入区间长度很小时仍横跨两个相邻输出子区间的情形,因而无法确定下一个输出的符号,输出区间不能有效地缩小,导致在整体精度限制下输入区间的表示精度恶化,进一步加剧输入区间分割的舍入误差问题。这一问题是无法通过简单提高运算精度来缓解的。舍入误差会直接导致输出随机数的概率分布偏离目标概率分布,即随机数质量下降。所以,如何在有限精度运算下设计具有低舍入误差或零舍入误差的区间算法是区间算法设计的一个关键点。文献[2]在整数运算条件下给出了两种实用的区间算法。一种算法用于将二元等概率独立同分布序列转换为多元任意分布独立同分布序列,另一种算法用于将多元任意分布独立同分布序列转换为二元等概率独立同分布序列。第一种算法利用了输入为二元等概率独立同分布序列的特点,将输入区间长度初始化为2的幂次并将区间的放大因子也设置为2的幂次,从而消除了输入区间分割的舍入误差。但这种方法仅限于特殊输入分布,也无法消除输出区间分割的舍入误差。第二种算法给出了解决输入区间跨输出子区间边界问题的一种方案,但这种方案仅限于输出为二元等概率独立同分布序列。虽然文献[2]之后还出现了一些改进的区间算法(如[3]),但在区间分割的舍入误差问题和一般输出分布条件下输入区间跨输出子区间边界的问题上都没有实质性的进展。综上所述,现有的区间算法还没有很好地解决如何在有限精度运算下设计具有低舍入误差或零舍入误差的区间算法的问题。参考文献:[1]HanTS,HoshiM.Intervalalgorithmforrandomnumbergeneration[J].IEEETransactionsonInformationTheory,1997,43(2):599-611.[2]UyematsuT,LiY.Twoalgorithmsforrandomnumbergenerationimplementedbyusingarithmeticoflimitedprecision[J].IEICETransactionsonFundamentalsofElectronics,CommunicationsandComputerSciences,2003,E86-A(10):2542-2551.[3]JitsumatsuY,MatsumuraK.Aβ-arytobinaryconversionforrandomnumbergenerationusingaβencoder.NonlinearTheoryandItsApplications,IEICE,2016,7(1):35-55.
技术实现思路
本专利技术要解决的技术问题是设计一种在给定精度整数运算条件下运行的区间算法,能将任意给定概率分布的独立同分布序列转换为任意指定概率分布的独立同分布序列,并尽可能消除由于区间分割和输入区间跨输出子区间边界所导致的舍入误差问题。为解决上述问题,本专利技术提供了一种生成随机数的方法。所述技术方案如下:设输入序列为在集合X={0,1}中取值的二元独立同分布随机序列,概率分布为式中a0和a1为互素正整数;设拟输出序列为在X中取值的长度为N的二元独立同分布随机序列,概率分布为式中b0和b1为互素正整数;预设的算法参数包括区间长度底数β(β为大于等于2的整数)和区间长度指数k(k为正整数);步骤一、初始化累计输出长度变量n为0;初始化输入区间端点列表变量I为(0,βk),其中列表是指支持按位置索引元素、插入元素和删除元素的动态数组;初始化输出区间分割端点列表变量J为(0,βk),候选输出序列列表变量K为(λ),其中λ表示长度为0的空字符串;步骤二、若列表K的长度小于3,则根据拟输出序列的概率分布以精确分割区间的方式对输出区间分割端点列表J和候选输出序列列表K进行细化直至列表K的长度等于3,其中,当待细化的输出区间或输出子区间无法精确分割时,则对该区间进行隐性分割,即将该区间分割为两部分但不产生新的候选输出比特,并保证其中较大的一部分是输出概率分布的公分母b0+b1的整数倍,使其在下一次分割时可以获得精确分割;步骤三、计算输入区间分割点式中表示小于等于实数r的最大整数;从输入序列读取一个比特x,若x=0,则更新变量I为列表(I[0],I′),否则更新变量I为列表(I′,I[1]);步骤四、比较输入区间端点列表I和输出区间分割端点列表J,除了保留列表J中与输入区间[I[0],I[1])有交集的子区间的端点以及对应于该子区间的列表K中的候选输出序列,删除列表J和K中的其余所有元素,其中所述列表J中的子区间均为列表J中相邻端点组成的左闭右开区间,所述对应于列表J中某子区间的列表K中的候选输出序列为列表K中与该子区间左端点在列表J中的编号具有相同编号的候选输出序列;步骤五、以输出区间分割端点列表J的左端点J[0]为原点对列表I和J中的所有端点进行重新定位,即将列表I和J中的所有元素减去J[0];步骤六、输出列表K中所有候选序列的最长公共前缀,并将列表K中的所有候选序列更新为其删除所述最长公共前缀后剩余的序列,同时更新累计输出长度变量n为n+m,式中m表示所述最长公共前缀的长度;步骤七、若n<N,则转至步骤二;否则,进入步骤八;步骤八、结束算法,并丢弃超过长度N的n-N比特输出序列。优选地,所述根据拟输出序列的概率分布以精确分割区间的方式对输出区间分割端点列表J和候选输出序列列表K进行细化直至列表K的长度等于3的步骤具体为:a、若候选输出序列列表K的长度为1,则令待细化输出子区间编号i为0;若列表K的长度为2,则令待细化输出子区间编号b、令子区间长度变量l=J[i+1]-J[i],若l≤βk-1,则将输入区间端点列表I和输出区间分割端点列表J中的所有元素都乘以(式中表示大于等于实数r的最小整数),并将变量l更新为l×F;c、若b0+b1整除l,则在列表J的第i+1号位置插入从而将变量J更新为列表(J[0],...,J[i],d,J[i+1],...,J[|J|-1])(其中|J|表示原始列表J的长度),同时删除列表K的第i号元素,即序列s=K[i],并在第i号和第i+1号位置依次插入序列s0和s1(其中s0表示序列s与0的串联,s1表示序列s与1的串联),从而将变量K更新为列表(K[0],...,K[i-1],s0,s1,K[i+1],...,K[|K|-1]);若b0+b1不整除l,则在列表J的第i+1号位置插本文档来自技高网
...

【技术保护点】
1.一种生成随机数的方法,其特征在于,所述方法包括:设输入序列为在集合

【技术特征摘要】
1.一种生成随机数的方法,其特征在于,所述方法包括:设输入序列为在集合中取值的二元独立同分布随机序列,概率分布为式中a0和a1为互素正整数;设拟输出序列为在中取值的长度为N的二元独立同分布随机序列,概率分布为式中b0和b1为互素正整数;预设的算法参数包括区间长度底数β(β为大于等于2的整数)和区间长度指数k(k为正整数);步骤一、初始化累计输出长度变量n为0;初始化输入区间端点列表变量I为(0,βk),其中列表是指支持按位置索引元素、插入元素和删除元素的动态数组;初始化输出区间分割端点列表变量J为(0,βk),候选输出序列列表变量K为(λ),其中λ表示长度为0的空字符串;步骤二、若列表K的长度小于3,则根据拟输出序列的概率分布以精确分割区间的方式对输出区间分割端点列表J和候选输出序列列表K进行细化直至列表K的长度等于3,其中,当待细化的输出区间或输出子区间无法精确分割时,则对该区间进行隐性分割,即将该区间分割为两部分但不产生新的候选输出比特,并保证其中较大的一部分是输出概率分布的公分母b0+b1的整数倍,使其在下一次分割时可以获得精确分割;步骤三、计算输入区间分割点式中表示小于等于实数r的最大整数;从输入序列读取一个比特x,若x=0,则更新变量I为列表(I[0],I′),否则更新变量I为列表(I′,I[1]);步骤四、比较输入区间端点列表I和输出区间分割端点列表J,除了保留列表J中与输入区间[I[0],I[1])有交集的子区间的端点以及对应于该子区间的列表K中的候选输出序列,删除列表J和K中的其余所有元素,其中所述列表J中的子区间均为列表J中相邻端点组成的左闭右开区间,所述对应于列表J中某子区间的列表K中的候选输出序列为列表K中与该子区间左端点在列表J中的编号具有相同编号的候选输出序列;步骤五、以输出区间分割端点列表J的左端点J[0]为原点对列表I和J中的所有端点进行重新定位,即将列表I和J中的所有元素减去J[0];步骤六、输出列表K中所有候选序列...

【专利技术属性】
技术研发人员:杨胜天陈慧霖
申请(专利权)人:浙江工商大学
类型:发明
国别省市:浙江,33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1