当前位置:教学考试 > 基于遗传算法的在线考试系统的设计与实现

基于遗传算法的在线考试系统的设计与实现

时间:2025-08-02 08:27:30 浏览次数:

摘 要:在线考试系统中最重要的组成部分之一是试题组卷,本文将遗传算法应用于《高级程序设计语言》试题库自动组卷方法中,得出多目标问题求解模型。实践结果表明,遗传算法能有效地解决自动组卷问题,具有较好的使用性能和实用性。

关键词:遗传算法 在线考试系统 自动组卷 在线考试系统

中图分类号:G4 文献标识码:A 文章编号:1673-9795(2013)09(a)-0021-02

传统纸质考试方式很难较准确地反映出学生的实际动手能力,而且纸质考试还具有考试时间长、试题印制数量大、监考改卷人力耗费大等缺点。为充分利用教学资源,减轻教师的工作负担,本文设计并实现了一个实用、高效的《高级程序设计语言》在线考试系统。而智能化自动组卷策略是在线考试系统的核心技术,智能组卷遇到的主要问题是保证生成的试卷具有随机性和合理性的同时,必须最大程度地满足用户的各方面需求。因此,智能组卷问题的实质是一个多目标优化问题,传统数学方法难以求解。本文利用遗传算法作为求解智能组卷问题的策略,取得了较好的实践效果。

1 系统结构与设计

基于“高内聚,低耦合”的思想,本文在对《高级程序设计语言》在线考试系统进行结构设计时,考虑使用三层结构开发。通常意义上的三层结构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。表现层是展现给用户的界面。业务逻辑层是针对具体问题的操作,即对数据业务逻辑处理。数据访问层是直接操作数据库,针对数据的增添、删除、修改、更新、查找等。本文将表现层与数据操作层分离。但有些业务逻辑比较简单的地方还是让表现层直接读取数据,这样更符合效益与成本原则,同时使得编程更灵活。在业务逻辑层,设置了大量的事务类,处理不同的事务逻辑。

在线考试系统由于数据需要长期保存因此,必须引入数据库技术。本系统采用Microsoft SQL Server 2005,在对数据库操作时采用ADO.NET技术。在数据库中设计了以下9张表:管理员信息表、学生信息表、教师信息表、课程信息表、班级信息表、单选题信息表、多选题信息表、判断题信息表、分数记录信息表。另外,在线考试系统还有些数据不需要长期存储的,因此,采用XML文件记录,便于传输和操作。系统建立了3个XML文件,用于考试设置、遗传算法的设置、学生考试过程中备份题目和记录作答情况。

2 系统主要功能的实现方法

系统的主要功能模块包括:登录,题库管理,考试,自动组卷,用户管理。其中组卷部分,通过使用遗传算法,满足试卷难度、题目章节分布、题目完成时间三个目标因素进行组卷,加快了组卷速度,解决了多目标组卷的难题。另外考虑学生考试时,可能会出现系统意外关闭等偶然情况,设计时添加系统自动保存和恢复功能,能够恢复到意外发生前的作答题目和作答答案状态。

2.1 考试

考试是本系统中最复杂的过程,特别是涉及出题部分,考试流程为如下所示。

(1)学生选择考试,系统检查时间,是否在考试时间范围内。若符合条件,执行下一步。

(2)检查学生是否进行过这次考试,若没进行过则执行(3),若已经进行过考试则执行(4)。

(3)系统生成试题,返回给考生,执行(5)。

(4)系统按之前保存的选题和作答进行恢复,返回显示给学生,执行(5)。

(5)考生作答,系统记录作答情况。

(6)考生提交试题,系统返回提交成功信息。

(7)对学生试卷进行评分,并把结果保存。

因此,考试时序图如图1所示。

2.2 自动组卷

本系统采用遗传算法自动组卷,它可以满足复杂的多目标出题。传统随机出题,仅仅是从系统里面随机生成随机数字组成试卷,然后验证试卷是否符合出题要求。这种出题搜索是盲目的,需要搜索大量题目才有可能满足出题条件,所以几乎不可能符合复杂的多目标的出题要求。

而使用遗传算法可以将比较优越的子代留到下一代,然后让其突变,也就是改变少量基因,从而有可能产生更优的一代。将其应用于在线考试系统中,可以把较好的试卷保留下来,微调其中小部分题目,让其有可能变得更好;然后再评价,选出评价高的,让它获得杂交遗传的机会。如果恰巧杂交序列的两个杂交对象一样,也就是这个对象获得完全复制,那再进行变异操作,这点对于在线考试系统实现随机出题是非常重要的。就算不能完成复制,也有可能把较好的基因保留,这样能够提高在线考试系统的出题效果。

在线考试系统遗传算法的实现:

(1)染色体编码(基因串)。

在本文考试系统中,遗传算法的编码方式不是采用传统的01编码,而是采用如下的编码方式:设一张试卷有10道题目,则有10个基因,每个基因用题库中题目号表示,如51,3,21,5,11,6,55,32,44,21即是一个基因串。

(2)产生初代种群。

实现代码如下:

public List GetInitPopulation()//生成设定数目的初代种群

{ List al = new List();

for (int i = 0; i < initNum; i++)

{ al.Add(GetRandomPaper ()); }

return al; }

(3)适应度函数。

public void Evaluation(Paper paper)

{ double deviation = 0;

deviation = LevelEval(paper) * 3000 + TimeEval(paper) + ChapterEval(paper) * 15;

paper.deviation = deviation;

paper.fitness = 1 / (deviation + 1) * 10000; }

其中,LeveLEval是难度评价差异计算函数,TimeEval是时间差异计算函数,ChapterEval是章节分布差异计算函数。 *3000,*15操作是对三个不同的因素差异影响数量级进行调整。差异的倒数为试卷的适应度fitness,*10000操作也是用于调整数量级。由上面函数可以看出,在线考试系统抽题时需要考虑的因素是可以扩展的,只需添加新的差异计算函数就行了。差异越小意味着试卷适应度越高,这样的试卷就是越符合设定的难度、完成时间和章节分布。

(4)选择。

也就是从父代选出交配的对象。在本系统中,选择轮盘法作为选择算子。这样适应度越高,被选择的机会越高,而适应度低的,被选择的机会就低。通过多次轮盘后就产生的交配的序列。

(5)交叉。

通过上面的选择产生的一列交配对队列。本系统采用单点交叉算子。实现代码如下:

public void Crossover(Paper paper1, Paper paper2)

//交叉操作。其中,paper1和paper2表示两个要杂交的对象。

{double d = random.NextDouble();

//以一定的概率交叉,若不交叉,则直接不变遗传到下代。

If (d

{ int m = random.Next(0, paper1.sq.Count - 1); //产生交叉点的位置

int temp = 0;

for (; m < paper1.sq.Count; m++)

{ temp = paper1.sq[m];

//交换交叉点后的所有题目

paper1.sq[m] = paper2.sq[m];

paper2.sq[m] = temp; } }}

(6)变异。

在本系统中,对群中所有个体以事先设定的编译概率判断是否进行变异;对进行变异的个体随机选择变异位进行变异。对于每次选择的变异个体,只选择一个变异位进行变异。本系统的变异率设置为0.3,要高于传统建议的0.1。这是因为对于在线考试系统而言,变异比交叉更为重要。由于在线考试系统收敛得比较快,高变异率有利于进化。

使用变异操作的意义在于,在适应度高的试卷下微调一道题目,产生的结果可能变得更好或者更差。变得更好的试卷,在选择算子选择时更有可能遗传到下一代;而变差的试卷更容易被淘汰,那些没变异的试卷则以介于它们两者之间的可能性遗传到下一代。由此可看出一代将比一代优胜。

在线考试系统就是经过这一系列的过程(选择、交配和突变),产生出不同于初始一代的新一代个体,并一代一代向增加整体适应度的方向发展。每个个体被评价,计算出适应度,两个个体交配,然后突变,产生第三代。周而复始,直到终止条件满足为止。

3 结语

本文设计和开发了一个基于B/S的在线考试系统,并应用遗传算法解决多目标约束条件下的自动组卷问题,实践证明用遗传算法求解组卷问题具有很好的效果。

参考文献

[1]谭浩强.C++程序设计[M].北京:清华大学出版社,2004.

[2]苏成.C++程序设计教程[M].2版.北京:清华大学出版社,2013.

[3]丁振国,胡志芳,朱建新.基于J2EE平台的在线考试系统的设计与实现[J].陕西理工学院学报:自然科学版,2009,25(1):56-61.

[4]张敬敏,曲文龙.离散数学网上考试系统的设计与实现[J].计算机工程与设计,2008,29(8):2143-2145.

相关热词搜索: 在线 遗传 算法 考试 设计