4 系统详细设计
(1)
(2)对于求最小值问题:
对于求最大值问题:
经过对本系统的函数约束的分析,最终得到目标函数为:
其中wi是根据约束的类别的不同而选择不同权值,强约束的权值最大取1,此约束的权值取0.5,弱约束的权值最小取0.1。根据f的定义可知,因而定义适应度函数为:
,其值越大,表示该组卷的方案越满足命题的要求。
4.遗传操作
? 选择:采用适应值比例选择中的轮盘赌的方法进行选择。将种群中的个体按照适应度的值由大到小进行排序,根据个体的适应度来分配其选择概率(适应度越大,被选择的概率越大)。若选择的过程中产生的随机数落在适应值所在的概率区域中,则对应的个体被将被用来执行进化操作。
? 交叉:SGA从群体中随机选择2个染色体,按照固定的交叉率从某一位基因位开始逐位进行互换。若交叉后的染色体中,存在相同题目的情况,可通过在相应题号定义域中随机产生相异的题号替换原有题号。
? 变异:为了完成真正意义上的变异操作,采用两种变异机制。第一种,当染色体中基因值为1的数目不等于期望试卷试题数n时,要求其经过变异后使得被选择试题数与试卷试题数n相同,即通过产生从1到染色体长度L之间的随机数,并将染色体相应位置的基因值变为1或0,直到染色体中基因值为1的数目等于试卷试题数n;第二种,产生1到染色体长度之间的两个不同基因值的变异点,将其基因值进行互换,从而在满足被挑选的试题数等于n的基础上实现了真正意义上的变异。
5.最优保存策略
进行选择、交叉和变异操作后,比较新一代的最好个体与上一代的最好个体的适应度值,如果下降,则以上一代最好个体替换新一代的最差个体。此条件是
21
,
4 系统详细设计
遗传算法收敛的一个重要保证条件。 6.迭代终止条件
满足如下条件将会导致终止进化: ? FITNESS-fitness精度;
? 进化到指定的最大迭代次数。
,其中FITNESS为期望的适应度值,为期望的误差
4.2.4 算法描述
Step1:判断题库中各题型中小于限定抽取次数的试题数都大于试卷相应题型的要求试题数的条件是否满足,若不满足,转Step11;
Step2:定义适应度函数
Step3:随机产生种群数为N的初始化种群,保证每个个体基因值所代表的相应试题的抽取次数都小于限定抽取次数,i=0;
Step4:根据适应度函数计算群体中每个个体的适应度值; Step5:判断算法迭代终止条件是否满足,若满足则转Step10; Step6:根据各个体的适应度值进行选择操作;
Step7:进行交叉操作,保证交叉后同一题型的试题编号互异;
Step8:按照自适应变异概率Pm进行变异操作,保证编译后同一题型的试题编号互异,且保证变异后个体的基因之所代表的相应试题的抽取次数小于限定抽取次数;
Step9:若已得到由N个新个体构成的新一代种群,则执行最佳保护策略,否则转Step6;
Step10:按照同一题型难度系数由大到小的顺序一次输出所选择的试题,并将所选择试题的抽取次数Q——TIMES加1,i++;
Step11:终止程序。
4.3 系统持久层采用iBATIS 4.3.1 iBATIS概述
本系统的持久层选用了流行的iBATIS。
iBATIS,是优秀的O/R Mapping解决方案之一。他的前身是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java
22
4 系统详细设计
的持久层框架。
[15]
iBATIS提供的持久层框架包括SQL Maps和Data Access Objects
(DAO),同时还提供一个利用这个框架开发的JPetStore实例。
iBATIS一词来源于“internet”和“abates”的组合,是一个由Clinton Begin在2001年发起的开放源代码项目。最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO),同时还提供一个利用这个框架开发的JPetStore实例。
iBATIS目前提供了三种语言实现的版本,包括:Java、.NET以及Ruby。图4.5是iBATIS的架构图:
图4.5 iBATIS架构图
使用iBATIS提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate实现ORM而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL语句,而iBATIS则要求开发者编写具体的SQL语句。相对Hibernate等“全自动”ORM机制而言,iBATIS以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。作为“全自动”ORM 实现的一种有益补充,iBATIS的出现显得别具意义。
4.3.2 部分数据库表
系统采用MySQL数据库,基于此数据库的表结构如下: 1.考生基础信息表
表4.1 考生基础信息表 字段名称 描述 类型 23
长度 4 系统详细设计
字段名称 Id Name Sex Birth identity_id unit_first unit_second Unit Photo Checked deleteFlag 描述 类型 长度 20 20 20 20 20 60 60 60 -- 1 1 主键:序号(自增1) Bigint 考生姓名 考生性别 考生出生时间 考生身份ID 第一级单位 第二级单位 自定义单位 考生照片 审核标记 删除标记 Varchar Varchar Varchar Varchar Varchar Varchar Varchar Mediumblob Bigint Bigint
2.试题信息表
表4.2 试题信息表 字段名称 Id question_type question_description question_subject question_level 描述 主键:序号(自增1) 试题类型 试题内容 试题科目 试题难度 类型 Bigint Bigint Varchar Bigint Bigint 长度 20 20 200 20 20
3.考场分配表
表4.3 考场分配表
字段名称 Id exam_id examinee_id stage_id room_id test_date 描述 考生分配号 考试ID 考生身份ID 场次 考场 考试时间 类型 Bigint Bigint varchar Bigint Bigint varchar 长度 20 20 20 20 20 20 24
4 系统详细设计
Flag 删除标记(def: 0) Bigint 1
4.考试信息表
表4.4 考试信息表
字段名称 Id exam_name exam_remark exam_unit exam_subject exam_type begin_time end_time exam_score exam_time print_type exam_again forbid_use 描述 主键:序号(自增1) 考试名称 考试简介 组织单位 考试科目 类型 bigint varchar varchar varchar bigint 长度 20 20 100 20 20 1 20 20 4 4 1 1 1 考试方式(def: 0)(暂不用) bigint 开始时间 结束时间 合格分数 考试时长 打印方式 是否为补考(def: 0) 禁用标记位(def: 0) varchar varchar bigint bigint bigint bigint bigint
5.考生答案验证表
表4.5 考生答案验证表 字段名称 Id exam_id examinee_id question_id answer_isright answer_num test_time 描述 主键:序号(自增1) 考试ID 考生身份ID 试题ID 答题对错标记 答题序号 考试时间 类型 bigint bigint varchar bigint bigint varchar varchar 长度 20 20 20 20 20 20 20
25