产生随机函数的一种方法

已锁定

云山雾绕

  • 帖子

    2158
  • 精华

    0
  • 被关注

    95

论坛等级:至圣

注册时间:2011-10-05

钻石 钻石 如何晋级?

产生随机函数的一种方法

1322

3

2024-01-01 15:13:21

通常情况下,随机数的产生一般是由相应的随机函数来实现的,比如,数据结构中关于一个数据的存储地址,在各种程序设计语言学习中遇到的随机量的生成,图像处理中遇到的随机色彩的选择等[1],在众多工程应用中此类随机函数显得格外重要。但在实际自动化工程应用中,一般的随机函数在项目的应用中并不能使用,原因在于项目中应用的控制器不具备产生随机函数的功能,但在实现应用中,又需要 “随机”函数,实际工程中,这类应用一般是通过“伪随机函数”来实现的,本文就详细地介绍这种函数产生的方法,并结合实现应用,确认了这种方法的可靠性和随机性。

0    随机数和随机函数

      就随机数而言,一种指此类数据没有规律性。同时随机数可分为真随机和伪随机两种,前者的生成过程必须独立于它的生成函数,所以,即使知道了真随机数序列中的一些数,外界也无法推算序列中的其它数。伪随机数与理想中的真随机数不同,伪随机数是使用一个确定性的算法计算出来的,看似随机的数,伪随机数并不是假随机数,这里的“伪”是有规律的意思,就是计算机产生的伪随机数是按照某种规律产生的。计算机只能产生伪随机数而不能产生绝对随机的随机数。

用来计算伪随机数的函数被称为随机函数。随机函数是一组依赖于一个变动参数t的随机变化的数的总体[2],它是参数t的函数,在任意时刻函数值是随机的,具有一定的概率分布的。本文利用S7-1200的日期函数为种子,以时间T为参数,产生了以一个限定范围,以T为参数的随机数,通过对随机数的处理,应用到取样机的应用中,得到各个区域的随机取样点。

1    S7-1200可编程控制器实现类随机数原理

S7-1200系列CPU自身不带有随机函数,不能从可编程控制器内调用函数来实现,但可编程控制器自带日期和时间函数,利用此类函数与时间的关系,通过数据处理,可以实现实际意义的类随机或者说是伪随机的随机数。其实现的方块图如图1所示。

 

                          

 


 


 


     图1  类随机实现原理图

 

通过上述框图的调用与转换,可编程控制器将一个内部日期转换为一个循环变换的整数,范围为-32768~32767。这里包括负整数,在实现运用中,负整数在随机的范围内,也是有效的数据。

2    自动取样机随机范围的确定方法

在自动取样机中,取样的范围为汽车车箱的区域,此区域为规则长方形,要求在此区域内产随机采样点。这里为6个点。兼于随机的可能性,兼顾项目采样点的分散性要求,确认范围的方法使用在长方形区域内,将车箱平均分为6个区域,在每个区域内产生一个随机点,共6个随机点,以确保车箱内石英砂样本的可靠性。车箱划分如图2所示。



 


 

图2 车箱区域六个点的划分

3    区域内点产生方法

根据要求,在图2中的1-6区域内,以每个区域中心,这里指对角线的交点,以此区域内的长边L/3和宽边W/2为一半,即L/6和W/4为半径的区域内随机产生随机数,随机数产生以可编程控制器产生的日期函数转换了16位整数至-32768~32767的数,通过可编程控制器的转换函数,将上述16位整数转换为[-1,1]之间的数,利用此随机的函数,与车箱单个区域内的长与宽相乘,可以得到一个相对中心点(对角线的交点),随机分布在长与宽方向上的随机点,此点取值范围覆盖整个区域。其它区域产生随机数据的方法类同此区域。如图3所示。


  区域产生的随机点     


  

 

 

 

 

 

 

 

 


图3 单个区域随机点产生

4    软件实现方法



    利用可编程控制器实现以时间为种子的随机数。随机数随时间变化,周期性产生一个范围内数据,实现此类数据的伪随机,相对于真随机,这种伪随机可完全满足工程需要。自动取样机项目中,经过验证,随机数据基本符合随机特点,测试证明此类随机点无重复,不会集中在某一个区域。测试数据如图4(a),4(b)所示。


       图4 (a)T产生的随机数据                图4(b) T后某一时间产生的随机数据

利用S7-1200的CUP1215C产生的软件程序如下:


 

 

利用系统日期功能块RD_SYS_T取得系统日期,经功能块T_CONV两次转换到时间数。

如图5(a)所示。经过T_ADD功能块,以第一个随机数产生时的随机时间种子依次增加t时间,t根据对产生随机数变化快慢增大或缩小,这里依次增加20S来取得不同区域的随机整数。将由时间转化为整数通过除以32768实现转换到[-1,1]内,同时将实际的车箱数据乘此数据,得到一个矩形区域内随机数。

图5(a)转换系统日期至时间

图5(b)转换系统日期至整数

           图5(c)转换数据至车箱长和宽方向矩形区域内

5    实践验证结论

通过利用CPU1215C的日期函数,以时间为随机数的产生的种子,通过转换将日期数据转换为整数数据,并将其转换到-1至+1的范围内的实数,同比例折算为车箱长与宽数据,得到区域内随机取样点数据。此方法利用伪随机产,数据变化具有相对随机性,不具备绝对随机性,可满足实际的采样需要。同时数据变化率可调整,在自动取样机中得到了较好的应用。


产生随机函数的一种方法 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

谈天说地

共有13246条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。