APP下载

基于遗传算法的自动组卷系统设计与实现

2019-10-21张正龙陈永政李冀明

科学导报·科学工程与电力 2019年41期

张正龙 陈永政 李冀明

【摘  要】在互联网技术高速发展的今天,依然有很多学校使用传统的手工组卷的方式生成试卷,方式组卷无疑是浪费了教师资源,花费了大量时间,对于题目来说有很多主观的随意性。而使用计算机技术就可以更好的解决手工组卷的不定的、有主观的。针对传统组卷局限性,开发了基于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 points = rule.getPointList();

}

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 pointList = rule.getPointList();

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期.

(作者单位:重庆工程学院)