随机生成范文

2024-05-10

随机生成范文(精选10篇)

随机生成 第1篇

关键词:可逆计算,随机数生成器,均匀分布

可逆计算[1]是一门新兴的交叉学科,其研究的主要目是克服计算系统中的能耗问题,而能耗是导致计算系统芯片发热的主要原因。在可逆计算中,如果一个正向计算包括一个随机数生成器,那么这个计算要可逆就必须有可逆的随机数生成器。否则后面正向计算得到的结果就变得不确定、不可重复和不可逆转的计算,最后计算出的结果也很难被验证与接受[2,3]。

概率分布被计算机代码用来模拟物理系统模型,随机数生成器被用来生成符合一定概率分布的数列。生成随机数数列已经被研究好多年,主要的研究内容有:1)在一定精度范围内,增加随机数的长度;2)提高生成器的速度;3)生成复杂分布数列;4)降低多个数列间的相互影响。然而,关于生成器的可逆方面很少被研究或考虑。尽管它与这些研究有很多交叉的方面,但是它还没有受到广泛关注。

为了能够准确的回访随机数生成器,传统的方法是使用每个被生成的随机数的检测点的基值。这个方法能够解决正确性问题,但是浪费了资源,因为这需要消耗大量的内存空间和内存拷贝的时间。为了避免检测点,可逆的方法在尝试的时候又很快遇到一个新的问题,有一些随机数生成器是基于有损或者破坏性计算,比如取模操作。这就意味着可逆计算没有比基于检查点更有效的方法了。为了解决这样的问题,就需要开发不需要任何检查点就能回访随机数序列的可逆随机数生成器。理论上,这样的随机数生成器确实存在,因为随机数序列是循环序列中的数值,它应该可以同等难度的正向与反向遍历。

这里,我们将提出三种有效的可逆随机数生成器方法既可以正向遍历也可以反向遍历。

1)基于存储器的可逆生成器;2)均匀分布的可逆生成器;3)其他分布的可逆生成器。

1 基于存储器的可逆生成器

对于简单分布,随机数生成程序经常是由一个封闭形式的公式指定,如指数分布。更复杂的分布要么计算机复杂或者由一封闭形式的公式指定。这儿有一个通用的方法适合所有的可逆生成器,可能简单分布的要更容易实现可逆。

任何可逆的随机数生成器都可以将生成的随机数保存在计算机存储器中并使它们能逆转,因为最简单的可逆可以基于正向随机数列后进先出操作。这是一个最费空间,但最通用的方法,因为他不需要去计算生成的随机数。例如,随机数来源于大气辐射能够很容易的使用基于存储器的方法实现可逆。因为,不管是基于物理的随机数生成器还是伪随机数都很难去通过计算可逆,但可逆性可以很容易的通过将正向序列记录在存储器中去实现。存储器可能会在使用的过程中被填满,因此,存储器的容量决定了可逆随机数序列的长度。

给定一个大小为Mz位的空间,每个数的精度为B位,那么可逆随机数序列的长度为M=Mz/B。

算法1.1基于存储器的可逆生成器

算法1.1展示了正向和反向遍历一个随机数数列的方法。正向随机数数列由函数R*()生成,而R*()的逆函数要么不存在,或者物理不可逆,或者计算成本很高,算法使用一个大小为M的循环缓冲区B来实现可逆。这个循环缓冲区下标取值范围是从0到M-1,h为头指针,c为当前指针,t为尾指针,如图1所示。

2 均匀分布的可逆生成器

最传统的随机数生成器是生成[0,1]区间均匀分布的变量,其他复杂分布的随机数数列都能基于这种均匀分布的随机数生成。因此均匀分布的随机数生成器是其他序列的基础。因而为了是其他复杂分布数列可逆,首先必须开发均匀分布可逆生成器。

一个均匀分布的伪随机数生成器正向和逆向的执行在算法1.2被给出。公式f()从当前种子值计算下一个种子值,而f-1()是从当前种子值计算前面种子值。公式U()映射种子值到区间[0,1)。注意公式U()既被用于正向计算也被用于反向计算。

算法1.2均匀分布的可逆生成器

3 其他分布的可逆生成器

其他分布的可逆随机数数生成器都可以基于均匀分布的随机数生成器基础上加上洗牌算法等算法,使得生成均匀分布的数列符合其他分布。

一个其他分布的伪随机数生成器正向和逆向的执行在算法1.3被给出。公式f()从当前种子值计算下一个种子值,而f-1()是从当前种子值计算前面种子值。公式S()为变换函数实现不同分布,公式U()映射种子值到区间[0,1)。注意公式U()既被用于正向计算也被用于反向计算。

算法1.3其他分布的可逆生成器

4 结束语

本文主首先介绍可逆随机数生成器;然后分别介绍基于存储器的可逆生成器、均匀分布和介绍其他分布的可逆生成器算法的设计与实现。主要解决可逆计算中,包括一个随机数生成器实现可逆。其中,基于存储器的可逆生成器是一种基于内存的通用方法,在内存允许范围内,记录检查点,实现任意可逆,而均匀分布与其他分布,则是基于特定公式,通过计算实现可逆,这样的方法避免了记录检查点,节约了内存。

参考文献

[1]Landauer R.Irreversibility and heat generation in the comput-ing process[J].IBM Journal of Research and Development,1961,5(3):183–191.

[2]Alfred V.Aho.Compilers:Principles,Techniques,and Tools.2nd Edition[M].USA:Addison Wesley,2011.

Flash教程:随机生成树冠 第2篇

我解释一些代码的用处,以“右叉”的最后一帧代码来解释。

stop;

if (dp>0) { //dp用来控制树枝的生长,当dp<0的时候,树枝将不在分裂生长。

//以下是正上方新树枝的代码

k=random(4)+1; //k用来选择树形,分别是直形,左分形,右分形和中分行。

_parent.attachMovie(“sz_0”+k,“sz”+_parent.dp,_parent.dp); //生成一个新的树枝。

lik=_parent[“sz”+_parent.dp]; //用LIK锁定这个树枝,方便以后控制

rp=this._rotation+0; //rp是新的树枝的根坐标(黄点)相对于现在这个树枝根坐标(蓝点)的角度,此数值影响到将要新生成的新树枝的坐标。这里是以极坐标的角度来考虑的,因为该树枝的第一个点在正上方,所以修正值是0。

lp=62; //在rp这个方向上,新树枝根坐标的距离。

_parent.dp++; //深度控制,大家可以不用考虑

lik._x=this._x+lp*Math.sin(rp/180*Math.PI)*scal/100;

lik._y=this._y-lp*Math.cos(rp/180*Math.PI)*scal/100;

// 以上算式计算的是新树枝的根坐标,具体意思请参考极坐标和直角坐标换算的方式,

里面的scal是本树枝的缩放度。它会对坐标产生影响。

lik.scal=this.scal*_parent.jian; //新树枝的缩放度要比当前树枝的缩放度小一些

lik._xscale=lik.scal;

lik._yscale=lik.scal;

lik._rotation=rp+random(30)-15;; //新树枝的角度是当前树枝的角度向左右各15度随机摆动。(就是-15到+15度)

lik.dp=this.dp-1; //新树枝的生长度-1;

//以下是右侧新树枝的代码

k=random(4)+1;

_parent.attachMovie(“sz_0”+k,“sz”+_parent.dp,_parent.dp);

lik=_parent[“sz”+_parent.dp];

rp=this._rotation+20; //注意20度角度是这个新树枝的极坐标角度。

lp=52; //52是距离

_parent.dp++;

lik._x=this._x+lp*Math.sin(rp/180*Math.PI)*scal/100;

lik._y=this._y-lp*Math.cos(rp/180*Math.PI)*scal/100;

lik.scal=this.scal*_parent.jian;

lik._xscale=lik.scal;

lik._yscale=lik.scal;

lik._rotation=rp+random(30)+5;; //角度会向右偏一些,所以是当前角度增加5到35之间

lik.dp=this.dp-1;

}

当然管理员也提到了这是分形。

更多内容进入:

精品学习网IT教育频道

随机生成 第3篇

【关键词】课堂 预设 生成

【分类号】G623.2

课程改革进行到今天,已经很多个年头了。纵观现在改革初期的课堂教学,教师轻车熟路地驾驭课堂,轻松流畅地完成教学任务,几近完美的教学,也是自己幻想能拥有这样的课堂效果。但总觉得课堂上少了些什么。随着新课程标准的实施,各种新的教学理念不断冲击着教育、教学和教师。预设、生成这些新名词也频频出现。

什么是预设呢?说简单点,预设其实就是一个教师课前备课所需做的多方面的工作。它表现在课前、课堂、结果上。预设是必要的,凡事预则立,不预则废。课堂教学是一种有目的性、有意识的教育活动,教学预设具有目标明确、结构严密、操作性强等特点。

何谓生成?动态生成是指教师在课堂教学实实在在的过程以学生为主体,在教学的展开过程中由教师和学生根据不同的教学情境自主构建教学活动的过程。动态生成的特点为即时性、随机性,生成性教学有利于学生学习方法的指导。

这一理念的产生使一线教师改变了教学观念,我也是其中一位。我开始重新审视课堂教学:带着精美的预设走入课堂,如愿地完成预设任务,就如行云流水一样让人赏心悦目,但总觉得课堂上如果能随机生成一些亮点,学生的思维产生碰撞的火花,那就是锦上添花的课堂。所以,在预设过程中,需要教学工作者尽可能地把问题考虑全面,主观上竭尽所有可能,才能在具体的教学过程中得到意想不到的教学效果,才能很好地抓住生成给教学所带来的契机。认真分析教育的价值和意义,弹性控制教学环节,重组教学内容,使学生真正“动”起来,在“动”的过程中出新思想、新创意、新观念、新问题。因此,教师把“精心预设”看做是课程实施的一个起点,用心捕捉教学中的“即时生成”,据此调节教学行为,使课程实施由“执行教案”走向“互动生成”,使课堂成为孩子个性张扬的天空。

【案例描述】

《登上企鹅岛》一课是三年级下册第四单元的内容。这篇课文写的是一个少年儿童跟随南极考察队来到南极大陆的所见所闻。主要介绍了在企鹅岛上看到的各种各样的企鹅,写出了企鹅的有趣和可爱。我设计的课堂思路是:先让学生观看白雪皑皑的南极世界和憨态可掬的企鹅,产生兴趣,再抓住重点词句解读企鹅可爱的原因,最后表达对企鹅的喜爱。

实际课堂教学中,当我让学生自由选择自己喜欢的企鹅进行理解时,很多孩子都是对企鹅性格特征的理解,有的抓住词、句来理解,有的看画面来理解,有的用原文的语句来回答。如,有的说我喜欢岛上最温顺的帽带儿企鹅、最漂亮的金企鹅、最凶猛的阿德雷企鹅……我又启发式地追问谁能发挥自己的想象:有礼貌的帽带儿企鹅会说些什么,凶猛的阿德雷企鹅看见我们会说些什么……根据我的预设,孩子们应该争先恐后地回答……但事实上只有一两个学生说,而且语言重复。我的脑子一懵,课前的预设、激发的一系列话语一下子不知从哪说起了。怎么办?就在这个时候我们班的“小喜鹊”(平时她的问题总是很多,而且课上就像只喜鹊一样很活跃,同时也很惹人喜爱,所以在这里我用了昵称)突然举起小手说:“老师,我想用表演的方法让大家了解凶猛的阿德雷企鹅。”此时,我的头轰的一声,甚至头上都要流下了汗水,因为课堂设计中,并没有这个环节。顿时我陷入了短暂的抉择中,自己的思想在激烈地斗争,让她表演没有十足的把握,不让表演望着那恳切的目光,又有些于心不忍,而且这是公开课,一旦表演出错后果不堪设想,而且也未必能完成教学任务。看着那双清澈透明的眼睛,在停顿几秒后,我做了决定,最终我选择了后者。我清了清嗓子,稳稳情绪,说:“好哇,真没想到你还想用表演的方式,表现阿德雷企鹅的性格。”

“小麻雀”欣然地走出座位,叫上几个愿意和她合作的同学表演。望着她们笨拙的动作,可爱的样子,在表演结束的时候,我率先给她们鼓掌,同时也博得了后面听课老师的掌声。接下来的课堂是行云流水,异常顺利,语言竟不是自己备好的,而是顺口而出,这节课也收到了意想不到的效果。

【反思】

事实证明,课堂教学中如果我们的学生完全走进预定教学目标或设计,很容易身陷“山穷水尽”之境,但我们不要急于求成,而应善于接过学生抛来的“彩球”,迅速地在预设和生成之间寻找、铺设一条连接的台阶,沿着他们的思路,给予他们一些更多的时间和空间,也许,他们就有可能有“柳暗花明又一村”的学习发现。苏霍姆林斯基说过:“教育的技巧并不在于能預见到课堂的所有细节,而是在于根据当时的具体情况,巧妙地在学生不知不觉中做出相应的变动。”比如,当学生提出自己的要求,而我错过机会,只按照自己预设的教学流程进行,我想那也许也是一节不错的课,但课堂只觉平静得像一湖水。然而正是这出其不意的插曲,使平静的湖面泛起涟漪,同时我根据预设灵活地作一调整,以此将计就计,让听课者看到了课堂的另一面,也正是这激发了我的思维,使接下来的课堂显得更加顺利。精心准备的预设就成为精彩的生成,使课堂更显生命的活力。

【感悟】

教学预设是为课堂教学的动态生成做准备,精心预设的内容不一定能全部生成,那是否意味着学生没有生成的预设就是没有价值?反之,“非预设生成”的内容是否就和你的预设毫无联系,完全割裂了呢?答案当然是否定的。是预设的生成也好,还是未生成的预设,都体现了课堂教学的千变万化“难以预测”。一成不变的教学模式固然让教者少了些创新思维,而意料之外的突发奇想也是情理之中的。教学的过程本来就是学生从不懂到懂、从错到对、从不会到会的过程。

我们一线的老师要在课前精心预设,在课堂上“提倡生成”“期待生成”,不要“回避生成”“惧怕生成”,要恰当地抓住生成的时机和资源,能够更大限度地提高教学的有效性。

NET中随机生成试卷的策略研究 第4篇

在线考试的一个特点为在同一时间内有多名学生进行网上答题, 那么就意味着此时在线考试系统要生成多套试卷。在这一过程中, 需要对生成试卷过程中的试题重复性、试题难度及试题所处章节等问题进行重点处理, 尽量降低试卷中重复试题出现的机率。针对以上分析, 可以得到以下结论:

(1) 每套试卷难度系数基本一致;

(2) 每套试卷中的试题尽量不同;

(3) 相同试题在不同试卷中的位置不同;

(4) 相同试题的答案顺序可能不同。

满足以上几点, 那么试卷生成策略就可以满足实际应用。

2 随机生成试卷策略的实现

随机生成试卷策略的思路是:首先根据试题库随机取得相应试题和答案;其次, 将试题的答案随机打乱后与试题组合成为新的试题;再次, 根据试题类型将试题进行汇总;最后生成试卷并加载。

根据上述思路, 可以对随机生成试卷策略实施描述如下:

(1) 根据试题类型、试题难度及试题分布情况获取相应试题;

(2) 在获取试题中随机抽取试题;

(3) 打乱抽取试题的答案;

(4) 生成随机试卷。

3 随机生成试卷策略中的试卷生成

试题存放在数据库中的试题数据表中。在该数据表中包含有试题编号、题目、答案A、答案B、答案C、答案D、正确答案、试题难度、试题类型和所属章节10个字段。

首先根据试题类型获取试题, 例如, 单选题、多选题、填空题等, 将获取到的试题分别存储在数组中备用;接下来利用随机抽取试题算法抽取相应类型的试题, 打乱答案顺序后将其添加到DataTable中;最后将DataTable中的试题信息绑定到相应控件上完成试卷组装。

4 随机抽取试题算法分析

在该算法中, 首先声明2个数组, 第一个二维数组 (命名为A) 用来存放需要抽取的试题, 例如, 存放单选题类型、难度级别为1的所有试题, 该数组的维数分别为符合要求的试题总数和字段总数加1;第二个数组 (命名为B) 用来标记已使用的试题编号;该数组的各元素初始值均设为0, 该数组的大小为抽取试题数。再声明一个数组 (命名为C) , 暂存抽取的试题编号, 利用循环实现试题抽取, 在循环体内每次获取随机数后, 判断数组B中对应元素的数值是否等于0, 若为0则该随机数可用, 否则重新产生随机数, 直到抽取该类型试题完毕, 此时数组C中存放的就是抽取的试题编号。再声明二维一个数组 (命名为D) , 读取数组C中的试题编号, 将数组A中的对应试题添加到数组D中, 实现试题抽取。

string[, ] A=new string [候选试题总数, 11];//声明数组A, 存放可以选用的试题

int[] B=new int[候选试题总数];// 声明数组B

int[] C=new int[准备抽取试题数];// 声明数组C

string[, ] D=new string [候选试题总数, 11];//声明数组D, 存放抽取好的试题

for (int i=0;i<候选试题总数;i++) //数组B赋初值0

{ B[i]=0; }

int z=0;//符合条件的随机数个数

while (z<准备抽取试题数量) //

{ Random rm=new Random (unchecked ( (int) DateTime.Now.Millisecond) ) ;//产生随机数

int j=rm.Next (0, 候选试题总数) ;//

if (B[j]==0) //判断该随机数是否可用

{ B[j]=1;//用后更改为1

C[z]=j;//存储该随机数

z++;// }

}

for (int i=0;i<准备抽取试题数;i++) //获取随机产生的试题

{ for (int j = 0; j <试题的字段数量; j++)

{ D[i, j] = A[C[i], j];//填充试题信息 }

}

5 选择题型答案的随机分布算法分析

当出现同一道题显示在不同试卷中时, 可以将候选答案的顺序随即打乱, 从而实现试题相同但是答案顺序不同, 避免答案重复。例如:原候选答案顺序为a、b、c和d, 产生的随机数为4、5、3、2 (存放在数组F中) , 那么打乱后的候选答案则为c、d、b、a。实现代码如下:

int[] E = new int[6];//记录随机数是否可用

int[] F = new int[4];//保存随机数

//……在2~5范围产生四个不重复的随机数

for (int i = 2; i <6; i++)

{ E [i] = 0; }

int z = 0; //记录产生的合法随机数的个数

while (z < 4) {

Random rm = new Random (unchecked ( (int) DateTime.Now.Millisecond) ) ;//产生随机数

int j = rm.Next (2, 6) ;// 在2~5范围产生随机数

if (E [j] == 0) // 确保产生的随机数不重复

{ E [j] = 1;//

F[z] = j;//

z++;//合法随机数个数加1}

}

接下来需要将正确答案随之加以修改, 确保答案与选择项的统一。例如:原候选答案顺序为a、b、c和d, 正确答案是b, 产生的随机数为4、5、3、2, 那么打乱后的候选答案则为c、d、b、a, 此时正确答案应改为c。抽取试题存放在二维数组D中, 试题答案所在数组的下表分别为6, , 实现代码如下:

int p=0;//p表示未打乱前正确答案所在下标

int pNew=0;// pNew表示打乱后正确答案所在下标

switch D[6] //记录未打乱前正确答案所在下标

{case "a":

p=2;

break;

case "b":

p=3;

break;

case "c":

p=4;

break;

case "d":

p=5;

break;

}

string[] G=new string [4];//声明数组G, 存放抽取好的试题未打乱前的答案序列

for (int i=0;i<准备抽取试题数;i++) //获取试卷试题数量

{ for (int j = 2; j <=5; j++)

{ G[j-2]=D[i, j];//复制未打乱前的候选答案序列 }

for (int z = 2; z <=5; z++)

{ D[i, z]= G[F[z-2]];//填充打乱后的候选答案序列

if (p== F[z-2]) //记录打乱后正确答案所在下标

{ pNew=z; } }

switch pNew //记录未打乱前正确答案所在下标

{ case 2:

D[i, 6]="a";//修改数组D中正确答案信息

break;

case 3:

D[i, 6]="b";

break;

case 4:

D[i, 6]="c";

break;

case 5:

D[i, 6]="d";

break;}

}

如果题型为多选题, 那么就需要在单选题型的实现思路中做以下调整。

(1) 试题答案需要使用特殊字符进行连接, 例如:答案为abc时, 需要在数据库中写为a|b|c。

(2) 记录未打乱前正确答案时, 首先使用Split方法对字符串进行分割, 再分别进行判断确定正确答案下标, 最后改用整型数组分别进行存储。

(3) 修改打乱后正确答案时, 首先分别判断打乱后候选答案中各个正确答案的新下标, 再将新的下标转为对应的字符 (a~z) , 最后利用“|”进行连接重新写入到试题答案所在位置。

6 将完成的试题进行封装

将数组D中的信息添加到DataTable中, 那么我们就可以利用相应的控件来加载其中的试题信息了。因为该功能的实现代码比较简单, 这里对具体代码不再叙述。在实施中有一点需要注意:向DataTable中进行添加信息时, 要先建立数据行, 再建立数据列, 而每一个数据行中的数据列应当与数组D中的列数保持一致。

归纳起来, 试卷生成策略只要解决好试题的随机抽取、试题难度、试题答案序列的随机生成以及答案的更新这几个问题, 那么在实际应用中就基本可以满足要求。

摘要:近年来, 随着互联网的不断发展在线考试也逐渐成为各大院校考查学生的手段之一, 促进了教学信息化, 减轻教师工作量, 提高教学效率, 增加考核透明度。试卷的随机生成是在线考试中的核心问题。

关键词:在线考试,随机生成,NET

参考文献

[1]彭宏, 许建东, 吴涛.信号与系统课程试卷生成系统的设计[J].中国教育技术装备, 2012 (04) .

[2]张海燕.题库与试卷自动生成系统的设计[J].数字技术与应用, 2012 (06) .

[3]王长利.试卷生成管理系统的设计和实现[J].数字技术与应用, 2011 (03) .

随机生成 第5篇

这篇文章主要介绍了python生成随机mac地址的方法,涉及Python操作随机字符串的技巧,需要的朋友可以参考下

本文实例讲述了python生成随机mac地址的方法,分享给大家供大家参考。具体实现方法如下:

#!/usr/bin/pythonimport randomdef randomMAC: mac = [ 0x52, 0x54, 0x00, random.randint(0x00, 0x7f), random.randint(0x00, 0xff), random.randint(0x00, 0xff) ] return ‘:‘.join(map(lambda x: “%02x” % x, mac))print randomMAC()

随机生成 第6篇

关键词:试卷,随机生成,分析

0 引言

目前,基于B/S的在线考试系统己经成为现代考试方式的有力补充和发展。相对于传统的纸、笔考试,在线考试不仅减轻了传统考试的组织、评卷、成绩统计等方面所花费的人力和物力,并且突破了时间与空间的限制。然而,在线考试环境一般为机房,考生之间的距离很近,很容易作弊。为了使在线考试做到公平和规范,就要求每个考生的试卷知识点覆盖面、题量、难度等都是相同或相近的,但试题内容并不相同。

笔者设计的基于B/S的考试系统生成试卷是从服务器的数据库根据一定的组卷策略自动抽取试题后动态生成的。考生每次考试都要随机从题库中按照要求生成若干套试题,因而如何随机选题成为考试系统的重点之一。试题的难度、分布章节等都可在试题库里设置,选题时根据要求选题即可。

1 解决试题重复问题的三种思路

下面重点分析如何避免试题重复这个问题,笔者主要从以下几个方面进行分析:

(1)先将数据库中所有数据读出,获得试题的总数后,生成一个1~(试题的总数-考试的试题数量)之间的随机数,然后开始读出数据。

这种算法基本上可以实现随机抽取试题,并让每个学生的试题和每一次刷新以后的试题都不相同。但是它的最大不足在于试题的先后顺序总是相同,特别是题库中试题不多的时候,学生几乎可以用背答案方法来应付考试了。虽然可以通过改变数据的排序方式来改变试题的先后顺序,但变化总是不大。

(2)不断生成1~题库中的试题总数之间的随机数,然后到数据库中读取这条记录,直到满足考试的试题量为止。

这种算法应该是真正意义上的随机抽取试题,但遗憾的是如果在题库中题量不多的情况下,很容易在数据库中读取重复的试题。如果再使用一个变量来储存已经读取过的试题id来解决试题重复的问题,算法就过于繁琐,是很不可取的。

(3)通过字段haveselect的值为0或1来区分该题是否被选中过。

其中:haveselect标志某题是否已经被选过;

Count变量用来存放所有未被选过的单选题的总数;

temp变量用来存放0--Count之间的随机整数值;

rs.move temp是将当前记录移到第temp条纪录;

rs("haveselect")=1是将当选记录的标志位设为1,然后用rs.update把数据库中的相应标志位改为1。

上面一段程序是在选完题之后将所有己经设为1的haveselect改写成0,这样下次自己或别人考试就仍可以选择所有的试题。

2 结束语

以上三种思路在实际运行中都可通过测试,但是第三种思路可以很好地避免试题的重复,确保了试卷的质量。

参考文献

[1]陈运财.在线考试系统中随机抽题算法研究[J].中小企业管理与科技(上旬刊),2009.

[2]李美满,易德成.通用考试系统开放题库与组卷及评卷算法研究[J].计算机工程与设计,2005.

随机生成 第7篇

迷宫问题是图形学、图论和数据结构等领域中广为人知的一个经典问题, 如何生成一个m×n的二维平面迷宫地图, 其实就是生成树的问题, 可以参考最小生成树的两个经典算法, Prim算法和Kruskal算法, 本文的算法就参考了Kruskal算法, 用图的导出连通子图来生成迷宫地图。

2 设计原理

假设WN= (V, {E}) 是一个含有n个顶点的连通网, 则按照Kruskal算法构造最小生成树的过程为:先构造一个只含n个顶点, 而边集为空的子图, 若将该子图中各个顶点看成是各棵树上的根结点, 则它是一个含有n棵树的一个森林。之后, 从图的边集E中选取一条权值最小的边, 若该条边的两个顶点分属不同的树, 则将其加入子图, 也就是说, 将这两个顶点分别所在的两棵树合成一棵树;反之, 若该条边的两个顶点已落在同一棵树上, 则不可取, 而应该取下一条权值最小的边再试之。依次类推, 直至森林中只有一棵树, 也即子图中含有n-1条边为止。根据Kruskal最小生成树算法, 我们首先可以把二维平面迷宫地图看成是空格与空格之间的墙壁组成的一个图, 其中每个空格看成一个点, 空格之间的墙壁看成一条边, 那么初始的迷宫就是一个无向图G=, 如图G所示 (其中左上角为起点, 右下角为终点) 。由于该图的边没有权值差异, 所以在该图中随机生成一棵树, 将所有的点都连通起来, 得出图G的随机导出子图, 就形成了迷宫地图。

怎样随机连通所有的点生成一棵树, 其实就是随机化Kruskal算法, 相当于去求一个图G的导出子图, 使得子图中的所有顶点都是连通的, 如图H所示, 具体算法步骤如下:

(1) 将图G中的所有空格看成是只有根节点的树构成的一个森林。

(2) 将图G中的所有边放入一个集合, 称为边集E。

(3) 随机选择边集E中的一条边e∈E, 判断e连接的两个顶点是否在同一棵树上, 如果不是, 将两个顶点所在树合并为一棵树, 并且把墙擦掉。

(4) 从边集E中去掉元素e, 即E=E-{e}。

(5) 如果E=Φ (空集) , 结束算法;反之, 转到 (3) 。

3 C++实现

首先定义存放迷宫空格和墙信息的二维字符数组char Map[2*MaxN-1][2*MaxN-1], 其中MaxN为迷宫地图最大空格数常量;同时还要定义存放迷宫各空格构成的森林中的各颗树的父节点及各节点对应的阶, 用一位数组实现int rank[100001], int parent[100001];此外, 还要定义存放迷宫所有墙的动态数组std::vectorEdge, 以及存放墙序号和其对应行列坐标的映射std::map>Hash。

有了这些基本数据, 接下来就可以调用函数void init (int width, int height) 初始化迷宫信息, 具体算法是:根据传入函数的迷宫空格宽度和高度, 计算出包括墙在内的所需的行数和列数, 再用循环, 根据偶数行并且偶数列的条件, 设置迷宫二维字符数组为空格, 或者为墙。

初始化迷宫信息后, 就可以调用随机化Kruskal算法, 生成迷宫地图了, 具体算法是:先从左到右从上到下的顺序将迷宫的所有可擦除的墙的序号加入到动态数组std::vectorE d ge中, 并将墙序号与它对应行列坐标存入映射st d::map>Hash中, 然后循环从墙集数组std::vectorEdge中随机选择一条墙, 求出该墙连接的两个空格房间, 并判断该两个房间是否在同一颗树上, 如果不在通一颗树上, 就把两个房间所在的两颗树合并为一颗树, 并在迷宫地图将该条墙设为空格后, 进入下一轮循环重新随机选墙;否则就直接进入下一轮循环重新随机选墙。这其中判断该两个房间是否在同一颗树上算法思想是:先递归查找某个房间的父节点, 直到找到该房间所在树的根节点为止, 才退出递归调用, 如果相邻两个房间分别所在的树的根节点相同, 这说明它们已经在同一颗树上, 否则就不在同一颗树上。而把两个房间所在的两颗树合并为一颗树算法思想是:比较两个房间所在树根的阶码大小, 把根节点的阶码小的树作为阶码大的树的子节点, 如果两根节点的阶码相同, 还要将父节点的阶码加一。

最后根据调用随机化Kruskal算法后得到的迷宫信息二维数组char Map, 循环输出迷宫地图, 其中墙输出为“■”, 空格房间输出为“”, 起点输出为“S”, 终点输出为“E”, C++实现代码运行结果如图H所示, 实现代码请向作者邮箱cico_yuan@hotmail.com发信索要。

摘要:迷宫问题是图形学、图论和数据结构等领域中的一个经典问题, 迷宫生成问题就是图到导出子图问题。本文借用Kruskal最小生成树算法思想, 用随机生成树生成图的导出连通子图, 连通图的所以顶点, 产生迷宫地图。主要算法过程:将二维平面迷宫地图看成是一个无向图, 随机从其边集中选择一条边, 判断该边连接的两个顶点是否在一个连通集合内, 如果不是, 将两个顶点所在集合合并, 并且把该边去除, 反之重新从集中随机选择一条边继续判断, 直至边集被选空, 所有点都连通到一个集合内为止。其特点是:算法原理简单, 实现容易, 数据量小, 运行高效, 可任意生成不同大小的迷宫地图。

关键词:迷宫地图生成,Kruskal算法,随机生成树

参考文献

[1]杜凯;朱泽民基于图的深度遍历产生随机迷宫的算法研究《黄冈师范学院学报》2008年第S1期

[2]严蔚敏、吴伟民《数据结构》清华大学出版社

[3]涂海丽求迷宫中从入口到出口的路径的算法及实现《中国科技信息》2008年23期

[4]徐守江迷宫算法综述《信息与电脑 (理论版) 》2009年10期

随机生成 第8篇

关键词:Java语言,随机数,算法

0、引言

在计算机很多应用中, 关于随机数的使用非常广泛而重要。例如:考试系统中的随机抽题, 扑克游戏的自动发牌等领域都有广泛应用。

随机数的产生总体上有两种方法。一种是采用很多种原始的物理方法用于生成一定范围内满足精度的均匀分布序列, 其缺点在于:速度慢、效率低、需占用大量存储空间且不可重现等, 一般认为这是真正的随机序列。另一种是用计算机软件模拟的方法产生。这种利用数学递推公式所产生的随机数只能满足一定的概率分布, 所以就不可能是真正的随机数, 而是伪随机数。从实用的角度看, 只要伪随机数具有真正随机数的一些统计性质, 我们就可以把伪随机数作为真正随机数来使用。

Java作为一种极具生命力的完全面向对象的网络编程开发语言, 对伪随机数生成提供了多种方法, 以适应各种不同的设计要求。

1、Java生成随机数的机制

Java[1]语言是采用数学方法--线性同余法 (Liner Congruence Generator, 即LCG法) 产生随机数的。优点是随机性好、周期长, 易于计算机实现和速度快、广泛采用。缺点是该法产生的随机数因受到数学规律的影响而具有周期性和相关性。

在Java中随机数概念从广义上将有3种:

1、通过current Time Millis () 方法来获取个当前时间毫秒数long型数字

2、通过Math.random () 方法返回个0到1的间double值

3、通过Random类来产生个随机数, 这个是专业Random工具类, 功能强大在实际应用中, 使用后两种生成伪随机数的方式:java.util包中的Random类和java.lang包中的Math.Random () 方法。

Java实用工具类库中的类java.util.Random提供了产生各种类型随机数的方法。

2个构造方法:

从Random () 构造方法原型中可以看出, 构造方法中默认使用当前的系统时间为种子来初始化Random对象。由于每次调用时的时间不同, 所以就可以大大减少随机数序列相同的可能性。

当使用上述构造方法之一产生一个Random对象时, 然后利用Random类提供的10个方法可以产生int、long、float、double以及Goussian等类型的伪随机数。

几个常用普通方法:

如调用next Float () 方法即可生成一个[0, 1) 的小数。具体可以参考JDK帮助文档[1]。

Java中另一种可以产生随机数的方法是:java.lang包中的Math.Random () 方法。其调用形式为double x=Math.random () 。该方法的返回值是一个介于0.0~1.0之间的浮点数, 即只能产生double型的随机数。

2、应用分析

下面将通过具体的例子来说明在java中如何实现常用伪随机数的生成。

(以下均省略实现类的代码和import语句)

(1) 生成num个在区间[min, max]内可重复的随机数

(2) 生成num个在区间[min, max]内不可重复的随机数

在线考试系统, 随机抽题等应用中, 经常需要产生一定范围内不可重复的随机数, 按通常的思路是:先把生成的随机数保存起来, 然后产生一个新的随机数后, 就在已产生的随机数中查找一遍, 若找到就重新产生一个新的再重复数据搜索, 否则就认为已经找到了一个新的不同随机数。这种算法需要进行若干次的遍历, 算法效率相对较低, 甚至可能会导致死循环!

下述程序代码, 先用Array List对象保存从min到max的所有整型对象, 随机从这些对象中选取一个作为产生的随机数, 然后删除这个已经取出的整数。重复刚才的过程, 一直到满足要求为止。

(3) 生成指定长度的由字母和数字组成的随机字符串

在日常生活中, 如网上银行系统给出的初始登陆密码就是由大小写字母和数字混合组成的随机密码, 一般人很难猜中。可以利用Java随机数发生器随机产生符合这样要求的字符串。

3、结束语

伪随机数在程序设计和不同的软件系统开发中都得到了广泛的应用。Java提供了多种生成伪随机数的途径, Random类功能涵盖了Math.random () 方法功能, Random类除了可以产生整型的随机数外, 还有其他一些方法用于产生随机的基本类型值 (如boolean、float和long) , 以满足不同的设计要求。但是Java随机数发生器产生的是伪随机数, 是由随机种子根据一定的数学算法计算出来的。真正的随机数是不可能通过具体的算法生成的。所以, 在实际应用中, 如何使得所生成的随机数性能更佳是软件设计者要充分考虑的。

参考文献

[1].JavaTM 2 Platform Standard Edition 5.0 API规范.http://java.sun.com

[2].李连弟.JAVA语言随机数的产生及其应用[J].浙江工贸职业技术学院学报, 2005, 5 (4) :77-82

[3].王瑞胡.Java中伪随机数生成机制研究及其应用[J].中国科技信息, 2005 (18) :11-12

随机生成 第9篇

在教育部水平评估体系下, 很多高校在教学模式上进行了卓有成效的改革, 标准化考试和教考分离的实施对很多课程的出卷提出了新的要求, 教考分离可以评价教与学两个方面情况, 促进和调动两方面积极性[1]。标准化考试评分准确、误差小。由于试题及考试形式各方面的标准化, 使得考试的代表性强、信度高, 可以正确评价学生掌握知识的程度, 同时也可有效实施“教考分离”, 从另一个侧面考核教师的教学水平, 无疑对提高整个教学质量具有重要意义[2]。研究高职教育中CAD/M软件类课程操作型考试的随机试卷生成系统, 是推动标准化考试和教考分离的重要途径。

本研究通过分析试题构成的特点和试题间相关性的不同, 以直选和组选两种方式实现随机抽题式试卷生成系统。

1 系统需求分析

高职类学生学习CAD/M类软件的重要目的是能熟练地上机操作, 这类软件包括AutoCAD, Pro/E, UG NX以及Cimatron等常用软件, 该保证考核要求考生根据提供的二维或三维图, 进行上机绘图。考核的试题数量少, 考试的题型偏于操作类。一般的概念理解、填空和问答等题型基本不出现, 此类题库的开发在许多文献上都有论述, 本研究主要探讨操作类题型题库建立以及随机试卷的生成, 操作类试题与一般试题的区别在于上机考核为主, 每道试题含有图形。以UG NX为例, 一份考核试卷可能包括零件造型、装配和CAM部分。一个考核零件造型的试题必须提供给学生该零件的二维图, 甚至三维图, 学生根据范图上机绘图, 有些装配造型试题与前面的零件造型试题相关, 必须在其基础上进行装配, CAM加工部分可能是对前面某个零件的加工, 因此必须考虑试题间的相互关系, 这与一般填空、判断试题间相互独立是不同的, 因此试题库的建立必须考虑这个关系。另外, 操作类试题的标准答案与一般试题的区别在于:由于试卷评判是通过计算机查看学生的绘图与二维图或三维图的差别给分, 只要在试卷的每道题后附上评分标准即可。根据我院教学管理的实际情况, 一份随机试卷可以按试题的类型、难度和题数3个条件进行组卷, 也可以从已有的成组试卷中抽取一组试题组卷。根据以上分析, 结合一般试题库开发的要求, CAD/M类随机试卷生成系统的功能包括:

(1) 试题信息的添加、删除、修改、更新和查询。

(2) 随机试卷的生成和输出。

(3) 用户管理, 可以参考一般用户管理方式, 由于具有一般性, 下文不再具体论述。

2 系统设计

2.1 数据库表结构设计

随机试卷的生成是根据用户的出题要求进行随机组卷的过程, 通过搜索试题库中的匹配试题进行随机组卷。因此题库的开发是必须要先完成的任务, 根据前面的分析, 这里设计了几个数据库表结构, 如表1~表4所示 (加下划线的字段是对应表的主键) 。

2.2 组卷策略分析

组卷的策略是根据用户选择试题的类型、难度和试题数3个参数研究。为了使应用程序的功能具有通用性, 可以提供试题难度和类型的输入界面供用户初始化试题难度和类型信息。由用户根据实际情况进行输入, 例如:试题的分类可以按知识点进行, 以UG NX考核为例, 试题类型可以分成建模、装配、工程制图、加工等部分, 也可以按章节进行划分, 用户可以预先设置一种分法, 对试题难度的划分可以是一般、中等、难等级别。系统允许用户根据实际情况进行定制, 然后把这些信息输入到试题类型表TestType和试题难度表TestDiff中保存。

试题信息表TestInfo中的Requirement字段可以是对操作的要求, 例如建模后隐藏基准面、装配要求等。由于试题存在图形, 考虑到图形输入/输出对程序的计算量影响比较大, 可以把试题库中需要的图形集中保存在一个图形文件夹中, 保存试题信息时只保存它们的路径, 根据试题与其他相关试题的关系, 有些试题能单独组卷, 有些装配类的试题可能不能单独组卷, 前者的Relativity取值False代表无关, True代表相关。其中试题组别号GroupID字段用于不同的随机方法中, GroupID=0表示不与其他试题成组, 即可单独组卷, 否则代表组号。考虑两种随机抽题方法:第一种是抽取的试题间相互独立, 这个时候Relativity=True的试题不能参与随机抽题, 这种方法称为直选法。第二种是抽取的试题间有相关性, 为了降低相关性判断的复杂性, 可以让相关的试题成为一组, 赋予相同的GroupID值, 随机抽取的时候抽取的是一个GroupID, 这些成组的试题可以直接组卷, 这种方法称为组选法。组选法不需要选择试题类型、难度和试题数, 成组的试题就是一份完整试卷。通常应用于把以前的试卷信息录入到试题库中的场合, 若试题间相关, 把这些试题放在同个组中, 输出相同GroupID的试题即是一份完整的试卷。若某个试题与其他试题无关则可以参与直选, 赋值Relativity=False, 仍给予试卷中的所有试题一个相同的GroupID, 输入不同组试题时赋予不同GroupID值。

直选随机抽题组卷的过程就是重复抽取不同试题类型、难度和数量的过程, 在这个过程中, 只要抽取到对应的试题代号TestID, 就能找到对应的试题信息。例如要从试题库中随机抽试题类型为“建模”、难度为“中等”、数量为2的随机试题, 方法是先选出试题库中所有试题类型为“建模”、难度为“中等”的试题代号并存放到一数组中, 再从该数组中随机抽取2个试题代号。 以Delphi开发为例, 先定义一个整型数组类型:type TIntArray = array of Integer;自定义函数function RanArray (const AFrom, ATo, ACount: Integer) : TIntArray;函数返回在 (AFrom, ATo) 之间的ACount个随机数, 代码如下:

再自定义函数function RandomNums (CkB: TCheckBox; Lb: TLabel;Edt: TEdit) : TIntArray;用于返回抽取到的某种试题类型和难度等级的随机试题代号。试题类型用TCheckBox的Caption属性显示, 试题难度等级用TLabel的Caption属性显示, 试题数量显示在TEdit类的组件中。部分代码如下:

随机试卷的直选抽题流程, 如图1所示。

对于组选随机抽题抽到的是一个GroupID, 方法是选出GroupID的不同个数 (GroupID=0除外) , 然后从这些GroupID中随机抽取一个, 输出该GroupID对应的试题代号即可。

3 系统实现

3.1 试题信息初始化

输入试题前, 先设置试题库中的试题类型和难度, 并保存至试题类型表TestType和试题难度表TestDiff中, 类型和难度根据用户需要自定义。

然后根据试题信息表标准化试题信息录入, 二维图和三维图允许只输入其中的一个。其中成组复选框用于输入成组试题, 新组复选框用于表示输入的是一个新组, 以区别与上次的成组输入, 相关复选框用于表示成组中的试题能否参与直选, 不能参与直选则选中该复选框。默认情况下用户并不需要知道组别号, 新组的组别号被赋予已有的最大组号加一, 成组试题的组别号默认是新组的组别号。如果用户在输入了组别10的试题后继续输入组别11的试题, 且发现组别10的试题还没有输完, 这时可启用组号, 在编辑框中输入10以添加组别10的试题, 组别号可以根据试题信息查询界面查询。

直选随机试卷抽题过程, 如图2所示, 选中试题类型和难度, 输入试题数量, 随机抽取的试题号在列表框中显示出来, 被选中的试题信息通过右边的TMemo和TImage组件显示处理, 通过上下箭头可以调整试题显示的顺序以便调整输出, 也允许根据需要删除某些试题。

生成的试卷直接通过Word文档输出, 输出结果, 如图3所示。输出前要先创建试卷的文档模板, 试卷头部信息 (如试卷名称、类型, 考试学期等变化信息) 先在模板中预留空位, 其他的固定格式信息可以先编排好版面, 然后保存成文档模板。最后输出时根据输入情况填充模板, 并将抽到试题的信息插入到模板, 就能生成一份试卷, 通过试卷模板可以简化开发过程。对于答案试卷的生成只要在每道题后插入评分标准即可。

组选抽题过程相对简单, 只要输入试卷的表头信息 (包括学期、课程名、考试类型、试卷类型等信息) 即可开始随机抽题, 抽到一个GroupID后输出该组试题信息即可。

Word提供的强大的编程接口技术能够通过程序控制Word的任何一部分, 包括文件的打开、存盘、打印还是文档中表格的自动绘制。在Delphi中调用Word的方法, 归纳起来有以下几种方法:

(1) 通过Delphi的控件TOleContainer 将Word嵌入;

(2) 使用Delphi提供的Servers控件调用Word, 使用Word的属性;

(3) 通过真正的COM技术, 将Office软件目录中文件MSWORD9.OLB中的类库全部导入Delphi中, 利用COM技术编程;

(4) 使用CreateOleObject将启动Word, 然后以OLE方式对Word进行控制。例如采用CreateOleObjects的方法来启动Word的代码如下:

试卷输出的格式、字体控制、图片的输出以及复杂表格的绘制等代码可以参考相关的网页[3,4,5]和文献[6]。

4 结束语

本研究对CAD/M软件课程的操作类试题的随机试卷生成进行了分析, 采用直选和组选的方法区别对待具有相关性的试题, 并输出到Word, 形成直接可用的试卷, 有效地提高了命题效率, 有助于推进试题库的标准化建设和教考分离的实施。

摘要:为了推进CAD/M类课程的标准化考试和教考分离, 研究操作类的CAD/M试题库构成模式, 开发随机试卷生成系统是实现标准化考试和教考分离的一个重要途径。分析试题构成的特点和试题间相关性的不同, 提出以直选和组选两种方式进行随机抽题, 试题间无关联的组卷采用直选方式, 相关性试题的组卷采用组选方式, 实现了将生成的随机试卷转换成W ord格式。运行结果表明, 系统输出的试卷能满足实际教学的需要。

关键词:CAD/M,随机试卷,直选,组选

参考文献

[1]王伊娜.建立教学考试题库或试卷库实施教考分离[J].中北大学学报:社会科学版, 2005, 21 (4) :76-78.

[2]王晓波, 张乐善, 马玉霞, 等.关于建立营养与食品卫生学课程标准化考试的研究[J].河北职工医学院学报, 2005 (3) :46-47.

[3]大富翁论坛.Delphi与Word之间的融合技术[EB/OL].[2001-11-18].http://www.delphibbs.com/delphibbs.

[4]CHARLIE C.Delphi and Microsoft Office:Automating Ex-cel and Word[EB/OL].[2005-03-25].http://homepages.borland.com/ccalvert/TechPapers/Delphi/Del-phiWord.htm.

[5]ZARKO G.How do I using Delphi talk to Microsoft Word[EB/OL].[2008-03-10].http://delphi.about.com/cs/adptips2003/a/bltip0303_5.htm.

随机生成 第10篇

关键词:双马赫-曾德干涉仪,相关系数,随机生成数算法,偏振控制

0 引言

随着人们安全防范意识的提高,一些重要的设施及场所的安全防护成为首要解决的问题。光纤传感系统凭借其优良的特性,成为周界防护领域的研究热点。本课题研究的是基于双M-Z(马赫-曾德)光纤干涉仪的周界防护系统,该方法将两路检测信号的相关性良好作为前提条件[1],系统通过计算两路信号的互相关峰值所对应的位置来确定时延的大小,从而实现系统的定位。然而,在实际使用中,系统的敷设环境、光纤的偏振特性等会使系统产生偏振相位偏移问题,影响两路检测信号的相关性,导致系统的定位精度下降甚至无法定位[1]。为了提高系统的定位精度,必须通过调节系统的偏振态来消除偏振相位偏移的影响,保证两路检测信号的良好相关性[2]。

利用偏振控制器并结合偏振控制算法对偏振态进行调节是最常用的方法[2]。常见的偏振控制算法有模拟退火算法、遗传算法和粒子群算法等,这些算法复杂度较高,需要复位算法,控制速度和效率都有限,更有甚者容易陷入局部最优而难以搜索到最佳偏振态位置[3]。本文提出一种以两路检测信号的相关系数作为反馈控制量的随机生成数算法,通过调节偏振控制器改变输入光的偏振态,来搜索系统最佳偏振态的位置。

1 系统的偏振控制模型

图1为双M-Z光纤干涉仪系统结构示意图。光源输出的光信号经光隔离器和PC(偏振控制器)后被C1耦合器分成顺时针和逆时针两路传感光信号,图中PC的作用是对输入偏振态进行控制。

假设在传感光路上,传感臂L1和L2上顺时针传输的光场表达式分别为E1和E2,逆时针传输的光场表达式分别为E1T和E2T,则探测器PD1和PD2接收到的光信号Eout1、Eout2的表达式为[4,5]:

式中,δ(t)为由振动信号引起的两路信号的相位差。两路光强信号I1(t)、I2(t)可表示为[5]

式中,I0为光源输出光强;θ和ε分别为光源经PC调制后的方位角和椭率角;α和β分别为顺时针和逆时针方向光路中的相位偏移;f1(θ,ε,α)和f2(θ,ε,β)为由于相位偏移和PC共同作用产生的附加相位差。为了研究附加相位对互相关函数的影响,两路检测信号的互相关系数表达式如下[5]:

通过式(3)可以看出,相关系数ρ主要由两路信号的相位决定,通过改变附加相位差f1(θ,ε,α)和f2(θ,ε,β),可使两路检测信号的相关性发生变化。附加相位差是由偏振相位偏移和PC共同决定的,其中偏振相位偏移由输入偏振态、光纤的双折射特性和系统的应用环境决定,后两项无法人为改变,而输入偏振态可由PC改变[6]。因此,本文结合PC和随机生成数算法搜索与当前光纤偏振特性匹配的输入偏振态,以改善信号的相关性[7]。

2 随机生成数算法可行性分析

由上文可知,偏振相位偏移引起的偏振态的改变具有随机性:光源输出偏振态未知,系统环境未知,光纤的双折射特性也不确定。因此,为了使系统的偏振态达到良好的状态,对偏振控制算法的要求是:(1)具备全局搜索的能力,能够遍历到邦加球的任意一点;(2)跳出局部搜索范围并最终趋于最优的状态[8]。

为了验证随机生成数算法的全局搜索能力和搜索速度,系统搭建好测试平台,启动算法,观察偏振分析仪中邦加球的扫描轨迹,邦加球是偏振光形象表示,球上的每个点都代表偏振态的一种状态。实验记录了不同时刻下算法执行5min时邦加球的搜索轨迹,如图2所示。从图中可以看出,随机生成数算法在较短的时间内可以覆盖邦加球的绝大部分区域。由于随机生成数产生新解不会依赖之前的解,因此它不会陷入局部搜索状态,具有全局搜索的能力。同时在算法中加入了自动调节阈值和启动算法阈值,加快了算法的收敛速度,保证算法能够最终趋于全局最优的状态。

3 基于两路检测信号相关系数的随机生成数算法

算法的流程如图3所示。在算法执行之前,需手动设定相关系数阈值Fth、自动调节阈值Ath和启动算法阈值n。随机生成数算法是通过系统随机生成PC的某个通道和对应该通道的数字电压值,系统采集两路检测信号并计算其相关系数f(x1,x2),将f(x1,x2)与设定的Fth进行比较,根据比较结果确定是否继续对PC的通道和电压随机赋值,再通过设定Ath和n来实现偏振控制的自动调节。

4 算法关键参数的设定

由上一节可知,随机生成数算法主要设置3个变量:相关系数阈值Fth、自动调节阈值Ath和启动算法阈值n。系统每秒钟执行一次算法,获取一次相关系数值,在算法的参数讨论中,算法执行了250次,采集了250次相关系数值。

4.1 相关系数阈值Fth的设定

Fth的大小关系到算法搜索到偏振态的好坏,如果Fth设置得较低,则算法在还未搜索到最佳偏振态时就会提前终止;如果Fth设置得较高,则算法会一直处于搜索状态,也不容易得到最佳偏振态。实验设置了3个Fth值,分别为0.88、0.93和0.97,并分别进行了实验和比较,结果如图4所示,此时另外两个参数分别设定为Ath=0.8和n=5。

由图可知,当Fth设定为0.88和0.93时,相关系数分布大致相同,即经过前期不断搜索,最终趋于比较稳定的状态。当Fth设定为0.97时,由于设置值过高,当算法搜索到一个比较好的状态时也会被系统误认为状态不好,导致算法继续执行,因此偏振态难以趋于稳定。

4.2 自动调节阈值Ath的设定

Ath是为了检验当前相关系数是否保持在一个良好的状态,通常Ath要比Fth低,但为了保证相关系数保持在良好的状态,Ath不能设定得太低。实验设置了3个Ath值:0.75、0.80和0.85,并分别进行了实验比较,结果如图5所示,此时另外两个参数分别设定为Fth=0.93,n=5。

由图可知,当Ath比较低时,自动调整比较少,系统处于不稳定的状态,算法不太容易搜索到最佳偏振态工作点。当Ath设定为0.80和0.85时,算法通过前期的搜索比较容易达到接近最佳偏振态工作点的位置,并最终维持在偏振态较好的状态。

4.3 启动算法阈值n的设定

启动算法阈值n表示连续出现相关系数小于Ath的次数。n设定得较小时,可使算法搜索频率加快,系统在较短的时间容易达到偏振态较好的状态,但是n设定得过小时,算法在搜索时容易偏离原先搜索到的良好偏振态。n设定得过大,算法收敛过快,不容易趋于最佳偏振态工作点,同时在系统偏振态偏离最佳工作点时,不利于偏振态自动控制。实验设置了3个n值:3、5和9,并分别进行了实验比较,结果如图6所示,此时另外两个参数分别设定为Fth=0.93,Ath=0.8。由图6可知,当n值较小时,算法搜索的次数较频繁,系统能在较短时间达到偏振态较好的状态,但是不利于稳定到最佳偏振态的位置;当n值较大时,系统的自动控制能力较弱,不易搜索到偏振态最佳工作点。

通过上述的参数讨论分析,算法参数的合理设置为Fth=0.93,Ath=0.80,n=5。

5 系统实验分析

按图1所示结构,搭建了双M-Z周界防护实验装置。系统初始化设置采样频率为10 MHz,采样数据1 Mbyte。系统采用通用光电公司(General Photonics)的PCD-M02型集成PolaRiteⅡ/ⅢPC,该PC采用4个互成45°的波片结构,可以实现任意偏振态向任意偏振态之间的转换。

根据上文分析,设置随机生成数算法参数,分别对系统偏振控制前后的两路检测信号进行采集,实验比较了算法执行前后的300次相关系数的分布情况,如图7所示。由图可见,系统在偏振控制前,两路检测信号的相关系数处于不规律的变化,相关性极差。执行算法3 min后,两路检测信号的相关系数基本维持在0.8以上,平均在0.9左右,且保持稳定。实验表明,以两路检测信号的相关系数作为反馈控制量的随机生成数算法可以有效改善两路检测信号的相关性,提高系统的定位精度。

为了进一步说明该算法的优势,本文与文献中基于两路检测信号相关系数的模拟退火偏振控制算法[5]进行对比,结果发现,使用模拟退火算法时相关系数保持在0.9左右,但是由于模拟退火算法采用了内外循环控制,一次算法历程需要大约1min,而平均搜索到最佳偏振态位置需要10~20个历程,耗时较长,而且模拟退火算法容易陷入局部最优状态而难以搜索到全局最优偏振态位置。

6 结束语

本文提出了基于两路检测信号相关系数的随机生成数偏振控制算法,结合PC对输入偏振态进行实时控制,有效地消除了系统的偏振相位偏移影响。对随机生成数算法的3个关键参数进行了讨论,通过实验验证了各个参数对系统相关性的影响,确定了算法参数的最优值。最后,实验比较了算法执行前后相关系数的分布情况,结果表明,采用随机生成数偏振控制算法可使系统在3min左右搜索到偏振态的最佳位置,使两路检测信号的相关系数保持在0.9左右,两路检测信号的相关性良好。

参考文献

[1]廖俊,张志勇,邵理阳,等.基于FFTW算法的M-Z周界防护系统[J].光通信研究,2015,(4):37-38.

[2]靳志刚,曾周末,封皓.双Mach-Zehnder光纤干涉仪中的遗传偏振控制算法[J].半导体光电,2014,35(4):705-707.

[3]张启业,朱勇,苏洋,等.非理想情况下的实时偏振控制算法[J].激光与光电子学进展,2013,(9):38-44.

[4]封皓,靳世久,曾周末,等.基于琼斯矩阵建模的管道泄漏检测及预警系统的定位误差分析[J].光学学报,2009,29(03):723-727.

[5]张溪默,曾周末,封皓,等.双Mach-Zehnder光纤干涉仪中的模拟退火偏振控制算法[J].激光与红外,2012,42(3):324-330.

[6]Feng Hao,Zhu Lin,Jin Shijiu,et al.Modeling of pipeline leakage detection and prewarning system for location error analysis based on jones matrix[J].Journal of the Japan Petroleum Institute,2009,52(3):114-119.

[7]李永倩,孟祥腾,安琪,等.电光调制器自适应偏振控制系统设计与实现[J].红外与激光工程,2015,44(6):1854-1858.

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

【随机生成】相关文章:

以布尔建模技术随机生成透镜体的方法09-14

随机模式05-16

随机策略05-27

随机特性05-31

随机环境06-12

随机振动07-08

随机网络07-09

随机参数08-13

随机规划08-22

随机生产08-23

上一篇:惠农专项资金下一篇:金融危机防范分析