经过详细分析组卷过程中的各项约束条件,以试卷难度系数、知识点覆盖率、题型、题量、总分为依据,采用遗传算法,设计并实现基于SSM框架的自动组卷系统。以遗传算法和FreeMarker模板技术为支撑,结合对科目、知识点、题型、试题模块的管理,系统提供的自动生成Word格式试卷的功能,能有效解决教师在实际中组卷的需求。系统目前已经部署并投入教学使用,并取得了良好的教学效果。
《计算机科学与探索》是由中国电子科技集团公司主管、华北计算技术研究所主办的国内外公开发行的计算机学报级高级学术期刊,中国计算机学会会刊。报道计算机(硬件、软件)各学科具有创新性、前沿性、导向性、开拓性及探索性的科研成果。内容包括高性能计算机,体系结构、并行处理,计算机科学新理论、算法设计与分析、人工智能与模式识别、系统软件,软件工程、数据库、计算机网络、信息安全、计算机图形学与计算机辅助设计、虚拟现实、多媒体技术及交叉学科的相互渗透和新理论的衍生等。荣获工业和信息化部优秀科技期刊;中国计算机学会优秀会刊。
1 背景
隨着计算机技术的快速发展,传统人工组卷方式已经落后,计算机组卷成为新型的教学辅助方式。计算机组卷是按照教学要求,由计算机自动从试题库中选择试题,组成符合知识点分布、题型分布、难度分布、分数分布要求的试卷[1]。计算机自动组卷,组卷算法是关键。该文以难度系数、知识点覆盖率、题型、题量、总分五个指标为约束条件,采用遗传算法进行组卷。该系统主要实现了自动组卷、手动组卷和导出Word格式试卷功能,同时提供对科目、知识点、题型、题目、试卷的操作,帮助用户有效便捷地管理组卷过程。
2 自动组卷系统的功能模块设计
根据实际使用情况,系统有管理员、教师、试题录入人员三种用户角色,不同的用户角色对应不同的功能权限。经过分析用户组卷以及用户使用系统的流程,用户的行为主要有:管理科目、知识点、题型、试题信息;管理试卷信息、自动生成试卷、手动生成试卷、导出Word格式试卷;管理员、教师管理下属用户;管理员管理系统信息、公告信息;用户管理个人信息。根据以上分析,该系统功能结构如图1所示。
3 基于SSM架构的系统体系结构设计
3.1 关键技术及作用
SSM是Spring、SpringMVC、MyBatis三大框架的简称。作为目前较为流行的Web框架,SSM框架有许多优良的特性,使其成为当前轻量级Web应用领域最优秀的框架组合之一。
Spring是应用于设计层面的框架。它不解决开发过程中具体的功能点,而从系统设计层面出发,解决代码的耦合问题。Spring在系统中的主要作用有:1)提供容器功能,管理Bean的生命周期,整合SpringMVC和 MyBatis框架[2];2)通过依赖注入,管理代码间的依赖关系;3)通过AOP切面,独立管理事务、日志功能;4)整合EhCache缓存框架管理缓存;5)整合dbcp数据库连接池管理数据库连接。
SpringMVC是Spring框架基于MVC设计模型的用于构建Web应用程序的一个模块[3],主要作用有:1)将请求映射到处理器;2)辅助实现上传文件功能;3)整合Hibernate Validator验证用户输入合法性;4)解析并渲染视图,最终返回响应页面。
MyBatis是一个基于Java的数据持久层框架[4],实现了对数据库中数据的CRUD操作。
MyBatis通过XML配置文件或者Java程序获得连接数据库的SqlSession对象,该系统采用Java程序形式,将其与Spring框架整合开发。其中,最重要的是mapper映射器,mapper映射器中最主要的是SQL映射语句。这些映射语句以注解或者SQL映射文件的形式存在,通过select、insert、update、delete等元素,执行编写的SQL语句。
3.2 体系结构设计
该系统采用分层式体系结构,分为View视图层、Controller控制层、Service服务层、Dao数据持久层、Model模型层。下文结合系统中自动生成试卷功能的实现,展示架构中各个层的任务与功能。
3.2.1 View视图层
View视图层采用JSP,JQuery,BootStrap技术。BootStrap框架用来搭建静态页面;JQuery负责发送AJAX请求,获得后台数据并将其渲染进页面;JSP技术实现动态网页效果。在自动生成试卷页面中,提供试卷标题、难度系数、题型个数、题型分数、题型顺序供用户设置,并将其作为自动组卷功能的入参,页面效果如图2所示。本页面在以下3个方面做出优化:1)在页面中多处使用AJAX异步交互技术,刷新局部数据时,不用刷新整个页面;2)根据数据库中已有的题目数量,限制用户在一定范围内选择,保证了执行遗传算法时题目的充足性;3)用户点击生成试卷按钮时,汇总呈现所选择的信息,经过二次确认后再发起自动生成试卷请求。
3.2.2 Controller控制层
从View层发起的自动生成试卷请求:testPaper/generatePaperAuto,会被web.xml中定义的servlet拦截,并将请求交给SpringMVC框架中的核心处理器DispatcherServlet。核心处理器请求HandlerMapping映射器,返回Handler对象,再请求HandlerAdapter适配器,找到控制类中的方法。映射关系通过注解在控制类中的方法上配置,注解如下:
@RequestMapping(value="/testPaper/generatePaperAuto",method=RequestMethod.POST)
组卷控制类中的自动组卷方法负责处理自动组卷功能的业务流程。业务处理流程如下:
1)得到前台用户选择的科目Id、知识点列表、题型列表,根据这些条件查找试题,组成题库:questionDB=questionService.getQues(sId,kPList,qTList);
2)根据试卷id、总分、难度系数、知识点列表,题型列表初始化用户期望试卷:expectedExam=new TempExam(eId,totalScore,paperDiffLev,kpsSet,qtList);
3)将以上方法返回的参数questionDB、expectedExam,作为遗传算法的入参,进行组卷:resultExam=testPaperServcie.geneticAlgorithm(questionsDB,expectedExamA);
4)将生成的试卷信息存入数据库:examService.examInToDB(resultExam);
5)將数据库中的试卷信息导出成Word格式试卷:examService.exportWord(eId);
6)返回试卷生成成功信息
可以看出,控制层只是调用Service层中的方法,而没有方法的具体实现。Service服务层对象通过@Autowired注解,被注入控制器类中,这避免了实例化带来的代码耦合问题。
3.2.3 Service服务层
Service服务层分为Service接口与ServiceImpl实现类,控制层直接调用Service接口但不用关心此接口的具体实现。这样的分离隐藏了代码的实现细节,具有封装性、高内聚性的特点。Spring框架通过@Service注解将ServiceImpl注册成服务类,存放于Spring容器中,供控制类调用。
以ExamService中插入试卷方法的具体实现为例:插入试卷信息,需要向数据库中exam、exam_question、exam_questiontype三张表中插入相应数据,考虑到数据一致性的问题,使用Spring中的@Transaction注解,实现对插入试卷信息功能的事务管理。向数据库中插入数据的方法在Dao层中实现,因此ExamService需调用Dao层中examMapper对象的insert方法,Dao层的对象实例同样通过@Autowired注解注入ServiceImpl类中。
3.2.4 Dao数据访问层
数据访问层主要对数据库进行操作,并将处理结果封装成实体对象返回给服务层[5]。数据访问层采用MyBatis框架,通过Mapper.xml映射文件中的SQL语句,对数据库进行基本的 CRUD操作。通过在Spring配置文件中声明Dao层所在的包名称,Spring容器实现对Dao层中的Mapper接口以及Mapper映射文件的管理。Mapper接口与Mapper.xml映射文件一一对应,以方法名为id所对应的配置内容就是操作数据库的SQL语句。例如examMapper接口中的insert(Exam exam)方法,在examMappper.xml映射文件中,有以下映射语句与其对应: insert sql
3.2.5 Model模型层
模型层中存放的是与数据库中表相对应的POJO(Plan Ordinary Java Object),表中的字段对应模型中的成员变量。模型对象负责在数据库中存取数据,除此之外,层与层之间的数据传输也大量使用模型对象。
4 系统核心功能的实现
该系统的核心功能有:自动、手动生成试卷、导出Word格式试卷。其他诸如管理科目、知识点、题型、题目的功能都是为这两个功能提供服务。
4.1 遗传算法实现自动组卷功能
遗传算法是模拟达尔文生物进化论,从而得到问题最优解的算法。传统遗传算法容易陷入局部极值,出现过成熟的情况[6]。该系统针对组卷这一实际场景进行调参优化,主要体现在:对题目采取实数编码、对试卷采取分段实数编码、有条件产生初始种群、变异算子的有效选择。算法关键步骤如下所示:
1)设计基因编码:传统的遗传算法编码使用二进制编码,即用一串二进制数表示每个基因。该系统中改进遗传算法,采用实数编码,用一个唯一实数表示每道题目。
2)初始种群的设计与实现:该系统在一定条件下产生种群。遗传算法的实现封装在geneticAlgorithm方法中,方法接受两个参数:questionDB题库、expectExam期望试卷。产生种群操作,便是按照用户期望的试卷信息,在满足总分以及各题型数目的条件下,从questionDB中随机选择题目,形成初始种群。
3)设计适应度函数:适应度函数用来评价试卷个体的质量。适应度用浮点数表示,适应度值越大,对环境的适应能力越强,被选择繁殖后代的几率越大[7]。因为在产生初始种群时已经考虑过题型、题量、试卷总分,因此现在只需要考虑试卷难度系数以及知识点覆盖率。题目的难易等级[8]设计为5级:很容易、容易、中等、困难、很困难,分别用5个0-1的小数表示。试卷难度系数P=第i题的难易等级值×分值/总分。知识点覆盖率R=试卷中已包含的知识点数M/用户期望包含的知识点个数N[9]。适应度与知识点覆盖率成正比;与试卷难度系数和用户期望的难度系数之差的绝对值成反比,适应度函数如下所示:
[f=1-1-R*f1-EP-p*f2]
其中f1和f2分别代表试卷知识点覆盖率的权重以及试卷难度系数的权重,EP代表用户期望的适应度。
4)算子的设计与实现:遗传算法共有选择、交叉、变异三种算子。选择算子的作用是从当前群体中选出优良个体,使它们有机会作为父代,产生后代个体[10]。该系统使用轮盘赌算法挑选试题,适应度越大的个体被选中的概率越大。交叉是按照题型对两套试卷中的题目进行交换操作,整张试卷即表现为分段多点交叉。变异操作是随机对试卷中的一道题目进行变异,系统改进变异后算子的选择操作:变异后的题目要求和原题目题型相同、题目id不同、知识点属于用户期望知识点集合与试卷中不存在知识点集合的交集。
遗传算法实现伪代码如下:
geneticAlgorithms(questionDB,expectExam)//入参为题库和期望试卷
count=1;//迭代计数器
initMass(30,expectedExam,questionDB);//初始种群,种群个体数目为30
while(种群中个体适应度未达到期望适应度))
count达到最大迭代次数无结果,退出
种群数量<=1,退出
select(unitList,20);//选择,选择后的种群大小为20
cross(unitList,15,expectedExam);//交叉,交叉后的種群大小为15
if(种群中有个体适应度达到期望适应度) break;
change(unitList,questionDB,expectedExam);//变异
4.2 导出Word格式试卷功能的设计与实现
该系统采用FreeMaker模板技术,实现生成Word格式试卷的功能,该功能实现流程如下:1)制作Word模板,将需要改变的地方用占位符表述,保存为ftl(FreeMarker模板文件)类型文件;2)查询所需数据;3)处理包含图片的试题信息:在ftl文件编码时,需要将图片信息以base64编码存储在ftl文件中,文件末尾规定着各种资源的引用位置,而实际展示图片的body部分只是做一个引用。因此,ftl文件需要改动三个地方:base64编码部分${imagesBase64},声明资源引用位置 ${imagesXmlHrefString},body中的引用代码。处理图片信息,主要就是处理以上三个地方;4)用数据替换占位符,并写入Word模板文件中。
5 结束语
该文描述了以遗传算法为核心的基于SSM框架的自动组卷系统的设计以及实现过程。通过一系列功能模块,系统实现了对组卷过程的有效管理。目前该系统各模块功能运行良好,但是关于试题难易等级的设置,未有充足的反馈信息来支撑。因此,试题反馈模块以及进一步的组卷算法优化是组卷系统未来需要考虑的。
参考文献:
[1] 黄国政. 基于遗传算法的自动组卷系统的设计与实现[D]. 南京: 南京理工大学, 2008.
[2] 李洋. SSM框架在Web应用开发中的设计与实现[J]. 计算机技术与发展, 2016, 26(12): 190-194.
[3] 邹红霆. 基于SSM框架的Web系统研究与应用[J]. 湖南理工学院学报: 自然科学版, 2017, 30(1): 39-43.
[4] 任晓鹏, 赵文兵, 张春平. 基于框架的Web系统开发研究[J]. 计算机工程与设计, 2010, 31(4): 772-775.
[5] 魏书寒. 基于SSM框架的图书管理系统的设计与实现[J]. 工业控制计算机, 2017, 30(7): 133-134.
[6] 李勇, 曹广益, 朱新坚. 一种基于复合交叉的实数编码遗传算法[J]. 计算机仿真, 2006(6).
[7] 于淼, 王日宏. 改进遗传算法在自动组卷中的应用研究[J]. 计算机工程与应用, 2008(25): 236-238.
[8] 柳浪涛, 谷林. 自动组卷系统试题难度和知识点覆盖控制算法[J]. 西安工程大学学报, 2015, 29(3): 320-324.
[9] 黄艳峰, 陈涛. 基于改进遗传算法的智能组卷系统的设计与实现[J]. 煤炭技术, 2009, 28(10): 150-151.
[10] 夏爱月. 基于遗传算法的自动组卷系统研究与实现[J]. 电脑编程技巧与维护, 2009(2): 94-95.