基于遗传算法的自动组卷系统设计与实现
2019-10-21张正龙陈永政李冀明
张正龙 陈永政 李冀明
【摘 要】在互联网技术高速发展的今天,依然有很多学校使用传统的手工组卷的方式生成试卷,方式组卷无疑是浪费了教师资源,花费了大量时间,对于题目来说有很多主观的随意性。而使用计算机技术就可以更好的解决手工组卷的不定的、有主观的。针对传统组卷局限性,开发了基于SSM架构自动组卷系统,通过遗传算法生成试卷,大大的减轻了教师的工作量,提高了试卷的准确性,科学性。
【关键词】组卷;SSM;遺传算法
1.绪论
随着教育水平提高和网络发展,2019年高考人数突破1000万,还不算初高中大学的人数,国内教师总人数达到了1600万,即使有这么多教师,而教师在国内的缺口依然比较大,教师资源非常紧张,由此可知在教育行业对一款能够节省教师时间,提高组卷效率的软件有着迫切的需求。但在如此大的需求下,市面上却没有几款自动组卷系统,更多的却是在线答题系统等网上练习系统和一些教辅系统,因此自动组卷的研究有较高实用价值。
2.功能设计
拟开发基于SSM架构的自动组卷系统,提高了教师的工作效率,节省了教师的时间,同时提高了试卷的科学性和准确性,极大地提高教师组卷效率。本系统主要功能模块有用户信息模块、教师信息模块、院系信息模块、班级信息模块、课程信息模块、角色信息模块、试题类型模块、知识点信息模块、试卷信息模块、试题类型模块、组卷规则模块、手动组卷信息模块、自动组卷知识点模块、自动组卷试题绑定模块等。
3.遗传算法自动组卷的功能实现
(1)初始化种群个数
public Population(int size,boolean init,Rule rule){
init(size);
if(init){
Paper paper;
Random random = new Random();
for(int i = 0;i < size;i++){
paper = new Paper();
paper.setId(i + 1);
while(paper.getTotalScore()!= rule.getExceptScore()){
paper.clearQuestion();
List
}
paper.getKpCoverage(rule);
paper.setAdaptationDegree(rule,Global.KP_WEIGHT,Global.DIFFICULTY_WEIGHT);
paperList.add(paper);
}
}
}
(2)选择
public static Population evolvePopulation(Population population,Rule rule){
Population newPop = new Population(population.size());
int elitismOffset;
//精英主义
if(ELITISM){
elitismOffset = 1;
//保留上一代最优秀的个体
Paper fitness = population.getFitness();
fitness.setId(0);
newPop.setPaper(0,fitness);
}
//种群交叉
for(int i = elitismOffset;i < newPop.size();i++){
Paper paper1 = select(population);
Paper paper2 = select(population);
while(paper1.getId()== paper2.getId()){
paper2 =select(population);
}
}
return population;
}
(3)交叉算子
public static Paper crossover(Paper paper1,Paper paper2,Rule rule){
Paper child = new Paper(paper1.getQuestionSize());
int s1 =(int)(Math.random()* paper1.getQuestionSize());
int s2 =(int)(Math.random()* paper1.getQuestionSize());
int start = Math.min(s1,s2);
int end = Math.max(s1,s2);
for(int i = start;i < end;i++){
child.saveQuestion(i,paper1.getQuestion(i));
}
List
for(int i = 0;i < start;i++){
if(!child.containsQuestion(paper2.getQuestion(i))){
child.saveQuestion(i,paper2.getQuestion(i));
}else {
int type = getTypeByIndex(i,rule);
}
}
for(int i = end;i < paper2.getQuestionSize();i++){
if(!child.containsQuestion(paper2.getQuestion(i))){
child.saveQuestion(i,paper2.getQuestion(i));
}else {
int type = getTypeByIndex(i,rule);
}
}
return child;
}
參考文献:
[1] 陈韶键.深入理解spring boot 机械工业出版社[M].2016.
[2] https://www.jianshu.com/p/ae5157c26af9 [DB/OL].
[3] 张峰.应用SpringBoot改变web应用开发模式[J].科技创新与应用.2017年23期.
(作者单位:重庆工程学院)